From cfc513043c5830b5a967733066068c7097b42e3c Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Wed, 15 Aug 2007 21:34:53 +0000
Subject: [PATCH] This commit is a step toward getting OpenDS internationalized. There are still issues to be resolved before we can declare that we are internationalized but this commit covers the bulk of changes needed at this time.

---
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPConnectionHandler.java                    |    5 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java                             |   33 
 opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactIA5EqualityMatchingRule.java                                             |   19 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/CategoryTest.java                                              |   65 
 opendj-sdk/opends/src/server/org/opends/server/api/ErrorLogPublisher.java                                                               |   30 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/DependencyConfigChangeListener.java                                         |   28 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/LabelFieldDescriptor.java                                                     |   12 
 opendj-sdk/opends/src/server/org/opends/server/core/EntryCacheConfigManager.java                                                        |   68 
 opendj-sdk/opends/src/messages/messages/sync.properties                                                                                 |  172 
 opendj-sdk/opends/src/server/org/opends/server/replication/plugin/Historical.java                                                       |   19 
 opendj-sdk/opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java                                                         |   16 
 opendj-sdk/opends/src/server/org/opends/server/extensions/VirtualStaticGroup.java                                                       |  109 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthenticationNotSupportedException.java                                    |    6 
 opendj-sdk/opends/src/server/org/opends/server/admin/AliasDefaultBehaviorProvider.java                                                  |    5 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/InstallReviewPanel.java                                             |  121 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/AbandonOperationTestCase.java                               |    4 
 opendj-sdk/opends/src/server/org/opends/server/core/UnbindOperationBasis.java                                                           |   18 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/AdminClientException.java                                                   |    7 
 opendj-sdk/opends/src/server/org/opends/server/core/CertificateMapperConfigManager.java                                                 |   59 
 opendj-sdk/opends/src/server/org/opends/server/core/SASLConfigManager.java                                                              |   56 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/SplashScreen.java                                                                |    5 
 opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactIA5SubstringMatchingRule.java                                            |   25 
 opendj-sdk/opends/src/server/org/opends/server/util/args/FileBasedArgument.java                                                         |   51 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/IfAbsentTag.java                                                          |   35 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/InProcessServerController.java                                              |   32 
 opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java                                                               |    6 
 opendj-sdk/opends/src/server/org/opends/server/api/AccountStatusNotificationHandler.java                                                |    9 
 opendj-sdk/opends/src/server/org/opends/server/schema/PostalAddressSyntax.java                                                          |   20 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java      |   16 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapper.java                                |   56 
 opendj-sdk/opends/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java                                                     |    6 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/MessageTest.java                                        |  105 
 opendj-sdk/opends/src/server/org/opends/server/controls/ServerSideSortResponseControl.java                                              |   15 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CertificateDialog.java                                                        |  115 
 opendj-sdk/opends/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandler.java                                 |   38 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Tag.java                                                                  |    5 
 opendj-sdk/opends/src/server/org/opends/server/config/ConfigException.java                                                              |   25 
 opendj-sdk/opends/src/server/org/opends/server/config/IntegerConfigAttribute.java                                                       |  306 
 opendj-sdk/opends/src/server/org/opends/server/types/Schema.java                                                                        |  258 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/BrowseActionListener.java                                                  |   17 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.java                                                         |    8 
 opendj-sdk/opends/src/server/org/opends/server/api/DebugLogPublisher.java                                                               |    4 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java                                                        |   15 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java                                         |    3 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciException.java                                               |   25 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java                                          |   67 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ProgressDialog.java                                                           |   60 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java                                               |   61 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java                                                       |   20 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JebException.java                                                           |   29 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java              |    3 
 opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java                                                   |   71 
 opendj-sdk/opends/src/server/org/opends/server/tools/VerifyIndex.java                                                                   |  156 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternIP.java                                                  |   63 
 opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicy.java                                                                 |  182 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java                    |   13 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java                         |  147 
 opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java                                                  |   64 
 opendj-sdk/opends/src/server/org/opends/server/types/Operation.java                                                                     |   28 
 opendj-sdk/opends/src/server/org/opends/server/tools/ManageAccount.java                                                                 |  486 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/UpgraderReviewPanel.java                                             |   31 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyResponseProtocolOp.java                                             |   54 
 opendj-sdk/opends/src/server/org/opends/server/replication/protocol/ErrorMessage.java                                                   |   22 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidator.java                                         |   13 
 opendj-sdk/opends/src/messages/messages/core.properties                                                                                 | 1652 +
 opendj-sdk/opends/src/server/org/opends/server/core/ExtendedOperationConfigManager.java                                                 |   49 
 opendj-sdk/opends/src/server/org/opends/server/schema/TeletexTerminalIdentifierSyntax.java                                              |   66 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilterList.java                                         |   31 
 opendj-sdk/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java                                                        |  803 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/ConcurrentModificationException.java                                        |    5 
 opendj-sdk/opends/src/server/org/opends/server/util/args/SubCommandArgumentParser.java                                                  |  269 
 opendj-sdk/opends/src/server/org/opends/server/controls/MatchedValuesControl.java                                                       |   20 
 opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeOrderingMatchingRule.java                                          |    7 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1OctetString.java                                                      |   50 
 opendj-sdk/opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java                                                    |    3 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/MakeLDIFException.java                                                    |   29 
 opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyErrorType.java                                                    |   32 
 opendj-sdk/opends/src/server/org/opends/server/types/operation/PostOperationOperation.java                                              |   15 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractorCliHelper.java                                            |   13 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/IllegalManagedObjectNameException.java                                      |   15 
 opendj-sdk/opends/src/server/org/opends/server/backends/task/Task.java                                                                  |  176 
 opendj-sdk/opends/src/server/org/opends/server/schema/RFC3672SubtreeSpecificationSyntax.java                                            |   26 
 opendj-sdk/opends/src/server/org/opends/server/extensions/MD5PasswordStorageScheme.java                                                 |   54 
 opendj-sdk/opends/src/server/org/opends/server/backends/RootDSEBackend.java                                                             |  181 
 opendj-sdk/opends/src/server/org/opends/server/controls/GetEffectiveRights.java                                                         |   23 
 opendj-sdk/opends/src/server/org/opends/server/config/ConfigAttribute.java                                                              |   84 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Installation.java                                                                |   28 
 opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java                                                |   81 
 opendj-sdk/opends/src/server/org/opends/server/core/ModifyOperationBasis.java                                                           |   38 
 opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringSubstringMatchingRule.java                                           |   29 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetAttr.java                                                 |   24 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/LastNameTag.java                                                          |   14 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AbandonRequestProtocolOp.java                                             |   10 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDB.java                                                    |   79 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeLauncher.java                                                    |   33 
 opendj-sdk/opends/src/server/org/opends/server/admin/DecodingException.java                                                             |    4 
 opendj-sdk/opends/src/server/org/opends/server/schema/AciSyntax.java                                                                    |   25 
 opendj-sdk/opends/src/server/org/opends/server/admin/Tag.java                                                                           |    5 
 opendj-sdk/opends/src/server/org/opends/server/core/IdentityMapperConfigManager.java                                                    |   61 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java                                                   |   47 
 opendj-sdk/opends/build.xml                                                                                                             |  149 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java                                                         |  116 
 opendj-sdk/opends/src/server/org/opends/server/schema/UUIDSyntax.java                                                                   |   37 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusCli.java                                                           |  299 
 opendj-sdk/opends/src/server/org/opends/server/types/operation/PluginOperation.java                                                     |    7 
 opendj-sdk/opends/src/server/org/opends/server/core/LogRotationPolicyConfigManager.java                                                 |   50 
 opendj-sdk/opends/src/server/org/opends/server/tools/RebuildIndex.java                                                                  |  142 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/ShortCircuitPlugin.java                                  |   43 
 opendj-sdk/opends/src/server/org/opends/server/extensions/JMXAlertHandler.java                                                          |   42 
 opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java                                                    |    6 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionProgressStep.java                                              |   38 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/NetworkGroupTest.java                                       |    9 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/SeverityTest.java                                              |  162 
 opendj-sdk/opends/src/server/org/opends/server/api/SynchronizationProvider.java                                                         |    3 
 opendj-sdk/opends/src/server/org/opends/server/core/WorkflowImpl.java                                                                   |   11 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/PresenceTag.java                                                          |   34 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SuffixesToReplicatePanel.java                                       |   56 
 opendj-sdk/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java                                                     |  166 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java        |   16 
 opendj-sdk/opends/src/server/org/opends/server/types/NamedCharacterSet.java                                                             |   46 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java                                            |    7 
 opendj-sdk/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java                                                         |   30 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeWizardStep.java                                                  |   21 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java                                               |   10 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ExtendedRequestProtocolOp.java                                            |   28 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/DummyAlertHandler.java                                |    8 
 opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ListenerThread.java                                                   |   13 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java                                        |   59 
 opendj-sdk/opends/src/server/org/opends/server/types/OpenDsException.java                                                               |  119 
 opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java                                                            |    8 
 opendj-sdk/opends/src/server/org/opends/server/schema/TelexNumberSyntax.java                                                            |   68 
 opendj-sdk/opends/src/server/org/opends/server/schema/ObjectClassSyntax.java                                                            |  322 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataException.java                                                           |   25 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackupManager.java                                                          |  233 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java                              |   17 
 opendj-sdk/opends/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidator.java                                      |   17 
 opendj-sdk/opends/src/server/org/opends/server/api/AttributeSyntax.java                                                                 |    6 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java                                                                  |  182 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliGlobalAdmin.java                                          |   92 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RebuildJob.java                                                             |   97 
 opendj-sdk/opends/src/server/org/opends/server/util/StaticUtils.java                                                                    |  139 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerWriter.java                                                     |   27 
 opendj-sdk/opends/src/server/org/opends/server/tasks/InitializeTask.java                                                                |   25 
 opendj-sdk/opends/src/server/org/opends/server/tasks/ShutdownTaskThread.java                                                            |    5 
 opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/ui/ConfirmUninstallPanel.java                                            |   70 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciTargets.java                                                 |   98 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPToolUtils.java                                                                 |   14 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java                                    |   21 
 opendj-sdk/opends/src/server/org/opends/server/api/plugin/StartupPluginResult.java                                                      |   48 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java                                          |   42 
 opendj-sdk/opends/src/server/org/opends/server/types/operation/PostResponseOperation.java                                               |    6 
 opendj-sdk/opends/src/server/org/opends/server/util/LDIFReader.java                                                                     |  285 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java                                                                |  256 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java                                                      |   22 
 opendj-sdk/opends/src/server/org/opends/server/admin/InstantiableRelationDefinition.java                                                |    5 
 opendj-sdk/opends/src/server/org/opends/server/core/AlertHandlerConfigManager.java                                                      |   64 
 opendj-sdk/opends/src/server/org/opends/server/schema/AuthPasswordExactEqualityMatchingRule.java                                        |    7 
 opendj-sdk/opends/src/server/org/opends/server/schema/IntegerOrderingMatchingRule.java                                                  |   73 
 opendj-sdk/opends/src/messages/messages/admin.properties                                                                                |  193 
 opendj-sdk/opends/src/server/org/opends/server/schema/DistinguishedNameSyntax.java                                                      |   25 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java          |    3 
 opendj-sdk/opends/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java                                           |    3 
 opendj-sdk/opends/src/server/org/opends/server/schema/DirectoryStringFirstComponentEqualityMatchingRule.java                            |    2 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetFilter.java                                               |   12 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java                                               |   10 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java                                                           |   54 
 opendj-sdk/opends/src/server/org/opends/server/controls/MatchedValuesFilter.java                                                        |  133 
 opendj-sdk/opends/src/server/org/opends/server/core/SchemaConfigManager.java                                                            |  243 
 opendj-sdk/opends/src/messages/messages/extension.properties                                                                            | 1736 +
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/ExtOp.java                                                      |    5 
 opendj-sdk/opends/src/server/org/opends/server/schema/ProtocolInformationSyntax.java                                                    |   30 
 opendj-sdk/opends/src/server/org/opends/server/tasks/ExportTask.java                                                                    |  138 
 opendj-sdk/opends/src/server/org/opends/server/schema/UUIDEqualityMatchingRule.java                                                     |   41 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddRequestProtocolOp.java                                                 |   27 
 opendj-sdk/opends/src/server/org/opends/server/admin/PropertyNotFoundException.java                                                     |    4 
 opendj-sdk/opends/src/server/org/opends/server/api/CertificateMapper.java                                                               |    4 
 opendj-sdk/opends/src/server/org/opends/server/extensions/GSSAPIStateInfo.java                                                          |   53 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/GUIDTag.java                                                              |   24 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionLauncher.java                                                  |   24 
 opendj-sdk/opends/src/messages/messages/replication.properties                                                                          |  186 
 opendj-sdk/opends/src/messages/messages/schema.properties                                                                               |  917 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ExternalTools.java                                                          |    5 
 opendj-sdk/opends/src/server/org/opends/server/schema/OctetStringSyntax.java                                                            |   25 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPCompare.java                                                                   |  186 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiUserInteraction.java                                                       |   47 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationCache.java                                                 |   84 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallLauncher.java                                                   |   46 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchRequestProtocolOp.java                                              |   76 
 opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java                                                     |   61 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusPanelController.java                                               |  234 
 opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactOrderingMatchingRule.java                                                |    3 
 opendj-sdk/opends/src/server/org/opends/server/plugins/EntryUUIDPlugin.java                                                             |   19 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearchOptions.java                                                             |    7 
 opendj-sdk/opends/src/server/org/opends/server/protocols/internal/InternalClientConnection.java                                         |   28 
 opendj-sdk/opends/src/server/org/opends/server/extensions/FingerprintCertificateMapper.java                                             |   60 
 opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java                               |   50 
 opendj-sdk/opends/src/server/org/opends/server/types/operation/PreOperationBindOperation.java                                           |    5 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java                                          |   15 
 opendj-sdk/opends/src/server/org/opends/server/schema/CertificateListSyntax.java                                                        |   25 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/ServerSettingsPanel.java                                            |   63 
 opendj-sdk/opends/src/server/org/opends/server/tools/StopDS.java                                                                        |  217 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java         |   11 
 opendj-sdk/opends/src/server/org/opends/server/api/TrustManagerProvider.java                                                            |    3 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPMessage.java                                                          |   41 
 opendj-sdk/opends/src/server/org/opends/server/tasks/RestartTaskThread.java                                                             |    5 
 opendj-sdk/opends/src/server/org/opends/server/backends/BackupBackend.java                                                              |  179 
 opendj-sdk/opends/src/server/org/opends/server/loggers/ErrorLogger.java                                                                 |  148 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ProtocolOp.java                                                           |   57 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Boolean.java                                                          |   60 
 opendj-sdk/opends/src/server/org/opends/server/types/SearchFilter.java                                                                  |  585 
 opendj-sdk/opends/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java                                                |  153 
 opendj-sdk/opends/src/server/org/opends/server/types/operation/PreOperationOperation.java                                               |   15 
 opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TraceSettings.java                                                         |   19 
 opendj-sdk/opends/src/server/org/opends/server/schema/UTCTimeSyntax.java                                                                |  171 
 opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java                                                       |   69 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java                          |   16 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/URLWorker.java                                                              |    4 
 opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java                                                     |    6 
 opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationServerListener.java                                        |    6 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliReturnCode.java                                           |   60 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/CleanerConfigDeleteListener.java                                            |   27 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/OperationTestCase.java                                      |    2 
 opendj-sdk/opends/src/messages/messages/third_party.properties                                                                          |   54 
 opendj-sdk/opends/src/server/org/opends/server/types/RDN.java                                                                           |   84 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/RemoteReplicationPortsPanel.java                                    |   19 
 opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java                                                 |   93 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java                                                         |  351 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java                             |   53 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java                              |    5 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexRebuildThread.java                                                     |   96 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java                   |    5 
 opendj-sdk/opends/src/server/org/opends/server/api/PasswordGenerator.java                                                               |    3 
 opendj-sdk/opends/src/server/org/opends/server/types/CancelledOperationException.java                                                   |   24 
 opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectNotFoundException.java                                                |    8 
 opendj-sdk/opends/src/server/org/opends/server/tools/ConfigureWindowsService.java                                                       |  110 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/OperationOutput.java                                                        |   37 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/AuthenticationData.java                                                |    2 
 opendj-sdk/opends/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java                                              |  203 
 opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java                                                                    |    2 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.java                                                               |   81 
 opendj-sdk/opends/src/server/org/opends/server/backends/MemoryBackend.java                                                              |  150 
 opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java                                                         |  286 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/CommunicationException.java                                                 |    6 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/WebBrowserLauncher.java                                                     |   24 
 opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/ui/LoginDialog.java                                                      |  100 
 opendj-sdk/opends/src/server/org/opends/server/controls/PersistentSearchControl.java                                                    |   21 
 opendj-sdk/opends/src/server/org/opends/server/util/Base64.java                                                                         |   16 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/IntermediateResponseProtocolOp.java                                       |   48 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPConnection.java                                                                |   78 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ID2Entry.java                                                               |   15 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetControl.java                                              |    5 
 opendj-sdk/opends/src/server/org/opends/server/tools/PromptTrustManager.java                                                            |   36 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java                                                               |   30 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java                                        |   28 
 opendj-sdk/opends/src/server/org/opends/server/schema/IntegerSyntax.java                                                                |   73 
 opendj-sdk/opends/src/server/org/opends/server/schema/CertificateSyntax.java                                                            |   25 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java                                         |   42 
 opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java                                          |  246 
 opendj-sdk/opends/src/server/org/opends/server/types/AbstractOperation.java                                                             |   44 
 opendj-sdk/opends/src/server/org/opends/server/controls/LDAPAssertionRequestControl.java                                                |   15 
 opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyConfig.java                                                           |   26 
 opendj-sdk/opends/src/server/org/opends/server/config/ConfigEntry.java                                                                  |   35 
 opendj-sdk/opends/src/server/org/opends/server/core/LogRetentionPolicyConfigManager.java                                                |   50 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/InstallWelcomePanel.java                                            |   33 
 opendj-sdk/opends/src/server/org/opends/server/core/WorkflowResultCode.java                                                             |   32 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Enumerated.java                                                       |   60 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/SecureConnectionCliParser.java                                          |  109 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java                                                |   57 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ListenerDescriptor.java                                                  |    8 
 opendj-sdk/opends/src/server/org/opends/server/schema/BinarySyntax.java                                                                 |   22 
 opendj-sdk/opends/src/server/org/opends/server/extensions/NullConnectionSecurityProvider.java                                           |   19 
 opendj-sdk/opends/src/server/org/opends/server/core/RootDNConfigManager.java                                                            |   40 
 opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringSyntax.java                                                          |   37 
 opendj-sdk/opends/src/server/org/opends/server/core/BindOperationWrapper.java                                                           |   16 
 opendj-sdk/opends/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java                                                  |  166 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Long.java                                                             |   59 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/IP.java                                                         |   10 
 opendj-sdk/opends/src/server/org/opends/server/util/args/StringArgument.java                                                            |   21 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java                    |    3 
 opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContextException.java                                                                 |    8 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/RandomTag.java                                                            |  163 
 opendj-sdk/opends/src/server/org/opends/server/types/SortKey.java                                                                       |    4 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/LoginDialog.java                                                      |  111 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/ManagedObjectDecodingException.java                                         |    5 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java                                                 |  292 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java                                |    3 
 opendj-sdk/opends/src/server/org/opends/server/extensions/RandomPasswordGenerator.java                                                  |  110 
 opendj-sdk/opends/src/messages/messages/util.properties                                                                                 |  411 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareResponseProtocolOp.java                                            |   54 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java                                         |    5 
 opendj-sdk/opends/src/server/org/opends/server/extensions/EntryCacheCommon.java                                                         |  101 
 opendj-sdk/opends/src/server/org/opends/server/core/PasswordStorageSchemeConfigManager.java                                             |   46 
 opendj-sdk/opends/src/server/org/opends/server/extensions/WhoAmIExtendedOperation.java                                                  |   25 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java                                |    3 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommand.java                                    |   62 
 opendj-sdk/opends/src/server/org/opends/server/schema/DirectoryStringSyntax.java                                                        |   42 
 opendj-sdk/opends/src/server/org/opends/server/types/RawAttribute.java                                                                  |   29 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/DirectoryManagerAuthenticationDialog.java                                     |  124 
 opendj-sdk/opends/src/server/org/opends/server/api/MatchingRule.java                                                                    |    3 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java                                                           |  265 
 opendj-sdk/opends/src/server/org/opends/server/schema/CaseIgnoreIA5SubstringMatchingRule.java                                           |   27 
 opendj-sdk/opends/src/server/org/opends/server/api/IdentityMapper.java                                                                  |    3 
 opendj-sdk/opends/src/server/org/opends/server/extensions/AnonymousSASLMechanismHandler.java                                            |   23 
 opendj-sdk/opends/src/server/org/opends/server/types/InvokableMethod.java                                                               |    2 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ConsoleApplication.java                                                   |   51 
 opendj-sdk/opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java                                                         |   16 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.java                                                            |   30 
 opendj-sdk/opends/src/server/org/opends/server/tools/RestoreDB.java                                                                     |  205 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/UnbindRequestProtocolOp.java                                              |    9 
 opendj-sdk/opends/src/server/org/opends/server/tools/SSLConnectionException.java                                                        |   11 
 opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java                                                           |    8 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternDN.java                                                  |  189 
 opendj-sdk/opends/src/server/org/opends/server/util/args/BooleanArgument.java                                                           |   22 
 opendj-sdk/opends/src/server/org/opends/server/core/ExtendedOperationBasis.java                                                         |   46 
 opendj-sdk/opends/src/server/org/opends/server/admin/RelationDefinition.java                                                            |   13 
 opendj-sdk/opends/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java                                        |   11 
 opendj-sdk/opends/src/server/org/opends/server/tasks/ImportTask.java                                                                    |  250 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java                 |    3 
 opendj-sdk/opends/src/build-tools/org/opends/build/tools/GenerateMessageFile.java                                                       |  757 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/BuildInformation.java                                                            |   16 
 opendj-sdk/opends/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java                                            |   20 
 opendj-sdk/opends/src/server/org/opends/server/util/Validator.java                                                                      |   69 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Sequence.java                                                         |   41 
 opendj-sdk/opends/src/server/org/opends/server/api/PasswordValidator.java                                                               |    6 
 opendj-sdk/opends/src/server/org/opends/server/config/ReadOnlyConfigAttribute.java                                                      |   53 
 opendj-sdk/opends/src/server/org/opends/server/schema/FaxNumberSyntax.java                                                              |   55 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserInteraction.java                                                             |   12 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciList.java                                                    |   30 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/BindRule.java                                                   |   70 
 opendj-sdk/opends/src/server/org/opends/server/core/RFC3672SubtreeSpecification.java                                                    |   10 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java                                            |   54 
 opendj-sdk/opends/src/server/org/opends/server/replication/plugin/PersistentServerState.java                                            |   29 
 opendj-sdk/opends/src/server/org/opends/server/plugins/LastModPlugin.java                                                               |   23 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/ListenersTableModel.java                                              |   33 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java                                                |  113 
 opendj-sdk/opends/src/messages/messages/utility.properties                                                                              |  427 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java                              |   10 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java                                   |    5 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromFile.java                                                      |   52 
 opendj-sdk/opends/src/messages/messages/plugin.properties                                                                               |  310 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java                                                         |  684 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java                                                 |   50 
 opendj-sdk/opends/src/server/org/opends/server/types/CancelRequest.java                                                                 |   21 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/HistoricalRecord.java                                                            |   39 
 opendj-sdk/opends/src/server/org/opends/server/loggers/TextErrorLogPublisher.java                                                       |  242 
 opendj-sdk/opends/src/server/org/opends/server/schema/DeliveryMethodSyntax.java                                                         |   40 
 opendj-sdk/opends/src/server/org/opends/server/api/AccessLogPublisher.java                                                              |    5 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/DayOfWeek.java                                                  |    9 
 opendj-sdk/opends/src/server/org/opends/server/admin/ClassLoaderProvider.java                                                           |   89 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/ListTag.java                                                              |   21 
 opendj-sdk/opends/src/server/org/opends/server/controls/PasswordExpiringControl.java                                                    |   15 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java                                   |    9 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java          |   25 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java                                              |   20 
 opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeSyntax.java                                                        |  329 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java             |    9 
 opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringOrderingMatchingRule.java                                            |   19 
 opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyWarningType.java                                                  |   18 
 opendj-sdk/opends/src/server/org/opends/server/controls/VLVResponseControl.java                                                         |   21 
 opendj-sdk/opends/src/server/org/opends/server/extensions/AttributeValuePasswordValidator.java                                          |   18 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDbEnv.java                                                 |   33 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Branch.java                                                               |   13 
 opendj-sdk/opends/src/server/org/opends/server/util/args/ArgumentParser.java                                                            |  155 
 opendj-sdk/opends/src/server/org/opends/server/api/ClientConnection.java                                                                |   97 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/CreateSubCommandHandler.java                                              |  162 
 opendj-sdk/opends/src/server/org/opends/server/types/DITStructureRule.java                                                              |    3 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataConfirmationException.java                                               |    8 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java                                        |   59 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/CliTest.java                                    |   22 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/ProgressNotifier.java                                                      |   10 
 opendj-sdk/opends/src/server/org/opends/server/tasks/TaskUtils.java                                                                     |  120 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/StaticTextTag.java                                                        |   24 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTests.java                           |    3 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/MigrationManager.java                                                   |   68 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDBException.java                                           |   16 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPAuthenticationHandler.java                                                     | 1371 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/DataOptionsPanel.java                                               |   50 
 opendj-sdk/opends/src/server/org/opends/server/api/plugin/DirectoryServerPlugin.java                                                    |  386 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java |    5 
 opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPostReadRequestControl.java                                                 |   15 
 opendj-sdk/opends/src/server/org/opends/server/core/PluginConfigManager.java                                                            | 1546 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ProgressDescriptor.java                                                          |   12 
 opendj-sdk/opends/src/server/org/opends/server/admin/OperationsException.java                                                           |    5 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java                                                          |   38 
 opendj-sdk/opends/src/server/org/opends/server/api/Backend.java                                                                         |   23 
 opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkerThread.java                                                  |   30 
 opendj-sdk/opends/src/messages/src/org/opends/messages/MessageDescriptor.java                                                           |  932 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SHA1PasswordStorageScheme.java                                                |   55 
 opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java                                            |   19 
 opendj-sdk/opends/src/server/org/opends/server/api/SASLMechanismHandler.java                                                            |    3 
 opendj-sdk/opends/src/messages/messages/jeb.properties                                                                                  |  321 
 opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java                                               |   22 
 opendj-sdk/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java                                                             |   78 
 opendj-sdk/opends/src/server/org/opends/server/tasks/DisconnectClientTask.java                                                          |   47 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java                                             |   13 
 opendj-sdk/opends/src/messages/src/org/opends/messages/Severity.java                                                                    |  193 
 opendj-sdk/opends/src/server/org/opends/server/types/operation/InProgressOperation.java                                                 |   15 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java                                                           |  105 
 opendj-sdk/opends/src/server/org/opends/server/schema/IA5StringSyntax.java                                                              |   37 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagedObjectDecodingException.java                                   |    5 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java                                                          |   44 
 opendj-sdk/opends/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java                                              |  121 
 opendj-sdk/opends/src/server/org/opends/server/tools/InstallDS.java                                                                     |  401 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java                                               |  118 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Template.java                                                             |   16 
 opendj-sdk/opends/src/server/org/opends/server/types/CompressedSchema.java                                                              |   25 
 opendj-sdk/opends/src/server/org/opends/server/schema/AbsoluteSubtreeSpecificationSyntax.java                                           |   26 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternRDN.java                                                 |   23 
 opendj-sdk/opends/src/server/org/opends/server/extensions/GetConnectionIDExtendedOperation.java                                         |    3 
 opendj-sdk/opends/src/messages/messages/protocol.properties                                                                             | 1406 +
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java                      |    6 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java                                        |   66 
 opendj-sdk/opends/src/messages/messages/tools.properties                                                                                | 2168 +
 opendj-sdk/opends/src/server/org/opends/server/loggers/ThreadFilterTextErrorLogPublisher.java                                           |   39 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java                                                       |  125 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/InitializationExceptionTestCase.java                       |   57 
 opendj-sdk/opends/src/server/org/opends/server/types/AccountStatusNotificationType.java                                                 |  174 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java                                                           |   25 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/WelcomePanel.java                                                    |   32 
 opendj-sdk/opends/src/server/org/opends/server/types/BackupInfo.java                                                                    |   47 
 opendj-sdk/opends/src/server/org/opends/server/types/RawModification.java                                                               |   37 
 opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPreReadRequestControl.java                                                  |   14 
 opendj-sdk/opends/src/server/org/opends/server/types/LDAPURL.java                                                                       |   82 
 opendj-sdk/opends/src/server/org/opends/server/api/WorkQueue.java                                                                       |    3 
 opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java                                                  |  147 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java                                                   |   55 
 opendj-sdk/opends/src/server/org/opends/server/core/PasswordGeneratorConfigManager.java                                                 |   49 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearch.java                                                                    |  408 
 opendj-sdk/opends/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandler.java                                            |  311 
 opendj-sdk/opends/src/messages/messages/user_defined.properties                                                                         |   54 
 opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContext.java                                                                          |    6 
 opendj-sdk/opends/src/server/org/opends/server/types/IdentifiedException.java                                                           |   15 
 opendj-sdk/opends/src/server/org/opends/server/types/AddressMask.java                                                                   |   75 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndex.java                                                               |   91 
 opendj-sdk/opends/src/server/org/opends/server/core/NetworkGroup.java                                                                   |   24 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPAttribute.java                                                        |   12 
 opendj-sdk/opends/src/messages/src/org/opends/messages/MessageBuilder.java                                                              |  347 
 opendj-sdk/opends/src/server/org/opends/server/admin/DefinitionDecodingException.java                                                   |   20 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataCertificateException.java                                                |    7 
 opendj-sdk/opends/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java                                                   |   88 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Aci.java                                                        |   28 
 opendj-sdk/opends/src/server/org/opends/server/types/BackupDirectory.java                                                               |  103 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Element.java                                                          |   87 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/SplashScreen.java                                                        |    2 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1ReaderAndWriter.java                      |    4 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/GlobalAdministratorPanel.java                                       |   23 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Target.java                                                     |   25 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/StatusPanelDialog.java                                                |  120 
 opendj-sdk/opends/src/server/org/opends/server/schema/OtherMailboxSyntax.java                                                           |   50 
 opendj-sdk/opends/src/server/org/opends/server/types/DisconnectReason.java                                                              |   89 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Integer.java                                                          |   60 
 opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java                                                           |   58 
 opendj-sdk/opends/src/server/org/opends/server/schema/SubstringAssertionSyntax.java                                                     |   35 
 opendj-sdk/opends/src/server/org/opends/server/types/AccountStatusNotification.java                                                     |   32 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/FinishedPanel.java                                                            |    7 
 opendj-sdk/opends/src/server/org/opends/server/core/ModifyDNOperationBasis.java                                                         |   45 
 opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyRequestControl.java                                               |    9 
 opendj-sdk/opends/src/server/org/opends/server/schema/ObjectIdentifierEqualityMatchingRule.java                                         |   30 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/AbstractConfigListenerAdaptor.java                                          |    8 
 opendj-sdk/opends/src/server/org/opends/server/util/VersionCompatibilityIssue.java                                                      |   26 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultReferenceProtocolOp.java                                      |   16 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/UserDN.java                                                     |   11 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/BindRequestProtocolOp.java                                                |   51 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java                                                |  128 
 opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeEqualityMatchingRule.java                                          |    5 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/GroupDN.java                                                    |   16 
 opendj-sdk/opends/src/server/org/opends/server/plugins/LDAPADListPlugin.java                                                            |   30 
 opendj-sdk/opends/src/server/org/opends/server/types/operation/PostResponseBindOperation.java                                           |   14 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java                                  |   86 
 opendj-sdk/opends/src/server/org/opends/server/api/AlertHandler.java                                                                    |   10 
 opendj-sdk/opends/src/server/org/opends/server/schema/BooleanSyntax.java                                                                |   26 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestPasswordValidator.java                            |    9 
 opendj-sdk/opends/src/server/org/opends/server/core/WorkQueueConfigManager.java                                                         |   26 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ExtendedResponseProtocolOp.java                                           |   74 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPException.java                            |   25 
 opendj-sdk/opends/src/server/org/opends/server/loggers/AsyncronousTextWriter.java                                                       |    4 
 opendj-sdk/opends/src/server/org/opends/server/types/ErrorLogSeverity.java                                                              |  173 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/LdifFileWriter.java                                        |    5 
 opendj-sdk/opends/src/server/org/opends/server/loggers/LogPublisherErrorHandler.java                                                    |   25 
 opendj-sdk/opends/src/server/org/opends/server/util/ExpirationCheckTrustManager.java                                                    |   40 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java                            |  146 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupErrorPanel.java                                                     |   14 
 opendj-sdk/opends/src/server/org/opends/server/extensions/DynamicGroup.java                                                             |   38 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java                                   |    3 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java                                     |    3 
 opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java                                                |  321 
 opendj-sdk/opends/src/server/org/opends/server/schema/TelephoneNumberSyntax.java                                                        |   40 
 opendj-sdk/opends/src/server/org/opends/server/types/CryptoManager.java                                                                 |   26 
 opendj-sdk/opends/src/server/org/opends/server/types/DirectoryEnvironmentConfig.java                                                    |  126 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java                                                    |   74 
 opendj-sdk/opends/src/server/org/opends/server/config/StringConfigAttribute.java                                                        |  184 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SMTPAlertHandler.java                                                         |   45 
 opendj-sdk/opends/src/server/org/opends/server/types/DITContentRule.java                                                                |    3 
 opendj-sdk/opends/src/server/org/opends/server/api/EntryCache.java                                                                      |    3 
 opendj-sdk/opends/src/server/org/opends/server/types/operation/PreParseOperation.java                                                   |   15 
 opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPreReadResponseControl.java                                                 |   21 
 opendj-sdk/opends/src/server/org/opends/server/types/Entry.java                                                                         |  418 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/WizardStep.java                                                                  |    4 
 opendj-sdk/opends/src/server/org/opends/server/plugins/profiler/ProfileViewer.java                                                      |   30 
 opendj-sdk/opends/src/server/org/opends/server/extensions/CharacterSetPasswordValidator.java                                            |   53 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/FirstNameTag.java                                                         |   14 
 opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java                                                          |    8 
 opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java                                                            |    8 
 opendj-sdk/opends/src/server/org/opends/server/extensions/DefaultEntryCache.java                                                        |    6 
 opendj-sdk/opends/src/server/org/opends/server/extensions/StaticGroup.java                                                              |  140 
 opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java                                                           |   44 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/WebProxyDialog.java                                                           |   38 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/WebBrowserException.java                                                    |    9 
 opendj-sdk/opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java                                                 |   80 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java                           |   20 
 opendj-sdk/opends/src/server/org/opends/server/core/SynchronizationProviderConfigManager.java                                           |   84 
 opendj-sdk/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java                                                  |  113 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProvider.java                                |    8 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java                                                    |   16 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java                                                             |   47 
 opendj-sdk/opends/src/server/org/opends/server/types/EntryEncodeConfig.java                                                             |   12 
 opendj-sdk/opends/src/server/org/opends/server/loggers/FileNumberRetentionPolicy.java                                                   |    6 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDIFSearch.java                                                                    |  156 
 opendj-sdk/opends/src/server/org/opends/server/schema/AuthPasswordSyntax.java                                                           |   75 
 opendj-sdk/opends/src/messages/messages/quicksetup.properties                                                                           | 1082 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/MakeLDIF.java                                                             |   88 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Application.java                                                                 |  239 
 opendj-sdk/opends/src/server/org/opends/server/admin/EnumPropertyDefinition.java                                                        |    5 
 opendj-sdk/opends/src/server/org/opends/server/types/ResultCode.java                                                                    |  178 
 opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinition.java                                                            |    9 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Launcher.java                                                                    |   47 
 opendj-sdk/opends/src/server/org/opends/server/schema/SupportedAlgorithmSyntax.java                                                     |   25 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java                                                 |  116 
 opendj-sdk/opends/src/server/org/opends/server/core/AbandonOperationBasis.java                                                          |   29 
 opendj-sdk/opends/src/server/org/opends/server/config/DNConfigAttribute.java                                                            |  234 
 opendj-sdk/opends/src/server/org/opends/server/util/LDIFWriter.java                                                                     |    4 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/FileManager.java                                                            |   90 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/MissingMandatoryPropertiesException.java                                    |    5 
 opendj-sdk/opends/src/server/org/opends/server/schema/PresentationAddressSyntax.java                                                    |   30 
 opendj-sdk/opends/src/server/org/opends/server/types/ConfigChangeResult.java                                                            |   17 
 opendj-sdk/opends/src/server/org/opends/server/controls/ServerSideSortRequestControl.java                                               |   73 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VerifyJob.java                                                              |  103 
 opendj-sdk/opends/src/server/org/opends/server/schema/PrintableStringSyntax.java                                                        |   45 
 opendj-sdk/opends/src/server/org/opends/server/config/MultiChoiceConfigAttribute.java                                                   |  220 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CharacterSetPasswordValidatorTestCase.java            |    3 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/AttributeValueTag.java                                                    |   69 
 opendj-sdk/opends/src/server/org/opends/server/types/LDIFExportConfig.java                                                              |    9 
 opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectAlreadyExistsException.java                                           |    4 
 opendj-sdk/opends/src/server/org/opends/server/controls/PersistentSearchChangeType.java                                                 |   22 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/SequentialTag.java                                                        |   37 
 opendj-sdk/opends/src/server/org/opends/server/admin/AdminRuntimeException.java                                                         |    9 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ApplicationException.java                                                        |   35 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ProgressUpdateListenerDelegate.java                                              |   28 
 opendj-sdk/opends/src/server/org/opends/server/schema/JPEGSyntax.java                                                                   |   25 
 opendj-sdk/opends/resource/Messages.java.stub                                                                                           |   46 
 opendj-sdk/opends/src/server/org/opends/server/schema/DITStructureRuleSyntax.java                                                       |  284 
 opendj-sdk/opends/src/server/org/opends/server/types/SortOrder.java                                                                     |    7 
 opendj-sdk/opends/src/server/org/opends/server/core/BindOperationBasis.java                                                             |   68 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Null.java                                                             |   53 
 opendj-sdk/opends/src/messages/src/org/opends/messages/package-info.java                                                                |   43 
 opendj-sdk/opends/src/server/org/opends/server/core/AccountStatusNotificationHandlerConfigManager.java                                  |   51 
 opendj-sdk/opends/src/server/org/opends/server/tasks/BackupTask.java                                                                    |  161 
 opendj-sdk/opends/src/server/org/opends/server/core/OperationWrapper.java                                                               |   25 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/SetPropSubCommandHandler.java                                             |   94 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java                 |    5 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ServerStatusPooler.java                                                  |   12 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/EntrySchemaCheckingTestCase.java                           |   47 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/Utilities.java                                                                |   36 
 opendj-sdk/opends/src/server/org/opends/server/core/DeleteOperationBasis.java                                                           |   37 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installandupgrader/ui/WelcomePanel.java                                          |   30 
 opendj-sdk/opends/src/messages/messages/access_control.properties                                                                       |  368 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java                                                         |    5 
 opendj-sdk/opends/src/server/org/opends/server/config/IntegerWithUnitConfigAttribute.java                                               |  220 
 opendj-sdk/opends/src/server/org/opends/server/extensions/FileBasedTrustManagerProvider.java                                            |  182 
 opendj-sdk/opends/src/server/org/opends/server/tools/EncodePassword.java                                                                |  185 
 opendj-sdk/opends/src/server/org/opends/server/admin/AdminException.java                                                                |    8 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java                                          |   65 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagedObject.java                                                    |   30 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/RDNTag.java                                                               |   24 
 opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyConfigManager.java                                                    |   97 
 opendj-sdk/opends/src/server/org/opends/server/extensions/ClearPasswordStorageScheme.java                                               |   19 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ExportJob.java                                                              |   21 
 opendj-sdk/opends/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProvider.java                                      |    3 
 opendj-sdk/opends/src/server/org/opends/server/api/AccessControlHandler.java                                                            |    4 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/DN2URI.java                                                                 |   15 
 opendj-sdk/opends/src/server/org/opends/server/tasks/RebuildTask.java                                                                   |  123 
 opendj-sdk/opends/src/server/org/opends/server/extensions/Base64PasswordStorageScheme.java                                              |   27 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/TemplateFile.java                                                         |  236 
 opendj-sdk/opends/src/server/org/opends/server/schema/UUIDOrderingMatchingRule.java                                                     |   41 
 opendj-sdk/opends/src/server/org/opends/server/tools/ExportLDIF.java                                                                    |  265 
 opendj-sdk/opends/src/server/org/opends/server/tasks/RestoreTask.java                                                                   |  108 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java                            |    5 
 opendj-sdk/opends/src/server/org/opends/server/core/TrustManagerProviderConfigManager.java                                              |   56 
 opendj-sdk/opends/src/server/org/opends/server/types/AttributeType.java                                                                 |   11 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java               |    3 
 opendj-sdk/opends/src/server/org/opends/server/extensions/ExternalSASLMechanismHandler.java                                             |  120 
 opendj-sdk/opends/src/server/org/opends/server/extensions/RegularExpressionIdentityMapper.java                                          |   87 
 opendj-sdk/opends/src/server/org/opends/server/api/ConfigAddListener.java                                                               |    4 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/DNTag.java                                                                |   22 
 opendj-sdk/opends/src/server/org/opends/server/schema/CaseIgnoreIA5EqualityMatchingRule.java                                            |   19 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java                             |   36 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Reader.java                                                           |   28 
 opendj-sdk/opends/src/build-tools/org/opends/build/tools/Utilities.java                                                                 |  133 
 opendj-sdk/opends/src/server/org/opends/server/util/args/MultiChoiceArgument.java                                                       |   35 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPAuthenticationHandlerTestCase.java                     |    5 
 opendj-sdk/opends/src/server/org/opends/server/api/Group.java                                                                           |    3 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ServerStatusDescriptor.java                                              |    8 
 opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordPolicyStateExtendedOperation.java                                     |  133 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java                                                  |   28 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SecurityOptionsDialog.java                                          |  162 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/JMXAlertHandlerTestCase.java                          |    5 
 opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyState.java                                                            |   70 
 opendj-sdk/opends/src/server/org/opends/server/loggers/AccessLogger.java                                                                |   75 
 opendj-sdk/opends/src/messages/messages/version.properties                                                                              |   82 
 opendj-sdk/opends/src/server/org/opends/server/core/MatchingRuleConfigManager.java                                                      |  143 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installandupgrader/InstallAndUpgrader.java                                       |   13 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java                                  |    3 
 opendj-sdk/opends/src/server/org/opends/server/schema/IntegerEqualityMatchingRule.java                                                  |   70 
 opendj-sdk/opends/src/server/org/opends/server/config/JMXMBean.java                                                                     |   62 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/AbstractOptionalConfigurationManager.java                                   |   62 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPConnectionException.java                                                       |   27 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareRequestProtocolOp.java                                             |   46 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/UpdatePreOpPlugin.java                                   |    8 
 opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java                                              |   42 
 opendj-sdk/opends/src/server/org/opends/server/loggers/TextAuditLogPublisher.java                                                       |   75 
 opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServerShutdownHook.java                                                    |    8 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/BindResponseProtocolOp.java                                               |   82 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Element.java                              |    1 
 opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java                                                        |  251 
 opendj-sdk/opends/src/messages/messages/task.properties                                                                                 |  123 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteResponseProtocolOp.java                                             |   54 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPPasswordModify.java                                                            |  207 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDIFModify.java                                                                    |  115 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java                          |    3 
 opendj-sdk/opends/src/server/org/opends/server/tasks/InitializeTargetTask.java                                                          |   23 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java                                           |   58 
 opendj-sdk/opends/src/server/org/opends/server/controls/AuthorizationIdentityResponseControl.java                                       |    9 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplicationHelper.java                                                        |   92 
 opendj-sdk/opends/resource/admin/example-plugin/ExamplePlugin.java                                                                      |    7 
 opendj-sdk/opends/src/server/org/opends/server/core/LockFileManager.java                                                                |   65 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliMain.java                                                 |   37 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationChangeListener.java                                            |    3 
 opendj-sdk/opends/src/server/org/opends/server/schema/CertificatePairSyntax.java                                                        |   25 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java                                            |   32 
 opendj-sdk/opends/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java                                             |   28 
 opendj-sdk/opends/src/server/org/opends/server/api/ExtendedOperationHandler.java                                                        |    4 
 opendj-sdk/opends/src/server/org/opends/server/admin/AdministratorAction.java                                                           |    5 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java                                |    3 
 opendj-sdk/opends/src/server/org/opends/server/tools/ConfigureDS.java                                                                   |  310 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/WebBrowserErrorDialog.java                                                    |   36 
 opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java                                                         |  289 
 opendj-sdk/opends/src/server/org/opends/server/core/BackendConfigManager.java                                                           |  343 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigException.java                                                     |    6 
 opendj-sdk/opends/src/server/org/opends/server/util/args/SubCommand.java                                                                |   95 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/MessagesTestCase.java                                   |    2 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java                                  |    3 
 opendj-sdk/opends/src/server/org/opends/server/schema/UserPasswordSyntax.java                                                           |   45 
 opendj-sdk/opends/src/server/org/opends/server/util/args/Argument.java                                                                  |   85 
 opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java                                                          |    8 
 opendj-sdk/opends/src/server/org/opends/server/util/EMailMessage.java                                                                   |   45 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/AdminSecurityException.java                                                 |    6 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TimeOfDay.java                                                  |   14 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Exception.java                            |   20 
 opendj-sdk/opends/src/server/org/opends/server/util/LDIFException.java                                                                  |   32 
 opendj-sdk/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java                                                           |   40 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDIFDiff.java                                                                      |  108 
 opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV1Control.java                                                       |   48 
 opendj-sdk/opends/src/server/org/opends/server/tools/StartWindowsService.java                                                           |   12 
 opendj-sdk/opends/src/server/org/opends/server/core/MonitorConfigManager.java                                                           |   40 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/ProgressUpdateEvent.java                                                   |   15 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/DataReplicationPanel.java                                           |   51 
 opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java                                         |   53 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ProgressMessageFormatter.java                                               |   34 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerHealthChecker.java                                                    |   13 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java         |    5 
 opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/UninstallLauncher.java                                                   |   35 
 opendj-sdk/opends/src/server/org/opends/server/schema/AttributeTypeSyntax.java                                                          |  345 
 opendj-sdk/opends/src/server/org/opends/server/tools/BackUpDB.java                                                                      |  340 
 opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java                                                           |  202 
 opendj-sdk/opends/src/server/org/opends/server/controls/AccountUsableResponseControl.java                                               |   34 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/PlainTextProgressMessageFormatter.java                                      |   93 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ArgumentExceptionFactory.java                                             |  216 
 opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleSyntax.java                                                           |  227 
 opendj-sdk/opends/src/server/org/opends/server/api/VirtualAttributeProvider.java                                                        |    3 
 opendj-sdk/opends/src/server/org/opends/server/backends/MonitorBackend.java                                                             |  155 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/UserAttr.java                                                   |   28 
 opendj-sdk/opends/src/server/org/opends/server/extensions/StartTLSExtendedOperation.java                                                |   31 
 opendj-sdk/opends/src/server/org/opends/server/util/args/ArgumentException.java                                                         |   23 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/StartupPluginResultTestCase.java                      |   36 
 opendj-sdk/opends/src/messages/messages/log.properties                                                                                  |   70 
 opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServer.java                                                                |  991 
 opendj-sdk/opends/src/server/org/opends/server/api/ConfigChangeListener.java                                                            |    4 
 opendj-sdk/opends/src/server/org/opends/server/loggers/TextAccessLogPublisher.java                                                      |  109 
 opendj-sdk/opends/src/server/org/opends/server/extensions/ExactMatchIdentityMapper.java                                                 |   67 
 opendj-sdk/opends/src/server/org/opends/server/schema/CountryStringSyntax.java                                                          |   39 
 opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPostReadResponseControl.java                                                |   21 
 opendj-sdk/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java                                                |    8 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgraderCliHelper.java                                                  |    9 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPControl.java                                                          |   65 
 opendj-sdk/opends/src/server/org/opends/server/tools/WaitForFileDelete.java                                                             |   44 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java                                      |   12 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SelectAliasDialog.java                                              |   27 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommandArgumentParser.java                      |    9 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java                                                                  |   18 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationAddListener.java                                               |    3 
 opendj-sdk/opends/src/server/org/opends/server/controls/VLVRequestControl.java                                                          |   28 
 opendj-sdk/opends/src/server/org/opends/server/core/IdleTimeLimitThread.java                                                            |   33 
 opendj-sdk/opends/src/server/org/opends/server/core/RelativeSubtreeSpecification.java                                                   |   10 
 opendj-sdk/opends/src/server/org/opends/server/types/LDAPException.java                                                                 |   53 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/GetPropSubCommandHandler.java                                             |   76 
 opendj-sdk/opends/src/server/org/opends/server/schema/BooleanEqualityMatchingRule.java                                                  |   18 
 opendj-sdk/opends/src/build-tools/org/opends/build/tools/CoverageDiff.java                                                              |    1 
 opendj-sdk/opends/src/server/org/opends/server/extensions/CryptPasswordStorageScheme.java                                               |   33 
 opendj-sdk/opends/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java                                             |   27 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/OperationRejectedException.java                                             |    6 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java                |    3 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/DNS.java                                                        |   54 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/ConfigChangeListenerTestCase.java                            |    3 
 opendj-sdk/opends/src/server/org/opends/server/extensions/TLSCapableConnection.java                                                     |    4 
 opendj-sdk/opends/src/server/org/opends/server/api/MonitorProvider.java                                                                 |    3 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryIDSetSorter.java                                                       |   16 
 opendj-sdk/opends/src/server/org/opends/server/core/PasswordValidatorConfigManager.java                                                 |   51 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPResultCode.java                                                       |  143 
 opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java                            | 1588 
 opendj-sdk/opends/src/server/org/opends/server/extensions/GSSAPISASLMechanismHandler.java                                               |   64 
 opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java                                                            |   11 
 opendj-sdk/opends/src/server/org/opends/server/plugins/PasswordPolicyImportPlugin.java                                                  |  145 
 opendj-sdk/opends/src/server/org/opends/server/core/AddOperationBasis.java                                                              |   47 
 opendj-sdk/opends/src/server/org/opends/server/api/ConnectionHandler.java                                                               |    5 
 opendj-sdk/opends/src/server/org/opends/server/schema/GuideSyntax.java                                                                  |  104 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/StepsPanel.java                                                               |   10 
 opendj-sdk/opends/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java                                                   |   98 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ImportJob.java                                                              |  173 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteRequestProtocolOp.java                                              |   10 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/IfPresentTag.java                                                         |   35 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyRequestProtocolOp.java                                              |   28 
 opendj-sdk/opends/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java                                                |   39 
 opendj-sdk/opends/src/messages/messages/config.properties                                                                               | 2138 +
 opendj-sdk/opends/src/server/org/opends/server/types/FilePermission.java                                                                |   63 
 opendj-sdk/opends/src/server/org/opends/server/controls/AccountUsableRequestControl.java                                                |    9 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyDNRequestProtocolOp.java                                            |   40 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationDeleteListener.java                                            |    3 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromLDAP.java                                                      |   73 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexMergeThread.java                                                    |   32 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthorizationException.java                                                 |    6 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciListenerManager.java                                         |   43 
 opendj-sdk/opends/src/server/org/opends/server/core/AbsoluteSubtreeSpecification.java                                                   |   10 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java                                               |   24 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/ldap/LDAPConnection.java                                                    |    1 
 opendj-sdk/opends/src/server/org/opends/server/types/operation/PostOperationBindOperation.java                                          |   18 
 opendj-sdk/opends/src/server/org/opends/server/util/table/TableBuilder.java                                                             |   11 
 opendj-sdk/opends/src/server/org/opends/server/tasks/ShutdownTask.java                                                                  |   27 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/UnbindOperationTestCase.java                                |    5 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java                                                            |  152 
 opendj-sdk/opends/src/server/org/opends/server/core/AccessControlConfigManager.java                                                     |   61 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Exception.java                                                        |   26 
 opendj-sdk/opends/src/server/org/opends/server/controls/EntryChangeNotificationControl.java                                             |   40 
 opendj-sdk/opends/src/server/org/opends/server/schema/RelativeSubtreeSpecificationSyntax.java                                           |   26 
 opendj-sdk/opends/src/server/org/opends/server/core/AuthenticatedUsers.java                                                             |   13 
 opendj-sdk/opends/src/server/org/opends/server/api/KeyManagerProvider.java                                                              |    3 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/FileTag.java                                                              |   36 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeProgressStep.java                                                |   61 
 opendj-sdk/opends/src/server/org/opends/server/core/CompareOperationBasis.java                                                          |   23 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java                                                       |   10 
 opendj-sdk/opends/src/server/org/opends/server/controls/PasswordExpiredControl.java                                                     |    9 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciBody.java                                                    |    9 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyDNResponseProtocolOp.java                                           |   54 
 opendj-sdk/opends/src/server/org/opends/server/util/EmbeddedUtils.java                                                                  |   13 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPModify.java                                                                    |  315 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java                                              |   44 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Step.java                                                                        |   38 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java                                               |   83 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java                                                          |  100 
 opendj-sdk/opends/src/server/org/opends/server/schema/DITContentRuleSyntax.java                                                         |  354 
 opendj-sdk/opends/src/server/org/opends/server/types/DirectoryException.java                                                            |   77 
 opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationBroker.java                                                |   96 
 opendj-sdk/opends/src/server/org/opends/server/extensions/DynamicGroupSearchThread.java                                                 |   46 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/DelayedConfigAddListener.java                                               |    4 
 opendj-sdk/opends/src/server/org/opends/server/admin/IntegerPropertyDefinition.java                                                     |    5 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java                                                        |   49 
 opendj-sdk/opends/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java                                                     |    6 
 opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Set.java                                                              |   41 
 opendj-sdk/opends/src/server/org/opends/server/tools/SSLConnectionFactory.java                                                          |   37 
 opendj-sdk/opends/src/server/org/opends/server/extensions/DictionaryPasswordValidator.java                                              |   38 
 opendj-sdk/opends/src/server/org/opends/server/tools/ClientException.java                                                               |   23 
 opendj-sdk/opends/src/messages/src/org/opends/messages/Category.java                                                                    |  196 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java                                                |  198 
 opendj-sdk/opends/src/server/org/opends/server/types/LDIFImportConfig.java                                                              |   11 
 opendj-sdk/opends/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java                                                     |   33 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/makeldif/MakeLDIFTestCase.java                             |    3 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthenticationException.java                                                |    6 
 opendj-sdk/opends/src/server/org/opends/server/schema/BitStringSyntax.java                                                              |   29 
 opendj-sdk/opends/src/server/org/opends/server/core/LoggerConfigManager.java                                                            |   45 
 opendj-sdk/opends/src/server/org/opends/server/util/args/IntegerArgument.java                                                           |   67 
 opendj-sdk/opends/src/server/org/opends/server/core/BindOperation.java                                                                  |   19 
 opendj-sdk/opends/src/server/org/opends/server/config/BooleanConfigAttribute.java                                                       |  112 
 opendj-sdk/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java                                           |   13 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerReader.java                                                     |   34 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java                                                 |   17 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Permission.java                                                 |   21 
 opendj-sdk/opends/src/server/org/opends/server/types/RawFilter.java                                                                     |  136 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/DatabasesTableModel.java                                              |   58 
 opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AuthMethod.java                                                 |   18 
 opendj-sdk/opends/src/server/org/opends/server/tools/ImportLDIF.java                                                                    |  342 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java                 |    5 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/ParentDNTag.java                                                          |   14 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/ValidatorTests.java                                         |    9 
 opendj-sdk/opends/src/server/org/opends/server/api/PasswordStorageScheme.java                                                           |    3 
 opendj-sdk/opends/src/server/org/opends/server/extensions/PKCS11KeyManagerProvider.java                                                 |  141 
 opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java                                                      |   18 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/BuildListDownloadErrorPanel.java                                     |   21 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/DeleteSubCommandHandler.java                                              |  103 
 opendj-sdk/opends/src/server/org/opends/server/types/MembershipException.java                                                           |   42 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java                                                     |   19 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EnvManager.java                                                             |   26 
 opendj-sdk/opends/src/build-tools/org/opends/build/tools/MessagePropertyKey.java                                                        |  267 
 opendj-sdk/opends/src/server/org/opends/server/tools/BackendToolUtils.java                                                              |  127 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultEntryProtocolOp.java                                          |   27 
 opendj-sdk/opends/src/server/org/opends/server/controls/PagedResultsControl.java                                                        |   33 
 opendj-sdk/opends/src/server/org/opends/server/schema/FaxSyntax.java                                                                    |   25 
 opendj-sdk/opends/src/server/org/opends/server/tools/LDAPDelete.java                                                                    |  172 
 opendj-sdk/opends/src/server/org/opends/server/core/KeyManagerProviderConfigManager.java                                                |   51 
 opendj-sdk/opends/src/server/org/opends/server/admin/StringPropertyDefinition.java                                                      |    5 
 opendj-sdk/opends/src/messages/messages/backend.properties                                                                              |  877 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/PropertyValueReader.java                                                  |  102 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigExceptionFactory.java                                                 |   27 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupStepPanel.java                                                      |   41 
 opendj-sdk/opends/src/server/org/opends/server/api/ConfigDeleteListener.java                                                            |    4 
 opendj-sdk/opends/src/server/org/opends/server/schema/NameFormSyntax.java                                                               |  292 
 opendj-sdk/opends/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProvider.java                                        |    8 
 opendj-sdk/opends/src/server/org/opends/server/tools/ListBackends.java                                                                  |  164 
 opendj-sdk/opends/src/server/org/opends/server/types/DirectoryConfig.java                                                               |  142 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/InvocationCounterPlugin.java                             |    8 
 opendj-sdk/opends/src/server/org/opends/server/schema/OIDSyntax.java                                                                    |   22 
 opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliAds.java                                                  |   10 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddResponseProtocolOp.java                                                |   54 
 opendj-sdk/opends/src/server/org/opends/server/core/GroupManager.java                                                                   |   56 
 opendj-sdk/opends/src/messages/src/org/opends/messages/Message.java                                                                     |  359 
 opendj-sdk/opends/src/server/org/opends/server/types/DN.java                                                                            |  428 
 opendj-sdk/opends/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java                                                     |   98 
 opendj-sdk/opends/src/server/org/opends/server/core/CoreConfigManager.java                                                              |   47 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPModification.java                                                     |    4 
 opendj-sdk/opends/src/server/org/opends/server/types/InitializationException.java                                                       |   32 
 opendj-sdk/opends/src/server/org/opends/server/tools/StopWindowsService.java                                                            |   12 
 opendj-sdk/opends/src/server/org/opends/server/backends/task/RecurringTask.java                                                         |   82 
 opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java                                                |   14 
 opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagementContext.java                                                |    1 
 opendj-sdk/opends/src/server/org/opends/server/backends/SchemaBackend.java                                                              | 1113 
 opendj-sdk/opends/src/messages/messages/admin_tool.properties                                                                           |  275 
 opendj-sdk/opends/src/server/org/opends/server/api/ServerShutdownListener.java                                                          |    4 
 opendj-sdk/opends/src/server/org/opends/server/extensions/CancelExtendedOperation.java                                                  |   19 
 opendj-sdk/opends/src/server/org/opends/server/protocols/internal/InternalConnectionHandler.java                                        |    4 
 opendj-sdk/opends/src/server/org/opends/server/schema/EnhancedGuideSyntax.java                                                          |   56 
 opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/HtmlProgressMessageFormatter.java                                           |  168 
 opendj-sdk/opends/src/server/org/opends/server/extensions/TLSConnectionSecurityProvider.java                                            |   55 
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusPanelLauncher.java                                                 |   50 
 opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java                                           |   14 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DelayPreOpPlugin.java                                    |   10 
 opendj-sdk/opends/src/ads/org/opends/admin/ads/TopologyCacheException.java                                                              |    5 
 opendj-sdk/opends/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidator.java                                        |   16 
 opendj-sdk/opends/src/server/org/opends/server/schema/IntegerFirstComponentEqualityMatchingRule.java                                    |   28 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPFilter.java                                                           |  217 
 opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskThread.java                                                            |   22 
 opendj-sdk/opends/src/server/org/opends/server/types/operation/PreParseBindOperation.java                                               |    5 
 /dev/null                                                                                                                               |  172 
 opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultDoneProtocolOp.java                                           |   54 
 opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/DSConfig.java                                                             |   63 
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/JebTestCase.java                                    |    3 
 863 files changed, 44,104 insertions(+), 30,176 deletions(-)

diff --git a/opendj-sdk/opends/build.xml b/opendj-sdk/opends/build.xml
index 267911b..6765266 100644
--- a/opendj-sdk/opends/build.xml
+++ b/opendj-sdk/opends/build.xml
@@ -135,6 +135,11 @@
   <property name="admin.src.dir"   location="src/admin/generated" />
   <property name="admin.rules.dir" location="resource/admin" />
 
+  <!-- Properties for generating messages. -->
+  <property name="msg.prop.dir"    location="src/messages/messages" />
+  <property name="msg.javagen.dir" location="src/messages/generated" />
+  <property name="msg.package.dir" location="${classes.dir}/messages" />
+  <property name="msg.src.dir"     location="src/messages/src" />
 
 
   <!-- Create a package bundle containing the DSML library. -->
@@ -177,10 +182,85 @@
   </target>
 
 
+  <target name="generatemessages" depends="buildtools">
+    <typedef name="genmsg"
+             classname="org.opends.build.tools.GenerateMessageFile" >
+      <classpath>
+        <fileset dir="${build.dir}/build-tools">
+          <include name="*.jar" />
+        </fileset>
+      </classpath>
+    </typedef>
+    <!--
+    <genmsg sourceProps="${msg.prop.dir}/xxx.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/XxxMessages.java">
+    </genmsg>
+    -->
+    <genmsg sourceProps="${msg.prop.dir}/access_control.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/AccessControlMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/admin.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/AdminMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/admin_tool.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/AdminToolMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/backend.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/BackendMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/config.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/ConfigMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/core.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/CoreMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/extension.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/ExtensionMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/jeb.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/JebMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/log.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/LoggerMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/plugin.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/PluginMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/protocol.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/ProtocolMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/quicksetup.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/QuickSetupMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/replication.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/ReplicationMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/schema.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/SchemaMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/task.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/TaskMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/third_party.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/ThirdPartyMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/tools.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/ToolMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/user_defined.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/UserDefinedMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/utility.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/UtilityMessages.java">
+    </genmsg>
+    <genmsg sourceProps="${msg.prop.dir}/version.properties"
+            destJava="${msg.javagen.dir}/org/opends/messages/VersionMessages.java">
+    </genmsg>
+  </target>
 
 
   <!-- Remove all dynamically-generated build files. -->
-  <target name="clean" depends="cleanadmin"
+  <target name="clean" depends="cleanadmin,cleanmessages"
        description="Clean up any files generated during the build process">
 
     <delete dir="${build.dir}"           />
@@ -373,8 +453,16 @@
 
     <checkstyle config="${checkstyle.dir}/opends-checkstyle.xml"
          failOnViolation="true">
-      <fileset dir="${src.dir}" includes="**/*.java"
-           excludes="**/PublicAPI.java" />
+      <fileset dir="${src.dir}">
+        <include name="**/*.java"/>
+        <exclude name="**/PublicAPI.java" />
+      </fileset>
+      <formatter type="plain" />
+    </checkstyle>
+
+    <checkstyle config="${checkstyle.dir}/opends-checkstyle.xml"
+         failOnViolation="true">
+      <fileset dir="${msg.src.dir}" includes="**/*.java" />
       <formatter type="plain" />
     </checkstyle>
 
@@ -430,11 +518,11 @@
 
   <!-- Compile the Directory Server source files. -->
   <target name="compile"
-       depends="init,checkjavaversion,dynamicconstants,compileadmin"
+       depends="init,checkjavaversion,dynamicconstants,generatemessages,compileadmin"
        description="Compile the Directory Server source files.">
     <mkdir dir="${classes.dir}" />
 
-    <javac srcdir="${src.dir}:${admin.src.dir}:${ads.src.dir}:${quicksetup.src.dir}:${guitools.src.dir}" destdir="${classes.dir}"
+    <javac srcdir="${src.dir}:${admin.src.dir}:${msg.src.dir}:${msg.javagen.dir}:${ads.src.dir}:${quicksetup.src.dir}:${guitools.src.dir}" destdir="${classes.dir}"
          excludes="**/package-info.java"
          debug="on" debuglevel="${build.debuglevel}" source="1.5" target="1.5"
          deprecation="true" fork="true" memoryInitialSize="${MEM}"
@@ -506,7 +594,7 @@
         <pathelement path="${classes.dir}"/>
       </classpath>
     </javac>
-    <javac srcdir="${src.dir}" destdir="${quicksetup.classes.dir}"
+    <javac srcdir="${src.dir}:${msg.src.dir}" destdir="${quicksetup.classes.dir}"
                debug="on" debuglevel="${build.debuglevel}" source="1.5"
                target="1.5" deprecation="true" fork="true" memoryInitialSize="${MEM}"
                memoryMaximumSize="${MEM}">
@@ -514,6 +602,18 @@
       <include name="**/org/opends/server/util/CertificateManager.java"/>
       <include name="**/org/opends/server/util/DynamicConstants.java"/>
       <include name="**/org/opends/server/types/OperatingSystem.java"/>
+      <include name="**/org/opends/messages/Message.java"/>
+      <include name="**/org/opends/messages/MessageDescriptor.java"/>
+      <include name="**/org/opends/messages/Severity.java"/>
+      <include name="**/org/opends/messages/Category.java"/>
+      <include name="**/org/opends/messages/gen/QuickSetupMessages.java"/>
+      <include name="**/messages/quicksetup.properties"/>
+      <include name="**/org/opends/messages/gen/ToolMessages.java"/>
+      <include name="**/messages/tools.properties"/>
+      <include name="**/org/opends/messages/gen/CoreMessages.java"/>
+      <include name="**/messages/core.properties"/>
+      <include name="**/org/opends/messages/gen/ReplicationMessages.java"/>
+      <include name="**/messages/replication.properties"/>
       <compilerarg value="-Xlint:all" />
     </javac>
     <javac srcdir="${quicksetup.src.dir}" destdir="${quicksetup.classes.dir}"
@@ -602,6 +702,12 @@
       <fileset dir="${guitools.src.dir}" includes="**/*.properties, **/*.gif, **/*.png" />
     </copy>
 
+    <!-- copy the message properties files -->
+    <mkdir dir="${msg.package.dir}"/>
+    <copy todir="${msg.package.dir}">
+      <fileset dir="${msg.prop.dir}"/>
+    </copy>
+
     <!-- Generate the OpenDS.jar file -->
     <jar jarfile="${pdir}/lib/${SHORT_NAME}.jar"
          basedir="${classes.dir}"
@@ -689,6 +795,13 @@
     <mkdir dir="${pdir}/locks"           />
     <mkdir dir="${pdir}/logs"            />
 
+
+    <!-- copy the message properties files -->
+    <mkdir dir="${msg.package.dir}"/>
+    <copy todir="${msg.package.dir}">
+      <fileset dir="${msg.prop.dir}"/>
+    </copy>
+
     <jar jarfile="${pdir}/lib/${SHORT_NAME}.jar"
          basedir="${classes.dir}" 
          excludes="${ads.classes.dir}, ${quicksetup.globalcompile.classes.dir}"    
@@ -1307,7 +1420,7 @@
         <pathelement location="${classes.dir}" />
         <pathelement location="${quicksetup.classes.dir}" />
         <pathelement location="${unittest.classes.dir}" />
-
+        <pathelement location="${resource.dir}" />
         <path refid="run.classpath" />
         <path refid="emma.lib" />
 
@@ -1434,6 +1547,18 @@
 
     <mkdir dir="${buildtools.classes.dir}" />
 
+    <javac srcdir="${src.dir}:${msg.src.dir}" destdir="${buildtools.classes.dir}"
+           sourcepath=""
+           includes="org/opends/messages/Severity.java,
+                     org/opends/messages/Category.java,
+                     org/opends/messages/Message.java,
+                     org/opends/messages/MessagePropertyKey.java,
+                     org/opends/messages/MessageDescriptor.java"
+           debug="on" debuglevel="${build.debuglevel}" source="1.5"
+           target="1.5" deprecation="true" fork="true" memoryInitialSize="${MEM}"
+           memoryMaximumSize="${MEM}"/>
+
+
     <javac srcdir="${buildtools.src.dir}" destdir="${buildtools.classes.dir}"
            debug="on" debuglevel="${build.debuglevel}" source="1.5"
            target="1.5" deprecation="true" fork="true" memoryInitialSize="${MEM}"
@@ -1560,8 +1685,6 @@
     </delete>
   </target>
 
-
-
   <!-- Validate core administration component XML definition files. -->
   <target name="validateadmin" description="Validate core administration component XML definition files.">
     <schemavalidate>
@@ -1572,8 +1695,12 @@
     </schemavalidate>
   </target>
 
-
-
+  <!-- Remove all dynamically-generated build files. -->
+  <target name="cleanmessages" description="Clean up any generated source files for messages">
+    <delete includeemptydirs="true">
+      <fileset dir="${msg.javagen.dir}" includes="**/*" />
+    </delete>
+  </target>
 
   <!-- Generate a src.zip file containing all the server source. -->
   <target name="srczip" depends="compileadmin"
diff --git a/opendj-sdk/opends/resource/Messages.java.stub b/opendj-sdk/opends/resource/Messages.java.stub
new file mode 100644
index 0000000..4ca5028
--- /dev/null
+++ b/opendj-sdk/opends/resource/Messages.java.stub
@@ -0,0 +1,46 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ */
+
+package ${PACKAGE};
+
+import org.opends.messages.MessageDescriptor;
+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.
+ */
+public class ${CLASS_NAME} {
+
+  /** Base property for resource bundle containing messages */
+  static private final String BASE = "${BASE}";
+
+  ${MESSAGES}
+
+}
diff --git a/opendj-sdk/opends/resource/admin/example-plugin/ExamplePlugin.java b/opendj-sdk/opends/resource/admin/example-plugin/ExamplePlugin.java
index 5bda58d..31607e1 100644
--- a/opendj-sdk/opends/resource/admin/example-plugin/ExamplePlugin.java
+++ b/opendj-sdk/opends/resource/admin/example-plugin/ExamplePlugin.java
@@ -39,9 +39,10 @@
 import org.opends.server.api.plugin.StartupPluginResult;
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.ConfigChangeResult;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
+import org.opends.server.messages.Message;
 
 import com.example.opends.server.ExamplePluginCfg;
 
@@ -139,7 +140,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      ExamplePluginCfg config, List<String> messages) {
+      ExamplePluginCfg config, List<Message> messages) {
     // The only thing that can be validated here is the plugin's
     // message. However, it is always going to be valid, so let's
     // always return true.
diff --git a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContext.java b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContext.java
index 9db9697..53059c8 100644
--- a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContext.java
+++ b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContext.java
@@ -1096,7 +1096,7 @@
   /**
    * This method returns the DN of the entry that corresponds to the given host
    * name port representation.
-   * @param hostnameport the host name and port.
+   * @param serverUniqueId the host name and port.
    * @return the DN of the entry that corresponds to the given host name and
    * port.
    * @throws ADSContextException if something goes wrong.
@@ -1306,7 +1306,7 @@
 
   /**
    * Returns the attributes for some server group properties.
-   * @param serverProperties the server group properties.
+   * @param serverGroupProperties the server group properties.
    * @return the attributes for the given server group properties.
    * @throws ADSContextException if something goes wrong.
    */
@@ -1330,7 +1330,7 @@
 
   /**
    * Returns the attributes for some server group properties.
-   * @param serverProperties the server group properties.
+   * @param serverGroupProperties the server group properties.
    * @return the attributes for the given server group properties.
    * @throws ADSContextException if something goes wrong.
    */
diff --git a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContextException.java b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContextException.java
index ea44f35..bbf37be 100644
--- a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContextException.java
+++ b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ADSContextException.java
@@ -27,6 +27,8 @@
 
 package org.opends.admin.ads;
 
+import org.opends.messages.Message;
+import org.opends.server.types.OpenDsException;
 
 
 /**
@@ -34,7 +36,7 @@
  * @see org.opends.admin.ads.ADSContext
  *
  */
-public class ADSContextException extends Exception {
+public class ADSContextException extends OpenDsException {
 
   private static final long serialVersionUID = 1984039711031042813L;
 
@@ -154,7 +156,7 @@
   /**
    * {@inheritDoc}
    */
-  public String toString()
+  public Message getReason()
   {
     if (toString == null)
     {
@@ -164,7 +166,7 @@
         toString += "  Root cause: "+getCause().toString();
       }
     }
-    return toString;
+    return Message.raw(toString); // TODO: i18n
   }
 
   /**
diff --git a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java
index d5c9903..2034463 100644
--- a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java
+++ b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java
@@ -737,7 +737,7 @@
    * Returns the number of entries in a given backend using the provided
    * InitialLdapContext.
    * @param ctx the InitialLdapContext to use to update the configuration.
-   * @param backenID the id of the backend.
+   * @param backendID the id of the backend.
    * @return the number of entries in the backend.
    * @throws NamingException if there was an error.
    */
diff --git a/opendj-sdk/opends/src/ads/org/opends/admin/ads/TopologyCacheException.java b/opendj-sdk/opends/src/ads/org/opends/admin/ads/TopologyCacheException.java
index 2ab1b0d..759bd9d 100644
--- a/opendj-sdk/opends/src/ads/org/opends/admin/ads/TopologyCacheException.java
+++ b/opendj-sdk/opends/src/ads/org/opends/admin/ads/TopologyCacheException.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.admin.ads;
+import org.opends.server.types.OpenDsException;
 
 import javax.naming.NamingException;
 
@@ -35,8 +36,8 @@
  * This class represents the Exception that can occur while reading server
  * configuration through the TopologyCache class.
  */
-public class TopologyCacheException extends Exception
-{
+public class TopologyCacheException extends OpenDsException {
+
   private static final long serialVersionUID = 1709535837273360382L;
   private Type type;
   private String ldapUrl;
diff --git a/opendj-sdk/opends/src/build-tools/org/opends/build/tools/CoverageDiff.java b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/CoverageDiff.java
index 37b9ff4..1e5993f 100644
--- a/opendj-sdk/opends/src/build-tools/org/opends/build/tools/CoverageDiff.java
+++ b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/CoverageDiff.java
@@ -41,7 +41,6 @@
 import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
 import org.tmatesoft.svn.core.wc.SVNDiffClient;
 import org.tmatesoft.svn.core.wc.SVNRevision;
-import org.tmatesoft.svn.core.wc.SVNWCUtil;
 
 public class CoverageDiff extends Task {
 
diff --git a/opendj-sdk/opends/src/build-tools/org/opends/build/tools/GenerateMessageFile.java b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/GenerateMessageFile.java
new file mode 100644
index 0000000..54b6e4f
--- /dev/null
+++ b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/GenerateMessageFile.java
@@ -0,0 +1,757 @@
+package org.opends.build.tools;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import static org.opends.build.tools.Utilities.*;
+import org.opends.messages.Category;
+import org.opends.messages.Severity;
+import org.opends.build.tools.MessagePropertyKey;
+import org.opends.messages.MessageDescriptor;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.BufferedReader;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.util.Properties;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.UnknownFormatConversionException;
+import java.util.Calendar;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.EnumSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Generates a Java class containing representations of messages
+ * found in a properties file.
+ */
+public class GenerateMessageFile extends Task {
+
+  private File source;
+  private File dest;
+  private boolean overwrite;
+
+  static private final String MESSAGES_FILE_STUB =
+          "resource/Messages.java.stub";
+
+  static private final String REGISTRY_FILE_NAME =
+          "src/messages/generated/org/opends/messages/descriptors.reg";
+
+  /**
+   * Used to set a category for all messages in the property file.
+   * If set, the category for each message need not be encoded in
+   * the message's property file key.
+   */
+  static private final String GLOBAL_CATEGORY = "global.category";
+
+  /**
+   * Used to set a severity for all messages in the property file.
+   * If set, the severity for each message need not be encoded in
+   * the message's property file key.
+   */
+  static private final String GLOBAL_SEVERITY = "global.severity";
+
+  /**
+   * Used to set a category mask for all messages in the property
+   * file.  If set, the category will automatically be assigned
+   * USER_DEFINED and the value of <code>GLOBAL_CATEGORY</code>
+   * will be ignored.
+   */
+  static private final String GLOBAL_CATEGORY_MASK = "global.mask";
+
+  /**
+   * When true generates messages that have no ordinals.
+   */
+  static private final String GLOBAL_ORDINAL = "global.ordinal";
+
+
+  static private final Set<String> DIRECTIVE_PROPERTIES = new HashSet<String>();
+  static {
+    DIRECTIVE_PROPERTIES.add(GLOBAL_CATEGORY);
+    DIRECTIVE_PROPERTIES.add(GLOBAL_CATEGORY_MASK);
+    DIRECTIVE_PROPERTIES.add(GLOBAL_SEVERITY);
+    DIRECTIVE_PROPERTIES.add(GLOBAL_ORDINAL);
+  }
+
+  static private final String SPECIFIER_REGEX =
+          "%(\\d+\\$)?([-#+ 0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])";
+
+  private final Pattern SPECIFIER_PATTERN = Pattern.compile(SPECIFIER_REGEX);
+
+  /**
+   * Message giving formatting rules for string keys.
+   */
+  static public String KEY_FORM_MSG;
+
+  static {
+    KEY_FORM_MSG = new StringBuilder()
+            .append(".\n\nOpenDS 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("\n\nDESCRIPTION is a descriptive string composed ")
+            .append("of uppercase characeter, digits and underscores ")
+            .append("describing the purpose of the message ")
+            .append("\n\nORDINAL is an integer between 0 and 65535 that is ")
+            .append("unique to other messages defined in this file.\n\n")
+            .append("You can turn relax the mandate for including the ")
+            .append("more of the CATEGORY,")
+            .append("SEVERITY, and/or ORDINAL by including one or more ")
+            .append("of the following property directives in your properties ")
+            .append("file:  ")
+            .append(GLOBAL_CATEGORY)
+            .append(", ")
+            .append(GLOBAL_SEVERITY)
+            .append(", ")
+            .append(GLOBAL_ORDINAL)
+            .append("and setting their value appropriately.")
+            .toString();
+  }
+
+
+  /**
+   * Representation of a format specifier (for example %s).
+   */
+  private class FormatSpecifier {
+
+    private String[] sa;
+
+    /**
+     * Creates a new specifier.
+     * @param sa specifier components
+     */
+    FormatSpecifier(String[] sa) {
+      this.sa = sa;
+    }
+
+    /**
+     * Indicates whether or not the specifier uses arguement
+     * indexes (for example 2$).
+     * @return boolean true if this specifier uses indexing
+     */
+    public boolean specifiesArgumentIndex() {
+      return this.sa[0] != null;
+    }
+
+    /**
+     * Returns a java class associated with a particular formatter
+     * based on the conversion type of the specifier.
+     * @return Class for representing the type of arguement used
+     *         as a replacement for this specifier.
+     */
+    public Class getSimpleConversionClass() {
+      Class c = null;
+      String sa4 = sa[4] != null ? sa[4].toLowerCase() : null;
+      String sa5 = sa[5] != null ? sa[5].toLowerCase() : null;
+      if ("t".equals(sa4)) {
+        c = Calendar.class;
+      } else if (
+              "b".equals(sa5)) {
+        c = Boolean.class;
+      } else if (
+              "h".equals(sa5)) {
+        c = Integer.class;
+      } else if (
+              "s".equals(sa5)) {
+        c = CharSequence.class;
+      } else if (
+              "c".equals(sa5)) {
+        c = Character.class;
+      } else if (
+              "d".equals(sa5) ||
+              "o".equals(sa5) ||
+              "x".equals(sa5) ||
+              "e".equals(sa5) ||
+              "f".equals(sa5) ||
+              "g".equals(sa5) ||
+              "a".equals(sa5)) {
+        c = Number.class;
+      } else if (
+              "n".equals(sa5) ||
+              "%".equals(sa5)) {
+        // ignore literals
+      }
+      return c;
+    }
+
+  }
+
+  /**
+   * Represents a message to be written into the messages files.
+   */
+  private class MessageDescriptorDeclaration {
+
+    private MessagePropertyKey key;
+    private String formatString;
+    private List<FormatSpecifier> specifiers;
+    private List<Class> classTypes;
+    private String[] constructorArgs;
+
+    /**
+     * Creates a parameterized instance.
+     * @param key of the message
+     * @param formatString of the message
+     */
+    public MessageDescriptorDeclaration(MessagePropertyKey key,
+                                     String formatString) {
+      this.key = key;
+      this.formatString = formatString;
+      this.specifiers = parse(formatString);
+      this.classTypes = new ArrayList<Class>();
+      for (FormatSpecifier f : specifiers) {
+        Class c = f.getSimpleConversionClass();
+        if (c != null) {
+          classTypes.add(c);
+        }
+      }
+    }
+
+    /**
+     * Gets the name of the Java class that will be used to represent
+     * this message's type.
+     * @return String representing the Java class name
+     */
+    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");
+      } else {
+        sb.append(getShortClassName(MessageDescriptor.class));
+        sb.append(".");
+        sb.append(MessageDescriptor.DESCRIPTOR_CLASS_BASE_NAME);
+        sb.append(classTypes.size());
+        sb.append(getClassTypeVariables());
+      }
+      return sb.toString();
+    }
+
+    /**
+     * Gets a string representing the message type class' variable
+     * information (for example '<String,Integer>') that is based on
+     * the type of arguments specified  by the specifiers in this message.
+     * @return String representing the message type class parameters
+     */
+    public String getClassTypeVariables() {
+      StringBuilder sb = new StringBuilder();
+      if (classTypes.size() > 0) {
+        sb.append("<");
+        for (int i = 0; i < classTypes.size(); i++) {
+          Class c = classTypes.get(i);
+          if (c != null) {
+            sb.append(getShortClassName(c));
+            if (i < classTypes.size() - 1) {
+              sb.append(",");
+            }
+          }
+        }
+        sb.append(">");
+      }
+      return sb.toString();
+    }
+
+    /**
+     * Gets the comments that will appear above the messages declaration
+     * in the messages file.
+     * @return String comment
+     */
+    public String getComment() {
+      StringBuilder sb = new StringBuilder();
+      sb.append(indent(1)).append("/**").append(EOL);
+      String ws = wrapText(formatString, 70);
+      String[] sa = ws.split(EOL);
+      for (String s : sa) {
+        sb.append(indent(1)).append(" * ").append(s).append(EOL);
+      }
+      sb.append(indent(1)).append(" */").append(EOL);
+      return sb.toString();
+    }
+
+    /**
+     * Sets the arguments that will be supplied in the declaration
+     * of the message.
+     * @param s array of string arguments that will be passed
+     *        in the constructor
+     */
+    public void setConstructorArguments(String... s) {
+      this.constructorArgs = s;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String toString() {
+      StringBuilder sb = new StringBuilder();
+      sb.append(getComment());
+      sb.append(indent(1));
+      sb.append("public static final ");
+      sb.append(getDescriptorClassDeclaration());
+      sb.append(" ");
+      sb.append(key.getMessageDescriptorName());
+      sb.append(" =");
+      sb.append(EOL);
+      sb.append(indent(5));
+      sb.append("new ");
+      sb.append(getDescriptorClassDeclaration());
+      sb.append("(");
+      if (constructorArgs != null) {
+        for (int i = 0; i < constructorArgs.length; i++) {
+          sb.append(constructorArgs[i]);
+          if (i < constructorArgs.length - 1) {
+            sb.append(",");
+          }
+        }
+      }
+      sb.append(");");
+      return sb.toString();
+    }
+
+    /**
+     * Indicates whether the generic message type class should
+     * be used.  In general this is when a format specifier is
+     * more complicated than we support or when the number of
+     * arguments exceeeds the number of specific message type
+     * classes (MessageType0, MessageType1 ...) that are defined.
+     * @return boolean indicating
+     */
+    private boolean useGenericMessageTypeClass() {
+      if (specifiers.size() > MessageDescriptor.DESCRIPTOR_MAX_ARG_HANDLER) {
+        return true;
+      } else if (specifiers != null) {
+        for (FormatSpecifier s : specifiers) {
+          if (s.specifiesArgumentIndex()) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * Look for format specifiers in the format string.
+     * @param s format string
+     * @return list of format specifiers
+     */
+    private List<FormatSpecifier> parse(String s) {
+      List<FormatSpecifier> sl = new ArrayList<FormatSpecifier>();
+      Matcher m = SPECIFIER_PATTERN.matcher(s);
+      int i = 0;
+      while (i < s.length()) {
+        if (m.find(i)) {
+          // Anything between the start of the string and the beginning
+          // of the format specifier is either fixed text or contains
+          // an invalid format string.
+          if (m.start() != i) {
+            // Make sure we didn't miss any invalid format specifiers
+            checkText(s.substring(i, m.start()));
+            // Assume previous characters were fixed text
+            //al.add(new FixedString(s.substring(i, m.start())));
+          }
+
+          // Expect 6 groups in regular expression
+          String[] sa = new String[6];
+          for (int j = 0; j < m.groupCount(); j++) {
+            sa[j] = m.group(j + 1);
+          }
+          sl.add(new FormatSpecifier(sa));
+          i = m.end();
+        } else {
+          // No more valid format specifiers.  Check for possible invalid
+          // format specifiers.
+          checkText(s.substring(i));
+          // The rest of the string is fixed text
+          //al.add(new FixedString(s.substring(i)));
+          break;
+        }
+      }
+      return sl;
+    }
+
+    private void checkText(String s) {
+      int idx;
+      // If there are any '%' in the given string, we got a bad format
+      // specifier.
+      if ((idx = s.indexOf('%')) != -1) {
+        char c = (idx > s.length() - 2 ? '%' : s.charAt(idx + 1));
+        throw new UnknownFormatConversionException(String.valueOf(c));
+      }
+    }
+
+  }
+
+  /**
+   * Sets the source of the messages.
+   * @param source File representing the properties
+   *        file containing messages
+   */
+  public void setSourceProps(File source) {
+    this.source = source;
+  }
+
+  /**
+   * Sets the file that will be generated containing
+   * declarations of messages from <code>source</code>.
+   * @param dest File destination
+   */
+  public void setDestJava(File dest) {
+    this.dest = dest;
+  }
+
+  /**
+   * Indicates when true that an existing destination
+   * file will be overwritten.
+   * @param o boolean where true means overwrite
+   */
+  public void setOverwrite(boolean o) {
+    this.overwrite = o;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public void execute() throws BuildException {
+    BufferedReader stubReader = null;
+    PrintWriter destWriter = null;    
+    try {
+
+      // Decide whether to generate messages based on modification
+      // times and print status messages.
+      if (!source.exists()) {
+        throw new BuildException("file " + source.getName() +
+                " does not exist");
+      }
+      if (dest.exists()) {
+        if (this.overwrite || source.lastModified() > dest.lastModified()) {
+          dest.delete();
+          log("Regenerating " + dest.getName() + " from " + source.getName());
+        } else {
+          log(dest.getName() + " is up to date");
+          return;
+        }
+      } else {
+        File javaGenDir = dest.getParentFile();
+        if (!javaGenDir.exists()) {
+          javaGenDir.mkdirs();
+        }
+        log("Generating " + dest.getName() + " from " + source.getName());
+      }
+
+      stubReader = new BufferedReader(new FileReader(MESSAGES_FILE_STUB));
+      destWriter = new PrintWriter(new FileOutputStream(dest));
+
+      String stubLine;
+      while (null != (stubLine = stubReader.readLine())) {
+        if (stubLine.contains("${MESSAGES}")) {
+          Properties properties = new Properties();
+          properties.load(new FileInputStream(source));
+
+          Integer globalOrdinal = null;
+          String go = properties.getProperty(GLOBAL_ORDINAL);
+          if (go != null) {
+            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);
+            globalCategory = Category.USER_DEFINED;
+          } else {
+            String gcs = properties.getProperty(GLOBAL_CATEGORY);
+            if (gcs != null) {
+              globalCategory = Category.valueOf(gcs);
+            }
+          }
+
+          // Determine the value of the global severity
+          Severity globalSeverity = null;
+          String gss = properties.getProperty(GLOBAL_SEVERITY);
+          if (gss != null) {
+            globalSeverity = Severity.parseString(gss);
+          }
+
+          Map<MessagePropertyKey,String> keyMap =
+                  new TreeMap<MessagePropertyKey,String>();
+
+          for (Object propO : properties.keySet()) {
+            String propKey = propO.toString();
+            try {
+              if (!DIRECTIVE_PROPERTIES.contains(propKey)) {
+                MessagePropertyKey key =
+                        MessagePropertyKey.parseString(
+                                propKey,
+                                globalCategory == null,
+                                globalSeverity == null,
+                                globalOrdinal == null);
+                String formatString = properties.getProperty(propKey);
+                keyMap.put(key, formatString);
+              }
+            } catch (IllegalArgumentException iae) {
+              throw new BuildException(
+                      "ERROR: invalid property key " + propKey +
+                      ": " + iae.getMessage() + 
+                      KEY_FORM_MSG);
+            }
+          }
+
+          int usesOfGenericDescriptor = 0;
+
+          Category firstCategory = null;
+          Set<Integer> usedOrdinals = new HashSet<Integer>();
+          for (MessagePropertyKey key : keyMap.keySet()) {
+            String formatString = keyMap.get(key);
+            MessageDescriptorDeclaration message =
+                    new MessageDescriptorDeclaration(key, formatString);
+
+            Category c = (globalCategory != null ?
+                    globalCategory : key.getCategory());
+
+            // Check that this category is the same as all the
+            // others in this file.  Maybe this should be an error?
+            if (firstCategory != null) {
+              if (!firstCategory.equals(c)) {
+                log("WARNING: multiple categories defined in " + source);
+              }
+            } else {
+              firstCategory = c;
+            }
+
+            Severity s = (globalSeverity != null ?
+                    globalSeverity : key.getSeverity());
+
+            if (c == null) {
+              throw new BuildException(
+                      "No category could be assigned to message " +
+                              key + ".  The category " +
+                              "must either be encoded in the property key or " +
+                              "or must be set by including the property " +
+                              GLOBAL_CATEGORY + " in the properties file" +
+                              KEY_FORM_MSG);
+            }
+
+            if (c == null) {
+              throw new BuildException(
+                      "No severity could be assigned to message " +
+                              key + ".  The severity " +
+                              "must either be encoded in the property key or " +
+                              "or must be set by including the property " +
+                              GLOBAL_SEVERITY + " in the properties file" +
+                              KEY_FORM_MSG);
+            }
+
+            if (globalOrdinal == null) {
+              Integer ordinal = key.getOrdinal();
+              if (usedOrdinals.contains(ordinal)) {
+                throw new BuildException(
+                        "The ordinal value \'" + ordinal + "\' in key " +
+                                key + " has been previously defined in " +
+                                source + KEY_FORM_MSG);
+              } else {
+                usedOrdinals.add(ordinal);
+              }
+            }
+
+            message.setConstructorArguments(
+                    "BASE",
+                    quote(key.toString()),
+                    globalMask != null ? globalMask.toString() : c.name(),
+                    s.name(),
+                    globalOrdinal != null ?
+                            globalOrdinal.toString() :
+                            key.getOrdinal().toString()
+            );
+            destWriter.println(message.toString());
+            destWriter.println();
+
+            // Keep track of when we use the generic descriptor
+            // so that we can report it later
+            if (message.useGenericMessageTypeClass()) {
+              usesOfGenericDescriptor++;
+            }
+          }
+
+          log("  Message Generated:" + keyMap.size(), Project.MSG_VERBOSE);
+          log("  MessageDescriptor.ArgN:" + usesOfGenericDescriptor,
+                  Project.MSG_VERBOSE);
+
+        } else {
+          stubLine = stubLine.replace("${PACKAGE}", getPackage());
+          stubLine = stubLine.replace("${CLASS_NAME}",
+                  dest.getName().substring(0, dest.getName().length() -
+                          ".java".length()));
+          stubLine = stubLine.replace("${BASE}", getBase());
+          destWriter.println(stubLine);
+        }
+      }
+
+      registerMessageDescriptor(getMessageDescriptorFullClassName());
+
+      stubReader.close();
+      destWriter.close();
+
+    } catch (Exception e) {
+      // Don't leave a malformed file laying around. Delete
+      // it so it will be forced to be regenerated.
+      if (dest.exists()) {
+        dest.deleteOnExit();
+      }
+      e.printStackTrace();
+      throw new BuildException("Error processing " + source +
+              ":  " + e.getMessage());
+    } finally {
+      if (stubReader != null) {
+        try {
+          stubReader.close();
+        } catch (Exception e){
+          // ignore
+        }
+      }
+      if (destWriter != null) {
+        try {
+          destWriter.close();
+        } catch (Exception e){
+          // ignore
+        }
+      }
+    }
+  }
+
+  private String getMessageDescriptorFullClassName() {
+    return getPackage() + "." + getMessageDescriptorClassName();
+  }
+
+  private String getMessageDescriptorClassName() {
+    return dest.getName().substring(
+            0, dest.getName().length() - ".java".length());
+  }
+
+  private String getBase() {
+    String srcPath = source.getAbsolutePath();
+    String base = srcPath.substring(srcPath.lastIndexOf("messages/"));
+    if (base.endsWith(".properties")) {
+      base = base.substring(0, base.length() - ".properties".length());
+    }
+    return base;
+  }
+
+  private String getPackage() {
+    String destPath = dest.getAbsolutePath();
+    String c = destPath.substring(destPath.indexOf("org/opends"));
+    c = c.replace('/', '.');
+    c = c.substring(0, c.lastIndexOf(".")); // strip .java
+    c = c.substring(0, c.lastIndexOf(".")); // strip class name
+    return c;
+  }
+
+  static private String indent(int indent) {
+    char[] blankArray = new char[2 * indent];
+    Arrays.fill(blankArray, ' ');
+    return new String(blankArray);
+  }
+
+  static private String quote(String s) {
+    return new StringBuilder()
+            .append("\"")
+            .append(s)
+            .append("\"")
+            .toString();
+  }
+
+  static private String getShortClassName(Class c) {
+    String name;
+    String fqName = c.getName();
+    int i = fqName.lastIndexOf('.');
+    if (i > 0) {
+      name = fqName.substring(i + 1);
+    } else {
+      name = fqName;
+    }
+    return name;
+  }
+
+  /**
+   * Writes a record in the messages registry for the specifed
+   * class name.
+   * @param descClassName name of the message descriptor class
+   * @return true if the class was acutally added to the registry;
+   *         false indicates that the class was already present.
+   */
+  static private boolean registerMessageDescriptor(String descClassName)
+          throws IOException
+  {
+    boolean classAdded = false;
+    File registry = getRegistryFile();
+    if (!isDescriptorRegistered(descClassName)) {
+      FileOutputStream file = new FileOutputStream(registry,true);
+      DataOutputStream out   = new DataOutputStream(file);
+      out.writeBytes(descClassName);
+      out.writeBytes("\n");
+      out.flush();
+      out.close();
+    }
+    return classAdded;
+  }
+
+  static private boolean isDescriptorRegistered(String descClassName)
+          throws IOException
+  {
+    boolean isRegistered = false;
+    BufferedReader reader = new BufferedReader(
+            new FileReader(getRegistryFile()));
+    String line;
+    while(null != (line = reader.readLine())) {
+      if (line.trim().equals(descClassName.trim())) {
+        isRegistered = true;
+        break;
+      }
+    }
+    return isRegistered;
+  }
+
+  static private File getRegistryFile() throws IOException {
+    File registry = new File(REGISTRY_FILE_NAME);
+    if (!registry.exists()) {
+      File parent = registry.getParentFile();
+      if (!parent.exists()) {
+        parent.mkdirs();
+      }
+      registry.createNewFile();
+    }
+    return registry;
+  }
+
+
+  /**
+   * For testing.
+   * @param args from command line
+   */
+  public static void main(String[] args) {
+    File source = new File("resource/messages/xxx.properties");
+    File dest = new File("/tmp/org/opends/XXX.java");
+    GenerateMessageFile gmf = new GenerateMessageFile();
+    gmf.setOverwrite(true);
+    gmf.setDestJava(dest);
+    gmf.setSourceProps(source);
+    gmf.execute();
+  }
+
+}
diff --git a/opendj-sdk/opends/src/build-tools/org/opends/build/tools/MessagePropertyKey.java b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/MessagePropertyKey.java
new file mode 100644
index 0000000..a3f5e43
--- /dev/null
+++ b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/MessagePropertyKey.java
@@ -0,0 +1,267 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.build.tools;
+
+import org.opends.messages.Category;
+import org.opends.messages.Severity;
+
+import java.util.EnumSet;
+
+/**
+ * OpenDS messages defined in properties files must be defined
+ * with the ordinal and in most cases category and severity encoded
+ * in the message key.  This class helps with generating and
+ * parsing of these keys.
+ *
+ * Keys must be of the form
+ *
+ *   CATEGORY_SEVERITY_DESCRIPTION_ORDINAL
+ *
+ * where:
+ * <ul>
+ * <li>
+ * CATEGORY is the string representation of one of the
+ * <code>Category</code> enums.
+ * </li>
+ * <li>
+ * SEVERITY is the long or abbreviated form of one of
+ * the <code>Severity</code> enums.
+ * </li>
+ * <li>
+ * DESCRIPTION is an uppercase string containing characters
+ * and the underscore character for describing the purpose
+ * of the message.
+ * </li>
+ * <li>
+ * ORDINAL is an integer that makes the message unique witin
+ * the property file.
+ * </li>
+ * </ul>
+ *
+ */
+// TODO: move this class to GenerateMessageFile when DirectoryServer
+// no longer needs to support dumpMessages()
+public class MessagePropertyKey
+        implements Comparable<MessagePropertyKey> {
+
+  private Category category;
+
+  private Severity severity;
+
+  private String description;
+
+  private Integer ordinal;
+
+  /**
+   * Creates a message property key from a string value.
+   * @param keyString from properties file
+   * @param includesCategory when true expects ordinals to be encoded
+   *        in the keystring; when false the mandate is relaxed
+   * @param includesSeverity when true expects ordinals to be encoded
+   *        in the keystring; when false the mandate is relaxed
+   * @param includesOrdinal when true expects ordinals to be encoded
+   *        in the keystring; when false the mandate is relaxed
+   * @return MessagePropertyKey created from string
+   */
+  static public MessagePropertyKey parseString(
+          String keyString,
+          boolean includesCategory,
+          boolean includesSeverity,
+          boolean includesOrdinal) {
+
+    Category category = null;
+    Severity severity = null;
+    String description;
+    Integer ordinal = null;
+
+    String k = keyString;
+    for (Category c : EnumSet.allOf(Category.class)) {
+      String cName = c.name();
+      if (k.startsWith(cName)) {
+        category = c;
+        if ('_' != k.charAt(cName.length())) {
+          throw new IllegalArgumentException(
+                  "Error processing " + keyString + ".  Category must be " +
+                          "separated from the rest of the " +
+                          "key with an '_' character");
+        }
+        k = k.substring(cName.length() + 1);
+        break;
+      }
+    }
+    if (category == null && includesCategory) {
+      throw new IllegalArgumentException("Category not included in key " +
+              keyString);
+    }
+
+    for (Severity s : EnumSet.allOf(Severity.class)) {
+      String sName = s.propertyKeyFormName();
+      if (k.startsWith(sName)) {
+        severity = s;
+        if ('_' != k.charAt(sName.length())) {
+          throw new IllegalArgumentException(
+                  "Error processing " + keyString + ".  Severity must be " +
+                          "separated from the rest of the " +
+                          "key with an '_' character");
+        }
+        k = k.substring(sName.length() + 1);
+        break;
+      }
+    }
+    if (severity == null && includesSeverity) {
+      throw new IllegalArgumentException("Severity not included in key " +
+              keyString);
+    }
+
+    if (includesOrdinal) {
+      int li = k.lastIndexOf("_");
+      if (li != -1) {
+        description = k.substring(0, li).toUpperCase();
+      } else {
+        throw new IllegalArgumentException(
+                "Incorrectly formatted key " + keyString);
+      }
+
+      try {
+        String ordString = k.substring(li + 1);
+        ordinal = Integer.parseInt(ordString);
+      } catch (Exception nfe) {
+        throw new IllegalArgumentException("Error parsing ordinal for key " +
+                keyString);
+      }
+    } else {
+      description = k;
+    }
+    return new MessagePropertyKey(category, severity, description, ordinal);
+  }
+
+  /**
+   * Creates a parameterized instance.
+   * @param category of this key
+   * @param severity of this key
+   * @param description of this key
+   * @param ordinal of this key
+   */
+  public MessagePropertyKey(Category category, Severity severity,
+                           String description, Integer ordinal) {
+    this.category = category;
+    this.severity = severity;
+    this.description = description;
+    this.ordinal = ordinal;
+  }
+
+  /**
+   * Gets the category of this key.
+   * @return Category of this key
+   */
+  public Category getCategory() {
+    return this.category;
+  }
+
+  /**
+   * Gets the severity of this key.
+   * @return Severity of this key
+   */
+  public Severity getSeverity() {
+    return this.severity;
+  }
+
+  /**
+   * Gets the description of this key.
+   * @return description of this key
+   */
+  public String getDescription() {
+    return this.description;
+  }
+
+  /**
+   * Gets the ordinal of this key.
+   * @return ordinal of this key
+   */
+  public Integer getOrdinal() {
+    return this.ordinal;
+  }
+
+  /**
+   * Gets the name of the MessageDescriptor as it should appear
+   * in the messages file.
+   * @return name of message descriptor
+   */
+  public String getMessageDescriptorName() {
+    return new StringBuffer()
+            .append(this.severity.messageDesciptorName())
+            .append("_")
+            .append(this.description).toString();
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public String toString() {
+    return getPropertyKeyName(true, true, true);
+  }
+
+  /**
+   * Gets the name of the key as it would appear in a properties file.
+   * @param includeCategory in the name
+   * @param includeSeverity in the name
+   * @param includeOrdinal in the name
+   * @return string representing the property key
+   */
+  public String getPropertyKeyName(boolean includeCategory,
+                                   boolean includeSeverity,
+                                   boolean includeOrdinal) {
+    StringBuilder sb = new StringBuilder();
+    if (category != null && includeCategory) {
+      sb.append(category.name());
+      sb.append("_");
+    }
+    if (severity != null && includeSeverity) {
+      sb.append(severity.propertyKeyFormName());
+      sb.append("_");
+    }
+    sb.append(description);
+    if (ordinal != null && includeOrdinal) {
+      sb.append("_");
+      sb.append(ordinal);
+    }
+    return sb.toString();
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public int compareTo(MessagePropertyKey k) {
+    if (ordinal == k.ordinal) {
+      return description.compareTo(k.description);
+    } else {
+      return ordinal.compareTo(k.ordinal);
+    }
+  }
+
+}
diff --git a/opendj-sdk/opends/src/build-tools/org/opends/build/tools/Utilities.java b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/Utilities.java
new file mode 100644
index 0000000..33f8b5e
--- /dev/null
+++ b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/Utilities.java
@@ -0,0 +1,133 @@
+package org.opends.build.tools;
+import org.opends.messages.Message;
+
+import java.util.StringTokenizer;
+
+/**
+ */
+public class Utilities {
+
+  /**
+   * The end-of-line character for this platform.
+   */
+  public static final String EOL = System.getProperty("line.separator");  
+
+  /**
+   * Inserts line breaks into the provided buffer to wrap text at no more than
+   * the specified column width.  Wrapping will only be done at space boundaries
+   * and if there are no spaces within the specified width, then wrapping will
+   * be performed at the first space after the specified column.
+   *
+   * @param  text   The text to be wrapped.
+   * @param  width  The maximum number of characters to allow on a line if there
+   *                is a suitable breaking point.
+   *
+   * @return  The wrapped text.
+   */
+  public static String wrapText(String text, int width)
+  {
+    StringBuilder   buffer        = new StringBuilder();
+    StringTokenizer lineTokenizer = new StringTokenizer(text, "\r\n", true);
+    while (lineTokenizer.hasMoreTokens())
+    {
+      String line = lineTokenizer.nextToken();
+      if (line.equals("\r") || line.equals("\n"))
+      {
+        // It's an end-of-line character, so append it as-is.
+        buffer.append(line);
+      }
+      else if (line.length() < width)
+      {
+        // The line fits in the specified width, so append it as-is.
+        buffer.append(line);
+      }
+      else
+      {
+        // The line doesn't fit in the specified width, so it needs to be
+        // wrapped.  Do so at space boundaries.
+        StringBuilder   lineBuffer    = new StringBuilder();
+        StringBuilder   delimBuffer   = new StringBuilder();
+        StringTokenizer wordTokenizer = new StringTokenizer(line, " ", true);
+        while (wordTokenizer.hasMoreTokens())
+        {
+          String word = wordTokenizer.nextToken();
+          if (word.equals(" "))
+          {
+            // It's a space, so add it to the delim buffer only if the line
+            // buffer is not empty.
+            if (lineBuffer.length() > 0)
+            {
+              delimBuffer.append(word);
+            }
+          }
+          else if (word.length() > width)
+          {
+            // This is a long word that can't be wrapped, so we'll just have to
+            // make do.
+            if (lineBuffer.length() > 0)
+            {
+              buffer.append(lineBuffer);
+              buffer.append(EOL);
+              lineBuffer = new StringBuilder();
+            }
+            buffer.append(word);
+
+            if (wordTokenizer.hasMoreTokens())
+            {
+              // The next token must be a space, so remove it.  If there are
+              // still more tokens after that, then append an EOL.
+              wordTokenizer.nextToken();
+              if (wordTokenizer.hasMoreTokens())
+              {
+                buffer.append(EOL);
+              }
+            }
+
+            if (delimBuffer.length() > 0)
+            {
+              delimBuffer = new StringBuilder();
+            }
+          }
+          else
+          {
+            // It's not a space, so see if we can fit it on the curent line.
+            int newLineLength = lineBuffer.length() + delimBuffer.length() +
+                                word.length();
+            if (newLineLength < width)
+            {
+              // It does fit on the line, so add it.
+              lineBuffer.append(delimBuffer).append(word);
+
+              if (delimBuffer.length() > 0)
+              {
+                delimBuffer = new StringBuilder();
+              }
+            }
+            else
+            {
+              // It doesn't fit on the line, so end the current line and start
+              // a new one.
+              buffer.append(lineBuffer);
+              buffer.append(EOL);
+
+              lineBuffer = new StringBuilder();
+              lineBuffer.append(word);
+
+              if (delimBuffer.length() > 0)
+              {
+                delimBuffer = new StringBuilder();
+              }
+            }
+          }
+        }
+
+        // If there's anything left in the line buffer, then add it to the
+        // final buffer.
+        buffer.append(lineBuffer);
+      }
+    }
+
+    return buffer.toString();
+  }
+
+}
diff --git a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java
index 543dc96..723779c 100644
--- a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java
+++ b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java
@@ -30,6 +30,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.opends.messages.Message;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.protocols.ldap.AddRequestProtocolOp;
@@ -111,10 +112,11 @@
 
     AddResponseProtocolOp addOp = responseMessage.getAddResponseProtocolOp();
     int resultCode = addOp.getResultCode();
-    String errorMessage = addOp.getErrorMessage();
+    Message errorMessage = addOp.getErrorMessage();
 
     // Set the result code and error message for the DSML response.
-    addResponse.setErrorMessage(errorMessage);
+    addResponse.setErrorMessage(
+            errorMessage != null ? errorMessage.toString() : null);
     ResultCode code = objFactory.createResultCode();
     code.setCode(resultCode);
     addResponse.setResultCode(code);
diff --git a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java
index 83b972a..8714b94 100644
--- a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java
+++ b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java
@@ -30,10 +30,9 @@
 
 import java.io.IOException;
 
-import org.opends.server.protocols.asn1.ASN1Element;
+import org.opends.messages.Message;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.asn1.ASN1OctetString;
-import org.opends.server.protocols.asn1.ASN1Sequence;
 import org.opends.server.protocols.ldap.CompareRequestProtocolOp;
 import org.opends.server.protocols.ldap.CompareResponseProtocolOp;
 import org.opends.server.protocols.ldap.LDAPMessage;
@@ -104,10 +103,11 @@
     CompareResponseProtocolOp compareOp =
           responseMessage.getCompareResponseProtocolOp();
     int resultCode = compareOp.getResultCode();
-    String errorMessage = compareOp.getErrorMessage();
+    Message errorMessage = compareOp.getErrorMessage();
 
     // Set the response code and error message for the DSML response.
-    compareResponse.setErrorMessage(errorMessage);
+    compareResponse.setErrorMessage(
+            errorMessage != null ? errorMessage.toString() : null);
     ResultCode code = objFactory.createResultCode();
     code.setCode(resultCode);
     compareResponse.setResultCode(code);
diff --git a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java
index 2ce15b4..abab00b 100644
--- a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java
+++ b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java
@@ -28,10 +28,9 @@
 
 import java.io.IOException;
 
-import org.opends.server.protocols.asn1.ASN1Element;
+import org.opends.messages.Message;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.asn1.ASN1OctetString;
-import org.opends.server.protocols.asn1.ASN1Sequence;
 import org.opends.server.protocols.ldap.DeleteRequestProtocolOp;
 import org.opends.server.protocols.ldap.DeleteResponseProtocolOp;
 import org.opends.server.protocols.ldap.LDAPMessage;
@@ -99,10 +98,11 @@
     DeleteResponseProtocolOp delOp =
           responseMessage.getDeleteResponseProtocolOp();
     int resultCode = delOp.getResultCode();
-    String errorMessage = delOp.getErrorMessage();
+    Message errorMessage = delOp.getErrorMessage();
 
     // Set the result code and error message for the DSML response.
-    delResponse.setErrorMessage(errorMessage);
+    delResponse.setErrorMessage(
+            errorMessage != null ? errorMessage.toString() : null);
     ResultCode code = objFactory.createResultCode();
     code.setCode(resultCode);
     delResponse.setResultCode(code);
diff --git a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
index acebdaa..0b8d255 100644
--- a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
+++ b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
@@ -30,10 +30,9 @@
 
 import java.io.IOException;
 
-import org.opends.server.protocols.asn1.ASN1Element;
+import org.opends.messages.Message;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.asn1.ASN1OctetString;
-import org.opends.server.protocols.asn1.ASN1Sequence;
 import org.opends.server.protocols.ldap.ExtendedRequestProtocolOp;
 import org.opends.server.protocols.ldap.ExtendedResponseProtocolOp;
 import org.opends.server.protocols.ldap.LDAPMessage;
@@ -100,12 +99,13 @@
     ExtendedResponseProtocolOp extendedOp =
           responseMessage.getExtendedResponseProtocolOp();
     int resultCode = extendedOp.getResultCode();
-    String errorMessage = extendedOp.getErrorMessage();
+    Message errorMessage = extendedOp.getErrorMessage();
 
     // Set the result code and error message for the DSML response.
     extendedResponse.setResponseName(extendedOp.getOID());
     extendedResponse.setResponse(extendedOp.getValue());
-    extendedResponse.setErrorMessage(errorMessage);
+    extendedResponse.setErrorMessage(
+            errorMessage != null ? errorMessage.toString() : null);
     ResultCode code = objFactory.createResultCode();
     code.setCode(resultCode);
     extendedResponse.setResultCode(code);
diff --git a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java
index e224a05..e5a8a78 100644
--- a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java
+++ b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java
@@ -30,11 +30,10 @@
 
 import java.io.IOException;
 
+import org.opends.messages.Message;
 import org.opends.server.tools.LDAPConnection;
-import org.opends.server.protocols.asn1.ASN1Element;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.asn1.ASN1OctetString;
-import org.opends.server.protocols.asn1.ASN1Sequence;
 import org.opends.server.protocols.ldap.LDAPMessage;
 import org.opends.server.protocols.ldap.ModifyDNRequestProtocolOp;
 import org.opends.server.protocols.ldap.ModifyDNResponseProtocolOp;
@@ -113,9 +112,10 @@
     ModifyDNResponseProtocolOp modDNOp =
          responseMessage.getModifyDNResponseProtocolOp();
     int resultCode = modDNOp.getResultCode();
-    String errorMessage = modDNOp.getErrorMessage();
+    Message errorMessage = modDNOp.getErrorMessage();
 
-    modDNResponse.setErrorMessage(errorMessage);
+    modDNResponse.setErrorMessage(
+            errorMessage != null ? errorMessage.toString() : null);
     ResultCode code = objFactory.createResultCode();
     code.setCode(resultCode);
     modDNResponse.setResultCode(code);
diff --git a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java
index 277bff2..ccf2fc8 100644
--- a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java
+++ b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java
@@ -32,10 +32,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.server.protocols.asn1.ASN1Element;
+import org.opends.messages.Message;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.asn1.ASN1OctetString;
-import org.opends.server.protocols.asn1.ASN1Sequence;
 import org.opends.server.protocols.ldap.LDAPAttribute;
 import org.opends.server.protocols.ldap.LDAPMessage;
 import org.opends.server.protocols.ldap.LDAPModification;
@@ -137,10 +136,11 @@
     ModifyResponseProtocolOp modOp =
          responseMessage.getModifyResponseProtocolOp();
     int resultCode = modOp.getResultCode();
-    String errorMessage = modOp.getErrorMessage();
+    Message errorMessage = modOp.getErrorMessage();
 
     // Set the result code and error message for the DSML response.
-    modResponse.setErrorMessage(errorMessage);
+    modResponse.setErrorMessage(
+            errorMessage != null ? errorMessage.toString() : null);
     ResultCode code = objFactory.createResultCode();
     code.setCode(resultCode);
     modResponse.setResultCode(code);
diff --git a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
index 2c18349..950db87 100644
--- a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
+++ b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.dsml.protocol;
+import org.opends.messages.Message;
 
 
 
@@ -169,7 +170,7 @@
         do
         {
           int resultCode = 0;
-          String errorMessage = null;
+          Message errorMessage = null;
           LDAPMessage responseMessage =
                connection.getLDAPReader().readMessage();
 
@@ -224,7 +225,8 @@
               ResultCode code = objFactory.createResultCode();
               code.setCode(resultCode);
               result.setResultCode(code);
-              result.setErrorMessage(errorMessage);
+              result.setErrorMessage(
+                      errorMessage != null ? errorMessage.toString() : null);
               if(searchOp.getMatchedDN() != null)
               {
                  result.setMatchedDN(searchOp.getMatchedDN().toString());
@@ -242,9 +244,8 @@
              org.opends.server.types.ResultCode rc =
                   org.opends.server.types.ResultCode.valueOf(resultCode);
 
-             // FIXME.
-             int msgID = 0;
-             throw new LDAPException(resultCode, msgID, rc.toString());
+             // TODO:  FIXME - null message
+             throw new LDAPException(resultCode, null, rc.getResultCodeName());
            }
 
         } while(opType != LDAPConstants.OP_TYPE_SEARCH_RESULT_DONE);
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/i18n/ResourceProvider.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/i18n/ResourceProvider.java
deleted file mode 100644
index da5ebf2..0000000
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/i18n/ResourceProvider.java
+++ /dev/null
@@ -1,193 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
- */
-
-package org.opends.guitools.i18n;
-
-import java.text.MessageFormat;
-import java.util.ResourceBundle;
-
-/**
- * This class is used to retrieve localized messages from Resources.properties
- * files.  This class extends org.opends.quicksetup.i18n.ResourceProvider so
- * that it first looks for properties in the Resources.properties located in
- * the org.opends.quicksetup.resources package and then if they are not there
- * looks for properties in org.opends.guitools.resources.
- *
- * This is done to avoid duplication of properties between the setup and
- * upgrader which must be separated because of their Web Start nature and the
- * other graphical tools.
- *
- */
-public class ResourceProvider
-extends org.opends.quicksetup.i18n.ResourceProvider
-{
-  private ResourceBundle bundle;
-
-  private static ResourceProvider instance;
-
-  private static final String BUNDLE_NAME =
-    "org.opends.guitools.resources.Resources";
-
-  private ResourceProvider()
-  {
-  }
-
-  /**
-   * Provides an instance of the ResourceProvider.  The instance is unique for
-   * this process (which implies that during the process lifetime we can only
-   * have messages in one language).
-   *
-   * @return an instance of ResourceProvider.
-   */
-  public static ResourceProvider getInstance()
-  {
-    if (instance == null)
-    {
-      instance = new ResourceProvider();
-    }
-    return instance;
-  }
-
-  /**
-   * Gets a localized message for a key value.  In  the properties file we have
-   * something of type:
-   * key=value
-   * @param key the key in the properties file.
-   * @return the value associated to the key in the properties file.
-   * @throws IllegalArgumentException if the key could not be found in the
-   * properties file.
-   */
-  public String getMsg(String key) throws IllegalArgumentException
-  {
-    String msg;
-    try
-    {
-      /* First try to quick setup resource provider as it contains most of
-       * the labels.
-       */
-      msg = super.getMsg(key);
-    }
-    catch (Exception ex)
-    {
-      /* Now try with the status panel specific resources.
-       */
-      try
-      {
-        msg = getResourceBundle().getString(key);
-
-      } catch (java.util.MissingResourceException e)
-      {
-        // The less brutal alternative here is to do msg = key instead
-        // of
-        // throwing an exception but this helps being strict with
-        // resources
-        // (so I prefer to keep it as it is at least at the beginning)
-        throw new IllegalArgumentException("Unknown Resource Bundle key: " +
-            key);
-      }
-    }
-    return msg;
-  }
-
-  /**
-   * Gets a localized message for a key value.  In  the properties file we have
-   * something of type:
-   * key=value
-   *
-   * For instance if we pass as key "mykey" and as arguments {"value1"} and
-   * in the properties file we have:
-   * mykey=value with argument {0}.
-   *
-   * This method will return "value with argument value1".
-   *
-   * @param key the key in the properties file.
-   * @param args the arguments to be passed to generate the resulting value.
-   * @return the value associated to the key in the properties file.
-   * @throws IllegalArgumentException if the key could not be found in the
-   * properties file.
-   */
-  public String getMsg(String key, String... args)
-  throws IllegalArgumentException
-  {
-    String msg;
-    try
-    {
-      /* First try to quick setup resource provider as it contains most of
-       * the labels.
-       */
-      msg = super.getMsg(key, args);
-    }
-    catch (Exception ex)
-    {
-      /* Now try with the status panel specific resources.
-       */
-      try
-      {
-        String pattern = getResourceBundle().getString(key);
-        MessageFormat mf = new MessageFormat(pattern);
-
-        msg = mf.format(args);
-      } catch (java.util.MissingResourceException e)
-      {
-        // The less brutal alternative here is to do msg = key instead
-        // of
-        // throwing an exception but this helps being strict with
-        // resources
-        // (so I prefer to keep it as it is at least at the beginning)
-        throw new IllegalArgumentException("Unknown Resource Bundle key: " +
-            key);
-      }
-    }
-    return msg;
-  }
-
-  /**
-   * The ResourceBundle that will be used to get the localized messages.
-   * @return the ResourceBundle that will be used to get the localized
-   * messages.
-   */
-  private ResourceBundle getResourceBundle()
-  {
-    if (bundle == null)
-    {
-      try
-      {
-        bundle =
-          ResourceBundle.getBundle(BUNDLE_NAME, getLocale(), this
-              .getClass().getClassLoader());
-      } catch (java.util.MissingResourceException e)
-      {
-        throw new IllegalStateException("Could not retrieve Resource Bundle: "
-            + BUNDLE_NAME, e);
-
-      }
-    }
-
-    return bundle;
-  }
-}
-
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/resources/Resources.properties b/opendj-sdk/opends/src/guitools/org/opends/guitools/resources/Resources.properties
deleted file mode 100644
index d1c673d..0000000
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/resources/Resources.properties
+++ /dev/null
@@ -1,352 +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
-# trunk/opends/resource/legal-notices/OpenDS.LICENSE
-# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
-# 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
-# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
-#
-#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
-#
-#
-# This file contains the primary Directory Server configuration.  It must not
-# be directly edited while the server is online.  The server configuration
-# should only be managed using the administration utilities provided with the
-# Directory Server.
-
-#
-# StatusPanel launcher
-#
-status-panel-launcher-usage-description=This utility may be used to display \
-the Status Panel window which displays basic server information and allows to \
-start, stop and restart the server.
-status-panel-launcher-gui-launch-failed=Could not launch Status Panel.  Check \
-that you have access to the display.
-status-panel-launcher-gui-launch-failed-details=Could not launch Status \
-Panel.  Check that you have access to the display.   Check file {0} for details.
-
-#
-# StatusPanel
-#
-statuspanel-dialog-title=OpenDS Status Panel
-quit-status-panel-button-tooltip=Quit Status Panel
-server-status-title=Server Status
-server-status-label=Server Run Status:
-not-available-server-down-tooltip=<html>Information is only available if \
-server is running and you are authenticated<br>as an administrative user.
-not-available-authentication-required-tooltip=<html>Information is only \
-available if you are authenticated<br>as an administrative user.
-stop-button-label=Stop
-stop-button-tooltip=Stops the Directory Server
-start-button-label=Start
-start-button-tooltip=Starts the Directory Server
-restart-button-label=Restart
-restart-button-tooltip=Restarts the Directory Server
-connections-label=Open Connections:
-server-details-title=Server Details
-administrative-users-label=Administrative Users:
-installation-path-label=Installation Path:
-opends-version-label=OpenDS Version:
-java-version-label=Java Version:
-login-dialog-title=Authentication Required
-server-started-label=Started
-server-stopped-label=Stopped
-server-starting-label=Starting
-server-stopping-label=Stopping
-server-unknown-status-label=Unknown
-cannot-connect-to-login-with-cause=Could not connect to the Directory \
-Server with the provided credentials.  The possible causes for this are:\n{0}
-cannot-connect-to-login-without-cause=Could not connect to the Directory \
-Server with the provided credentials.\nCheck that the Administrative User DN \
-and password are valid.
-error-starting-server-generic=Could not Start server.
-authenticate-button-label=Authenticate
-authenticate-status-panel-button-tooltip=Authenticate as an administrative \
-user to view all monitoring information
-listeners-title=Listener Ports
-address-port-column=Address:Port
-protocol-column=Protocol
-state-column=State
-databases-title=Data Sources
-backendid-column=Backend ID
-basedn-column=Base DN
-number-entries-column=Entries
-replicated-column=Replication
-missing-changes-column=Missing Changes
-age-of-oldest-missing-change-column=<html>Age of Oldest<br>Missing \
-Change<br>(hh:mm:ss)
-age-of-oldest-missing-change-column-cli=Age of Oldest Missing Change (hh:mm:ss)
-enabled-label=Enabled
-disabled-label=Disabled
-unknown-label=--
-not-applicable-label=--
-ldap-protocol-label=LDAP
-ldaps-protocol-label=LDAPS
-jmx-protocol-label=JMX
-jmx-secure-protocol-label=JMX (Secure)
-undefined-protocol-label=-Unknown-
-error-reading-config-file=Error reading the configuration file.
-could-not-find-valid-ldapurl=Error reading the configuration file.\n\
-This could be caused because there is not an enabled LDAP port for the \
-specified connection parameters or because you do not have read rights on the \
-configuration file.
-number-entries-multiple-suffixes-in-db={0} (for all base DNs in {1})
-error-reading-config-ldap=Error reading data from server.  Verify the \
-authentication information provided.\nDetails: {0}
-no-dbs-found=-No LDAP Databases Found-
-no-listeners-found=-No Listener Ports Found-
-suffix-replicated-label=Enabled
-suffix-not-replicated-label=Disabled
-
-#
-# Confirmation messages
-#
-confirm-stop-message=Are you sure you want to Stop the Directory Server?
-confirm-stop-title=Confirmation Required
-confirm-restart-message=Are you sure you want to Restart the Directory Server?
-confirm-restart-title=Confirmation Required
-
-#
-# Status Login Dialog
-#
-login-dialog-msg=You must provide an Administrative User DN and password \
-to retrieve monitoring information.
-login-dn-label=Administrative User DN:
-login-dn-tooltip=Enter the distinguished name (DN) of the \
-Administrative User account that will used to retrieve monitoring information
-login-pwd-label=Administrative User Password:
-login-pwd-tooltip=Enter the password of the \
-Administrative User account that will used to retrieve monitoring information
-login-dialog-server-not-running-msg=The Directory Server is not running.  \
-Click OK to continue to the Status Panel.
-login-dialog-server-not-running-title=Directory Server not Running
-login-ok-button-tooltip=Proceed with authentication
-login-cancel-button-tooltip=Close Login Dialog
-cannot-connect-with-ads-credentials-without-cause=Could not connect to the \
-Directory Server with the provided credentials.\nCheck that the Administrative \
-User ID and password are valid.
-
-#
-# Status Command Line
-#
-cli-status-pwd-and-pwd-file-provided=You cannot provide Bind Password (-w or \
---bindPassword) and Bind Password File (-W or --bindPasswordFile) at the same \
-time.
-cli-status-error-reading-pwd-file=Could not read the password from \
-file {0}.  Check that the file path is correct, that you have access rights to \
-it and that it contains a password.
-cli-status-ldapauth-password-prompt=Password for user {0}:  
-status-cli-usage-description=This utility may be used to display basic server \
-information
-not-available-authentication-required-cli-label=<not available> (*)
-not-available-authentication-required-cli-legend=* Information only available \
-if you provide authentication information when launching the status \
-command.
-not-available-server-down-cli-label=<not available> (*)
-not-available-server-down-cli-legend=* Information only available if server is \
-running and you provide authentication information when launching the status \
-command.
-
-
-#
-# Uninstall command line messages
-#
-uninstall-launcher-usage-description=This utility may be used to uninstall the \
-Directory Server.
-uninstall-launcher-launching-gui=Launching graphical uninstall...
-uninstall-launcher-launching-cli=Launching command line uninstall...
-uninstall-launcher-gui-launched-failed=\n\nThe graphical Uninstall launch \
-failed.\n\nLaunching command line Uninstall...
-uninstall-launcher-gui-launched-failed-details=\n\nThe graphical Uninstall \
-launch failed.  Check file {0} for more details.\n\nLaunching command line \
-Uninstall...
-cli-uninstall-unknown-argument=Unknown argument {0}
-cli-uninstall-yes-short=y
-cli-uninstall-yes-long=yes
-cli-uninstall-no-short=n
-cli-uninstall-no-long=no
-cli-uninstall-confirm-prompt={0}\n[{1}]:
-cli-uninstall-string-prompt={0}\n[{1}]:
-cli-uninstall-error-reading-stdin=Unexpected error reading standard input.
-cli-uninstall-what-to-delete=Do you want to remove all components of \
-OpenDS or select the components to remove?\n\
-1. Remove all components\n\
-2. Select the components to be removed\n\
-3. Neither; Quit the uninstaller
-cli-uninstall-confirm-libraries-binaries=Remove Server Libraries and \
-Administrative Tools?
-cli-uninstall-confirm-databases=Remove Database Contents?
-cli-uninstall-confirm-logs=Remove Log Files?
-cli-uninstall-confirm-configuration-schema=Remove Configuration and Schema \
-Files?
-cli-uninstall-confirm-backups=Remove Backup Files Contained in bak Directory?
-cli-uninstall-confirm-ldifs=Remove LDIF Export Files Contained in ldif \
-Directory?
-cli-uninstall-confirm-outsidedbs=The Directory Server contains database files \
-in the following locations outside the server path:\n{0}\nRemove these files?
-cli-uninstall-confirm-outsidelogs=The Directory Server contains log files in \
-the following locations outside the server path:\n{0}\nRemove these files?
-cli-uninstall-nothing-to-be-uninstalled=You must select something to be \
-uninstalled.
-cli-uninstall-confirm-stop=The OpenDS server is currently running and \
-must be stopped before uninstallation can continue.\nStop the Server and \
-permanently delete the files?
-cli-uninstall-confirm-delete-files=The files will be permanently deleted, are \
-you sure you want to continue?
-cli-uninstall-server-stopped=The Server is Stopped.
-
-#
-# Dialog titles
-#
-frame-uninstall-title=OpenDS Uninstall
-
-#
-# Wizard buttons (labels and tooltips)
-#
-finish-button-uninstall-label=Uninstall
-finish-button-uninstall-tooltip=Finish Uninstall
-close-button-uninstall-tooltip=Close Uninstall Window
-
-#
-# Confirmation dialogs
-#
-confirm-close-uninstall-title=Confirmation Required
-confirm-close-uninstall-msg=OpenDS Uninstall has not yet completed.\nAre you \
-sure you want to close the Uninstall Window?
-cancel-button-uninstall-tooltip=Cancel Uninstall
-confirm-uninstall-server-not-running-msg=Confirm Uninstall\n\
-All selected files will be permanently deleted, are you sure you \
-want to continue?
-confirm-uninstall-server-not-running-title=Confirm Uninstall
-confirm-uninstall-server-running-msg=Server is Running\n\
-The OpenDS server is currently running and must be stopped before \
-uninstallation can continue. Do you want the uninstaller to stop \
-the server for you and continue with the uninstall? If you click \
-No, you will need to stop the server manually to continue.
-confirm-uninstall-replication-server-running-title=Confirmation Required
-confirm-uninstall-replication-server-running-msg=This server is configured to \
-do replication.\nIn order to remove references to this server in other \
-OpenDS servers you must provide administrator authentication.\n\nClick on \
-'Yes' to provide authentication to remove the remote references.
-confirm-uninstall-replication-server-not-running-title=Confirmation Required
-confirm-uninstall-replication-server-not-running-msg=This server is configured \
-to do replication.\nIn order to remove references to this server in other \
-OpenDS servers the server will be started and then you must provide \
-administrator authentication.\n\nClick on 'Yes' to start the server and then \
-provide authentication to remove the remote references.
-confirm-uninstall-server-running-title=Server is Running
-
-# Confirm Uninstall Panel
-nothing-selected-to-uninstall=You must select something to be uninstalled.
-
-#
-# Steps labels (on the left side of the wizard)
-#
-confirm-uninstall-step=Uninstall Options
-
-#
-# Confirm Uninstall Panel specific labels
-#
-confirm-uninstall-panel-title=Uninstall Options
-# The following line contains some HTML tags.  translators should respect them.
-# Concerning the URL, depending on how works the product page translators
-# have to modify it or not: if the server uses the locale of the browser to display
-# a language there is no translation to be done but if we have specific URL for
-# each language the URL must be localized.
-confirm-uninstall-panel-instructions=The OpenDS Uninstall tool will remove all \
-parts of the OpenDS server you have selected below from your system. If all \
-are selected, the server will be removed entirely.
-server-path-label=Server Path:
-remove-label=Remove:
-remove-libraries-and-tools-label=Server Libraries and Administrative Tools
-remove-databases-label=Database Contents
-remove-logs-label=Log Files
-remove-schema-and-configuration-label=Configuration and Schema Files
-remove-backups-label=Backup Files Contained in bak Directory
-remove-ldifs-label=LDIF Export Files Contained in ldif Directory
-remove-libraries-and-tools-tooltip=Remove Server Libraries and Administrative \
-Tools
-remove-databases-tooltip=Remove Database Contents
-remove-logs-tooltip=Remove Log Files
-remove-schema-and-configuration-tooltip=Remove Configuration and Schema Files
-remove-backups-tooltip=Remove Backup Files Contained in bak Directory
-remove-ldifs-tooltip=Remove LDIF Export Files Contained in ldif Directory
-delete-outside-dbs-msg=The Directory Server contains database files in the \
-following locations outside the server path:
-delete-outside-dbs-label=Delete these Database Files
-delete-outside-dbs-tooltip=Check this box to Delete the Database Files located \
-outside the install directory
-delete-outside-logs-msg=The Directory Server contains log files in the \
-following locations outside the server path:
-delete-outside-logs-label=Delete these Log Files
-delete-outside-logs-tooltip=Check this box to Delete the Log Files located \
-outside the install directory
-
-#
-# Progress Summary Labels
-#
-summary-uninstall-not-started=Starting Uninstallation...
-summary-disabling-windows-service=Disabling Windows Service...
-summary-deleting-external-db-files=Deleting Database Files outside the \
-Installation Path...
-summary-deleting-external-log-files=Deleting Log Files outside the \
-Installation Path...
-summary-deleting-external-references=Deleting External References...
-summary-deleting-installation-files=Deleting Files under the Installation \
-Path...
-summary-unconfiguring-replication=Removing references in remote OpenDS \
-servers...
-summary-uninstall-finished-successfully-remove-jarfiles=<b>OpenDS Uninstall \
-Completed Successfully.</b><br><br>To complete the uninstallation, you must \
-delete manually the following files and directories:<br>{0}
-summary-uninstall-finished-successfully=<b>OpenDS Uninstall Completed \
-Successfully.</b>
-summary-uninstall-finished-successfully-remove-jarfiles-cli=OpenDS Uninstall \
-Completed Successfully.\nTo complete the uninstallation, you must \
-delete manually the following files and directories:\n{0}
-summary-uninstall-finished-successfully-cli=OpenDS Uninstall Completed \
-Successfully.
-summary-uninstall-finished-with-error=An error occurred.  Check 'Details' text \
-area for more information.
-summary-uninstall-finished-with-error-on-remote=<b>OpenDS Uninstall Succeeded \
-With Warnings</b><br>OpenDS was successfully uninstalled in the local \
-machine but some error occurred updating remote servers.  Check 'Details' text \
-area for more information.
-summary-uninstall-finished-with-error-on-remote-cli=OpenDS was successfully \
-uninstalled in the local machine but some error occurred updating remote \
-servers.
-progress-removing-references=Removing references on {0}
-
-
-#
-# Uninstall login dialog
-#
-uninstall-login-dialog-msg=You must provide a Global Administrative User ID to \
-be able to remove the references to this server in other OpenDS servers.\nYou \
-must also provide the name of this host (or IP address) as it is referenced in \
-remote servers.
-uninstall-login-host-name-label=Host Name:
-uninstall-login-host-name-tooltip=The name of this host (or IP address) as it \
-is referenced in other OpenDS servers.
-uninstall-login-uid-tooltip=The Global Administrator User ID to be used to \
-read and update configuration in other OpenDS servers.
-uninstall-login-pwd-tooltip=The password of the Global Administrator to be \
-used to read and update configuration in other OpenDS servers.
-uninstall-login-ok-button-tooltip=Try to connect with the provided \
-authentication.
-uninstall-login-cancel-button-tooltip=Close this dialog and do not try to \
-remove references of this server in other OpenDS servers.
\ No newline at end of file
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigException.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigException.java
index 3b69fce..f2c5156 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigException.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigException.java
@@ -27,12 +27,14 @@
 
 package org.opends.guitools.statuspanel;
 
+import org.opends.messages.Message;
+import org.opends.server.types.OpenDsException;
 
 /**
  * Exception thrown when there is an error with the configuration (for instance
  * a valid URL for the requested protocol could not be found).
  */
-public class ConfigException extends Exception
+public class ConfigException extends OpenDsException
 {
   private static final long serialVersionUID = 1266482779183126905L;
 
@@ -40,7 +42,7 @@
    * Constructor for the exception.
    * @param msg the localized message to be used.
    */
-  public ConfigException(String msg)
+  public ConfigException(Message msg)
   {
     super(msg);
   }
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromFile.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromFile.java
index 8ca9099..41c4b3f 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromFile.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromFile.java
@@ -37,6 +37,7 @@
 import java.util.logging.Logger;
 
 import org.opends.server.core.DirectoryServer;
+import org.opends.messages.Message;
 import org.opends.server.util.LDIFException;
 import org.opends.server.util.LDIFReader;
 import org.opends.server.types.Attribute;
@@ -45,10 +46,11 @@
 import org.opends.server.types.Entry;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.ObjectClass;
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.quicksetup.util.Utils;
 import org.opends.quicksetup.Installation;
 
+import static org.opends.messages.AdminToolMessages.*;
+
 /**
  * This class is used to retrieve configuration information directly from the
  * config.ldif file.
@@ -79,7 +81,7 @@
   private HashSet<DatabaseDescriptor> databases =
     new HashSet<DatabaseDescriptor>();
   private HashSet<String> administrativeUsers = new HashSet<String>();
-  private String errorMessage;
+  private Message errorMessage;
   private boolean replicationConfigured = false;
   private HashSet<String> replicatedSuffixes = new HashSet<String>();
 
@@ -126,22 +128,22 @@
     catch (IOException ioe)
     {
       LOG.log(Level.SEVERE, "Error reading config file: "+ioe, ioe);
-      errorMessage = Utils.getThrowableMsg(getI18n(),
-          "error-reading-config-file", null, ioe);
+      errorMessage = Utils.getThrowableMsg(
+          INFO_ERROR_READING_CONFIG_FILE.get(), ioe);
     }
     catch (LDIFException le)
     {
       LOG.log(Level.SEVERE, "Error reading config file: "+le, le);
-      errorMessage = Utils.getThrowableMsg(getI18n(),
-          "error-reading-config-file", null, le);
+      errorMessage = Utils.getThrowableMsg(
+          INFO_ERROR_READING_CONFIG_FILE.get(), le);
     }
     catch (Throwable t)
     {
       LOG.log(Level.SEVERE, "Error reading config file: "+t, t);
       // Bug
       t.printStackTrace();
-      errorMessage = Utils.getThrowableMsg(getI18n(),
-          "error-reading-config-file", null, t);
+      errorMessage = Utils.getThrowableMsg(
+          INFO_ERROR_READING_CONFIG_FILE.get(), t);
     }
     finally
     {
@@ -197,7 +199,7 @@
    * @return the error message that we got when retrieving the information
    * from the config.ldif file.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -375,7 +377,7 @@
         getFirstValue(entry, "ds-cfg-use-ssl"));
 
     ListenerDescriptor.Protocol protocol;
-    String protocolDescription;
+    Message protocolDescription;
 
     ListenerDescriptor.State state;
     if (entry.hasObjectClass(ldapConnectionHandlerOc))
@@ -383,12 +385,12 @@
       addressPort = address+":"+port;
       if (isSecure)
       {
-        protocolDescription = getMsg("ldaps-protocol-label");
+        protocolDescription = INFO_LDAPS_PROTOCOL_LABEL.get();
         protocol = ListenerDescriptor.Protocol.LDAPS;
       }
       else
       {
-        protocolDescription = getMsg("ldap-protocol-label");
+        protocolDescription = INFO_LDAP_PROTOCOL_LABEL.get();
         protocol = ListenerDescriptor.Protocol.LDAP;
       }
       boolean enabled = "true".equalsIgnoreCase(
@@ -407,12 +409,12 @@
       addressPort = "0.0.0.0:"+port;
       if (isSecure)
       {
-        protocolDescription = getMsg("jmx-secure-protocol-label");
+        protocolDescription = INFO_JMX_SECURE_PROTOCOL_LABEL.get();
         protocol = ListenerDescriptor.Protocol.JMXS;
       }
       else
       {
-        protocolDescription = getMsg("jmx-protocol-label");
+        protocolDescription = INFO_JMX_PROTOCOL_LABEL.get();
         protocol = ListenerDescriptor.Protocol.JMX;
       }
       boolean enabled = "true".equalsIgnoreCase(
@@ -428,7 +430,7 @@
     }
     else
     {
-      addressPort = getMsg("unknown-label");
+      addressPort = INFO_UNKNOWN_LABEL.get().toString();
       protocolDescription = null;
       protocol = ListenerDescriptor.Protocol.OTHER;
       /* Try to figure a name from the cn */
@@ -438,16 +440,16 @@
         int index = cn.toLowerCase().indexOf("connection handler");
         if (index > 0)
         {
-          protocolDescription = cn.substring(0, index).trim();
+          protocolDescription = Message.raw(cn.substring(0, index).trim());
         }
         else
         {
-          protocolDescription = cn;
+          protocolDescription = Message.raw(cn);
         }
       }
       else
       {
-        protocolDescription = getMsg("undefined-protocol-label");
+        protocolDescription = INFO_UNDEFINED_PROTOCOL_LABEL.get();
       }
       state = ListenerDescriptor.State.UNKNOWN;
     }
@@ -584,20 +586,6 @@
     }
   }
 
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
   /*
    * The following 2 methods are convenience methods to retrieve String values
    * from an entry.
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromLDAP.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromLDAP.java
index 03d00d3..b7b86b3 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromLDAP.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromLDAP.java
@@ -43,9 +43,11 @@
 import javax.naming.ldap.LdapName;
 
 import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.quicksetup.util.Utils;
 
+import org.opends.messages.Message;
+import static org.opends.messages.AdminToolMessages.*;
+
 /**
  * This class is used to retrieve configuration and monitoring information using
  * LDAP protocol.
@@ -58,7 +60,7 @@
   private HashSet<DatabaseDescriptor> databases =
     new HashSet<DatabaseDescriptor>();
   private HashSet<String> administrativeUsers = new HashSet<String>();
-  private String errorMessage;
+  private Message errorMessage;
   private boolean replicationConfigured = false;
   private HashSet<String> replicatedSuffixes = new HashSet<String>();
   private HashMap<String, Integer> hmMissingChanges =
@@ -207,15 +209,13 @@
       {
         detail = ne.toString();
       }
-      String[] arg = {detail};
-      errorMessage = getMsg("error-reading-config-ldap", arg);
+      errorMessage = INFO_ERROR_READING_CONFIG_LDAP.get(detail);
     }
     catch (Throwable t)
     {
       // Bug
       t.printStackTrace();
-      String[] arg = {t.toString()};
-      errorMessage = getMsg("error-reading-config-ldap", arg);
+      errorMessage = INFO_ERROR_READING_CONFIG_LDAP.get(t.toString());
     }
   }
 
@@ -277,7 +277,7 @@
    * @return the error message that we got when retrieving the information
    * using LDAP.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -327,7 +327,7 @@
         }
         else
         {
-          throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+          throw new ConfigException(INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
         }
         break;
       case USE_LDAPS:
@@ -338,7 +338,7 @@
         }
         else
         {
-          throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+          throw new ConfigException(INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
         }
         break;
       case USE_LDAP:
@@ -349,7 +349,7 @@
         }
         else
         {
-          throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+          throw new ConfigException(INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
         }
         break;
       case USE_MOST_SECURE_AVAILABLE:
@@ -371,7 +371,7 @@
         }
         else
         {
-          throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+          throw new ConfigException(INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
         }
         break;
       case USE_LESS_SECURE_AVAILABLE:
@@ -387,7 +387,7 @@
         }
         else
         {
-          throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+          throw new ConfigException(INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
         }
         break;
         default:
@@ -702,7 +702,7 @@
    * Returns the number of entries in a given backend using the provided
    * InitialLdapContext.
    * @param ctx the InitialLdapContext to use to update the configuration.
-   * @param backenID the id of the backend.
+   * @param backendID the id of the backend.
    * @return the number of entries in the backend.
    * @throws NamingException if there was an error.
    */
@@ -809,7 +809,7 @@
         getFirstValue(entry, "ds-cfg-use-ssl"));
 
     ListenerDescriptor.Protocol protocol;
-    String protocolDescription;
+    Message protocolDescription;
 
     ListenerDescriptor.State state;
     if (hasObjectClass(entry, "ds-cfg-ldap-connection-handler"))
@@ -817,12 +817,12 @@
       addressPort = address+":"+port;
       if (isSecure)
       {
-        protocolDescription = getMsg("ldaps-protocol-label");
+        protocolDescription = INFO_LDAPS_PROTOCOL_LABEL.get();
         protocol = ListenerDescriptor.Protocol.LDAPS;
       }
       else
       {
-        protocolDescription = getMsg("ldap-protocol-label");
+        protocolDescription = INFO_LDAP_PROTOCOL_LABEL.get();
         protocol = ListenerDescriptor.Protocol.LDAP;
       }
       boolean enabled = "true".equalsIgnoreCase(
@@ -841,12 +841,12 @@
       addressPort = "0.0.0.0:"+port;
       if (isSecure)
       {
-        protocolDescription = getMsg("jmx-secure-protocol-label");
+        protocolDescription = INFO_JMX_SECURE_PROTOCOL_LABEL.get();
         protocol = ListenerDescriptor.Protocol.JMXS;
       }
       else
       {
-        protocolDescription = getMsg("jmx-protocol-label");
+        protocolDescription = INFO_JMX_PROTOCOL_LABEL.get();
         protocol = ListenerDescriptor.Protocol.JMX;
       }
       boolean enabled = "true".equalsIgnoreCase(
@@ -862,7 +862,7 @@
     }
     else
     {
-      addressPort = getMsg("unknown-label");
+      addressPort = INFO_UNKNOWN_LABEL.get().toString();
       protocolDescription = null;
       protocol = ListenerDescriptor.Protocol.OTHER;
       /* Try to figure a name from the cn */
@@ -872,16 +872,16 @@
         int index = cn.toLowerCase().indexOf("connection handler");
         if (index > 0)
         {
-          protocolDescription = cn.substring(0, index).trim();
+          protocolDescription = Message.raw(cn.substring(0, index).trim());
         }
         else
         {
-          protocolDescription = cn;
+          protocolDescription = Message.raw(cn);
         }
       }
       else
       {
-        protocolDescription = getMsg("undefined-protocol-label");
+        protocolDescription = INFO_UNDEFINED_PROTOCOL_LABEL.get();
       }
       state = ListenerDescriptor.State.UNKNOWN;
     }
@@ -994,25 +994,6 @@
     return ConfigFromFile.isConfigBackend(id);
   }
 
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private String getMsg(String key, String[] args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
   private String getURL(ConfigFromFile offlineConf,
       ConnectionProtocolPolicy policy) throws ConfigException
   {
@@ -1029,7 +1010,7 @@
       }
       else
       {
-        throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+        throw new ConfigException(INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
       }
       break;
     case USE_LDAPS:
@@ -1039,7 +1020,7 @@
       }
       else
       {
-        throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+        throw new ConfigException(INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
       }
       break;
     case USE_LDAP:
@@ -1049,7 +1030,7 @@
       }
       else
       {
-        throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+        throw new ConfigException(INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
       }
       break;
     case USE_MOST_SECURE_AVAILABLE:
@@ -1067,7 +1048,7 @@
       }
       else
       {
-        throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+        throw new ConfigException(INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
       }
       break;
     case USE_LESS_SECURE_AVAILABLE:
@@ -1081,7 +1062,7 @@
       }
       else
       {
-        throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+        throw new ConfigException(INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
       }
       break;
       default:
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ListenerDescriptor.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ListenerDescriptor.java
index a9ea0c3..a0793ed 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ListenerDescriptor.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ListenerDescriptor.java
@@ -27,6 +27,8 @@
 
 package org.opends.guitools.statuspanel;
 
+import org.opends.messages.Message;
+
 /**
  * This class is used to represent a Listener and is aimed to be used by the
  * classes in the ListenersTableModel class.
@@ -83,7 +85,7 @@
   private State state;
   private String addressPort;
   private Protocol protocol;
-  private String protocolDescription;
+  private Message protocolDescription;
 
   /**
    * Constructor for thid class.
@@ -93,7 +95,7 @@
    * @param state the state of the listener.
    */
   public ListenerDescriptor(String addressPort, Protocol protocol,
-      String protocolDescription, State state)
+      Message protocolDescription, State state)
   {
     this.addressPort = addressPort;
     this.protocol = protocol;
@@ -123,7 +125,7 @@
    * Returns the protocol description of the listener.
    * @return the protocol description of the listener.
    */
-  public String getProtocolDescription()
+  public Message getProtocolDescription()
   {
     return protocolDescription;
   }
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ServerStatusDescriptor.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ServerStatusDescriptor.java
index 5a79858..f86a4b7 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ServerStatusDescriptor.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ServerStatusDescriptor.java
@@ -27,6 +27,8 @@
 
 package org.opends.guitools.statuspanel;
 
+import org.opends.messages.Message;
+
 import java.io.File;
 import java.util.Set;
 
@@ -44,7 +46,7 @@
   private File installPath;
   private String openDSVersion;
   private String javaVersion;
-  private String errorMsg;
+  private Message errorMsg;
   private boolean isAuthenticated;
 
   /**
@@ -283,7 +285,7 @@
    * @return the error message that we encountered generating this server
    * status descriptor.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMsg;
   }
@@ -294,7 +296,7 @@
    * @param errorMsg the error message that we encountered generating this
    * server status descriptor.
    */
-  public void setErrorMessage(String errorMsg)
+  public void setErrorMessage(Message errorMsg)
   {
     this.errorMsg = errorMsg;
   }
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ServerStatusPooler.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ServerStatusPooler.java
index 61033c9..5ce90fc 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ServerStatusPooler.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ServerStatusPooler.java
@@ -33,7 +33,6 @@
 import java.util.logging.Logger;
 
 import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.guitools.statuspanel.event.ServerStatusChangeEvent;
 import org.opends.guitools.statuspanel.event.ServerStatusChangeListener;
 import org.opends.quicksetup.Installation;
@@ -423,20 +422,11 @@
         }
         catch (ConfigException ce)
         {
-          desc.setErrorMessage(ce.getMessage());
+          desc.setErrorMessage(ce.getMessageObject());
         }
         nTriesWithErrorOnline = 0;
       }
     }
   }
 
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
 }
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/SplashScreen.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/SplashScreen.java
index 35c0023..6586499 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/SplashScreen.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/SplashScreen.java
@@ -81,7 +81,7 @@
 
   /**
    * This method displays the StatusPanel dialog.
-   * @see StatusPanelController.display.
+   * @see org.opends.guitools.statuspanel.StatusPanelController#display()
    * This method assumes that is being called outside the event thread.
    */
   protected void displayApplication()
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusCli.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusCli.java
index c550abb..6800c6a 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusCli.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusCli.java
@@ -49,21 +49,22 @@
 
 import org.opends.admin.ads.util.ApplicationKeyManager;
 import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.guitools.statuspanel.ui.DatabasesTableModel;
 import org.opends.guitools.statuspanel.ui.ListenersTableModel;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.QuickSetupLog;
-import org.opends.quicksetup.util.Utils;
+import static org.opends.quicksetup.util.Utils.*;
 
 import org.opends.server.core.DirectoryServer;
 
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.*;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.QuickSetupMessages.*;
 
-import org.opends.server.messages.MessageHandler;
 import org.opends.server.util.PasswordReader;
 import org.opends.server.util.SelectableCertificateKeyManager;
 import org.opends.server.util.ServerConstants;
@@ -90,20 +91,6 @@
   private boolean displayMustStartLegend;
 
   /**
-   * The 'binDN' global argument.
-   */
-  private StringArgument bindDnArg = null;
-
-  /**
-   * The 'bindPasswordFile' global argument.
-   */
-  private FileBasedArgument bindPasswordFileArg = null;
-
-  /**
-   * The 'bindPassword' global argument.
-   */
-  private StringArgument bindPasswordArg = null;
-  /**
    * The 'trustAllArg' global argument.
    */
   private BooleanArgument trustAllArg = null;
@@ -205,15 +192,15 @@
   {
     int returnValue = SUCCESSFUL;
 
-    ArrayList<String> errors = new ArrayList<String>();
+    ArrayList<Message> errors = new ArrayList<Message>();
 
     String directoryManagerPwd = null;
     String directoryManagerPwdFile = null;
     String directoryManagerDn = null;
 
     ArgumentParser argParser =
-        new ArgumentParser(StatusPanelLauncher.class.getName(),
-          getI18n().getMsg("status-cli-usage-description"), false);
+            new ArgumentParser(StatusPanelLauncher.class.getName(),
+                    INFO_STATUS_CLI_USAGE_DESCRIPTION.get(), false);
     BooleanArgument showUsage;
     BooleanArgument useSSLArg;
     BooleanArgument startTLSArg;
@@ -222,7 +209,7 @@
     FileBasedArgument bindPWFile;
 
     String scriptName;
-    if (Utils.isWindows()) {
+    if (isWindows()) {
       scriptName = Installation.WINDOWS_STATUSCLI_FILE_NAME;
     } else {
       scriptName = Installation.UNIX_STATUSCLI_FILE_NAME;
@@ -231,25 +218,25 @@
     try
     {
       useSSLArg = new BooleanArgument("useSSL", OPTION_SHORT_USE_SSL,
-          OPTION_LONG_USE_SSL, MSGID_DESCRIPTION_USE_SSL);
+          OPTION_LONG_USE_SSL, INFO_DESCRIPTION_USE_SSL.get());
       argParser.addArgument(useSSLArg);
 
       startTLSArg = new BooleanArgument("startTLS", OPTION_SHORT_START_TLS,
           OPTION_LONG_START_TLS,
-          MSGID_DESCRIPTION_START_TLS);
+          INFO_DESCRIPTION_START_TLS.get());
       argParser.addArgument(startTLSArg);
 
       bindDN = new StringArgument("binddn", OPTION_SHORT_BINDDN,
           OPTION_LONG_BINDDN, false, false, true,
           OPTION_VALUE_BINDDN, "cn=Directory Manager", null,
-          MSGID_STOPDS_DESCRIPTION_BINDDN);
+          INFO_STOPDS_DESCRIPTION_BINDDN.get());
       argParser.addArgument(bindDN);
 
       bindPW = new StringArgument("bindpw", OPTION_SHORT_BINDPWD,
           OPTION_LONG_BINDPWD, false, false,
           true,
           OPTION_VALUE_BINDPWD, null, null,
-          MSGID_STOPDS_DESCRIPTION_BINDPW);
+          INFO_STOPDS_DESCRIPTION_BINDPW.get());
       argParser.addArgument(bindPW);
 
       bindPWFile = new FileBasedArgument("bindpwfile",
@@ -258,65 +245,64 @@
           false, false,
           OPTION_VALUE_BINDPWD_FILE,
           null, null,
-          MSGID_STOPDS_DESCRIPTION_BINDPWFILE);
+          INFO_STOPDS_DESCRIPTION_BINDPWFILE.get());
       argParser.addArgument(bindPWFile);
 
       trustAllArg = new BooleanArgument("trustAll", 'X', "trustAll",
-          MSGID_DESCRIPTION_TRUSTALL);
+          INFO_DESCRIPTION_TRUSTALL.get());
       argParser.addArgument(trustAllArg);
 
       trustStorePathArg = new StringArgument("trustStorePath",
           OPTION_SHORT_TRUSTSTOREPATH, OPTION_LONG_TRUSTSTOREPATH, false,
           false, true, OPTION_VALUE_TRUSTSTOREPATH, null, null,
-          MSGID_DESCRIPTION_TRUSTSTOREPATH);
+          INFO_DESCRIPTION_TRUSTSTOREPATH.get());
       argParser.addArgument(trustStorePathArg);
 
       trustStorePasswordArg = new StringArgument("trustStorePassword", null,
           OPTION_LONG_TRUSTSTORE_PWD, false, false, true,
           OPTION_VALUE_TRUSTSTORE_PWD, null, null,
-          MSGID_DESCRIPTION_TRUSTSTOREPASSWORD);
+          INFO_DESCRIPTION_TRUSTSTOREPASSWORD.get());
       argParser.addArgument(trustStorePasswordArg);
 
       trustStorePasswordFileArg =
         new FileBasedArgument("truststorepasswordfile",
           OPTION_SHORT_TRUSTSTORE_PWD_FILE, OPTION_LONG_TRUSTSTORE_PWD_FILE,
           false, false, OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
-          MSGID_DESCRIPTION_TRUSTSTOREPASSWORD_FILE);
+          INFO_DESCRIPTION_TRUSTSTOREPASSWORD_FILE.get());
       argParser.addArgument(trustStorePasswordFileArg);
 
       keyStorePathArg = new StringArgument("keyStorePath",
           OPTION_SHORT_KEYSTOREPATH, OPTION_LONG_KEYSTOREPATH, false, false,
           true, OPTION_VALUE_KEYSTOREPATH, null, null,
-          MSGID_DESCRIPTION_KEYSTOREPATH);
+          INFO_DESCRIPTION_KEYSTOREPATH.get());
       argParser.addArgument(keyStorePathArg);
 
       keyStorePasswordArg = new StringArgument("keyStorePassword", null,
           OPTION_LONG_KEYSTORE_PWD, false, false, true,
           OPTION_VALUE_KEYSTORE_PWD, null, null,
-          MSGID_DESCRIPTION_KEYSTOREPASSWORD);
+          INFO_DESCRIPTION_KEYSTOREPASSWORD.get());
       argParser.addArgument(keyStorePasswordArg);
 
       keyStorePasswordFileArg = new FileBasedArgument("keystorepasswordfile",
           OPTION_SHORT_KEYSTORE_PWD_FILE, OPTION_LONG_KEYSTORE_PWD_FILE, false,
           false, OPTION_VALUE_KEYSTORE_PWD_FILE, null, null,
-          MSGID_DESCRIPTION_KEYSTOREPASSWORD_FILE);
+          INFO_DESCRIPTION_KEYSTOREPASSWORD_FILE.get());
       argParser.addArgument(keyStorePasswordFileArg);
 
       certNicknameArg = new StringArgument("certnickname", 'N', "certNickname",
           false, false, true, "{nickname}", null, null,
-          MSGID_DESCRIPTION_CERT_NICKNAME);
+          INFO_DESCRIPTION_CERT_NICKNAME.get());
       argParser.addArgument(certNicknameArg);
 
       showUsage = new BooleanArgument("showusage", OPTION_SHORT_HELP,
           OPTION_LONG_HELP,
-          MSGID_DESCRIPTION_USAGE);
+          INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = MessageHandler.getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       System.err.println(wrap(message));
       return BUG;
     }
@@ -330,8 +316,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = MessageHandler.getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       System.err.println(wrap(message));
       System.err.println(argParser.getUsage());
@@ -347,7 +332,7 @@
 
     if ((directoryManagerPwdFile != null) && (directoryManagerPwd != null))
     {
-      errors.add(getMsg("cli-status-pwd-and-pwd-file-provided", true));
+      errors.add(wrap(INFO_CLI_STATUS_PWD_AND_PWD_FILE_PROVIDED.get()));
     }
     else
     {
@@ -356,13 +341,13 @@
         // read the password from stdin.
         try
         {
-          System.out.print(getMsg("cli-status-ldapauth-password-prompt",
-              new String[] {directoryManagerDn}, false));
+          System.out.print(INFO_CLI_STATUS_LDAPAUTH_PASSWORD_PROMPT.get(
+                  directoryManagerDn));
           char[] pwChars = PasswordReader.readPassword();
           directoryManagerPwd = new String(pwChars);
         } catch(Exception ex)
         {
-          errors.add(ex.getMessage());
+          errors.add(Message.raw(ex.getMessage()));
         }
       }
       if (directoryManagerPwdFile != null)
@@ -370,8 +355,8 @@
         directoryManagerPwd = readPwdFromFile(directoryManagerPwdFile);
         if (directoryManagerPwd == null)
         {
-          String[] arg = {directoryManagerPwdFile};
-          errors.add(getMsg("cli-status-error-reading-pwd-file", arg, true));
+          errors.add(wrap(INFO_CLI_STATUS_ERROR_READING_PWD_FILE.get(
+                  directoryManagerPwdFile)));
         }
       }
     }
@@ -380,20 +365,17 @@
     // trustStore related arg
     if (trustAllArg.isPresent() && trustStorePathArg.isPresent())
     {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      errors.add(getMessage(msgID, trustAllArg.getLongIdentifier(),
+      errors.add(ERR_TOOL_CONFLICTING_ARGS.get(trustAllArg.getLongIdentifier(),
           trustStorePathArg.getLongIdentifier()));
     }
     if (trustAllArg.isPresent() && trustStorePasswordArg.isPresent())
     {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      errors.add(getMessage(msgID, trustAllArg.getLongIdentifier(),
+      errors.add(ERR_TOOL_CONFLICTING_ARGS.get(trustAllArg.getLongIdentifier(),
           trustStorePasswordArg.getLongIdentifier()));
     }
     if (trustAllArg.isPresent() && trustStorePasswordFileArg.isPresent())
     {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      errors.add(getMessage(msgID, trustAllArg.getLongIdentifier(),
+      errors.add(ERR_TOOL_CONFLICTING_ARGS.get(trustAllArg.getLongIdentifier(),
           trustStorePasswordFileArg.getLongIdentifier()));
     }
 
@@ -402,8 +384,7 @@
     if (trustStorePasswordArg.isPresent()
         && trustStorePasswordFileArg.isPresent())
     {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      errors.add(getMessage(msgID, trustStorePasswordArg
+      errors.add(ERR_TOOL_CONFLICTING_ARGS.get(trustStorePasswordArg
           .getLongIdentifier(), trustStorePasswordFileArg.getLongIdentifier()));
     }
 
@@ -412,14 +393,13 @@
     if (startTLSArg.isPresent()
         && useSSLArg.isPresent())
     {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      errors.add(getMessage(msgID, startTLSArg.getLongIdentifier(),
+      errors.add(ERR_TOOL_CONFLICTING_ARGS.get(startTLSArg.getLongIdentifier(),
           useSSLArg.getLongIdentifier()));
     }
     if (errors.size() > 0)
     {
-      System.err.println(Utils.getStringFromCollection(errors,
-          LINE_SEPARATOR+LINE_SEPARATOR));
+      System.err.println(getMessageFromCollection(errors,
+          LINE_SEPARATOR+LINE_SEPARATOR).toString());
       System.err.println();
       System.err.println(argParser.getUsage());
       returnValue = USER_DATA_ERROR;
@@ -478,7 +458,7 @@
       }
       catch (ConfigException ce)
       {
-        System.err.println(wrap(ce.getMessage()));
+        System.err.println(wrap(ce.getMessageObject()));
       }
     }
 
@@ -517,35 +497,6 @@
     return pwd;
   }
 
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   */
-  private String getMsg(String key, boolean wrap)
-  {
-    String t = getI18n().getMsg(key);
-    if (wrap)
-    {
-      t= wrap(t);
-    }
-    return t;
-  }
-
-  private String getMsg(String key, String[] args, boolean wrap)
-  {
-    String t = getI18n().getMsg(key, args);
-    if (wrap)
-    {
-      t= wrap(t);
-    }
-    return t;
-  }
-
-  private static ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
   private ServerStatusDescriptor createServerStatusDescriptor(String dn,
       String pwd)
   {
@@ -561,7 +512,7 @@
       desc.setStatus(ServerStatusDescriptor.ServerStatus.STOPPED);
     }
 
-    desc.setInstallPath(new File(Utils.getInstallPathFromClasspath()));
+    desc.setInstallPath(new File(getInstallPathFromClasspath()));
 
     desc.setOpenDSVersion(
         org.opends.server.util.DynamicConstants.FULL_VERSION_STRING);
@@ -605,14 +556,14 @@
 
   private void writeStatus(ServerStatusDescriptor desc)
   {
-    String[] labels =
+    Message[] labels =
       {
-        getMsg("server-status-label", false),
-        getMsg("connections-label", false),
-        getMsg("administrative-users-label", false),
-        getMsg("installation-path-label", false),
-        getMsg("opends-version-label", false),
-        getMsg("java-version-label", false)
+        INFO_SERVER_STATUS_LABEL.get(),
+        INFO_CONNECTIONS_LABEL.get(),
+        INFO_ADMINISTRATIVE_USERS_LABEL.get(),
+        INFO_INSTALLATION_PATH_LABEL.get(),
+        INFO_OPENDS_VERSION_LABEL.get(),
+        INFO_JAVA_VERSION_LABEL.get()
       };
     int labelWidth = 0;
     for (int i=0; i<labels.length; i++)
@@ -620,13 +571,13 @@
       labelWidth = Math.max(labelWidth, labels[i].length());
     }
     System.out.println();
-    String title = getMsg("server-status-title", false);
+    Message title = INFO_SERVER_STATUS_TITLE.get();
     System.out.println(centerTitle(title));
     writeStatusContents(desc, labelWidth);
     writeCurrentConnectionContents(desc, labelWidth);
     System.out.println();
 
-    title = getMsg("server-details-title", false);
+    title = INFO_SERVER_DETAILS_TITLE.get();
     System.out.println(centerTitle(title));
     writeAdministrativeUserContents(desc, labelWidth);
     writeInstallPathContents(desc, labelWidth);
@@ -644,13 +595,13 @@
     if (displayMustStartLegend)
     {
       System.out.println();
-      System.out.println(getMsg("not-available-server-down-cli-legend", true));
+      System.out.println(wrap(INFO_NOT_AVAILABLE_SERVER_DOWN_CLI_LEGEND.get()));
     }
     else if (displayMustAuthenticateLegend)
     {
       System.out.println();
       System.out.println(
-          getMsg("not-available-authentication-required-cli-legend", true));
+          wrap(INFO_NOT_AVAILABLE_AUTHENTICATION_REQUIRED_CLI_LEGEND.get()));
     }
     System.out.println();
   }
@@ -663,33 +614,33 @@
   private void writeStatusContents(ServerStatusDescriptor desc,
       int maxLabelWidth)
   {
-    String status;
+    Message status;
     switch (desc.getStatus())
     {
     case STARTED:
-      status = getMsg("server-started-label", false);
+      status = INFO_SERVER_STARTED_LABEL.get();
       break;
 
     case STOPPED:
-      status = getMsg("server-stopped-label", false);
+      status = INFO_SERVER_STOPPED_LABEL.get();
       break;
 
     case STARTING:
-      status = getMsg("server-starting-label", false);
+      status = INFO_SERVER_STARTING_LABEL.get();
       break;
 
     case STOPPING:
-      status = getMsg("server-stopping-label", false);
+      status = INFO_SERVER_STOPPING_LABEL.get();
       break;
 
     case UNKNOWN:
-      status = getMsg("server-unknown-status-label", false);
+      status = INFO_SERVER_UNKNOWN_STATUS_LABEL.get();
       break;
 
     default:
       throw new IllegalStateException("Unknown status: "+desc.getStatus());
     }
-    writeLabelValue(getMsg("server-status-label", false), status,
+    writeLabelValue(INFO_SERVER_STATUS_LABEL.get(), status,
         maxLabelWidth);
   }
 
@@ -701,13 +652,13 @@
   private void writeCurrentConnectionContents(ServerStatusDescriptor desc,
       int maxLabelWidth)
   {
-    String text;
+    Message text;
     if (desc.getStatus() == ServerStatusDescriptor.ServerStatus.STARTED)
     {
       int nConn = desc.getOpenConnections();
       if (nConn >= 0)
       {
-        text = String.valueOf(nConn);
+        text = Message.raw(String.valueOf(nConn));
       }
       else
       {
@@ -726,7 +677,7 @@
       text = getNotAvailableBecauseServerIsDownText();
     }
 
-    writeLabelValue(getMsg("connections-label", false), text, maxLabelWidth);
+    writeLabelValue(INFO_CONNECTIONS_LABEL.get(), text, maxLabelWidth);
   }
 
   /**
@@ -738,23 +689,27 @@
       int maxLabelWidth)
   {
     Set<String> administrators = desc.getAdministrativeUsers();
-    String text;
+    Message text;
     if (administrators.size() > 0)
     {
       TreeSet<String> ordered = new TreeSet<String>();
       ordered.addAll(administrators);
 
       String first = ordered.iterator().next();
-      writeLabelValue(getMsg("administrative-users-label", false), first,
-          maxLabelWidth);
+      writeLabelValue(
+              INFO_ADMINISTRATIVE_USERS_LABEL.get(),
+              Message.raw(first),
+              maxLabelWidth);
 
       Iterator<String> it = ordered.iterator();
       // First one already printed
       it.next();
       while (it.hasNext())
       {
-        writeLabelValue(getMsg("administrative-users-label", false), it.next(),
-            maxLabelWidth);
+        writeLabelValue(
+                INFO_ADMINISTRATIVE_USERS_LABEL.get(),
+                Message.raw(it.next()),
+                maxLabelWidth);
       }
     }
     else
@@ -774,7 +729,7 @@
       {
         text = getNotAvailableText();
       }
-      writeLabelValue(getMsg("administrative-users-label", false), text,
+      writeLabelValue(INFO_ADMINISTRATIVE_USERS_LABEL.get(), text,
           maxLabelWidth);
     }
   }
@@ -788,8 +743,9 @@
       int maxLabelWidth)
   {
     File path = desc.getInstallPath();
-    writeLabelValue(getMsg("installation-path-label", false), path.toString(),
-        maxLabelWidth);
+    writeLabelValue(INFO_INSTALLATION_PATH_LABEL.get(),
+            Message.raw(path.toString()),
+            maxLabelWidth);
   }
 
   /**
@@ -802,8 +758,9 @@
       int maxLabelWidth)
   {
     String openDSVersion = desc.getOpenDSVersion();
-    writeLabelValue(getMsg("opends-version-label", false), openDSVersion,
-        maxLabelWidth);
+    writeLabelValue(INFO_OPENDS_VERSION_LABEL.get(),
+            Message.raw(openDSVersion),
+            maxLabelWidth);
   }
 
   /**
@@ -815,10 +772,10 @@
   private void writeJavaVersionContents(ServerStatusDescriptor desc,
       int maxLabelWidth)
   {
-    String text;
+    Message text;
     if (desc.getStatus() == ServerStatusDescriptor.ServerStatus.STARTED)
     {
-      text = desc.getJavaVersion();
+      text = Message.raw(desc.getJavaVersion());
       if (text == null)
       {
         if (!desc.isAuthenticated())
@@ -835,7 +792,7 @@
     {
       text = getNotAvailableBecauseServerIsDownText();
     }
-    writeLabelValue(getMsg("java-version-label", false), text, maxLabelWidth);
+    writeLabelValue(INFO_JAVA_VERSION_LABEL.get(), text, maxLabelWidth);
   }
 
   /**
@@ -845,7 +802,7 @@
    */
   private void writeListenerContents(ServerStatusDescriptor desc)
   {
-    String title = getMsg("listeners-title", false);
+    Message title = INFO_LISTENERS_TITLE.get();
     System.out.println(centerTitle(title));
 
     Set<ListenerDescriptor> listeners = desc.getListeners();
@@ -857,16 +814,16 @@
         if (!desc.isAuthenticated())
         {
           System.out.println(
-              getMsg("not-available-authentication-required-cli-label", true));
+              wrap(INFO_NOT_AVAILABLE_AUTHENTICATION_REQUIRED_CLI_LABEL.get()));
         }
         else
         {
-          System.out.println(getMsg("no-listeners-found", true));
+          System.out.println(wrap(INFO_NO_LISTENERS_FOUND.get()));
         }
       }
       else
       {
-        System.out.println(getMsg("no-listeners-found", true));
+        System.out.println(wrap(INFO_NO_LISTENERS_FOUND.get()));
       }
     }
     else
@@ -884,7 +841,7 @@
    */
   private void writeDatabaseContents(ServerStatusDescriptor desc)
   {
-    String title = getMsg("databases-title", false);
+    Message title = INFO_DATABASES_TITLE.get();
     System.out.println(centerTitle(title));
 
     Set<DatabaseDescriptor> databases = desc.getDatabases();
@@ -896,16 +853,16 @@
         if (!desc.isAuthenticated())
         {
           System.out.println(
-              getMsg("not-available-authentication-required-cli-label", true));
+              wrap(INFO_NOT_AVAILABLE_AUTHENTICATION_REQUIRED_CLI_LABEL.get()));
         }
         else
         {
-          System.out.println(getMsg("no-dbs-found", true));
+          System.out.println(wrap(INFO_NO_DBS_FOUND.get()));
         }
       }
       else
       {
-        System.out.println(getMsg("no-dbs-found", true));
+        System.out.println(wrap(INFO_NO_DBS_FOUND.get()));
       }
     }
     else
@@ -930,7 +887,7 @@
    */
   private void writeErrorContents(ServerStatusDescriptor desc)
   {
-    String errorMsg = desc.getErrorMessage();
+    Message errorMsg = desc.getErrorMessage();
     if (errorMsg != null)
     {
       System.out.println();
@@ -943,10 +900,10 @@
    * because the server is down.
    * @return the text.
    */
-  private String getNotAvailableBecauseServerIsDownText()
+  private Message getNotAvailableBecauseServerIsDownText()
   {
     displayMustStartLegend = true;
-    return getMsg("not-available-server-down-cli-label", false);
+    return INFO_NOT_AVAILABLE_SERVER_DOWN_CLI_LABEL.get();
   }
 
   /**
@@ -954,19 +911,19 @@
    * because authentication is required.
    * @return the text.
    */
-  private String getNotAvailableBecauseAuthenticationIsRequiredText()
+  private Message getNotAvailableBecauseAuthenticationIsRequiredText()
   {
     displayMustAuthenticateLegend = true;
-    return getMsg("not-available-authentication-required-cli-label", false);
+    return INFO_NOT_AVAILABLE_AUTHENTICATION_REQUIRED_CLI_LABEL.get();
   }
 
   /**
    * Returns the not available text explaining that the data is not available.
    * @return the text.
    */
-  private String getNotAvailableText()
+  private Message getNotAvailableText()
   {
-    return getMsg("not-available-label", false);
+    return INFO_NOT_AVAILABLE_LABEL.get();
   }
 
   /**
@@ -997,11 +954,11 @@
           }
           else if (v instanceof Integer)
           {
-            String text;
+            Message text;
             int nEntries = ((Integer)v).intValue();
             if (nEntries >= 0)
             {
-              text = String.valueOf(nEntries);
+              text = Message.raw(String.valueOf(nEntries));
             }
             else
             {
@@ -1034,7 +991,7 @@
       totalWidth += maxWidths[i];
     }
 
-    StringBuilder headerLine = new StringBuilder();
+    MessageBuilder headerLine = new MessageBuilder();
     for (int i=0; i<maxWidths.length; i++)
     {
       String header = tableModel.getColumnName(i);
@@ -1045,17 +1002,17 @@
         headerLine.append(" ");
       }
     }
-    System.out.println(wrap(headerLine.toString()));
-    StringBuilder t = new StringBuilder();
+    System.out.println(wrap(headerLine.toMessage()));
+    MessageBuilder t = new MessageBuilder();
     for (int i=0; i<headerLine.length(); i++)
     {
       t.append("=");
     }
-    System.out.println(wrap(t.toString()));
+    System.out.println(wrap(t.toMessage()));
 
     for (int i=0; i<tableModel.getRowCount(); i++)
     {
-      StringBuilder line = new StringBuilder();
+      MessageBuilder line = new MessageBuilder();
       for (int j=0; j<tableModel.getColumnCount(); j++)
       {
         int extra = maxWidths[j];
@@ -1064,7 +1021,7 @@
         {
           if (v instanceof String)
           {
-            line.append(v);
+            line.append((String)v);
             extra -= ((String)v).length();
           }
           else if (v instanceof Integer)
@@ -1098,7 +1055,7 @@
           line.append(" ");
         }
       }
-      System.out.println(wrap(line.toString()));
+      System.out.println(wrap(line.toMessage()));
     }
   }
 
@@ -1115,23 +1072,23 @@
       desc.getStatus() == ServerStatusDescriptor.ServerStatus.STARTED;
 
     int labelWidth = 0;
-    String[] labels = new String[tableModel.getColumnCount()];
+    Message[] labels = new Message[tableModel.getColumnCount()];
     for (int i=0; i<tableModel.getColumnCount(); i++)
     {
-      String header;
+      Message header;
       if (i == 5)
       {
-        header = getMsg("age-of-oldest-missing-change-column-cli", false);
+        header = INFO_AGE_OF_OLDEST_MISSING_CHANGE_COLUMN_CLI.get();
       }
       else
       {
-        header = tableModel.getColumnName(i);
+        header = Message.raw(tableModel.getColumnName(i));
       }
-      labels[i] = header+":";
+      labels[i] = new MessageBuilder(header).append(":").toMessage();
       labelWidth = Math.max(labelWidth, labels[i].length());
     }
 
-    String replicatedLabel = getMsg("suffix-replicated-label", false);
+    Message replicatedLabel = INFO_SUFFIX_REPLICATED_LABEL.get();
     for (int i=0; i<tableModel.getRowCount(); i++)
     {
       if (i > 0)
@@ -1140,20 +1097,20 @@
       }
       for (int j=0; j<tableModel.getColumnCount(); j++)
       {
-        String value;
+        Message value;
         Object v = tableModel.getValueAt(i, j);
         if (v != null)
         {
           if (v instanceof String)
           {
-            value = (String)v;
+            value = Message.raw((String)v);
           }
           else if (v instanceof Integer)
           {
             int nEntries = ((Integer)v).intValue();
             if (nEntries >= 0)
             {
-              value = String.valueOf(nEntries);
+              value = Message.raw(String.valueOf(nEntries));
             }
             else
             {
@@ -1178,7 +1135,7 @@
         }
         else
         {
-          value = "";
+          value = Message.EMPTY;
         }
 
         if (value.equals(getNotAvailableText()))
@@ -1211,9 +1168,9 @@
     }
   }
 
-  private void writeLabelValue(String label, String value, int maxLabelWidth)
+  private void writeLabelValue(Message label, Message value, int maxLabelWidth)
   {
-    StringBuilder buf = new StringBuilder();
+    MessageBuilder buf = new MessageBuilder();
     buf.append(label);
 
     int extra = maxLabelWidth - label.length();
@@ -1221,31 +1178,25 @@
     {
       buf.append(" ");
     }
-    buf.append(" "+value);
-    System.out.println(wrap(buf.toString()));
+    buf.append(" ").append(String.valueOf(value));
+    System.out.println(wrap(buf.toMessage()));
 
   }
 
-  private String wrap(String text)
+  private Message centerTitle(Message text)
   {
-    return org.opends.server.util.StaticUtils.wrapText(text,
-        Utils.getCommandLineMaxLineWidth());
-  }
-
-  private String centerTitle(String text)
-  {
-    String centered;
-    if (text.length() <= Utils.getCommandLineMaxLineWidth() - 8)
+    Message centered;
+    if (text.length() <= getCommandLineMaxLineWidth() - 8)
     {
-      StringBuilder buf = new StringBuilder();
+      MessageBuilder buf = new MessageBuilder();
       int extra = Math.min(10,
-          (Utils.getCommandLineMaxLineWidth() - 8 - text.length()) / 2);
+          (getCommandLineMaxLineWidth() - 8 - text.length()) / 2);
       for (int i=0; i<extra; i++)
       {
         buf.append(" ");
       }
       buf.append("--- "+text+" ---");
-      centered = buf.toString();
+      centered = buf.toMessage();
     }
     else
     {
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusPanelController.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusPanelController.java
index 404ba34..baada89 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusPanelController.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusPanelController.java
@@ -40,7 +40,6 @@
 import org.opends.server.core.DirectoryServer;
 
 import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.guitools.statuspanel.event.ServerStatusChangeEvent;
 import org.opends.guitools.statuspanel.event.ServerStatusChangeListener;
 import org.opends.guitools.statuspanel.event.StatusPanelButtonListener;
@@ -54,6 +53,11 @@
 import org.opends.quicksetup.util.HtmlProgressMessageFormatter;
 import org.opends.quicksetup.util.Utils;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.MessageDescriptor;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This is the main class of the status panel.
@@ -82,8 +86,8 @@
 
   private ServerStatusDescriptor desc;
 
-  private String lastDetail;
-  private String lastSummary;
+  private Message lastDetail;
+  private Message lastSummary;
 
   private Thread progressUpdater;
 
@@ -217,8 +221,8 @@
       isStarting = true;
       lastDetail = null;
       getProgressDialog().setSummary(
-          getFormattedSummary(getMsg("summary-starting")));
-      getProgressDialog().setDetails("");
+          getFormattedSummary(INFO_SUMMARY_STARTING.get()));
+      getProgressDialog().setDetails(Message.EMPTY);
       serverStatusPooler.beginServerStart();
       getProgressDialog().setCloseButtonEnabled(false);
       getStatusPanelDialog().setStartButtonEnabled(false);
@@ -298,8 +302,8 @@
         isStopping = true;
         lastDetail = null;
         getProgressDialog().setSummary(
-            getFormattedSummary(getMsg("summary-stopping")));
-        getProgressDialog().setDetails("");
+            getFormattedSummary(INFO_SUMMARY_STOPPING.get()));
+        getProgressDialog().setDetails(Message.EMPTY);
         serverStatusPooler.beginServerStop();
         getProgressDialog().setCloseButtonEnabled(false);
         getStatusPanelDialog().setStartButtonEnabled(false);
@@ -380,8 +384,8 @@
         isRestarting = true;
         lastDetail = null;
         getProgressDialog().setSummary(
-            getFormattedSummary(getMsg("summary-stopping")));
-        getProgressDialog().setDetails("");
+            getFormattedSummary(INFO_SUMMARY_STOPPING.get()));
+        getProgressDialog().setDetails(Message.EMPTY);
         serverStatusPooler.beginServerStop();
         getProgressDialog().setCloseButtonEnabled(false);
         getStatusPanelDialog().setStartButtonEnabled(false);
@@ -461,8 +465,8 @@
       }
       catch (ConfigException ce)
       {
-        Utilities.displayError(getLoginDialog(), ce.getMessage(),
-            getMsg("error-title"));
+        Utilities.displayError(getLoginDialog(), ce.getMessageObject(),
+            INFO_ERROR_TITLE.get());
         getLoginDialog().toFront();
       }
     }
@@ -546,12 +550,12 @@
     if (isRestarting)
     {
       updateProgress(
-          getFormattedSummary(getMsg("summary-starting")),
-          getTaskSeparator());
+              getFormattedSummary(INFO_SUMMARY_STARTING.get()),
+              getTaskSeparator());
     }
     updateProgress(
-        getFormattedSummary(getMsg("summary-starting")),
-        getFormattedProgress(getMsg("progress-starting")) + getLineBreak());
+        getFormattedSummary(INFO_SUMMARY_STARTING.get()),
+        getFormattedProgressWithLineBreak(INFO_PROGRESS_STARTING.get()));
 
     ArrayList<String> argList = new ArrayList<String>();
     Installation installation =
@@ -615,44 +619,45 @@
         }
         if (!running)
         {
-          updateProgress(getFormattedError(getMsg("summary-start-error")),
-                getFormattedError(getMsg("error-starting-server-generic"),
+          updateProgress(getFormattedError(INFO_SUMMARY_START_ERROR.get()),
+                getFormattedError(INFO_ERROR_STARTING_SERVER_GENERIC.get(),
                     true));
         }
         else
         {
           updateProgress(
-              getFormattedSuccess(getMsg("summary-start-success")),
-              "");
+              getFormattedSuccess(INFO_SUMMARY_START_SUCCESS.get()),
+              Message.EMPTY);
           started = true;
         }
       }
       else
       {
-        String[] arg = {String.valueOf(returnValue)};
-        String msg = getMsg("error-starting-server-code", arg);
+        Message msg = INFO_ERROR_STARTING_SERVER_CODE
+                .get(String.valueOf(returnValue));
 
         /*
          * The return code is not the one expected, assume the server could
          * not be started.
          */
         updateProgress(
-            getFormattedError(getMsg("summary-start-error")),
+            getFormattedError(INFO_SUMMARY_START_ERROR.get()),
             msg);
       }
 
     } catch (IOException ioe)
     {
-      String msg = getThrowableMsg("error-starting-server", ioe);
+      Message msg =
+              Utils.getThrowableMsg(INFO_ERROR_STARTING_SERVER.get(), ioe);
       updateProgress(
-          getFormattedError(getMsg("summary-start-error")),
+          getFormattedError(INFO_SUMMARY_START_ERROR.get()),
           msg);
     }
     catch (InterruptedException ie)
     {
-      String msg = getThrowableMsg("error-starting-server", ie);
+      Message msg = Utils.getThrowableMsg(INFO_ERROR_STARTING_SERVER.get(), ie);
       updateProgress(
-          getFormattedError(getMsg("summary-start-error")),
+          getFormattedError(INFO_SUMMARY_START_ERROR.get()),
           msg);
     }
 
@@ -669,8 +674,8 @@
   {
     boolean stopped = false;
     updateProgress(
-        getFormattedSummary(getMsg("summary-stopping")),
-        getFormattedProgress(getMsg("progress-stopping")) + getLineBreak());
+        getFormattedSummary(INFO_SUMMARY_STOPPING.get()),
+        getFormattedProgressWithLineBreak(INFO_PROGRESS_STOPPING.get()));
 
     ArrayList<String> argList = new ArrayList<String>();
     Installation installation =
@@ -721,11 +726,11 @@
                     .isServerRunning();
             if (!stopped)
             {
-              String msg =
-                getFormattedLog(getMsg("progress-server-waiting-to-stop"))+
-              getLineBreak();
+              Message msg = new MessageBuilder(
+                getFormattedLog(INFO_PROGRESS_SERVER_WAITING_TO_STOP.get()))
+                      .append(getLineBreak()).toMessage();
               updateProgress(
-                  getFormattedSummary(getMsg("summary-stopping")),
+                  getFormattedSummary(INFO_SUMMARY_STOPPING.get()),
                   msg);
               try
               {
@@ -746,49 +751,49 @@
 
       if (returnValue == clientSideError)
       {
-        String msg = getLineBreak() +
-            getFormattedLog(getMsg("progress-server-already-stopped"))+
-            getLineBreak();
+        Message msg = new MessageBuilder(getLineBreak()).append(
+            getFormattedLog(INFO_PROGRESS_SERVER_ALREADY_STOPPED.get())).append(
+            getLineBreak()).toMessage();
         if (!isRestarting)
         {
           updateProgress(
-              getFormattedSuccess(getMsg("summary-stop-success")),
+              getFormattedSuccess(INFO_SUMMARY_STOP_SUCCESS.get()),
               msg);
         }
         else
         {
           updateProgress(
-              getFormattedSummary(getMsg("summary-stop-success")),
+              getFormattedSummary(INFO_SUMMARY_STOP_SUCCESS.get()),
               msg);
         }
         stopped = true;
       }
       else if (returnValue != 0)
       {
-        String[] arg = {String.valueOf(returnValue)};
-        String msg = getMsg("error-stopping-server-code", arg);
+        Message msg = INFO_ERROR_STOPPING_SERVER_CODE
+                .get(String.valueOf(returnValue));
 
         /*
          * The return code is not the one expected, assume the server could
          * not be stopped.
          */
         updateProgress(
-            getFormattedError(getMsg("summary-stop-error")),
+            getFormattedError(INFO_SUMMARY_STOP_ERROR.get()),
             msg);
       }
       else
       {
-        String msg = getFormattedLog(getMsg("progress-server-stopped"));
+        Message msg = getFormattedLog(INFO_PROGRESS_SERVER_STOPPED.get());
         if (!isRestarting)
         {
           updateProgress(
-              getFormattedSuccess(getMsg("summary-stop-success")),
+              getFormattedSuccess(INFO_SUMMARY_STOP_SUCCESS.get()),
               msg);
         }
         else
         {
           updateProgress(
-              getFormattedSummary(getMsg("summary-stop-success")),
+              getFormattedSummary(INFO_SUMMARY_STOP_SUCCESS.get()),
               msg);
         }
         stopped = true;
@@ -796,16 +801,17 @@
 
     } catch (IOException ioe)
     {
-      String msg = getThrowableMsg("error-stopping-server", ioe);
+      Message msg = Utils.getThrowableMsg(
+              INFO_ERROR_STOPPING_SERVER.get(), ioe);
       updateProgress(
-          getFormattedError(getMsg("summary-stop-error")),
+          getFormattedError(INFO_SUMMARY_STOP_ERROR.get()),
           msg);
     }
     catch (InterruptedException ie)
     {
-      String msg = getThrowableMsg("error-stopping-server", ie);
+      Message msg = Utils.getThrowableMsg(INFO_ERROR_STOPPING_SERVER.get(), ie);
       updateProgress(
-          getFormattedError(getMsg("summary-stop-error")),
+          getFormattedError(INFO_SUMMARY_STOP_ERROR.get()),
           msg);
     }
     return stopped;
@@ -819,8 +825,8 @@
    * @param summary the summary for the start/stop/restart operation.
    * @param newDetail the new detail for the start/stop/restart operation.
    */
-  private synchronized void updateProgress(final String summary,
-      final String newDetail)
+  private synchronized void updateProgress(final Message summary,
+      final Message newDetail)
   {
     if (lastDetail == null)
     {
@@ -828,7 +834,8 @@
     }
     else
     {
-      lastDetail += newDetail;
+      lastDetail = new MessageBuilder(lastDetail)
+              .append(newDetail).toMessage();
     }
     lastSummary = summary;
   }
@@ -850,8 +857,8 @@
       {
         try
         {
-        String lastDisplayedSummary = null;
-        String lastDisplayedDetail = null;
+        Message lastDisplayedSummary = null;
+        Message lastDisplayedDetail = null;
         while (true)
         {
           if (lastSummary != null)
@@ -902,50 +909,6 @@
   }
 
   /**
-   * Returns a localized message for a key value.  In  the properties file we
-   * have something of type:
-   * key=value
-   *
-   * @see ResourceProvider#getMsg(String)
-   * @param key the key in the properties file.
-   * @return the value associated to the key in the properties file.
-   * properties file.
-   */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  /**
-   * Returns a localized message for a key value.  In  the properties file we
-   * have something of type:
-   * key=value
-   *
-   * For instance if we pass as key "mykey" and as arguments {"value1"} and
-   * in the properties file we have:
-   * mykey=value with argument {0}.
-   *
-   * This method will return "value with argument value1".
-   * @see ResourceProvider#getMsg(String, String[])
-   * @param key the key in the properties file.
-   * @param args the arguments to be passed to generate the resulting value.
-   * @return the value associated to the key in the properties file.
-   */
-  private String getMsg(String key, String[] args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  /**
-   * Returns a ResourceProvider instance.
-   * @return a ResourceProvider instance.
-   */
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
-  /**
    * Returns the formatted representation of the text that is the summary of the
    * installation process (the one that goes in the UI next to the progress
    * bar).
@@ -953,7 +916,7 @@
    * representation
    * @return the formatted representation of an error for the given text.
    */
-  private String getFormattedSummary(String text)
+  private Message getFormattedSummary(Message text)
   {
     return formatter.getFormattedSummary(text);
   }
@@ -965,7 +928,7 @@
    * @return the formatted representation of an success message for the given
    * text.
    */
-  private String getFormattedSuccess(String text)
+  private Message getFormattedSuccess(Message text)
   {
     return formatter.getFormattedSuccess(text);
   }
@@ -976,7 +939,7 @@
    * representation
    * @return the formatted representation of an error for the given text.
    */
-  private String getFormattedError(String text)
+  private Message getFormattedError(Message text)
   {
     return formatter.getFormattedError(text, false);
   }
@@ -987,7 +950,7 @@
    * representation
    * @return the formatted representation of an error for the given text.
    */
-  private String getFormattedError(String text, boolean applyMargin)
+  private Message getFormattedError(Message text, boolean applyMargin)
   {
     return formatter.getFormattedError(text, applyMargin);
   }
@@ -1000,7 +963,7 @@
    * @return the formatted representation of a log error message for the given
    * text.
    */
-  private String getFormattedLogError(String text)
+  private Message getFormattedLogError(Message text)
   {
     return formatter.getFormattedLogError(text);
   }
@@ -1011,7 +974,7 @@
    * representation
    * @return the formatted representation of a log message for the given text.
    */
-  private String getFormattedLog(String text)
+  private Message getFormattedLog(Message text)
   {
     return formatter.getFormattedLog(text);
   }
@@ -1020,7 +983,7 @@
    * Returns the line break formatted.
    * @return the line break formatted.
    */
-  private String getLineBreak()
+  private Message getLineBreak()
   {
     return formatter.getLineBreak();
   }
@@ -1029,7 +992,7 @@
    * Returns the task separator formatted.
    * @return the task separator formatted.
    */
-  private String getTaskSeparator()
+  private Message getTaskSeparator()
   {
     return formatter.getTaskSeparator();
   }
@@ -1042,33 +1005,21 @@
    * @return the formatted representation of a progress message for the given
    * text.
    */
-  private String getFormattedProgress(String text)
+  private Message getFormattedProgress(Message text)
   {
     return formatter.getFormattedProgress(text);
   }
 
   /**
-   * Returns a localized message for a given properties key and throwable.
-   * @param key the key of the message in the properties file.
-   * @param t the throwable for which we want to get a message.
-   * @return a localized message for a given properties key and throwable.
+   * Returns the formatted representation of a progress message for a given
+   * text with a line feed at the end.
+   * @param text the source text from which we want to get the formatted
+   * representation
+   * @return the formatted representation of a progress message for the given
+   * text.
    */
-  private String getThrowableMsg(String key, Throwable t)
-  {
-    return getThrowableMsg(key, null, t);
-  }
-
-  /**
-   * Returns a localized message for a given properties key and throwable.
-   * @param key the key of the message in the properties file.
-   * @param args the arguments of the message in the properties file.
-   * @param t the throwable for which we want to get a message.
-   *
-   * @return a localized message for a given properties key and throwable.
-   */
-  private String getThrowableMsg(String key, String[] args, Throwable t)
-  {
-    return Utils.getThrowableMsg(getI18n(), key, args, t);
+  private Message getFormattedProgressWithLineBreak(Message text) {
+    return new MessageBuilder(text).append(getLineBreak()).toMessage();
   }
 
   /**
@@ -1082,7 +1033,7 @@
   private class ProgressReader
   {
     private boolean isFirstLine;
-    private String errorMsg;
+    private Message errorMsg;
 
     /**
      * The protected constructor.
@@ -1095,8 +1046,9 @@
     public ProgressReader(final BufferedReader reader, final boolean isError,
         final boolean isStart)
     {
-      final String errorTag =
-          isError ? "error-reading-erroroutput" : "error-reading-output";
+      final MessageDescriptor.Arg0 errorTag =
+          isError ? INFO_ERROR_READING_ERROROUTPUT :
+                  INFO_ERROR_READING_OUTPUT;
 
       isFirstLine = true;
 
@@ -1109,40 +1061,40 @@
             String line = reader.readLine();
             while (line != null)
             {
-              StringBuilder buf = new StringBuilder();
+              MessageBuilder buf = new MessageBuilder();
               if (!isFirstLine)
               {
                 buf.append(formatter.getLineBreak());
               }
               if (isError)
               {
-                buf.append(getFormattedLogError(line));
+                buf.append(getFormattedLogError(Message.raw(line)));
               } else
               {
-                buf.append(getFormattedLog(line));
+                buf.append(getFormattedLog(Message.raw(line)));
               }
-              String summary = isStart?
-                  getFormattedSummary(getMsg("summary-starting")):
-                    getFormattedSummary(getMsg("summary-stopping"));
-              updateProgress(summary, buf.toString());
+              Message summary = isStart?
+                  getFormattedSummary(INFO_SUMMARY_STARTING.get()):
+                    getFormattedSummary(INFO_SUMMARY_STOPPING.get());
+              updateProgress(summary, buf.toMessage());
               isFirstLine = false;
 
               line = reader.readLine();
             }
           } catch (IOException ioe)
           {
-            errorMsg = getThrowableMsg(errorTag, ioe);
+            errorMsg = Utils.getThrowableMsg(errorTag.get(), ioe);
 
           } catch (Throwable t)
           {
-            errorMsg = getThrowableMsg(errorTag, t);
+            errorMsg = Utils.getThrowableMsg(errorTag.get(), t);
           }
         }
       });
       t.start();
     }
 
-    public String getErrorMessage()
+    public Message getErrorMessage()
     {
       return errorMsg;
     }
@@ -1157,7 +1109,8 @@
   private boolean confirmStop()
   {
     return Utilities.displayConfirmation(getStatusPanelDialog(),
-        getMsg("confirm-stop-message"), getMsg("confirm-stop-title"));
+        INFO_CONFIRM_STOP_MESSAGE.get(),
+            INFO_CONFIRM_STOP_TITLE.get());
   }
 
   /**
@@ -1169,7 +1122,8 @@
   private boolean confirmRestart()
   {
     return Utilities.displayConfirmation(getStatusPanelDialog(),
-        getMsg("confirm-restart-message"), getMsg("confirm-restart-title"));
+        INFO_CONFIRM_RESTART_MESSAGE.get(),
+            INFO_CONFIRM_RESTART_TITLE.get());
   }
 
   /**
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusPanelLauncher.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusPanelLauncher.java
index 2e9704c..0afa8ef 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusPanelLauncher.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/StatusPanelLauncher.java
@@ -33,15 +33,16 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.quicksetup.util.Utils;
 import org.opends.quicksetup.Installation;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.util.ServerConstants;
+import org.opends.server.util.StaticUtils;
 import org.opends.server.util.args.ArgumentParser;
 import org.opends.server.util.args.BooleanArgument;
 
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 
 /**
@@ -125,12 +126,16 @@
         }
         if (logFileName != null)
         {
-          System.err.println(getMsg(
-              "status-panel-launcher-gui-launch-failed-details", logFileName));
+          System.err.println(StaticUtils.wrapText(
+                  INFO_STATUS_PANEL_LAUNCHER_GUI_LAUNCH_FAILED_DETAILS.get(
+                          logFileName),
+                  Utils.getCommandLineMaxLineWidth()));
         }
         else
         {
-          System.err.println(getMsg("status-panel-launcher-gui-launch-failed"));
+          System.err.println(StaticUtils.wrapText(
+                  INFO_STATUS_PANEL_LAUNCHER_GUI_LAUNCH_FAILED.get(),
+                  Utils.getCommandLineMaxLineWidth()));
         }
         System.exit(exitCode);
       }
@@ -163,7 +168,7 @@
         try
         {
           // Setup MacOSX native menu bar before AWT is loaded.
-          Utils.setMacOSXMenuBar(getMsg("statuspanel-dialog-title"));
+          Utils.setMacOSXMenuBar(INFO_STATUSPANEL_DIALOG_TITLE.get());
           SplashScreen.main(args);
           returnValue[0] = 0;
         }
@@ -216,7 +221,7 @@
   {
     ArgumentParser argParser =
       new ArgumentParser(StatusPanelLauncher.class.getName(),
-        getI18n().getMsg("status-panel-launcher-usage-description"), false);
+        INFO_STATUS_PANEL_LAUNCHER_USAGE_DESCRIPTION.get(), false);
     BooleanArgument showUsage;
     String scriptName;
     if (Utils.isWindows()) {
@@ -229,7 +234,7 @@
     {
       showUsage = new BooleanArgument("showusage", OPTION_SHORT_HELP,
         OPTION_LONG_HELP,
-        MSGID_DESCRIPTION_USAGE);
+        INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
 
@@ -244,35 +249,6 @@
   }
 
   /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   */
-  private static String getMsg(String key)
-  {
-    return org.opends.server.util.StaticUtils.wrapText(getI18n().getMsg(key),
-        Utils.getCommandLineMaxLineWidth());
-  }
-
-  /**
-   * Creates an internationaized message based on the input key and
-   * properly formatted for the terminal.
-   * @param key for the message in the bundle
-   * @param args String... arguments for the message
-   * @return String message properly formatted for the terminal
-   */
-  private static String getMsg(String key, String... args)
-  {
-    return org.opends.server.util.StaticUtils.wrapText(
-        getI18n().getMsg(key, args),
-        Utils.getCommandLineMaxLineWidth());
-  }
-
-  private static ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
-  /**
    * This class is used to avoid displaying the error message related to display
    * problems that we might have when trying to display the SplashWindow.
    *
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/DatabasesTableModel.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/DatabasesTableModel.java
index ce20326..f44d3d8 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/DatabasesTableModel.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/DatabasesTableModel.java
@@ -35,10 +35,12 @@
 
 import javax.swing.table.AbstractTableModel;
 
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.guitools.statuspanel.BaseDNDescriptor;
 import org.opends.quicksetup.ui.SortableTableModel;
 
+import org.opends.messages.Message;
+import static org.opends.messages.AdminToolMessages.*;
+
 /**
  * This class is just a table model used to display the information about
  * databases in a table.
@@ -51,13 +53,13 @@
   private HashSet<BaseDNDescriptor> data = new HashSet<BaseDNDescriptor>();
   private ArrayList<BaseDNDescriptor> dataArray =
     new ArrayList<BaseDNDescriptor>();
-  private final String[] COLUMN_NAMES = {
-    getMsg("basedn-column"),
-    getMsg("backendid-column"),
-    getMsg("number-entries-column"),
-    getMsg("replicated-column"),
-    getMsg("missing-changes-column"),
-    getMsg("age-of-oldest-missing-change-column")
+  private final Message[] COLUMN_NAMES = {
+    INFO_BASEDN_COLUMN.get(),
+    INFO_BACKENDID_COLUMN.get(),
+    INFO_NUMBER_ENTRIES_COLUMN.get(),
+    INFO_REPLICATED_COLUMN.get(),
+    INFO_MISSING_CHANGES_COLUMN.get(),
+    INFO_AGE_OF_OLDEST_MISSING_CHANGE_COLUMN.get()
   };
   private int sortColumn = 0;
   private boolean sortAscending = true;
@@ -360,7 +362,7 @@
    * {@inheritDoc}
    */
   public String getColumnName(int col) {
-    return COLUMN_NAMES[col];
+    return COLUMN_NAMES[col].toString();
   }
 
   /**
@@ -468,11 +470,9 @@
     if ((rep.getDatabase().getBaseDns().size() > 1) &&
       (nEntries >= 0))
     {
-      String[] args = {
-        String.valueOf(nEntries),
-        rep.getDatabase().getBackendID()
-      };
-      v = getMsg("number-entries-multiple-suffixes-in-db", args);
+      v = INFO_NUMBER_ENTRIES_MULTIPLE_SUFFIXES_IN_DB.get(
+              String.valueOf(nEntries),
+              rep.getDatabase().getBackendID());
     }
     else
     {
@@ -499,7 +499,7 @@
     }
     else
     {
-      v = getMsg("not-applicable-label");
+      v = INFO_NOT_APPLICABLE_LABEL.get();
     }
     return v;
   }
@@ -543,7 +543,7 @@
     }
     else
     {
-      v = getMsg("not-applicable-label");
+      v = INFO_NOT_APPLICABLE_LABEL.get();
     }
     return v;
   }
@@ -555,36 +555,18 @@
    * @return the localized String describing the replication state of
    * a given Base DN.
    */
-  private String getStringForReplState(BaseDNDescriptor rep)
+  private Message getStringForReplState(BaseDNDescriptor rep)
   {
-    String s;
+    Message s;
     if (rep.getType() == BaseDNDescriptor.Type.REPLICATED)
     {
-      s = getMsg("suffix-replicated-label");
+      s = INFO_SUFFIX_REPLICATED_LABEL.get();
     }
     else
     {
-      s = getMsg("suffix-not-replicated-label");
+      s = INFO_SUFFIX_NOT_REPLICATED_LABEL.get();
     }
     return s;
   }
 
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private String getMsg(String key, String[] args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
 }
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/ListenersTableModel.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/ListenersTableModel.java
index 3a06726..dc5dc1d 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/ListenersTableModel.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/ListenersTableModel.java
@@ -35,10 +35,12 @@
 
 import javax.swing.table.AbstractTableModel;
 
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.guitools.statuspanel.ListenerDescriptor;
 import org.opends.quicksetup.ui.SortableTableModel;
 
+import org.opends.messages.Message;
+import static org.opends.messages.AdminToolMessages.*;
+
 /**
  * This class is just a table model used to display the information about
  * listeners in a table.
@@ -51,10 +53,10 @@
   private HashSet<ListenerDescriptor> data = new HashSet<ListenerDescriptor>();
   private ArrayList<ListenerDescriptor> dataArray =
     new ArrayList<ListenerDescriptor>();
-  private final String[] COLUMN_NAMES = {
-    getMsg("address-port-column"),
-    getMsg("protocol-column"),
-    getMsg("state-column")
+  private final Message[] COLUMN_NAMES = {
+    INFO_ADDRESS_PORT_COLUMN.get(),
+    INFO_PROTOCOL_COLUMN.get(),
+    INFO_STATE_COLUMN.get()
   };
   private int sortColumn = 0;
   private boolean sortAscending = true;
@@ -194,15 +196,15 @@
       switch (desc.getState())
       {
       case ENABLED:
-        v = getMsg("enabled-label");
+        v = INFO_ENABLED_LABEL.get();
         break;
 
       case DISABLED:
-        v = getMsg("disabled-label");
+        v = INFO_DISABLED_LABEL.get();
         break;
 
       case UNKNOWN:
-        v = getMsg("unknown-label");
+        v = INFO_UNKNOWN_LABEL.get();
         break;
 
         default:
@@ -216,7 +218,7 @@
    * {@inheritDoc}
    */
   public String getColumnName(int col) {
-    return COLUMN_NAMES[col];
+    return COLUMN_NAMES[col].toString();
   }
 
 
@@ -257,17 +259,4 @@
     this.sortColumn = sortColumn;
   }
 
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
 }
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/LoginDialog.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/LoginDialog.java
index fe354e1..36540a5 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/LoginDialog.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/LoginDialog.java
@@ -54,7 +54,6 @@
 import javax.swing.text.JTextComponent;
 
 import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.guitools.statuspanel.ConfigException;
 import org.opends.guitools.statuspanel.ConfigFromFile;
 import org.opends.guitools.statuspanel.ConnectionProtocolPolicy;
@@ -68,6 +67,9 @@
 import org.opends.quicksetup.util.BackgroundTask;
 import org.opends.quicksetup.util.Utils;
 
+import org.opends.messages.Message;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This class is a dialog that appears when the user must provide authentication
@@ -113,7 +115,7 @@
       ConnectionProtocolPolicy policy)
   {
     super(parent);
-    setTitle(getMsg("login-dialog-title"));
+    setTitle(INFO_LOGIN_DIALOG_TITLE.get().toString());
     this.parent = parent;
     getContentPane().add(createPanel());
     if (trustManager == null)
@@ -200,7 +202,7 @@
     gbc.fill = GridBagConstraints.BOTH;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = 0;
-    String msg = getMsg("login-dialog-msg");
+    Message msg = INFO_LOGIN_DIALOG_MSG.get();
 
     JTextComponent textPane =
       UIFactory.makeHtmlPane(msg, UIFactory.INSTRUCTIONS_FONT);
@@ -217,15 +219,16 @@
     gbc.anchor = GridBagConstraints.WEST;
     gbc.fill = GridBagConstraints.HORIZONTAL;
     lDn = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("login-dn-label"),
+        INFO_LOGIN_DN_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     p2.add(lDn, gbc);
     gbc.weightx = 1.0;
     gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
-    tfDn = UIFactory.makeJTextField(getProposedAdministrativeUserDn(),
-        getMsg("login-dn-tooltip"),
-        UIFactory.DN_FIELD_SIZE, UIFactory.TextStyle.TEXTFIELD);
+    tfDn = UIFactory.makeJTextField(
+            Message.raw(getProposedAdministrativeUserDn()),
+            INFO_LOGIN_DN_TOOLTIP.get(),
+            UIFactory.DN_FIELD_SIZE, UIFactory.TextStyle.TEXTFIELD);
     p2.add(tfDn, gbc);
 
     gbc.insets.top = 0;
@@ -233,7 +236,7 @@
     gbc.weightx = 0.0;
     gbc.insets.left = 0;
     lPwd = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("login-pwd-label"),
+        INFO_LOGIN_PWD_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     p2.add(lPwd, gbc);
     gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
@@ -242,7 +245,7 @@
     JPanel p3 = new JPanel(new GridBagLayout());
     p3.setOpaque(false);
     tfPwd = UIFactory.makeJPasswordField(null,
-        getMsg("login-pwd-tooltip"),
+        INFO_LOGIN_PWD_TOOLTIP.get(),
         UIFactory.PASSWORD_FIELD_SIZE, UIFactory.TextStyle.PASSWORD_FIELD);
     p2.add(p3, gbc);
     gbc.insets = UIFactory.getEmptyInsets();
@@ -278,8 +281,8 @@
     gbc.fill = GridBagConstraints.NONE;
     gbc.weightx = 0.0;
     okButton =
-      UIFactory.makeJButton(getMsg("ok-button-label"),
-          getMsg("login-ok-button-tooltip"));
+      UIFactory.makeJButton(INFO_OK_BUTTON_LABEL.get(),
+          INFO_LOGIN_OK_BUTTON_TOOLTIP.get());
     buttonPanel.add(okButton, gbc);
     okButton.addActionListener(new ActionListener()
     {
@@ -292,8 +295,8 @@
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = UIFactory.HORIZONTAL_INSET_BETWEEN_BUTTONS;
     cancelButton =
-      UIFactory.makeJButton(getMsg("cancel-button-label"),
-          getMsg("login-cancel-button-tooltip"));
+      UIFactory.makeJButton(INFO_CANCEL_BUTTON_LABEL.get(),
+          INFO_LOGIN_CANCEL_BUTTON_TOOLTIP.get());
     buttonPanel.add(cancelButton, gbc);
     cancelButton.addActionListener(new ActionListener()
     {
@@ -377,7 +380,8 @@
             }
             else
             {
-              throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+              throw new ConfigException(
+                      INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
             }
             break;
           case USE_LDAPS:
@@ -390,7 +394,8 @@
             }
             else
             {
-              throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+              throw new ConfigException(
+                      INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
             }
             break;
           case USE_LDAP:
@@ -402,7 +407,8 @@
             }
             else
             {
-              throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+              throw new ConfigException(
+                      INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
             }
             break;
           case USE_MOST_SECURE_AVAILABLE:
@@ -428,7 +434,8 @@
             }
             else
             {
-              throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+              throw new ConfigException(
+                      INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
             }
             break;
           case USE_LESS_SECURE_AVAILABLE:
@@ -447,7 +454,8 @@
             }
             else
             {
-              throw new ConfigException(getMsg("could-not-find-valid-ldapurl"));
+              throw new ConfigException(
+                      INFO_COULD_NOT_FIND_VALID_LDAPURL.get());
             }
             break;
             default:
@@ -522,9 +530,9 @@
             }
             else
             {
-              String msg = Utils.getThrowableMsg(getI18n(),
-                  "error-connecting-to-local", null, throwable);
-              displayError(msg, getMsg("error-title"));
+              Message msg = Utils.getThrowableMsg(
+                  INFO_ERROR_CONNECTING_TO_LOCAL.get(), throwable);
+              displayError(msg, INFO_ERROR_TITLE.get());
             }
 
             if (excType != null)
@@ -541,13 +549,12 @@
               {
                 LOG.log(Level.WARNING,
                     "Error parsing ldap url of ldap url.", t);
-                h = getMsg("not-available-label");
+                h = INFO_NOT_AVAILABLE_LABEL.get().toString();
                 p = -1;
               }
               UserDataCertificateException udce =
               new UserDataCertificateException(Step.REPLICATION_OPTIONS,
-                  getMsg("certificate-exception",
-                      new String[] {h, String.valueOf(p)}),
+                  INFO_CERTIFICATE_EXCEPTION.get(h, String.valueOf(p)),
                   throwable, h, p,
                   getTrustManager().getLastRefusedChain(),
                   getTrustManager().getLastRefusedAuthType(), excType);
@@ -561,16 +568,16 @@
             boolean pwdInvalid = false;
 
             String dn = tfDn.getText();
-            ArrayList<String> possibleCauses = new ArrayList<String>();
+            ArrayList<Message> possibleCauses = new ArrayList<Message>();
             if ("".equals(dn.trim()))
             {
               dnInvalid = true;
-              possibleCauses.add(getMsg("empty-directory-manager-dn"));
+              possibleCauses.add(INFO_EMPTY_DIRECTORY_MANAGER_DN.get());
             }
             else if (!Utils.isDn(dn))
             {
               dnInvalid = true;
-              possibleCauses.add(getMsg("not-a-directory-manager-dn"));
+              possibleCauses.add(INFO_NOT_A_DIRECTORY_MANAGER_DN.get());
             }
             else
             {
@@ -583,14 +590,15 @@
               if (!found)
               {
                 dnInvalid = true;
-                possibleCauses.add(getMsg("not-a-directory-manager-in-config"));
+                possibleCauses.add(
+                        INFO_NOT_A_DIRECTORY_MANAGER_IN_CONFIG.get());
               }
             }
 
             if ("".equals(tfPwd.getText()))
             {
               pwdInvalid = true;
-              possibleCauses.add(getMsg("empty-pwd"));
+              possibleCauses.add(INFO_EMPTY_PWD.get());
             }
             if (dnInvalid)
             {
@@ -615,33 +623,31 @@
             }
             if (possibleCauses.size() > 0)
             {
-              // Message with causes
-              String[] arg = {
-                  Utils.getStringFromCollection(possibleCauses, "\n")
-              };
               displayError(
-                  getMsg("cannot-connect-to-login-with-cause", arg),
-                  getMsg("error-title"));
+                  INFO_CANNOT_CONNECT_TO_LOGIN_WITH_CAUSE.get(
+                          Utils.getMessageFromCollection(possibleCauses, "\n")),
+                  INFO_ERROR_TITLE.get());
             }
             else
             {
               // Generic message
               displayError(
-                  getMsg("cannot-connect-with-ads-credentials-without-cause"),
-                  getMsg("error-title"));
+                  INFO_CANNOT_CONNECT_WITH_ADS_CREDENTIALS_WITHOUT_CAUSE.get(),
+                  INFO_ERROR_TITLE.get());
             }
           }
           else if (throwable instanceof ConfigException)
           {
-            displayError(throwable.getMessage(), getMsg("error-title"));
+            displayError(((ConfigException)throwable).getMessageObject(),
+                    INFO_ERROR_TITLE.get());
           }
           else
           {
             // This is a bug
             throwable.printStackTrace();
             displayError(
-                Utils.getThrowableMsg(getI18n(), "bug-msg", null, throwable),
-                getMsg("error-title"));
+                Utils.getThrowableMsg(INFO_BUG_MSG.get(), throwable),
+                INFO_ERROR_TITLE.get());
           }
           cancelButton.setEnabled(true);
           okButton.setEnabled(true);
@@ -650,8 +656,8 @@
           if (Boolean.FALSE.equals(returnValue))
           {
             displayInformationMessage(
-                getMsg("login-dialog-server-not-running-msg"),
-                getMsg("login-dialog-server-not-running-title"));
+                INFO_LOGIN_DIALOG_SERVER_NOT_RUNNING_MSG.get(),
+                INFO_LOGIN_DIALOG_SERVER_NOT_RUNNING_TITLE.get());
           }
           UIFactory.setTextStyle(lDn,
               UIFactory.TextStyle.PRIMARY_FIELD_VALID);
@@ -677,7 +683,7 @@
    * @param title
    *          the title for the dialog.
    */
-  private void displayError(String msg, String title)
+  private void displayError(Message msg, Message title)
   {
     Utilities.displayError(parent, msg, title);
     toFront();
@@ -692,7 +698,7 @@
    * @param title
    *          the title for the dialog.
    */
-  private void displayInformationMessage(String msg, String title)
+  private void displayInformationMessage(Message msg, Message title)
   {
     Utilities.displayInformationMessage(parent, msg, title);
     toFront();
@@ -733,23 +739,6 @@
     return conf;
   }
 
-  /* The following three methods are just commodity methods to retrieve
-   * localized messages */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private String getMsg(String key, String[] args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
   /**
    * Returns the trust manager that can be used to establish secure connections.
    * @return the trust manager that can be used to establish secure connections.
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/StatusPanelDialog.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/StatusPanelDialog.java
index ab75bdb..f3d4676 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/StatusPanelDialog.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/StatusPanelDialog.java
@@ -66,7 +66,6 @@
 import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;
 
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.guitools.statuspanel.BaseDNDescriptor;
 import org.opends.guitools.statuspanel.DatabaseDescriptor;
 import org.opends.guitools.statuspanel.ServerStatusDescriptor;
@@ -77,6 +76,9 @@
 import org.opends.quicksetup.util.HtmlProgressMessageFormatter;
 import org.opends.quicksetup.util.Utils;
 
+import org.opends.messages.Message;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This panel is used to display basic information about the server status.
@@ -124,7 +126,7 @@
 
   private InstantaneousToolTipManager toolTipManager;
 
-  private final String NOT_AVAILABLE = getMsg("not-available-label");
+  private final Message NOT_AVAILABLE = INFO_NOT_AVAILABLE_LABEL.get();
 
   /**
    * ProgressDialog constructor.
@@ -132,7 +134,7 @@
   public StatusPanelDialog()
   {
     super();
-    setTitle(getMsg("statuspanel-dialog-title"));
+    setTitle(INFO_STATUSPANEL_DIALOG_TITLE.get().toString());
     createLayout();
 
     addWindowListener(new WindowAdapter()
@@ -310,7 +312,7 @@
     gbc.fill = GridBagConstraints.HORIZONTAL;
 
     gbc.insets.bottom = UIFactory.BOTTOM_INSET_PROGRESS_BAR;
-    lError = UIFactory.makeHtmlPane("", UIFactory.PROGRESS_FONT);
+    lError = UIFactory.makeHtmlPane(Message.EMPTY, UIFactory.PROGRESS_FONT);
     lError.setOpaque(false);
     lError.setEditable(false);
     inputPanel.add(lError, gbc);
@@ -344,8 +346,8 @@
     buttonsPanel.add(Box.createHorizontalGlue(), gbc);
 
     authenticateButton =
-      UIFactory.makeJButton(getMsg("authenticate-button-label"),
-          getMsg("authenticate-status-panel-button-tooltip"));
+      UIFactory.makeJButton(INFO_AUTHENTICATE_BUTTON_LABEL.get(),
+          INFO_AUTHENTICATE_STATUS_PANEL_BUTTON_TOOLTIP.get());
     gbc.fill = GridBagConstraints.NONE;
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.RELATIVE;
@@ -359,8 +361,8 @@
     });
 
     quitButton =
-        UIFactory.makeJButton(getMsg("quit-button-label"),
-            getMsg("quit-status-panel-button-tooltip"));
+        UIFactory.makeJButton(INFO_QUIT_BUTTON_LABEL.get(),
+            INFO_QUIT_STATUS_PANEL_BUTTON_TOOLTIP.get());
     gbc.fill = GridBagConstraints.NONE;
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
@@ -475,7 +477,7 @@
    * surrounding the text.
    * @param title the title of the subsection.
    */
-  private JPanel createSubsectionTitle(String title)
+  private JPanel createSubsectionTitle(Message title)
   {
     JPanel p = new JPanel(new GridBagLayout());
     p.setOpaque(false);
@@ -518,14 +520,15 @@
     gbc.weightx = 1.0;
     gbc.insets = UIFactory.getEmptyInsets();
 
-    p.add(createSubsectionTitle(getMsg("server-status-title")), gbc);
+    p.add(createSubsectionTitle(INFO_SERVER_STATUS_TITLE.get()), gbc);
 
     JPanel auxPanel = new JPanel(new GridBagLayout());
     auxPanel.setOpaque(false);
     gbc.anchor = GridBagConstraints.WEST;
     gbc.gridwidth = GridBagConstraints.RELATIVE;
     auxPanel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("server-status-label"), UIFactory.TextStyle.PRIMARY_FIELD_VALID),
+        INFO_SERVER_STATUS_LABEL.get(),
+        UIFactory.TextStyle.PRIMARY_FIELD_VALID),
         gbc);
 
     JPanel statusPanel = new JPanel(new GridBagLayout());
@@ -538,8 +541,8 @@
     toolTipManager.registerComponent(lServerStatus);
     gbc.gridwidth--;
 
-    stopButton = UIFactory.makeJButton(getMsg("stop-button-label"),
-        getMsg("stop-button-tooltip"));
+    stopButton = UIFactory.makeJButton(INFO_STOP_BUTTON_LABEL.get(),
+        INFO_STOP_BUTTON_TOOLTIP.get());
     stopButton.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent ev)
@@ -552,8 +555,8 @@
 
     gbc.gridwidth--;
     gbc.insets.left = UIFactory.HORIZONTAL_INSET_BETWEEN_BUTTONS;
-    startButton = UIFactory.makeJButton(getMsg("start-button-label"),
-        getMsg("start-button-tooltip"));
+    startButton = UIFactory.makeJButton(INFO_START_BUTTON_LABEL.get(),
+        INFO_START_BUTTON_TOOLTIP.get());
     statusPanel.add(startButton, gbc);
     startButton.addActionListener(new ActionListener()
     {
@@ -564,8 +567,8 @@
     });
 
     gbc.gridwidth--;
-    restartButton = UIFactory.makeJButton(getMsg("restart-button-label"),
-        getMsg("restart-button-tooltip"));
+    restartButton = UIFactory.makeJButton(INFO_RESTART_BUTTON_LABEL.get(),
+        INFO_RESTART_BUTTON_TOOLTIP.get());
     restartButton.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent ev)
@@ -601,7 +604,7 @@
     gbc.insets.top = UIFactory.TOP_INSET_PRIMARY_FIELD;
     gbc.gridwidth = GridBagConstraints.RELATIVE;
     auxPanel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("connections-label"), UIFactory.TextStyle.PRIMARY_FIELD_VALID),
+        INFO_CONNECTIONS_LABEL.get(), UIFactory.TextStyle.PRIMARY_FIELD_VALID),
         gbc);
     lCurrentConnections = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
         NOT_AVAILABLE, UIFactory.TextStyle.READ_ONLY);
@@ -633,7 +636,7 @@
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.weightx = 1.0;
 
-    p.add(createSubsectionTitle(getMsg("server-details-title")), gbc);
+    p.add(createSubsectionTitle(INFO_SERVER_DETAILS_TITLE.get()), gbc);
 
     JPanel auxPanel = new JPanel(new GridBagLayout());
     auxPanel.setOpaque(false);
@@ -642,16 +645,16 @@
     JLabel[] leftLabels =
       {
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-            getMsg("administrative-users-label"),
+            INFO_ADMINISTRATIVE_USERS_LABEL.get(),
             UIFactory.TextStyle.PRIMARY_FIELD_VALID),
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-            getMsg("installation-path-label"),
+            INFO_INSTALLATION_PATH_LABEL.get(),
             UIFactory.TextStyle.PRIMARY_FIELD_VALID),
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-            getMsg("opends-version-label"),
+            INFO_OPENDS_VERSION_LABEL.get(),
             UIFactory.TextStyle.PRIMARY_FIELD_VALID),
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-            getMsg("java-version-label"),
+            INFO_JAVA_VERSION_LABEL.get(),
             UIFactory.TextStyle.PRIMARY_FIELD_VALID)
       };
 
@@ -709,7 +712,7 @@
     gbc.weightx = 1.0;
     gbc.fill = GridBagConstraints.HORIZONTAL;
 
-    p.add(createSubsectionTitle(getMsg("listeners-title")), gbc);
+    p.add(createSubsectionTitle(INFO_LISTENERS_TITLE.get()), gbc);
 
     listenersTableModel = new ListenersTableModel();
     listenersTable = UIFactory.makeSortableTable(listenersTableModel,
@@ -725,7 +728,8 @@
     gbc.insets.top = 0;
     p.add(listenersTable, gbc);
 
-    lListenersTableEmpty = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, "",
+    lListenersTableEmpty = UIFactory.makeJLabel(
+        UIFactory.IconType.NO_ICON, Message.EMPTY,
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     gbc.insets.top = UIFactory.TOP_INSET_PRIMARY_FIELD;
     p.add(lListenersTableEmpty, gbc);
@@ -748,7 +752,7 @@
     gbc.weightx = 1.0;
     gbc.fill = GridBagConstraints.HORIZONTAL;
 
-    p.add(createSubsectionTitle(getMsg("databases-title")), gbc);
+    p.add(createSubsectionTitle(INFO_DATABASES_TITLE.get()), gbc);
 
     dbTableModelWithReplication = new DatabasesTableModel(true);
     dbTableModelWithoutReplication = new DatabasesTableModel(false);
@@ -783,8 +787,8 @@
     dbTableWithoutReplication.setVisible(false);
 
     gbc.insets.top = UIFactory.TOP_INSET_PRIMARY_FIELD;
-    lDbTableEmpty = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, "",
-        UIFactory.TextStyle.PRIMARY_FIELD_VALID);
+    lDbTableEmpty = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
+            Message.EMPTY, UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     p.add(lDbTableEmpty, gbc);
     lDbTableEmpty.setVisible(false);
     toolTipManager.registerComponent(lDbTableEmpty);
@@ -800,9 +804,9 @@
    */
   private void setNotAvailableBecauseServerIsDown(JLabel l)
   {
-    l.setText(NOT_AVAILABLE);
+    l.setText(NOT_AVAILABLE.toString());
     l.setIcon(UIFactory.getImageIcon(UIFactory.IconType.HELP_SMALL));
-    l.setToolTipText(getMsg("not-available-server-down-tooltip"));
+    l.setToolTipText(INFO_NOT_AVAILABLE_SERVER_DOWN_TOOLTIP.get().toString());
     l.setHorizontalTextPosition(SwingConstants.LEFT);
   }
 
@@ -814,9 +818,11 @@
    */
   private void setNotAvailableBecauseAuthenticationIsRequired(JLabel l)
   {
-    l.setText(NOT_AVAILABLE);
+    l.setText(NOT_AVAILABLE.toString());
     l.setIcon(UIFactory.getImageIcon(UIFactory.IconType.HELP_SMALL));
-    l.setToolTipText(getMsg("not-available-authentication-required-tooltip"));
+    l.setToolTipText(
+            INFO_NOT_AVAILABLE_AUTHENTICATION_REQUIRED_TOOLTIP.get()
+                    .toString());
     l.setHorizontalTextPosition(SwingConstants.LEFT);
   }
 
@@ -826,7 +832,7 @@
    */
   private void setNotAvailable(JLabel l)
   {
-    l.setText(NOT_AVAILABLE);
+    l.setText(NOT_AVAILABLE.toString());
     l.setIcon(null);
     l.setToolTipText(null);
   }
@@ -850,39 +856,39 @@
    */
   private void updateStatusContents(ServerStatusDescriptor desc)
   {
-    String status;
+    Message status;
     switch (desc.getStatus())
     {
     case STARTED:
-      status = getMsg("server-started-label");
+      status = INFO_SERVER_STARTED_LABEL.get();
       startButton.setVisible(false);
       restartButton.setVisible(true);
       stopButton.setVisible(true);
       break;
 
     case STOPPED:
-      status = getMsg("server-stopped-label");
+      status = INFO_SERVER_STOPPED_LABEL.get();
       startButton.setVisible(true);
       restartButton.setVisible(false);
       stopButton.setVisible(false);
       break;
 
     case STARTING:
-      status = getMsg("server-starting-label");
+      status = INFO_SERVER_STARTING_LABEL.get();
       startButton.setVisible(false);
       restartButton.setVisible(false);
       stopButton.setVisible(false);
       break;
 
     case STOPPING:
-      status = getMsg("server-stopping-label");
+      status = INFO_SERVER_STOPPING_LABEL.get();
       startButton.setVisible(false);
       restartButton.setVisible(false);
       stopButton.setVisible(false);
       break;
 
     case UNKNOWN:
-      status = getMsg("server-unknown-status-label");
+      status = INFO_SERVER_UNKNOWN_STATUS_LABEL.get();
       startButton.setVisible(false);
       restartButton.setVisible(true);
       stopButton.setVisible(true);
@@ -891,7 +897,7 @@
     default:
       throw new IllegalStateException("Unknown status: "+desc.getStatus());
     }
-    lServerStatus.setText(status);
+    lServerStatus.setText(status.toString());
 
     /* Enable authenticate button only if the server is started AND we have
      * no authentication (or the authentication we have does not seem to work
@@ -946,15 +952,15 @@
     Set<String> administrators = desc.getAdministrativeUsers();
     if (administrators.size() > 0)
     {
-      TreeSet<String> ordered = new TreeSet<String>();
+      TreeSet<Message> ordered = new TreeSet<Message>();
       for (String name: administrators)
       {
-        ordered.add(formatter.getFormattedText(name));
+        ordered.add(formatter.getFormattedText(Message.raw(name)));
       }
 
       setTextValue(lAdministrativeUsers,"<html>"+
           UIFactory.applyFontToHtml(
-              Utils.getStringFromCollection(ordered, "<br>"),
+              Utils.getMessageFromCollection(ordered, "<br>").toString(),
               UIFactory.READ_ONLY_FONT));
     }
     else
@@ -1058,12 +1064,14 @@
         }
         else
         {
-          setTextValue(lListenersTableEmpty, getMsg("no-listeners-found"));
+          setTextValue(lListenersTableEmpty,
+                  INFO_NO_LISTENERS_FOUND.get().toString());
         }
       }
       else
       {
-        setTextValue(lListenersTableEmpty, getMsg("no-listeners-found"));
+        setTextValue(lListenersTableEmpty,
+                INFO_NO_LISTENERS_FOUND.get().toString());
       }
     }
     else
@@ -1107,12 +1115,12 @@
         }
         else
         {
-          setTextValue(lDbTableEmpty, getMsg("no-dbs-found"));
+          setTextValue(lDbTableEmpty, INFO_NO_DBS_FOUND.get().toString());
         }
       }
       else
       {
-        setTextValue(lDbTableEmpty, getMsg("no-dbs-found"));
+        setTextValue(lDbTableEmpty, INFO_NO_DBS_FOUND.get().toString());
       }
     }
     else
@@ -1144,7 +1152,7 @@
    */
   private void updateErrorContents(ServerStatusDescriptor desc)
   {
-    String errorMsg = desc.getErrorMessage();
+    Message errorMsg = desc.getErrorMessage();
     if (errorMsg == null)
     {
       lError.setVisible(false);
@@ -1153,25 +1161,11 @@
     {
 
       lError.setVisible(true);
-      lError.setText(formatter.getFormattedError(errorMsg, false));
+      lError.setText(formatter.getFormattedError(errorMsg, false).toString());
     }
   }
 
   /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
-  /**
    * Updates the size of the table rows according to the size of the
    * rendered component.
    * @param table the table to handle.
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
index b34331b..725c60f 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
@@ -28,7 +28,6 @@
 package org.opends.guitools.uninstaller;
 
 import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.quicksetup.*;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.util.args.Argument;
@@ -41,6 +40,10 @@
 import java.util.logging.Logger;
 import java.io.IOException;
 
+import org.opends.messages.Message;
+import static org.opends.messages.AdminToolMessages.*;
+
+
 /**
  * The class used to provide some CLI interface in the uninstall.
  *
@@ -56,8 +59,6 @@
   static private final Logger LOG =
           Logger.getLogger(UninstallCliHelper.class.getName());
 
-  static private String FORMAT_KEY = "cli-uninstall-confirm-prompt";
-
   /**
    * Creates a UserData based in the arguments provided.  It asks
    * user for additional information if what is provided in the arguments is not
@@ -91,7 +92,7 @@
     }
     catch (ArgumentException ae)
     {
-      throw new UserDataException(null, ae.getLocalizedMessage());
+      throw new UserDataException(null, ae.getMessageObject());
     }
 
     Argument interactive = args.getArgumentForLongID(INTERACTIVE_OPTION_LONG);
@@ -158,15 +159,6 @@
   }
 
   /**
-   * Gets the resource provider instance.
-   * @return ResourceProvider instance
-   */
-  protected ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
-  /**
    * Commodity method used to ask the user to confirm the deletion of certain
    * parts of the server.  It updates the provided UserData object
    * accordingly.  Returns <CODE>true</CODE> if the user cancels and <CODE>
@@ -183,11 +175,15 @@
       Set<String> outsideDbs, Set<String> outsideLogs)
   {
     boolean cancelled = false;
-
-    String answer = promptConfirm(FORMAT_KEY,
-            getMsg("cli-uninstall-what-to-delete"),
-        "1", new String[] {"1", "2", "3"});
-    if ("3".equals(answer))
+    Message[] options = new Message[] {
+      Message.raw("1"),
+      Message.raw("2"),
+      Message.raw("3")
+    };
+    Message answer = promptConfirm(
+            INFO_CLI_UNINSTALL_WHAT_TO_DELETE.get(),
+            options[0], options);
+    if (options[2].equals(answer))
     {
       cancelled = true;
     }
@@ -209,20 +205,27 @@
       while (!somethingSelected)
       {
 //      Ask for confirmation for the different items
-        String[] keys = {
-            "cli-uninstall-confirm-libraries-binaries",
-            "cli-uninstall-confirm-databases",
-            "cli-uninstall-confirm-logs",
-            "cli-uninstall-confirm-configuration-schema",
-            "cli-uninstall-confirm-backups",
-            "cli-uninstall-confirm-ldifs",
-            "cli-uninstall-confirm-outsidedbs",
-            "cli-uninstall-confirm-outsidelogs"
+        Message[] keys = {
+                INFO_CLI_UNINSTALL_CONFIRM_LIBRARIES_BINARIES.get(),
+                INFO_CLI_UNINSTALL_CONFIRM_DATABASES.get(),
+                INFO_CLI_UNINSTALL_CONFIRM_LOGS.get(),
+                INFO_CLI_UNINSTALL_CONFIRM_CONFIGURATION_SCHEMA.get(),
+                INFO_CLI_UNINSTALL_CONFIRM_BACKUPS.get(),
+                INFO_CLI_UNINSTALL_CONFIRM_LDIFS.get(),
+                INFO_CLI_UNINSTALL_CONFIRM_OUTSIDEDBS.get(
+                        Utils.getStringFromCollection(outsideDbs,
+                                Constants.LINE_SEPARATOR)),
+                INFO_CLI_UNINSTALL_CONFIRM_OUTSIDELOGS.get(
+                        Utils.getStringFromCollection(outsideLogs,
+                                Constants.LINE_SEPARATOR)
+                )
         };
 
-        String[] validValues = {
-            getMsg("cli-uninstall-yes-long"), getMsg("cli-uninstall-no-long"),
-            getMsg("cli-uninstall-yes-short"), getMsg("cli-uninstall-no-short")
+        Message[] validValues = {
+                INFO_CLI_UNINSTALL_YES_LONG.get(),
+                INFO_CLI_UNINSTALL_NO_LONG.get(),
+                INFO_CLI_UNINSTALL_YES_SHORT.get(),
+                INFO_CLI_UNINSTALL_NO_SHORT.get()
         };
         boolean[] answers = new boolean[keys.length];
         for (int i=0; i<keys.length; i++)
@@ -231,30 +234,16 @@
           ((i == 7) && (outsideLogs.size() == 0));
           if (!ignore)
           {
-            String msg;
-            if (i == 6)
-            {
-              String[] arg = {Utils.getStringFromCollection(outsideDbs,
-                  Constants.LINE_SEPARATOR)};
-              msg = getMsg(keys[i], arg);
-            }
-            else if (i == 7)
-            {
-              String[] arg = {Utils.getStringFromCollection(outsideLogs,
-                  Constants.LINE_SEPARATOR)};
-              msg = getMsg(keys[i], arg);
-            }
-            else
-            {
-              msg = getMsg(keys[i]);
-            }
-            answer = promptConfirm(FORMAT_KEY,
-                msg, getMsg("cli-uninstall-yes-long"),
-                validValues);
+            Message msg = keys[i];
+            answer = promptConfirm(
+                    msg, INFO_CLI_UNINSTALL_YES_LONG.get(),
+                    validValues);
 
             answers[i] =
-                    getMsg("cli-uninstall-yes-long").equalsIgnoreCase(answer) ||
-                    getMsg("cli-uninstall-yes-short").equalsIgnoreCase(answer);
+                    INFO_CLI_UNINSTALL_YES_LONG.get().toString().
+                            equalsIgnoreCase(answer.toString()) ||
+                            INFO_CLI_UNINSTALL_YES_SHORT.get().toString().
+                                    equalsIgnoreCase(answer.toString());
           }
           else
           {
@@ -315,11 +304,8 @@
             !userData.getRemoveLogs())
         {
           somethingSelected = false;
-          if (!userData.isSilent())
-          {
-            System.out.println(Constants.LINE_SEPARATOR+
-                getMsg("cli-uninstall-nothing-to-be-uninstalled"));
-          }
+          System.out.println(Constants.LINE_SEPARATOR+
+              INFO_CLI_UNINSTALL_NOTHING_TO_BE_UNINSTALLED.get());
         }
         else
         {
@@ -377,7 +363,6 @@
     return cancelled;
   }
 
-
   /**
    *  Ask for confirmation to stop server.
    *  @return <CODE>true</CODE> if the user wants to continue and stop the
@@ -385,23 +370,7 @@
    */
   private boolean confirmToStopServer()
   {
-    boolean confirm = true;
-    String[] validValues = {
-        getMsg("cli-uninstall-yes-short"),
-        getMsg("cli-uninstall-no-short"),
-        getMsg("cli-uninstall-yes-long"),
-        getMsg("cli-uninstall-no-long")
-    };
-    String answer = promptConfirm(FORMAT_KEY,
-        getMsg("cli-uninstall-confirm-stop"),
-        getMsg("cli-uninstall-yes-long"), validValues);
-
-    if (getMsg("cli-uninstall-no-short").equalsIgnoreCase(answer) ||
-        getMsg("cli-uninstall-no-long").equalsIgnoreCase(answer))
-    {
-      confirm = false;
-    }
-    return confirm;
+    return confirm(INFO_CLI_UNINSTALL_CONFIRM_STOP.get());
   }
 
   /**
@@ -411,19 +380,23 @@
    */
   private boolean confirmDeleteFiles()
   {
-    boolean confirm = true;
-    String[] validValues = {
-        getMsg("cli-uninstall-yes-short"),
-        getMsg("cli-uninstall-no-short"),
-        getMsg("cli-uninstall-yes-long"),
-        getMsg("cli-uninstall-no-long")
-    };
-    String answer = promptConfirm(FORMAT_KEY,
-        getMsg("cli-uninstall-confirm-delete-files"),
-        getMsg("cli-uninstall-yes-long"), validValues);
+    return confirm(INFO_CLI_UNINSTALL_CONFIRM_DELETE_FILES.get());
+  }
 
-    if (getMsg("cli-uninstall-no-short").equalsIgnoreCase(answer) ||
-        getMsg("cli-uninstall-no-long").equalsIgnoreCase(answer))
+  private boolean confirm(Message msg) {
+    boolean confirm = true;
+    Message[] validValues = {
+        INFO_CLI_UNINSTALL_YES_SHORT.get(),
+        INFO_CLI_UNINSTALL_NO_SHORT.get(),
+        INFO_CLI_UNINSTALL_YES_LONG.get(),
+        INFO_CLI_UNINSTALL_NO_LONG.get(),
+    };
+    Message answer = promptConfirm(msg, validValues[2], validValues);
+
+    if (INFO_CLI_UNINSTALL_NO_SHORT.get().toString()
+            .equalsIgnoreCase(answer.toString()) ||
+        INFO_CLI_UNINSTALL_NO_LONG.get().toString()
+                .equalsIgnoreCase(answer.toString()))
     {
       confirm = false;
     }
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/UninstallLauncher.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/UninstallLauncher.java
index 04318a3..2fcf8be 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/UninstallLauncher.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/UninstallLauncher.java
@@ -27,13 +27,13 @@
 
 package org.opends.guitools.uninstaller;
 
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
+import org.opends.messages.Message;
 import static org.opends.server.tools.ToolConstants.*;
 
 import java.io.File;
 import java.util.logging.Logger;
-
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.quicksetup.CliApplication;
 import org.opends.quicksetup.CliApplicationHelper;
 import org.opends.quicksetup.Launcher;
@@ -100,7 +100,7 @@
     System.setProperty(ServerConstants.PROPERTY_SCRIPT_NAME, scriptName);
 
     argParser = new ArgumentParser(getClass().getName(),
-        getI18n().getMsg("uninstall-launcher-usage-description"), false);
+        INFO_UNINSTALL_LAUNCHER_USAGE_DESCRIPTION.get(), false);
     BooleanArgument cli;
     BooleanArgument silent;
     BooleanArgument interactive;
@@ -108,23 +108,23 @@
     try
     {
       cli = new BooleanArgument("cli", 'c', "cli",
-          MSGID_UNINSTALLDS_DESCRIPTION_CLI);
+          INFO_UNINSTALLDS_DESCRIPTION_CLI.get());
       argParser.addArgument(cli);
       interactive = new BooleanArgument(
           CliApplicationHelper.INTERACTIVE_OPTION_LONG,
           CliApplicationHelper.INTERACTIVE_OPTION_SHORT,
           CliApplicationHelper.INTERACTIVE_OPTION_LONG,
-          MSGID_DESCRIPTION_INTERACTIVE);
+          INFO_DESCRIPTION_INTERACTIVE.get());
       argParser.addArgument(interactive);
       silent = new BooleanArgument(
           CliApplicationHelper.SILENT_OPTION_LONG,
           CliApplicationHelper.SILENT_OPTION_SHORT,
           CliApplicationHelper.SILENT_OPTION_LONG,
-          MSGID_UNINSTALLDS_DESCRIPTION_SILENT);
+          INFO_UNINSTALLDS_DESCRIPTION_SILENT.get());
       argParser.addArgument(silent);
       showUsage = new BooleanArgument("showusage", OPTION_SHORT_HELP,
         OPTION_LONG_HELP,
-        MSGID_DESCRIPTION_USAGE);
+        INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
@@ -141,12 +141,12 @@
   protected void guiLaunchFailed(String logFilePath) {
     if (logFilePath != null)
     {
-      System.err.println(getMsg(
-          "uninstall-launcher-gui-launched-failed-details", logFilePath));
+      System.err.println(INFO_UNINSTALL_LAUNCHER_GUI_LAUNCHED_FAILED_DETAILS
+              .get(logFilePath));
     }
     else
     {
-      System.err.println(getMsg("uninstall-launcher-gui-launched-failed"));
+      System.err.println(INFO_UNINSTALL_LAUNCHER_GUI_LAUNCHED_FAILED.get());
     }
   }
 
@@ -161,7 +161,7 @@
    * {@inheritDoc}
    */
   protected void willLaunchGui() {
-    System.out.println(getMsg("uninstall-launcher-launching-gui"));
+    System.out.println(INFO_UNINSTALL_LAUNCHER_LAUNCHING_GUI.get());
     System.setProperty("org.opends.quicksetup.Application.class",
             org.opends.guitools.uninstaller.Uninstaller.class.getName());
   }
@@ -176,15 +176,8 @@
   /**
    * {@inheritDoc}
    */
-  protected String getFrameTitle() {
-    return getI18n().getMsg("frame-uninstall-title");
+  protected Message getFrameTitle() {
+    return INFO_FRAME_UNINSTALL_TITLE.get();
   }
 
-  /**
-   * {@inheritDoc}
-   */
-  protected ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
 }
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
index e293176..bf47898 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
@@ -40,11 +40,10 @@
 import org.opends.admin.ads.TopologyCache;
 import org.opends.admin.ads.TopologyCacheException;
 import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.guitools.uninstaller.ui.ConfirmUninstallPanel;
 import org.opends.guitools.uninstaller.ui.LoginDialog;
 import org.opends.quicksetup.ui.*;
-import org.opends.quicksetup.util.Utils;
+import static org.opends.quicksetup.util.Utils.*;
 import org.opends.quicksetup.util.BackgroundTask;
 import org.opends.quicksetup.util.ServerController;
 import org.opends.server.admin.AttributeTypePropertyDefinition;
@@ -61,6 +60,10 @@
 import org.opends.server.admin.std.client.RootCfgClient;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.tools.ConfigureWindowsService;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.QuickSetupMessages.*;
 
 import java.io.*;
 import java.net.InetAddress;
@@ -89,8 +92,8 @@
   private HashMap<ProgressStep, Integer> hmRatio =
           new HashMap<ProgressStep, Integer>();
 
-  private HashMap<ProgressStep, String> hmSummary =
-          new HashMap<ProgressStep, String>();
+  private HashMap<ProgressStep, Message> hmSummary =
+          new HashMap<ProgressStep, Message>();
 
   private ApplicationException ue;
 
@@ -103,7 +106,7 @@
 
   private LoginDialog loginDialog;
   private ProgressDialog startProgressDlg;
-  private StringBuffer startProgressDetails = new StringBuffer();
+  private MessageBuilder startProgressDetails = new MessageBuilder();
   private UninstallData conf;
   private String replicationServerHostPort;
   private TopologyCache lastLoadedCache;
@@ -141,8 +144,8 @@
   /**
    * {@inheritDoc}
    */
-  public String getFrameTitle() {
-    return getMsg("frame-uninstall-title");
+  public Message getFrameTitle() {
+    return INFO_FRAME_UNINSTALL_TITLE.get();
   }
 
   /**
@@ -253,8 +256,8 @@
   public void closeClicked(WizardStep cStep, QuickSetup qs) {
     if (cStep == PROGRESS) {
         if (isFinished()
-            || qs.displayConfirmation(getMsg("confirm-close-uninstall-msg"),
-                getMsg("confirm-close-uninstall-title")))
+            || qs.displayConfirmation(INFO_CONFIRM_CLOSE_UNINSTALL_MSG.get(),
+                INFO_CONFIRM_CLOSE_UNINSTALL_TITLE.get()))
         {
           qs.quit();
         }
@@ -315,7 +318,7 @@
             !uud.getRemoveLDIFs() &&
             !uud.getRemoveLogs()) {
       throw new UserDataException(Step.CONFIRM_UNINSTALL,
-              getMsg("nothing-selected-to-uninstall"));
+              INFO_NOTHING_SELECTED_TO_UNINSTALL.get());
     }
   }
 
@@ -338,22 +341,22 @@
   /**
    * {@inheritDoc}
    */
-  public String getCloseButtonToolTipKey() {
-    return "close-button-uninstall-tooltip";
+  public Message getCloseButtonToolTip() {
+    return INFO_CLOSE_BUTTON_UNINSTALL_TOOLTIP.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  public String getFinishButtonToolTipKey() {
-    return "finish-button-uninstall-tooltip";
+  public Message getFinishButtonToolTip() {
+    return INFO_FINISH_BUTTON_UNINSTALL_TOOLTIP.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  public String getFinishButtonLabelKey() {
-    return "finish-button-uninstall-label";
+  public Message getFinishButtonLabel() {
+    return INFO_FINISH_BUTTON_UNINSTALL_LABEL.get();
   }
 
   /**
@@ -366,15 +369,15 @@
     }
     else if (cStep == FINISHED) {
       throw new IllegalStateException(
-      "Cannot click on previous from finished step");
+        "Cannot click on previous from finished step");
     }
   }
 
   /**
    * {@inheritDoc}
    */
-  public void notifyListeners(Integer ratio, String currentPhaseSummary,
-      final String newLogDetail)
+  public void notifyListeners(Integer ratio, Message currentPhaseSummary,
+      final Message newLogDetail)
   {
     if (runStarted)
     {
@@ -391,7 +394,7 @@
             if (newLogDetail != null)
             {
               startProgressDetails.append(newLogDetail);
-              startProgressDlg.setDetails(startProgressDetails.toString());
+              startProgressDlg.setDetails(startProgressDetails.toMessage());
             }
           }
         }
@@ -415,7 +418,7 @@
           } catch (Throwable t) {
             LOG.log(Level.WARNING, "Error processing task: "+t, t);
             throw new UserDataException(Step.CONFIRM_UNINSTALL,
-                    getThrowableMsg("bug-msg", t));
+                    getThrowableMsg(INFO_BUG_MSG.get(), t));
           }
         }
 
@@ -425,14 +428,15 @@
           if (throwable != null) {
             if (throwable instanceof UserDataException)
             {
-              qs.displayError(throwable.getLocalizedMessage(),
-                    getMsg("error-title"));
+              qs.displayError(Message.raw(throwable.getLocalizedMessage()),
+                    INFO_ERROR_TITLE.get());
             }
             else
             {
               LOG.log(Level.WARNING, "Error processing task: "+throwable,
                   throwable);
-              qs.displayError(throwable.toString(), getMsg("error-title"));
+              qs.displayError(Message.raw(throwable.toString()),
+                      INFO_ERROR_TITLE.get());
             }
           } else {
             conf = (UninstallData)returnValue;
@@ -441,17 +445,17 @@
               if (conf.isServerRunning())
               {
                 if (qs.displayConfirmation(
-                    getMsg("confirm-uninstall-replication-server-running-msg"),
-                    getMsg(
-                        "confirm-uninstall-replication-server-running-title")))
+                    INFO_CONFIRM_UNINSTALL_REPLICATION_SERVER_RUNNING_MSG.get(),
+                    INFO_CONFIRM_UNINSTALL_REPLICATION_SERVER_RUNNING_TITLE
+                            .get()))
                 {
                   askForAuthenticationAndLaunch(qs);
                 }
                 else
                 {
                   if (qs.displayConfirmation(
-                          getMsg("confirm-uninstall-server-running-msg"),
-                          getMsg("confirm-uninstall-server-running-title")))
+                          INFO_CONFIRM_UNINSTALL_SERVER_RUNNING_MSG.get(),
+                          INFO_CONFIRM_UNINSTALL_SERVER_RUNNING_TITLE.get()))
                   {
                     getUserData().setStopServer(true);
                     qs.launch();
@@ -465,11 +469,10 @@
               else
               {
                 if (qs.displayConfirmation(
-                    getMsg(
-                        "confirm-uninstall-replication-server-not-running-msg"),
-                    getMsg(
-                        "confirm-uninstall-replication-server-not-running-title"
-                        )))
+                    INFO_CONFIRM_UNINSTALL_REPLICATION_SERVER_NOT_RUNNING_MSG
+                            .get(),
+                    INFO_CONFIRM_UNINSTALL_REPLICATION_SERVER_NOT_RUNNING_TITLE
+                            .get()))
                 {
                   boolean startWorked = startServer(qs.getDialog().getFrame());
                   if (startWorked)
@@ -480,8 +483,8 @@
                   {
                     getUserData().setStopServer(false);
                     if (qs.displayConfirmation(
-                        getMsg("confirm-uninstall-server-not-running-msg"),
-                        getMsg("confirm-uninstall-server-not-running-title")))
+                        INFO_CONFIRM_UNINSTALL_SERVER_NOT_RUNNING_MSG.get(),
+                        INFO_CONFIRM_UNINSTALL_SERVER_NOT_RUNNING_TITLE.get()))
                     {
                       qs.launch();
                       qs.setCurrentStep(
@@ -493,8 +496,8 @@
                 {
                   getUserData().setStopServer(false);
                   if (qs.displayConfirmation(
-                      getMsg("confirm-uninstall-server-not-running-msg"),
-                      getMsg("confirm-uninstall-server-not-running-title")))
+                      INFO_CONFIRM_UNINSTALL_SERVER_NOT_RUNNING_MSG.get(),
+                      INFO_CONFIRM_UNINSTALL_SERVER_NOT_RUNNING_TITLE.get()))
                   {
                     qs.launch();
                     qs.setCurrentStep(
@@ -507,8 +510,8 @@
             {
               getUserData().setStopServer(false);
               if (qs.displayConfirmation(
-                      getMsg("confirm-uninstall-server-not-running-msg"),
-                      getMsg("confirm-uninstall-server-not-running-title")))
+                      INFO_CONFIRM_UNINSTALL_SERVER_NOT_RUNNING_MSG.get(),
+                      INFO_CONFIRM_UNINSTALL_SERVER_NOT_RUNNING_TITLE.get()))
               {
                 qs.launch();
                 qs.setCurrentStep(getNextWizardStep(
@@ -516,8 +519,8 @@
               }
             } else {
               if (qs.displayConfirmation(
-                      getMsg("confirm-uninstall-server-running-msg"),
-                      getMsg("confirm-uninstall-server-running-title"))) {
+                      INFO_CONFIRM_UNINSTALL_SERVER_RUNNING_MSG.get(),
+                      INFO_CONFIRM_UNINSTALL_SERVER_RUNNING_TITLE.get())) {
                 getUserData().setStopServer(true);
                 qs.launch();
                 qs.setCurrentStep(getNextWizardStep(
@@ -573,7 +576,7 @@
    * {@inheritDoc}
    */
   public String getInstallationPath() {
-    return Utils.getInstallPathFromClasspath();
+    return getInstallPathFromClasspath();
   }
 
   /**
@@ -592,68 +595,71 @@
    */
   private void initMaps() {
     hmSummary.put(UninstallProgressStep.NOT_STARTED,
-            getFormattedSummary(getMsg("summary-uninstall-not-started")));
+            getFormattedSummary(INFO_SUMMARY_UNINSTALL_NOT_STARTED.get()));
     hmSummary.put(UninstallProgressStep.STOPPING_SERVER,
-            getFormattedSummary(getMsg("summary-stopping")));
+            getFormattedSummary(INFO_SUMMARY_STOPPING.get()));
     hmSummary.put(UninstallProgressStep.UNCONFIGURING_REPLICATION,
-            getFormattedSummary(getMsg("summary-unconfiguring-replication")));
+            getFormattedSummary(INFO_SUMMARY_UNCONFIGURING_REPLICATION.get()));
     hmSummary.put(UninstallProgressStep.DISABLING_WINDOWS_SERVICE,
-            getFormattedSummary(getMsg("summary-disabling-windows-service")));
+            getFormattedSummary(INFO_SUMMARY_DISABLING_WINDOWS_SERVICE.get()));
     hmSummary.put(UninstallProgressStep.DELETING_EXTERNAL_DATABASE_FILES,
-            getFormattedSummary(getMsg("summary-deleting-external-db-files")));
+            getFormattedSummary(INFO_SUMMARY_DELETING_EXTERNAL_DB_FILES.get()));
     hmSummary.put(UninstallProgressStep.DELETING_EXTERNAL_LOG_FILES,
-            getFormattedSummary(getMsg("summary-deleting-external-log-files")));
+            getFormattedSummary(
+                    INFO_SUMMARY_DELETING_EXTERNAL_LOG_FILES.get()));
     hmSummary.put(UninstallProgressStep.REMOVING_EXTERNAL_REFERENCES,
             getFormattedSummary(
-                    getMsg("summary-deleting-external-references")));
+                    INFO_SUMMARY_DELETING_EXTERNAL_REFERENCES.get()));
     hmSummary.put(UninstallProgressStep.DELETING_INSTALLATION_FILES,
-            getFormattedSummary(getMsg("summary-deleting-installation-files")));
+            getFormattedSummary(
+                    INFO_SUMMARY_DELETING_INSTALLATION_FILES.get()));
 
-    String successMsg;
+    Message successMsg;
     Installation installation = getInstallation();
-    String libPath = Utils.getPath(installation.getLibrariesDirectory());
-    if (Utils.isCli()) {
+    String libPath = getPath(installation.getLibrariesDirectory());
+    if (isCli()) {
       if (getUninstallUserData().getRemoveLibrariesAndTools()) {
-        String[] arg = new String[1];
-        if (Utils.isWindows()) {
-          arg[0] = installation.getUninstallBatFile() + getLineBreak() +
+        String arg;
+        if (isWindows()) {
+          arg = installation.getUninstallBatFile() + getLineBreak().toString() +
                   getTab() + libPath;
         } else {
-          arg[0] = libPath;
+          arg = libPath;
         }
-        successMsg = getMsg(
-                "summary-uninstall-finished-successfully-remove-jarfiles-cli",
-                arg);
+        successMsg =
+                INFO_SUMMARY_UNINSTALL_FINISHED_SUCCESSFULLY_REMOVE_JARFILES_CLI
+                        .get(arg);
       } else {
-        successMsg = getMsg("summary-uninstall-finished-successfully-cli");
+        successMsg = INFO_SUMMARY_UNINSTALL_FINISHED_SUCCESSFULLY_CLI.get();
       }
     } else {
       if (getUninstallUserData().getRemoveLibrariesAndTools()) {
-        String[] arg = {libPath};
-        successMsg = getMsg(
-                "summary-uninstall-finished-successfully-remove-jarfiles", arg);
+        successMsg =
+                INFO_SUMMARY_UNINSTALL_FINISHED_SUCCESSFULLY_REMOVE_JARFILES
+                        .get(libPath);
       } else {
-        successMsg = getMsg("summary-uninstall-finished-successfully");
+        successMsg = INFO_SUMMARY_UNINSTALL_FINISHED_SUCCESSFULLY.get();
       }
     }
     hmSummary.put(UninstallProgressStep.FINISHED_SUCCESSFULLY,
             getFormattedSuccess(successMsg));
 
-    String nonCriticalMsg;
-    if (Utils.isCli())
+    Message nonCriticalMsg;
+    if (isCli())
     {
       nonCriticalMsg =
-        getMsg("summary-uninstall-finished-with-error-on-remote");
+        INFO_SUMMARY_UNINSTALL_FINISHED_WITH_ERROR_ON_REMOTE.get();
     }
     else
     {
       nonCriticalMsg =
-        getMsg("summary-uninstall-finished-with-error-on-remote-cli");
+        INFO_SUMMARY_UNINSTALL_FINISHED_WITH_ERROR_ON_REMOTE_CLI.get();
     }
     hmSummary.put(UninstallProgressStep.FINISHED_WITH_ERROR_ON_REMOTE,
             getFormattedWarning(nonCriticalMsg));
     hmSummary.put(UninstallProgressStep.FINISHED_WITH_ERROR,
-            getFormattedError(getMsg("summary-uninstall-finished-with-error")));
+            getFormattedError(
+                    INFO_SUMMARY_UNINSTALL_FINISHED_WITH_ERROR.get()));
 
     /*
     * hmTime contains the relative time that takes for each task to be
@@ -726,7 +732,7 @@
     try {
       PrintStream err = new ErrorPrintStream();
       PrintStream out = new OutputPrintStream();
-      if (!Utils.isCli()) {
+      if (!isCli()) {
         System.setErr(err);
         System.setOut(out);
       }
@@ -805,8 +811,10 @@
       {
         status = UninstallProgressStep.FINISHED_SUCCESSFULLY;
       }
-      if (Utils.isCli()) {
-        notifyListeners(getLineBreak() + getLineBreak() + getSummary(status));
+      if (isCli()) {
+        notifyListeners(new MessageBuilder(getLineBreak())
+                .append(getLineBreak()).append(getSummary(status))
+                .toMessage());
       } else {
         notifyListeners(null);
       }
@@ -814,18 +822,18 @@
     } catch (ApplicationException ex) {
       ue = ex;
       status = UninstallProgressStep.FINISHED_WITH_ERROR;
-      String msg = getFormattedError(ex, true);
+      Message msg = getFormattedError(ex, true);
       notifyListeners(msg);
     }
     catch (Throwable t) {
       ue = new ApplicationException(
               ApplicationReturnCode.ReturnCode.BUG,
-              getThrowableMsg("bug-msg", t), t);
+              getThrowableMsg(INFO_BUG_MSG.get(), t), t);
       status = UninstallProgressStep.FINISHED_WITH_ERROR;
-      String msg = getFormattedError(ue, true);
+      Message msg = getFormattedError(ue, true);
       notifyListeners(msg);
     }
-    if (!Utils.isCli()) {
+    if (!isCli()) {
       System.setErr(origErr);
       System.setOut(origOut);
     }
@@ -858,7 +866,7 @@
    * @return an formatted representation of the summary for the specified
    *         UninstallProgressStep.
    */
-  public String getSummary(ProgressStep step) {
+  public Message getSummary(ProgressStep step) {
     return hmSummary.get(step);
   }
 
@@ -943,9 +951,8 @@
    */
   private void deleteExternalDatabaseFiles(Set<String> dbFiles)
           throws ApplicationException {
-    notifyListeners(getFormattedProgress(
-            getMsg("progress-deleting-external-db-files")) +
-            getLineBreak());
+    notifyListeners(getFormattedProgressWithLineBreak(
+            INFO_PROGRESS_DELETING_EXTERNAL_DB_FILES.get()));
     for (String path : dbFiles) {
       deleteRecursively(new File(path));
     }
@@ -959,9 +966,8 @@
    */
   private void deleteExternalLogFiles(Set<String> logFiles)
           throws ApplicationException {
-    notifyListeners(getFormattedProgress(
-            getMsg("progress-deleting-external-log-files")) +
-            getLineBreak());
+    notifyListeners(getFormattedProgressWithLineBreak(
+            INFO_PROGRESS_DELETING_EXTERNAL_LOG_FILES.get()));
     for (String path : logFiles) {
       deleteRecursively(new File(path));
     }
@@ -974,10 +980,9 @@
    */
   private void deleteInstallationFiles(int minRatio, int maxRatio)
           throws ApplicationException {
-    notifyListeners(getFormattedProgress(
-            getMsg("progress-deleting-installation-files")) +
-            getLineBreak());
-    File f = new File(Utils.getInstallPathFromClasspath());
+    notifyListeners(getFormattedProgressWithLineBreak(
+            INFO_PROGRESS_DELETING_INSTALLATION_FILES.get()));
+    File f = new File(getInstallPathFromClasspath());
     InstallationFilesToDeleteFilter filter =
             new InstallationFilesToDeleteFilter();
     File[] rootFiles = f.listFiles();
@@ -1084,9 +1089,8 @@
       }
     } else {
       // Just tell that the file/directory does not exist.
-      String[] arg = {file.toString()};
       notifyListeners(getFormattedWarning(
-              getMsg("progress-deleting-file-does-not-exist", arg)));
+              INFO_PROGRESS_DELETING_FILE_DOES_NOT_EXIST.get(file.toString())));
     }
   }
 
@@ -1097,15 +1101,14 @@
    * @throws ApplicationException if something goes wrong.
    */
   private void delete(File file) throws ApplicationException {
-    String[] arg = {file.getAbsolutePath()};
     boolean isFile = file.isFile();
 
     if (isFile) {
       notifyListeners(getFormattedWithPoints(
-              getMsg("progress-deleting-file", arg)));
+              INFO_PROGRESS_DELETING_FILE.get(file.getAbsolutePath())));
     } else {
       notifyListeners(getFormattedWithPoints(
-              getMsg("progress-deleting-directory", arg)));
+              INFO_PROGRESS_DELETING_DIRECTORY.get(file.getAbsolutePath())));
     }
 
     boolean delete = false;
@@ -1126,22 +1129,22 @@
     }
 
     if (!delete) {
-      String errMsg;
+      Message errMsg;
       if (isFile) {
-        errMsg = getMsg("error-deleting-file", arg);
+        errMsg = INFO_ERROR_DELETING_FILE.get(file.getAbsolutePath());
       } else {
-        errMsg = getMsg("error-deleting-directory", arg);
+        errMsg = INFO_ERROR_DELETING_DIRECTORY.get(file.getAbsolutePath());
       }
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
           errMsg, null);
     }
 
-    notifyListeners(getFormattedDone() + getLineBreak());
+    notifyListeners(getFormattedDoneWithLineBreak());
   }
 
   private boolean equalsOrDescendant(File file, File directory) {
-    return file.equals(directory) || Utils.isDescendant(file, directory);
+    return file.equals(directory) || isDescendant(file, directory);
   }
 
   /**
@@ -1192,7 +1195,7 @@
                       && !quicksetupFile.equals(file)
                       && !openDSFile.equals(file);
 
-      if (accept && Utils.isWindows() && Utils.isCli()) {
+      if (accept && isWindows() && isCli()) {
         accept = !uninstallBatFile.equals(file);
       }
 
@@ -1219,26 +1222,17 @@
   }
 
   /**
-   * Returns a ResourceProvider instance.
-   * @return a ResourceProvider instance.
-   */
-  public ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
-  /**
    * This methods disables this server as a Windows service.
    *
    * @throws ApplicationException if something goes wrong.
    */
   protected void disableWindowsService() throws ApplicationException {
     notifyListeners(getFormattedProgress(
-            getMsg("progress-disabling-windows-service")));
+            INFO_PROGRESS_DISABLING_WINDOWS_SERVICE.get()));
     int code = ConfigureWindowsService.disableService(System.out, System.err);
 
-    String errorMessage = getMsg("error-disabling-windows-service",
-        getInstallationPath());
+    Message errorMessage = INFO_ERROR_DISABLING_WINDOWS_SERVICE.get(
+            getInstallationPath());
 
     switch (code) {
       case ConfigureWindowsService.SERVICE_DISABLE_SUCCESS:
@@ -1265,11 +1259,11 @@
    */
   private boolean startServer(JFrame frame)
   {
-    startProgressDetails = new StringBuffer();
+    startProgressDetails = new MessageBuilder();
     startProgressDlg = new ProgressDialog(frame);
     startProgressDlg.setSummary(
-        getFormattedSummary(getMsg("summary-starting")));
-    startProgressDlg.setDetails("");
+        getFormattedSummary(INFO_SUMMARY_STARTING.get()));
+    startProgressDlg.setDetails(Message.EMPTY);
     startProgressDlg.setCloseButtonEnabled(false);
     final Boolean[] returnValue = new Boolean[] {Boolean.FALSE};
     Thread t = new Thread(new Runnable()
@@ -1289,12 +1283,12 @@
               if (isServerRunning)
               {
                 startProgressDlg.setSummary(getFormattedSuccess(
-                    getMsg("summary-start-success")));
+                    INFO_SUMMARY_START_SUCCESS.get()));
               }
               else
               {
                startProgressDlg.setSummary(getFormattedError(
-                       getMsg("summary-start-error")));
+                       INFO_SUMMARY_START_ERROR.get()));
               }
               startProgressDlg.setCloseButtonEnabled(true);
             }
@@ -1302,7 +1296,7 @@
         }
         catch (Throwable t)
         {
-          String msg = getFormattedError(t, true);
+          Message msg = getFormattedError(t, true);
           notifyListeners(msg);
         }
       }
@@ -1359,14 +1353,15 @@
             if (throwable instanceof TopologyCacheException)
             {
               qs.displayError(
-                  getStringRepresentation((TopologyCacheException)throwable),
-                  getMsg("error-title"));
+                      Message.raw(getStringRepresentation(
+                              (TopologyCacheException)throwable)),
+                      INFO_ERROR_TITLE.get());
             }
             else
             {
               qs.displayError(
-                  getThrowableMsg("bug-msg", null, throwable),
-                  getMsg("error-title"));
+                  getThrowableMsg(INFO_BUG_MSG.get(), throwable),
+                  INFO_ERROR_TITLE.get());
             }
           }
           else
@@ -1383,8 +1378,8 @@
     else
     {
       if (qs.displayConfirmation(
-          getMsg("confirm-uninstall-server-running-msg"),
-          getMsg("confirm-uninstall-server-running-title")))
+          INFO_CONFIRM_UNINSTALL_SERVER_RUNNING_MSG.get(),
+          INFO_CONFIRM_UNINSTALL_SERVER_RUNNING_TITLE.get()))
       {
         getUserData().setStopServer(true);
         qs.launch();
@@ -1433,13 +1428,13 @@
       switch (e.getType())
       {
       case NOT_GLOBAL_ADMINISTRATOR:
-        String errorMsg = getMsg("not-global-administrator-provided");
-        qs.displayError(errorMsg, getMsg("error-title"));
+        Message errorMsg = INFO_NOT_GLOBAL_ADMINISTRATOR_PROVIDED.get();
+        qs.displayError(errorMsg, INFO_ERROR_TITLE.get());
         stopProcessing = true;
         break;
       case GENERIC_CREATING_CONNECTION:
         if ((e.getCause() != null) &&
-            Utils.isCertificateException(e.getCause()))
+            isCertificateException(e.getCause()))
         {
           UserDataCertificateException.Type excType;
           ApplicationTrustManager.Cause cause = null;
@@ -1474,12 +1469,12 @@
             {
               LOG.log(Level.WARNING,
                   "Error parsing ldap url of TopologyCacheException.", t);
-              h = getMsg("not-available-label");
+              h = INFO_NOT_AVAILABLE_LABEL.get().toString();
               p = -1;
             }
             UserDataCertificateException exc =
               new UserDataCertificateException(Step.REPLICATION_OPTIONS,
-                getMsg("certificate-exception", h, String.valueOf(p)),
+                INFO_CERTIFICATE_EXCEPTION.get(h, String.valueOf(p)),
                 e.getCause(), h, p,
                 e.getTrustManager().getLastRefusedChain(),
                 e.getTrustManager().getLastRefusedAuthType(), excType);
@@ -1492,17 +1487,17 @@
     }
     if (!stopProcessing && (exceptionMsgs.size() > 0))
     {
-      String confirmationMsg =
-        getMsg("error-reading-registered-servers-confirm",
-            Utils.getStringFromCollection(exceptionMsgs, "\n"));
+      Message confirmationMsg =
+        INFO_ERROR_READING_REGISTERED_SERVERS_CONFIRM.get(
+                getStringFromCollection(exceptionMsgs, "n"));
       stopProcessing = !qs.displayConfirmation(confirmationMsg,
-          getMsg("confirmation-title"));
+          INFO_CONFIRMATION_TITLE.get());
     }
     if (!stopProcessing)
     {
       stopProcessing = !qs.displayConfirmation(
-          getMsg("confirm-uninstall-server-running-msg"),
-          getMsg("confirm-uninstall-server-running-title"));
+          INFO_CONFIRM_UNINSTALL_SERVER_RUNNING_MSG.get(),
+          INFO_CONFIRM_UNINSTALL_SERVER_RUNNING_TITLE.get());
     }
     if (!stopProcessing)
     {
@@ -1552,15 +1547,15 @@
             {
               if (throwable instanceof TopologyCacheException)
               {
-                qs.displayError(
-                    getStringRepresentation((TopologyCacheException)throwable),
-                    getMsg("error-title"));
+                qs.displayError(Message.raw(
+                    getStringRepresentation((TopologyCacheException)throwable)),
+                    INFO_ERROR_TITLE.get());
               }
               else
               {
                 qs.displayError(
-                    getThrowableMsg("bug-msg", null, throwable),
-                    getMsg("error-title"));
+                    getThrowableMsg(INFO_BUG_MSG.get(), throwable),
+                    INFO_ERROR_TITLE.get());
               }
             }
             else
@@ -1689,7 +1684,7 @@
     {
       LOG.log(Level.INFO, "Updating references in: "+ server.getHostPort(true));
       notifyListeners(getFormattedWithPoints(
-          getMsg("progress-removing-references", server.getHostPort(true))));
+          INFO_PROGRESS_REMOVING_REFERENCES.get(server.getHostPort(true))));
       InitialLdapContext ctx = null;
       try
       {
@@ -1718,12 +1713,12 @@
         // is an ADS, then remove it from there.
         removeReferences(ctx, server.getHostPort(true), serverADSProperties);
 
-        notifyListeners(getFormattedDone() + getLineBreak());
+        notifyListeners(getFormattedDoneWithLineBreak());
       }
       catch (ApplicationException ae)
       {
         errorOnRemoteOccurred = true;
-        String html = getFormattedError(ae, true);
+        Message html = getFormattedError(ae, true);
         notifyListeners(html);
         LOG.log(Level.INFO, "Error updating replication references in: "+
             server.getHostPort(true), ae);
@@ -1851,8 +1846,8 @@
       LOG.log(Level.WARNING,
           "Error removing references in replication server on "+
           serverDisplay+": "+t, t);
-      String errorMessage = getMsg("error-configuring-remote-generic",
-          serverDisplay, t.toString());
+      Message errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
+              serverDisplay, t.toString());
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR, errorMessage,
           t);
@@ -1871,10 +1866,10 @@
       if (ace.getError() !=
         ADSContextException.ErrorType.NOT_YET_REGISTERED)
       {
-        String[] args = {serverDisplay, ace.toString()};
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-            getMsg("remote-ads-exception", args), ace);
+            INFO_REMOTE_ADS_EXCEPTION.get(
+                    serverDisplay, ace.toString()), ace);
       }
       else
       {
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/ui/ConfirmUninstallPanel.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/ui/ConfirmUninstallPanel.java
index 7548b44..4287507 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/ui/ConfirmUninstallPanel.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/ui/ConfirmUninstallPanel.java
@@ -27,7 +27,6 @@
 
 package org.opends.guitools.uninstaller.ui;
 
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.quicksetup.CurrentInstallStatus;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.Configuration;
@@ -47,6 +46,9 @@
 import java.util.logging.Logger;
 import java.io.IOException;
 
+import org.opends.messages.Message;
+import static org.opends.messages.AdminToolMessages.*;
+
 /**
  * This is the panel displayed when the user is uninstalling Open DS.  It is
  * basically a panel with the text informing of the consequences of uninstalling
@@ -122,9 +124,9 @@
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("confirm-uninstall-panel-title");
+    return INFO_CONFIRM_UNINSTALL_PANEL_TITLE.get();
   }
 
   /**
@@ -141,22 +143,22 @@
         FieldName.REMOVE_LDIFS,
     };
 
-    String[] labels = {
-        getMsg("remove-libraries-and-tools-label"),
-        getMsg("remove-databases-label"),
-        getMsg("remove-logs-label"),
-        getMsg("remove-schema-and-configuration-label"),
-        getMsg("remove-backups-label"),
-        getMsg("remove-ldifs-label"),
+    Message[] labels = {
+        INFO_REMOVE_LIBRARIES_AND_TOOLS_LABEL.get(),
+        INFO_REMOVE_DATABASES_LABEL.get(),
+        INFO_REMOVE_LOGS_LABEL.get(),
+        INFO_REMOVE_SCHEMA_AND_CONFIGURATION_LABEL.get(),
+        INFO_REMOVE_BACKUPS_LABEL.get(),
+        INFO_REMOVE_LDIFS_LABEL.get()
     };
 
-    String[] tooltips = {
-        getMsg("remove-libraries-and-tools-tooltip"),
-        getMsg("remove-databases-tooltip"),
-        getMsg("remove-logs-tooltip"),
-        getMsg("remove-schema-and-configuration-tooltip"),
-        getMsg("remove-backups-tooltip"),
-        getMsg("remove-ldifs-tooltip"),
+    Message[] tooltips = {
+        INFO_REMOVE_LIBRARIES_AND_TOOLS_TOOLTIP.get(),
+        INFO_REMOVE_DATABASES_TOOLTIP.get(),
+        INFO_REMOVE_LOGS_TOOLTIP.get(),
+        INFO_REMOVE_SCHEMA_AND_CONFIGURATION_TOOLTIP.get(),
+        INFO_REMOVE_BACKUPS_TOOLTIP.get(),
+        INFO_REMOVE_LDIFS_TOOLTIP.get()
     };
 
     for (int i=0; i<fieldNames.length; i++)
@@ -180,12 +182,13 @@
     gbc.gridwidth = GridBagConstraints.RELATIVE;
     gbc.anchor = GridBagConstraints.WEST;
     p.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("server-path-label"),
+        INFO_SERVER_PATH_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID), gbc);
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = UIFactory.LEFT_INSET_SECONDARY_FIELD;
     p.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        Utils.getInstallPathFromClasspath(), UIFactory.TextStyle.INSTRUCTIONS),
+        Message.raw(Utils.getInstallPathFromClasspath()),
+        UIFactory.TextStyle.INSTRUCTIONS),
         gbc);
 
     FieldName[] names = {
@@ -253,17 +256,9 @@
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions()
+  protected Message getInstructions()
   {
-    return getMsg("confirm-uninstall-panel-instructions");
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
+    return INFO_CONFIRM_UNINSTALL_PANEL_INSTRUCTIONS.get();
   }
 
   /**
@@ -275,13 +270,14 @@
   private JPanel createDbPanel()
   {
     JCheckBox cbOutsideDbs = UIFactory.makeJCheckBox(
-        getMsg("delete-outside-dbs-label"),
-        getMsg("delete-outside-dbs-tooltip"), UIFactory.TextStyle.INSTRUCTIONS);
+        INFO_DELETE_OUTSIDE_DBS_LABEL.get(),
+        INFO_DELETE_OUTSIDE_DBS_TOOLTIP.get(),
+            UIFactory.TextStyle.INSTRUCTIONS);
     cbOutsideDbs.setSelected(true);
     hmCbs.put(FieldName.EXTERNAL_DB_DIRECTORIES, cbOutsideDbs);
 
     return createOutsidePathPanel(cbOutsideDbs, outsideDbs,
-        "delete-outside-dbs-msg");
+        INFO_DELETE_OUTSIDE_DBS_MSG.get());
   }
 
   /**
@@ -293,18 +289,18 @@
   private JPanel createLogPanel()
   {
     JCheckBox cbOutsideLogs = UIFactory.makeJCheckBox(
-        getMsg("delete-outside-logs-label"),
-        getMsg("delete-outside-logs-tooltip"),
+        INFO_DELETE_OUTSIDE_LOGS_LABEL.get(),
+        INFO_DELETE_OUTSIDE_LOGS_TOOLTIP.get(),
         UIFactory.TextStyle.INSTRUCTIONS);
     cbOutsideLogs.setSelected(true);
     hmCbs.put(FieldName.EXTERNAL_LOG_FILES, cbOutsideLogs);
 
     return createOutsidePathPanel(cbOutsideLogs, outsideLogs,
-        "delete-outside-logs-msg");
+        INFO_DELETE_OUTSIDE_LOGS_MSG.get());
   }
 
   private JPanel createOutsidePathPanel(JCheckBox cb, Set<String> paths,
-      String msgKey)
+      Message msg)
   {
     JPanel panel = new JPanel(new GridBagLayout());
     panel.setOpaque(false);
@@ -316,7 +312,7 @@
     gbc.anchor = GridBagConstraints.WEST;
     gbc.fill = GridBagConstraints.HORIZONTAL;
 
-    panel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, getMsg(msgKey),
+    panel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, msg,
         UIFactory.TextStyle.INSTRUCTIONS), gbc);
     DefaultListModel listModel = new DefaultListModel();
     for (String path : paths)
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/ui/LoginDialog.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/ui/LoginDialog.java
index 665e629..f1d7d6b 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/ui/LoginDialog.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/uninstaller/ui/LoginDialog.java
@@ -52,7 +52,6 @@
 
 import org.opends.admin.ads.ADSContext;
 import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.guitools.i18n.ResourceProvider;
 import org.opends.guitools.statuspanel.ConfigFromFile;
 import org.opends.quicksetup.ApplicationException;
 import org.opends.quicksetup.Constants;
@@ -68,6 +67,10 @@
 import org.opends.quicksetup.util.BackgroundTask;
 import org.opends.quicksetup.util.Utils;
 
+import org.opends.messages.Message;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.QuickSetupMessages.*;
+
 /**
  * This class is a dialog that appears when the user must provide authentication
  * to connect to the Directory Server in order to be able to display
@@ -110,7 +113,7 @@
   public LoginDialog(JFrame parent, ApplicationTrustManager trustManager)
   {
     super(parent);
-    setTitle(getMsg("login-dialog-title"));
+    setTitle(INFO_LOGIN_DIALOG_TITLE.get().toString());
     this.parent = parent;
     getContentPane().add(createPanel());
     if (trustManager == null)
@@ -216,7 +219,7 @@
     gbc.fill = GridBagConstraints.BOTH;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = 0;
-    String msg = getMsg("uninstall-login-dialog-msg");
+    Message msg = INFO_UNINSTALL_LOGIN_DIALOG_MSG.get();
 
     JTextComponent textPane =
       UIFactory.makeHtmlPane(msg, UIFactory.INSTRUCTIONS_FONT);
@@ -233,15 +236,15 @@
     gbc.anchor = GridBagConstraints.WEST;
     gbc.fill = GridBagConstraints.HORIZONTAL;
     lHostName = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("uninstall-login-host-name-label"),
+        INFO_UNINSTALL_LOGIN_HOST_NAME_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     p2.add(lHostName, gbc);
     gbc.weightx = 1.0;
     gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     UserData uData = new UserData();
-    tfHostName = UIFactory.makeJTextField(uData.getHostName(),
-        getMsg("uninstall-login-host-name-tooltip"),
+    tfHostName = UIFactory.makeJTextField(Message.raw(uData.getHostName()),
+        INFO_UNINSTALL_LOGIN_HOST_NAME_TOOLTIP.get(),
         UIFactory.HOST_FIELD_SIZE, UIFactory.TextStyle.TEXTFIELD);
     p2.add(tfHostName, gbc);
 
@@ -252,14 +255,14 @@
     gbc.anchor = GridBagConstraints.WEST;
     gbc.fill = GridBagConstraints.HORIZONTAL;
     lUid = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("global-administrator-uid-label"),
+        INFO_GLOBAL_ADMINISTRATOR_UID_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     p2.add(lUid, gbc);
     gbc.weightx = 1.0;
     gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
-    tfUid = UIFactory.makeJTextField(Constants.GLOBAL_ADMIN_UID,
-        getMsg("uninstall-login-uid-tooltip"),
+    tfUid = UIFactory.makeJTextField(Message.raw(Constants.GLOBAL_ADMIN_UID),
+        INFO_UNINSTALL_LOGIN_UID_TOOLTIP.get(),
         UIFactory.DN_FIELD_SIZE, UIFactory.TextStyle.TEXTFIELD);
     p2.add(tfUid, gbc);
 
@@ -267,7 +270,7 @@
     gbc.weightx = 0.0;
     gbc.insets.left = 0;
     lPwd = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("global-administrator-pwd-label"),
+        INFO_GLOBAL_ADMINISTRATOR_PWD_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     p2.add(lPwd, gbc);
     gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
@@ -276,7 +279,7 @@
     JPanel p3 = new JPanel(new GridBagLayout());
     p3.setOpaque(false);
     tfPwd = UIFactory.makeJPasswordField(null,
-        getMsg("uninstall-login-pwd-tooltip"),
+        INFO_UNINSTALL_LOGIN_PWD_TOOLTIP.get(),
         UIFactory.PASSWORD_FIELD_SIZE, UIFactory.TextStyle.PASSWORD_FIELD);
     p2.add(p3, gbc);
     gbc.insets = UIFactory.getEmptyInsets();
@@ -315,8 +318,8 @@
     gbc.fill = GridBagConstraints.NONE;
     gbc.weightx = 0.0;
     okButton =
-      UIFactory.makeJButton(getMsg("ok-button-label"),
-          getMsg("uninstall-login-ok-button-tooltip"));
+      UIFactory.makeJButton(INFO_OK_BUTTON_LABEL.get(),
+          INFO_UNINSTALL_LOGIN_OK_BUTTON_TOOLTIP.get());
     buttonPanel.add(okButton, gbc);
     okButton.addActionListener(new ActionListener()
     {
@@ -329,8 +332,8 @@
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = UIFactory.HORIZONTAL_INSET_BETWEEN_BUTTONS;
     cancelButton =
-      UIFactory.makeJButton(getMsg("cancel-button-label"),
-          getMsg("uninstall-login-cancel-button-tooltip"));
+      UIFactory.makeJButton(INFO_CANCEL_BUTTON_LABEL.get(),
+          INFO_UNINSTALL_LOGIN_CANCEL_BUTTON_TOOLTIP.get());
     buttonPanel.add(cancelButton, gbc);
     cancelButton.addActionListener(new ActionListener()
     {
@@ -407,7 +410,7 @@
           else
           {
             throw new ApplicationException(ReturnCode.APPLICATION_ERROR,
-                getMsg("could-not-find-valid-ldapurl"), null);
+                INFO_COULD_NOT_FIND_VALID_LDAPURL.get(), null);
           }
         } catch (NamingException ne)
         {
@@ -454,9 +457,9 @@
             }
             else
             {
-              String msg = Utils.getThrowableMsg(getI18n(),
-                  "error-connecting-to-local", null, throwable);
-              displayError(msg, getMsg("error-title"));
+              Message msg = Utils.getThrowableMsg(
+                  INFO_ERROR_CONNECTING_TO_LOCAL.get(), throwable);
+              displayError(msg, INFO_ERROR_TITLE.get());
             }
 
             if (excType != null)
@@ -473,13 +476,12 @@
               {
                 LOG.log(Level.WARNING,
                     "Error parsing ldap url of ldap url.", t);
-                h = getMsg("not-available-label");
+                h = INFO_NOT_AVAILABLE_LABEL.get().toString();
                 p = -1;
               }
               UserDataCertificateException udce =
               new UserDataCertificateException(Step.REPLICATION_OPTIONS,
-                  getMsg("certificate-exception",
-                      new String[] {h, String.valueOf(p)}),
+                  INFO_CERTIFICATE_EXCEPTION.get(h, String.valueOf(p)),
                   throwable, h, p,
                   getTrustManager().getLastRefusedChain(),
                   getTrustManager().getLastRefusedAuthType(), excType);
@@ -493,17 +495,17 @@
             boolean pwdInvalid = false;
 
             String uid = tfUid.getText();
-            ArrayList<String> possibleCauses = new ArrayList<String>();
+            ArrayList<Message> possibleCauses = new ArrayList<Message>();
             if ("".equals(uid.trim()))
             {
               uidInvalid = true;
-              possibleCauses.add(getMsg("empty-uid"));
+              possibleCauses.add(INFO_EMPTY_ADMINISTRATOR_UID.get());
             }
 
             if ("".equals(tfPwd.getText()))
             {
               pwdInvalid = true;
-              possibleCauses.add(getMsg("empty-pwd"));
+              possibleCauses.add(INFO_EMPTY_PWD.get());
             }
             if (uidInvalid)
             {
@@ -529,32 +531,31 @@
             if (possibleCauses.size() > 0)
             {
               // Message with causes
-              String[] arg = {
-                  Utils.getStringFromCollection(possibleCauses, "\n")
-              };
               displayError(
-                  getMsg("cannot-connect-to-login-with-cause", arg),
-                  getMsg("error-title"));
+                  INFO_CANNOT_CONNECT_TO_LOGIN_WITH_CAUSE.get(
+                          Utils.getMessageFromCollection(possibleCauses, "\n")),
+                  INFO_ERROR_TITLE.get());
             }
             else
             {
               // Generic message
               displayError(
-                  getMsg("cannot-connect-to-login-without-cause"),
-                  getMsg("error-title"));
+                  INFO_CANNOT_CONNECT_TO_LOGIN_WITHOUT_CAUSE.get(),
+                  INFO_ERROR_TITLE.get());
             }
           }
           else if (throwable instanceof ApplicationException)
           {
-            displayError(throwable.getMessage(), getMsg("error-title"));
+            displayError(((ApplicationException)throwable).getMessageObject(),
+                    INFO_ERROR_TITLE.get());
           }
           else
           {
             // This is a bug
             throwable.printStackTrace();
             displayError(
-                Utils.getThrowableMsg(getI18n(), "bug-msg", null, throwable),
-                getMsg("error-title"));
+                Utils.getThrowableMsg(INFO_BUG_MSG.get(), throwable),
+                INFO_ERROR_TITLE.get());
           }
           cancelButton.setEnabled(true);
           okButton.setEnabled(true);
@@ -563,16 +564,16 @@
           if (Boolean.FALSE.equals(returnValue))
           {
             displayInformationMessage(
-                getMsg("login-dialog-server-not-running-msg"),
-                getMsg("login-dialog-server-not-running-title"));
+                INFO_LOGIN_DIALOG_SERVER_NOT_RUNNING_MSG.get(),
+                INFO_LOGIN_DIALOG_SERVER_NOT_RUNNING_TITLE.get());
           }
           else
           {
             String hostName = tfHostName.getText();
             if ((hostName == null) || (hostName.trim().length() == 0))
             {
-              displayError(getMsg("empty-referenced-host-name"),
-                  getMsg("error-title"));
+              displayError(INFO_EMPTY_REMOTE_HOST.get(),
+                  INFO_ERROR_TITLE.get());
               UIFactory.setTextStyle(lHostName,
                   UIFactory.TextStyle.PRIMARY_FIELD_INVALID);
             }
@@ -607,7 +608,7 @@
    * @param title
    *          the title for the dialog.
    */
-  private void displayError(String msg, String title)
+  private void displayError(Message msg, Message title)
   {
     Utilities.displayError(parent, msg, title);
     toFront();
@@ -622,7 +623,7 @@
    * @param title
    *          the title for the dialog.
    */
-  private void displayInformationMessage(String msg, String title)
+  private void displayInformationMessage(Message msg, Message title)
   {
     Utilities.displayInformationMessage(parent, msg, title);
     toFront();
@@ -638,23 +639,6 @@
     return Installation.getLocal().getStatus().isServerRunning();
   }
 
-  /* The following three methods are just commodity methods to retrieve
-   * localized messages */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private String getMsg(String key, String[] args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
   /**
    * Returns the trust manager that can be used to establish secure connections.
    * @return the trust manager that can be used to establish secure connections.
diff --git a/opendj-sdk/opends/src/messages/messages/access_control.properties b/opendj-sdk/opends/src/messages/messages/access_control.properties
new file mode 100644
index 0000000..545bd47
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/access_control.properties
@@ -0,0 +1,368 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=ACCESS_CONTROL
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+SEVERE_WARN_ACI_SYNTAX_GENERAL_PARSE_FAILED_1=The provided string  "%s" could \
+ not be parsed as a valid Access Control Instruction (ACI) because it failed \
+ general ACI syntax evaluation
+SEVERE_WARN_ACI_SYNTAX_INVAILD_VERSION_2=The provided Access Control \
+ Instruction (ACI) version value  "%s" is invalid, only the version 3.0 is \
+ supported
+SEVERE_WARN_ACI_SYNTAX_INVALID_ACCESS_TYPE_VERSION_3=The provided Access \
+ Control Instruction access type value  "%s" is invalid. A valid access type \
+ value is either allow or deny
+SEVERE_WARN_ACI_SYNTAX_INVALID_RIGHTS_SYNTAX_4=The provided Access Control \
+ Instruction (ACI) rights values "%s" are invalid. The rights must be a list \
+ of 1 to 6 comma-separated keywords enclosed in parentheses
+SEVERE_WARN_ACI_SYNTAX_INVALID_RIGHTS_KEYWORD_5=The provided Access Control \
+ Instruction (ACI) rights keyword values "%s" are invalid. The valid rights \
+ keyword values are one or more of the following: read, write, add, delete, \
+ search, compare or the single value all
+MILD_ERR_ACI_SYNTAX_BIND_RULE_MISSING_CLOSE_PAREN_6=The provided Access \
+ Control Instruction (ACI) bind rule value "%s" is invalid because it is \
+ missing a close parenthesis that corresponded to the initial open parenthesis
+MILD_ERR_ACI_SYNTAX_INVALID_BIND_RULE_SYNTAX_7=The provided Access Control \
+ Instruction (ACI) bind rule value "%s" is invalid. A valid bind rule value \
+ must be in the following form: keyword operator "expression"
+SEVERE_WARN_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD_8=The provided Access \
+ Control Instruction (ACI) bind rule keyword value "%s" is invalid. A valid \
+ keyword value is one of the following: userdn, groupdn, roledn, userattr,ip, \
+ dns, dayofweek, timeofday or authmethod
+SEVERE_WARN_ACI_SYNTAX_INVALID_BIND_RULE_OPERATOR_9=The provided Access \
+ Control Instruction (ACI) bind rule operator value  "%s" is invalid. A valid \
+ bind rule operator value is either '=' or "!="
+SEVERE_WARN_ACI_SYNTAX_MISSING_BIND_RULE_EXPRESSION_10=The provided Access \
+ Control Instruction (ACI) bind rule expression value corresponding to the \
+ keyword value "%s" is missing an expression. A valid bind rule value must be \
+ in the following form: keyword operator "expression"
+SEVERE_WARN_ACI_SYNTAX_INVALID_BIND_RULE_BOOLEAN_OPERATOR_11=The provided \
+ Access Control Instruction (ACI) bind rule boolean operator value "%s" is \
+ invalid. A valid bindrule boolean operator value is either "OR" or "AND"
+SEVERE_WARN_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD_OPERATOR_COMBO_12=The \
+ provided Access Control Instruction (ACI) bind rule keyword string  "%s" is \
+ invalid for the bind rule operator string "%s"
+SEVERE_WARN_ACI_SYNTAX_INVALID_USERDN_URL_13=The provided Access Control \
+ Instruction (ACI) bind rule userdn expression failed to URL decode for the \
+ following reason: %s
+SEVERE_WARN_ACI_SYNTAX_INVALID_ROLEDN_EXPRESSION_14=The provided Access \
+ Control Instruction (ACI) bind rule roledn expression value "%s" is invalid. \
+ A valid roledn keyword expression value requires one or more LDAP URLs in the \
+ following format: ldap:///dn [|| ldap:///dn] ... [|| ldap:///dn]
+SEVERE_WARN_ACI_SYNTAX_INVALID_ROLEDN_URL_15=The provided Access Control \
+ Instruction (ACI) bind rule roledn expression failed to URL decode for the \
+ following reason: %s
+SEVERE_WARN_ACI_SYNTAX_INVALID_GROUPDN_EXPRESSION_16=The provided Access \
+ Control Instruction (ACI) bind rule groupdn expression value "%s" is invalid. \
+ A valid groupdn keyword expression  value requires one or more LDAP URLs in \
+ the following format: ldap:///groupdn [|| ldap:///groupdn] ... [|| \
+ ldap:///groupdn]
+SEVERE_WARN_ACI_SYNTAX_INVALID_GROUPDN_URL_17=The provided Access Control \
+ Instruction (ACI) bind rule groupdn expression value failed to URL decode for \
+ the following reason: %s
+SEVERE_WARN_ACI_SYNTAX_ADDRESS_FAMILY_MISMATCH_18=The network mask value "%s" \
+ is not valid for the ip expression network address "%s"
+SEVERE_WARN_ACI_SYNTAX_INVALID_NETWORK_BIT_MATCH_19=The bit mask for address \
+ type value "%s" is not valid.%s
+SEVERE_WARN_ACI_SYNTAX_INVALID_IP_CRITERIA_DECODE_20=The provided Access \
+ Control Instruction (ACI) bind rule ip expression value failed to decode for \
+ the following reason: %s
+SEVERE_WARN_ACI_SYNTAX_INVALID_IP_EXPRESSION_21=The provided Access Control \
+ Instruction (ACI) bind rule ip expression value "%s" is invalid. A valid ip \
+ keyword expression requires one or more comma-separated elements of a valid \
+ IP address list expression
+SEVERE_WARN_ACI_SYNTAX_INVALID_DNS_EXPRESSION_22=The provided Access Control \
+ Instruction (ACI) bind rule dns expression value "%s" is invalid. A valid dns \
+ keyword expression value requires a valid fully qualified DNS domain name
+SEVERE_WARN_ACI_SYNTAX_INVALID_DNS_WILDCARD_23=The provided Access Control \
+ Instruction (ACI) bind rule dns expression value "%s" is invalid, because a \
+ wild-card pattern was found in the wrong position. A valid dns keyword \
+ wild-card expression value requires the '*' character only be in the leftmost \
+ position of the domain name
+SEVERE_WARN_ACI_SYNTAX_INVALID_DAYOFWEEK_24=The provided Access Control \
+ Instruction (ACI) bind rule dayofweek expression value "%s" is invalid, \
+ because of an invalid day of week value. A valid dayofweek value is one of \
+ the following English three-letter abbreviationsfor the days of the week: \
+ sun, mon, tue, wed, thu, fri, or sat
+SEVERE_WARN_ACI_SYNTAX_INVALID_TIMEOFDAY_25=The provided Access Control \
+ Instruction (ACI) bind rule timeofday expression value "%s" is invalid. A \
+ valid timeofday value is expressed as four digits representing hours and \
+ minutes in the 24-hour clock (0 to 2359)
+SEVERE_WARN_ACI_SYNTAX_INVALID_TIMEOFDAY_RANGE_26=The provided Access Control \
+ Instruction (ACI) bind rule timeofday expression value "%s" is not in the \
+ valid range. A valid timeofday value is expressed as four digits representing \
+ hours and minutes in the 24-hour clock (0 to 2359)
+SEVERE_WARN_ACI_SYNTAX_INVALID_AUTHMETHOD_EXPRESSION_27=The provided Access \
+ Control Instruction (ACI) bind rule authmethod expression value "%s" is \
+ invalid. A valid authmethod value is one of the following: none, simple,SSL, \
+ or "sasl mechanism", where mechanism is one of thesupported SASL mechanisms \
+ including CRAM-MD5, DIGEST-MD5, and GSSAPI
+SEVERE_WARN_ACI_SYNTAX_INVALID_USERATTR_EXPRESSION_28=The provided Access \
+ Control Instruction (ACI) bind rule userattr expression value "%s" is invalid
+SEVERE_WARN_ACI_SYNTAX_INVALID_USERATTR_KEYWORD_29=The provided Access \
+ Control Instruction (ACI) bind rule userattr expression value "%s" is not \
+ supported
+SEVERE_WARN_ACI_SYNTAX_INVALID_USERATTR_INHERITANCE_PATTERN_30=The provided \
+ Access Control Instruction (ACI) bind rule userattr expression inheritance \
+ pattern value "%s" is invalid. A valid inheritance pattern value must havethe \
+ following format: parent[inheritance_level].attribute#bindType
+SEVERE_WARN_ACI_SYNTAX_MAX_USERATTR_INHERITANCE_LEVEL_EXCEEDED_31=The \
+ provided Access Control Instruction (ACI) bind rule userattr expression \
+ inheritance pattern value "%s" is invalid. The inheritance level value cannot \
+ exceed themax level limit of %s
+SEVERE_WARN_ACI_SYNTAX_INVALID_INHERITANCE_VALUE_32=The provided Access \
+ Control Instruction (ACI) bind rule userattr expression inheritance pattern \
+ value "%s" is invalid because it is non-numeric
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGET_SYNTAX_33=The provided Access Control \
+ Instruction (ACI) target rulevalue "%s" is invalid. A valid target rule value \
+ mustbe in the following form: keyword operator "expression"
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGET_KEYWORD_34=The provided Access Control \
+ Instruction (ACI) target keyword value "%s" is invalid. A valid target \
+ keyword value is one of the following: target, targetscope, targetfilter, \
+ targetattr or targetattrfilters
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGET_NOT_OPERATOR_35=The provided Access \
+ Control Instruction (ACI) target operator value "%s" is invalid. The only \
+ validtarget operator value for the "%s" keyword is '='
+SEVERE_WARN_ACI_SYNTAX_TARGET_KEYWORD_NOT_SUPPORTED_36=The provided Access \
+ Control Instruction (ACI) target keyword value "%s" is not supported at this \
+ time
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS_37=The provided \
+ Access Control Instruction (ACI) target keyword value "%s" was seen multiple \
+ times in the ACI "%s"
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGETS_OPERATOR_38=The provided Access \
+ Control Instruction (ACI) target keyword operator value  "%s" is invalid. A \
+ valid targetkeyword operator value is either '=' or "!="
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGETSCOPE_EXPRESSION_39=The provided Access \
+ Control Instruction (ACI) targetscope expression operator value  "%s" is \
+ invalid. A valid targetscope expression value is one of the following: one, \
+ onelevel or subtree
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGETKEYWORD_EXPRESSION_40=The provided \
+ Access Control Instruction (ACI) target expression value "%s" is invalid. A \
+ valid target keyword expression  value requires a LDAP URL in the following \
+ format: ldap:///distinguished_name_pattern
+SEVERE_WARN_ACI_SYNTAX_TARGET_DN_NOT_DESCENDENTOF_41=The provided Access \
+ Control Instruction (ACI) target expression DN value "%s" is invalid. The \
+ target expression DN value must be a descendant of the ACI entry DN "%s", if \
+ no wild-card is specified in the targetexpression DN
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGETATTRKEYWORD_EXPRESSION_42=The provided \
+ Access Control Instruction (ACI) targetattr expression value "%s" is invalid. \
+ A valid targetattr keyword expression value requires one or more valid \
+ attribute type names in the following format: attribute1 [|| attribute1] ... \
+ [|| attributen]
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGETFILTERKEYWORD_EXPRESSION_43=The provided \
+ Access Control Instruction (ACI) targetfilter expression value "%s" is \
+ invalid because it is not a valid LDAP filter
+INFO_ACI_ADD_FAILED_PRIVILEGE_44=An attempt to add the entry "%s" containing \
+ an aci attribute type failed, because the authorization DN "%s" lacked \
+ modify-acl privileges
+INFO_ACI_MODIFY_FAILED_PRIVILEGE_45=An attempt to modify an aci attribute \
+ type in the entry "%s" failed, because theauthorization DN "%s" lacked \
+ modify-acl privileges
+SEVERE_WARN_ACI_ADD_FAILED_DECODE_46=An attempt to add the entry "%s" \
+ containing an aci attribute type failed because of the following reason: %s
+SEVERE_WARN_ACI_MODIFY_FAILED_DECODE_47=An attempt to modify an aci attribute \
+ type in the entry "%s" failed because of the following reason: %s
+SEVERE_WARN_ACI_ADD_LIST_FAILED_DECODE_48= "%s", located in the entry "%s", \
+ because of the following reason: %s
+INFO_ACI_ADD_LIST_NO_ACIS_49=No Access Control Instruction (ACI) attribute \
+ types were found in context "%s"
+INFO_ACI_ADD_LIST_ACIS_50=Added %s Access Control Instruction (ACI) attribute \
+ types found in context "%s" to the accesscontrol evaluation engine
+SEVERE_WARN_ACI_SYNTAX_INVALID_USERATTR_ROLEDN_INHERITANCE_PATTERN_51=The \
+ provided Access Control Instruction (ACI) bind rule userattr expression \
+ inheritance pattern value "%s" is invalid for the roledn keyword because it \
+ starts with the string "parent["
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_OPERATION_52=The provided \
+ Access Control Instruction (ACI) targattrfilter expression value %s is \
+ invalid because %s
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION_53=The provided \
+ Access Control Instruction (ACI) targattrfilter expression value %s is \
+ invalid because it is not in the correct format.A valid targattrsfilters \
+ expression value must be in the following format: "add=attr1: F1 && attr2: F2 \
+ ... && attrn: Fn,del= attr1: F1 && attr2: F2 ... && attrn: Fn"
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_OPS_MATCH_54=The provided \
+ Access Control Instruction (ACI) targattrfilter expression value %s is \
+ invalid because the both operation tokens match in the two filter lists
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_MAX_FILTER_LISTS_55=The \
+ provided Access Control Instruction (ACI) targattrfilters expression value %s \
+ is invalid because there are more than twofilter list statements
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LIST_FORMAT_56=The \
+ provided Access Control Instruction (ACI) targattrfilters expression value %s \
+ is invalid because the provided filter list string is in the wrong format. A \
+ valid targattrfilters filter list must be in the following format: add=attr1: \
+ F1 && attr2: F2 ... && attrn: Fn
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_FILTER_57=The \
+ provided Access Control Instruction (ACI) targattrfilters expression value %s \
+ is invalid because one or more of the specified filters are invalid for the \
+ following reason: %s
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_ATTR_FILTER_58=The \
+ provided Access Control Instruction (ACI) targattrfilters expression value %s \
+ is invalid because one or more of the specified filters are invalid because \
+ of non-matching attributetype names in the filter
+SEVERE_WARN_ACI_SYNTAX_INVALID_ATTRIBUTE_TYPE_NAME_59=The provided Access \
+ Control Instruction (ACI) attribute name value %s is invalid. A valid \
+ attribute type name must begin with an ASCII letter and must contain only \
+ ASCII letters,digits or the "-" character
+NOTICE_ACI_SYNTAX_DUBIOUS_AUTHMETHOD_SASL_MECHANISM_60=The SASL mechanism \
+ "%s" provided in the Access Control Instruction (ACI) bind rule authmethod \
+ expression is not one of the currently registered mechanisms in the server
+SEVERE_WARN_ACI_LOCALHOST_DOESNT_MATCH_CANONICAL_VALUE_61=The provided Access \
+ Control Instruction (ACI) bind rule dns expression value "%s" references \
+ hostname %s, but the canonical representation for that hostname is configured \
+ to be %s.  The server will attempt to automatically interpret the correct \
+ localhost value
+SEVERE_WARN_ACI_HOSTNAME_DOESNT_MATCH_CANONICAL_VALUE_62=The provided Access \
+ Control Instruction (ACI) bind rule dns expression value "%s" references \
+ hostname %s, which resolves to IP address %s, but the canonical hostname for \
+ that IP address is %s.  This likely means that the provided hostname will \
+ never match any clients
+SEVERE_WARN_ACI_ERROR_CHECKING_CANONICAL_HOSTNAME_63=An error occurred while \
+ attempting to determine whether hostname %s referenced in dns expression bind \
+ rule "%s" used the correct canonical representation:  %s.  This likely means \
+ that the provided hostname will never match any clients
+INFO_ACI_DESCRIPTION_GLOBAL_ACI_64=Specifies a global Access Control \
+ Instruction (ACI) attribute type that can be used to defined ACIs that have \
+ global scope accross naming contexts
+INFO_ACI_ADD_LIST_NO_GLOBAL_ACIS_65=No Global Access Control Instruction \
+ (ACI) attribute types were found
+INFO_ACI_ADD_LIST_GLOBAL_ACIS_66=Added %s Global Access Control Instruction \
+ (ACI) attribute types to the access control evaluation engine
+INFO_ACI_HANDLER_FAIL_PROCESS_GLOBAL_ACI_67=An unexpected error occurred \
+ while processing the ds-cfg-global-aci attribute in configuration entry %s
+INFO_ACI_HANDLER_FAIL_PROCESS_ACI_68=An unexpected error occurred while \
+ processing the  aci attributes in the configuration system
+SEVERE_WARN_PATTERN_DN_CONSECUTIVE_WILDCARDS_IN_VALUE_69=The pattern DN %s is \
+ not valid because it contains two consecutive wildcards in an attribute value
+SEVERE_WARN_PATTERN_DN_TYPE_CONTAINS_SUBSTRINGS_70=The pattern DN %s is not \
+ valid because it uses wildcards for substring matching on an attribute type. \
+ A single wildcard is allowed in place of an attribute type
+SEVERE_WARN_PATTERN_DN_TYPE_WILDCARD_IN_MULTIVALUED_RDN_71=The pattern DN %s \
+ is not valid because it contains a wildcard in an attribute type in a \
+ multi-valued RDN
+SEVERE_WARN_ACI_HANDLER_CANNOT_LOCK_NEW_SUPERIOR_USER_72=Unable to obtain a \
+ lock on the ModifyDN new superior entry %s
+SEVERE_WARN_ACI_NOT_VALID_DN_73=Selfwrite check skipped because an attribute \
+ "%s" with a distinguished name syntax was not a valid DN
+SEVERE_WARN_ACI_TARGETATTR_INVALID_ATTR_TOKEN_74=The provided Access Control \
+ Instruction (ACI) targetattr expression value "%s" is invalid because the \
+ expression contains invalid or duplicate tokens
+SEVERE_WARN_ACI_SYNTAX_ROLEDN_NOT_SUPPORTED_75=The provided Access Control \
+ Instruction (ACI) expression value "%s" is invalid because it contains the \
+ roledn keyword, which is not supported,  replace it with the groupdn keyword
+SEVERE_WARN_ACI_SERVER_DECODE_FAILED_76=Failed to decode the Access Control \
+ Instruction (ACI)%s
+SEVERE_WARN_ACI_ENTER_LOCKDOWN_MODE_77=The server is being put into lockdown \
+ mode because invalid ACIs rules were detected either when the server was \
+ started or during a backend initialization
+SEVERE_WARN_ACI_SYNTAX_INVALID_USERATTR_URL_78=The provided Access Control \
+ Instruction (ACI) bind rule userattr expression value failed to URL decode \
+ for the following reason: %s
+SEVERE_WARN_ACI_SYNTAX_INVALID_USERATTR_BASEDN_URL_79=The provided Access \
+ Control Instruction (ACI) bind rule userattr expression value failed to parse \
+ because the ldap URL "%s" contains an empty base DN
+SEVERE_WARN_ACI_SYNTAX_INVALID_USERATTR_ATTR_URL_80=The provided Access \
+ Control Instruction (ACI) bind rule userattr expression value failed to parse \
+ because the attribute field of the ldap URL "%s" either contains more than \
+ one description or the field is empty
+SEVERE_WARN_ACI_SYNTAX_INVALID_PREFIX_FORMAT_81=The provided Access Control \
+ Instruction (ACI) bind rule IP address expression failed to parse because the \
+ prefix part of the expression "%s" has an invalid format
+SEVERE_WARN_ACI_SYNTAX_INVALID_PREFIX_VALUE_82=The provided Access Control \
+ Instruction (ACI) bind rule IP address expression failed to parse because the \
+ prefix value of the expression "%s" was an invalid value. All values must \
+ greater than or equal to 0 and either less than or equal 32 for IPV4 \
+ addresses or less than or equal to 128 for IPV6 addresses
+SEVERE_WARN_ACI_SYNTAX_PREFIX_NOT_NUMERIC_83=The provided Access Control \
+ Instruction (ACI) bind rule IP address expression failed to parse because the \
+ prefix part of the expression "%s" has an non-numeric value
+SEVERE_WARN_ACI_SYNTAX_INVALID_IPV4_FORMAT_84=The provided Access Control \
+ Instruction (ACI) bind rule IP address expression failed to parse because the \
+ the IPv4 address expression "%s" format was invalid
+SEVERE_WARN_ACI_SYNTAX_INVALID_IPV4_VALUE_85=The provided Access Control \
+ Instruction (ACI) bind rule IP address expression failed to parse because the \
+ IPv4 address expression "%s" contains an invalid value.All values of the \
+ address must be between 0 and 255
+SEVERE_WARN_ACI_SYNTAX_IPV4_NOT_NUMERIC_86=The provided Access Control \
+ Instruction (ACI) bind rule IP address expression failed to parse because the \
+ the IPv4 address expression "%s" contains a non-numeric value
+SEVERE_WARN_ACI_SYNTAX_IPV6_WILDCARD_INVALID_87=The provided Access Control \
+ Instruction (ACI) bind rule IP address expression failed to parse because the \
+ the IPv6 address expression "%s" contains an illegal wildcard character. \
+ Wildcards are not supported when using IPv6 addresses in a IP bind rule \
+ expression
+SEVERE_WARN_ACI_SYNTAX_INVALID_IPV6_FORMAT_88=The provided Access Control \
+ Instruction (ACI) bind rule IP address expression "%s" failed to parse for \
+ the following reason: "%s"
+SEVERE_WARN_ACI_SYNTAX_INVALID_NETMASK_FORMAT_89=The provided Access Control \
+ Instruction (ACI) bind rule IP address expression failed to parse because the \
+ netmask part of the expression "%s" has an invalid format
+SEVERE_WARN_ACI_SYNTAX_INVALID_NETMASK_90=The provided Access Control \
+ Instruction (ACI) bind rule IP address expression failed to parse because the \
+ netmask part of the expression "%s" has an invalid value
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGETCONTROL_EXPRESSION_91=The provided \
+ Access Control Instruction (ACI) targetcontrol expression value "%s" is \
+ invalid. A valid targetcontrol keyword expression value requires one or more \
+ valid control OID strings in the following format: oid [|| oid1] ... [|| \
+ oidn]
+SEVERE_WARN_ACI_SYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID_92=The provided Access \
+ Control Instruction (ACI) targetcontrol OID value "%s" could not be parsed \
+ because the value contained an illegal character %c at position %d
+SEVERE_WARN_ACI_SYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID_93=The provided Access \
+ Control Instruction (ACI) targetcontrol OID value "%s" could not be parsed \
+ because the numeric OID contained two consecutive periods at position %d
+SEVERE_WARN_ACI_SYNTAX_DECODE_EFFECTIVERIGHTS_FAIL_94=The access control \
+ check failed because a geteffectiverights control could not be decoded \
+ because of the following reason: "%s"
+SEVERE_WARN_ACI_SYNTAX_INVALID_TARGEXTOP_EXPRESSION_95=The provided Access \
+ Control Instruction (ACI) extop expression value "%s" is invalid. A valid \
+ extop keyword expression value requires one or more valid extended operation \
+ request OID strings in the following format: oid [|| oid1] ... [|| oidn]
diff --git a/opendj-sdk/opends/src/messages/messages/admin.properties b/opendj-sdk/opends/src/messages/messages/admin.properties
new file mode 100644
index 0000000..265e1d4
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/admin.properties
@@ -0,0 +1,193 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=ADMIN
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+SEVERE_ERR_ADMIN_CANNOT_GET_LISTENER_BASE_1=An error occurred while trying to \
+ retrieve relation configuration entry %s: %s
+SEVERE_ERR_ADMIN_LISTENER_BASE_DOES_NOT_EXIST_2=The relation entry %s does \
+ not appear to exist in the Directory Server configuration. This is a required \
+ entry
+SEVERE_ERR_ADMIN_CANNOT_GET_MANAGED_OBJECT_3=An error occurred while trying \
+ to retrieve the managed object configuration entry %s: %s
+SEVERE_ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST_4=The managed object \
+ configuration entry %s does not appear to exist in the Directory Server \
+ configuration. This is a required entry
+SEVERE_ERR_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM_5=An error occurred while \
+ trying to decode the managed object configuration entry %s: %s
+SEVERE_ERR_ADMIN_CANNOT_INSTANTIATE_CLASS_6=The Directory Server was unable \
+ to load class %s and use it to create a component instance as defined in \
+ configuration entry %s.  The error that occurred was:  %s.  This component \
+ will be disabled
+SEVERE_ERR_ADMIN_CANNOT_INITIALIZE_COMPONENT_7=An error occurred while trying \
+ to initialize a component instance loaded from class %s with the information \
+ in configuration entry %s:  %s.  This component will be disabled
+MILD_WARN_ADMIN_COMPONENT_DISABLED_8=The Directory Server component \
+ configured in entry %s has been disabled
+SEVERE_ERR_ADMIN_CANNOT_OPEN_JAR_FILE_9=The Directory Server jar file %s in \
+ directory %s cannot be loaded because an unexpected error occurred while \
+ trying to open the file for reading:  %s
+FATAL_ERR_ADMIN_CANNOT_LOAD_CLASS_FROM_CORE_MANIFEST_10=A core configuration \
+ definition class could not be loaded from the core manifest file %s because \
+ an unexpected error occurred while trying to initialize it:  %s
+SEVERE_ERR_ADMIN_CANNOT_LOAD_CLASS_FROM_EXTENSION_MANIFEST_11=A configuration \
+ definition class could not be loaded from the extension manifest file %s in \
+ extensions %s because an unexpected error occurred while trying to initialize \
+ it:  %s
+MILD_ERR_ADMIN_NO_EXTENSIONS_DIR_12=The extensions directory %s does not \
+ exist, therefore no extensions will be loaded
+SEVERE_ERR_ADMIN_EXTENSIONS_DIR_NOT_DIRECTORY_13=Unable to read the Directory \
+ Server extensions because the extensions directory %s exists but is not a \
+ directory
+SEVERE_ERR_ADMIN_EXTENSIONS_CANNOT_LIST_FILES_14=Unable to read the Directory \
+ Server extensions from directory %s because an unexpected error occurred \
+ while trying to list the files in that directory:  %s
+FATAL_ERR_ADMIN_CANNOT_FIND_CORE_MANIFEST_15=The core administration manifest \
+ file %s cannot be located
+FATAL_ERR_ADMIN_CANNOT_READ_CORE_MANIFEST_16=The core administration manifest \
+ file %s cannot be loaded because an unexpected error occurred while trying to \
+ read it:  %s
+SEVERE_ERR_ADMIN_CANNOT_READ_EXTENSION_MANIFEST_17=The administration \
+ manifest file %s associated with the extension %s cannot be loaded because an \
+ unexpected error occurred while trying to read it:  %s
+INFO_ADMIN_TOOL_DESCRIPTION_18=This utility may be used to perform operations \
+ in the Directory Server administration framework
+INFO_ADMIN_SUBCMD_CREATE_GROUP_DESCRIPTION_19=Create a new server group
+INFO_ADMIN_ARG_DESCRIPTION_DESCRIPTION_20=The server group description. If \
+ not specified, the description will be empty
+INFO_ADMIN_SUBCMD_MODIFY_GROUP_DESCRIPTION_21=Modify a server group's \
+ properties
+INFO_ADMIN_ARG_NEW_DESCRIPTION_DESCRIPTION_22=If specified, the new \
+ description
+INFO_ADMIN_ARG_NEW_GROUPNAME_DESCRIPTION_23=If specified, the new server \
+ group's identifier
+INFO_ADMIN_SUBCMD_DELETE_GROUP_DESCRIPTION_24=Delete an existing server group
+INFO_ADMIN_SUBCMD_LIST_GROUPS_DESCRIPTION_25=List server groups that have \
+ been defined
+INFO_ADMIN_SUBCMD_ADD_TO_GROUP_DESCRIPTION_26=Add a server to a server group
+INFO_ADMIN_ARG_ADD_MEMBERNAME_DESCRIPTION_27=The server to add. This is a \
+ required argument
+INFO_ADMIN_SUBCMD_REMOVE_FROM_GROUP_DESCRIPTION_28=Remove a server from a \
+ server group
+INFO_ADMIN_ARG_REMOVE_MEMBERNAME_DESCRIPTION_29=The server to remove. This is \
+ a required argument
+INFO_ADMIN_SUBCMD_LIST_MEMBERS_DESCRIPTION_30=List servers of the specified \
+ server group
+INFO_ADMIN_SUBCMD_LIST_MEMBERSHIP_DESCRIPTION_31=List server groups in which \
+ the specified server is a member
+FATAL_ERR_ADMIN_CANNOT_CONNECT_TO_ADS_32=Could not connect to %s. Check that \
+ the server is running and that the provided credentials are valid
+INFO_ADMIN_SUBCMD_CREATE_ADS_DESCRIPTION_33=Create a new ADS DN
+INFO_ADMIN_SUBCMD_DELETE_ADS_DESCRIPTION_34=Delete an existing ADS DN
+FATAL_ERR_ADMIN_MISSING_HOSTNAME_35=The host name is missing
+FATAL_ERR_ADMIN_NOVALID_HOSTNAME_36=The host name is not valid
+FATAL_ERR_ADMIN_MISSING_IPATH_37=The installation path is missing
+FATAL_ERR_ADMIN_NOVALID_IPATH_38=The installation path is not valid
+FATAL_ERR_ADMIN_ACCESS_PERMISSION_39=An access permission error occurs
+FATAL_ERR_ADMIN_ALREADY_REGISTERED_40=The entity is already registered
+FATAL_ERR_ADMIN_BROKEN_INSTALL_41=The administrative repository is broken
+FATAL_ERR_ADMIN_NOT_YET_REGISTERED_42=The entity is not yet registered
+FATAL_ERR_ADMIN_MISSING_PORT_43=The port is missing
+FATAL_ERR_ADMIN_NOVALID_PORT_44=The port is not valid
+FATAL_ERR_ADMIN_MISSING_NAME_45=The name is missing
+FATAL_ERR_ADMIN_MISSING_ADMIN_UID_46=The administration UID is missing
+FATAL_ERR_ADMIN_MISSING_ADMIN_PASSWORD_47=The administrator password is \
+ missing
+FATAL_ERR_ADMIN_ERROR_UNEXPECTED_48=An unexpected error occurs
+INFO_ADMIN_ERROR_49=[error]
+INFO_ADMIN_SUCCESSFUL_50=The operation has been successfully completed
+INFO_ADMIN_SUCCESSFUL_NOP_51=The operation has been successfully completed, \
+ but no action was required
+SEVERE_ERR_ADMIN_NO_MESSAGE_52=
+INFO_ADMIN_ARG_CREATE_GROUP_GROUPNAME_DESCRIPTION_53=The new group's \
+ identifier. This is a required argument
+INFO_ADMIN_ARG_GROUPNAME_DESCRIPTION_54=The group's identifier. This is a \
+ required argument
+INFO_ADMIN_ARG_MEMBERNAME_DESCRIPTION_55=The member's identifier. This is a \
+ required argument
+INFO_ADMIN_ARG_BACKENDNAME_DESCRIPTION_56=The name of the backend in which \
+ the admin data will be stored. This is a required argument
+SEVERE_ERR_ADMIN_UNABLE_TO_REGISTER_LISTENER_57=Unable to register an \
+ add/delete listener against the entry "%s" because it does not exist in the \
+ configuration
+INFO_ADMIN_SUBCMD_REGISTER_SERVER_DESCRIPTION_58=Register a server into the \
+ administrative domain
+INFO_ADMIN_SUBCMD_UNREGISTER_SERVER_DESCRIPTION_59=Unregister a server from \
+ the administrative domain
+INFO_ADMIN_ARG_SERVERNAME_DESCRIPTION_60=The server's identifier. This is a \
+ required argument
+INFO_ADMIN_SUBCMD_LIST_SERVER_PROPS_DESCRIPTION_61=Describes server \
+ properties
+INFO_ADMIN_SUBCMD_LIST_SERVERS_DESCRIPTION_62=List servers that have been \
+ defined
+INFO_ADMIN_SUBCMD_GET_SERVER_PROPERTIES_DESCRIPTION_63=Shows server \
+ properties
+INFO_ADMIN_SUBCMD_SET_SERVER_PROPERTIES_DESCRIPTION_64=Modifies server \
+ properties
+INFO_ADMIN_ARG_SERVERID_DESCRIPTION_65=The registered server's unique \
+ identifier. This is a required argument
+FATAL_ERR_ADMIN_SERVER_NOT_REGISTERED_66=The provided serverId is not \
+ registered
+INFO_ADMIN_SUBCMD_CREATE_ADMIN_USER_DESCRIPTION_67=Creates a new \
+ administrator
+INFO_ADMIN_SUBCMD_DELETE_ADMIN_USER_DESCRIPTION_68=Deletes an existing \
+ administrator
+INFO_ADMIN_SUBCMD_LIST_ADMIN_USER_DESCRIPTION_69=Lists administrators that \
+ have been defined
+INFO_ADMIN_SUBCMD_GET_ADMIN_USER_PROPERTIES_DESCRIPTION_70=Shows \
+ administrator's properties
+INFO_ADMIN_SUBCMD_SET_ADMIN_USER_PROPERTIES_DESCRIPTION_71=Modifies \
+ administrator's properties
+INFO_ADMIN_SUBCMD_LIST_ADMIN_USER_PROPERTIES_DESCRIPTION_72=Describes \
+ administrator's properties
+INFO_ADMIN_ARG_USERID_DESCRIPTION_73=The administrator's unique identifier. \
+ This is a required argument
diff --git a/opendj-sdk/opends/src/messages/messages/admin_tool.properties b/opendj-sdk/opends/src/messages/messages/admin_tool.properties
new file mode 100644
index 0000000..f91a294
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/admin_tool.properties
@@ -0,0 +1,275 @@
+global.category=QUICKSETUP
+global.ordinal=-1
+
+INFO_ADDRESS_PORT_COLUMN=Address:Port
+INFO_ADMINISTRATIVE_USERS_LABEL=Administrative Users:
+INFO_AGE_OF_OLDEST_MISSING_CHANGE_COLUMN=<html>Age of Oldest<br>Missing \
+ Change<br>(hh:mm:ss)
+INFO_AGE_OF_OLDEST_MISSING_CHANGE_COLUMN_CLI=Age of Oldest Missing Change \
+ (hh:mm:ss)
+INFO_AUTHENTICATE_BUTTON_LABEL=Authenticate
+INFO_AUTHENTICATE_STATUS_PANEL_BUTTON_TOOLTIP=Authenticate as an \
+ administrative user to view all monitoring information
+INFO_BACKENDID_COLUMN=Backend ID
+INFO_BASEDN_COLUMN=Base DN
+INFO_CANCEL_BUTTON_UNINSTALL_TOOLTIP=Cancel Uninstall
+INFO_CANNOT_CONNECT_TO_LOGIN_WITH_CAUSE=Could not connect to the Directory \
+ Server with the provided credentials.  The possible causes for this are:%n%s
+INFO_CANNOT_CONNECT_TO_LOGIN_WITHOUT_CAUSE=Could not connect to the Directory \
+ Server with the provided credentials.%nCheck that the Administrative User DN \
+ and password are valid.
+INFO_CANNOT_CONNECT_WITH_ADS_CREDENTIALS_WITHOUT_CAUSE=Could not connect to \
+ the Directory Server with the provided credentials.%nCheck that the \
+ Administrative User ID and password are valid.
+INFO_CLI_STATUS_ERROR_READING_PWD_FILE=Could not read the password from file \
+ %s.  Check that the file path is correct, that you have access rights to it \
+ and that it contains a password.
+INFO_CLI_STATUS_LDAPAUTH_PASSWORD_PROMPT=Password for user %s:
+INFO_CLI_STATUS_PWD_AND_PWD_FILE_PROVIDED=You cannot provide Bind Password \
+ (-w or --bindPassword) and Bind Password File (-W or --bindPasswordFile) at \
+ the same time.
+INFO_CLI_UNINSTALL_CONFIRM_BACKUPS=Remove Backup Files Contained in bak \
+ Directory?
+INFO_CLI_UNINSTALL_CONFIRM_CONFIGURATION_SCHEMA=Remove Configuration and \
+ Schema Files?
+INFO_CLI_UNINSTALL_CONFIRM_DATABASES=Remove Database Contents?
+INFO_CLI_UNINSTALL_CONFIRM_DELETE_FILES=The files will be permanently \
+ deleted, are you sure you want to continue?
+INFO_CLI_UNINSTALL_CONFIRM_LDIFS=Remove LDIF Export Files Contained in ldif \
+ Directory?
+INFO_CLI_UNINSTALL_CONFIRM_LIBRARIES_BINARIES=Remove Server Libraries and \
+ Administrative Tools?
+INFO_CLI_UNINSTALL_CONFIRM_LOGS=Remove Log Files?
+INFO_CLI_UNINSTALL_CONFIRM_OUTSIDEDBS=The Directory Server contains database \
+ files in the following locations outside the server path:%n%s%nRemove these \
+ files?
+INFO_CLI_UNINSTALL_CONFIRM_OUTSIDELOGS=The Directory Server contains log \
+ files in the following locations outside the server path:%n%s%nRemove these \
+ files?
+INFO_CLI_UNINSTALL_CONFIRM_PROMPT=%s%n[%s]:
+INFO_CLI_UNINSTALL_CONFIRM_STOP=The OpenDS server is currently running and \
+ must be stopped before uninstallation can continue.%nStop the Server and \
+ permanently delete the files?
+INFO_CLI_UNINSTALL_ERROR_READING_STDIN=Unexpected error reading standard \
+ input.
+INFO_CLI_UNINSTALL_NO_LONG=no
+INFO_CLI_UNINSTALL_NO_SHORT=n
+INFO_CLI_UNINSTALL_NOTHING_TO_BE_UNINSTALLED=You must select something to be \
+ uninstalled.
+INFO_CLI_UNINSTALL_SERVER_STOPPED=The Server is Stopped.
+INFO_CLI_UNINSTALL_STRING_PROMPT=%s%n[%s]:
+INFO_CLI_UNINSTALL_UNKNOWN_ARGUMENT=Unknown argument %s
+INFO_CLI_UNINSTALL_WHAT_TO_DELETE=Do you want to remove all components of \
+ OpenDS or select the components to remove?%n1. Remove all components%n2. \
+ Select the components to be removed%n3. Neither; Quit the uninstaller
+INFO_CLI_UNINSTALL_YES_LONG=yes
+INFO_CLI_UNINSTALL_YES_SHORT=y
+INFO_CLOSE_BUTTON_UNINSTALL_TOOLTIP=Close Uninstall Window
+INFO_CONFIRM_CLOSE_UNINSTALL_MSG=OpenDS Uninstall has not yet completed.%nAre \
+ you sure you want to close the Uninstall Window?
+INFO_CONFIRM_CLOSE_UNINSTALL_TITLE=Confirmation Required
+INFO_CONFIRM_RESTART_MESSAGE=Are you sure you want to Restart the Directory \
+ Server?
+INFO_CONFIRM_RESTART_TITLE=Confirmation Required
+INFO_CONFIRM_STOP_MESSAGE=Are you sure you want to Stop the Directory Server?
+INFO_CONFIRM_STOP_TITLE=Confirmation Required
+INFO_CONFIRM_UNINSTALL_PANEL_INSTRUCTIONS=The OpenDS Uninstall tool will \
+ remove all parts of the OpenDS server you have selected below from your \
+ system. If all are selected, the server will be removed entirely.
+INFO_CONFIRM_UNINSTALL_PANEL_TITLE=Uninstall Options
+INFO_CONFIRM_UNINSTALL_REPLICATION_SERVER_NOT_RUNNING_MSG=This server is \
+ configured to do replication.%nIn order to remove references to this server \
+ in other OpenDS servers the server will be started and then you must provide \
+ administrator authentication.%n%nClick on 'Yes' to start the server and then \
+ provide authentication to remove the remote references.
+INFO_CONFIRM_UNINSTALL_REPLICATION_SERVER_NOT_RUNNING_TITLE=Confirmation \
+ Required
+INFO_CONFIRM_UNINSTALL_REPLICATION_SERVER_RUNNING_MSG=This server is \
+ configured to do replication.%nIn order to remove references to this server \
+ in other OpenDS servers you must provide administrator \
+ authentication.%n%nClick on 'Yes' to provide authentication to remove the \
+ remote references.
+INFO_CONFIRM_UNINSTALL_REPLICATION_SERVER_RUNNING_TITLE=Confirmation Required
+INFO_CONFIRM_UNINSTALL_SERVER_NOT_RUNNING_MSG=Confirm Uninstall%nAll selected \
+ files will be permanently deleted, are you sure you want to continue?
+INFO_CONFIRM_UNINSTALL_SERVER_NOT_RUNNING_TITLE=Confirm Uninstall
+INFO_CONFIRM_UNINSTALL_SERVER_RUNNING_MSG=Server is Running%nThe OpenDS \
+ server is currently running and must be stopped before uninstallation can \
+ continue. Do you want the uninstaller to stop the server for you and continue \
+ with the uninstall? If you click No, you will need to stop the server \
+ manually to continue.
+INFO_CONFIRM_UNINSTALL_SERVER_RUNNING_TITLE=Server is Running
+INFO_CONFIRM_UNINSTALL_STEP=Uninstall Options
+INFO_CONNECTIONS_LABEL=Open Connections:
+INFO_COULD_NOT_FIND_VALID_LDAPURL=Error reading the configuration file.%nThis \
+ could be caused because there is not an enabled LDAP port for the specified \
+ connection parameters or because you do not have read rights on the \
+ configuration file.
+INFO_DATABASES_TITLE=Data Sources
+INFO_DELETE_OUTSIDE_DBS_LABEL=Delete these Database Files
+INFO_DELETE_OUTSIDE_DBS_MSG=The Directory Server contains database files in \
+ the following locations outside the server path:
+INFO_DELETE_OUTSIDE_DBS_TOOLTIP=Check this box to Delete the Database Files \
+ located outside the install directory
+INFO_DELETE_OUTSIDE_LOGS_LABEL=Delete these Log Files
+INFO_DELETE_OUTSIDE_LOGS_MSG=The Directory Server contains log files in the \
+ following locations outside the server path:
+INFO_DELETE_OUTSIDE_LOGS_TOOLTIP=Check this box to Delete the Log Files \
+ located outside the install directory
+INFO_DISABLED_LABEL=Disabled
+INFO_ENABLED_LABEL=Enabled
+INFO_ERROR_READING_CONFIG_FILE=Error reading the configuration file.
+INFO_ERROR_READING_CONFIG_LDAP=Error reading data from server.  Verify the \
+ authentication information provided.%nDetails: %s
+INFO_ERROR_STARTING_SERVER_GENERIC=Could not Start server.
+INFO_FINISH_BUTTON_UNINSTALL_LABEL=Uninstall
+INFO_FINISH_BUTTON_UNINSTALL_TOOLTIP=Finish Uninstall
+INFO_FRAME_UNINSTALL_TITLE=OpenDS Uninstall
+INFO_INSTALLATION_PATH_LABEL=Installation Path:
+INFO_JAVA_VERSION_LABEL=Java Version:
+INFO_JMX_PROTOCOL_LABEL=JMX
+INFO_JMX_SECURE_PROTOCOL_LABEL=JMX (Secure)
+INFO_LDAP_PROTOCOL_LABEL=LDAP
+INFO_LDAPS_PROTOCOL_LABEL=LDAPS
+INFO_LISTENERS_TITLE=Listener Ports
+INFO_LOGIN_CANCEL_BUTTON_TOOLTIP=Close Login Dialog
+INFO_LOGIN_DIALOG_MSG=You must provide an Administrative User DN and password \
+ to retrieve monitoring information.
+INFO_LOGIN_DIALOG_SERVER_NOT_RUNNING_MSG=The Directory Server is not running. \
+ Click OK to continue to the Status Panel.
+INFO_LOGIN_DIALOG_SERVER_NOT_RUNNING_TITLE=Directory Server not Running
+INFO_LOGIN_DIALOG_TITLE=Authentication Required
+INFO_LOGIN_DN_LABEL=Administrative User DN:
+INFO_LOGIN_DN_TOOLTIP=Enter the distinguished name (DN) of the Administrative \
+ User account that will used to retrieve monitoring information
+INFO_LOGIN_OK_BUTTON_TOOLTIP=Proceed with authentication
+INFO_LOGIN_PWD_LABEL=Administrative User Password:
+INFO_LOGIN_PWD_TOOLTIP=Enter the password of the Administrative User account \
+ that will used to retrieve monitoring information
+INFO_MISSING_CHANGES_COLUMN=Missing Changes
+INFO_NO_DBS_FOUND=-No LDAP Databases Found-
+INFO_NO_LISTENERS_FOUND=-No Listener Ports Found-
+INFO_NOT_APPLICABLE_LABEL=--
+INFO_NOT_AVAILABLE_AUTHENTICATION_REQUIRED_CLI_LABEL=<not available> (*)
+INFO_NOT_AVAILABLE_AUTHENTICATION_REQUIRED_CLI_LEGEND=* Information only \
+ available if you provide authentication information when launching the status \
+ command.
+INFO_NOT_AVAILABLE_AUTHENTICATION_REQUIRED_TOOLTIP=<html>Information is only \
+ available if you are authenticated<br>as an administrative user.
+INFO_NOT_AVAILABLE_SERVER_DOWN_CLI_LABEL=<not available> (*)
+INFO_NOT_AVAILABLE_SERVER_DOWN_CLI_LEGEND=* Information only available if \
+ server is running and you provide authentication information when launching \
+ the status command.
+INFO_NOT_AVAILABLE_SERVER_DOWN_TOOLTIP=<html>Information is only available if \
+ server is running and you are authenticated<br>as an administrative user.
+INFO_NOTHING_SELECTED_TO_UNINSTALL=You must select something to be \
+ uninstalled.
+INFO_NUMBER_ENTRIES_COLUMN=Entries
+INFO_NUMBER_ENTRIES_MULTIPLE_SUFFIXES_IN_DB=%s (for all base DNs in %s)
+INFO_OPENDS_VERSION_LABEL=OpenDS Version:
+INFO_PROGRESS_REMOVING_REFERENCES=Removing references on %s
+INFO_PROTOCOL_COLUMN=Protocol
+INFO_QUIT_STATUS_PANEL_BUTTON_TOOLTIP=Quit Status Panel
+INFO_REMOVE_BACKUPS_LABEL=Backup Files Contained in bak Directory
+INFO_REMOVE_BACKUPS_TOOLTIP=Remove Backup Files Contained in bak Directory
+INFO_REMOVE_DATABASES_LABEL=Database Contents
+INFO_REMOVE_DATABASES_TOOLTIP=Remove Database Contents
+INFO_REMOVE_LABEL=Remove:
+INFO_REMOVE_LDIFS_LABEL=LDIF Export Files Contained in ldif Directory
+INFO_REMOVE_LDIFS_TOOLTIP=Remove LDIF Export Files Contained in ldif \
+ Directory
+INFO_REMOVE_LIBRARIES_AND_TOOLS_LABEL=Server Libraries and Administrative \
+ Tools
+INFO_REMOVE_LIBRARIES_AND_TOOLS_TOOLTIP=Remove Server Libraries and \
+ Administrative Tools
+INFO_REMOVE_LOGS_LABEL=Log Files
+INFO_REMOVE_LOGS_TOOLTIP=Remove Log Files
+INFO_REMOVE_SCHEMA_AND_CONFIGURATION_LABEL=Configuration and Schema Files
+INFO_REMOVE_SCHEMA_AND_CONFIGURATION_TOOLTIP=Remove Configuration and Schema \
+ Files
+INFO_REPLICATED_COLUMN=Replication
+INFO_RESTART_BUTTON_LABEL=Restart
+INFO_RESTART_BUTTON_TOOLTIP=Restarts the Directory Server
+INFO_SERVER_DETAILS_TITLE=Server Details
+INFO_SERVER_PATH_LABEL=Server Path:
+INFO_SERVER_STARTED_LABEL=Started
+INFO_SERVER_STARTING_LABEL=Starting
+INFO_SERVER_STATUS_LABEL=Server Run Status:
+INFO_SERVER_STATUS_TITLE=Server Status
+INFO_SERVER_STOPPED_LABEL=Stopped
+INFO_SERVER_STOPPING_LABEL=Stopping
+INFO_SERVER_UNKNOWN_STATUS_LABEL=Unknown
+INFO_START_BUTTON_LABEL=Start
+INFO_START_BUTTON_TOOLTIP=Starts the Directory Server
+INFO_STATE_COLUMN=State
+INFO_STATUS_CLI_USAGE_DESCRIPTION=This utility may be used to display basic \
+ server information
+INFO_STATUS_PANEL_LAUNCHER_GUI_LAUNCH_FAILED=Could not launch Status Panel. \
+ Check that you have access to the display.
+INFO_STATUS_PANEL_LAUNCHER_GUI_LAUNCH_FAILED_DETAILS=Could not launch Status \
+ Panel.  Check that you have access to the display.   Check file %s for \
+ details.
+INFO_STATUS_PANEL_LAUNCHER_USAGE_DESCRIPTION=This utility may be used to \
+ display the Status Panel window which displays basic server information and \
+ allows to start, stop and restart the server.
+INFO_STATUSPANEL_DIALOG_TITLE=OpenDS Status Panel
+INFO_STOP_BUTTON_LABEL=Stop
+INFO_STOP_BUTTON_TOOLTIP=Stops the Directory Server
+INFO_SUFFIX_NOT_REPLICATED_LABEL=Disabled
+INFO_SUFFIX_REPLICATED_LABEL=Enabled
+INFO_SUMMARY_DELETING_EXTERNAL_DB_FILES=Deleting Database Files outside the \
+ Installation Path...
+INFO_SUMMARY_DELETING_EXTERNAL_LOG_FILES=Deleting Log Files outside the \
+ Installation Path...
+INFO_SUMMARY_DELETING_EXTERNAL_REFERENCES=Deleting External References...
+INFO_SUMMARY_DELETING_INSTALLATION_FILES=Deleting Files under the \
+ Installation Path...
+INFO_SUMMARY_DISABLING_WINDOWS_SERVICE=Disabling Windows Service...
+INFO_SUMMARY_UNCONFIGURING_REPLICATION=Removing references in remote OpenDS \
+ servers...
+INFO_SUMMARY_UNINSTALL_FINISHED_SUCCESSFULLY=<b>OpenDS Uninstall Completed \
+ Successfully.</b>
+INFO_SUMMARY_UNINSTALL_FINISHED_SUCCESSFULLY_CLI=OpenDS Uninstall Completed \
+ Successfully.
+INFO_SUMMARY_UNINSTALL_FINISHED_SUCCESSFULLY_REMOVE_JARFILES=<b>OpenDS \
+ Uninstall Completed Successfully.</b><br><br>To complete the uninstallation, \
+ you must delete manually the following files and directories:<br>%s
+INFO_SUMMARY_UNINSTALL_FINISHED_SUCCESSFULLY_REMOVE_JARFILES_CLI=OpenDS \
+ Uninstall Completed Successfully.%nTo complete the uninstallation, you must \
+ delete manually the following files and directories:%n%s
+INFO_SUMMARY_UNINSTALL_FINISHED_WITH_ERROR=An error occurred.  Check \
+ 'Details' text area for more information.
+INFO_SUMMARY_UNINSTALL_FINISHED_WITH_ERROR_ON_REMOTE=<b>OpenDS Uninstall \
+ Succeeded With Warnings</b><br>OpenDS was successfully uninstalled in the \
+ local machine but some error occurred updating remote servers.  Check \
+ 'Details' text area for more information.
+INFO_SUMMARY_UNINSTALL_FINISHED_WITH_ERROR_ON_REMOTE_CLI=OpenDS was \
+ successfully uninstalled in the local machine but some error occurred \
+ updating remote servers.
+INFO_SUMMARY_UNINSTALL_NOT_STARTED=Starting Uninstallation...
+INFO_UNDEFINED_PROTOCOL_LABEL=-Unknown-
+INFO_UNINSTALL_LAUNCHER_GUI_LAUNCHED_FAILED=%n%nThe graphical Uninstall \
+ launch failed.%n%nLaunching command line Uninstall...
+INFO_UNINSTALL_LAUNCHER_GUI_LAUNCHED_FAILED_DETAILS=%n%nThe graphical \
+ Uninstall launch failed.  Check file %s for more details.%n%nLaunching \
+ command line Uninstall...
+INFO_UNINSTALL_LAUNCHER_LAUNCHING_CLI=Launching command line uninstall...
+INFO_UNINSTALL_LAUNCHER_LAUNCHING_GUI=Launching graphical uninstall...
+INFO_UNINSTALL_LAUNCHER_USAGE_DESCRIPTION=This utility may be used to \
+ uninstall the Directory Server.
+INFO_UNINSTALL_LOGIN_CANCEL_BUTTON_TOOLTIP=Close this dialog and do not try \
+ to remove references of this server in other OpenDS servers.
+INFO_UNINSTALL_LOGIN_DIALOG_MSG=You must provide a Global Administrative User \
+ ID to be able to remove the references to this server in other OpenDS \
+ servers.%nYou must also provide the name of this host (or IP address) as it \
+ is referenced in remote servers.
+INFO_UNINSTALL_LOGIN_HOST_NAME_LABEL=Host Name:
+INFO_UNINSTALL_LOGIN_HOST_NAME_TOOLTIP=The name of this host (or IP address) \
+ as it is referenced in other OpenDS servers.
+INFO_UNINSTALL_LOGIN_OK_BUTTON_TOOLTIP=Try to connect with the provided \
+ authentication.
+INFO_UNINSTALL_LOGIN_PWD_TOOLTIP=The password of the Global Administrator to \
+ be used to read and update configuration in other OpenDS servers.
+INFO_UNINSTALL_LOGIN_UID_TOOLTIP=The Global Administrator User ID to be used \
+ to read and update configuration in other OpenDS servers.
+INFO_UNKNOWN_LABEL=--
diff --git a/opendj-sdk/opends/src/messages/messages/backend.properties b/opendj-sdk/opends/src/messages/messages/backend.properties
new file mode 100644
index 0000000..6d12002
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/backend.properties
@@ -0,0 +1,877 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=BACKEND
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+FATAL_ERR_BACKEND_CANNOT_REMOVE_MULTIBASE_SUB_SUFFIX_1=An attempt was made to \
+ de-register sub-suffix "%s" from the backend with suffix "%s".  However, the \
+ subordinate backend containing that sub-suffix also contains additional \
+ sub-suffixes and may not be de-registered.  It may be possible to remove this \
+ sub-suffix by editing the configuration for the subordinate backend with \
+ which it is associated
+FATAL_ERR_ROOTDSE_CONFIG_ENTRY_NULL_2=An attempt was made to configure the \
+ root DSE backend without providing a configuration entry.  This is not \
+ allowed
+INFO_ROOTDSE_SUBORDINATE_BASE_DESCRIPTION_3=Specifies the set of base DNs \
+ that will be used for singleLevel, wholeSubtree, and subordinateSubtree \
+ searches based at the root DSE.  If this is not provided, then the set of all \
+ user-defined suffixes will be used
+SEVERE_WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE_4=Base DN "%s" is \
+ configured as one of the subordinate base DNs to use for searches below the \
+ root DSE.  However, this base DN is not handled by any suffix registered with \
+ the Directory Server and will therefore not be used
+SEVERE_WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION_5=An unexpected problem \
+ occurred while trying to determine the set of subordinate base DNs to use for \
+ searches below the root DSE:  %s
+MILD_WARN_ROOTDSE_GET_ENTRY_NONROOT_6=The root DSE backend was asked to \
+ retrieve entry with DN "%s".  This backend should only be asked to retrieve \
+ the root DSE itself.  However, it will check with the defined subordinate \
+ backends and see if it can find the requested entry
+MILD_ERR_ROOTDSE_ADD_NOT_SUPPORTED_7=Unwilling to add entry "%s" because add \
+ operations are not supported in the root DSE backend
+MILD_ERR_ROOTDSE_DELETE_NOT_SUPPORTED_8=Unwilling to remove entry "%s" \
+ because delete operations are not supported in the root DSE backend
+MILD_ERR_ROOTDSE_MODIFY_NOT_SUPPORTED_9=Unwilling to update entry "%s" \
+ because modify operations are not supported in the root DSE backend.  If you \
+ wish to alter the contents of the root DSE itself, then it may be possible to \
+ do so by modifying the "%s" entry in the configuration
+MILD_ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED_10=Unwilling to rename entry "%s" \
+ because modify DN operations are not supported in the root DSE backend
+MILD_ERR_ROOTDSE_INVALID_SEARCH_BASE_11=Unwilling to perform a search \
+ (connection ID %d, operation ID %d) with a base DN of "%s" in the root DSE \
+ backend.  The base DN for searches in this backend must be the DN of the root \
+ DSE itself
+SEVERE_ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE_12=An unexpected failure \
+ occurred while trying to process a search operation (connection ID %d, \
+ operation ID %d) in the root DSE backend:  %s
+SEVERE_ERR_ROOTDSE_INVALID_SEARCH_SCOPE_13=Unable to process the search with \
+ connection ID %d and operation ID %d because it had an invalid scope of %s
+SEVERE_ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER_14=An unexpected error \
+ occurred while trying to open the LDIF writer for the root DSE backend:  %s
+SEVERE_ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE_15=An unexpected error occurred while \
+ trying to export the root DSE entry to the specified LDIF target: %s
+SEVERE_ERR_ROOTDSE_IMPORT_NOT_SUPPORTED_16=The root DSE backend does not \
+ support LDIF import operations
+SEVERE_ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED_17=The root DSE backend \
+ does not provide a facility for backup and restore operations.  The contents \
+ of the root DSE should be backed up as part of the Directory Server \
+ configuration
+INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS_18=The root DSE configuration has \
+ been updated so that it will now use the defined set of Directory Server \
+ suffixes when performing searches below the root DSE
+INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS_19=The root DSE configuration has \
+ been updated so that it will now use the base DN set %s when performing below \
+ the root DSE
+INFO_ROOTDSE_USING_NEW_USER_ATTRS_20=The root DSE configuration has been \
+ updated so that it will now use a new set of user-defined attributes
+SEVERE_ERR_MONITOR_CONFIG_ENTRY_NULL_21=An attempt was made to configure the \
+ monitor backend without providing a configuration entry.  This is not \
+ allowed, and no monitor information will be available over protocol
+SEVERE_ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN_22=An unexpected error \
+ occurred while attempting to decode cn=monitor as the base DN for the \
+ Directory Server monitor information:  %s.  No monitor information will be \
+ available over protocol
+MILD_ERR_MONITOR_ADD_NOT_SUPPORTED_23=Unwilling to add entry "%s" because add \
+ operations are not supported in the monitor backend
+MILD_ERR_MONITOR_DELETE_NOT_SUPPORTED_24=Unwilling to remove entry "%s" \
+ because delete operations are not supported in the monitor backend
+MILD_ERR_MONITOR_MODIFY_NOT_SUPPORTED_25=Unwilling to update entry "%s" \
+ because modify operations are not supported in the monitor backend.  If you \
+ wish to alter the contents of the base monitor entry itself, then it may be \
+ possible to do so by modifying the "%s" entry in the configuration
+MILD_ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED_26=Unwilling to rename entry "%s" \
+ because modify DN operations are not supported in the monitor backend
+SEVERE_ERR_MONITOR_UNABLE_TO_EXPORT_BASE_27=An error occurred while \
+ attempting to export the base monitor entry:  %s
+SEVERE_ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY_28=An error occurred while \
+ attempting to export the monitor entry for monitor provider %s:  %s
+SEVERE_ERR_MONITOR_IMPORT_NOT_SUPPORTED_29=The monitor backend does not \
+ support LDIF import operations
+SEVERE_ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED_30=The monitor backend \
+ does not provide a facility for backup and restore operations
+INFO_MONITOR_USING_NEW_USER_ATTRS_31=The monitor configuration has been \
+ updated so that it will now use a new set of user-defined attributes
+MILD_ERR_MONITOR_GET_ENTRY_NULL_32=Unable to retrieve the requested entry \
+ from the monitor backend because the provided DN was null
+MILD_ERR_MONITOR_BASE_TOO_DEEP_33=Unable to retrieve the requested entry %s \
+ from the monitor backend because the DN is too deep.  Monitor entries may not \
+ be more than one level below %s
+MILD_ERR_MONITOR_INVALID_BASE_34=Unable to retrieve the requested entry %s \
+ from the monitor backend because the DN is not below the monitor base of %s
+MILD_ERR_MONITOR_MULTIVALUED_RDN_35=Unable to retrieve the requested entry %s \
+ from the monitor backend because monitor entries may not contain multivalued \
+ RDNs
+MILD_ERR_MONITOR_NO_SUCH_PROVIDER_36=Unable to retrieve the requested entry \
+ from the monitor backend because there is no monitor provider "%s" registered \
+ with the Directory Server
+INFO_MONITOR_UPTIME_37=%d days %d hours %d minutes %d seconds
+SEVERE_ERR_SCHEMA_CONFIG_ENTRY_NULL_38=An attempt was made to configure the \
+ schema backend without providing a configuration entry.  This is not allowed, \
+ and no schema information will be available over protocol
+INFO_SCHEMA_DESCRIPTION_ENTRY_DN_39=Specifies the DN or set of DNs for the \
+ entries that may be retrieved in order to retrieve the Directory Server \
+ schema information.  Multiple values may be provided if the schema is to be \
+ available in multiple locations for compatibility purposes.  If no value is \
+ provided, a default of "cn=schema" will be used
+SEVERE_ERR_SCHEMA_CANNOT_DETERMINE_BASE_DN_40=An error occurred while trying \
+ to determine the base DNs to use when publishing the Directory Server schema \
+ information, as specified in the ds-cfg-schema-entry-dn attribute of \
+ configuration entry %s:  %s.  The default schema base DN of cn=schema will be \
+ used
+MILD_ERR_SCHEMA_ADD_NOT_SUPPORTED_41=Unwilling to add entry "%s" because add \
+ operations are not supported in the schema backend
+MILD_ERR_SCHEMA_DELETE_NOT_SUPPORTED_42=Unwilling to remove entry "%s" \
+ because delete operations are not supported in the schema backend
+MILD_ERR_SCHEMA_MODIFY_NOT_SUPPORTED_43=Unwilling to update entry "%s" \
+ because modify operations are not yet supported in the schema backend.  If \
+ you wish to alter the contents of the base schema entry itself, then it may \
+ be possible to do so by modifying the "%s" entry in the configuration
+MILD_ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED_44=Unwilling to rename entry "%s" \
+ because modify DN operations are not supported in the schema backend
+SEVERE_ERR_SCHEMA_UNABLE_TO_EXPORT_BASE_45=An error occurred while attempting \
+ to export the base schema entry:  %s
+SEVERE_ERR_SCHEMA_IMPORT_NOT_SUPPORTED_46=The schema backend does not support \
+ LDIF import operations
+SEVERE_ERR_SCHEMA_BACKUP_AND_RESTORE_NOT_SUPPORTED_47=The schema backend does \
+ not yet provide a facility for backup and restore operations
+MILD_ERR_SCHEMA_INVALID_BASE_48=Unable to retrieve the requested entry %s \
+ from the schema backend because the DN is equal to one of the schema entry \
+ DNs
+SEVERE_ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER_49=An unexpected error \
+ occurred while trying to open the LDIF writer for the schema backend:  %s
+INFO_SCHEMA_DEREGISTERED_BASE_DN_50=Successfully deregistered DN %s so that \
+ it will no longer be available as a schema entry DN
+SEVERE_ERR_SCHEMA_CANNOT_DEREGISTER_BASE_DN_51=An error occurred while trying \
+ to deregister %s as a schema entry DN:  %s
+INFO_SCHEMA_REGISTERED_BASE_DN_52=Successfully registered DN %s as a new \
+ schema entry DN
+SEVERE_ERR_SCHEMA_CANNOT_REGISTER_BASE_DN_53=An error occurred while trying \
+ to register %s as a schema entry DN:  %s
+INFO_SCHEMA_USING_NEW_USER_ATTRS_54=The schema configuration has been updated \
+ so that it will now use a new set of user-defined attributes
+FATAL_ERR_BACKEND_CANNOT_LOCK_ENTRY_55=The Directory Server was unable to \
+ obtain a lock on entry %s after multiple attempts.  This could mean that the \
+ entry is already locked by a long-running operation or that the entry has \
+ previously been locked but was not properly unlocked
+SEVERE_ERR_SCHEMA_BACKUP_CANNOT_GET_MAC_56=An error occurred while attempting \
+ to obtain the %s MAC provider to create the signed hash for the backup:  %s
+SEVERE_ERR_SCHEMA_BACKUP_CANNOT_GET_DIGEST_57=An error occurred while \
+ attempting to obtain the %s message digest to create the hash for the backup: \
+ %s
+SEVERE_ERR_SCHEMA_BACKUP_CANNOT_CREATE_ARCHIVE_FILE_58=An error occurred \
+ while trying to create the schema archive file %s in directory %s:  %s
+SEVERE_ERR_SCHEMA_BACKUP_CANNOT_GET_CIPHER_59=An error occurred while \
+ attempting to obtain the %s cipher to use to encrypt the backup:  %s
+SEVERE_ERR_SCHEMA_BACKUP_ZIP_COMMENT_60=%s schema backup %s
+SEVERE_ERR_SCHEMA_BACKUP_CANNOT_LIST_SCHEMA_FILES_61=An error occurred while \
+ attempting to obtain a list of the files in directory %s to include in the \
+ schema backup:  %s
+SEVERE_ERR_SCHEMA_BACKUP_CANNOT_BACKUP_SCHEMA_FILE_62=An error occurred while \
+ attempting to back up schema file %s:  %s
+SEVERE_ERR_SCHEMA_BACKUP_CANNOT_CLOSE_ZIP_STREAM_63=An error occurred while \
+ trying to close the schema archive file %s in directory %s:  %s
+SEVERE_ERR_SCHEMA_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR_64=An error occurred \
+ while attempting to update the backup descriptor file %s with information \
+ about the schema backup:  %s
+SEVERE_ERR_SCHEMA_RESTORE_NO_SUCH_BACKUP_65=Unable to restore or verify \
+ schema backup %s in directory %s because no such backup exists
+SEVERE_ERR_SCHEMA_RESTORE_NO_BACKUP_FILE_66=Unable to restore or verify \
+ schema backup %s in directory %s because the archive filename could not be \
+ determined
+SEVERE_ERR_SCHEMA_RESTORE_NO_SUCH_FILE_67=Unable to restore or verify schema \
+ backup %s because the specified archive file %s does not exist
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_CHECK_FOR_ARCHIVE_68=Unable to restore or \
+ verify schema backup %s because an error occurred while trying to determine \
+ whether backup archive %s exists:  %s
+SEVERE_ERR_SCHEMA_RESTORE_UNKNOWN_DIGEST_69=Unable to restore or verify \
+ schema backup %s because an unsigned hash of this backup is available but the \
+ server cannot determine the digest algorithm used to generate this hash
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_GET_DIGEST_70=Unable to restore or verify \
+ schema backup %s because it has an unsigned hash that uses an unknown or \
+ unsupported digest algorithm of %s
+SEVERE_ERR_SCHEMA_RESTORE_UNKNOWN_MAC_71=Unable to restore or verify schema \
+ backup %s because a signed hash of this backup is available but the server \
+ cannot determine the MAC algorithm used to generate this hash
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_GET_MAC_72=Unable to restore or verify \
+ schema backup %s because it has a signed hash that uses an unknown or \
+ unsupported MAC algorithm of %s
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_OPEN_BACKUP_FILE_73=Unable to restore or \
+ verify schema backup %s because an error occurred while attempting to open \
+ the backup archive file %s:  %s
+SEVERE_ERR_SCHEMA_RESTORE_UNKNOWN_CIPHER_74=Unable to restore or verify \
+ schema backup %s because it is encrypted but the server cannot determine the \
+ cipher used to perform this encryption
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_GET_CIPHER_75=Unable to restore or verify \
+ schema backup %s because it is encrypted using an unknown or unsupported \
+ cipher of %s
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY_76=Unable to \
+ restore schema backup %s because an error occurred while attempting to rename \
+ the current schema directory from %s to %s:  %s
+NOTICE_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA_77=An error occurred that prevented \
+ the schema backup from being properly restored.  However, the original schema \
+ files that were in place before the start of the restore process have been \
+ preserved and are now in their original location of %s
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA_78=An error occurred that \
+ prevented the schema backup from being properly restored.  The original \
+ schema files that were in place before the start of the restore process have \
+ been preserved and are contained in the %s directory
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_CREATE_SCHEMA_DIRECTORY_79=Unable to restore \
+ schema backup %s because an error occurred while attempting to create a new \
+ empty directory %s into which the files should be restored:  %s
+SEVERE_ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED_80=An error occurred that \
+ prevented the schema backup from being properly restored.  The original \
+ schema files that were in place before the start of the restore process have \
+ been preserved in the %s directory
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_GET_ZIP_ENTRY_81=Unable to restore or verify \
+ schema backup %s because an error occurred while trying to read the next \
+ entry from the archive file %s:  %s
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_CREATE_FILE_82=Unable to restore schema \
+ backup %s because an error occurred while trying to recreate file %s:  %s
+SEVERE_ERR_SCHEMA_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE_83=Unable to restore or \
+ verify schema backup %s because an error occurred while processing archived \
+ file %s:  %s
+SEVERE_ERR_SCHEMA_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE_84=Unable to restore or \
+ verify schema backup %s because an unexpected error occurred while trying to \
+ close the archive file %s:  %s
+NOTICE_SCHEMA_RESTORE_UNSIGNED_HASH_VALID_85=The message digest calculated \
+ from the backup archive matches the digest stored with the backup information
+SEVERE_ERR_SCHEMA_RESTORE_UNSIGNED_HASH_INVALID_86=Unable to restore or \
+ verify schema backup %s because the message digest calculated from the backup \
+ archive does not match the digest stored with the backup information
+NOTICE_SCHEMA_RESTORE_SIGNED_HASH_VALID_87=The signed digest calculated from \
+ the backup archive matches the signature stored with the backup information
+SEVERE_ERR_SCHEMA_RESTORE_SIGNED_HASH_INVALID_88=Unable to restore or verify \
+ schema backup %s because the signed digest calculated from the backup archive \
+ does not match the signature stored with the backup information
+NOTICE_SCHEMA_RESTORE_VERIFY_SUCCESSFUL_89=All tests performed on schema \
+ backup %s from directory %s show that the archive appears to be valid
+NOTICE_SCHEMA_RESTORE_SUCCESSFUL_90=Schema backup %s was successfully \
+ restored from the archive in directory %s
+SEVERE_ERR_TASK_INVALID_STATE_91=The task defined in entry %s is invalid \
+ because it has an invalid state %s
+SEVERE_ERR_TASK_CANNOT_PARSE_SCHEDULED_START_TIME_92=An error occurred while \
+ trying to parse the scheduled start time value %s from task entry %s
+SEVERE_ERR_TASK_CANNOT_PARSE_ACTUAL_START_TIME_93=An error occurred while \
+ trying to parse the actual start time value %s from task entry %s
+SEVERE_ERR_TASK_CANNOT_PARSE_COMPLETION_TIME_94=An error occurred while \
+ trying to parse the completion time value %s from task entry %s
+SEVERE_ERR_TASK_MISSING_ATTR_95=Task entry %s is missing required attribute \
+ %s
+SEVERE_ERR_TASK_MULTIPLE_ATTRS_FOR_TYPE_96=There are multiple instances of \
+ attribute %s in task entry %s
+SEVERE_ERR_TASK_NO_VALUES_FOR_ATTR_97=There are no values for attribute %s in \
+ task entry %s
+SEVERE_ERR_TASK_MULTIPLE_VALUES_FOR_ATTR_98=There are multiple values for \
+ attribute %s in task entry %s
+SEVERE_ERR_TASK_EXECUTE_FAILED_99=An error occurred while executing the task \
+ defined in entry %s:  %s
+SEVERE_ERR_RECURRINGTASK_NO_ID_ATTRIBUTE_100=The provided recurring task \
+ entry does not contain attribute %s which is needed to hold the recurring \
+ task ID
+SEVERE_ERR_RECURRINGTASK_MULTIPLE_ID_TYPES_101=The provided recurring task \
+ entry contains multiple attributes with type %s, which is used to hold the \
+ recurring task ID, but only a single instance is allowed
+SEVERE_ERR_RECURRINGTASK_NO_ID_102=The provided recurring task entry does not \
+ contain any values for the %s attribute, which is used to specify the \
+ recurring task ID
+SEVERE_ERR_RECURRINGTASK_MULTIPLE_ID_VALUES_103=The provided recurring task \
+ entry contains multiple values for the %s attribute, which is used to specify \
+ the recurring task ID, but only a single value is allowed
+SEVERE_ERR_RECURRINGTASK_NO_CLASS_ATTRIBUTE_104=The provided recurring task \
+ entry does not contain attribute %s which is needed to specify the \
+ fully-qualified name of the class providing the task logic
+SEVERE_ERR_RECURRINGTASK_MULTIPLE_CLASS_TYPES_105=The provided recurring task \
+ entry contains multiple attributes with type %s, which is used to hold the \
+ task class name, but only a single instance is allowed
+SEVERE_ERR_RECURRINGTASK_NO_CLASS_VALUES_106=The provided recurring task \
+ entry does not contain any values for the %s attribute, which is used to \
+ specify the fully-qualified name of the class providing the task logic
+SEVERE_ERR_RECURRINGTASK_MULTIPLE_CLASS_VALUES_107=The provided recurring \
+ task entry contains multiple values for the %s attribute, which is used to \
+ specify the task class name, but only a single value is allowed
+SEVERE_ERR_RECURRINGTASK_CANNOT_LOAD_CLASS_108=An error occurred while \
+ attempting to load class %s specified in attribute %s of the provided \
+ recurring task entry:  %s.  Does this class exist in the Directory Server \
+ classpath?
+SEVERE_ERR_RECURRINGTASK_CANNOT_INSTANTIATE_CLASS_AS_TASK_109=An error \
+ occurred while trying to create an instance of class %s as a Directory Server \
+ task.  Is this class a subclass of %s?
+SEVERE_ERR_RECURRINGTASK_CANNOT_INITIALIZE_INTERNAL_110=An error occurred \
+ while attempting to perform internal initialization on an instance of class \
+ %s with the information contained in the provided entry:  %s
+SEVERE_ERR_TASKBE_CONFIG_ENTRY_NULL_111=The configuration entry provided when \
+ attempting to initialize the task backend was null
+SEVERE_ERR_TASKBE_NO_BASE_DNS_112=The task backend configuration entry does \
+ not contain any base DNs.  There must be exactly one base DN for task \
+ information in the Directory Server
+SEVERE_ERR_TASKBE_MULTIPLE_BASE_DNS_113=The task backend configuration entry \
+ contains multiple base DNs.  There must be exactly one base DN for task \
+ information in the Directory Server
+SEVERE_ERR_TASKBE_CANNOT_DECODE_RECURRING_TASK_BASE_DN_114=An error occurred \
+ while attempting to decode recurring task base %s as a DN:  %s
+SEVERE_ERR_TASKBE_CANNOT_DECODE_SCHEDULED_TASK_BASE_DN_115=An error occurred \
+ while attempting to decode scheduled task base %s as a DN:  %s
+INFO_TASKBE_DESCRIPTION_RETENTION_TIME_116=Specifies the length of time in \
+ seconds that task information should be retained after processing on that \
+ task has completed.  Once this period has passed, the task information will \
+ be automatically removed to conserve memory and disk space
+SEVERE_ERR_TASKBE_CANNOT_INITIALIZE_RETENTION_TIME_117=An unexpected error \
+ occurred while attempting to initialize the task retention time \
+ configuration:  %s
+INFO_TASKBE_DESCRIPTION_BACKING_FILE_118=Specifies the path to the backing \
+ file for the task backend.  This LDIF file will hold all the configuration \
+ for the defined scheduled tasks and recurring tasks
+SEVERE_ERR_TASKBE_CANNOT_INITIALIZE_BACKING_FILE_119=An unexpected error \
+ occurred while attempting to initialize the task backing file configuration: \
+ %s
+SEVERE_ERR_TASKBE_NO_BACKING_FILE_120=The updated configuration entry does \
+ not have a value for the required %s attribute, which specifies the path to \
+ the task data backing file
+SEVERE_ERR_TASKBE_BACKING_FILE_EXISTS_121=The specified task data backing \
+ file %s already exists and the Directory Server will not attempt to overwrite \
+ it.  Please delete or rename the existing file before attempting to use that \
+ path for the new backing file, or choose a new path
+SEVERE_ERR_TASKBE_INVALID_BACKING_FILE_PATH_122=The specified path %s for the \
+ new task data backing file appears to be an invalid path.  Please choose a \
+ new path for the task data backing file
+SEVERE_ERR_TASKBE_BACKING_FILE_MISSING_PARENT_123=The parent directory %s for \
+ the new task data backing file %s does not exist.  Please create this \
+ directory before attempting to use this path for the new backing file or \
+ choose a new path
+SEVERE_ERR_TASKBE_BACKING_FILE_PARENT_NOT_DIRECTORY_124=The parent directory \
+ %s for the new task data backing file %s exists but is not a directory. \
+ Please choose a new path for the task data backing file
+SEVERE_ERR_TASKBE_ERROR_GETTING_BACKING_FILE_125=An error occurred while \
+ attempting to determine the new path to the task data backing file:  %s
+SEVERE_ERR_TASKBE_NO_RETENTION_TIME_126=The updated configuration entry does \
+ not have a value for the required %s attribute, which specifies the length of \
+ time in seconds that information about completed tasks should be retained \
+ before they are cleaned up
+SEVERE_ERR_TASKBE_ERROR_GETTING_RETENTION_TIME_127=An error occurred while \
+ attempting to determine the completed task retention time:  %s
+INFO_TASKBE_UPDATED_RETENTION_TIME_128=The completed task retention time has \
+ been updated to %d seconds.  This will take effect immediately
+INFO_TASKBE_UPDATED_BACKING_FILE_129=The path to the task data backing file \
+ has been changed to %s.  A snapshot of the current task configuration has \
+ been written to that file and it will continue to be used for future updates
+SEVERE_ERR_TASKBE_ADD_DISALLOWED_DN_130=New entries in the task backend may \
+ only be added immediately below %s for scheduled tasks or immediately below \
+ %s for recurring tasks
+SEVERE_ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED_131=Modify DN operations are not \
+ supported in the task backend
+INFO_TASKBE_BACKING_FILE_HEADER_132=This file contains the data used by the \
+ Directory Server task scheduler backend.  Do not edit this file directly, as \
+ there is a risk that those changes will be lost.  Scheculed and recurring \
+ task definitions should only be edited using the administration utilities \
+ provided with the Directory Server
+SEVERE_ERR_TASKSCHED_DUPLICATE_RECURRING_ID_133=Unable to add recurring task \
+ %s to the task scheduler because another recurring task already exists with \
+ the same ID
+SEVERE_ERR_TASKSCHED_DUPLICATE_TASK_ID_134=Unable to schedule task %s because \
+ another task already exists with the same ID
+SEVERE_ERR_TASKSCHED_CANNOT_FIND_RECURRING_TASK_135=Task %s has completed \
+ processing and indicates that it is associated with recurring task %s but no \
+ recurring task with that ID is currently defined so it is not possible to \
+ schedule the next iteration
+SEVERE_ERR_TASKSCHED_ERROR_SCHEDULING_RECURRING_ITERATION_136=An error \
+ occurred while attempting to schedule the next iteration of recurring task \
+ %s:  %s
+SEVERE_ERR_TASKSCHED_CANNOT_PARSE_ENTRY_RECOVERABLE_137=An error occurred \
+ while attempting to read an entry from the tasks backing file %s on or near \
+ line %d:  %s.  This is not a fatal error, so the task scheduler will attempt \
+ to continue parsing the file and schedule any additional tasks that it \
+ contains
+FATAL_ERR_TASKSCHED_CANNOT_PARSE_ENTRY_FATAL_138=An error occurred while \
+ attempting to read an entry from the tasks backing file %s on or near line \
+ %d:  %s.  This is an unrecoverable error, and parsing cannot continue
+SEVERE_ERR_TASKSCHED_ENTRY_HAS_NO_PARENT_139=Entry %s read from the tasks \
+ backing file is invalid because it has no parent and does not match the task \
+ root DN of %s
+SEVERE_ERR_TASKSCHED_CANNOT_SCHEDULE_RECURRING_TASK_FROM_ENTRY_140=An error \
+ occurred while attempting to parse entry %s as a recurring task and add it to \
+ the scheduler:  %s
+SEVERE_ERR_TASKSCHED_CANNOT_SCHEDULE_TASK_FROM_ENTRY_141=An error occurred \
+ while attempting to parse entry %s as a task and add it to the scheduler:  %s
+SEVERE_ERR_TASKSCHED_INVALID_TASK_ENTRY_DN_142=Entry %s read from the tasks \
+ backing file %s has a DN which is not valid for a task or recurring task \
+ definition and will be ignored
+SEVERE_ERR_TASKSCHED_ERROR_READING_TASK_BACKING_FILE_143=An error occurred \
+ while attempting to read from the tasks data backing file %s:  %s
+SEVERE_ERR_TASKSCHED_CANNOT_CREATE_BACKING_FILE_144=An error occurred while \
+ attempting to create a new tasks backing file %s for use with the task \
+ scheduler:  %s
+SEVERE_ERR_TASKSCHED_NO_CLASS_ATTRIBUTE_145=The provided task entry does not \
+ contain attribute %s which is needed to specify the fully-qualified name of \
+ the class providing the task logic
+SEVERE_ERR_TASKSCHED_MULTIPLE_CLASS_TYPES_146=The provided task entry \
+ contains multiple attributes with type %s, which is used to hold the task \
+ class name, but only a single instance is allowed
+SEVERE_ERR_TASKSCHED_NO_CLASS_VALUES_147=The provided task entry does not \
+ contain any values for the %s attribute, which is used to specify the \
+ fully-qualified name of the class providing the task logic
+SEVERE_ERR_TASKSCHED_MULTIPLE_CLASS_VALUES_148=The provided task entry \
+ contains multiple values for the %s attribute, which is used to specify the \
+ task class name, but only a single value is allowed
+SEVERE_ERR_TASKSCHED_CANNOT_LOAD_CLASS_149=An error occurred while attempting \
+ to load class %s specified in attribute %s of the provided task entry:  %s. \
+ Does this class exist in the Directory Server classpath?
+SEVERE_ERR_TASKSCHED_CANNOT_INSTANTIATE_CLASS_AS_TASK_150=An error occurred \
+ while trying to create an instance of class %s as a Directory Server task. \
+ Is this class a subclass of %s?
+SEVERE_ERR_TASKSCHED_CANNOT_INITIALIZE_INTERNAL_151=An error occurred while \
+ attempting to perform internal initialization on an instance of class %s with \
+ the information contained in the provided entry:  %s
+SEVERE_WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE_152=An error \
+ occurred while attempting to rename the current tasks backing file from %s to \
+ %s:  %s.  The previous task configuration (which does not reflect the latest \
+ update) may be lost
+SEVERE_ERR_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE_153=An error occurred \
+ while attempting to rename the new tasks backing file from %s to %s:  %s.  If \
+ the Directory Server is restarted, then the task scheduler may not be able to
+SEVERE_ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE_154=An error occurred while \
+ attempting to write the new tasks data backing file %s:  %s.  Configuration \
+ information reflecting the latest update may be lost
+SEVERE_ERR_TASKBE_IMPORT_NOT_SUPPORTED_155=The task backend does not support \
+ LDIF import operations
+INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN_156=The tasks backend is being shut down
+INFO_ROOTDSE_DESCRIPTION_SHOW_ALL_ATTRIBUTES_157=Indicates whether all \
+ attributes in the root DSE should be treated like user attributes (and \
+ therefore returned to clients by default) regardless of the Directory Server \
+ schema configuration
+SEVERE_ERR_ROOTDSE_CANNOT_DETERMINE_ALL_USER_ATTRIBUTES_158=An error occurred \
+ while trying to determine the value of the %s configuration attribute, which \
+ controls whether to treat all root DSE attributes like user attributes:  %s. \
+ The attributes in the root DSE will be treated based on their definition in \
+ the server schema
+INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS_159=The root DSE configuration has been \
+ updated so that configuration attribute %s will now use a value of %s
+SEVERE_ERR_TASKSCHED_REMOVE_RECURRING_EXISTING_ITERATION_160=Unable to remove \
+ recurring task %s because there is already a scheduled iteration of that task \
+ with ID %s that must be removed first
+SEVERE_ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK_161=Unable to remove pending \
+ task %s because no such task exists
+SEVERE_ERR_TASKSCHED_REMOVE_PENDING_NOT_PENDING_162=Unable to remove pending \
+ task %s because the task is no longer pending
+SEVERE_ERR_TASKSCHED_REMOVE_COMPLETED_NO_SUCH_TASK_163=Unable to remove \
+ completed task %s because no such task exists in the list of completed tasks
+SEVERE_ERR_TASKBE_DELETE_INVALID_ENTRY_164=Unable to remove entry %s from the \
+ task backend because its DN is either not appropriate for that backend or it \
+ is not below the scheduled or recurring tasks base entry
+SEVERE_ERR_TASKBE_DELETE_NO_SUCH_TASK_165=Unable to remove entry %s from the \
+ task backend because there is no scheduled task associated with that entry DN
+SEVERE_ERR_TASKBE_DELETE_RUNNING_166=Unable to delete entry %s from the task \
+ backend because the associated task is currently running
+SEVERE_ERR_TASKBE_DELETE_NO_SUCH_RECURRING_TASK_167=Unable to remove entry %s \
+ from the task backend because there is no recurring task associated with that \
+ entry DN
+SEVERE_ERR_TASKBE_SEARCH_INVALID_BASE_168=Unable to process the search \
+ operation in the task backend because the provided base DN %s is not valid \
+ for entries in the task backend
+SEVERE_ERR_TASKBE_SEARCH_NO_SUCH_TASK_169=Unable to process the search \
+ operation in the task backend because there is no scheduled task associated \
+ with the provided search base entry %s
+SEVERE_ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK_170=Unable to process the \
+ search operation in the task backend because there is no recurring task \
+ associated with the provided search base entry %s
+SEVERE_ERR_BACKUP_CONFIG_ENTRY_NULL_171=Unable to initialize the backup \
+ backend because the provided configuration entry is null
+SEVERE_ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN_172=Unable to initialize the \
+ backup backend because an error occurred while attempting to decode the base \
+ DN for the backend:  %s
+INFO_BACKUP_DESCRIPTION_BACKUP_DIR_LIST_173=Specifies the set of directories \
+ that will be accessed by default for search operations in the backup backend. \
+ Backup directories not in this list may still be accessed by directly \
+ specifying the backup directory in the search base DN.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_BACKUP_CANNOT_DETERMINE_BACKUP_DIR_LIST_174=An error occurred \
+ while attempting to determine the backup directory list:  %s.  Initialization \
+ of the backup backend cannot continue
+SEVERE_ERR_BACKUP_GET_ENTRY_NULL_175=Unable to retrieve an entry from the \
+ backup backend because the requested entry was null
+SEVERE_ERR_BACKUP_INVALID_BASE_176=Requested entry %s does not exist in the \
+ backup backend
+SEVERE_ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY_177=Unable to retrieve entry \
+ %s from the backup backend because the requested DN is one level below the \
+ base DN but does not specify a backup directory
+SEVERE_ERR_BACKUP_INVALID_BACKUP_DIRECTORY_178=Unable to retrieve entry %s \
+ from the backup backend because the requested backup directory is invalid: \
+ %s
+SEVERE_ERR_BACKUP_ERROR_GETTING_BACKUP_DIRECTORY_179=An error occurred while \
+ attempting to examine the requested backup directory:  %s
+SEVERE_ERR_BACKUP_NO_BACKUP_ID_IN_DN_180=Unable to retrieve entry %s from the \
+ backup backend because the requested DN is two levels below the base DN but \
+ does not specify a backup ID
+SEVERE_ERR_BACKUP_NO_BACKUP_PARENT_DN_181=Unable to retrieve entry %s from \
+ the backup backend because it does not have a parent
+SEVERE_ERR_BACKUP_NO_BACKUP_DIR_IN_DN_182=Unable to retrieve entry %s from \
+ the backup backend because the DN does not contain the backup directory in \
+ which the requested backup should reside
+SEVERE_ERR_BACKUP_NO_SUCH_BACKUP_183=Backup %s does not exist in backup \
+ directory %s
+SEVERE_ERR_BACKUP_ADD_NOT_SUPPORTED_184=Add operations are not supported in \
+ the backup backend
+SEVERE_ERR_BACKUP_DELETE_NOT_SUPPORTED_185=Delete operations are not \
+ supported in the backup backend
+SEVERE_ERR_BACKUP_MODIFY_NOT_SUPPORTED_186=Modify operations are not \
+ supported in the backup backend
+SEVERE_ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED_187=Modify DN operations are not \
+ supported in the backup backend
+SEVERE_ERR_BACKUP_NO_SUCH_ENTRY_188=The requested entry %s does not exist in \
+ the backup backend
+SEVERE_ERR_BACKUP_EXPORT_NOT_SUPPORTED_189=LDIF export operations are not \
+ supported in the backup backend
+SEVERE_ERR_BACKUP_IMPORT_NOT_SUPPORTED_190=LDIF import operations are not \
+ supported in the backup backend
+SEVERE_ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED_191=Backup and restore \
+ operations are not supported in the backup backend
+SEVERE_ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE_192=Exactly one base DN \
+ must be provided for use with the memory-based backend
+SEVERE_ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS_193=Entry %s already exists in \
+ the memory-based backend
+SEVERE_ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG_194=Entry %s does not belong in \
+ the memory-based backend
+SEVERE_ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST_195=Unable to add entry %s \
+ because its parent entry %s does not exist in the memory-based backend
+SEVERE_ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST_196=Entry %s does not exist in \
+ the memory-based backend
+SEVERE_ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN_197=Cannot delete \
+ entry %s because it has one or more subordinate entries
+SEVERE_ERR_MEMORYBACKEND_MODDN_NOT_SUPPORTED_198=Modify DN operations are not \
+ supported in the memory-based backend
+SEVERE_ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER_199=Unable to create an \
+ LDIF writer:  %s
+SEVERE_ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF_200=Cannot write entry %s \
+ to LDIF:  %s
+SEVERE_ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_READER_201=Unable to create an \
+ LDIF reader:  %s
+SEVERE_ERR_MEMORYBACKEND_ERROR_READING_LDIF_202=An unrecoverable error \
+ occurred while reading from LDIF:  %s
+SEVERE_ERR_MEMORYBACKEND_ERROR_DURING_IMPORT_203=An unexpected error occurred \
+ while processing the import:  %s
+SEVERE_ERR_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED_204=The memory-based \
+ backend does not support backup or restore operations
+SEVERE_ERR_MEMORYBACKEND_CANNOT_RENAME_ENRY_WITH_CHILDREN_205=Cannot rename \
+ entry %s because it has one or more subordinate entries
+SEVERE_ERR_MEMORYBACKEND_CANNOT_RENAME_TO_ANOTHER_BACKEND_206=Cannot rename \
+ entry %s because the target entry is in a different backend
+SEVERE_ERR_MEMORYBACKEND_RENAME_PARENT_DOESNT_EXIST_207=Cannot rename entry \
+ %s because the new parent entry %s doesn't exist
+INFO_SCHEMA_DESCRIPTION_SHOW_ALL_ATTRIBUTES_208=Indicates whether to treat \
+ attributes in the subschema entry as user attributes even if they are marked \
+ operational.  This may provide compatibility with some applications that \
+ expect schema attributes like attributeType and objectClasses to be included \
+ by default even if they are not requested.  Note that the ldapSyntaxes \
+ attribute will always be treated as operational in order to avoid problems \
+ with attempts to modify the schema over protocol
+SEVERE_ERR_SCHEMA_CANNOT_DETERMINE_SHOW_ALL_209=An error occurred while \
+ trying to determine whether to treat all subschema entry attributes as user \
+ attributes regardless of the way they are defined in the schema, as specified \
+ in the ds-cfg-show-all-attributes attribute of configuration entry %s:  %s. \
+ The default behavior, which is to treat the attribute types as defined in the \
+ server schema, will be used
+FATAL_ERR_BACKEND_CANNOT_REGISTER_BASEDN_210=An error occurred while \
+ attempting to register base DN %s in the Directory Server:  %s
+MILD_ERR_SCHEMA_DELETE_MODTYPE_NOT_SUPPORTED_211=The schema backend does not \
+ currently support removing existing schema elements
+MILD_ERR_SCHEMA_INVALID_MODIFICATION_TYPE_212=The schema backend does not \
+ support the %s modification type
+MILD_ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE_213=The schema backend does \
+ not support the modification of the %s attribute type.  Only attribute types, \
+ object classes, name forms, DIT content rules, DIT structure rules, and \
+ matching rule uses may be modified
+MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE_214=An error occurred while \
+ attempting to decode the attribute type "%s":  %s
+MILD_ERR_SCHEMA_MODIFY_ATTRTYPE_ALREADY_EXISTS_215=Unable to add attribute \
+ type  %s to the server schema because there is an existing attribute type \
+ with a conflicting name or OID:  %s
+MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS_216=An error occurred while \
+ attempting to decode the object class "%s":  %s
+MILD_ERR_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_OBJECTCLASS_217=Unable to add \
+ objectclass %s because its superior class of %s is not defined in the server \
+ schema
+MILD_ERR_SCHEMA_MODIFY_OC_UNDEFINED_REQUIRED_ATTR_218=Unable to add \
+ objectclass %s because it requires attribute %s which is not defined in the \
+ server schema
+MILD_ERR_SCHEMA_MODIFY_OC_UNDEFINED_OPTIONAL_ATTR_219=Unable to add \
+ objectclass %s because it allows attribute %s which is not defined in the \
+ server schema
+MILD_ERR_SCHEMA_MODIFY_OBJECTCLASS_ALREADY_EXISTS_220=Unable to add \
+ objectclass %s to the server schema because there is an existing objectclass \
+ with a conflicting name or OID:  %s
+MILD_ERR_SCHEMA_MODIFY_CANNOT_READ_EXISTING_USER_SCHEMA_221=An error occurred \
+ while attempting to read the contents of schema file %s:  %s
+MILD_ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_SCHEMA_222=An error occurred while \
+ attepting to write the updated schema:  %s
+MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM_223=An error occurred while \
+ attempting to decode the name form "%s":  %s
+MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_DCR_224=An error occurred while \
+ attempting to decode the DIT content rule "%s":  %s
+MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_DSR_225=An error occurred while \
+ attempting to decode the DIT structure rule "%s":  %s
+MILD_ERR_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE_226=An error occurred while \
+ attempting to decode the matching rule use "%s":  %s
+MILD_ERR_SCHEMA_MODIFY_DELETE_NO_VALUES_227=The server will not allow \
+ removing all values for the %s attribute type in the server schema
+MILD_ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_ATTRTYPE_228=Unable to add \
+ attribute type %s because it conflicts with multiple existing attribute types \
+ (%s and %s)
+MILD_ERR_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_ATTRIBUTE_TYPE_229=Unable to add \
+ attribute type %s because it references superior attribute type %s which is \
+ not defined in the server schema
+MILD_ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_OBJECTCLASS_230=Unable to \
+ add objectclass %s because it conflicts with multiple existing objectclasses \
+ (%s and %s)
+MILD_ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_NAME_FORM_231=Unable to add \
+ name form %s because it conflicts with multiple existing name forms (%s and \
+ %s)
+MILD_ERR_SCHEMA_MODIFY_NF_UNDEFINED_STRUCTURAL_OC_232=Unable to add name form \
+ %s because it references structural objectclass %s which is not defined in \
+ the server schema
+MILD_ERR_SCHEMA_MODIFY_NF_UNDEFINED_REQUIRED_ATTR_233=Unable to add name form \
+ %s because it references required attribute type %s which is not defined in \
+ the server schema
+MILD_ERR_SCHEMA_MODIFY_NF_UNDEFINED_OPTIONAL_ATTR_234=Unable to add name form \
+ %s because it references optional attribute type %s which is not defined in \
+ the server schema
+MILD_ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DCR_235=Unable to add DIT \
+ content rule %s because it conflicts with multiple existing DIT content rules \
+ (%s and %s)
+MILD_ERR_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_DCR_236=Unable to add \
+ DIT content rule %s because it references structural objectclass %s which is \
+ already associated with another DIT content rule %s
+MILD_ERR_SCHEMA_MODIFY_DCR_UNDEFINED_STRUCTURAL_OC_237=Unable to add DIT \
+ content rule %s because it references structural objectclass %s which is not \
+ defined in the server schema
+MILD_ERR_SCHEMA_MODIFY_DCR_UNDEFINED_AUXILIARY_OC_238=Unable to add DIT \
+ content rule %s because it references auxiliary objectclass %s which is not \
+ defined in the server schema
+MILD_ERR_SCHEMA_MODIFY_DCR_UNDEFINED_REQUIRED_ATTR_239=Unable to add DIT \
+ content rule %s because it references required attribute type %s which is not \
+ defined in the server schema
+MILD_ERR_SCHEMA_MODIFY_DCR_UNDEFINED_OPTIONAL_ATTR_240=Unable to add DIT \
+ content rule %s because it references optional attribute type %s which is not \
+ defined in the server schema
+MILD_ERR_SCHEMA_MODIFY_DCR_UNDEFINED_PROHIBITED_ATTR_241=Unable to add DIT \
+ content rule %s because it references prohibited attribute type %s which is \
+ not defined in the server schema
+MILD_ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DSR_242=Unable to add DIT \
+ structure rule %s because it conflicts with multiple existing DIT structure \
+ rules (%s and %s)
+MILD_ERR_SCHEMA_MODIFY_NAME_FORM_CONFLICT_FOR_ADD_DSR_243=Unable to add DIT \
+ structure rule %s because it references name form %s which is already \
+ associated with another DIT structure rule %s
+MILD_ERR_SCHEMA_MODIFY_DSR_UNDEFINED_NAME_FORM_244=Unable to add DIT \
+ structure rule %s because it references name form %s which is not defined in \
+ the server schema
+MILD_ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_MR_USE_245=Unable to add \
+ matching rule use %s because it conflicts with multiple existing matching \
+ rule uses (%s and %s)
+MILD_ERR_SCHEMA_MODIFY_MR_CONFLICT_FOR_ADD_MR_USE_246=Unable to add matching \
+ rule use %s because it references matching rule %s which is already \
+ associated with another matching rule use %s
+MILD_ERR_SCHEMA_MODIFY_MRU_UNDEFINED_ATTR_247=Unable to add matching rule use \
+ %s because it references attribute type %s which is not defined in the server \
+ schema
+MILD_ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_AT_248=Circular reference detected \
+ for attribute type %s in which the superior type chain references the \
+ attribute type itself
+MILD_ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_OC_249=Circular reference detected \
+ for objectclass %s in which the superior class chain references the \
+ objectclass itself
+MILD_ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_DSR_250=Circular reference detected \
+ for DIT structure rule %s in which the superior rule chain references the DIT \
+ structure rule itself
+MILD_ERR_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_CLEANED_251=An error occurred \
+ while attempting to create copies of the existing schema files before \
+ applying the updates:  %s.  The server was able to restore the original \
+ schema configuration, so no additional cleanup should be required
+MILD_ERR_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_NOT_CLEANED_252=An error \
+ occurred while attempting to create copies of the existing schema files \
+ before applying the updates:  %s.  A problem also occurred when attempting to \
+ restore the original schema configuration, so the server may be left in an \
+ inconsistent state and could require manual cleanup
+MILD_ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_RESTORED_253=An error occurred \
+ while attempting to write new versions of the server schema files:  %s.   The \
+ server was able to restore the original schema configuration, so no \
+ additional cleanup should be required
+MILD_ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_NOT_RESTORED_254=An error \
+ occrred while attempting to write new versions of the server schema files: \
+ %s.  A problem also occurred when attempting to restore the original schema \
+ configuration, so the server may be left in an inconsistent state and could \
+ require manual cleanup
+MILD_ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_ATTRIBUTE_TYPE_255=Unable to remove \
+ attribute type %s from the server schema because no such attribute type is \
+ defined
+MILD_ERR_SCHEMA_MODIFY_REMOVE_AT_SUPERIOR_TYPE_256=Unable to remove attribute \
+ type %s from the server schema because it is referenced as the superior type \
+ for attribute type %s
+MILD_ERR_SCHEMA_MODIFY_REMOVE_AT_IN_OC_257=Unable to remove attribute type %s \
+ from the server schema because it is referenced as a required or optional \
+ attribute type in objectclass %s
+MILD_ERR_SCHEMA_MODIFY_REMOVE_AT_IN_NF_258=Unable to remove attribute type %s \
+ from the server schema because it is referenced as a required or optional \
+ attribute type in name form %s
+MILD_ERR_SCHEMA_MODIFY_REMOVE_AT_IN_DCR_259=Unable to remove attribute type \
+ %s from the server schema because it is referenced as a required, optional, \
+ or prohibited attribute type in DIT content rule %s
+MILD_ERR_SCHEMA_MODIFY_REMOVE_AT_IN_MR_USE_260=Unable to remove attribute \
+ type %s from the server schema because it is referenced by matching rule use \
+ %s
+MILD_ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_OBJECTCLASS_261=Unable to remove \
+ objectclass %s from the server schema because no such objectclass is defined
+MILD_ERR_SCHEMA_MODIFY_REMOVE_OC_SUPERIOR_CLASS_262=Unable to remove \
+ objectclass %s from the server schema because it is referenced as the \
+ superior class for objectclass %s
+MILD_ERR_SCHEMA_MODIFY_REMOVE_OC_IN_NF_263=Unable to remove objectclass %s \
+ from the server schema because it is referenced as the structural class for \
+ name form %s
+MILD_ERR_SCHEMA_MODIFY_REMOVE_OC_IN_DCR_264=Unable to remove objectclass %s \
+ from the server schema because it is referenced as a structural or auxiliary \
+ class for DIT content rule %s
+MILD_ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_NAME_FORM_265=Unable to remove name \
+ form %s from the server schema because no such name form is defined
+MILD_ERR_SCHEMA_MODIFY_REMOVE_NF_IN_DSR_266=Unable to remove name form %s \
+ from the server schema because it is referenced by DIT structure rule %s
+MILD_ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_DCR_267=Unable to remove DIT content \
+ rule %s from the server schema because no such DIT content rule is defined
+MILD_ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_DSR_268=Unable to remove DIT structure \
+ rule %s from the server schema because no such DIT structure rule is defined
+MILD_ERR_SCHEMA_MODIFY_REMOVE_DSR_SUPERIOR_RULE_269=Unable to remove DIT \
+ structure rule %s from the server schema because it is referenced as a \
+ superior rule for DIT structure rule %s
+MILD_ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_MR_USE_270=Unable to remove matching \
+ rule use %s from the server schema because no such matching rule use is \
+ defined
+MILD_ERR_SCHEMA_MODIFY_NF_OC_NOT_STRUCTURAL_271=Unable to add name form %s \
+ because it references objectclass %s which is defined in the server schema \
+ but is not a structural objectclass
+MILD_ERR_SCHEMA_MODIFY_DCR_OC_NOT_STRUCTURAL_272=Unable to add DIT content \
+ rule %s because it references structural objectclass %s which is defined in \
+ the server schema but is not structural
+MILD_ERR_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_NF_273=Unable to add \
+ name form %s because it references structural objectclass %s which is already \
+ associated with another name form %s
+MILD_ERR_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_ATTRIBUTE_TYPE_274=Unable to add \
+ attribute type %s because the superior type %s is marked as OBSOLETE in the \
+ server schema
+MILD_ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR_275=Unable to add attribute type \
+ %s because the associated matching rule %s is marked as OBSOLETE in the \
+ server schema
+MILD_ERR_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_OBJECTCLASS_276=Unable to add object \
+ class %s because the superior class %s is marked as OBSOLETE in the server \
+ schema
+MILD_ERR_SCHEMA_MODIFY_OC_OBSOLETE_REQUIRED_ATTR_277=Unable to add object \
+ class %s because required attribute %s is marked as OBSOLETE in the server \
+ schema
+MILD_ERR_SCHEMA_MODIFY_OC_OBSOLETE_OPTIONAL_ATTR_278=Unable to add object \
+ class %s because optional attribute %s is marked as OBSOLETE in the server \
+ schema
+MILD_ERR_SCHEMA_MODIFY_NF_OC_OBSOLETE_279=Unable to add name form %s because \
+ its structural object class %s is marked as OBSOLETE in the server schema
+MILD_ERR_SCHEMA_MODIFY_NF_OBSOLETE_REQUIRED_ATTR_280=Unable to add name form \
+ %s because it requires attribute type %s which is marked as OBSOLETE in the \
+ server schema
+MILD_ERR_SCHEMA_MODIFY_NF_OBSOLETE_OPTIONAL_ATTR_281=Unable to add name form \
+ %s because it allows attribute type %s which is marked as OBSOLETE in the \
+ server schema
+MILD_ERR_SCHEMA_MODIFY_DCR_STRUCTURAL_OC_OBSOLETE_282=Unable to add DIT \
+ content rule %s because its structural object class %s is marked as OBSOLETE \
+ in the server schema
+MILD_ERR_SCHEMA_MODIFY_DCR_OC_NOT_AUXILIARY_283=Unable to add DIT content \
+ rule %s because it references auxiliary object class %s which is defined in \
+ the server schema but is not an auxiliary class
+MILD_ERR_SCHEMA_MODIFY_DCR_AUXILIARY_OC_OBSOLETE_284=Unable to add DIT \
+ content rule %s because it allows auxiliary object class %s which is marked \
+ as OBSOLETE in the server schema
+MILD_ERR_SCHEMA_MODIFY_DCR_OBSOLETE_REQUIRED_ATTR_285=Unable to add DIT \
+ content rule %s because it requires attribute type %s which is marked as \
+ OBSOLETE in the server schema
+MILD_ERR_SCHEMA_MODIFY_DCR_OBSOLETE_OPTIONAL_ATTR_286=Unable to add DIT \
+ content rule %s because it allows attribute type %s which is marked as \
+ OBSOLETE in the server schema
+MILD_ERR_SCHEMA_MODIFY_DCR_OBSOLETE_PROHIBITED_ATTR_287=Unable to add DIT \
+ content rule %s because it prohibits attribute type %s which is marked as \
+ OBSOLETE in the server schema
+MILD_ERR_SCHEMA_MODIFY_DSR_OBSOLETE_NAME_FORM_288=Unable to add DIT structure \
+ rule %s because its name form %s is marked OBSOLETE in the server schema
+MILD_ERR_SCHEMA_MODIFY_DSR_OBSOLETE_SUPERIOR_RULE_289=Unable to add DIT \
+ structure rule %s because it references superior rule %s whihc is marked as \
+ OBSOLETE in the server schema
+MILD_ERR_SCHEMA_MODIFY_MRU_OBSOLETE_MR_290=Unable to add matching rule use %s \
+ because its matching rule %s is marked OBSOLETE in the server schema
+MILD_ERR_SCHEMA_MODIFY_MRU_OBSOLETE_ATTR_291=Unable to add matching rule use \
+ %s because it references attribute type %s which is marked as OBSOLETE in the \
+ server schema
+MILD_ERR_SCHEMA_MODIFY_DCR_OBSOLETE_AUXILIARY_OC_292=Unable to add DIT \
+ content rule %s because it references auxiliary object class %s which is \
+ marked as OBSOLETE in the server schema
+MILD_ERR_SCHEMA_MODIFY_INSUFFICIENT_PRIVILEGES_293=You do not have sufficient \
+ privileges to modify the Directory Server schema
+SEVERE_ERR_SCHEMA_CANNOT_FIND_CONCAT_FILE_294=Unable to find a file \
+ containing concatenated schema element definitions in order to determine if \
+ any schema changes were made with the server offline.  The file was expected \
+ in the %s directory and should have been named either %s or %s
+SEVERE_ERR_SCHEMA_ERROR_DETERMINING_SCHEMA_CHANGES_295=An error occurred \
+ while attempting to determine whether any schema changes had been made by \
+ directly editing the schema files with the server offline:  %s
+SEVERE_ERR_SCHEMA_CANNOT_WRITE_CONCAT_SCHEMA_FILE_296=An error occurred while \
+ attempting to write file %s containing a concatenated list of all server \
+ schema elements:  %s.  The server may not be able to accurately identify any \
+ schema changes made with the server offline
+NOTICE_BACKEND_ENVIRONMENT_UNUSABLE_297=JE Database Environment corresponding \
+ to backend id %s is corrupt. Restart the Directory Server to reopen the \
+ Environment
+SEVERE_ERR_TASKSCHED_NOT_ALLOWED_TASK_298=The Directory Server is not \
+ configured to allow task %s to be invoked
+INFO_TASK_COMPLETION_BODY_299=Task ID:  %s\r\nTask State:  %s\r\nScheduled \
+ Start Time:  %s\r\nActual Start Time:  %s\r\nCompletion Time:  %s\r\n\r\nLog \
+ Messages:\r\n
diff --git a/opendj-sdk/opends/src/messages/messages/config.properties b/opendj-sdk/opends/src/messages/messages/config.properties
new file mode 100644
index 0000000..7dc291b
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/config.properties
@@ -0,0 +1,2138 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=CONFIG
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+MILD_ERR_CONFIG_ATTR_IS_REQUIRED_1=Configuration attribute %s is required to \
+ have at least one value but the resulted operation would have removed all \
+ values
+MILD_ERR_CONFIG_ATTR_REJECTED_VALUE_2=Provided value %s for configuration \
+ attribute %s was rejected.  The reason provided was:  %s
+MILD_ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED_3=Configuration attribute %s \
+ is single-valued, but multiple values were provided
+MILD_ERR_CONFIG_ATTR_ADD_VALUES_IS_SINGLE_VALUED_4=Configuration attribute %s \
+ is single-valued, but adding the provided value(s) would have given it \
+ multiple values
+MILD_ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS_5=Configuration attribute %s \
+ already contains a value %s
+MILD_ERR_CONFIG_ATTR_NO_SUCH_VALUE_6=Cannot remove value %s from \
+ configuration attribute %s because the specified value does not exist
+MILD_ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE_7=Unable to set the value for \
+ Boolean configuration attribute %s because the provided value %s was not \
+ either 'true' or 'false'
+MILD_ERR_CONFIG_ATTR_NO_INT_VALUE_8=Unable to retrieve the value for \
+ configuration attribute %s as an integer because that attribute does not have \
+ any values
+MILD_ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES_9=Unable to retrieve the value for \
+ configuration attribute %s as an integer because that attribute has multiple \
+ values
+MILD_ERR_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE_10=Unable to retrieve the value \
+ for configuration attribute %s as a Java int because the value is outside the \
+ allowable range for an int
+MILD_ERR_CONFIG_ATTR_INVALID_INT_VALUE_11=Unable to set the value for integer \
+ configuration attribute %s because the provided value %s cannot be \
+ interpreted as an integer value:  %s
+MILD_ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND_12=Unable to set the value for \
+ configuration attribute %s because the provided value %d is less than the \
+ lowest allowed value of %d
+MILD_ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND_13=Unable to set the value for \
+ configuration attribute %s because the provided value %d is greater than the \
+ largest allowed value of %d
+MILD_ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE_14=Unable to parse value %s for \
+ configuration attribute %s as an integer value:  %s
+MILD_ERR_CONFIG_ATTR_NO_STRING_VALUE_15=Unable to retrieve the value for \
+ configuration attribute %s as a string because that attribute does not have \
+ any values
+MILD_ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES_16=Unable to retrieve the value \
+ for configuration attribute %s as a string because that attribute has \
+ multiple values
+MILD_ERR_CONFIG_ATTR_EMPTY_STRING_VALUE_17=An empty value string was provided \
+ for configuration attribute %s
+MILD_ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED_18=The value %s is not included in the \
+ list of acceptable values for configuration attribute %s
+MILD_ERR_CONFIG_ATTR_INVALID_UNIT_19='%s' is not a valid unit for \
+ configuration attribute %s
+MILD_ERR_CONFIG_ATTR_NO_UNIT_DELIMITER_20=Cannot decode %s as an integer \
+ value and a unit for configuration attribute %s because no value/unit \
+ delimiter could be found
+MILD_ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT_21=Could not decode the \
+ integer portion of value %s for configuration attribute %s:  %s
+MILD_ERR_CONFIG_ATTR_INVALID_VALUE_WITH_UNIT_22=The provided value %s for \
+ integer with unit attribute %s is not allowed:  %s
+MILD_ERR_CONFIG_ENTRY_CONFLICTING_CHILD_23=Unable to add configuration entry \
+ %s as a child of configuration entry %s because a child entry was already \
+ found with that DN
+MILD_ERR_CONFIG_ENTRY_NO_SUCH_CHILD_24=Unable to remove entry %s as a child \
+ of configuration entry %s because that entry did not have a child with the \
+ specified DN
+MILD_ERR_CONFIG_ENTRY_CANNOT_REMOVE_NONLEAF_25=Unable to remove entry %s as a \
+ child of configuration entry %s because that entry had children of its own \
+ and non-leaf entries may not be removed
+FATAL_ERR_CONFIG_FILE_DOES_NOT_EXIST_26=The specified configuration file %s \
+ does not exist or is not readable
+FATAL_ERR_CONFIG_FILE_CANNOT_VERIFY_EXISTENCE_27=An unexpected error occurred \
+ while attempting to determine whether configuration file %s exists:  %s
+FATAL_ERR_CONFIG_FILE_CANNOT_OPEN_FOR_READ_28=An error occurred while \
+ attempting to open the configuration file %s for reading:  %s
+FATAL_ERR_CONFIG_FILE_READ_ERROR_29=An error occurred while attempting to \
+ read the contents of configuration file %s:  %s
+MILD_ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED_30=Invalid configuration attribute \
+ %s detected:  the only attribute option allowed in the Directory Server \
+ configuration is "pending" to indicate the set of pending values
+FATAL_ERR_CONFIG_FILE_INVALID_LDIF_ENTRY_31=An error occurred at or near line \
+ %d while trying to parse the configuration from LDIF file %s:  %s
+FATAL_ERR_CONFIG_FILE_EMPTY_32=The specified configuration file %s does not \
+ appear to contain any configuration entries
+FATAL_ERR_CONFIG_FILE_INVALID_BASE_DN_33=The first entry read from LDIF \
+ configuration file %s had a DN of "%s" rather than the expected "%s" which \
+ should be used as the Directory Server configuration root
+FATAL_ERR_CONFIG_FILE_GENERIC_ERROR_34=An unexpected error occurred while \
+ attempting to process the Directory Server configuration file %s:  %s
+FATAL_ERR_CONFIG_FILE_DUPLICATE_ENTRY_35=Configuration entry %s starting at \
+ or near line %s in the LDIF configuration file %s has the same DN as another \
+ entry already read from that file
+FATAL_ERR_CONFIG_FILE_NO_PARENT_36=Configuration entry %s starting at or near \
+ line %d in the configuration LDIF file %s does not appear to have a parent \
+ entry (expected parent DN was %s)
+FATAL_ERR_CONFIG_FILE_UNKNOWN_PARENT_37=The Directory Server was unable to \
+ determine the parent DN for configuration entry %s starting at or near line \
+ %d in the configuration LDIF file %s
+FATAL_ERR_CONFIG_CANNOT_DETERMINE_SERVER_ROOT_38=Unable to determine the \
+ Directory Server instance root from either an environment variable or based \
+ on the location of the configuration file.  Please set an environment \
+ variable named %s with a value containing the absolute path to the server \
+ installation root
+SEVERE_ERR_CONFIG_FILE_WRITE_ERROR_39=An unexpected error occurred while \
+ trying to write configuration entry %s to LDIF:  %s
+SEVERE_ERR_CONFIG_FILE_CLOSE_ERROR_40=An unexpected error occurred while \
+ trying to close the LDIF writer:  %s
+SEVERE_ERR_CONFIG_FILE_UNWILLING_TO_IMPORT_41=The Directory Server \
+ configuration may not be altered by importing a new configuration from LDIF
+FATAL_ERR_CONFIG_LOGGER_CANNOT_GET_BASE_42=An error occurred while attempting \
+ to retrieve the base logger entry cn=Loggers,cn=config from the Directory \
+ Server configuration:  %s
+SEVERE_WARN_CONFIG_LOGGER_BASE_DOES_NOT_EXIST_43=The logger configuration \
+ base cn=Loggers,cn=config does not exist in the Directory Server \
+ configuration.  Logging facilities will not be available until this entry is \
+ created and the Directory Server is restarted
+SEVERE_WARN_CONFIG_LOGGER_NO_ACTIVE_ACCESS_LOGGERS_44=There are no active \
+ access loggers defined in the Directory Server configuration.  No access \
+ logging will be performed
+SEVERE_WARN_CONFIG_LOGGER_NO_ACTIVE_ERROR_LOGGERS_45=There are no active \
+ error loggers defined in the Directory Server configuration.  No error \
+ logging will be performed
+MILD_WARN_CONFIG_LOGGER_NO_ACTIVE_DEBUG_LOGGERS_46=There are no active debug \
+ loggers defined in the Directory Server configuration.  No debug logging will \
+ be performed
+SEVERE_ERR_CONFIG_LOGGER_ENTRY_UNACCEPTABLE_47=Configuration entry %s does \
+ not contain a valid logger configuration:  %s.  It will be ignored
+INFO_CONFIG_UNKNOWN_UNACCEPTABLE_REASON_48=Unknown unacceptable reason
+SEVERE_ERR_CONFIG_LOGGER_CANNOT_CREATE_LOGGER_49=An error occurred while \
+ attempting to create a Directory Server logger from the information in \
+ configuration entry %s:  %s
+SEVERE_ERR_CONFIG_LOGGER_INVALID_OBJECTCLASS_50=Configuration entry %s does \
+ not contain a valid objectclass for a Directory Server access, error, or \
+ debug logger definition
+INFO_CONFIG_LOGGER_DESCRIPTION_CLASS_NAME_51=The fully-qualified name of the \
+ Java class that defines the Directory Server logger.  If this is altered \
+ while the associated logger is enabled, then that logger must be disabled and \
+ re-enabled for the change to take effect
+SEVERE_ERR_CONFIG_LOGGER_NO_CLASS_NAME_52=Configuration entry %s does not \
+ contain a valid value for configuration attribute ds-cfg-logger-class which \
+ specifies the fully-qualified class name for the associated logger
+SEVERE_ERR_CONFIG_LOGGER_INVALID_CLASS_NAME_53=Configuration entry %s has an \
+ invalid value for attribute ds-cfg-logger-class:  %s
+SEVERE_ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS_54=Class %s specified in \
+ attribute ds-cfg-logger-class of configuration entry %s cannot be \
+ instantiated as a Directory Server access logger:  %s
+SEVERE_ERR_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS_55=Class %s specified in \
+ attribute ds-cfg-logger-class of configuration entry %s cannot be \
+ instantiated as a Directory Server error logger:  %s
+SEVERE_ERR_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS_56=Class %s specified in \
+ attribute ds-cfg-logger-class of configuration entry %s cannot be \
+ instantiated as a Directory Server debug logger:  %s
+INFO_CONFIG_LOGGER_DESCRIPTION_ENABLED_57=Indicates whether this Directory \
+ Server logger should be enabled.  Changes to this attribute will take effect \
+ immediately
+SEVERE_ERR_CONFIG_LOGGER_NO_ENABLED_ATTR_58=Configuration entry %s does not \
+ contain a valid value for configuration attribute ds-cfg-logger-enabled which \
+ indicates whether the logger should be enabled for use in the Directory \
+ Server
+SEVERE_ERR_CONFIG_LOGGER_INVALID_ENABLED_VALUE_59=Configuration entry %s has \
+ an invalid value for attribute ds-cfg-logger-enabled:  %s
+INFO_CONFIG_CORE_DESCRIPTION_ALLOW_ATTR_EXCEPTIONS_60=Indicates whether to \
+ allow some flexibility in the characters that may be used in attribute names. \
+ By default, attribute names may only contain ASCII alphabetic letters, \
+ numeric digits, and dashes, and they must begin with a letter.  If attribute \
+ name exceptions are enabled, then the underscore character will also be \
+ allowed and the attribute name may also start with a digit.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_ALLOW_EXCEPTIONS_61=Configuration entry %s has \
+ an invalid value for configuration attribute \
+ ds-cfg-allow-attribute-name-exceptions (it should be a Boolean value of true \
+ or false):  %s
+INFO_CONFIG_CORE_DESCRIPTION_INVALID_SYNTAX_BEHAVIOR_62=Specifies the \
+ behavior that the Directory Server should exhibit if it discovers an \
+ attribute whose value does not conform to the syntax for that attribute. \
+ Acceptable values for this attribute are "reject" to reject the invalid \
+ value, "warn" to accept the invalid value but log a warning message, or \
+ "accept" to accept the invalid value with no warning.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_ENFORCE_STRICT_SYNTAX_63=Configuration entry \
+ %s has an invalid value for configuration attribute \
+ ds-cfg-invalid-attribute-syntax-behavior (it should be one of "accept", \
+ "reject", or "warn" ):  %s
+MILD_ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS_64=Configuration attribute \
+ %s appears to contain multiple pending value sets
+MILD_ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS_65=Configuration attribute %s \
+ appears to contain multiple active value sets
+MILD_ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET_66=Configuration attribute %s does \
+ not contain an active value set
+MILD_ERR_CONFIG_ATTR_INT_INVALID_TYPE_67=Unable to parse value %s for \
+ configuration attribute %s as an integer value because the element was of an \
+ invalid type (%s)
+MILD_ERR_CONFIG_ATTR_INT_INVALID_ARRAY_TYPE_68=Unable to parse value for \
+ configuration attribute %s as a set of integer values because the array \
+ contained elements of an invalid type (%s)
+MILD_ERR_CONFIG_ATTR_INVALID_STRING_VALUE_69=Unable to parse value %s for \
+ configuration attribute %s as a string value:  %s
+MILD_ERR_CONFIG_ATTR_STRING_INVALID_TYPE_70=Unable to parse value %s for \
+ configuration attribute %s as a string value because the element was of an \
+ invalid type (%s)
+MILD_ERR_CONFIG_ATTR_STRING_INVALID_ARRAY_TYPE_71=Unable to parse value for \
+ configuration attribute %s as a set of string values because the array \
+ contained elements of an invalid type (%s)
+MILD_ERR_CONFIG_ATTR_INT_WITH_UNIT_INVALID_TYPE_72=Unable to parse value %s \
+ for configuration attribute %s as an integer with unit value because the \
+ element was of an invalid type (%s)
+MILD_ERR_CONFIG_JMX_ATTR_NO_VALUE_73=Configuration entry %s does not contain \
+ a value for attribute %s
+MILD_ERR_CONFIG_JMX_ATTR_NO_ATTR_74=Configuration entry %s does not contain \
+ attribute %s (or that attribute exists but is not accessible using JMX)
+MILD_ERR_CONFIG_JMX_CANNOT_GET_CONFIG_ENTRY_75=Unable to retrieve \
+ configuration entry %s for access through JMX:  %s
+MILD_ERR_CONFIG_JMX_ATTR_INVALID_VALUE_76=Attempted update to attribute %s of \
+ configuration entry %s over JMX would have resulted in an invalid value:  %s
+MILD_ERR_CONFIG_JMX_UNACCEPTABLE_CONFIG_77=Update to configuration entry %s \
+ over JMX would have resulted in an invalid configuration:  %s
+MILD_ERR_CONFIG_JMX_NO_METHOD_78=There is no method %s for any invokable \
+ component registered with configuration entry %s
+MILD_ERR_CONFIG_CANNOT_GET_CONFIG_ENTRY_79=An error occurred while attempting \
+ to retrieve configuration entry %s:  %s
+INFO_CONFIG_SET_ATTRIBUTE_80=The value of configuration attribute %s has been \
+ set to %s in configuration entry %s
+MILD_ERR_CONFIG_CHANGE_NOT_SUCCESSFUL_81=The attempt to update configuration \
+ entry %s was not successful and one or more problems were encountered:  %s
+SEVERE_ERR_CONFIG_LOGGER_NO_FILE_NAME_82=Configuration entry %s does not \
+ contain a valid value for configuration attribute ds-cfg-log-file which \
+ specifies the log file name for the associated logger
+SEVERE_ERR_CONFIG_JMX_CANNOT_REGISTER_MBEAN_83=The Directory Server could not \
+ register a JMX MBean for the component associated with configuration entry \
+ %s:  %s
+SEVERE_ERR_CONFIG_LDIF_WRITE_ERROR_84=An unexpected error occurred while \
+ trying to export the Directory Server configuration to LDIF:  %s
+INFO_CONFIG_WORK_QUEUE_DESCRIPTION_NUM_THREADS_85=Specifies the number of \
+ worker threads that should be used to process requests, which controls the \
+ number of operations that the server may process concurrently.  The optimal \
+ value depends on the type of system on which the server is running and the \
+ workload it needs to handle, and may best be determined by performance \
+ testing.  Changes to this attribute will take effect immediately
+INFO_CONFIG_WORK_QUEUE_DESCRIPTION_MAX_CAPACITY_86=Specifies the maximum \
+ number of pending requests that may be held in the work queue at any one time \
+ while all worker threads are busy processing other operations.  If this limit \
+ is reached, then any new requests will be rejected.  A value of 0 indicates \
+ that there is no limit.  Changes to this attribute will take effect \
+ immediately
+SEVERE_ERR_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_NUM_WORKER_THREADS_87=An error \
+ occurred while attempting to retrieve the value of the \
+ ds-cfg-num-worker-threads attribute from the %s entry, which is used to \
+ specify the number of worker threads to service the work queue:  %s.  The \
+ Directory Server will use the default value of 24
+SEVERE_ERR_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_QUEUE_CAPACITY_88=An error \
+ occurred while attempting to retrieve the value of the \
+ ds-cfg-max-work-queue-capacity attribute from the %s entry, which is used to \
+ specify the maximum number of pending operations that may be held in the work \
+ queue:  %s.  The Directory Server will use the default value of 0
+SEVERE_WARN_CONFIG_WORK_QUEUE_NUM_THREADS_INVALID_VALUE_89=The value of \
+ configuration attribute ds-cfg-num-worker-threads in configuration entry %s \
+ has an invalid value (%d).  This attribute requires an integer value greater \
+ than zero
+SEVERE_WARN_CONFIG_WORK_QUEUE_CAPACITY_INVALID_VALUE_90=The value of \
+ configuration attribute ds-cfg-max-work-queue-capacity in configuration entry \
+ %s has an invalid value (%d).  This attribute requires an integer value \
+ greater than or equal to zero
+INFO_CONFIG_WORK_QUEUE_CREATED_THREADS_91=%d additional worker threads have \
+ been created to bring the total number of available threads to %d
+INFO_CONFIG_WORK_QUEUE_DESTROYING_THREADS_92=%d worker threads will terminate \
+ as soon as it is convenient to do so (it may take a couple of seconds for the \
+ threads to actually exit) to bring the total number of available threads to \
+ %d
+INFO_CONFIG_WORK_QUEUE_NEW_CAPACITY_93=The work queue capacity has been \
+ updated to use a new value of %d
+SEVERE_ERR_CONFIG_WORK_QUEUE_TOO_MANY_FAILURES_94=Worker thread "%s" has \
+ experienced too many repeated failures while attempting to retrieve the next \
+ operation from the work queue (%d failures experienced, maximum of %d \
+ failures allowed).  This worker thread will be destroyed
+SEVERE_ERR_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR_95=A problem occurred \
+ while trying to create and start an instance of class %s to use as a monitor \
+ provider for the Directory Server work queue:  %s.  No monitor information \
+ will be available for the work queue
+INFO_CONFIG_DESCRIPTION_BACKEND_DIRECTORY_96=The name of the directory in \
+ which backend database files are stored
+SEVERE_ERR_CONFIG_BACKEND_NO_DIRECTORY_97=Configuration entry %s does not \
+ contain a valid value for configuration attribute ds-cfg-backend-directory
+MILD_ERR_CONFIG_ATTR_DN_NULL_98=A null value was provided for DN \
+ configuration attribute %s
+MILD_ERR_CONFIG_ATTR_DN_CANNOT_PARSE_99=An error occurred while trying to \
+ parse value "%s" of attribute %s as a DN:  %s
+MILD_ERR_CONFIG_ATTR_INVALID_DN_VALUE_100=Unable to parse value %s for \
+ configuration attribute %s as a DN:  %s
+MILD_ERR_CONFIG_ATTR_DN_INVALID_TYPE_101=Unable to parse value %s for \
+ configuration attribute %s as a DN because the element was of an invalid type \
+ (%s)
+MILD_ERR_CONFIG_ATTR_DN_INVALID_ARRAY_TYPE_102=Unable to parse value for \
+ configuration attribute %s as a set of DN values because the array contained \
+ elements of an invalid type (%s)
+FATAL_ERR_CONFIG_CANNOT_REGISTER_AS_PRIVATE_SUFFIX_103=An unexpected error \
+ occurred while trying to register the configuration handler base DN "%s" as a \
+ private suffix with the Directory Server:  %s
+SEVERE_ERR_CONFIG_BACKEND_CANNOT_GET_CONFIG_BASE_104=An error occurred while \
+ trying to retrieve configuration entry cn=Backends,cn=config in order to \
+ initialize the Directory Server backends:  %s
+SEVERE_ERR_CONFIG_BACKEND_BASE_DOES_NOT_EXIST_105=The entry \
+ cn=Backends,cn=config does not appear to exist in the Directory Server \
+ configuration.  This is a required entry
+SEVERE_WARN_CONFIG_BACKEND_ENTRY_DOES_NOT_HAVE_BACKEND_CONFIG_106=Configuration \
+ entry %s exists below the backend configuration root of cn=Backends,cn=config \
+ but does not have objectclass ds-cfg-backend that is required for a Directory \
+ Server backend.  This configuration entry will be ignored
+SEVERE_ERR_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY_107=An \
+ unexpected error occurred while interacting with backend configuration entry \
+ %s:  %s
+INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_ENABLED_108=Indicates whether this \
+ backend should be enabled for use in the Directory Server.  This may be \
+ altered while the Directory Server is online, but if a backend is disabled, \
+ then it will not be available for use
+INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_CLASS_109=Specifies the fully-qualified \
+ name of the Java class that should provide the core logic for this backend \
+ implementation.  Changes to this configuration attribute will not take effect \
+ until the backend is disabled and re-enabled or the server is restarted
+SEVERE_WARN_CONFIG_BACKEND_NO_ENABLED_ATTR_110=Backend configuration entry %s \
+ does not contain attribute ds-cfg-backend-enabled, which is used to indicate \
+ whether the backend should be enabled or disabled.  Without this attribute, \
+ it will default to being disabled
+INFO_CONFIG_BACKEND_DISABLED_111=The backend defined in configuration entry \
+ %s is marked as disabled and therefore will not be used
+SEVERE_ERR_CONFIG_BACKEND_UNABLE_TO_DETERMINE_ENABLED_STATE_112=An unexpected \
+ error occurred while attempting to determine whether the backend associated \
+ with configuration entry %s should be enabled or disabled:  %s.  It will be \
+ disabled
+SEVERE_ERR_CONFIG_BACKEND_NO_CLASS_ATTR_113=Backend configuration entry %s \
+ does not contain attribute ds-cfg-backend-class, which is used to specify the \
+ name of the class used to provide the backend implementation.  The backend \
+ associated with this configuration entry will be disabled
+SEVERE_ERR_CONFIG_BACKEND_CANNOT_GET_CLASS_114=An unexpected error occurred \
+ while trying to determine the name of the Java class that contains the \
+ implementation for backend %s:  %s.  This backend will be disabled
+SEVERE_ERR_CONFIG_BACKEND_CANNOT_INSTANTIATE_115=The Directory Server was \
+ unable to load class %s and use it to create a backend instance as defined in \
+ configuration entry %s.  The error that occurred was:  %s.  This backend will \
+ be disabled
+SEVERE_ERR_CONFIG_BACKEND_CANNOT_INITIALIZE_116=An error occurred while \
+ trying to initialize a backend loaded from class %s with the information in \
+ configuration entry %s:  %s.  This backend will be disabled
+SEVERE_ERR_CONFIG_BACKEND_CLASS_NOT_BACKEND_117=The class %s specified in \
+ configuration entry %s does not contain a valid Directory Server backend \
+ implementation
+NOTICE_CONFIG_BACKEND_ACTION_REQUIRED_TO_CHANGE_CLASS_118=The requested \
+ change to configuration entry %s would cause the class for the associated \
+ backend to change from %s to %s.  This change will not take effect until the \
+ backend is disabled and re-enabled, or until the Directory Server is \
+ restarted
+NOTICE_CONFIG_BACKEND_CANNOT_REMOVE_BACKEND_WITH_SUBORDINATES_119=The backend \
+ defined in configuration entry %s has one or more subordinate backends.  A \
+ backend may not be removed if it has subordinate backends
+INFO_CONFIG_CORE_DESCRIPTION_MAX_ALLOWED_CONNECTIONS_120=The maximum number \
+ of client connections that may be established to the Directory Server at any \
+ given time.  a value that is less than or equal to zero indicates that there \
+ should be no limit.  Changes to this configuration attribute will take effect \
+ immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_MAX_ALLOWED_CONNECTIONS_121=Configuration \
+ entry %s has an invalid value for configuration attribute \
+ ds-cfg-max-allowed-client-connections (it should be an integer value)
+INFO_CONFIG_LOGGER_CLASS_ACTION_REQUIRED_122=The requested change in the \
+ logger class name from %s to %s in configuration entry %s cannot be \
+ dynamically applied.  This change will not take effect until the logger is \
+ disabled and re-enabled or the Directory Server is restarted
+MILD_ERR_CONFIG_LOGGER_EXISTS_123=Unable to add a new logger entry with DN %s \
+ because there is already a logger registered with that DN
+MILD_ERR_CONFIG_LOGGER_ACCESS_INITIALIZATION_FAILED_124=An error occurred \
+ while trying to initialize an instance of class %s as an access logger as \
+ defined in configuration entry %s:  %s
+MILD_ERR_CONFIG_LOGGER_ERROR_INITIALIZATION_FAILED_125=An error occurred \
+ while trying to initialize an instance of class %s as an error logger as \
+ defined in configuration entry %s:  %s
+MILD_ERR_CONFIG_LOGGER_DEBUG_INITIALIZATION_FAILED_126=An error occurred \
+ while trying to initialize an instance of class %s as a debug logger as \
+ defined in configuration entry %s:  %s
+FATAL_ERR_CONFIG_MONITOR_CANNOT_GET_BASE_127=An error occurred while \
+ attempting to retrieve the base monitor entry cn=Monitor Providers,cn=config \
+ from the Directory Server configuration:  %s
+SEVERE_WARN_CONFIG_MONITOR_BASE_DOES_NOT_EXIST_128=The monitor configuration \
+ base cn=Monitor Providers,cn=config does not exist in the Directory Server \
+ configuration.  Only limited monitoring information will be available
+SEVERE_ERR_CONFIG_MONITOR_ENTRY_UNACCEPTABLE_129=Configuration entry %s does \
+ not contain a valid monitor provider configuration:  %s.  It will be ignored
+SEVERE_ERR_CONFIG_MONITOR_CANNOT_CREATE_MONITOR_130=An error occurred while \
+ attempting to create a Directory Server monitor provider from the information \
+ in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_MONITOR_INVALID_OBJECTCLASS_131=Configuration entry %s does \
+ not contain the ds-cfg-monitor-provider objectclass, which is required for \
+ monitor provider definitions
+INFO_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME_132=The fully-qualified name of \
+ the Java class that defines the Directory Server monitor provider.  If this \
+ is altered while the associated monitor is enabled, then that monitor must be \
+ disabled and re-enabled for the change to take effect
+SEVERE_ERR_CONFIG_MONITOR_NO_CLASS_NAME_133=Configuration entry %s does not \
+ contain a valid value for configuration attribute \
+ ds-cfg-monitor-provider-class which specifies the fully-qualified class name \
+ for the associated monitor provider
+SEVERE_ERR_CONFIG_MONITOR_INVALID_CLASS_NAME_134=Configuration entry %s has \
+ an invalid value for attribute ds-cfg-monitor-provider-class:  %s
+SEVERE_ERR_CONFIG_MONITOR_INVALID_CLASS_135=Class %s specified in \
+ configuration entry %s does not contain a valid monitor provider \
+ implementation:  %s
+INFO_CONFIG_MONITOR_DESCRIPTION_ENABLED_136=Indicates whether this Directory \
+ Server monitor provider should be enabled.  Changes to this attribute will \
+ take effect immediately
+SEVERE_ERR_CONFIG_MONITOR_NO_ENABLED_ATTR_137=Configuration entry %s does not \
+ contain a valid value for configuration attribute \
+ ds-cfg-monitor-provider-enabled which indicates whether the monitor provider \
+ should be enabled for use in the Directory Server
+SEVERE_ERR_CONFIG_MONITOR_INVALID_ENABLED_VALUE_138=Configuration entry %s \
+ has an invalid value for attribute ds-cfg-monitor-provider-enabled:  %s
+INFO_CONFIG_MONITOR_CLASS_ACTION_REQUIRED_139=The requested change in the \
+ monitor class name from %s to %s in configuration entry %s cannot be \
+ dynamically applied.  This change will not take effect until the monitor \
+ provider is disabled and re-enabled or the Directory Server is restarted
+MILD_ERR_CONFIG_MONITOR_INITIALIZATION_FAILED_140=An error occurred while \
+ trying to initialize an instance of class %s as a monitor provider as defined \
+ in configuration entry %s:  %s
+MILD_ERR_CONFIG_MONITOR_EXISTS_141=Unable to add a new monitor provider entry \
+ with DN %s because there is already a monitor provider registered with that \
+ DN
+SEVERE_ERR_CONFIG_CONNHANDLER_CANNOT_GET_CONFIG_BASE_142=An error occurred \
+ while trying to retrieve configuration entry cn=Connection Handlers,cn=config \
+ in order to initialize the Directory Server backends:  %s
+SEVERE_ERR_CONFIG_CONNHANDLER_BASE_DOES_NOT_EXIST_143=The entry cn=Connection \
+ Handlers,cn=config does not appear to exist in the Directory Server \
+ configuration.  This is a required entry
+SEVERE_WARN_CONFIG_CONNHANDLER_ENTRY_DOES_NOT_HAVE_CONNHANDLER_CONFIG_144=Configuration \
+ entry %s exists below the connection handler configuration root of \
+ cn=Connection Handlers,cn=config but does not have objectclass \
+ ds-cfg-connection-handler that is required for a Directory Server connection \
+ handler.  This configuration entry will be ignored
+SEVERE_ERR_CONFIG_CONNHANDLER_ERROR_INTERACTING_WITH_CONNHANDLER_ENTRY_145=An \
+ unexpected error occurred while interacting with connection handler \
+ configuration entry %s:  %s
+INFO_CONFIG_CONNHANDLER_ATTR_DESCRIPTION_ENABLED_146=Indicates whether this \
+ connection handler should be enabled for use in the Directory Server.  This \
+ may be altered while the Directory Server is online, but if a connection \
+ handler is disabled, then it will not be available for use
+INFO_CONFIG_CONNHANDLER_ATTR_DESCRIPTION_CLASS_147=Specifies the \
+ fully-qualified name of the Java class that should provide the core logic for \
+ this connection handler implementation.  Changes to this configuration \
+ attribute will not take effect until the connection handler is disabled and \
+ re-enabled or the server is restarted
+SEVERE_WARN_CONFIG_CONNHANDLER_NO_ENABLED_ATTR_148=Connection handler \
+ configuration entry %s does not contain attribute \
+ ds-cfg-connection-handler-enabled, which is used to indicate whether the \
+ connection handler should be enabled or disabled.  Without this attribute, it \
+ will default to being disabled
+INFO_CONFIG_CONNHANDLER_DISABLED_149=The connection handler defined in \
+ configuration entry %s is marked as disabled and therefore will not be used
+SEVERE_ERR_CONFIG_CONNHANDLER_UNABLE_TO_DETERMINE_ENABLED_STATE_150=An \
+ unexpected error occurred while attempting to determine whether the \
+ connection handler associated with configuration entry %s should be enabled \
+ or disabled:  %s.  It will be disabled
+SEVERE_ERR_CONFIG_CONNHANDLER_NO_CLASS_ATTR_151=Connection handler \
+ configuration entry %s does not contain attribute \
+ ds-cfg-connection-handler-class, which is used to specify the name of the \
+ class used to provide the connection handler implementation.  The connection \
+ handler associated with this configuration entry will be disabled
+SEVERE_ERR_CONFIG_CONNHANDLER_CANNOT_GET_CLASS_152=An unexpected error \
+ occurred while trying to determine the name of the Java class that contains \
+ the implementation for connection handler %s:  %s.  This connection handler \
+ will be disabled
+SEVERE_ERR_CONFIG_CONNHANDLER_CANNOT_INSTANTIATE_153=The Directory Server was \
+ unable to load class %s and use it to create a connection handler instance as \
+ defined in configuration entry %s.  The error that occurred was:  %s.  This \
+ connection handler will be disabled
+SEVERE_ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE_154=An error occurred while \
+ trying to initialize a connection handler loaded from class %s with the \
+ information in configuration entry %s:  %s.  This connection handler will be \
+ disabled
+SEVERE_ERR_CONFIG_CONNHANDLER_UNACCEPTABLE_CONFIG_155=The configuration for \
+ the connection handler defined in configuration entry %s was not acceptable \
+ according to its internal validation.  However, no specific information is \
+ available regarding the problem(s) with the entry
+SEVERE_ERR_CONFIG_BACKEND_UNACCEPTABLE_CONFIG_156=The configuration for the \
+ backend defined in configuration entry %s was not acceptable according to its \
+ internal validation.  However, no specific information is available regarding \
+ the problem(s) with the entry
+SEVERE_ERR_CONFIG_MONITOR_UNACCEPTABLE_CONFIG_157=The configuration for the \
+ monitor provider defined in configuration entry %s was not acceptable \
+ according to its internal validation.  However, no specific information is \
+ available regarding the problem(s) with the entry
+SEVERE_ERR_CONFIG_LOGGER_UNACCEPTABLE_CONFIG_158=The configuration for the \
+ logger defined in configuration entry %s was not acceptable according to its \
+ internal validation.  However, no specific information is available regarding \
+ the problem(s) with the entry
+SEVERE_ERR_CONFIG_CONNHANDLER_CLASS_NOT_CONNHANDLER_159=The class %s \
+ specified in configuration entry %s does not contain a valid Directory Server \
+ connection handler implementation
+SEVERE_ERR_CONFIG_SCHEMA_CANNOT_GET_MR_BASE_160=An error occurred while \
+ trying to retrieve configuration entry cn=Matching Rules,cn=config in order \
+ to initialize the Directory Server matching rules:  %s
+SEVERE_ERR_CONFIG_SCHEMA_MR_BASE_DOES_NOT_EXIST_161=The entry cn=Matching \
+ Rules,cn=config does not appear to exist in the Directory Server \
+ configuration.  This is a required entry
+SEVERE_ERR_CONFIG_SCHEMA_NO_MATCHING_RULES_162=No child entries were found \
+ below the entry cn=Matching Rules,cn=config to define the matching rules for \
+ use in the Directory Server.  This is an error, because the Directory Server \
+ must have matching rules defined to function properly
+SEVERE_WARN_CONFIG_SCHEMA_ENTRY_DOES_NOT_HAVE_MR_CONFIG_163=Configuration \
+ entry %s exists below the matching rule configuration root of cn=Matching \
+ Rules,cn=config but does not have objectclass ds-cfg-matching-rule that is \
+ required for a Directory Server matching rule.  This configuration entry will \
+ be ignored
+INFO_CONFIG_SCHEMA_MR_ATTR_DESCRIPTION_ENABLED_164=Indicates whether this \
+ matching rule should be enabled for use in the Directory Server.  This may be \
+ altered while the Directory Server is online, but if a matching rule is \
+ disabled, after it has been used for one or more attributes then matching may \
+ no longer function as expected for those attributes
+INFO_CONFIG_SCHEMA_MR_ATTR_DESCRIPTION_CLASS_165=Specifies the \
+ fully-qualified name of the Java class that should provide the core logic for \
+ this matching rule implementation.  Changes to this configuration attribute \
+ will not take effect until the matching rule is disabled and re-enabled or \
+ the server is restarted.  Also, changes to the matching rule class for \
+ matching rules that have already been used for one or more attributes may \
+ cause unexpected results when performing matching for those attributes
+SEVERE_WARN_CONFIG_SCHEMA_MR_NO_ENABLED_ATTR_166=Matching rule configuration \
+ entry %s does not contain attribute ds-cfg-matching-rule-enabled, which is \
+ used to indicate whether the matching rule should be enabled or disabled. \
+ Without this attribute, it will default to being disabled
+INFO_CONFIG_SCHEMA_MR_DISABLED_167=The matching rule defined in configuration \
+ entry %s is marked as disabled and therefore will not be used.  If it has \
+ been used in the past for one or more attributes, then matching may no longer \
+ function for values of those attributes
+SEVERE_ERR_CONFIG_SCHEMA_MR_UNABLE_TO_DETERMINE_ENABLED_STATE_168=An \
+ unexpected error occurred while attempting to determine whether the matching \
+ rule associated with configuration entry %s should be enabled or disabled: \
+ %s.  It will be disabled
+SEVERE_ERR_CONFIG_SCHEMA_MR_NO_CLASS_ATTR_169=Matching rule configuration \
+ entry %s does not contain attribute ds-cfg-matching-rule-class, which is used \
+ to specify the name of the class used to provide the matching rule \
+ implementation.  The matching rule associated with this configuration entry \
+ will be disabled
+SEVERE_ERR_CONFIG_SCHEMA_MR_CANNOT_GET_CLASS_170=An unexpected error occurred \
+ while trying to determine the name of the Java class that contains the \
+ implementation for matching rule %s:  %s.  This matching rule will be \
+ disabled
+SEVERE_ERR_CONFIG_SCHEMA_MR_CANNOT_INSTANTIATE_171=The Directory Server was \
+ unable to load class %s and use it to create a matching rule instance as \
+ defined in configuration entry %s.  The error that occurred was:  %s.  This \
+ matching rule will be disabled
+SEVERE_ERR_CONFIG_SCHEMA_MR_CANNOT_INITIALIZE_172=An error occurred while \
+ trying to initialize a matching rule loaded from class %s with the \
+ information in configuration entry %s:  %s.  This matching rule will be \
+ disabled
+SEVERE_WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR_173=The matching rule defined in \
+ configuration entry %s conflicts with another matching rule defined in the \
+ server configuration:  %s.  This matching rule will not be used
+SEVERE_ERR_CONFIG_SCHEMA_CANNOT_GET_SYNTAX_BASE_174=An error occurred while \
+ trying to retrieve configuration entry cn=Syntaxes,cn=config in order to \
+ initialize the Directory Server attribute syntaxes:  %s
+SEVERE_ERR_CONFIG_SCHEMA_SYNTAX_BASE_DOES_NOT_EXIST_175=The entry \
+ cn=Syntaxes,cn=config does not appear to exist in the Directory Server \
+ configuration.  This is a required entry
+SEVERE_ERR_CONFIG_SCHEMA_NO_SYNTAXES_176=No child entries were found below \
+ the entry cn=Syntaxes,cn=config to define the attribute syntaxes for use in \
+ the Directory Server.  This is an error, because the Directory Server must \
+ have syntaxes defined to function properly
+SEVERE_WARN_CONFIG_SCHEMA_ENTRY_DOES_NOT_HAVE_SYNTAX_CONFIG_177=Configuration \
+ entry %s exists below the attribute syntax configuration root of \
+ cn=Syntaxes,cn=config but does not have objectclass ds-cfg-attribute-syntax \
+ that is required for a Directory Server attribute syntax.  This configuration \
+ entry will be ignored
+INFO_CONFIG_SCHEMA_SYNTAX_ATTR_DESCRIPTION_ENABLED_178=Indicates whether this \
+ attribute syntax should be enabled for use in the Directory Server.  This may \
+ be altered while the Directory Server is online, but if a syntax is disabled, \
+ after it has been used for one or more attributes then matching may no longer \
+ function as expected for those attributes
+INFO_CONFIG_SCHEMA_SYNTAX_ATTR_DESCRIPTION_CLASS_179=Specifies the \
+ fully-qualified name of the Java class that should provide the core logic for \
+ this attribute syntax implementation.  Changes to this configuration \
+ attribute will not take effect until the syntax is disabled and re-enabled or \
+ the server is restarted.  Also, changes to the syntax class for attribute \
+ syntaxes that have already been used for one or more attributes may cause \
+ unexpected results when performing matching for those attributes
+SEVERE_WARN_CONFIG_SCHEMA_SYNTAX_NO_ENABLED_ATTR_180=Attribute syntax \
+ configuration entry %s does not contain attribute ds-cfg-syntax-enabled, \
+ which is used to indicate whether the syntax should be enabled or disabled. \
+ Without this attribute, it will default to being disabled
+INFO_CONFIG_SCHEMA_SYNTAX_DISABLED_181=The attribute syntax defined in \
+ configuration entry %s is marked as disabled and therefore will not be used. \
+ If it has been used in the past for one or more attributes, then matching may \
+ no longer function for values of those attributes
+SEVERE_ERR_CONFIG_SCHEMA_SYNTAX_UNABLE_TO_DETERMINE_ENABLED_STATE_182=An \
+ unexpected error occurred while attempting to determine whether the attribute \
+ syntax associated with configuration entry %s should be enabled or disabled: \
+ %s.  It will be disabled
+SEVERE_ERR_CONFIG_SCHEMA_SYNTAX_NO_CLASS_ATTR_183=Matching rule configuration \
+ entry %s does not contain attribute ds-cfg-syntax-class, which is used to \
+ specify the name of the class used to provide the attribute syntax \
+ implementation.  The syntax associated with this configuration entry will be \
+ disabled
+SEVERE_ERR_CONFIG_SCHEMA_SYNTAX_CANNOT_GET_CLASS_184=An unexpected error \
+ occurred while trying to determine the name of the Java class that contains \
+ the implementation for attribute syntax %s:  %s.  This syntax will be \
+ disabled
+SEVERE_ERR_CONFIG_SCHEMA_SYNTAX_CANNOT_INSTANTIATE_185=The Directory Server \
+ was unable to load class %s and use it to create an attribute syntax instance \
+ as defined in configuration entry %s.  The error that occurred was:  %s. \
+ This syntax will be disabled
+SEVERE_ERR_CONFIG_SCHEMA_SYNTAX_CANNOT_INITIALIZE_186=An error occurred while \
+ trying to initialize an attribute syntax loaded from class %s with the \
+ information in configuration entry %s:  %s.  This syntax will be disabled
+SEVERE_WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX_187=The attribute syntax \
+ defined in configuration entry %s conflicts with another syntax defined in \
+ the server configuration:  %s.  This attribute syntax will not be used
+SEVERE_ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR_188=Unable to read the Directory \
+ Server schema definitions because the schema directory %s does not exist
+SEVERE_ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY_189=Unable to read the Directory \
+ Server schema definitions because the schema directory %s exists but is not a \
+ directory
+SEVERE_ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES_190=Unable to read the Directory \
+ Server schema definitions from directory %s because an unexpected error \
+ occurred while trying to list the files in that directory:  %s
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_OPEN_FILE_191=Schema configuration file %s \
+ in directory %s cannot be parsed because an unexpected error occurred while \
+ trying to open the file for reading:  %s
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_READ_LDIF_ENTRY_192=Schema configuration \
+ file %s in directory %s cannot be parsed because an unexpected error occurred \
+ while trying to read its contents as an LDIF entry:  %s
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE_193=Unable to parse an \
+ attribute type definition from schema configuration file %s:  %s
+SEVERE_WARN_CONFIG_SCHEMA_CONFLICTING_ATTR_TYPE_194=An attribute type read \
+ from schema configuration file %s conflicts with another attribute type \
+ already read into the schema:  %s.  The later attribute type definition will \
+ be used
+SEVERE_WARN_CONFIG_SCHEMA_CONFLICTING_OC_195=An objectclass read from schema \
+ configuration file %s conflicts with another objectclass already read into \
+ the schema:  %s.  The later objectclass definition will be used
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_PARSE_OC_196=An objectclass read from schema \
+  configuration file %s could not be parsed:  %s
+SEVERE_ERR_CONFIG_CORE_INVALID_STRUCTURAL_CLASS_BEHAVIOR_197=Configuration \
+ entry %s has an invalid value for configuration attribute \
+ ds-cfg-single-structural-objectclass-behavior (it should be one of "accept", \
+ "reject", or "warn" ):  %s
+INFO_CONFIG_CORE_DESCRIPTION_CHECK_SCHEMA_198=Indicates whether the Directory \
+ Server should perform schema checking for update operations to ensure that \
+ entries are valid according to the server's schema configuration (e.g., all \
+ required attributes are included and no prohibited attributes are present). \
+ Disabling schema checking is generally not recommended because it may allow \
+ invalid entries to be included in the server.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_CHECK_SCHEMA_199=Configuration entry %s has an \
+ invalid value for configuration attribute ds-cfg-check-schema (it should be a \
+ Boolean value of true or false):  %s
+SEVERE_ERR_CONFIG_ENTRYCACHE_CANNOT_INSTALL_DEFAULT_CACHE_200=An unexpected \
+ error occurred that prevented the server from installing a temporary default \
+ entry cache for use until the actual cache could be created from the \
+ configuration:  %s
+SEVERE_ERR_CONFIG_ENTRYCACHE_CANNOT_GET_CONFIG_ENTRY_201=An unexpected error \
+ occurred while attempting to get the "cn=Entry Cache,cn=config" entry, which \
+ holds the entry cache configuration:  %s.  No entry cache will be available
+SEVERE_ERR_CONFIG_ENTRYCACHE_NO_CONFIG_ENTRY_202=The entry cache \
+ configuration entry "cn=Entry Cache,cn=config" does not exist in the \
+ Directory Server configuration.  No entry cache will be available until this \
+ entry is created with a valid entry cache configuration
+SEVERE_ERR_CONFIG_ENTRYCACHE_CANNOT_REGISTER_ADD_LISTENER_203=An error \
+ occurred while attempting to register an add listener to watch for the entry \
+ cache configuration entry to be created:  %s.  If an entry cache \
+ configuration is added while the server is online, it will not be detected \
+ until the server is restarted
+SEVERE_ERR_CONFIG_ENTRYCACHE_CANNOT_REGISTER_DELETE_LISTENER_204=An error \
+ occurred while attempting to register a delete listener to watch for the \
+ entry cache configuration entry to be deleted: %s.  If the entry cache \
+ configuration entry is deleted while the server is online, it will not be \
+ detected until the server is restarted
+SEVERE_ERR_CONFIG_ENTRYCACHE_DESCRIPTION_CACHE_ENABLED_205=Indicates whether \
+ the Directory Server entry cache should be enabled.  If the entry cache is \
+ enabled, it may significantly improve performance by allowing \
+ previously-accessed entries to be retrieved from memory rather than needing \
+ to access the backend repository.  Changes to this configuration attribute \
+ will take effect immediately, but will have the side effect of clearing the \
+ cache contents, which may result in degraded performance for a period of time
+SEVERE_ERR_CONFIG_ENTRYCACHE_NO_ENABLED_ATTR_206=Configuration entry \
+ "cn=Entry Cache,cn=config" does not contain a value for attribute \
+ ds-cfg-entry-cache-enabled, which indicates whether the entry cache is \
+ enabled for use in the server.  As a result, the cache will be disabled
+SEVERE_ERR_CONFIG_ENTRYCACHE_DISABLED_207=The Directory Server entry cache \
+ configured in entry "cn=Entry Cache,cn=config" has been disabled.  No entry \
+ cache will be available within the server
+SEVERE_ERR_CONFIG_ENTRYCACHE_UNABLE_TO_DETERMINE_ENABLED_STATE_208=An \
+ unexpected error occurred while attempting to determine whether the entry \
+ cache configured in entry "cn=Entry Cache,cn=config" is enabled:  %s.  As a \
+ result, the entry cache will be disabled
+SEVERE_ERR_CONFIG_ENTRYCACHE_DESCRIPTION_CACHE_CLASS_209=Specifies the \
+ fully-qualified name of the Java class that should provide the entry cache \
+ implementation.  Changes to this configuration attribute will take effect \
+ immediately, but will have the side effect of clearing the cache contents, \
+ which may result in degraded performance for a period of time
+SEVERE_ERR_CONFIG_ENTRYCACHE_NO_CLASS_ATTR_210=Configuration entry "cn=Entry \
+ Cache,cn=config" does not contain a value for attribute \
+ ds-cfg-entry-cache-class", which specifies the class name for the entry cache \
+ implementation.  As a result, the entry cache will be disabled
+SEVERE_ERR_CONFIG_ENTRYCACHE_CANNOT_DETERMINE_CLASS_211=An unexpected error \
+ occurred while attempting to determine the value of the \
+ ds-cfg-entry-cache-class attribute in configuration entry "cn=Entry \
+ Cache,cn=config":  %s.  The entry cache will be disabled
+SEVERE_ERR_CONFIG_ENTRYCACHE_CANNOT_LOAD_CLASS_212=The class %s defined in \
+ attribute ds-cfg-entry-cache-class of configuration entry "cn=Entry \
+ Cache,cn=config" could not be loaded:  %s.  The entry cache will be disabled
+SEVERE_ERR_CONFIG_ENTRYCACHE_CANNOT_INSTANTIATE_CLASS_213=The class %s \
+ defined in attribute ds-cfg-entry-cache-class of configuration entry \
+ "cn=Entry Cache,cn=config" could not be instantiated as a Directory Server \
+ entry cache:  %s.  As a result, the entry cache will be disabled
+SEVERE_ERR_CONFIG_ENTRYCACHE_CANNOT_INITIALIZE_CACHE_214=An error occurred \
+ while attempting to initialize an instance of class %s for use as the \
+ Directory Server entry cache:  %s.  As a result, the entry cache will be \
+ disabled
+MILD_ERR_CONFIG_ENTRY_CANNOT_REMOVE_CHILD_215=An unexpected error occurred \
+ while attempting to remove entry %s as a child of configuration entry %s:  %s
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM_216=Unable to parse a name \
+ form definition from schema configuration file %s:  %s
+SEVERE_WARN_CONFIG_SCHEMA_CONFLICTING_NAME_FORM_217=A name form read from \
+ schema configuration file %s conflicts with another name form already read \
+ into the schema:  %s.  The later name form definition will be used
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_PARSE_DCR_218=Unable to parse a DIT content \
+ rule definition from schema configuration file %s:  %s
+SEVERE_WARN_CONFIG_SCHEMA_CONFLICTING_DCR_219=A DIT content rule read from \
+ schema configuration file %s conflicts with another DIT content rule already \
+ read into the schema:  %s.  The later DIT content rule definition will be \
+ used
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_PARSE_DSR_220=Unable to parse a DIT \
+ structure rule definition from schema configuration file %s:  %s
+SEVERE_WARN_CONFIG_SCHEMA_CONFLICTING_DSR_221=A DIT structure rule read from \
+ schema configuration file %s conflicts with another DIT structure rule \
+ already read into the schema:  %s.  The later DIT structure rule definition \
+ will be used
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_PARSE_MRU_222=Unable to parse a matching \
+ rule use definition from schema configuration file %s:  %s
+SEVERE_WARN_CONFIG_SCHEMA_CONFLICTING_MRU_223=A matching rule use read from \
+ schema configuration file %s conflicts with another matching rule use already \
+ read into the schema:  %s.  The later matching rule use definition will be \
+ used
+SEVERE_WARN_CONFIG_LOGGER_NO_ROTATION_POLICY_224=No file rotation policy has \
+ been defined in configuration entry %s. No log rotation will take place
+SEVERE_ERR_CONFIG_LOGGER_NO_SIZE_LIMIT_225=No size limit has been defined for \
+ the size based file rotation policy in the configuration entry %s
+SEVERE_ERR_CONFIG_LOGGER_NO_TIME_LIMIT_226=No time limit has been defined for \
+ the time based file rotation policy in the configuration entry %s
+SEVERE_ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY_227=An invalid file rotation \
+ policy %s has been defined in configuration entry %s
+MILD_ERR_CONFIG_ATTR_READ_ONLY_228=Configuration attribute %s is read-only \
+ and its values may not be altered
+SEVERE_ERR_CONFIG_PLUGIN_CANNOT_GET_CONFIG_BASE_229=An error occurred while \
+ trying to retrieve configuration entry cn=Plugins,cn=config in order to \
+ initialize the Directory Server plugins:  %s
+SEVERE_ERR_CONFIG_PLUGIN_BASE_DOES_NOT_EXIST_230=The entry \
+ cn=Plugins,cn=config does not appear to exist in the Directory Server \
+ configuration.  This is a required entry
+SEVERE_WARN_CONFIG_PLUGIN_ENTRY_DOES_NOT_HAVE_PLUGIN_CONFIG_231=Configuration \
+ entry %s exists below the plugin configuration root of cn=Plugins,cn=config \
+ but does not have objectclass ds-cfg-backend that is required for a Directory \
+ Server plugin.  This configuration entry will be ignored
+SEVERE_ERR_CONFIG_PLUGIN_ERROR_INTERACTING_WITH_PLUGIN_ENTRY_232=An \
+ unexpected error occurred while interacting with backend configuration entry \
+ %s:  %s
+INFO_CONFIG_PLUGIN_ATTR_DESCRIPTION_ENABLED_233=Indicates whether this plugin \
+ should be enabled for use in the Directory Server.  This may be altered while \
+ the Directory Server is online, and will take effect immediately
+SEVERE_WARN_CONFIG_PLUGIN_NO_ENABLED_ATTR_234=Plugin configuration entry %s \
+ does not contain attribute ds-cfg-plugin-enabled, which is used to indicate \
+ whether the plugin should be enabled or disabled.  Without this attribute, it \
+ will default to being disabled
+INFO_CONFIG_PLUGIN_DISABLED_235=The plugin defined in configuration entry %s \
+ is marked as disabled and therefore will not be used
+SEVERE_ERR_CONFIG_PLUGIN_UNABLE_TO_DETERMINE_ENABLED_STATE_236=An unexpected \
+ error occurred while attempting to determine whether the plugin associated \
+ with configuration entry %s should be enabled or disabled:  %s.  It will be \
+ disabled
+INFO_CONFIG_PLUGIN_ATTR_DESCRIPTION_PLUGIN_TYPE_237=Specifies the plugin \
+ type(s) for this plugin, which control the times when this plugin will be \
+ invoked during processing.  This value is only read when the plugin is loaded \
+ and initialized, so changes to this attribute will not take effect until the \
+ plugin is disabled and re-enabled, or until the server is restarted
+INFO_CONFIG_PLUGIN_ATTR_DESCRIPTION_CLASS_238=Specifies the fully-qualified \
+ name of the Java class that should provide the core logic for this plugin \
+ implementation.  Changes to this configuration attribute will not take effect \
+ until the plugin is disabled and re-enabled or the server is restarted
+SEVERE_ERR_CONFIG_PLUGIN_NO_PLUGIN_TYPES_239=Plugin configuration entry %s \
+ does not contain attribute ds-cfg-plugin-type, which is used to specify the \
+ name(s) of the plugin type(s) for the plugin.  This is a required attribute, \
+ so this plugin will be disabled
+SEVERE_ERR_CONFIG_PLUGIN_INVALID_PLUGIN_TYPE_240=Plugin configuration entry \
+ %s has an invalid value %s for attribute ds-cfg-plugin-type that does not \
+ name a valid plugin type.  This plugin will be disabled
+SEVERE_ERR_CONFIG_PLUGIN_CANNOT_GET_PLUGIN_TYPES_241=An unexpected error \
+ occurred while trying to determine the set of plugin types for the plugin \
+ defined in configuration entry %s:  %s.  This plugin will be disabled
+SEVERE_ERR_CONFIG_PLUGIN_NO_CLASS_ATTR_242=Plugin configuration entry %s does \
+ not contain attribute ds-cfg-plugin-class, which is used to specify the name \
+ of the class used to provide the plugin implementation.  The plugin \
+ associated with this configuration entry will be disabled
+SEVERE_ERR_CONFIG_PLUGIN_CANNOT_GET_CLASS_243=An unexpected error occurred \
+ while trying to determine the name of the Java class that contains the \
+ implementation for plugin %s:  %s.  This plugin will be disabled
+SEVERE_ERR_CONFIG_PLUGIN_CANNOT_INSTANTIATE_244=The Directory Server was \
+ unable to load class %s and use it to create a plugin instance as defined in \
+ configuration entry %s.  The error that occurred was:  %s.  This plugin will \
+ be disabled
+SEVERE_ERR_CONFIG_PLUGIN_CANNOT_INITIALIZE_245=An error occurred while \
+ attempting to initialize an instance of class %s as a Directory Server plugin \
+ using the information in configuration entry %s:  %s.  This plugin will be \
+ disabled
+INFO_CONFIG_CORE_DESCRIPTION_NOTIFY_ABANDONED_OPERATIONS_246=Indicates \
+ whether the Directory Server should send a response to operations that have \
+ been abandoned to the client to know that the server has completed processing \
+ on them.  The LDAP specification prohibits sending a response in such cases, \
+ but some clients may not behave properly if they are waiting on a response \
+ for an operation when there will not be one because it has been abandoned. \
+ Changes to this configuration attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_NOTIFY_ABANDONED_OPERATIONS_247=Configuration \
+ entry %s has an invalid value for configuration attribute \
+ ds-cfg-notify-abandoned-operations (it should be a Boolean value of true or \
+ false):  %s
+SEVERE_ERR_CONFIG_EXTOP_INVALID_CLASS_256=Class %s specified in configuration \
+ entry %s does not contain a valid extended operation handler implementation: \
+ %s
+MILD_ERR_CONFIG_EXTOP_INITIALIZATION_FAILED_261=An error occurred while \
+ trying to initialize an instance of class %s as an extended operation handler \
+ as defined in configuration entry %s:  %s
+FATAL_ERR_CONFIG_SASL_CANNOT_GET_BASE_264=An error occurred while attempting \
+ to retrieve the SASL mechanism handler base entry cn=SASL \
+ Mechanisms,cn=config from the Directory Server configuration:  %s
+SEVERE_WARN_CONFIG_SASL_BASE_DOES_NOT_EXIST_265=The SASL mechanism \
+ configuration base cn=SASL Mechanisms,cn=config does not exist in the \
+ Directory Server configuration.  This entry must be present for the server to \
+ function properly
+SEVERE_ERR_CONFIG_SASL_ENTRY_UNACCEPTABLE_266=Configuration entry %s does not \
+ contain a valid SASL mechanism handler configuration:  %s.  It will be \
+ ignored
+SEVERE_ERR_CONFIG_SASL_CANNOT_CREATE_HANDLER_267=An error occurred while \
+ attempting to create a Directory Server SASL mechanism handler from the \
+ information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_SASL_INVALID_OBJECTCLASS_268=Configuration entry %s does \
+ not contain the ds-cfg-sasl-mechanism-handler objectclass, which is required \
+ for SASL mechanism handler definitions
+INFO_CONFIG_SASL_DESCRIPTION_CLASS_NAME_269=The fully-qualified name of the \
+ Java class that defines the Directory Server SASL mechanism handler.  If this \
+ is altered while the associated handler is enabled, then that handler must be \
+ disabled and re-enabled for the change to take effect
+SEVERE_ERR_CONFIG_SASL_NO_CLASS_NAME_270=Configuration entry %s does not \
+ contain a valid value for configuration attribute \
+ ds-cfg-sasl-mechanism-handler-class which specifies the fully-qualified class \
+ name for the associated SASL mechanism handler
+SEVERE_ERR_CONFIG_SASL_INVALID_CLASS_NAME_271=Configuration entry %s has an \
+ invalid value for attribute ds-cfg-sasl-mechanism-handler-class:  %s
+SEVERE_ERR_CONFIG_SASL_INVALID_CLASS_272=Class %s specified in configuration \
+ entry %s does not contain a valid SASL mechanism handler implementation:  %s
+INFO_CONFIG_SASL_DESCRIPTION_ENABLED_273=Indicates whether this Directory \
+ Server SASL mechanism handler should be enabled.  Changes to this attribute \
+ will take effect immediately
+SEVERE_ERR_CONFIG_SASL_NO_ENABLED_ATTR_274=Configuration entry %s does not \
+ contain a valid value for configuration attribute \
+ ds-cfg-sasl-mechanism-handler-enabled which indicates whether the SASL \
+ mechanism handler should be enabled for use in the Directory Server
+SEVERE_ERR_CONFIG_SASL_INVALID_ENABLED_VALUE_275=Configuration entry %s has \
+ an invalid value for attribute ds-cfg-sasl-mechanism-handler-enabled:  %s
+INFO_CONFIG_SASL_CLASS_ACTION_REQUIRED_276=The requested change in the SASL \
+ mechanism handler class name from %s to %s in configuration entry %s cannot \
+ be dynamically applied.  This change will not take effect until the handler \
+ is disabled and re-enabled or the Directory Server is restarted
+MILD_ERR_CONFIG_SASL_INITIALIZATION_FAILED_277=An error occurred while trying \
+ to initialize an instance of class %s as a SASL mechanism handler as defined \
+ in configuration entry %s:  %s
+MILD_ERR_CONFIG_SASL_EXISTS_278=Unable to add a new SASL mechanism handler \
+ entry with DN %s because there is already a handler registered with that DN
+SEVERE_ERR_CONFIG_SASL_UNACCEPTABLE_CONFIG_279=The configuration for the SASL \
+ mechanism handler defined in configuration entry %s was not acceptable \
+ according to its internal validation.  However, no specific information is \
+ available regarding the problem(s) with the entry
+MILD_ERR_CONFIG_FILE_ADD_ALREADY_EXISTS_280=Entry %s cannot be added to the \
+ Directory Server configuration because another configuration entry already \
+ exists with that DN
+MILD_ERR_CONFIG_FILE_ADD_NO_PARENT_DN_281=Entry %s cannot be added to the \
+ Directory Server configuration because that DN does not have a parent
+MILD_ERR_CONFIG_FILE_ADD_NO_PARENT_282=Entry %s cannot be added to the \
+ Directory Server configuration because its parent entry %s does not exist
+MILD_ERR_CONFIG_FILE_ADD_REJECTED_BY_LISTENER_283=The Directory Server is \
+ unwilling to add configuration entry %s because one of the add listeners \
+ registered with the parent entry %s rejected this change with the message: \
+ %s
+MILD_ERR_CONFIG_FILE_ADD_FAILED_284=An unexpected error occurred while \
+ attempting to add configuration entry %s as a child of entry %s:  %s
+MILD_ERR_CONFIG_FILE_DELETE_NO_SUCH_ENTRY_285=Entry %s cannot be removed from \
+ the Directory Server configuration because the specified entry does not exist
+MILD_ERR_CONFIG_FILE_DELETE_HAS_CHILDREN_286=Entry %s cannot be removed from \
+ the Directory Server configuration because the specified entry has one or \
+ more subordinate entries
+MILD_ERR_CONFIG_FILE_DELETE_NO_PARENT_287=Entry %s cannot be removed from the \
+ Directory Server configuration because the entry does not have a parent and \
+ removing the configuration root entry is not allowed
+MILD_ERR_CONFIG_FILE_DELETE_REJECTED_288=Entry %s cannot be removed from the \
+ Directory Server configuration because one of the delete listeners registered \
+ with the parent entry %s rejected this change with the message:  %s
+MILD_ERR_CONFIG_FILE_DELETE_FAILED_289=An unexpected error occurred while \
+ attempting to remove configuration entry %s as a child of entry %s:  %s
+MILD_ERR_CONFIG_FILE_MODIFY_NO_SUCH_ENTRY_290=Entry %s cannot be modified \
+ because the specified entry does not exist
+MILD_ERR_CONFIG_FILE_MODIFY_REJECTED_BY_CHANGE_LISTENER_291=Entry %s cannot \
+ be modified because one of the configuration change listeners registered for \
+ that entry rejected the change:  %s
+MILD_ERR_CONFIG_FILE_MODIFY_REJECTED_BY_COMPONENT_292=Entry %s cannot be \
+ modified because one of the configurable components registered for that entry \
+ rejected the change:  %s
+MILD_ERR_CONFIG_FILE_SEARCH_NO_SUCH_BASE_293=The search operation cannot be \
+ processed because base entry %s does not exist
+MILD_ERR_CONFIG_FILE_SEARCH_INVALID_SCOPE_294=The search operation cannot be \
+ processed because the specified search scope %s is invalid
+MILD_ERR_CONFIG_FILE_WRITE_CANNOT_CREATE_TEMP_ARCHIVE_295=An error occurred \
+ while attempting to create a temporary file %s to hold the archived versions \
+ of previous Directory Server configurations as a result of a configuration \
+ change:  %s
+MILD_ERR_CONFIG_FILE_WRITE_CANNOT_COPY_EXISTING_ARCHIVE_296=An error occurred \
+ while attempting to copy the archived configurations from %s to temporary \
+ file %s:  %s
+MILD_ERR_CONFIG_FILE_WRITE_CANNOT_COPY_CURRENT_CONFIG_297=An error occurred \
+ while attempting to update the archived configurations in file %s to include \
+ the running configuration from file %s:  %s
+MILD_ERR_CONFIG_FILE_WRITE_CANNOT_RENAME_TEMP_ARCHIVE_298=The attempt to \
+ rename the archived configuration data from %s to %s failed, but the \
+ underlying reason for the failure could not be determined
+MILD_ERR_CONFIG_FILE_WRITE_CANNOT_REPLACE_ARCHIVE_299=The updated archive \
+ containing previous Directory Server configurations could not be renamed from \
+ %s to %s:  %s
+MILD_ERR_CONFIG_FILE_WRITE_CANNOT_EXPORT_NEW_CONFIG_300=An error occurred \
+ while attempting to export the new Directory Server configuration to file %s: \
+ %s
+MILD_ERR_CONFIG_FILE_WRITE_CANNOT_RENAME_NEW_CONFIG_301=An error occurred \
+ while attempting to rename the new Directory Server configuration from file \
+ %s to %s:  %s
+MILD_ERR_CONFIG_FILE_MODDN_NOT_ALLOWED_302=Modify DN operations are not \
+ allowed in the Directory Server configuration
+INFO_CONFIG_LOGGER_SUPPRESS_INTERNAL_OPERATIONS_303=Indicates whether \
+ messages for internal operations should be excluded from the access log file
+SEVERE_ERR_CONFIG_LOGGER_INVALID_SUPPRESS_INT_OPERATION_VALUE_304=Invalid \
+ value specified for attribute %s. Allowed values are true or false
+INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS_305=Specifies the set of base \
+ DNs that should be used for this backend.  It is up to the backend \
+ implementation as to whether changes to this attribute will automatically \
+ take effect
+SEVERE_ERR_CONFIG_BACKEND_NO_BASE_DNS_306=Backend configuration entry %s does \
+ not contain attribute ds-cfg-backend-base-dn, which is used to specify the \
+ set of base DNs for the backend.  This is a required attribute, and therefore \
+ the backend will be disabled
+SEVERE_ERR_CONFIG_BACKEND_UNABLE_TO_DETERMINE_BASE_DNS_307=An unexpected \
+ error occurred while attempting to determine the set of base DNs associated \
+ with the backend defined in configuration entry %s:  %s.  This backend will \
+ be disabled
+INFO_CONFIG_KEYMANAGER_DESCRIPTION_ENABLED_313=Indicates whether the \
+ Directory Server key manager provider should be enabled.  A key manager \
+ provider is required for operations that require access to a key manager \
+ (e.g., communication over SSL).  Changes to this configuration attribute will \
+ take effect immediately, but will only impact future attempts to access the \
+ key manager
+SEVERE_ERR_CONFIG_KEYMANAGER_NO_ENABLED_ATTR_314=Configuration entry "%s" \
+ does not contain a value for attribute ds-cfg-key-manager-provider-enabled, \
+ which indicates whether the key manager provider is enabled for use in the \
+ server
+SEVERE_ERR_CONFIG_KEYMANAGER_DESCRIPTION_CLASS_317=Specifies the \
+ fully-qualified name of the Java class that includes the key manager provider \
+ implementation.  Changes to this configuration attribute will not take effect \
+ until the key manager provider has been disabled and then re-enabled, or \
+ until the server is restarted
+SEVERE_ERR_CONFIG_TRUSTMANAGER_DESCRIPTION_ENABLED_328=Indicates whether the \
+ Directory Server trust manager provider should be enabled.  A trust manager \
+ provider is required for operations that require access to a trust manager \
+ (e.g., communication over SSL).  Changes to this configuration attribute will \
+ take effect immediately, but will only impact future attempts to access the \
+ trust manager
+SEVERE_ERR_CONFIG_TRUSTMANAGER_NO_ENABLED_ATTR_329=Configuration entry "%s" \
+ does not contain a value for attribute ds-cfg-trust-manager-provider-enabled, \
+ which indicates whether the trust manager provider is enabled for use in the \
+ server
+SEVERE_ERR_CONFIG_TRUSTMANAGER_DESCRIPTION_CLASS_332=Specifies the \
+ fully-qualified name of the Java class that includes the trust manager \
+ provider implementation.  Changes to this configuration attribute will not \
+ take effect until the trust manager provider has been disabled and then \
+ re-enabled, or until the server is restarted
+SEVERE_ERR_CONFIG_CERTMAPPER_DESCRIPTION_ENABLED_347=Indicates whether the \
+ Directory Server certificate mapper should be enabled.  A certificate mapper \
+ is used to establish a mapping between a client certificate chain and a user \
+ entry in the Directory Server for SASL EXTERNAL authentication and similar \
+ purposes.  Changes to this configuration attribute will take effect \
+ immediately
+SEVERE_ERR_CONFIG_CERTMAPPER_NO_ENABLED_ATTR_348=Configuration entry "%s" \
+ does not contain a value for attribute ds-cfg-certificate-mapper-enabled, \
+ which indicates whether the certificate mapper is enabled for use in the \
+ server
+SEVERE_ERR_CONFIG_CERTMAPPER_DESCRIPTION_CLASS_351=Specifies the \
+ fully-qualified name of the Java class that includes the certificate mapper \
+ implementation.  Changes to this configuration attribute will not take effect \
+ until the certificate mapper has been disabled and then re-enabled, or until \
+ the server is restarted
+MILD_WARN_CONFIG_LOGGER_NO_RETENTION_POLICY_357=No file retention policy has \
+ been defined in configuration entry %s. No log files will be deleted
+SEVERE_WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY_358=An invalid file \
+ retention policy %s has been defined in configuration entry %s
+SEVERE_WARN_CONFIG_LOGGER_NO_NUMBER_OF_FILES_359=No file number limit has \
+ been defined for the retention policy in the configuration entry %s
+SEVERE_WARN_CONFIG_LOGGER_NO_DISK_SPACE_USED_360=No disk space limit has been \
+ defined for the retention policy in the configuration entry %s
+FATAL_ERR_CONFIG_PWSCHEME_CANNOT_GET_BASE_363=An error occurred while \
+ attempting to retrieve the password storage scheme base entry cn=Password \
+ Storage Schemes,cn=config from the Directory Server configuration:  %s
+SEVERE_WARN_CONFIG_PWSCHEME_BASE_DOES_NOT_EXIST_364=The password storage \
+ scheme configuration base cn=Password Storage Schemes,cn=config does not \
+ exist in the Directory Server configuration.  This entry must be present for \
+ the server to function properly
+SEVERE_ERR_CONFIG_PWSCHEME_ENTRY_UNACCEPTABLE_365=Configuration entry %s does \
+ not contain a valid password storage scheme configuration:  %s.  It will be \
+ ignored
+SEVERE_ERR_CONFIG_PWSCHEME_CANNOT_CREATE_SCHEME_366=An error occurred while \
+ attempting to create a Directory Server password storage scheme from the \
+ information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_PWSCHEME_INVALID_OBJECTCLASS_367=Configuration entry %s \
+ does not contain the ds-cfg-password-storage-scheme objectclass, which is \
+ required for password storage scheme definitions
+INFO_CONFIG_PWSCHEME_DESCRIPTION_CLASS_NAME_368=The fully-qualified name of \
+ the Java class that defines the Directory Server password storage scheme.  If \
+ this is altered while the associated scheme is enabled, then that storage \
+ scheme must be disabled and re-enabled for the change to take effect
+SEVERE_ERR_CONFIG_PWSCHEME_NO_CLASS_NAME_369=Configuration entry %s does not \
+ contain a valid value for configuration attribute \
+ ds-cfg-password-storage-scheme-class which specifies the fully-qualified \
+ class name for the associated password storage scheme
+SEVERE_ERR_CONFIG_PWSCHEME_INVALID_CLASS_NAME_370=Configuration entry %s has \
+ an invalid value for attribute ds-cfg-password-storage-scheme-class:  %s
+SEVERE_ERR_CONFIG_PWSCHEME_INVALID_CLASS_371=Class %s specified in \
+ configuration entry %s does not contain a valid password storage scheme \
+ implementation:  %s
+INFO_CONFIG_PWSCHEME_DESCRIPTION_ENABLED_372=Indicates whether this Directory \
+ Server password storage scheme should be enabled.  Changes to this attribute \
+ will take effect immediately
+SEVERE_ERR_CONFIG_PWSCHEME_NO_ENABLED_ATTR_373=Configuration entry %s does \
+ not contain a valid value for configuration attribute \
+ ds-cfg-password-storage-scheme-enabled which indicates whether the password \
+ storage scheme should be enabled for use in the Directory Server
+SEVERE_ERR_CONFIG_PWSCHEME_INVALID_ENABLED_VALUE_374=Configuration entry %s \
+ has an invalid value for attribute ds-cfg-password-storage-scheme-enabled: \
+ %s
+INFO_CONFIG_PWSCHEME_CLASS_ACTION_REQUIRED_375=The requested change in the \
+ password storage scheme class name from %s to %s in configuration entry %s \
+ cannot be dynamically applied.  This change will not take effect until the \
+ storage scheme is disabled and re-enabled or the Directory Server is \
+ restarted
+MILD_ERR_CONFIG_PWSCHEME_INITIALIZATION_FAILED_376=An error occurred while \
+ trying to initialize an instance of class %s as a password storage scheme as \
+ defined in configuration entry %s:  %s
+MILD_ERR_CONFIG_PWSCHEME_EXISTS_377=Unable to add a new password storage \
+ scheme entry with DN %s because there is already a storage scheme registered \
+ with that DN
+SEVERE_ERR_CONFIG_PWSCHEME_UNACCEPTABLE_CONFIG_378=The configuration for the \
+ password storage scheme defined in configuration entry %s was not acceptable \
+ according to its internal validation.  However, no specific information is \
+ available regarding the problem(s) with the entry
+INFO_CONFIG_PLUGIN_CLASS_ACTION_REQUIRED_379=The requested change in the \
+ plugin class name from %s to %s in configuration entry %s cannot be \
+ dynamically applied.  This change will not take effect until the plugin is \
+ disabled and re-enabled or the Directory Server is restarted
+SEVERE_ERR_CONFIG_LOGGER_NO_FREE_DISK_SPACE_380=No disk space limit has been \
+ defined for the retention policy in the configuration entry %s
+SEVERE_ERR_CONFIG_LOGGER_INVALID_JAVA5_POLICY_381=The free disk space based \
+ retention policy in the configuration entry %s. is not allowed for the \
+ Directory Server when running on pre Java 6 VMs
+INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID_382=Specifies the unique \
+ identifier for this backend.  Changes to this configuration attribute will \
+ not take effect until the backend is disabled and re-enabled or the server is \
+ restarted
+SEVERE_WARN_CONFIG_BACKEND_NO_BACKEND_ID_383=Backend configuration entry %s \
+ does not contain attribute ds-cfg-backend-id, which is used to provide a \
+ unique identifier for the backend.  The backend will be disabled
+SEVERE_WARN_CONFIG_BACKEND_DUPLICATE_BACKEND_ID_384=The backend defined in \
+ configuration entry %s has a backend ID of %s that conflicts with the backend \
+ ID for another backend in the server.  The backend will be disabled
+SEVERE_ERR_CONFIG_BACKEND_UNABLE_TO_DETERMINE_BACKEND_ID_385=An unexpected \
+ error occurred while attempting to determine the backend ID for the backend \
+ defined in configuration entry %s:  %s.  The backend will be disabled
+SEVERE_ERR_CONFIG_BACKUP_CANNOT_GET_MAC_386=An error occurred while \
+ attempting to obtain the %s MAC provider to create the signed hash for the \
+ backup:  %s
+SEVERE_ERR_CONFIG_BACKUP_CANNOT_GET_DIGEST_387=An error occurred while \
+ attempting to obtain the %s message digest to create the hash for the backup: \
+ %s
+SEVERE_ERR_CONFIG_BACKUP_CANNOT_CREATE_ARCHIVE_FILE_388=An error occurred \
+ while trying to create the config archive file %s in directory %s:  %s
+SEVERE_ERR_CONFIG_BACKUP_CANNOT_GET_CIPHER_389=An error occurred while \
+ attempting to obtain the %s cipher to use to encrypt the backup:  %s
+SEVERE_ERR_CONFIG_BACKUP_ZIP_COMMENT_390=%s config backup %s
+SEVERE_ERR_CONFIG_BACKUP_CANNOT_DETERMINE_CONFIG_FILE_LOCATION_391=An error \
+ occurred while attempting to determine the path to the Directory Server \
+ configuration file so that it could be archived:  %s
+SEVERE_ERR_CONFIG_BACKUP_CANNOT_BACKUP_CONFIG_FILE_392=An error occurred \
+ while attempting to back up configuration file %s:  %s
+SEVERE_ERR_CONFIG_BACKUP_CANNOT_BACKUP_ARCHIVED_CONFIGS_393=An error occurred \
+ while attempting to back up the archived previous configurations from file \
+ %s:  %s
+SEVERE_ERR_CONFIG_BACKUP_CANNOT_CLOSE_ZIP_STREAM_394=An error occurred while \
+ trying to close the config archive file %s in directory %s:  %s
+SEVERE_ERR_CONFIG_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR_395=An error \
+ occurred while attempting to update the backup descriptor file %s with \
+ information about the configuration backup:  %s
+SEVERE_ERR_CONFIG_RESTORE_NO_SUCH_BACKUP_396=Unable to restore or verify \
+ configuration backup %s in directory %s because no such backup exists
+SEVERE_ERR_CONFIG_RESTORE_NO_BACKUP_FILE_397=Unable to restore or verify \
+ configuration backup %s in directory %s because the archive filename could \
+ not be determined
+SEVERE_ERR_CONFIG_RESTORE_NO_SUCH_FILE_398=Unable to restore or verify \
+ configuration backup %s because the specified archive file %s does not exist
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_CHECK_FOR_ARCHIVE_399=Unable to restore or \
+ verify configuration backup %s because an error occurred while trying to \
+ determine whether backup archive %s exists:  %s
+SEVERE_ERR_CONFIG_RESTORE_UNKNOWN_DIGEST_400=Unable to restore or verify \
+ configuration backup %s because an unsigned hash of this backup is available \
+ but the server cannot determine the digest algorithm used to generate this \
+ hash
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_GET_DIGEST_401=Unable to restore or verify \
+ configuration backup %s because it has an unsigned hash that uses an unknown \
+ or unsupported digest algorithm of %s
+SEVERE_ERR_CONFIG_RESTORE_UNKNOWN_MAC_402=Unable to restore or verify \
+ configuration backup %s because a signed hash of this backup is available but \
+ the server cannot determine the MAC algorithm used to generate this hash
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_GET_MAC_403=Unable to restore or verify \
+ configuration backup %s because it has a signed hash that uses an unknown or \
+ unsupported MAC algorithm of %s
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_OPEN_BACKUP_FILE_404=Unable to restore or \
+ verify configuration backup %s because an error occurred while attempting to \
+ open the backup archive file %s:  %s
+SEVERE_ERR_CONFIG_RESTORE_UNKNOWN_CIPHER_405=Unable to restore or verify \
+ configuration backup %s because it is encrypted but the server cannot \
+ determine the cipher used to perform this encryption
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_GET_CIPHER_406=Unable to restore or verify \
+ configuration backup %s because it is encrypted using an unknown or \
+ unsupported cipher of %s
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_BACKUP_EXISTING_CONFIG_407=Unable to restore \
+ configuration backup %s because an error occurred while attempting to \
+ temporarily back up the current configuration files from %s to %s:  %s
+NOTICE_CONFIG_RESTORE_RESTORED_OLD_CONFIG_408=An error occurred that \
+ prevented the configuration backup from being properly restored.  However, \
+ the original configuration files that were in place before the start of the \
+ restore process have been preserved and are now in their original location of \
+ %s
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_RESTORE_OLD_CONFIG_409=An error occurred \
+ that prevented the configuration backup from being properly restored.  The \
+ original configuration files that were in place before the start of the \
+ restore process have been preserved and are contained in the %s directory
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_CREATE_CONFIG_DIRECTORY_410=Unable to \
+ restore configuration backup %s because an error occurred while attempting to \
+ create a new empty directory %s into which the files should be restored:  %s
+SEVERE_ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED_411=An error occurred that \
+ prevented the configuration backup from being properly restored.  The \
+ original configuration files that were in place before the start of the \
+ restore process have been preserved in the %s directory
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_GET_ZIP_ENTRY_412=Unable to restore or \
+ verify configuration backup %s because an error occurred while trying to read \
+ the next entry from the archive file %s:  %s
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_CREATE_FILE_413=Unable to restore \
+ configuration backup %s because an error occurred while trying to recreate \
+ file %s:  %s
+SEVERE_ERR_CONFIG_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE_414=Unable to restore \
+ or verify configuration backup %s because an error occurred while processing \
+ archived file %s:  %s
+SEVERE_ERR_CONFIG_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE_415=Unable to restore or \
+ verify configuration backup %s because an unexpected error occurred while \
+ trying to close the archive file %s:  %s
+NOTICE_CONFIG_RESTORE_UNSIGNED_HASH_VALID_416=The message digest calculated \
+ from the backup archive matches the digest stored with the backup information
+SEVERE_ERR_CONFIG_RESTORE_UNSIGNED_HASH_INVALID_417=Unable to restore or \
+ verify configuration backup %s because the message digest calculated from the \
+ backup archive does not match the digest stored with the backup information
+NOTICE_CONFIG_RESTORE_SIGNED_HASH_VALID_418=The signed digest calculated from \
+ the backup archive matches the signature stored with the backup information
+SEVERE_ERR_CONFIG_RESTORE_SIGNED_HASH_INVALID_419=Unable to restore or verify \
+ configuration backup %s because the signed digest calculated from the backup \
+ archive does not match the signature stored with the backup information
+NOTICE_CONFIG_RESTORE_VERIFY_SUCCESSFUL_420=All tests performed on \
+ configuration backup %s from directory %s show that the archive appears to be \
+ valid
+NOTICE_CONFIG_RESTORE_SUCCESSFUL_421=Configuration backup %s was successfully \
+ restored from the archive in directory %s
+SEVERE_ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK_422=The Directory Server \
+ was unable to acquire a shared lock for backend %s:  %s.  This generally \
+ means that the backend is in use by a process that requires an exclusive lock \
+ (e.g., importing from LDIF or restoring a backup).  This backend will be \
+ disabled
+SEVERE_WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK_423=An error occurred \
+ while attempting to release a shared lock for backend %s:  %s.  This may \
+ interfere with operations that require exclusive access, including LDIF \
+ import and restoring a backup
+INFO_CONFIG_FILE_HEADER_424=This file contains the primary Directory Server \
+ configuration.  It must not be directly edited while the server is online. \
+ The server configuration should only be managed using the administration \
+ utilities provided with the Directory Server
+INFO_CONFIG_CORE_DESCRIPTION_ADD_MISSING_RDN_ATTRS_425=Indicates whether the \
+ Directory Server should automatically add missing RDN attributes to an entry \
+ when it is added.  By default, entries added that do not contain the RDN \
+ attribute values in their attribute lists will be rejected because they are \
+ in violation of the LDAP specification.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_ADD_MISSING_RDN_ATTRS_426=Configuration entry \
+ %s has an invalid value for configuration attribute \
+ ds-cfg-add-missing-rdn-attributes (it should be a Boolean value of true or \
+ false):  %s
+INFO_CONFIG_CORE_DESCRIPTION_SERVER_ERROR_RESULT_CODE_427=Specifies the \
+ result code that should be used for responses in which the operation fails \
+ because of an internal server error.  The value should be the integer \
+ equivalent of the corresponding LDAP result code.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_SERVER_ERROR_RESULT_CODE_428=Configuration \
+ entry %s has an invalid value for configuration attribute \
+ ds-cfg-server-error-result-code (it should be an integer value greater than \
+ or equal to 1):  %s
+FATAL_ERR_CONFIG_IDMAPPER_CANNOT_GET_BASE_429=An error occurred while \
+ attempting to retrieve the identity mapper base entry cn=Identity \
+ Mappers,cn=config from the Directory Server configuration:  %s
+SEVERE_WARN_CONFIG_IDMAPPER_BASE_DOES_NOT_EXIST_430=The identity mapper \
+ configuration base cn=Identity Mappers,cn=config does not exist in the \
+ Directory Server configuration.  This entry must be present for the server to \
+ function properly
+SEVERE_ERR_CONFIG_IDMAPPER_ENTRY_UNACCEPTABLE_431=Configuration entry %s does \
+ not contain a valid identity mapper configuration:  %s.  It will be ignored
+SEVERE_ERR_CONFIG_IDMAPPER_CANNOT_CREATE_MAPPER_432=An error occurred while \
+ attempting to create a Directory Server identity mapper from the information \
+ in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_IDMAPPER_INVALID_OBJECTCLASS_433=Configuration entry %s \
+ does not contain the ds-cfg-identity-mapper objectclass, which is required \
+ for identity mapper definitions
+INFO_CONFIG_IDMAPPER_DESCRIPTION_CLASS_NAME_434=The fully-qualified name of \
+ the Java class that defines a Directory Server identity mapper.  If this is \
+ altered while the associated identity mapper is enabled, then that mapper \
+ must be disabled and re-enabled for the change to take effect
+SEVERE_ERR_CONFIG_IDMAPPER_NO_CLASS_NAME_435=Configuration entry %s does not \
+ contain a valid value for configuration attribute \
+ ds-cfg-identity-mapper-class which specifies the fully-qualified class name \
+ for the associated identity mapper
+SEVERE_ERR_CONFIG_IDMAPPER_INVALID_CLASS_NAME_436=Configuration entry %s has \
+ an invalid value for attribute ds-cfg-identity-mapper-class:  %s
+SEVERE_ERR_CONFIG_IDMAPPER_INVALID_CLASS_437=Class %s specified in \
+ configuration entry %s does not contain a valid identity mapper \
+ implementation:  %s
+INFO_CONFIG_IDMAPPER_DESCRIPTION_ENABLED_438=Indicates whether this Directory \
+ Server identity mapper should be enabled.  Changes to this attribute will \
+ take effect immediately
+SEVERE_ERR_CONFIG_IDMAPPER_NO_ENABLED_ATTR_439=Configuration entry %s does \
+ not contain a valid value for configuration attribute \
+ ds-cfg-identity-mapper-enabled which indicates whether the identity mapper \
+ should be enabled for use in the Directory Server
+SEVERE_ERR_CONFIG_IDMAPPER_INVALID_ENABLED_VALUE_440=Configuration entry %s \
+ has an invalid value for attribute ds-cfg-identity-mapper-enabled:  %s
+INFO_CONFIG_IDMAPPER_CLASS_ACTION_REQUIRED_441=The requested change in the \
+ identity mapper class name from %s to %s in configuration entry %s cannot be \
+ dynamically applied.  This change will not take effect until the identity \
+ mapper is disabled and re-enabled or the Directory Server is restarted
+MILD_ERR_CONFIG_IDMAPPER_INITIALIZATION_FAILED_442=An error occurred while \
+ trying to initialize an instance of class %s as an identity mapper as defined \
+ in configuration entry %s:  %s
+MILD_ERR_CONFIG_IDMAPPER_EXISTS_443=Unable to add a new identity mapper entry \
+ with DN %s because there is already an identity mapper registered with that \
+ DN
+SEVERE_ERR_CONFIG_IDMAPPER_UNACCEPTABLE_CONFIG_444=The configuration for the \
+ identity mapper defined in configuration entry %s was not acceptable \
+ according to its internal validation.  However, no specific information is \
+ available regarding the problem(s) with the entry
+INFO_CONFIG_CORE_DESCRIPTION_PROXY_MAPPER_DN_445=Specifies the DN of the \
+ configuration entry for the identity mapper that the Directory Server should \
+ use in conjunction with the proxied authorization V2 control.  Changes to \
+ this configuration attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_PROXY_MAPPER_DN_446=Configuration entry %s has \
+ an invalid value for configuration attribute \
+ ds-cfg-proxied-authorization-identity-mapper-dn (it should be the DN of a \
+ valid identity mapper configuration entry):  %s
+SEVERE_ERR_CONFIG_CORE_NO_PROXY_MAPPER_FOR_DN_447=The proxied authorization \
+ identity mapper DN %s specified in configuration entry %s does not refer to a \
+ valid identity mapper configuration entry
+SEVERE_ERR_CONFIG_IDMAPPER_NO_PROXY_MAPPER_DN_448=The Directory Server does \
+ not have any identity mapper configured for use in conjunction with proxied \
+ authorization V2 operations.  The Directory Server will not be able to \
+ process requests containing the proxied authorization control with a \
+ username-based authorization ID
+SEVERE_ERR_CONFIG_IDMAPPER_INVALID_PROXY_MAPPER_DN_449=The configured proxied \
+ authorization identity mapper DN %s does not refer to an active identity \
+ mapper.  The Directory Server will not be able to process requests containing \
+ the proxied authorization control with a username-based authorization ID
+INFO_CONFIG_CORE_DESCRIPTION_SIZE_LIMIT_450=Specifies the default maximum \
+ number of entries that should be returned to a client when processing a \
+ search operation.  This may be overridden on a per-user basis by including \
+ the ds-rlim-size-limit operational attribute in the user's entry.  Changes to \
+ this configuration attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_SIZE_LIMIT_451=Configuration entry %s has an \
+ invalid value for configuration attribute ds-cfg-size-limit (It should be a \
+ positive integer value specifying the size limit to use, or a value of 0 or \
+ -1 to indicate that no limit should be enforced):  %s
+FATAL_ERR_CONFIG_SYNCH_CANNOT_GET_CONFIG_BASE_452=An error occurred while \
+ attempting to retrieve the Directory Server synchronization provider \
+ configuration base entry cn=Synchronization Providers,cn=config:  %s
+FATAL_ERR_CONFIG_SYNCH_BASE_DOES_NOT_EXIST_453=The Directory Server \
+ synchronization provider base entry cn=Synchronization Providers,cn=config \
+ does not exist.  This entry must be  present in the Directory Server \
+ configuration
+FATAL_ERR_CONFIG_SYNCH_ENTRY_DOES_NOT_HAVE_PROVIDER_CONFIG_454=Configuration \
+ entry %s exists below the Directory Server synchronization provider root but \
+ does not contain attribute ds-cfg-synchronization-provider which must be \
+ present in all synchronization provider configuration entries
+FATAL_ERR_CONFIG_SYNCH_CANNOT_CHECK_FOR_PROVIDER_CONFIG_OC_455=An error \
+ occurred while attempting to determine whether configuration entry %s was a \
+ valid Directory Server synchronization provider:  %s
+INFO_CONFIG_SYNCH_DESCRIPTION_PROVIDER_ENABLED_456=Indicates whether the \
+ associated Directory Server synchronization provider is enabled and should be \
+ used by the server.  This attribute must be present in all synchronization \
+ provider entries and may not be changed while the Directory Server is running
+FATAL_ERR_CONFIG_SYNCH_PROVIDER_NO_ENABLED_ATTR_457=Synchronization provider \
+ configuration entry %s does not contain attribute \
+ ds-cfg-synchronization-provider-enabled which indicates whether the \
+ synchronization provider is enabled for use
+SEVERE_WARN_CONFIG_SYNCH_PROVIDER_DISABLED_458=The Directory Server \
+ synchronization provider defined in configuration entry %s is disabled.  This \
+ provider will not be used
+FATAL_ERR_CONFIG_SYNCH_UNABLE_TO_DETERMINE_ENABLED_STATE_459=An error \
+ occurred while attempting to determine whether the Directory Server \
+ synchronization provider defined in configuration entry %s should be enabled: \
+ %s
+INFO_CONFIG_SYNCH_DESCRIPTION_PROVIDER_CLASS_460=Specifies the \
+ fully-qualified name of the Java class that will provide the logic for the \
+ Directory Server synchronization provider.  This attribute must be present in \
+ all synchronization provider entries and may not be changed while the \
+ Directory Server is running
+FATAL_ERR_CONFIG_SYNCH_NO_CLASS_ATTR_461=Synchronization provider \
+ configuration entry %s does not contain attribute \
+ ds-cfg-synchronization-provider-class which specifies the name of the class \
+ that implements the synchronization provider logic
+FATAL_ERR_CONFIG_SYNCH_UNABLE_TO_DETERMINE_CLASS_462=An error occurred while \
+ attempting to determine the name of the class used to provide the Directory \
+ Server synchronization provider logic from configuration entry %s:  %s
+FATAL_ERR_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS_463=An error occurred \
+ while attempting to load class %s referenced in synchronization provider \
+ configuration entry %s:  %s
+FATAL_ERR_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER_464=An error occurred \
+ while attempting to instantiate class %s referenced in synchronization \
+ provider configuration entry %s:  %s
+FATAL_ERR_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER_465=An error occurred \
+ while attempting to initialize the Directory Server synchronization provider \
+ referenced in configuration entry %s:  %s
+INFO_CONFIG_SYNCH_PROVIDER_HAS_BEEN_DISABLED_466=The synchronization provider \
+ defined in configuration entry %s is currently enabled but the configuration \
+ has changed so that it should be disabled.  This will not take effect until \
+ the Directory Server is restarted
+FATAL_ERR_CONFIG_SYNCH_PROVIDER_CLASS_CHANGED_467=The Java class providing \
+ the logic for the synchronization provider defined in configuration entry %s \
+ has changed from %s to %s.  This will not take effect until the Directory \
+ Server is restarted
+INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_WRITABILITY_468=Specifies the \
+ writability mode for this backend.  The value may be "enabled" if all write \
+ operations will be allowed, "disabled" if all write operations will be \
+ rejected, or "internal-only" if only internal write operations and \
+ synchronization updates will be allowed.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_CONFIG_BACKEND_NO_WRITABILITY_MODE_469=The backend defined in \
+ configuration entry %s does not have a value for configuration attribute \
+ ds-cfg-backend-writability-mode which indicates the writability mode for that \
+ backend.  The backend will be disabled
+SEVERE_ERR_CONFIG_BACKEND_INVALID_WRITABILITY_MODE_470=The backend defined in \
+ configuration entry %s has an invalid writability mode of %s.  The backend \
+ will be disabled
+SEVERE_ERR_CONFIG_BACKEND_UNABLE_TO_DETERMINE_WRITABILITY_471=An unexpected \
+ error occurred while attempting to determine the writability mode for the \
+ backend defined in configuration entry %s:  %s.  The backend will be disabled
+INFO_CONFIG_CORE_DESCRIPTION_WRITABILITY_MODE_472=Specifies the writability \
+ mode for the Directory Server.  The value may be one of "enabled", \
+ "disabled", or "internal-only".  Changes to this configuration attribute will \
+ take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_WRITABILITY_MODE_473=Configuration entry %s \
+ has an invalid value for configuration attribute ds-cfg-writability-mode (the \
+ value should be one of "enabled", "disabled", or "internal-only"):  %s
+INFO_CONFIG_CORE_DESCRIPTION_BIND_WITH_DN_REQUIRES_PW_474=Indicates whether \
+ simple binds that contain a DN will also be required to contain a password. \
+ If this is disabled, then binds with no password will always be treated as \
+ anonymous, even if they contain a bind DN, which can create a security hole \
+ for some kinds of applications.  With this option enabled, then any simple \
+ bind request that contains a DN but no password will be rejected rather than \
+ defaulting to anonymous authentication.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_BIND_WITH_DN_REQUIRES_PW_475=Configuration \
+ entry %s has an invalid value for configuration attribute \
+ ds-cfg-bind-with-dn-requires-password (the value should be either "TRUE" or \
+ "FALSE"):  %s
+FATAL_ERR_CONFIG_PWVALIDATOR_CANNOT_GET_BASE_476=An error occurred while \
+ attempting to retrieve the password validator base entry cn=Password \
+ Validators,cn=config from the Directory Server configuration:  %s
+SEVERE_WARN_CONFIG_PWVALIDATOR_BASE_DOES_NOT_EXIST_477=The password validator \
+ configuration base cn=Password Validators,cn=config does not exist in the \
+ Directory Server configuration.  This entry must be present for the server to \
+ function properly
+SEVERE_ERR_CONFIG_PWVALIDATOR_ENTRY_UNACCEPTABLE_478=Configuration entry %s \
+ does not contain a valid password validator configuration:  %s.  It will be \
+ ignored
+SEVERE_ERR_CONFIG_PWVALIDATOR_CANNOT_CREATE_VALIDATOR_479=An error occurred \
+ while attempting to create a Directory Server password validator from the \
+ information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_PWVALIDATOR_INVALID_OBJECTCLASS_480=Configuration entry %s \
+ does not contain the ds-cfg-password-validator objectclass, which is required \
+ for password validator definitions
+INFO_CONFIG_PWVALIDATOR_DESCRIPTION_CLASS_NAME_481=The fully-qualified name \
+ of the Java class that defines the Directory Server password validator.  If \
+ this is altered while the associated validator is enabled, then that \
+ validator must be disabled and re-enabled for the change to take effect
+SEVERE_ERR_CONFIG_PWVALIDATOR_NO_CLASS_NAME_482=Configuration entry %s does \
+ not contain a valid value for configuration attribute \
+ ds-cfg-password-validator-class which specifies the fully-qualified class \
+ name for the associated password validator
+SEVERE_ERR_CONFIG_PWVALIDATOR_INVALID_CLASS_NAME_483=Configuration entry %s \
+ has an invalid value for attribute ds-cfg-password-validator-class:  %s
+SEVERE_ERR_CONFIG_PWVALIDATOR_INVALID_CLASS_484=Class %s specified in \
+ configuration entry %s does not contain a valid password validator \
+ implementation:  %s
+INFO_CONFIG_PWVALIDATOR_DESCRIPTION_ENABLED_485=Indicates whether this \
+ Directory Server password validator should be enabled.  Changes to this \
+ attribute will take effect immediately
+SEVERE_ERR_CONFIG_PWVALIDATOR_NO_ENABLED_ATTR_486=Configuration entry %s does \
+ not contain a valid value for configuration attribute \
+ ds-cfg-password-validator-enabled which indicates whether the password \
+ validator should be enabled for use in the Directory Server
+SEVERE_ERR_CONFIG_PWVALIDATOR_INVALID_ENABLED_VALUE_487=Configuration entry \
+ %s has an invalid value for attribute ds-cfg-password-validator-enabled:  %s
+INFO_CONFIG_PWVALIDATOR_CLASS_ACTION_REQUIRED_488=The requested change in the \
+ password validator class name from %s to %s in configuration entry %s cannot \
+ be dynamically applied.  This change will not take effect until the validator \
+ is disabled and re-enabled or the Directory Server is restarted
+MILD_ERR_CONFIG_PWVALIDATOR_INITIALIZATION_FAILED_489=An error occurred while \
+ trying to initialize an instance of class %s as a password validator as \
+ defined in configuration entry %s:  %s
+MILD_ERR_CONFIG_PWVALIDATOR_EXISTS_490=Unable to add a new password validator \
+ entry with DN %s because there is already a validator registered with that DN
+SEVERE_ERR_CONFIG_PWVALIDATOR_UNACCEPTABLE_CONFIG_491=The configuration for \
+ the password validator defined in configuration entry %s was not acceptable \
+ according to its internal validation.  However, no specific information is \
+ available regarding the problem(s) with the entry
+FATAL_ERR_CONFIG_PWGENERATOR_CANNOT_GET_BASE_492=An error occurred while \
+ attempting to retrieve the password generator base entry cn=Password \
+ Generators,cn=config from the Directory Server configuration:  %s
+SEVERE_WARN_CONFIG_PWGENERATOR_BASE_DOES_NOT_EXIST_493=The password generator \
+ configuration base cn=Password Generators,cn=config does not exist in the \
+ Directory Server configuration.  This entry must be present for the server to \
+ function properly
+SEVERE_ERR_CONFIG_PWGENERATOR_ENTRY_UNACCEPTABLE_494=Configuration entry %s \
+ does not contain a valid password generator configuration:  %s.  It will be \
+ ignored
+SEVERE_ERR_CONFIG_PWGENERATOR_CANNOT_CREATE_GENERATOR_495=An error occurred \
+ while attempting to create a Directory Server password generator from the \
+ information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_PWGENERATOR_INVALID_OBJECTCLASS_496=Configuration entry %s \
+ does not contain the ds-cfg-password-generator objectclass, which is required \
+ for password generator definitions
+INFO_CONFIG_PWGENERATOR_DESCRIPTION_CLASS_NAME_497=The fully-qualified name \
+ of the Java class that defines the Directory Server password generator.  If \
+ this is altered while the associated generator is enabled, then that \
+ generator must be disabled and re-enabled for the change to take effect
+SEVERE_ERR_CONFIG_PWGENERATOR_NO_CLASS_NAME_498=Configuration entry %s does \
+ not contain a valid value for configuration attribute \
+ ds-cfg-password-generator-class which specifies the fully-qualified class \
+ name for the associated password generator
+SEVERE_ERR_CONFIG_PWGENERATOR_INVALID_CLASS_NAME_499=Configuration entry %s \
+ has an invalid value for attribute ds-cfg-password-generator-class:  %s
+SEVERE_ERR_CONFIG_PWGENERATOR_INVALID_CLASS_500=Class %s specified in \
+ configuration entry %s does not contain a valid password generator \
+ implementation:  %s
+INFO_CONFIG_PWGENERATOR_DESCRIPTION_ENABLED_501=Indicates whether this \
+ Directory Server password generator should be enabled.  Changes to this \
+ attribute will take effect immediately
+SEVERE_ERR_CONFIG_PWGENERATOR_NO_ENABLED_ATTR_502=Configuration entry %s does \
+ not contain a valid value for configuration attribute \
+ ds-cfg-password-generator-enabled which indicates whether the password \
+ generator should be enabled for use in the Directory Server
+SEVERE_ERR_CONFIG_PWGENERATOR_INVALID_ENABLED_VALUE_503=Configuration entry \
+ %s has an invalid value for attribute ds-cfg-password-generator-enabled:  %s
+INFO_CONFIG_PWGENERATOR_CLASS_ACTION_REQUIRED_504=The requested change in the \
+ password generator class name from %s to %s in configuration entry %s cannot \
+ be dynamically applied.  This change will not take effect until the generator \
+ is disabled and re-enabled or the Directory Server is restarted
+MILD_ERR_CONFIG_PWGENERATOR_INITIALIZATION_FAILED_505=An error occurred while \
+ trying to initialize an instance of class %s as a password generator as \
+ defined in configuration entry %s:  %s
+MILD_ERR_CONFIG_PWGENERATOR_EXISTS_506=Unable to add a new password generator \
+ entry with DN %s because there is already a generator registered with that DN
+SEVERE_ERR_CONFIG_PWGENERATOR_UNACCEPTABLE_CONFIG_507=The configuration for \
+ the password generator defined in configuration entry %s was not acceptable \
+ according to its internal validation.  However, no specific information is \
+ available regarding the problem(s) with the entry
+INFO_CONFIG_CORE_DESCRIPTION_DEFAULT_PWPOLICY_DN_508=Specifies the DN of the \
+ configuration entry that defines the default password policy for the \
+ Directory Server, which will be applied for all users for which a custom \
+ password policy is not defined.  This entry must exist and must specify a \
+ valid password policy configuration.  Changes to this configuration attribute \
+ will take effect immediately
+SEVERE_ERR_CONFIG_CORE_NO_DEFAULT_PWPOLICY_509=No default password policy was \
+ configured for the Directory Server.  This must be specified by the \
+ ds-cfg-default-password-policy attribute in configuration entry %s
+SEVERE_ERR_CONFIG_CORE_INVALID_DEFAULT_PWPOLICY_DN_510=Configuration entry %s \
+ has an invalid value for configuration attribute \
+ ds-cfg-default-password-policy (the value should a DN specifying the default \
+ password policy configuration entry):  %s
+SEVERE_ERR_CONFIG_CORE_NO_SUCH_PWPOLICY_511=The value %s for configuration \
+ attribute ds-cfg-default-password-policy does not refer to a valid password \
+ policy configuration entry
+FATAL_ERR_CONFIG_PWPOLICY_CANNOT_GET_BASE_512=An error occurred while \
+ attempting to retrieve the password policy base entry cn=Password \
+ Policies,cn=config from the Directory Server configuration:  %s
+SEVERE_ERR_CONFIG_PWPOLICY_BASE_DOES_NOT_EXIST_513=The password policy \
+ configuration base cn=Password Policies,cn=config does not exist in the \
+ Directory Server configuration.  This entry must be present for the server to \
+ function properly
+SEVERE_ERR_CONFIG_PWPOLICY_NO_POLICIES_514=No password policies have been \
+ defined below the cn=Password Policies,cn=config entry in the Directory \
+ Server configuration.  At least one password policy configuration must be \
+ defined
+SEVERE_ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG_515=The password policy \
+ defined in configuration entry %s is invalid:  %s
+SEVERE_ERR_CONFIG_PWPOLICY_MISSING_DEFAULT_POLICY_516=The Directory Server \
+ default password policy is defined as %s, but that entry does not exist or is \
+ not below the password policy configuration base cn=Password \
+ Policies,cn=config
+SEVERE_WARN_CONFIG_PWPOLICY_CANNOT_DELETE_DEFAULT_POLICY_517=The specified \
+ entry %s is currently defined as the configuration entry for the default \
+ password policy.  The default password policy configuration entry may not be \
+ removed
+INFO_CONFIG_PWPOLICY_REMOVED_POLICY_518=Password policy entry %s has been \
+ removed from the Directory Server configuration.  Any user entries that \
+ explicitly reference this password policy will no longer be allowed to \
+ authenticate
+FATAL_ERR_CONFIG_AUTHZ_CANNOT_GET_ENTRY_519=An error occurred while \
+ attempting to retrieve the Directory Server access control configuration \
+ entry cn=Access Control Handler,cn=config:  %s
+FATAL_ERR_CONFIG_AUTHZ_ENTRY_DOES_NOT_EXIST_520=The Directory Server access \
+ control configuration entry cn=Access Control Handler,cn=config does not \
+ exist.  This entry must be present in the Directory Server configuration
+FATAL_ERR_CONFIG_AUTHZ_ENTRY_DOES_NOT_HAVE_OBJECT_CLASS_521=The Directory \
+ Server access control configuration entry cn=Access Control Handler,cn=config \
+ does not have the correct object class.  This entry must have the object \
+ class ds-cfg-access-control-handler in order to be valid
+INFO_CONFIG_AUTHZ_DESCRIPTION_ENABLED_523=Indicates whether access control is \
+ enabled and should be used by the server.  This attribute is mandatory
+FATAL_ERR_CONFIG_AUTHZ_NO_ENABLED_ATTR_524=The access control configuration \
+ entry %s does not contain attribute ds-cfg-acl-handler-enabled which \
+ indicates whether the access control is enabled for use
+SEVERE_WARN_CONFIG_AUTHZ_DISABLED_525=Access control has been disabled
+NOTICE_CONFIG_AUTHZ_ENABLED_526=Access control has been enabled and will use \
+ the %s implementation
+FATAL_ERR_CONFIG_AUTHZ_UNABLE_TO_DETERMINE_ENABLED_STATE_527=An error \
+ occurred while attempting to determine whether the Directory Server access \
+ control as defined in configuration entry %s should be enabled:  %s
+INFO_CONFIG_AUTHZ_DESCRIPTION_CLASS_528=Specifies the fully-qualified name of \
+ the Java class that will provide the access control implementation for the \
+ Directory Server. This attribute is mandatory
+FATAL_ERR_CONFIG_AUTHZ_NO_CLASS_ATTR_529=The access control configuration \
+ entry %s does not contain attribute ds-cfg-acl-handler-class which specifies \
+ the name of the Java class providing the access control implementation for \
+ the Directory Server
+FATAL_ERR_CONFIG_AUTHZ_UNABLE_TO_DETERMINE_CLASS_530=An error occurred while \
+ attempting to determine the name of the class used to provide the Directory \
+ Server access control implementation from configuration entry %s:  %s
+FATAL_ERR_CONFIG_AUTHZ_UNABLE_TO_LOAD_CLASS_531=An error occurred while \
+ attempting to load class %s referenced in the access control configuration \
+ entry %s:  %s
+FATAL_ERR_CONFIG_AUTHZ_BAD_CLASS_532=The access control implementation class \
+ %s referenced in the access control configuration entry %s does not implement \
+ the %s interface:  %s
+FATAL_ERR_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER_533=An error occurred \
+ while attempting to instantiate class %s referenced in the access control \
+ configuration entry %s:  %s
+FATAL_ERR_CONFIG_AUTHZ_ERROR_INITIALIZING_HANDLER_534=An error occurred while \
+ attempting to initialize the Directory Server access control implementation \
+ referenced in configuration entry %s:  %s
+FATAL_ERR_CONFIG_ROOTDN_CANNOT_GET_BASE_535=An error occurred while \
+ attempting to retrieve the root DN base entry cn=Root DNs,cn=config from the \
+ Directory Server configuration:  %s
+SEVERE_ERR_CONFIG_ROOTDN_BASE_DOES_NOT_EXIST_536=The password policy \
+ configuration base cn=Root DNs,cn=config does not exist in the Directory \
+ Server configuration.  This entry must be present for the server to function \
+ properly
+SEVERE_ERR_CONFIG_ROOTDN_ENTRY_UNACCEPTABLE_537=Configuration entry %s does \
+ not contain a valid root DN configuration:  %s.  It will be ignored
+SEVERE_ERR_CONFIG_ROOTDN_CANNOT_CREATE_538=An error occurred while attempting \
+ to create a Directory Server root DN from the information in configuration \
+ entry %s:  %s
+SEVERE_ERR_CONFIG_ROOTDN_INVALID_OBJECTCLASS_539=Configuration entry %s does \
+ not contain the ds-cfg-root-dn objectclass, which is required for Directory \
+ Server root DN definitions
+INFO_CONFIG_ROOTDN_DESCRIPTION_ALTERNATE_BIND_DN_540=Specifies one or more \
+ alternate bind DNs that may be used to authenticate as the associated root \
+ DN, in addition to the actual DN of the root DN configuration entry. \
+ Alternate bind DNs must not conflict with the DNs of any other entries in the \
+ directory, nor can they conflict with other alternate bind DNs configured for \
+ other root DNs.  Changes to this configuration attribute will take effect \
+ immediately
+SEVERE_ERR_CONFIG_ROOTDN_CONFLICTING_MAPPING_541=Unable to register "%s" as \
+ an alternate bind DN for user "%s" because it is already registered as an \
+ alternate bind DN for root user "%s"
+SEVERE_ERR_CONFIG_ROOTDN_CANNOT_PARSE_ALTERNATE_BIND_DNS_542=An error \
+ occurred while trying to parse the set of alternate bind DNs for root user \
+ %s:  %s
+SEVERE_ERR_CONFIG_ROOTDN_CANNOT_REGISTER_ALTERNATE_BIND_DN_543=An error \
+ occurred while trying to register"%s" as an alternate bind DN for root user \
+ "%s":  %s
+SEVERE_ERR_CONFIG_ROOTDN_EXISTS_544=Unable to add root DN entry %s because \
+ another root user is already registered with that DN
+FATAL_ERR_CONFIG_ACCTNOTHANDLER_CANNOT_GET_BASE_545=An error occurred while \
+ attempting to retrieve the account status notification handler base entry \
+ cn=Account Status Notification Handlers,cn=config from the Directory Server \
+ configuration:  %s
+SEVERE_WARN_CONFIG_ACCTNOTHANDLER_BASE_DOES_NOT_EXIST_546=The account status \
+ notification handler configuration base cn=Account Status Notification \
+ Handlers,cn=config does not exist in the Directory Server configuration. \
+ This entry must be present for the server to function properly
+SEVERE_ERR_CONFIG_ACCTNOTHANDLER_ENTRY_UNACCEPTABLE_547=Configuration entry \
+ %s does not contain a valid account status notification handler \
+ configuration:  %s.  It will be ignored
+SEVERE_ERR_CONFIG_ACCTNOTHANDLER_CANNOT_CREATE_HANDLER_548=An error occurred \
+ while attempting to create a Directory Server account status notification \
+ handler from the information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_ACCTNOTHANDLER_INVALID_OBJECTCLASS_549=Configuration entry \
+ %s does not contain the ds-cfg-account-status-notification-handler \
+ objectclass, which is required for account status notification handler \
+ definitions
+INFO_CONFIG_ACCTNOTHANDLER_DESCRIPTION_CLASS_NAME_550=The fully-qualified \
+ name of the Java class that defines the Directory Server account status \
+ notification handler.  If this is altered while the associated notification \
+ handler is enabled, then that handler must be disabled and re-enabled for the \
+ change to take effect
+SEVERE_ERR_CONFIG_ACCTNOTHANDLER_NO_CLASS_NAME_551=Configuration entry %s \
+ does not contain a valid value for configuration attribute \
+ ds-cfg-account-status-notification-handler-class which specifies the \
+ fully-qualified class name for the associated account status notification \
+ handler
+SEVERE_ERR_CONFIG_ACCTNOTHANDLER_INVALID_CLASS_NAME_552=Configuration entry \
+ %s has an invalid value for attribute \
+ ds-cfg-account-status-notification-handler-class:  %s
+SEVERE_ERR_CONFIG_ACCTNOTHANDLER_INVALID_CLASS_553=Class %s specified in \
+ configuration entry %s does not contain a valid account status notification \
+ handler implementation:  %s
+INFO_CONFIG_ACCTNOTHANDLER_DESCRIPTION_ENABLED_554=Indicates whether this \
+ Directory Server account status notification handler should be enabled. \
+ Changes to this attribute will take effect immediately
+SEVERE_ERR_CONFIG_ACCTNOTHANDLER_NO_ENABLED_ATTR_555=Configuration entry %s \
+ does not contain a valid value for configuration attribute \
+ ds-cfg-account-status-notification-handler-enabled which indicates whether \
+ the account status notification handler should be enabled for use in the \
+ Directory Server
+SEVERE_ERR_CONFIG_ACCTNOTHANDLER_INVALID_ENABLED_VALUE_556=Configuration \
+ entry %s has an invalid value for attribute \
+ ds-cfg-account-status-notification-handler-enabled:  %s
+INFO_CONFIG_ACCTNOTHANDLER_CLASS_ACTION_REQUIRED_557=The requested change in \
+ the account status notification handler class name from %s to %s in \
+ configuration entry %s cannot be dynamically applied.  This change will not \
+ take effect until the notification handler is disabled and re-enabled or the \
+ Directory Server is restarted
+MILD_ERR_CONFIG_ACCTNOTHANDLER_INITIALIZATION_FAILED_558=An error occurred \
+ while trying to initialize an instance of class %s as an account status \
+ notification handler as defined in configuration entry %s:  %s
+MILD_ERR_CONFIG_ACCTNOTHANDLER_EXISTS_559=Unable to add a new account status \
+ notification handler entry with DN %s because there is already a notification \
+ handler registered with that DN
+SEVERE_ERR_CONFIG_ACCTNOTHANDLER_UNACCEPTABLE_CONFIG_560=The configuration \
+ for the account status notification handler defined in configuration entry %s \
+ was not acceptable according to its internal validation.  However, no \
+ specific information is available regarding the problem(s) with the entry
+INFO_CONFIG_CORE_DESCRIPTION_LOOKTHROUGH_LIMIT_561=Specifies the default \
+ maximum number of candidate entries checked for matches when processing a \
+ search operation.  This may be overridden on a per-user basis by including \
+ the ds-rlim-lookthrough-limit operational attribute in the user's entry. \
+ Changes to this configuration attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_LOOKTHROUGH_LIMIT_562=Configuration entry %s \
+ has an invalid value for configuration attribute ds-cfg-lookthrough-limit (It \
+ should be a positive integer value specifying the lookthrough limit to use, \
+ or a value of 0 or -1 to indicate that no limit should be enforced):  %s
+FATAL_ERR_CONFIG_UNABLE_TO_APPLY_STARTUP_CHANGES_563=An error occurred while \
+ attempting to apply the changes contained in file %s to the server \
+ configuration at startup:  %s
+FATAL_ERR_CONFIG_ERROR_APPLYING_STARTUP_CHANGE_564=Unable to apply a change \
+ at server startup:  %s
+FATAL_ERR_CONFIG_UNABLE_TO_APPLY_CHANGES_FILE_565=One or more errors occurred \
+ while applying changes on server startup
+INFO_CONFIG_DESCRIPTION_BACKEND_MODE_566=The permissions used for the \
+ directory containing the backend database files
+SEVERE_ERR_CONFIG_BACKEND_MODE_INVALID_567=Configuration entry %s does not \
+ contain a valid value for configuration attribute ds-cfg-backend-mode (It \
+ should be an UNIX permission mode in three-digit octal notation.)
+SEVERE_WARN_CONFIG_BACKEND_INSANE_MODE_568=Unable to set the requested file \
+ permissions to the backend database directory. The requested permissions will \
+ result in an inaccessible database
+INFO_CONFIG_CORE_DESCRIPTION_TIME_LIMIT_569=Specifies the default maximum \
+ length of time that should be allowed when processing a search operation. \
+ This may be overridden on a per-user basis by including the \
+ ds-rlim-time-limit operational attribute in the user's entry.  Changes to \
+ this configuration attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_INVALID_TIME_LIMIT_570=Configuration entry %s has an \
+ invalid value for configuration attribute ds-cfg-time-limit (it should be an \
+ integer value followed by a space and a time unit of seconds, minutes, hours, \
+ days, or weeks):  %s
+SEVERE_ERR_CONFIG_PWPOLICY_NO_DEFAULT_POLICY_571=No default password policy \
+ is configured for the Directory Server.  The default password policy must be \
+ specified by the ds-cfg-default-password-policy attribute in the cn=config \
+ entry
+SEVERE_WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND_572=An error occurred \
+ while attempting to register backend %s with the Directory Server:  %s
+SEVERE_ERR_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR_NO_REASON_573=An error \
+ occurred while trying to create the configuration archive directory %s
+SEVERE_ERR_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR_574=An error occurred while \
+ trying to create the configuration archive directory %s:  %s
+SEVERE_ERR_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE_575=An error occurred \
+ while trying to write the current configuration to the configuration archive: \
+ %s
+INFO_CONFIG_CORE_DESCRIPTION_REJECT_UNAUTHENTICATED_REQUESTS_576=Indicates \
+ whether the Directory Server should reject  requests from unauthenticated \
+ clients. If this is set to "true", then unauthenticated clients will only be \
+ allowed to send bind and StartTLS requests. Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_CONFIG_CORE_REJECT_UNAUTHENTICATED_REQUESTS_INVALID_577=Configuration \
+ entry %s has an invalid value forconfiguration attribute \
+ ds-cfg-reject-unauthenticated-requests(the value should be either true or \
+ false)
+FATAL_ERR_CONFIG_GROUP_CANNOT_GET_BASE_578=An error occurred while attempting \
+ to retrieve the group implementation base entry cn=Group \
+ Implementations,cn=config from the Directory Server configuration:  %s
+SEVERE_WARN_CONFIG_GROUP_BASE_DOES_NOT_EXIST_579=The group implementation \
+ configuration base cn=Group Implementations,cn=config does not exist in the \
+ Directory Server configuration.  This entry must be present for the server to \
+ function properly
+SEVERE_ERR_CONFIG_GROUP_ENTRY_UNACCEPTABLE_580=Configuration entry %s does \
+ not contain a valid group implementation configuration:  %s.  It will be \
+ ignored
+SEVERE_ERR_CONFIG_GROUP_CANNOT_CREATE_IMPLEMENTATION_581=An error occurred \
+ while attempting to create a Directory Server group implementation from the \
+ information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_GROUP_INVALID_OBJECTCLASS_582=Configuration entry %s does \
+ not contain the ds-cfg-group-implementation objectclass, which is required \
+ for group implementation definitions
+INFO_CONFIG_GROUP_DESCRIPTION_CLASS_NAME_583=The fully-qualified name of the \
+ Java class that defines the Directory Server group implementation.  If this \
+ is while the associated implementation is enabled, then that group \
+ implementation must be disabled and re-enabled for the change to take effect
+SEVERE_ERR_CONFIG_GROUP_NO_CLASS_NAME_584=Configuration entry %s does not \
+ contain a valid value for configuration attribute \
+ ds-cfg-group-implementation-class which specifies the fully-qualified class \
+ name for the associated group implementation
+SEVERE_ERR_CONFIG_GROUP_INVALID_CLASS_NAME_585=Configuration entry %s has an \
+ invalid value for attribute ds-cfg-group-implementation-class:  %s
+SEVERE_ERR_CONFIG_GROUP_INVALID_CLASS_586=Class %s specified in configuration \
+ entry %s does not contain a valid group implementation:  %s
+INFO_CONFIG_GROUP_DESCRIPTION_ENABLED_587=Indicates whether this Directory \
+ Server group implementation should be enabled.  Changes to this attribute \
+ will take effect immediately
+SEVERE_ERR_CONFIG_GROUP_NO_ENABLED_ATTR_588=Configuration entry %s does not \
+ contain a valid value for configuration attribute \
+ ds-cfg-group-implementation-enabled which indicates whether the group \
+ implementation should be enabled for use in the Directory Server
+SEVERE_ERR_CONFIG_GROUP_INVALID_ENABLED_VALUE_589=Configuration entry %s has \
+ an invalid value for attribute ds-cfg-group-implementation-enabled:  %s
+INFO_CONFIG_GROUP_CLASS_ACTION_REQUIRED_590=The requested change in the group \
+ implementation class name from %s to %s in configuration entry %s cannot be \
+ dynamically applied.  This change will not take effect until the group \
+ implementation is disabled and re-enabled or the Directory Server is \
+ restarted
+MILD_ERR_CONFIG_GROUP_INITIALIZATION_FAILED_591=An error occurred while \
+ trying to initialize an instance of class %s as a group implementation as in \
+ configuration entry %s:  %s
+MILD_ERR_CONFIG_GROUP_EXISTS_592=Unable to add a new group implementation \
+ entry with DN %s because there is already a group implementation registered \
+ with that DN
+SEVERE_ERR_CONFIG_GROUP_UNACCEPTABLE_CONFIG_593=The configuration for the \
+ group implementation defined in configuration entry %s was not acceptable \
+ according to its internal validation.  However, no specific information is \
+ available regarding the problem(s) with the entry
+SEVERE_ERR_CONFIG_ROOTDN_DESCRIPTION_ROOT_PRIVILEGE_594=Specifies the set of \
+ privileges that should automatically be assigned to root users when they \
+ authenticate to the server
+SEVERE_WARN_CONFIG_ROOTDN_UNRECOGNIZED_PRIVILEGE_595=The set of default root \
+ privileges contained in configuration attribute %s of entry %s contains an \
+ unrecognized privilege %s
+SEVERE_ERR_CONFIG_ROOTDN_ERROR_DETERMINING_ROOT_PRIVILEGES_596=An error \
+ occurred while attempting to determine the set of privileges that root users \
+ should be granted by default:  %s
+INFO_CONFIG_ROOTDN_UPDATED_PRIVILEGES_597=The set of privileges that will \
+ automatically be assigned to root users has been updated.  This new privilege \
+ set will not apply to any existing connection already authenticated as a root \
+ user, but will used for any subsequent root user authentications
+MILD_ERR_CONFIG_FILE_ADD_INSUFFICIENT_PRIVILEGES_598=You do not have \
+ sufficient privileges to perform add operations in the Directory Server \
+ configuration
+MILD_ERR_CONFIG_FILE_DELETE_INSUFFICIENT_PRIVILEGES_599=You do not have \
+ sufficient privileges to perform delete operations in the Directory Server \
+ configuration
+MILD_ERR_CONFIG_FILE_MODIFY_INSUFFICIENT_PRIVILEGES_600=You do not have \
+ sufficient privileges to perform modify operations in the Directory Server \
+ configuration
+MILD_ERR_CONFIG_FILE_MODDN_INSUFFICIENT_PRIVILEGES_601=You do not have \
+ sufficient privileges to perform modify DN operations in the Directory Server \
+ configuration
+MILD_ERR_CONFIG_FILE_SEARCH_INSUFFICIENT_PRIVILEGES_602=You do not have \
+ sufficient privileges to perform search operations in the Directory Server \
+ configuration
+MILD_ERR_CONFIG_FILE_MODIFY_PRIVS_INSUFFICIENT_PRIVILEGES_603=You do not have \
+ sufficient privileges to change the set of default root privileges
+FATAL_ERR_CONFIG_CERTMAPPER_CANNOT_GET_BASE_604=An error occurred while \
+ attempting to retrieve the certificate mapper base entry cn=Certificate \
+ Mappers,cn=config from the Directory Server configuration:  %s
+SEVERE_WARN_CONFIG_CERTMAPPER_BASE_DOES_NOT_EXIST_605=The certificate mapper \
+ configuration base cn=Certificate Mappers,cn=config does not exist in the \
+ Directory Server configuration.  This entry must be present for the server to \
+ function properly
+SEVERE_ERR_CONFIG_CERTMAPPER_ENTRY_UNACCEPTABLE_606=Configuration entry %s \
+ does not contain a valid certificate mapper configuration:  %s.  It will be \
+ ignored
+SEVERE_ERR_CONFIG_CERTMAPPER_CANNOT_CREATE_MAPPER_607=An error occurred while \
+ attempting to create a Directory Server certificate mapper from the \
+ information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_CERTMAPPER_INVALID_OBJECTCLASS_608=Configuration entry %s \
+ does not contain the ds-cfg-certificate-mapper objectclass, which is required \
+ for certificate mapper definitions
+SEVERE_ERR_CONFIG_CERTMAPPER_NO_CLASS_NAME_609=Configuration entry %s does \
+ not contain a valid value for configuration attribute \
+ ds-cfg-certificate-mapper-class which specifies the fully-qualified class \
+ name for the associated certificate mapper
+SEVERE_ERR_CONFIG_CERTMAPPER_INVALID_CLASS_NAME_610=Configuration entry %s \
+ has an invalid value for attribute ds-cfg-certificate-mapper-class:  %s
+SEVERE_ERR_CONFIG_CERTMAPPER_INVALID_CLASS_611=Class %s specified in \
+ configuration entry %s does not contain a valid certificate mapper \
+ implementation:  %s
+SEVERE_ERR_CONFIG_CERTMAPPER_INVALID_ENABLED_VALUE_612=Configuration entry %s \
+ has an invalid value for attribute ds-cfg-certificate-mapper-enabled:  %s
+INFO_CONFIG_CERTMAPPER_CLASS_ACTION_REQUIRED_613=The requested change in the \
+ certificate mapper class name from %s to %s in configuration entry %s cannot \
+ be dynamically applied.  This change will not take effect until the mapper is \
+ disabled and re-enabled or the Directory Server is restarted
+MILD_ERR_CONFIG_CERTMAPPER_INITIALIZATION_FAILED_614=An error occurred while \
+ trying to initialize an instance of class %s as a certificate mapper as \
+ defined in configuration entry %s:  %s
+MILD_ERR_CONFIG_CERTMAPPER_EXISTS_615=Unable to add a new certificate mapper \
+ entry with DN %s because there is already a mapper registered with that DN
+SEVERE_ERR_CONFIG_CERTMAPPER_UNACCEPTABLE_CONFIG_616=The configuration for \
+ the certificate mapper defined in configuration entry %s was not acceptable \
+ according to its internal validation.  However, no specific information is \
+ available regarding the problem(s) with the entry
+FATAL_ERR_CONFIG_KEYMANAGER_CANNOT_GET_BASE_617=An error occurred while \
+ attempting to retrieve the key manager provider base entry cn=Key Manager \
+ Providers,cn=config from the Directory Server configuration:  %s
+SEVERE_WARN_CONFIG_KEYMANAGER_BASE_DOES_NOT_EXIST_618=The key manager \
+ provider configuration base cn=Key Manager Providers,cn=config does not exist \
+ in the Directory Server configuration.  This entry must be present for the \
+ server to function properly
+SEVERE_ERR_CONFIG_KEYMANAGER_ENTRY_UNACCEPTABLE_619=Configuration entry %s \
+ does not contain a valid key manager provider configuration:  %s.  It will be \
+ ignored
+SEVERE_ERR_CONFIG_KEYMANAGER_CANNOT_CREATE_PROVIDER_620=An error occurred \
+ while attempting to create a Directory Server key manager provider from the \
+ information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_KEYMANAGER_INVALID_OBJECTCLASS_621=Configuration entry %s \
+ does not contain the ds-cfg-key-manager-provider objectclass, which is \
+ required for key manager provider definitions
+SEVERE_ERR_CONFIG_KEYMANAGER_NO_CLASS_NAME_622=Configuration entry %s does \
+ not contain a valid value for configuration attribute \
+ ds-cfg-key-manager-provider-class which specifies the fully-qualified class \
+ name for the associated key manager provider
+SEVERE_ERR_CONFIG_KEYMANAGER_INVALID_CLASS_NAME_623=Configuration entry %s \
+ has an invalid value for attribute ds-cfg-key-manager-provider-class:  %s
+SEVERE_ERR_CONFIG_KEYMANAGER_INVALID_CLASS_624=Class %s specified in \
+ configuration entry %s does not contain a valid key manager provider \
+ implementation:  %s
+SEVERE_ERR_CONFIG_KEYMANAGER_INVALID_ENABLED_VALUE_625=Configuration entry %s \
+ has an invalid value for attribute ds-cfg-key-manager-provider-enabled:  %s
+INFO_CONFIG_KEYMANAGER_CLASS_ACTION_REQUIRED_626=The requested change in the \
+ key manager provider class name from %s to %s in configuration entry %s \
+ cannot be dynamically applied.  This change will not take effect until the \
+ provider is disabled and re-enabled or the Directory Server is restarted
+MILD_ERR_CONFIG_KEYMANAGER_INITIALIZATION_FAILED_627=An error occurred while \
+ trying to initialize an instance of class %s as a key manager provider as \
+ defined in configuration entry %s:  %s
+MILD_ERR_CONFIG_KEYMANAGER_EXISTS_628=Unable to add a new key manager \
+ provider entry with DN %s because there is already a provider registered with \
+ that DN
+SEVERE_ERR_CONFIG_KEYMANAGER_UNACCEPTABLE_CONFIG_629=The configuration for \
+ the key manager provider defined in configuration entry %s was not acceptable \
+ according to its internal validation.  However, no specific information is \
+ available regarding the problem(s) with the entry
+FATAL_ERR_CONFIG_TRUSTMANAGER_CANNOT_GET_BASE_630=An error occurred while \
+ attempting to retrieve the trust manager provider base entry cn=Trust Manager \
+ Providers,cn=config from the Directory Server configuration:  %s
+SEVERE_WARN_CONFIG_TRUSTMANAGER_BASE_DOES_NOT_EXIST_631=The trust manager \
+ provider configuration base cn=Trust Manager Providers,cn=config does not \
+ exist in the Directory Server configuration.  This entry must be present for \
+ the server to function properly
+SEVERE_ERR_CONFIG_TRUSTMANAGER_ENTRY_UNACCEPTABLE_632=Configuration entry %s \
+ does not contain a valid trust manager provider configuration:  %s.  It will \
+ be ignored
+SEVERE_ERR_CONFIG_TRUSTMANAGER_CANNOT_CREATE_PROVIDER_633=An error occurred \
+ while attempting to create a Directory Server trust manager provider from the \
+ information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_TRUSTMANAGER_INVALID_OBJECTCLASS_634=Configuration entry %s \
+ does not contain the ds-cfg-trust-manager-provider objectclass, which is \
+ required for trust manager provider definitions
+SEVERE_ERR_CONFIG_TRUSTMANAGER_NO_CLASS_NAME_635=Configuration entry %s does \
+ not contain a valid value for configuration attribute \
+ ds-cfg-trust-manager-provider-class which specifies the fully-qualified class \
+ name for the associated trust manager provider
+SEVERE_ERR_CONFIG_TRUSTMANAGER_INVALID_CLASS_NAME_636=Configuration entry %s \
+ has an invalid value for attribute ds-cfg-trust-manager-provider-class:  %s
+SEVERE_ERR_CONFIG_TRUSTMANAGER_INVALID_CLASS_637=Class %s specified in \
+ configuration entry %s does not contain a valid trust manager provider \
+ implementation:  %s
+SEVERE_ERR_CONFIG_TRUSTMANAGER_INVALID_ENABLED_VALUE_638=Configuration entry \
+ %s has an invalid value for attribute ds-cfg-trust-manager-provider-enabled: \
+ %s
+INFO_CONFIG_TRUSTMANAGER_CLASS_ACTION_REQUIRED_639=The requested change in \
+ the trust manager provider class name from %s to %s in configuration entry %s \
+ cannot be dynamically applied.  This change will not take effect until the \
+ provider is disabled and re-enabled or the Directory Server is restarted
+MILD_ERR_CONFIG_TRUSTMANAGER_INITIALIZATION_FAILED_640=An error occurred \
+ while trying to initialize an instance of class %s as a trust manager \
+ provider as defined in configuration entry %s:  %s
+MILD_ERR_CONFIG_TRUSTMANAGER_EXISTS_641=Unable to add a new trust manager \
+ provider entry with DN %s because there is already a provider registered with \
+ that DN
+SEVERE_ERR_CONFIG_TRUSTMANAGER_UNACCEPTABLE_CONFIG_642=The configuration for \
+ the trust manager provider defined in configuration entry %s was not \
+ acceptable according to its internal validation.  However, no specific \
+ information is available regarding the problem(s) with the entry
+SEVERE_ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE_643=Unable to retrieve JMX \
+ attribute %s associated with configuration entry %s:  %s
+SEVERE_ERR_CONFIG_JMX_SET_ATTR_NO_CONNECTION_644=Unable to set the value of \
+ JMX attribute %s associated with configuration entry %s because no JMX \
+ connection is avaialble
+SEVERE_ERR_CONFIG_CHANGE_NO_RESULT_645=%s.%s returned a result of null for \
+ entry %s
+SEVERE_ERR_CONFIG_CHANGE_RESULT_ERROR_646=%s.%s failed for entry %s:  result \
+ code=%s, admin action required=%b, messages="%s"
+SEVERE_WARN_CONFIG_CHANGE_RESULT_ACTION_REQUIRED_647=%s.%s indicated that \
+ administrative action is required for entry %s:  messages="%s"
+INFO_CONFIG_CHANGE_RESULT_MESSAGES_648=%s.%s succeeded but generated the \
+ following messages for entry %s:  %s
+SEVERE_ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER_649=Unable to parse value "%s" \
+ from config entry "%s" as a valid search filter:  %s
+SEVERE_ERR_CONFIG_VATTR_INITIALIZATION_FAILED_650=An error occurred while \
+ trying to load an instance of class %s referenced in configuration entry %s \
+ as a virtual attribute provider:  %s
+SEVERE_ERR_CONFIG_VATTR_SV_TYPE_WITH_MV_PROVIDER_651=The virtual attribute \
+ configuration in entry "%s" is not valid because attribute type %s is \
+ single-valued but provider %s may generate multiple values
+SEVERE_ERR_CONFIG_VATTR_SV_TYPE_WITH_MERGE_VALUES_652=The virtual attribute \
+ configuration in entry "%s" is not valid because attribute type %s is \
+ single-valued but the conflict behavior is configured to merge real and \
+ virtual values
+MILD_ERR_CONFIG_FILE_MODIFY_STRUCTURAL_CHANGE_NOT_ALLOWED_653=Configuration \
+ entry %s cannot be modified because the change would alter its structural \
+ object class
+FATAL_ERR_CONFIG_CANNOT_CALCULATE_DIGEST_654=An error occurred while \
+ attempting to calculate a SHA-1 digest of file %s:  %s
+SEVERE_WARN_CONFIG_MANUAL_CHANGES_DETECTED_655=The Directory Server has \
+ detected that one or more external changes have been made to the \
+ configuration file %s while the server was online, but another change has \
+ caused the server configuration to be overwritten.  The manual changes have \
+ not been applied, but they have been preserved in file %s
+SEVERE_ERR_CONFIG_MANUAL_CHANGES_LOST_656=The Directory Server encountered an \
+ error while attempting to determine whether the configuration file %s has \
+ been externally edited with the server online, and/or trying to preserve such \
+ changes:  %s.  Any manual changes made to that file may have been lost
+SEVERE_ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS_657=Class %s specified in \
+ attribute ds-cfg-logger-class of configuration entry %s cannot be \
+ instantiated as a Directory Server log rotation policy:  %s
+SEVERE_ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS_658=Class %s specified in \
+ attribute ds-cfg-logger-class of configuration entry %s cannot be \
+ instantiated as a Directory Server log retention policy:  %s
+SEVERE_ERR_CONFIG_ROTATION_POLICY_CANNOT_CREATE_POLICY_659=An error occurred \
+ while attempting to create a Directory Server log rotation policy from the \
+ information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_RETENTION_POLICY_CANNOT_CREATE_POLICY_660=An error occurred \
+ while attempting to create a Directory Server log retention policy from the \
+ information in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER_661=An error occurred while \
+ attempting create a text writer for a Directory Server logger from the \
+ information in configuration entry %s:  %s
+SEVERE_WARN_CONFIG_SCHEMA_MULTIPLE_ENTRIES_IN_FILE_662=Schema configuration \
+ file %s in directory %s contains more than one entry.  Only the first entry \
+ will be examined, and the additional entries will be ignored
+SEVERE_WARN_CONFIG_SCHEMA_UNPARSEABLE_EXTRA_DATA_IN_FILE_663=Schema \
+ configuration file %s in directory %s contains additional data after the \
+ schema entry that cannot be parsed by the LDIF reader:  %s.  The first entry \
+ will be processed, but the remaining data will be ignored
+SEVERE_WARN_CONFIG_PLUGIN_EMPTY_ELEMENT_IN_ORDER_664=The plugin order \
+ definition for plugins of type %s contains an empty element.  This may cause \
+ the plugin order to be evaluated incorrectly
+SEVERE_WARN_CONFIG_PLUGIN_MULTIPLE_WILDCARDS_IN_ORDER_665=The plugin order \
+ definition for plugins of type %s contains multiple wildcard characters.  All \
+ plugin definitions should contain exactly one wildcard element to indicate \
+ where unmatched plugins should be included in the order, and including \
+ multiple wildcards may cause the plugin order to be evaluated incorrectly
+SEVERE_WARN_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES_666=The plugin order \
+ definition for plugins of type %s includes multiple references to the '%s' \
+ plugin.  This may cause the plugin order to be evaluated incorrectly
+SEVERE_WARN_CONFIG_PLUGIN_ORDER_NO_WILDCARD_667=The plugin order definition \
+ for plugins of type %s does not include a wildcard element to indicate where \
+ unmatched plugins should be included in the order.  The server will default \
+ to invoking all unnamed plugins after set of named plugins
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_DELETE_SYNTAX_IN_USE_668=Attribute syntax %s \
+ cannot be deleted from the server because it is in use by attribute type %s
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_DISABLE_SYNTAX_IN_USE_669=Attribute syntax \
+ %s cannot be disabled because it is in use by attribute type %s
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT_670=Matching rule %s \
+ cannot be deleted from the server because it is in use by attribute type %s
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_MRU_671=Matching rule %s \
+ cannot be deleted from the server because it is in use by matching rule use \
+ %s
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT_672=Matching rule %s \
+ cannot be disabled because it is in use by attribute type %s
+SEVERE_WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_MRU_673=Matching rule \
+ %s cannot be disabled because it is in use by matching rule use %s
+SEVERE_ERR_CONFIG_WORK_QUEUE_INITIALIZATION_FAILED_674=Unable to initialize \
+ an instance of class %s as a work queue as specified in configuration entry \
+ %s:  %s
+INFO_CONFIG_WORK_QUEUE_CLASS_CHANGE_REQUIRES_RESTART_675=The class used to \
+ provide the Directory Server work queue implementation has been changed from \
+ %s to %s, but this change will not take effect until the server is restarted
+SEVERE_ERR_CONFIG_FILE_ADD_APPLY_FAILED_676=The attempt to apply the \
+ configuration add failed.  The preliminary checks were all successful and the \
+ entry was added to the server configuration, but at least one of the \
+ configuration add listeners reported an error when attempting to apply the \
+ change:  %s
+SEVERE_ERR_CONFIG_FILE_DELETE_APPLY_FAILED_677=The attempt to apply the \
+ configuration delete failed.  The preliminary checks were all successful and \
+ the entry was removed from the server configuration, but at least one of the \
+ configuration delete listeners reported an error when attempting to apply the \
+ change:  %s
+SEVERE_ERR_CONFIG_FILE_MODIFY_APPLY_FAILED_678=The attempt to apply the \
+ configuration modification failed.  The preliminary checks were all \
+ successful and the modified entry was written to the server configuration, \
+ but at least one of the configuration change listeners reported an error when \
+ attempting to apply the change:  %s
+MILD_ERR_CONFIG_KEYMANAGER_CONFIG_NOT_ACCEPTABLE_679=The configuration for \
+ the key manager provider defined in configuration entry %s was not \
+ acceptable:  %s
+MILD_ERR_CONFIG_TRUSTMANAGER_CONFIG_NOT_ACCEPTABLE_680=The configuration for \
+ the trust manager provider defined in configuration entry %s was not \
+ acceptable:  %s
+MILD_ERR_CONFIG_AUTHZ_CONFIG_NOT_ACCEPTABLE_681=The configuration for the \
+ trust manager provider defined in configuration entry %s was not acceptable: \
+ %s
+MILD_ERR_CONFIG_ACCTNOTHANDLER_CONFIG_NOT_ACCEPTABLE_682=The configuration \
+ for the account status notification handler defined in configuration entry %s \
+ was not acceptable:  %s
+MILD_ERR_CONFIG_SCHEMA_SYNTAX_CONFIG_NOT_ACCEPTABLE_683=The configuration for \
+ the attribute syntax defined in configuration entry %s was not acceptable: \
+ %s
+MILD_ERR_CONFIG_CERTMAPPER_CONFIG_NOT_ACCEPTABLE_684=The configuration for \
+ the certificate mapper defined in configuration entry %s was not acceptable: \
+ %s
+MILD_ERR_CONFIG_ENTRYCACHE_CONFIG_NOT_ACCEPTABLE_685=The configuration for \
+ the entry cache defined in configuration entry %s was not acceptable:  %s
+MILD_ERR_CONFIG_GROUP_CONFIG_NOT_ACCEPTABLE_686=The configuration for the \
+ group implementation defined in configuration entry %s was not acceptable: \
+ %s
+MILD_ERR_CONFIG_IDMAPPER_CONFIG_NOT_ACCEPTABLE_687=The configuration for the \
+ identity mapper defined in configuration entry %s was not acceptable:  %s
+MILD_ERR_CONFIG_SCHEMA_MR_CONFIG_NOT_ACCEPTABLE_688=The configuration for the \
+ matching rule defined in configuration entry %s was not acceptable:  %s
+MILD_ERR_CONFIG_PWGENERATOR_CONFIG_NOT_ACCEPTABLE_689=The configuration for \
+ the password generator defined in configuration entry %s was not acceptable: \
+ %s
+MILD_ERR_CONFIG_PWSCHEME_CONFIG_NOT_ACCEPTABLE_690=The configuration for the \
+ password storage scheme defined in configuration entry %s was not acceptable: \
+ %s
+MILD_ERR_CONFIG_PWVALIDATOR_CONFIG_NOT_ACCEPTABLE_691=The configuration for \
+ the password validator defined in configuration entry %s was not acceptable: \
+ %s
+MILD_ERR_CONFIG_PLUGIN_CONFIG_NOT_ACCEPTABLE_692=The configuration for the \
+ plugin defined in configuration entry %s was not acceptable:  %s
+MILD_ERR_CONFIG_SASL_CONFIG_NOT_ACCEPTABLE_693=The configuration for the SASL \
+ mechanism handler defined in configuration entry %s was not acceptable:  %s
+MILD_ERR_CONFIG_VATTR_CONFIG_NOT_ACCEPTABLE_694=The configuration for the \
+ virtual attribute provider defined in configuration entry %s was not \
+ acceptable:  %s
+MILD_ERR_CONFIG_ALERTHANDLER_CONFIG_NOT_ACCEPTABLE_695=The configuration for \
+ the alert handler defined in configuration entry %s was not acceptable:  %s
+MILD_ERR_CONFIG_ALERTHANDLER_INITIALIZATION_FAILED_696=An error occurred \
+ while trying to initialize an instance of class %s as an alert handler as \
+ defined in configuration entry %s:  %s
+SEVERE_ERR_CONFIG_CORE_INVALID_SMTP_SERVER_697=The provided SMTP server value \
+ '%s' is invalid.  An SMTP server value must have an IP address or a \
+ resolvable name, and it may optionally be followed by a colon and an integer \
+ value between 1 and 65535 to specify the server port number
diff --git a/opendj-sdk/opends/src/messages/messages/core.properties b/opendj-sdk/opends/src/messages/messages/core.properties
new file mode 100644
index 0000000..e16bc24
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/core.properties
@@ -0,0 +1,1652 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=CORE
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+MILD_ERR_CANNOT_CANCEL_ABANDON_1=Abandon requests cannot be canceled
+MILD_ERR_CANNOT_CANCEL_BIND_2=Bind requests cannot be canceled
+MILD_ERR_CANNOT_CANCEL_UNBIND_3=Unbind requests cannot be canceled
+INFO_DISCONNECT_DUE_TO_UNBIND_4=Client Unbind
+INFO_DISCONNECT_DUE_TO_CLIENT_CLOSURE_5=Client Disconnect
+INFO_DISCONNECT_DUE_TO_REJECTED_CLIENT_6=Client Connection Rejected
+INFO_DISCONNECT_DUE_TO_IO_ERROR_7=I/O Error
+INFO_DISCONNECT_DUE_TO_PROTOCOL_ERROR_8=Protocol Error
+INFO_DISCONNECT_DUE_TO_SERVER_SHUTDOWN_9=Server Shutdown
+INFO_DISCONNECT_BY_ADMINISTRATOR_10=Administrative Termination
+INFO_DISCONNECT_DUE_TO_SECURITY_PROBLEM_11=Security Problem
+INFO_DISCONNECT_DUE_TO_MAX_REQUEST_SIZE_12=Maximum Request Size Exceeded
+INFO_DISCONNECT_DUE_TO_ADMIN_LIMIT_13=Administrative Limit Exceeded
+INFO_DISCONNECT_DUE_TO_IDLE_TIME_LIMIT_14=Idle Time Limit Exceeded
+INFO_DISCONNECT_DUE_TO_IO_TIMEOUT_15=I/O Timeout
+INFO_DISCONNECT_BY_PLUGIN_16=Connection Closed by Plugin
+INFO_DISCONNECT_OTHER_17=Unknown Closure Reason
+INFO_ERROR_CATEGORY_ACCESS_CONTROL_39=access-control
+INFO_ERROR_CATEGORY_BACKEND_40=backend
+INFO_ERROR_CATEGORY_CONFIG_41=config
+INFO_ERROR_CATEGORY_CONNECTION_HANDLING_42=connection
+INFO_ERROR_CATEGORY_CORE_SERVER_43=core
+INFO_ERROR_CATEGORY_EXTENDED_OPERATION_45=extended-op
+INFO_ERROR_CATEGORY_PLUGIN_46=plugin
+INFO_ERROR_CATEGORY_REQUEST_HANDLING_47=request
+INFO_ERROR_CATEGORY_SASL_MECHANISM_48=sasl
+INFO_ERROR_CATEGORY_SHUTDOWN_49=shutdown
+INFO_ERROR_CATEGORY_STARTUP_50=startup
+INFO_ERROR_CATEGORY_SYNCHRONIZATION_51=sync
+INFO_ERROR_SEVERITY_FATAL_ERROR_54=fatal-error
+INFO_ERROR_SEVERITY_INFORMATIONAL_56=info
+INFO_ERROR_SEVERITY_MILD_ERROR_57=mild-error
+INFO_ERROR_SEVERITY_MILD_WARNING_58=mild-warning
+INFO_ERROR_SEVERITY_SEVERE_ERROR_59=severe-error
+INFO_ERROR_SEVERITY_SEVERE_WARNING_60=severe-warning
+INFO_RESULT_SUCCESS_63=Success
+INFO_RESULT_OPERATIONS_ERROR_64=Operations Error
+INFO_RESULT_PROTOCOL_ERROR_65=Protocol Error
+INFO_RESULT_TIME_LIMIT_EXCEEDED_66=Time Limit Exceeded
+INFO_RESULT_SIZE_LIMIT_EXCEEDED_67=Size Limit Exceeded
+INFO_RESULT_COMPARE_FALSE_68=Compare False
+INFO_RESULT_COMPARE_TRUE_69=Compare True
+INFO_RESULT_AUTH_METHOD_NOT_SUPPORTED_70=Authentication Method Not Supported
+INFO_RESULT_STRONG_AUTH_REQUIRED_71=Strong Authentication Required
+INFO_RESULT_REFERRAL_72=Referral
+INFO_RESULT_ADMIN_LIMIT_EXCEEDED_73=Administrative Limit Exceeded
+INFO_RESULT_UNAVAILABLE_CRITICAL_EXTENSION_74=Unavailable Critical Extension
+INFO_RESULT_CONFIDENTIALITY_REQUIRED_75=Confidentiality Required
+INFO_RESULT_SASL_BIND_IN_PROGRESS_76=SASL Bind in Progress
+INFO_RESULT_NO_SUCH_ATTRIBUTE_77=No Such Attribute
+INFO_RESULT_UNDEFINED_ATTRIBUTE_TYPE_78=Undefined Attribute Type
+INFO_RESULT_INAPPROPRIATE_MATCHING_79=Inappropriate Matching
+INFO_RESULT_CONSTRAINT_VIOLATION_80=Constraint Violation
+INFO_RESULT_ATTRIBUTE_OR_VALUE_EXISTS_81=Attribute or Value Exists
+INFO_RESULT_INVALID_ATTRIBUTE_SYNTAX_82=Invalid Attribute Syntax
+INFO_RESULT_NO_SUCH_OBJECT_83=No Such Entry
+INFO_RESULT_ALIAS_PROBLEM_84=Alias Problem
+INFO_RESULT_INVALID_DN_SYNTAX_85=Invalid DN Syntax
+INFO_RESULT_ALIAS_DEREFERENCING_PROBLEM_86=Alias Dereferencing Problem
+INFO_RESULT_INAPPROPRIATE_AUTHENTICATION_87=Inappropriate Authentication
+INFO_RESULT_INVALID_CREDENTIALS_88=Invalid Credentials
+INFO_RESULT_INSUFFICIENT_ACCESS_RIGHTS_89=Insufficient Access Rights
+INFO_RESULT_BUSY_90=Busy
+INFO_RESULT_UNAVAILABLE_91=Unavailable
+INFO_RESULT_UNWILLING_TO_PERFORM_92=Unwilling to Perform
+INFO_RESULT_LOOP_DETECT_93=Loop Detected
+INFO_RESULT_NAMING_VIOLATION_94=Naming Violation
+INFO_RESULT_OBJECTCLASS_VIOLATION_95=ObjectClass Violation
+INFO_RESULT_NOT_ALLOWED_ON_NONLEAF_96=Not Allowed on Non-Leaf
+INFO_RESULT_NOT_ALLOWED_ON_RDN_97=Not Allowed on RDN
+INFO_RESULT_ENTRY_ALREADY_EXISTS_98=Entry Already Exists
+INFO_RESULT_OBJECTCLASS_MODS_PROHIBITED_99=ObjectClass Modifications \
+ Prohibited
+INFO_RESULT_AFFECTS_MULTIPLE_DSAS_100=Affects Multiple DSAs
+INFO_RESULT_CANCELED_101=Canceled
+INFO_RESULT_NO_SUCH_OPERATION_102=No Such Operation
+INFO_RESULT_TOO_LATE_103=Too Late
+INFO_RESULT_CANNOT_CANCEL_104=Cannot Cancel
+INFO_RESULT_OTHER_105=Other
+MILD_WARN_UNKNOWN_ATTRIBUTE_USAGE_106=Unable to determine the attribute usage \
+ type for attribute %s.  The server will assume that it is user-defined
+INFO_CANCELED_BY_SHUTDOWN_107=Processing on this operation has been canceled \
+ because the Directory Server is shutting down
+MILD_ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION_108=%s encountered an uncaught \
+ exception while processing operation %s:  %s
+SEVERE_WARN_UNEXPECTED_WORKER_THREAD_EXIT_109=%s is unexpectedly exiting when \
+ the Directory Server is not in the process of shutting down.  This likely \
+ indicates that the thread encountered an unexpected error
+SEVERE_ERR_CANNOT_CREATE_WORKER_THREAD_110=An unexpected error occurred while \
+ trying to create a worker thread:  %s
+MILD_WARN_OP_REJECTED_BY_SHUTDOWN_111=The request to process this operation \
+ has been rejected because the Directory Server has already started its \
+ shutdown process
+SEVERE_WARN_OP_REJECTED_BY_QUEUE_FULL_112=The request to process this \
+ operation has been rejected because the work queue has already reached its \
+ maximum capacity of %d pending operations
+SEVERE_WARN_WORKER_INTERRUPTED_WITHOUT_SHUTDOWN_113=%s was interrupted while \
+ waiting for new work:  %s.  This should not happen, but the thread will \
+ resume waiting for new work so there should be no adverse effects
+SEVERE_WARN_WORKER_WAITING_UNCAUGHT_EXCEPTION_114=An unexpected exception was \
+ caught while %s was waiting for new work:  %s.  This should not happen, but \
+ the thread will resume waiting for new work so there should be no adverse \
+ effects
+MILD_WARN_QUEUE_UNABLE_TO_CANCEL_115=The work queue caught an exception while \
+ trying to cancel pending operation %s when the Directory Server was shutting \
+ down:  %s
+MILD_WARN_QUEUE_UNABLE_TO_NOTIFY_THREAD_116=The work queue caught an \
+ exception while trying to notify %s that the Directory Server was shutting \
+ down:  %s
+INFO_DISCONNECT_DUE_TO_SERVER_ERROR_117=Server Error
+FATAL_ERR_CANNOT_BOOTSTRAP_WHILE_RUNNING_118=The Directory Server is \
+ currently running.  The configuration may not be bootstrapped while the \
+ server is online
+FATAL_ERR_CANNOT_LOAD_CONFIG_HANDLER_CLASS_119=Unable to load class %s to \
+ serve as the Directory Server configuration handler:  %s
+FATAL_ERR_CANNOT_INSTANTIATE_CONFIG_HANDLER_120=Unable to create an instance \
+ of class %s to serve as the Directory Server configuration handler: %s
+FATAL_ERR_CANNOT_INITIALIZE_CONFIG_HANDLER_121=An error occurred while trying \
+ to initialize the configuration handler %s using configuration file %s:  %s
+FATAL_ERR_CANNOT_START_BEFORE_BOOTSTRAP_122=The Directory Server may not be \
+ started before the configuration has been bootstrapped
+FATAL_ERR_CANNOT_START_WHILE_RUNNING_123=The Directory Server may not be \
+ started while it is already running.   Please stop the running instance \
+ before attempting to start it again
+INFO_ERROR_CATEGORY_SCHEMA_124=schema
+MILD_ERR_ATTR_TYPE_NORMALIZE_NO_MR_125=Unable to normalize value %s for \
+ attribute type %s because no equality matching rule is defined for that \
+ attribute
+MILD_ERR_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_OC_126=Entry %s violates the \
+ Directory Server schema configuration because it is missing attribute %s \
+ which is required by objectclass %s
+MILD_ERR_ENTRY_SCHEMA_DISALLOWED_USER_ATTR_FOR_OC_127=Entry %s violates the \
+ Directory Server schema configuration because it includes attribute %s which \
+ is not allowed by any of the objectclasses defined in that entry
+SEVERE_ERR_CANNOT_BOOTSTRAP_MATCHING_RULE_129=An error occurred while \
+ attempting to bootstrap the matching rule defined in class %s:  %s
+SEVERE_ERR_CANNOT_BOOTSTRAP_SYNTAX_130=An error occurred while attempting to \
+ bootstrap the attribute syntax defined in class %s:  %s
+INFO_ERROR_SEVERITY_NOTICE_131=notice
+INFO_DIRECTORY_BOOTSTRAPPING_132=The Directory Server is beginning the \
+ configuration bootstrapping process
+INFO_DIRECTORY_BOOTSTRAPPED_133=The Directory Server has completed the \
+ configuration bootstrapping process
+NOTICE_DIRECTORY_SERVER_STARTING_134=%s starting up
+NOTICE_DIRECTORY_SERVER_STARTED_135=The Directory Server has started \
+ successfully
+INFO_ERROR_CATEGORY_EXTENSIONS_137=extensions
+FATAL_ERR_CANNOT_CREATE_MBEAN_SERVER_138=An error occurred while attempting \
+ to create the JMX MBean server that will be used for monitoring, \
+ notification, and configuration interaction within the Directory Server:  %s
+NOTICE_SENT_ALERT_NOTIFICATION_139=The Directory Server has sent an alert \
+ notification generated by class %s (alert type %s, alert ID %s):  %s
+FATAL_ERR_UNCAUGHT_THREAD_EXCEPTION_140=An uncaught exception during \
+ processing for thread %s has caused it to terminate abnormally.  The stack \
+ trace for that exception is:  %s
+NOTICE_SERVER_SHUTDOWN_141=The Directory Server has started the shutdown \
+ process.  The shutdown was initiated by an instance of class %s and the \
+ reason provided for the shutdown was %s
+FATAL_ERR_SHUTDOWN_DUE_TO_SHUTDOWN_HOOK_142=The Directory Server shutdown \
+ hook detected that the JVM is shutting down.  This generally indicates that \
+ JVM received an external request to stop (e.g., through a kill signal)
+MILD_ERR_SEARCH_FILTER_NULL_143=Unable to decode the provided filter string \
+ as a search filter because the provided string was empty or null
+MILD_ERR_SEARCH_FILTER_UNCAUGHT_EXCEPTION_144=An unexpected error occurred \
+ while attempting to decode the string "%s" as a search filter:  %s
+MILD_ERR_SEARCH_FILTER_MISMATCHED_PARENTHESES_145=The provided search filter \
+ "%s" had mismatched parentheses around the portion between positions %d and \
+ %d
+MILD_ERR_SEARCH_FILTER_NO_EQUAL_SIGN_146=The provided search filter "%s" was \
+ missing an equal sign in the suspected simple filter component between \
+ positions %d and %d
+MILD_ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE_147=The provided search filter \
+ "%s" had an invalid escaped byte value at position %d.  A backslash in a \
+ value must be followed by two hexadecimal characters that define the byte \
+ that has been encoded
+MILD_ERR_SEARCH_FILTER_COMPOUND_MISSING_PARENTHESES_148=The provided search \
+ filter "%s" could not be decoded because the compound filter between \
+ positions %d and %d did not start with an open parenthesis and end with a \
+ close parenthesis (they may be parentheses for different filter components)
+MILD_ERR_SEARCH_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS_149=The provided \
+ search filter "%s" could not be decoded because the closing parenthesis at \
+ position %d did not have a corresponding open parenthesis
+MILD_ERR_SEARCH_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS_150=The provided \
+ search filter "%s" could not be decoded because the closing parenthesis at \
+ position %d did not have a corresponding close parenthesis
+MILD_ERR_SEARCH_FILTER_SUBSTRING_NO_ASTERISKS_151=The provided search filter \
+ "%s" could not be decoded because the assumed substring filter value between \
+ positions %d and %d did not have any asterisk wildcard characters
+MILD_ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_COLON_152=The provided search \
+ filter "%s" could not be decoded because the extensible match component \
+ starting at position %d did not have a colon to denote the end of the \
+ attribute type name
+MILD_ERR_SEARCH_FILTER_INVALID_FILTER_TYPE_153=Unable to determine whether \
+ entry "%s" matches filter "%s" because it contained an unknown filter type %s
+MILD_ERR_SEARCH_FILTER_INVALID_RESULT_TYPE_154=Unable to determine whether \
+ entry "%s" matches filter "%s" because the internal check returned an unknown \
+ result type "%s"
+MILD_ERR_SEARCH_FILTER_COMPOUND_COMPONENTS_NULL_155=Unable to determine \
+ whether entry "%s" matches filter "%s" because the set of filter components \
+ for an %s component was NULL
+MILD_ERR_SEARCH_FILTER_NESTED_TOO_DEEP_156=Unable to determine whether entry \
+ "%s" matches filter "%s" because the filter was nested beyond the maximum \
+ allowed depth of 100 levels
+MILD_ERR_SEARCH_FILTER_NOT_COMPONENT_NULL_157=Unable to determine whether \
+ entry "%s" matches filter "%s" because the NOT filter component did not \
+ include a subcomponent
+MILD_ERR_SEARCH_FILTER_EQUALITY_NO_ATTRIBUTE_TYPE_158=Unable to determine \
+ whether entry "%s" matches filter "%s" because an equality component had a \
+ NULL attribute type
+MILD_ERR_SEARCH_FILTER_EQUALITY_NO_ASSERTION_VALUE_159=Unable to determine \
+ whether entry "%s" matches filter "%s" because an equality component for \
+ attribute %s had a NULL assertion value
+MILD_ERR_SEARCH_FILTER_SUBSTRING_NO_ATTRIBUTE_TYPE_160=Unable to determine \
+ whether entry "%s" matches filter "%s" because a substring component had a \
+ NULL attribute type
+MILD_ERR_SEARCH_FILTER_SUBSTRING_NO_SUBSTRING_COMPONENTS_161=Unable to \
+ determine whether entry "%s" matches filter "%s" because a substring \
+ component for attribute %s did not have any subInitial, subAny, or subFinal \
+ elements
+MILD_ERR_SEARCH_FILTER_GREATER_OR_EQUAL_NO_ATTRIBUTE_TYPE_162=Unable to \
+ determine whether entry "%s" matches filter "%s" because a greater-or-equal \
+ component had a NULL attribute type
+MILD_ERR_SEARCH_FILTER_GREATER_OR_EQUAL_NO_VALUE_163=Unable to determine \
+ whether entry "%s" matches filter "%s" because a greater-or-equal component \
+ for attribute %s had a NULL assertion value
+MILD_ERR_SEARCH_FILTER_LESS_OR_EQUAL_NO_ATTRIBUTE_TYPE_164=Unable to \
+ determine whether entry "%s" matches filter "%s" because a less-or-equal \
+ component had a NULL attribute type
+MILD_ERR_SEARCH_FILTER_LESS_OR_EQUAL_NO_ASSERTION_VALUE_165=Unable to \
+ determine whether entry "%s" matches filter "%s" because a less-or-equal \
+ component for attribute %s had a NULL assertion value
+MILD_ERR_SEARCH_FILTER_PRESENCE_NO_ATTRIBUTE_TYPE_166=Unable to determine \
+ whether entry "%s" matches filter "%s" because a presence component had a \
+ NULL attribute type
+MILD_ERR_SEARCH_FILTER_APPROXIMATE_NO_ATTRIBUTE_TYPE_167=Unable to determine \
+ whether entry "%s" matches filter "%s" because an approximate component had a \
+ NULL attribute type
+MILD_ERR_SEARCH_FILTER_APPROXIMATE_NO_ASSERTION_VALUE_168=Unable to determine \
+ whether entry "%s" matches filter "%s" because an approximate component for \
+ attribute %s had a NULL assertion value
+MILD_ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_ASSERTION_VALUE_169=Unable to \
+ determine whether entry "%s" matches filter "%s" because a contained \
+ extensible match filter did not have an assertion value
+MILD_ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_RULE_OR_TYPE_170=Unable to \
+ determine whether entry "%s" matches filter "%s" because a contained \
+ extensible match filter did not have either an attribute type or a matching \
+ rule ID
+MILD_ERR_RDN_DECODE_NULL_171=Unable to decode the provided string as a \
+ relative distinguished name because the provided string was empty or null
+MILD_ERR_RDN_END_WITH_ATTR_NAME_172=Unable to decode the provided string "%s" \
+ as a relative distinguished name because the string ended with an attribute \
+ type name (%s)
+MILD_ERR_RDN_NO_EQUAL_173=Unable to decode the provided string "%s" as a \
+ relative distinguished name because the first non-blank character after the \
+ attribute type %s was not an equal sign (character read was %c)
+MILD_ERR_RDN_UNEXPECTED_COMMA_174=Unable to decode the provided string "%s" \
+ as a relative distinguished name because it contained an unexpected plus, \
+ comma, or semicolon at position %d, which is not allowed in an RDN
+MILD_ERR_RDN_ILLEGAL_CHARACTER_175=Unable to decode the provided string "%s" \
+ as a relative distinguished name because an illegal character %c was found at \
+ position %d, where either the end of the string or a '+' sign were expected
+FATAL_ERR_CANNOT_CREATE_WORK_QUEUE_176=An error occurred while trying to \
+ create the Directory Server work queue:  %s.  This is an unrecoverable error \
+ and the startup process will not be able to continue
+SEVERE_ERR_CANNOT_REGISTER_DUPLICATE_SUFFIX_180=The suffix "%s" is already \
+ registered with the Directory Server with a backend of type %s
+SEVERE_ERR_CANNOT_REGISTER_DUPLICATE_SUBSUFFIX_181=The suffix "%s" is already \
+ registered with the Directory Server as a sub-suffix of the backend for \
+ suffix "%s"
+SEVERE_ERR_CANNOT_REGISTER_PRIVATE_SUFFIX_BELOW_USER_PARENT_182=The private \
+ suffix "%s" is below a non-private suffix defined with a base DN of "%s".  A \
+ private sub-suffix may not exist below a non-private suffix
+SEVERE_ERR_CANNOT_GET_ROOT_DSE_CONFIG_ENTRY_183=An error occurred while \
+ trying to retrieve the root DSE configuration entry (cn=Root DSE,cn=config) \
+ from the Directory Server configuration:  %s
+MILD_ERR_SCHEMA_CONFLICTING_ATTRIBUTE_OID_184=Unable to register attribute \
+ type %s with the server schema because its OID %s conflicts with the OID of \
+ an existing attribute type %s
+MILD_ERR_SCHEMA_CONFLICTING_ATTRIBUTE_NAME_185=Unable to register attribute \
+ type %s with the server schema because its name %s conflicts with the name of \
+ an existing attribute type %s
+MILD_ERR_SCHEMA_CONFLICTING_OBJECTCLASS_OID_186=Unable to register \
+ objectclass %s with the server schema because its OID %s conflicts with the \
+ OID of an existing objectclass %s
+MILD_ERR_SCHEMA_CONFLICTING_OBJECTCLASS_NAME_187=Unable to register \
+ objectclass %s with the server schema because its name %s conflicts with the \
+ name of an existing objectclass %s
+MILD_ERR_SCHEMA_CONFLICTING_SYNTAX_OID_188=Unable to register attribute \
+ syntax %s with the server schema because its OID %s conflicts with the OID of \
+ an existing syntax %s
+MILD_ERR_SCHEMA_CONFLICTING_MR_OID_189=Unable to register matching rule %s \
+ with the server schema because its OID %s conflicts with the OID of an \
+ existing matching rule %s
+MILD_ERR_SCHEMA_CONFLICTING_MR_NAME_190=Unable to register matching rule %s \
+ with the server schema because its name %s conflicts with the name of an \
+ existing matching rule %s
+MILD_ERR_SCHEMA_CONFLICTING_MATCHING_RULE_USE_191=Unable to register matching \
+ rule use %s with the server schema because its matching rule %s conflicts \
+ with the matching rule for an existing matching rule use %s
+MILD_ERR_SCHEMA_CONFLICTING_DIT_CONTENT_RULE_192=Unable to register DIT \
+ content rule %s with the server schema because its structural objectclass %s \
+ conflicts with the structural objectclass for an existing DIT content rule %s
+MILD_ERR_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_NAME_FORM_193=Unable to \
+ register DIT structure rule %s with the server schema because its name form \
+ %s conflicts with the name form for an existing DIT structure rule %s
+MILD_ERR_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_ID_194=Unable to register DIT \
+ structure rule %s with the server schema because its rule ID %d conflicts \
+ with the rule ID for an existing DIT structure rule %s
+MILD_ERR_SCHEMA_CONFLICTING_NAME_FORM_OC_195=Unable to register name form %s \
+ with the server schema because its structural objectclass %s conflicts with \
+ the structural objectclass for an existing name form %s
+MILD_ERR_SCHEMA_CONFLICTING_NAME_FORM_OID_196=Unable to register name form %s \
+ with the server schema because its OID %s conflicts with the OID for an \
+ existing name form %s
+MILD_ERR_SCHEMA_CONFLICTING_NAME_FORM_NAME_197=Unable to register name form \
+ %s with the server schema because its name %s conflicts with the name for an \
+ existing name form %s
+MILD_ERR_ENTRY_SCHEMA_MULTIPLE_STRUCTURAL_CLASSES_198=Entry %s violates the \
+ Directory Server schema configuration because it includes multiple \
+ conflicting structural objectclasses %s and %s.  Only a single structural \
+ objectclass is allowed in an entry
+MILD_ERR_ENTRY_SCHEMA_NO_STRUCTURAL_CLASS_199=Entry %s violates the Directory \
+ Server schema configuration because it does not include a structural \
+ objectclass.  All entries must contain a structural objectclass
+SEVERE_WARN_ADD_OP_INVALID_SYNTAX_200=Entry "%s" contains a value "%s" for \
+ attribute %s that is invalid according to the syntax for that attribute:  %s
+SEVERE_WARN_COMPARE_OP_NO_SUCH_ATTR_201=Entry "%s" does not contain any \
+ values for attribute "%s"
+SEVERE_WARN_COMPARE_OP_NO_SUCH_ATTR_WITH_OPTIONS_202=Entry "%s" does not \
+ contain any values for attribute "%s" with the specified set of options
+NOTICE_SERVER_STOPPED_203=The Directory Server is now stopped
+INFO_WORKER_STOPPED_BY_REDUCED_THREADNUMBER_204=%s has been stopped because \
+ the total number of worker threads in the Directory Server was reduced
+MILD_ERR_ENTRY_SCHEMA_ATTR_SINGLE_VALUED_205=Entry %s violates the Directory \
+ Server schema configuration because it includes multiple values for attribute \
+ %s, which is defined as a single-valued attribute
+MILD_ERR_ENTRY_SCHEMA_RDN_MISSING_REQUIRED_ATTR_206=Entry %s violates the \
+ Directory Server schema configuration because its RDN does not contain \
+ attribute %s that is required by name form %s
+MILD_ERR_ENTRY_SCHEMA_RDN_DISALLOWED_ATTR_207=Entry %s violates the Directory \
+ Server schema configuration because its RDN contains attribute %s that is not \
+ allowed by name form %s
+MILD_ERR_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_DCR_208=Entry %s violates the \
+ Directory Server schema configuration because it is missing attribute %s \
+ which is required by DIT content rule %s
+MILD_ERR_ENTRY_SCHEMA_PROHIBITED_ATTR_FOR_DCR_209=Entry %s violates the \
+ Directory Server schema configuration because it contains attribute %s which \
+ is prohibited by DIT content rule %s
+MILD_ERR_ENTRY_SCHEMA_DISALLOWED_USER_ATTR_FOR_DCR_210=Entry %s violates the \
+ Directory Server schema configuration because it includes attribute %s which \
+ is not in the list of allowed or required attributes for DIT content rule %s
+MILD_ERR_ENTRY_SCHEMA_DISALLOWED_AUXILIARY_CLASS_211=Entry %s violates the \
+ Directory Server schema configuration because it includes auxiliary \
+ objectClass %s that is not allowed by DIT content rule %s
+MILD_ERR_ENTRY_SCHEMA_DSR_COULD_NOT_LOCK_PARENT_212=The Directory Server was \
+ unable to evaluate entry %s to determine whether it was compliant with the \
+ DIT structure rule configuration because it was unable to obtain a read lock \
+ on parent entry %s
+MILD_ERR_ENTRY_SCHEMA_DSR_NO_PARENT_ENTRY_213=The Directory Server was unable \
+ to evaluate entry %s to determine whether it was compliant with the DIT \
+ structure rule configuration because parent entry %s either does not exist or \
+ could not be retrieved
+MILD_ERR_ENTRY_SCHEMA_DSR_NO_PARENT_OC_214=The Directory Server was unable to \
+ evaluate entry %s to determine whether it was compliant with the DIT rule \
+ configuration because the parent entry %s does not appear to contain a valid \
+ structural objectclass
+MILD_ERR_ENTRY_SCHEMA_DSR_DISALLOWED_SUPERIOR_OC_215=Entry %s violates the \
+ Directory Server schema configuration because DIT structure rule %s does not \
+ allow entries of type %s to be placed immediately below entries of type %s
+MILD_ERR_ENTRY_SCHEMA_COULD_NOT_CHECK_DSR_216=An unexpected error occurred \
+ while attempting to check entry %s against DIT structure rule %s:  %s
+INFO_CANCELED_BY_BIND_REQUEST_217=Processing on this operation has been \
+ canceled because the Directory Server received a bind request on this \
+ connection, which requires that all operations in progress to be abandoned
+MILD_ERR_BIND_OPERATION_UNKNOWN_USER_218=Unable to bind to the Directory \
+ Server as user %s because no such user exists in the server
+SEVERE_ERR_BIND_OPERATION_CANNOT_LOCK_USER_219=Unable to process the bind \
+ because the server was unable to obtain a read lock on the entry %s
+FATAL_ERR_STARTUP_PLUGIN_ERROR_220=A fatal error occurred when executing one \
+ of the Directory Server startup plugins:  %s (error ID %d).  The Directory \
+ Server startup process has been aborted
+MILD_ERR_BIND_OPERATION_NO_PASSWORD_221=Unable to bind to the Directory \
+ Server as user %s using simple authentication because that user does not have \
+ a password
+MILD_ERR_BIND_OPERATION_UNKNOWN_SASL_MECHANISM_222=Unable to process the bind \
+ request because it attempted to use an unknown SASL mechanism %s that is not \
+ available in the Directory Server
+MILD_ERR_ABANDON_OP_NO_SUCH_OPERATION_223=Unable to abandon the operation \
+ with message ID %d because no information is available about that operation. \
+ This could mean that the target operation has already completed or was never \
+ requested
+SEVERE_ERR_CANCELED_BY_PREPARSE_DISCONNECT_224=The operation was canceled \
+ because the client connection was terminated by a pre-parse plugin
+SEVERE_ERR_CANCELED_BY_PREOP_DISCONNECT_225=The operation was canceled \
+ because the client connection was terminated by a pre-operation plugin
+SEVERE_ERR_CANCELED_BY_POSTOP_DISCONNECT_226=The operation was canceled \
+ because the client connection was terminated by a post-operation plugin
+SEVERE_ERR_COMPARE_CANNOT_LOCK_ENTRY_227=The Directory Server was unable to \
+ obtain a read lock on entry %s after multiple attempts.  Processing on this \
+ operation cannot continue
+MILD_ERR_COMPARE_NO_SUCH_ENTRY_228=The specified entry %s does not exist in \
+ the Directory Server
+INFO_CANCELED_BY_ABANDON_REQUEST_229=The operation was canceled because the \
+ client issued an abandon request (message ID %d) for this operation
+MILD_ERR_ADD_CANNOT_ADD_ROOT_DSE_230=The provided entry cannot be added \
+ because it contains a null DN.  This DN is reserved for the root DSE, and \
+ that entry may not be added over protocol
+MILD_ERR_ADD_ENTRY_NOT_SUFFIX_231=The provided entry %s cannot be added \
+ because it does not have a parent and is not defined as one of the suffixes \
+ within the Directory Server
+SEVERE_ERR_ADD_CANNOT_LOCK_PARENT_232=Entry %s cannot be added because the \
+ server failed to obtain a read lock on the parent entry %s after multiple \
+ attempts
+MILD_ERR_ADD_NO_PARENT_233=Entry %s cannot be added because its parent entry \
+ %s does not exist in the server
+SEVERE_ERR_ADD_CANNOT_LOCK_ENTRY_234=Entry %s cannot be added because the \
+ server failed to obtain a write lock for this entry after multiple attempts
+SEVERE_ERR_DELETE_CANNOT_LOCK_ENTRY_235=Entry %s cannot be removed because \
+ the server failed to obtain a write lock for this entry after multiple \
+ attempts
+SEVERE_ERR_CANCELED_BY_SEARCH_ENTRY_DISCONNECT_236=The operation was canceled \
+ because the client connection was terminated by a search result entry plugin \
+ working on entry %s
+SEVERE_ERR_CANCELED_BY_SEARCH_REF_DISCONNECT_237=The operation was canceled \
+ because the client connection was terminated by a search result reference \
+ plugin working on referral %s
+MILD_ERR_SEARCH_TIME_LIMIT_EXCEEDED_238=The maximum time limit of %d seconds \
+ for processing this search operation has expired
+MILD_ERR_SEARCH_SIZE_LIMIT_EXCEEDED_239=This search operation has sent the \
+ maximum of %d entries to the client
+MILD_ERR_SEARCH_BASE_DOESNT_EXIST_240=The entry %s specified as the search \
+ base does not exist in the Directory Server
+MILD_ERR_DELETE_NO_SUCH_ENTRY_241=Entry %s does not exist in the Directory \
+ Server
+MILD_ERR_DELETE_HAS_SUB_BACKEND_242=Entry %s cannot be removed because the \
+ backend that should contain that entry has a subordinate backend with a base \
+ DN of %s that is below the target DN
+MILD_ERR_MODDN_NO_PARENT_243=A modify DN operation cannot be performed on \
+ entry %s because the new RDN would not have a parent DN
+MILD_ERR_MODDN_NO_BACKEND_FOR_CURRENT_ENTRY_244=The modify DN operation for \
+ entry %s cannot be performed because no backend is registered to handle that \
+ DN
+MILD_ERR_MODDN_NO_BACKEND_FOR_NEW_ENTRY_245=The modify DN operation for entry \
+ %s cannot be performed because no backend is registered to handle the new DN \
+ %s
+MILD_ERR_MODDN_DIFFERENT_BACKENDS_246=The modify DN operation for entry %s \
+ cannot be performed because the backend holding the current entry is \
+ different from the backend used to handle the new DN %s.  Modify DN \
+ operations may not span multiple backends
+SEVERE_ERR_MODDN_CANNOT_LOCK_CURRENT_DN_247=The modify DN operation for entry \
+ %s cannot be performed because the server was unable to obtain a write lock \
+ for that DN
+SEVERE_ERR_MODDN_EXCEPTION_LOCKING_NEW_DN_248=The modify DN operation for \
+ entry %s cannot be performed because an exception was caught while attempting \
+ to obtain a write lock for new DN %s:  %s
+SEVERE_ERR_MODDN_CANNOT_LOCK_NEW_DN_249=The modify DN operation for entry %s \
+ cannot be performed because the server was unable to obtain a write lock for \
+ the new DN %s
+MILD_ERR_MODDN_NO_CURRENT_ENTRY_250=The modify DN operation for entry %s \
+ cannot be performed because that entry does not exist in the server
+SEVERE_ERR_MODIFY_CANNOT_LOCK_ENTRY_251=Entry %s cannot be modified because \
+ the server failed to obtain a write lock for this entry after multiple \
+ attempts
+MILD_ERR_MODIFY_NO_SUCH_ENTRY_252=Entry %s cannot be modified because no such \
+ entry exists in the server
+MILD_ERR_MODIFY_ADD_NO_VALUES_253=Entry %s cannot be modified because the \
+ modification contained an add component for attribute %s but no values were \
+ provided
+MILD_ERR_MODIFY_ADD_INVALID_SYNTAX_254=When attempting to modify entry %s to \
+ add one or more values for attribute %s, value "%s" was found to be invalid \
+ according to the associated syntax:  %s
+MILD_ERR_MODIFY_ADD_DUPLICATE_VALUE_255=Entry %s cannot be modified because \
+ it would have resulted in one or more duplicate values for attribute %s:  %s
+MILD_ERR_MODIFY_DELETE_RDN_ATTR_256=Entry %s cannot be modified because the \
+ change to attribute %s would have removed a value used in the RDN
+MILD_ERR_MODIFY_DELETE_MISSING_VALUES_257=Entry %s cannot be modified because \
+ the attempt to update attribute %s would have removed one or more values from \
+ the attribute that were not present:  %s
+MILD_ERR_MODIFY_DELETE_NO_SUCH_ATTR_258=Entry %s cannot be modified because \
+ an attempt was made to remove one or more values from attribute %s but this \
+ attribute is not present in the entry
+MILD_ERR_MODIFY_REPLACE_INVALID_SYNTAX_259=When attempting to modify entry %s \
+ to replace the set of values for attribute %s, value "%s" was found to be \
+ invalid according to the associated syntax:  %s
+MILD_ERR_MODIFY_INCREMENT_RDN_260=Entry %s cannot be modified because an \
+ attempt was made to increment the value of attribute %s which is used as an \
+ RDN attribute for the entry
+MILD_ERR_MODIFY_INCREMENT_REQUIRES_VALUE_261=Entry %s cannot be modified \
+ because an attempt was made to increment the value of attribute %s but the \
+ request did not include a value for that attribute specifying the amount by \
+ which to increment the value
+MILD_ERR_MODIFY_INCREMENT_REQUIRES_SINGLE_VALUE_262=Entry %s cannot be \
+ modified because an attempt was made to increment the value of attribute %s \
+ but the request contained multiple values, where only a single integer value \
+ is allowed
+MILD_ERR_MODIFY_INCREMENT_PROVIDED_VALUE_NOT_INTEGER_263=Entry %s cannot be \
+ modified because an attempt was made to increment the value of attribute %s \
+ but the value "%s" contained in the request could not be parsed as an integer
+MILD_ERR_MODIFY_INCREMENT_REQUIRES_EXISTING_VALUE_264=Entry %s cannot be \
+ modified because an attempt was made to increment the value of attribute %s \
+ but that attribute did not have any values in the target entry
+MILD_ERR_MODIFY_INCREMENT_REQUIRES_INTEGER_VALUE_265=Entry %s cannot be \
+ modified because an attempt was made to increment the value of attribute %s \
+ but the value "%s" could not be parsed as an integer
+MILD_ERR_MODIFY_VIOLATES_SCHEMA_266=Entry %s cannot not be modified because \
+ the resulting entry would have violated the server schema:  %s
+MILD_ERR_MODIFY_NO_BACKEND_FOR_ENTRY_267=Entry %s cannot be modified because \
+ there is no backend registered to handle operations for that entry
+MILD_ERR_EXTENDED_NO_HANDLER_268=There is no extended operation handler \
+ registered with the Directory Server for handling extended operations with a \
+ request OID of %s
+MILD_ERR_ENTRY_SCHEMA_UNKNOWN_OC_269=Entry %s violates the Directory Server \
+ schema configuration because it contains an unknown objectclass %s
+MILD_ERR_SEARCH_BACKEND_EXCEPTION_270=An unexpected error was encountered \
+ while processing a search in one of the Directory Server backends:  %s
+MILD_ERR_MODDN_VIOLATES_SCHEMA_271=The modify DN operation for entry %s \
+ cannot be performed because the change would have violated the server schema: \
+ %s
+INFO_CONNHANDLER_CLOSED_BY_SHUTDOWN_272=The Directory Server is shutting down
+INFO_CONNHANDLER_CLOSED_BY_DISABLE_273=The connection handler that accepted \
+ this connection has been disabled
+INFO_CONNHANDLER_CLOSED_BY_DELETE_274=The connection handler that accepted \
+ this connection has been removed from the server
+MILD_ERR_ENTRY_SET_UNKNOWN_OC_275=Objectclass %s cannot be used in entry %s \
+ because that class is not defined in the Directory Server schema
+MILD_ERR_ENTRY_ADD_UNKNOWN_OC_276=Objectclass %s cannot be added to entry %s \
+ because that class is not defined in the Directory Server schema
+MILD_ERR_ENTRY_ADD_DUPLICATE_OC_277=Objectclass %s is already present in \
+ entry %s and cannot be added a second time
+MILD_ERR_BIND_OPERATION_UNKNOWN_STORAGE_SCHEME_278=Password with unknown \
+ storage scheme %s included in user entry %s will be ignored
+MILD_ERR_BIND_OPERATION_WRONG_PASSWORD_279=The password provided by the user \
+ did not match any password(s) stored in the user's entry
+MILD_ERR_BIND_OPERATION_PASSWORD_VALIDATION_EXCEPTION_280=An unexpected error \
+ occurred while attempting to validate the provided password:  %s
+INFO_DSCORE_DESCRIPTION_CONFIG_CLASS_281=Specifies the fully-qualified name \
+ of the Java class to use as the Directory Server configuration handler
+INFO_DSCORE_DESCRIPTION_CONFIG_FILE_282=Specifies the path to the file \
+ containing the information needed by the configuration handler to obtain the \
+ Directory Server configuration
+INFO_DSCORE_DESCRIPTION_VERSION_283=Display Directory Server version \
+ information
+INFO_DSCORE_DESCRIPTION_FULLVERSION_284=Display extended Directory Server \
+ version information
+INFO_DSCORE_DESCRIPTION_SYSINFO_285=Display general system information
+INFO_DSCORE_DESCRIPTION_DUMPMESSAGES_286=Dump a list of all defined messages
+INFO_DSCORE_DESCRIPTION_USAGE_287=Display this usage information
+FATAL_ERR_DSCORE_CANNOT_INITIALIZE_ARGS_288=An error occurred while \
+ attempting to initialize the command-line arguments:  %s
+FATAL_ERR_DSCORE_ERROR_PARSING_ARGS_289=An error occurred while attempting to \
+ parse the provided set of command line arguments:  %s
+FATAL_ERR_DSCORE_CANNOT_BOOTSTRAP_290=An error occurred while attempting to \
+ bootstrap the Directory Server:  %s
+FATAL_ERR_DSCORE_CANNOT_START_291=An error occurred while trying to start the \
+ Directory Server:  %s
+SEVERE_ERR_BACKUPINFO_NO_DELIMITER_292=The line "%s" associated with the \
+ backup information in directory %s could not be parsed because it did not \
+ contain an equal sign to delimit the property name from the value
+SEVERE_ERR_BACKUPINFO_NO_NAME_293=The line "%s" associated with the backup \
+ information in directory %s could not be parsed because it did not include a \
+ property name
+SEVERE_ERR_BACKUPINFO_MULTIPLE_BACKUP_IDS_294=The backup information \
+ structure in directory %s could not be parsed because it contained multiple \
+ backup IDs (%s and %s)
+SEVERE_ERR_BACKUPINFO_UNKNOWN_PROPERTY_295=The backup information structure \
+ in directory %s could not be parsed because it contained an unknown property \
+ %s with value %s
+SEVERE_ERR_BACKUPINFO_CANNOT_DECODE_296=An unexpected error occurred while \
+ trying to decode a backup information structure in directory %s:  %s
+SEVERE_ERR_BACKUPINFO_NO_BACKUP_ID_297=Unable to decode a backup information \
+ structure in directory %s because the structure did not include a backup ID
+SEVERE_ERR_BACKUPINFO_NO_BACKUP_DATE_298=The backup information structure \
+ with backup ID %s in Unable to decode a backup information structure in \
+ directory %s was not valid because it did not contain the backup date
+SEVERE_ERR_BACKUPDIRECTORY_ADD_DUPLICATE_ID_299=Cannot add a backup with ID \
+ %s to backup directory %s because another backup already exists with that ID
+SEVERE_ERR_BACKUPDIRECTORY_NO_SUCH_BACKUP_300=Cannot remove backup %s from \
+ backup directory %s because no backup with that ID exists in that directory
+SEVERE_ERR_BACKUPDIRECTORY_UNRESOLVED_DEPENDENCY_301=Cannot remove backup %s \
+ from backup directory %s because it is listed as a dependency for backup %s
+SEVERE_ERR_BACKUPDIRECTORY_CANNOT_CREATE_DIRECTORY_302=Backup directory %s \
+ does not exist and an error occurred while attempting to create it:  %s
+SEVERE_ERR_BACKUPDIRECTORY_NOT_DIRECTORY_303=The path %s specifies as a \
+ backup directory exists but does not reference a directory
+SEVERE_ERR_BACKUPDIRECTORY_CANNOT_DELETE_SAVED_DESCRIPTOR_304=An error \
+ occurred while trying to remove saved backup descriptor file %s:  %s.  The \
+ new backup descriptor has been written to %s but will not be used until it is \
+ manually renamed to %s
+SEVERE_ERR_BACKUPDIRECTORY_CANNOT_RENAME_CURRENT_DESCRIPTOR_305=An error \
+ occurred while trying to rename the current backup descriptor file %s to %s: \
+ %s.  The new backup descriptor has been written to %s but will not be used \
+ until it is manually renamed to %s
+SEVERE_ERR_BACKUPDIRECTORY_CANNOT_RENAME_NEW_DESCRIPTOR_306=An error occurred \
+ while trying to rename the new backup descriptor file %s to %s:  %s.  The new \
+ backup descriptor will not be used until it is manually renamed
+SEVERE_ERR_BACKUPDIRECTORY_NO_DESCRIPTOR_FILE_307=No backup directory \
+ descriptor file was found at %s
+SEVERE_ERR_BACKUPDIRECTORY_CANNOT_READ_CONFIG_ENTRY_DN_308=The backup \
+ descriptor file %s is invalid because the first line should have contained \
+ the DN of the backend configuration entry but was blank
+SEVERE_ERR_BACKUPDIRECTORY_FIRST_LINE_NOT_DN_309=The backup descriptor file \
+ %s is invalid because the first line of the file was "%s", but the DN of the \
+ backend configuration entry was expected
+SEVERE_ERR_BACKUPDIRECTORY_CANNOT_DECODE_DN_310=An error occurred while \
+ trying to decode the value "%s" read from the first line of %s as the DN of \
+ the backend configuration entry:  %s
+MILD_ERR_FILELOCKER_LOCK_SHARED_REJECTED_BY_EXCLUSIVE_311=The attempt to \
+ obtain a shared lock on file %s was rejected because an exclusive lock was \
+ already held on that file
+MILD_ERR_FILELOCKER_LOCK_SHARED_FAILED_CREATE_312=The attempt to obtain a \
+ shared lock on file %s was rejected because the attempt to create the lock \
+ file failed:  %s
+MILD_ERR_FILELOCKER_LOCK_SHARED_FAILED_OPEN_313=The attempt to obtain a \
+ shared lock on file %s was rejected because the attempt to open the lock file \
+ failed:  %s
+MILD_ERR_FILELOCKER_LOCK_SHARED_FAILED_LOCK_314=The attempt to obtain a \
+ shared lock on file %s was rejected because an error occurred while \
+ attempting to acquire the lock:  %s
+MILD_ERR_FILELOCKER_LOCK_SHARED_NOT_GRANTED_315=The shared lock requested for \
+ file %s was not granted, which indicates that another process already holds \
+ an exclusive lock on that file
+MILD_ERR_FILELOCKER_LOCK_EXCLUSIVE_REJECTED_BY_EXCLUSIVE_316=The attempt to \
+ obtain an exclusive lock on file %s was rejected because an exclusive lock \
+ was already held on that file
+MILD_ERR_FILELOCKER_LOCK_EXCLUSIVE_REJECTED_BY_SHARED_317=The attempt to \
+ obtain an exclusive lock on file %s was rejected because a shared lock was \
+ already held on that file
+MILD_ERR_FILELOCKER_LOCK_EXCLUSIVE_FAILED_CREATE_318=The attempt to obtain an \
+ exclusive lock on file %s was rejected because the attempt to create the lock \
+ file failed:  %s
+MILD_ERR_FILELOCKER_LOCK_EXCLUSIVE_FAILED_OPEN_319=The attempt to obtain an \
+ exclusive lock on file %s was rejected because the attempt to open the lock \
+ file failed:  %s
+MILD_ERR_FILELOCKER_LOCK_EXCLUSIVE_FAILED_LOCK_320=The attempt to obtain an \
+ exclusive lock on file %s was rejected because an error occurred while \
+ attempting to acquire the lock:  %s
+MILD_ERR_FILELOCKER_LOCK_EXCLUSIVE_NOT_GRANTED_321=The exclusive lock \
+ requested for file %s was not granted, which indicates that another process \
+ already holds a shared or exclusive lock on that file
+MILD_ERR_FILELOCKER_UNLOCK_EXCLUSIVE_FAILED_RELEASE_322=The attempt to \
+ release the exclusive lock held on %s failed:  %s
+MILD_ERR_FILELOCKER_UNLOCK_SHARED_FAILED_RELEASE_323=The attempt to release \
+ the shared lock held on %s failed:  %s
+MILD_ERR_FILELOCKER_UNLOCK_UNKNOWN_FILE_324=The attempt to release the lock \
+ held on %s failed because no record of a lock on that file was found
+INFO_RESULT_CLIENT_SIDE_SERVER_DOWN_325=Server Connection Closed
+INFO_RESULT_CLIENT_SIDE_LOCAL_ERROR_326=Local Error
+INFO_RESULT_CLIENT_SIDE_ENCODING_ERROR_327=Encoding Error
+INFO_RESULT_CLIENT_SIDE_DECODING_ERROR_328=Decoding Error
+INFO_RESULT_CLIENT_SIDE_TIMEOUT_329=Client-Side Timeout
+INFO_RESULT_CLIENT_SIDE_AUTH_UNKNOWN_330=Unknown Authentication Mechanism
+INFO_RESULT_CLIENT_SIDE_FILTER_ERROR_331=Filter Error
+INFO_RESULT_CLIENT_SIDE_USER_CANCELLED_332=Cancelled by User
+INFO_RESULT_CLIENT_SIDE_PARAM_ERROR_333=Parameter Error
+INFO_RESULT_CLIENT_SIDE_NO_MEMORY_334=Out of Memory
+INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR_335=Connect Error
+INFO_RESULT_CLIENT_SIDE_NOT_SUPPORTED_336=Operation Not Supported
+INFO_RESULT_CLIENT_SIDE_CONTROL_NOT_FOUND_337=Control Not Found
+INFO_RESULT_CLIENT_SIDE_NO_RESULTS_RETURNED_338=No Results Returned
+INFO_RESULT_CLIENT_SIDE_MORE_RESULTS_TO_RETURN_339=More Results to Return
+INFO_RESULT_CLIENT_SIDE_CLIENT_LOOP_340=Referral Loop Detected
+INFO_RESULT_CLIENT_SIDE_REFERRAL_LIMIT_EXCEEDED_341=Referral Hop Limit \
+ Exceeded
+SEVERE_WARN_SHUTDOWN_CANNOT_RELEASE_SHARED_BACKEND_LOCK_342=An error occurred \
+ while attempting to release a shared lock for backend %s:  %s.  This lock \
+ should be automatically cleaned when the Directory Server process exits, so \
+ no additional action should be necessary
+FATAL_ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK_343=The Directory Server could \
+ not acquire an exclusive lock on file %s:  %s.  This generally means that \
+ another instance of this server is already running
+SEVERE_WARN_CANNOT_RELEASE_EXCLUSIVE_SERVER_LOCK_344=An error occurred while \
+ attempting to release the exclusive server lock held on file %s:  %s.  This \
+ lock should be automatically cleaned when the Directory Server process exits, \
+ so no additional action should be necessary
+INFO_ERROR_CATEGORY_TASK_345=task
+MILD_ERR_MODIFY_ATTR_IS_NO_USER_MOD_346=Entry %s cannot be modified because \
+ the modification attempted to update attribute %s which is defined as \
+ NO-USER-MODIFICATION in the server schema
+MILD_ERR_ADD_ATTR_IS_NO_USER_MOD_347=Entry %s cannot be added because it \
+ includes attribute %s which is defined as NO-USER-MODIFICATION in the server \
+ schema
+MILD_ERR_MODDN_OLD_RDN_ATTR_IS_NO_USER_MOD_348=Entry %s cannot be renamed \
+ because the current DN includes attribute %s which is defined as \
+ NO-USER-MODIFICATION in the server schema and the deleteOldRDN flag was set \
+ in the modify DN request
+MILD_ERR_MODDN_NEW_RDN_ATTR_IS_NO_USER_MOD_349=Entry %s cannot be renamed \
+ because the new RDN includes attribute %s which is defined as \
+ NO-USER-MODIFICATION in the server schema, and the target value for that \
+ attribute is not already included in the entry
+MILD_ERR_MODDN_PREOP_INCREMENT_NO_ATTR_350=The modify DN operation for entry \
+ %s cannot be performed because a pre-operation plugin attempted to increment \
+ attribute %s but that attribute does not exist in the target entry
+MILD_ERR_MODDN_PREOP_INCREMENT_MULTIPLE_VALUES_351=The modify DN operation \
+ for entry %s cannot be performed because a pre-operation plugin attempted to \
+ increment attribute %s but that attribute has multiple values in the target \
+ entry
+MILD_ERR_MODDN_PREOP_INCREMENT_VALUE_NOT_INTEGER_352=The modify DN operation \
+ for entry %s cannot be performed because a pre-operation plugin attempted to \
+ increment attribute %s but the value of that attribute is not an integer
+MILD_ERR_MODDN_PREOP_INCREMENT_NO_AMOUNT_353=The modify DN operation for \
+ entry %s cannot be performed because a pre-operation plugin attempted to \
+ increment attribute %s but no increment amount was provided
+MILD_ERR_MODDN_PREOP_INCREMENT_MULTIPLE_AMOUNTS_354=The modify DN operation \
+ for entry %s cannot be performed because a pre-operation plugin attempted to \
+ increment attribute %s but multiple increment amount values were provided
+MILD_ERR_MODDN_PREOP_INCREMENT_AMOUNT_NOT_INTEGER_355=The modify DN operation \
+ for entry %s cannot be performed because a pre-operation plugin attempted to \
+ increment attribute %s but the increment amount value was not an integer
+MILD_ERR_MODDN_PREOP_VIOLATES_SCHEMA_356=The modify DN operation for entry %s \
+ cannot be performed because a pre-operation plugin modified the entry in a \
+ way that caused it to violate the server schema:  %s
+MILD_ERR_MODIFY_ASSERTION_FAILED_357=Entry %s cannot be modified because the \
+ request contained an LDAP assertion control and the associated filter did not \
+ match the contents of the that entry
+MILD_ERR_MODIFY_CANNOT_PROCESS_ASSERTION_FILTER_358=Entry %s cannot be \
+ modified because the request contained an LDAP assertion control, but an \
+ error occurred while attempting to compare the target entry against the \
+ filter contained in that control:  %s
+MILD_ERR_MODIFY_UNSUPPORTED_CRITICAL_CONTROL_359=Entry %s cannot be modified \
+ because the request contained a critical control with OID %s that is not \
+ supported by the Directory Server for this type of operation
+MILD_ERR_DELETE_CANNOT_GET_ENTRY_FOR_ASSERTION_360=Entry %s cannot be removed \
+ because the delete request contains an LDAP assertion control and an error \
+ occurred while trying to retrieve the target entry to compare it against the \
+ associated filter:  %s
+MILD_ERR_DELETE_NO_SUCH_ENTRY_FOR_ASSERTION_361=Entry %s cannot be removed \
+ because it was determined that the target entry does not exist while \
+ attempting to process it against the LDAP assertion control contained in the \
+ request
+MILD_ERR_DELETE_ASSERTION_FAILED_362=Entry %s cannot be removed because the \
+ request contained an LDAP assertion control and the associated filter did not \
+ match the contents of the that entry
+MILD_ERR_DELETE_CANNOT_PROCESS_ASSERTION_FILTER_363=Entry %s cannot be \
+ removed because the request contained an LDAP assertion control, but an error \
+ occurred while attempting to compare the target entry against the filter \
+ contained in that control:  %s
+MILD_ERR_DELETE_UNSUPPORTED_CRITICAL_CONTROL_364=Entry %s cannot be removed \
+ because the request contained a critical control with OID %s that is not \
+ supported by the Directory Server for this type of operation
+MILD_ERR_MODDN_ASSERTION_FAILED_365=Entry %s cannot be renamed because the \
+ request contained an LDAP assertion control and the associated filter did not \
+ match the contents of the that entry
+MILD_ERR_MODDN_CANNOT_PROCESS_ASSERTION_FILTER_366=Entry %s cannot be renamed \
+ because the request contained an LDAP assertion control, but an error \
+ occurred while attempting to compare the target entry against the filter \
+ contained in that control:  %s
+MILD_ERR_MODDN_UNSUPPORTED_CRITICAL_CONTROL_367=Entry %s cannot be renamed \
+ because the request contained a critical control with OID %s that is not \
+ supported by the Directory Server for this type of operation
+MILD_ERR_ADD_ASSERTION_FAILED_368=Entry %s cannot be added because the \
+ request contained an LDAP assertion control and the associated filter did not \
+ match the contents of the provided entry
+MILD_ERR_ADD_CANNOT_PROCESS_ASSERTION_FILTER_369=Entry %s cannot be added \
+ because the request contained an LDAP assertion control, but an error \
+ occurred while attempting to compare the provided entry against the filter \
+ contained in that control:  %s
+MILD_ERR_ADD_UNSUPPORTED_CRITICAL_CONTROL_370=Entry %s cannot be added \
+ because the request contained a critical control with OID %s that is not \
+ supported by the Directory Server for this type of operation
+MILD_ERR_SEARCH_CANNOT_GET_ENTRY_FOR_ASSERTION_371=The search request cannot \
+ be processed because it contains an LDAP assertion control and an error \
+ occurred while trying to retrieve the base entry to compare it against the \
+ assertion filter:  %s
+MILD_ERR_SEARCH_NO_SUCH_ENTRY_FOR_ASSERTION_372=The search request cannot be \
+ processed because it contains an LDAP assertion control but the search base \
+ entry does not exist
+MILD_ERR_SEARCH_ASSERTION_FAILED_373=The search request cannot be processed \
+ because it contains an LDAP assertion control and the assertion filter did \
+ not match the contents of the base entry
+MILD_ERR_SEARCH_CANNOT_PROCESS_ASSERTION_FILTER_374=The search request cannot \
+ be processed because it contains an LDAP assertion control, but an error \
+ occurred while attempting to compare the base entry against the assertion \
+ filter:  %s
+MILD_ERR_SEARCH_UNSUPPORTED_CRITICAL_CONTROL_375=The search request cannot be \
+ processed because it contains a critical control with OID %s that is not \
+ supported by the Directory Server for this type of operation
+MILD_ERR_COMPARE_ASSERTION_FAILED_376=Cannot perform the compare operation on \
+ entry %s because the request contained an LDAP assertion control and the \
+ associated filter did not match the contents of the that entry
+MILD_ERR_COMPARE_CANNOT_PROCESS_ASSERTION_FILTER_377=Cannot perform the \
+ compare operation on entry %s because the request contained an LDAP assertion \
+ control, but an error occurred while attempting to compare the target entry \
+ against the filter contained in that control:  %s
+MILD_ERR_COMPARE_UNSUPPORTED_CRITICAL_CONTROL_378=Cannot perform the compare \
+ operation on entry %s because the request contained a critical control with \
+ OID %s that is not supported by the Directory Server for this type of \
+ operation
+INFO_ADD_NOOP_379=The add operation was not actually performed in the \
+ Directory Server backend because the LDAP no-op control was present in the \
+ request
+INFO_DELETE_NOOP_380=The delete operation was not actually performed in the \
+ Directory Server backend because the LDAP no-op control was present in the \
+ request
+INFO_MODIFY_NOOP_381=The modify operation was not actually performed in the \
+ Directory Server backend because the LDAP no-op control was present in the \
+ request
+INFO_MODDN_NOOP_382=The modify DN operation was not actually performed in the \
+ Directory Server backend because the LDAP no-op control was present in the \
+ request
+MILD_ERR_DELETE_PREREAD_NO_ENTRY_383=Entry %s cannot be removed because it \
+ was determined that the target entry does not exist while attempting to \
+ process it against the LDAP pre-read request control
+INFO_RESULT_AUTHORIZATION_DENIED_384=Authorization Denied
+SEVERE_ERR_ADD_MISSING_RDN_ATTRIBUTE_385=Entry %s cannot be added because it \
+ is missing attribute %s that is contained in the entry's RDN.  All attributes \
+ used in the RDN must also be provided in the attribute list for the entry
+SEVERE_ERR_ADD_ERROR_NOTIFYING_CHANGE_LISTENER_386=An unexpected error \
+ occurred while notifying a change notification listener of an add operation: \
+ %s
+SEVERE_ERR_ADD_ERROR_NOTIFYING_PERSISTENT_SEARCH_387=An unexpected error \
+ occurred while notifying persistent search %s of an add operation:  %s.  The \
+ persistent search has been terminated
+SEVERE_ERR_DELETE_ERROR_NOTIFYING_CHANGE_LISTENER_388=An unexpected error \
+ occurred while notifying a change notification listener of a delete \
+ operation:  %s
+SEVERE_ERR_DELETE_ERROR_NOTIFYING_PERSISTENT_SEARCH_389=An unexpected error \
+ occurred while notifying persistent search %s of a delete operation:  %s. \
+ The persistent search has been terminated
+SEVERE_ERR_MODIFY_ERROR_NOTIFYING_CHANGE_LISTENER_390=An unexpected error \
+ occurred while notifying a change notification listener of a modify \
+ operation:  %s
+SEVERE_ERR_MODIFY_ERROR_NOTIFYING_PERSISTENT_SEARCH_391=An unexpected error \
+ occurred while notifying persistent search %s of a modify operation:  %s. \
+ The persistent search has been terminated
+SEVERE_ERR_MODDN_ERROR_NOTIFYING_CHANGE_LISTENER_392=An unexpected error \
+ occurred while notifying a change notification listener of a modify DN \
+ operation:  %s
+SEVERE_ERR_MODDN_ERROR_NOTIFYING_PERSISTENT_SEARCH_393=An unexpected error \
+ occurred while notifying persistent search %s of a modify DN operation:  %s. \
+ The persistent search has been terminated
+SEVERE_ERR_BIND_UNSUPPORTED_CRITICAL_CONTROL_394=Unable to process the bind \
+ request because it contained a control with OID %s that was marked critical \
+ but this control is not supported for the bind operation
+SEVERE_WARN_BIND_MULTIPLE_USER_SIZE_LIMITS_395=There are multiple \
+ user-specific size limit values contained in user entry %s.  The default \
+ server size limit will be used
+SEVERE_WARN_BIND_CANNOT_PROCESS_USER_SIZE_LIMIT_396=The user-specific size \
+ limit value %s contained in user entry %s could not be parsed as an integer. \
+ The default server size limit will be used
+SEVERE_WARN_BIND_MULTIPLE_USER_TIME_LIMITS_397=There are multiple \
+ user-specific time limit values contained in user entry %s.  The default \
+ server time limit will be used
+SEVERE_WARN_BIND_CANNOT_PROCESS_USER_TIME_LIMIT_398=The user-specific time \
+ limit value %s contained in user entry %s could not be parsed as an integer. \
+ The default server time limit will be used
+INFO_RESULT_ASSERTION_FAILED_399=Assertion Failed
+SEVERE_ERR_ADD_ENTRY_ALREADY_EXISTS_400=The entry %s cannot be added because \
+ an entry with that name already exists
+SEVERE_ERR_ADD_SYNCH_PREOP_FAILED_401=An error occurred during preoperation \
+ synchronization processing for the add operation with connection ID %d and \
+ operation ID %d:  %s
+SEVERE_ERR_ADD_SYNCH_POSTOP_FAILED_402=An error occurred during postoperation \
+ synchronization processing for the add operation with connection ID %d and \
+ operation ID %d:  %s
+SEVERE_ERR_DELETE_SYNCH_PREOP_FAILED_403=An error occurred during \
+ preoperation synchronization processing for the delete operation with \
+ connection ID %d and operation ID %d:  %s
+SEVERE_ERR_DELETE_SYNCH_POSTOP_FAILED_404=An error occurred during \
+ postoperation synchronization processing for the delete operation with \
+ connection ID %d and operation ID %d:  %s
+SEVERE_ERR_MODIFY_SYNCH_PREOP_FAILED_405=An error occurred during \
+ preoperation synchronization processing for the modify operation with \
+ connection ID %d and operation ID %d:  %s
+SEVERE_ERR_MODIFY_SYNCH_POSTOP_FAILED_406=An error occurred during \
+ postoperation synchronization processing for the modify operation with \
+ connection ID %d and operation ID %d:  %s
+SEVERE_ERR_MODDN_SYNCH_PREOP_FAILED_407=An error occurred during preoperation \
+ synchronization processing for the modify DN operation with connection ID %d \
+ and operation ID %d:  %s
+SEVERE_ERR_MODDN_SYNCH_POSTOP_FAILED_408=An error occurred during \
+ postoperation synchronization processing for the modify DN operation with \
+ connection ID %d and operation ID %d:  %s
+SEVERE_ERR_ADD_SYNCH_CONFLICT_RESOLUTION_FAILED_409=An error occurred during \
+ conflict resolution synchronization processing for the add operation with \
+ connection ID %d and operation ID %d:  %s
+SEVERE_ERR_DELETE_SYNCH_CONFLICT_RESOLUTION_FAILED_410=An error occurred \
+ during conflict resolution synchronization processing for the delete \
+ operation with connection ID %d and operation ID %d:  %s
+SEVERE_ERR_MODIFY_SYNCH_CONFLICT_RESOLUTION_FAILED_411=An error occurred \
+ during conflict resolution synchronization processing for the modify \
+ operation with connection ID %d and operation ID %d:  %s
+SEVERE_ERR_MODDN_SYNCH_CONFLICT_RESOLUTION_FAILED_412=An error occurred \
+ during conflict resolution synchronization processing for the modify DN \
+ operation with connection ID %d and operation ID %d:  %s
+SEVERE_ERR_ADD_SERVER_READONLY_413=Unable to add entry %s because the \
+ Directory Server is configured in read-only mode
+SEVERE_ERR_ADD_BACKEND_READONLY_414=Unable to add entry %s because the \
+ backend that should hold that entry is configured in read-only mode
+SEVERE_ERR_DELETE_SERVER_READONLY_415=Unable to delete entry %s because the \
+ Directory Server is configured in read-only mode
+SEVERE_ERR_DELETE_BACKEND_READONLY_416=Unable to delete entry %s because the \
+ backend that holds that entry is configured in read-only mode
+SEVERE_ERR_MODIFY_SERVER_READONLY_417=Unable to modify entry %s because the \
+ Directory Server is configured in read-only mode
+SEVERE_ERR_MODIFY_BACKEND_READONLY_418=Unable to modify entry %s because the \
+ backend that holds that entry is configured in read-only mode
+SEVERE_ERR_MODDN_SERVER_READONLY_419=Unable to rename entry %s because the \
+ Directory Server is configured in read-only mode
+SEVERE_ERR_MODDN_BACKEND_READONLY_420=Unable to rename entry %s because the \
+ backend that holds that entry is configured in read-only mode
+SEVERE_ERR_BIND_DN_BUT_NO_PASSWORD_421=Unable to process the simple bind \
+ request because it contained a bind DN but no password, which is forbidden by \
+ the server configuration
+SEVERE_ERR_PWPOLICY_NO_PASSWORD_ATTRIBUTE_422=The password policy \
+ configuration entry "%s" does not contain a value for attribute \
+ ds-cfg-password-attribute, which specifies the attribute to hold user \
+ passwords
+SEVERE_ERR_PWPOLICY_NO_DEFAULT_STORAGE_SCHEMES_423=The password policy \
+ configuration entry "%s" does not contain any values for attribute \
+ ds-cfg-default-password-storage-scheme, which specifies the set of default \
+ password storage schemes
+INFO_PWPOLICY_DESCRIPTION_PW_ATTR_424=Specifies the attribute type used to \
+ hold user passwords.  This attribute type must be defined in the server \
+ schema.  Changes to this configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_UNDEFINED_PASSWORD_ATTRIBUTE_425=The password policy \
+ definition contained in configuration entry "%s" is invalid because the \
+ specified password attribute "%s" is not defined in the server schema
+SEVERE_ERR_PWPOLICY_INVALID_PASSWORD_ATTRIBUTE_SYNTAX_426=The password policy \
+ definition contained in configuration entry "%s" is invalid because the \
+ specified password attribute "%s" has a syntax OID of %s.  The password \
+ attribute must have a syntax OID of either 1.3.6.1.4.1.26027.1.3.1 (for the \
+ user password syntax) or 1.3.6.1.4.1.4203.1.1.2 (for the authentication \
+ password syntax)
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_PASSWORD_ATTRIBUTE_427=An error occurred \
+ while attempting to determine the value of attribute \
+ ds-cfg-password-attribute in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_DEFAULT_STORAGE_SCHEMES_428=Specifies the password \
+ storage scheme (or set of schemes) that will be used to encode clear-text \
+ passwords.  If multiple default storage schemes are defined for a password \
+ policy, then the same password will be encoded using all of those schemes. \
+ Changes to this configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_NO_SUCH_DEFAULT_SCHEME_429=The password policy definition \
+ contained in configuration entry "%s" is invalid because it references a \
+ default password storage scheme "%s" that is not defined in the server \
+ configuration
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_DEFAULT_STORAGE_SCHEMES_430=An error \
+ occurred while attempting to determine the values for attribute \
+ ds-cfg-default-password-storage-scheme in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_DEPRECATED_STORAGE_SCHEMES_431=Specifies the \
+ password storage scheme (or set of schemes) that should be considered \
+ deprecated.  If an authenticating user has a password encoded with one of \
+ these schemes, those passwords will be removed and replaced with passwords \
+ encoded using the default schemes.  Changes to this configuration attribute \
+ will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_DEPRECATED_STORAGE_SCHEMES_432=An error \
+ occurred while attempting to determine the values for attribute \
+ ds-cfg-deprecated-password-storage-scheme in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_PASSWORD_VALIDATORS_433=Specifies the DN(s) of the \
+ password validator(s) that should be used with the associated password \
+ storage scheme.  Changes to this configuration attribute will take effect \
+ immediately
+SEVERE_ERR_PWPOLICY_NO_SUCH_VALIDATOR_434=The password policy definition \
+ contained in configuration entry "%s" is invalid because it references a \
+ password validator "%s" that is not defined in the server configuration
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_PASSWORD_VALIDATORS_435=An error \
+ occurred while attempting to determine the values for attribute \
+ ds-cfg-password-validator-dn in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_NOTIFICATION_HANDLERS_436=Specifies the DN(s) of \
+ the account status notification handler(s) that should be used with the \
+ associated password storage scheme.  Changes to this configuration attribute \
+ will take effect immediately
+SEVERE_ERR_PWPOLICY_NO_SUCH_NOTIFICATION_HANDLER_437=The password policy \
+ definition contained in configuration entry "%s" is invalid because it \
+ references account status notification handler "%s" that is not defined in \
+ the server configuration
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_NOTIFICATION_HANDLERS_438=An error \
+ occurred while attempting to determine the values for attribute \
+ ds-cfg-account-status-notification-handler-dn in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_ALLOW_USER_PW_CHANGES_439=Indicates whether users \
+ will be allowed to change their own passwords.  This check is made in \
+ addition to access control evaluation, and therefore both must allow the \
+ password change for it to occur.  Changes to this configuration attribute \
+ will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_ALLOW_USER_PW_CHANGES_440=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-allow-user-password-changes in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_REQUIRE_CURRENT_PW_441=Indicates whether user \
+ password changes will be required to use the password modify extended \
+ operation and include the user's current password before the change will be \
+ allowed.  Changes to this configuration attribute will take effect \
+ immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_REQUIRE_CURRENT_PW_442=An error occurred \
+ while attempting to determine the value for attribute \
+ ds-cfg-allow-user-password-changes in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_FORCE_CHANGE_ON_RESET_443=Indicates whether users \
+ will be forced to change their passwords if they are reset by an \
+ administrator.  For this purpose, anyone with permission to change a given \
+ user's password other than that user will be considered an administrator. \
+ Changes to this configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_FORCE_CHANGE_ON_RESET_444=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-force-change-on-reset in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_SKIP_ADMIN_VALIDATION_445=Indicates whether \
+ passwords set by administrators (in add, modify, or password modify \
+ operations) will be allowed to bypass the password validation process that \
+ will be required for user password changes.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_SKIP_ADMIN_VALIDATION_446=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-skip-validation-for-administrators in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_PASSWORD_GENERATOR_447=Specifies the DN of the \
+ configuration entry that references the password generator for use with the \
+ associated password policy.  This will be used in conjunction with the \
+ password modify extended operation to generate a new password for a user when \
+ none was provided in the request.  Changes to this configuration attribute \
+ will take effect immediately
+SEVERE_ERR_PWPOLICY_NO_SUCH_GENERATOR_448=The password policy definition \
+ contained in configuration entry "%s" is invalid because it references \
+ password generator "%s" that is not defined in the server configuration
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_PASSWORD_GENERATOR_449=An error occurred \
+ while attempting to determine the value for attribute \
+ ds-cfg-password-generator-dn in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_REQUIRE_SECURE_AUTH_450=Indicates whether users \
+ with the associated password policy will be required to authenticate in a \
+ secure manner.  This could mean either using a secure communication channel \
+ between the client and the server, or using a SASL mechanism that does not \
+ expose the credentials.  Changes to this configuration attribute will take \
+ effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_REQUIRE_SECURE_AUTH_451=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-require-secure-authentication in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_REQUIRE_SECURE_CHANGES_452=Indicates whether users \
+ with the associated password policy will be required to change their password \
+ in a secure manner that does not expose the credentials.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_REQUIRE_SECURE_CHANGES_453=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-require-secure-password-changes in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_ALLOW_PREENCODED_454=Indicates whether users will \
+ be allowed to change their passwords by providing a pre-encoded value.  This \
+ can cause a security risk because the clear-text version of the password is \
+ not known and therefore validation checks cannot be applied to it.  Changes \
+ to this configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_ALLOW_PREENCODED_455=An error occurred \
+ while attempting to determine the value for attribute \
+ ds-cfg-allow-pre-encoded-passwords in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_MIN_AGE_456=Specifies the minimum length of time \
+ that must pass after a password change before the user will be allowed to \
+ change the password again.  The value of this attribute should be an integer \
+ followed by a unit of seconds, minutes, hours, days, or weeks.  This setting \
+ can be used to prevent users from changing their passwords repeatedly over a \
+ short period of time to flush and old password from the history so that it \
+ may be re-used.  Changes to this configuration attribute will take effect \
+ immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_MIN_AGE_457=An error occurred while \
+ attempting to determine the value for attribute ds-cfg-minimum-password-age \
+ in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_MAX_AGE_458=Specifies the maximum length of time \
+ that a user may continue using the same password before it must be changed \
+ (i.e., the password expiration interval).  The value of this attribute should \
+ be an integer followed by a unit of seconds, minutes, hours, days, or weeks. \
+ A value of 0 seconds will disable password expiration.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_MAX_AGE_459=An error occurred while \
+ attempting to determine the value for attribute ds-cfg-maximum-password-age \
+ in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_MAX_RESET_AGE_460=Specifies the maximum length of \
+ time that users have to change passwords after they have been reset by an \
+ administrator before they become locked.  The value of this attribute should \
+ be an integer followed by a unit of seconds, minutes, hours, days, or weeks. \
+ A value of 0 seconds will disable this feature.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_MAX_RESET_AGE_461=An error occurred \
+ while attempting to determine the value for attribute \
+ ds-cfg-maximum-password-reset-age in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_WARNING_INTERVAL_462=Specifies the maximum length \
+ of time before a user's password actually expires that the server will begin \
+ to include warning notifications in bind responses for that user.  The value \
+ of this attribute should be an integer followed by a unit of seconds, \
+ minutes, hours, days, or weeks.  A value of 0 seconds will disable the \
+ warning interval.  Changes to this configuration attribute will take effect \
+ immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_WARNING_INTERVAL_463=An error occurred \
+ while attempting to determine the value for attribute \
+ ds-cfg-password-expiration-warning-interval in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_EXPIRE_WITHOUT_WARNING_464=Indicates whether the \
+ Directory Server should allow a user's password to expire even if that user \
+ has never seen an expiration warning notification.  If this setting is \
+ enabled, then accounts will always be expired when the expiration time \
+ arrives.  If it is disabled, then the user will always receive at least one \
+ warning notification, and the password expiration will be set to the warning \
+ time plus the warning interval.  Changes to this configuration attribute will \
+ take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_EXPIRE_WITHOUT_WARNING_465=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-expire-passwords-without-warning in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_ALLOW_EXPIRED_CHANGES_466=Indicates whether a user \
+ whose password is expired will still be allowed to change that password using \
+ the password modify extended operation.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_ALLOW_EXPIRED_CHANGES_467=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-allow-expired-password-changes in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_GRACE_LOGIN_COUNT_468=Specifies the number of grace \
+ logins that a user will be allowed after the account has expired to allow \
+ that user to choose a new password.  A value of 0 indicates that no grace \
+ logins will be allowed.  Changes to this configuration attribute will take \
+ effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_GRACE_LOGIN_COUNT_469=An error occurred \
+ while attempting to determine the value for attribute \
+ ds-cfg-grace-login-count in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_LOCKOUT_FAILURE_COUNT_470=Specifies the maximum \
+ number of authentication failures that a user should be allowed before the \
+ account is locked out.  A value of 0 indicates that accounts should never be \
+ locked out due to failed attempts.  changes to this configuration attribute \
+ will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_LOCKOUT_FAILURE_COUNT_471=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-lockout-failure-count in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_LOCKOUT_DURATION_472=Specifies the length of time \
+ that an account should be locked after too many authentication failures.  The \
+ value of this attribute should be an integer followed by a unit of seconds, \
+ minutes, hours, days, or weeks.  A value of 0 seconds indicates that the \
+ account should remain locked until an administrator resets the password. \
+ Changes to this configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_LOCKOUT_DURATION_473=An error occurred \
+ while attempting to determine the value for attribute ds-cfg-lockout-duration \
+ in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_FAILURE_EXPIRATION_474=Specifies the length of time \
+ that should pass before an authentication failure is no longer counted \
+ against a user for the purposes of account lockout.  The value of this \
+ attribute should be an integer followed by a unit of seconds, minutes, hours, \
+ days, or weeks.  A value of 0 seconds indicates that the authentication \
+ failures should never expire.  The failure count will always be cleared upon \
+ a successful authentication.  Changes to this configuration attribute will \
+ take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_FAILURE_EXPIRATION_475=An error occurred \
+ while attempting to determine the value for attribute \
+ ds-cfg-lockout-failure-expiration-interval in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_REQUIRE_CHANGE_BY_TIME_476=Specifies the time by \
+ which all users with the associated password policy must change their \
+ passwords.  The value should be expressed in a generalized time format.  If \
+ this time is equal to the current time or is in the past, then all users will \
+ be required to change their passwords immediately.  The behavior of the \
+ server in this mode will be identical to the behavior observed when users are \
+ forced to change their passwords after an administrative reset.  Changes to \
+ this configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_REQUIRE_CHANGE_BY_TIME_477=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-require-change-by-time in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_LAST_LOGIN_TIME_ATTR_478=Specifies the name or OID \
+ of the attribute type that should be used to hold the last login time for \
+ users with the associated password policy.   This attribute type must be \
+ defined in the Directory Server schema and must either be defined as an \
+ operational attribute or must be allowed by the set of objectClasses for all \
+ users with the associated password policy.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_UNDEFINED_LAST_LOGIN_TIME_ATTRIBUTE_479=The password \
+ policy definition contained in configuration entry "%s" is invalid because \
+ the specified last login time attribute "%s" is not defined in the server \
+ schema
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_LAST_LOGIN_TIME_ATTR_480=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-last-login-time-attribute in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_LAST_LOGIN_TIME_FORMAT_481=Specifies the format \
+ string that should be used to generate the last login time value for users \
+ with the associated password policy.  This format string should conform to \
+ the syntax described in the API documentation for the \
+ <CODE>java.text.SimpleDateFormat</CODE> class.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_INVALID_LAST_LOGIN_TIME_FORMAT_482=The password policy \
+ definition contained in configuration entry "%s" is invalid because the \
+ specified last login time format "%s" is not a valid format string  The last \
+ login time format string should conform to the syntax described in the API \
+ documentation for the <CODE>java.text.SimpleDateFormat</CODE> class
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_LAST_LOGIN_TIME_FORMAT_483=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-last-login-time-format in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_PREVIOUS_LAST_LOGIN_TIME_FORMAT_484=Specifies the \
+ format string(s) that may have been used with the last login time at any \
+ point in the past for users associated with the password policy.  These \
+ values are used to make it possible to parse previous values, but will not be \
+ used to set new values.  These format strings should conform to the syntax \
+ described in the API documentation for the \
+ <CODE>java.text.SimpleDateFormat</CODE> class.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_INVALID_PREVIOUS_LAST_LOGIN_TIME_FORMAT_485=The password \
+ policy definition contained in configuration entry "%s" is invalid because \
+ the specified previous last login time format "%s" is not a valid format \
+ string  The previous last login time format strings should conform to the \
+ syntax described in the API documentation for the \
+ <CODE>java.text.SimpleDateFormat</CODE> class
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_PREVIOUS_LAST_LOGIN_TIME_FORMAT_486=An \
+ error occurred while attempting to determine the values for attribute \
+ ds-cfg-previous-last-login-time-format in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_IDLE_LOCKOUT_INTERVAL_487=Specifies the maximum \
+ length of time that an account may remain idle (i.e., the associated user \
+ does notauthenticate to the server) before that user is locked out.  The \
+ value of this attribute should be an integer followed by a unit of seconds, \
+ minutes, hours, days, or weeks.  A value of 0 seconds indicates that idle \
+ accounts should not automatically be locked out.  This feature will only be \
+ available if the last login time is maintained.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_IDLE_LOCKOUT_INTERVAL_488=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-idle-lockout-interval in configuration entry %s:  %s
+INFO_PWPOLICY_UPDATED_POLICY_489=The password policy defined in configuration \
+ entry %s has been successfully updated
+MILD_ERR_ADD_INVALID_PWPOLICY_DN_SYNTAX_490=Entry "%s" cannot be added \
+ because it contains an invalid password policy subentry DN:  %s
+MILD_ERR_ADD_NO_SUCH_PWPOLICY_491=Entry "%s" cannot be added because it \
+ references password policy subentry %s that does not exist or does not \
+ contain a valid password policy subentry definition
+INFO_PWPOLICY_DESCRIPTION_FORCE_CHANGE_ON_ADD_492=Indicates whether users \
+ will be forced to change their passwords upon first authenticating to the \
+ Directory Server after their account has been created.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_FORCE_CHANGE_ON_ADD_493=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-force-change-on-add in configuration entry %s:  %s
+INFO_PWPOLICY_DESCRIPTION_ALLOW_MULTIPLE_PW_VALUES_494=Indicates whether user \
+ entries will be allowed to have multiple distinct values for the password \
+ attribute.  This is potentially dangerous because many mechanisms used to \
+ change the password do not work well with such a configuration.  If multiple \
+ password values are allowed, then any of them may be used to authenticate, \
+ and they will all be subject to the same policy constraints.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_PWPOLICY_CANNOT_DETERMINE_ALLOW_MULTIPLE_PW_VALUES_495=An error \
+ occurred while attempting to determine the value for attribute \
+ ds-cfg-allow-multiple-password-values in configuration entry %s:  %s
+MILD_ERR_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED_496=Attribute options are not \
+ allowed for the password attribute %s
+MILD_ERR_PWPOLICY_MULTIPLE_PW_VALUES_NOT_ALLOWED_497=Only a single value may \
+ be provided for the password attribute %s
+MILD_ERR_PWPOLICY_PREENCODED_NOT_ALLOWED_498=Pre-encoded passwords are not \
+ allowed for the password attribute %s
+MILD_ERR_PWPOLICY_VALIDATION_FAILED_499=The password value for attribute %s \
+ was found to be unacceptable:  %s
+SEVERE_ERR_PWPOLICY_MUST_HAVE_WARNING_IF_NOT_EXPIRE_WITHOUT_WARNING_500=The \
+ password policy defined in configuration entry %s is configured to always \
+ send at least one warning notification before the password is expired, but no \
+ warning interval has been set.  If configuration attribute \
+ ds-cfg-expire-passwords-without-warning is set to "false", then configuration \
+ attribute ds-cfg-password-expiration-warning-interval must have a positive \
+ value
+MILD_ERR_ENQUEUE_BIND_IN_PROGRESS_501=A bind operation is currently in \
+ progress on the associated client connection.  No other requests may be made \
+ on this client connection until the bind processing has completed
+MILD_ERR_ENQUEUE_MUST_CHANGE_PASSWORD_502=You must change your password \
+ before you will be allowed to request any other operations
+MILD_ERR_PWPSTATE_CANNOT_DECODE_SUBENTRY_VALUE_AS_DN_504=An error occurred \
+ while attempting to decode the ds-pwp-password-policy-dn value "%s" in user \
+ entry "%s" as a DN:  %s
+MILD_ERR_PWPSTATE_NO_SUCH_POLICY_505=User entry %s is configured to use a \
+ password policy subentry of %s but no such password policy has been defined \
+ in the server configuration
+MILD_ERR_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME_506=An error occurred while \
+ attempting to decode value "%s" for attribute %s in user entry %s in \
+ accordance with the generalized time format:  %s
+MILD_ERR_PWPSTATE_CANNOT_DECODE_BOOLEAN_507=Unable to decode value "%s" for \
+ attribute %s in user entry %s as a Boolean value
+SEVERE_ERR_ADD_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS_508=The entry %s cannot be \
+ added due to insufficient access rights
+SEVERE_ERR_BIND_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS_509=The user %s cannot bind \
+ due to insufficient access rights
+SEVERE_ERR_COMPARE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS_510=The entry %s cannot \
+ be compared due to insufficient access rights
+SEVERE_ERR_DELETE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS_511=The entry %s cannot be \
+ deleted due to insufficient access rights
+SEVERE_ERR_EXTENDED_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS_512=The extended \
+ operation %s cannot be performed due to insufficient access rights
+SEVERE_ERR_MODDN_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS_513=The entry %s cannot be \
+ renamed due to insufficient access rights
+SEVERE_ERR_MODIFY_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS_514=The entry %s cannot be \
+ modified due to insufficient access rights
+SEVERE_ERR_SEARCH_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS_515=The entry %s cannot be \
+ searched due to insufficient access rights
+MILD_ERR_BIND_OPERATION_INSECURE_SIMPLE_BIND_516=Rejecting a simple bind \
+ request for user %s because the password policy requires secure \
+ authentication
+MILD_ERR_BIND_OPERATION_ACCOUNT_DISABLED_517=Rejecting a bind request for \
+ user %s because the account has been administrative disabled
+MILD_ERR_BIND_OPERATION_ACCOUNT_FAILURE_LOCKED_518=Rejecting a bind request \
+ for user %s because the account has been locked due to too many failed \
+ authentication attempts
+MILD_ERR_BIND_OPERATION_ACCOUNT_RESET_LOCKED_519=Rejecting a bind request for \
+ user %s because the account has been locked after the user's password was not \
+ changed in a timely manner after an administrative reset
+MILD_ERR_BIND_OPERATION_ACCOUNT_IDLE_LOCKED_520=Rejecting a bind request for \
+ user %s because the account has been locked after remaining idle for too long
+MILD_ERR_BIND_OPERATION_PASSWORD_EXPIRED_521=Rejecting a bind request for \
+ user %s because that user's password is expired
+MILD_ERR_PWPSTATE_CANNOT_UPDATE_USER_ENTRY_522=An error occurred while \
+ attempting to update password policy state information for user %s:  %s
+MILD_ERR_BIND_OPERATION_INSECURE_SASL_BIND_523=Rejecting a SASL %s bind \
+ request for user %s because the password policy requires secure \
+ authentication
+SEVERE_ERR_WORKQ_CANNOT_PARSE_DN_524=An error occurred while attempting to \
+ parse string %s as the DN of the work queue configuration entry:  %s
+SEVERE_ERR_WORKQ_NO_CONFIG_525=Work queue configuration entry %s does not \
+ exist in the server configuration
+INFO_WORKQ_DESCRIPTION_CLASS_526=Specifies the fully-qualified name of the \
+ Java class that provides the core work queue logic for the Directory Server. \
+ Changes to this configuration attribute require that the server be restarted \
+ for the change to take effect
+SEVERE_ERR_WORKQ_NO_CLASS_ATTR_527=Configuration entry %s does not contain \
+ required attribute %s that specifies the fully-qualified class name for the \
+ work queue implementation
+SEVERE_ERR_WORKQ_CANNOT_LOAD_528=An error occurred while trying to load class \
+ %s to use as the Directory Server work queue implementation:  %s
+SEVERE_ERR_WORKQ_CANNOT_INSTANTIATE_529=An error occurred while trying to \
+ create an instance of class %s to use as the Directory Server work queue:  %s
+SEVERE_ERR_CANNOT_REGISTER_DUPLICATE_ALTERNATE_ROOT_BIND_DN_530=The alternate \
+ root bind DN "%s" is already registered with the Directory Server for actual \
+ root entry DN "%s"
+MILD_ERR_BIND_OPERATION_ACCOUNT_EXPIRED_531=Rejecting a bind request for user \
+ %s because the account has expired
+MILD_ERR_MODIFY_PASSWORDS_CANNOT_HAVE_OPTIONS_532=Attributes used to hold \
+ user passwords are not allowed to have any attribute options
+MILD_ERR_MODIFY_NO_USER_PW_CHANGES_533=Users are not allowed to change their \
+ own passwords
+MILD_ERR_MODIFY_REQUIRE_SECURE_CHANGES_534=Password changes must be performed \
+ over a secure authentication channel
+MILD_ERR_MODIFY_WITHIN_MINIMUM_AGE_535=The password cannot be changed because \
+ it has not been long enough since the last password change
+MILD_ERR_MODIFY_MULTIPLE_VALUES_NOT_ALLOWED_536=Multiple password values are \
+ not allowed in user entries
+MILD_ERR_MODIFY_NO_PREENCODED_PASSWORDS_537=User passwords may not be \
+ provided in pre-encoded form
+MILD_ERR_MODIFY_INVALID_MOD_TYPE_FOR_PASSWORD_538=Invalid modification type \
+ %s attempted on password attribute %s
+MILD_ERR_MODIFY_NO_EXISTING_VALUES_539=The user entry does not have any \
+ existing passwords to remove
+MILD_ERR_MODIFY_CANNOT_DECODE_PW_540=An error occurred while attempting to \
+ decode an existing user password:  %s
+MILD_ERR_MODIFY_INVALID_PASSWORD_541=The provided user password does not \
+ match any password in the user's entry
+MILD_ERR_MODIFY_PW_CHANGE_REQUIRES_CURRENT_PW_542=The password policy \
+ requires that user password changes include the current password in the \
+ request
+MILD_ERR_MODIFY_MULTIPLE_PASSWORDS_NOT_ALLOWED_543=The password change would \
+ result in multiple password values in the user entry, which is not allowed
+MILD_ERR_MODIFY_PW_VALIDATION_FAILED_544=The provided password value was \
+ rejected by a password validator:  %s
+MILD_ERR_MODIFY_MUST_CHANGE_PASSWORD_545=You must change your password before \
+ you will be allowed to perform any other operations
+INFO_ERROR_CATEGORY_PASSWORD_POLICY_546=pw-policy
+MILD_WARN_BIND_PASSWORD_EXPIRING_547=The user password is about to expire \
+ (time to expiration:  %s)
+MILD_ERR_BIND_ACCOUNT_TEMPORARILY_LOCKED_548=The account has been locked as a \
+ result of too many failed authentication attempts (time to unlock:  %s)
+MILD_ERR_BIND_ACCOUNT_PERMANENTLY_LOCKED_549=The account has been locked as a \
+ result of too many failed authentication attempts.  It may only be unlocked \
+ by an administrator
+MILD_ERR_MODIFY_INVALID_DISABLED_VALUE_550=Invalid value provided for \
+ operational attribute %s:  %s
+INFO_MODIFY_PASSWORD_CHANGED_551=The user password has been changed
+INFO_MODIFY_PASSWORD_RESET_552=The user password has been administratively \
+ reset
+INFO_MODIFY_ACCOUNT_ENABLED_553=The user account has been administratively \
+ enabled
+INFO_MODIFY_ACCOUNT_DISABLED_554=The user account has been administratively \
+ disabled
+INFO_MODIFY_ACCOUNT_UNLOCKED_555=The user account has been administratively \
+ unlocked
+MILD_ERR_MODIFY_PASSWORD_EXISTS_556=The specified password value already \
+ exists in the user entry
+SEVERE_WARN_BIND_MULTIPLE_USER_LOOKTHROUGH_LIMITS_557=There are multiple \
+ user-specific lookthrough limit values contained in user entry %s.  The \
+ default server lookthrough limit will be used
+SEVERE_WARN_BIND_CANNOT_PROCESS_USER_LOOKTHROUGH_LIMIT_558=The user-specific \
+ lookthrough limit value %s contained in user entry %s could not be parsed as \
+ an integer.  The default server lookthrough limit will be used
+MILD_ERR_ENTRY_DUPLICATE_VALUES_559=Unable to add one or more values to \
+ attribute %s because at least one of the values already exists
+MILD_ERR_ENTRY_NO_SUCH_VALUE_560=Unable to remove one or more values from \
+ attribute %s because at least one of the attributes does not exist in the \
+ entry
+MILD_ERR_ENTRY_OC_INCREMENT_NOT_SUPPORTED_561=The increment operation is not \
+ supported for the objectClass attribute
+MILD_ERR_ENTRY_UNKNOWN_MODIFICATION_TYPE_562=Unknown modification type %s \
+ requested
+MILD_ERR_ENTRY_INCREMENT_MULTIPLE_VALUES_563=Unable to increment the value of \
+ attribute %s because there are multiple values for that attribute
+MILD_ERR_ENTRY_INCREMENT_INVALID_VALUE_COUNT_564=Unable to increment the \
+ value of attribute %s because the provided modification did not have exactly \
+ one value to use as the increment
+MILD_ERR_ENTRY_INCREMENT_CANNOT_PARSE_AS_INT_565=Unable to increment the \
+ value of attribute %s because either the current value or the increment could \
+ not be parsed as an integer
+SEVERE_ERR_MODIFY_NO_MODIFICATIONS_566=Entry %s cannot be updated because the \
+ request did not contain any modifications
+INFO_DSCORE_DESCRIPTION_NODETACH_567=Do not detach from the terminal and \
+ continue running in the foreground
+MILD_ERR_ENTRY_INCREMENT_NO_SUCH_ATTRIBUTE_568=Unable to increment the value \
+ of attribute %s because that attribute does not exist in the entry
+INFO_DSCORE_TOOL_DESCRIPTION_569=This utility may be used to start the \
+ Directory Server, as well as to obtain the server version and other forms of \
+ general server information
+MILD_ERR_EXTENDED_UNSUPPORTED_CRITICAL_CONTROL_570=Unable to process the \
+ request for extended operation %s because it contained an unsupported \
+ critical control with OID %s
+SEVERE_ERR_REGISTER_BACKEND_ALREADY_EXISTS_571=Unable to register backend %s \
+ with the Directory Server because another backend with the same backend ID is \
+ already registered
+SEVERE_ERR_REGISTER_BASEDN_ALREADY_EXISTS_572=Unable to register base DN %s \
+ with the Directory Server for backend %s because that base DN is already \
+ registered for backend %s
+SEVERE_ERR_REGISTER_BASEDN_HIERARCHY_CONFLICT_573=Unable to register base DN \
+ %s with the Directory Server for backend %s because that backend already \
+ contains another base DN %s that is within the same hierarchical path
+SEVERE_ERR_REGISTER_BASEDN_DIFFERENT_PARENT_BASES_574=Unable to register base \
+ DN %s with the Directory Server for backend %s because that backend already \
+ contains another base DN %s that is not subordinate to the same base DN in \
+ the parent backend
+SEVERE_ERR_REGISTER_BASEDN_NEW_BASE_NOT_SUBORDINATE_575=Unable to register \
+ base DN %s with the Directory Server for backend %s because that backend \
+ already contains one or more other base DNs that are subordinate to backend \
+ %s but the new base DN is not
+SEVERE_WARN_REGISTER_BASEDN_ENTRIES_IN_MULTIPLE_BACKENDS_576=Backend %s \
+ already contains entry %s which has just been registered as the base DN for \
+ backend %s.  These conflicting entries may cause unexpected or errant search \
+ results, and both backends should be reinitialized to ensure that each has \
+ the correct content
+SEVERE_ERR_DEREGISTER_BASEDN_NOT_REGISTERED_577=Unable to de-register base DN \
+ %s with the Directory Server because that base DN is not registered for any \
+ active backend
+SEVERE_WARN_DEREGISTER_BASEDN_MISSING_HIERARCHY_578=Base DN %s has been \
+ deregistered from the Directory Server for backend %s.  This base DN had both \
+ superior and subordinate entries in other backends, and there may be \
+ inconsistent or unexpected behavior when accessing entries in this portion of \
+ the hierarchy because of the missing entries that had been held in the \
+ de-registered backend
+MILD_ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE_579=Unable to update the schema \
+ element with definition "%s" because a circular reference was identified when \
+ attempting to rebuild other schema elements dependent upon it
+MILD_ERR_REJECT_UNAUTHENTICATED_OPERATION_580=Rejecting the requested \
+ operation  because the connection has not been authenticated
+SEVERE_WARN_ADD_ATTR_IS_OBSOLETE_581=Entry "%s" cannot be added because it \
+ contains attribute type %s which is declared OBSOLETE in the server schema
+SEVERE_WARN_ADD_OC_IS_OBSOLETE_582=Entry "%s" cannot be added because it \
+ contains objectclass %s which is declared OBSOLETE in the server schema
+MILD_ERR_MODIFY_ATTR_IS_OBSOLETE_583=Entry %s cannot be modified because the \
+ modification attempted to set one or more new values for attribute %s which \
+ is marked OBSOLETE in the server schema
+MILD_ERR_ENTRY_ADD_OBSOLETE_OC_584=Objectclass %s added to entry %s is marked \
+ OBSOLETE in the server schema
+MILD_ERR_MODDN_NEWRDN_ATTR_IS_OBSOLETE_585=The modify DN operation for entry \
+ %s cannot be performed because the new RDN includes attribute type %s which \
+ is declared OBSOLETE in the server schema
+MILD_ERR_ENTRY_SCHEMA_VIOLATES_PARENT_DSR_586=Entry %s is invalid according \
+ to the server schema because there is no DIT structure rule that applies to \
+ that entry, but there is a DIT structure rule for the parent entry %s
+MILD_ERR_ENTRY_SCHEMA_COULD_NOT_CHECK_PARENT_DSR_587=An unexpected error \
+ occurred while attempting to perform DIT structure rule processing for the \
+ parent of entry %s:  %s
+MILD_WARN_CLIENTCONNECTION_DISCONNECT_DUE_TO_DELETE_588=Terminating the \
+ client connection because its associated authentication or authorization \
+ entry %s has been deleted
+MILD_ERR_MODIFY_PWRESET_INSUFFICIENT_PRIVILEGES_589=You do not have \
+ sufficient privileges to reset user passwords
+MILD_ERR_COMPARE_CONFIG_INSUFFICIENT_PRIVILEGES_590=You do not have \
+ sufficient privileges to access the server configuration
+SEVERE_ERR_ADD_CHANGE_PRIVILEGE_INSUFFICIENT_PRIVILEGES_591=You do not have \
+ sufficient privileges to add entries that include privileges
+MILD_ERR_MODIFY_CHANGE_PRIVILEGE_INSUFFICIENT_PRIVILEGES_592=You do not have \
+ sufficient privileges to modify the set of privileges contained in an entry
+INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGE_593=hasPrivilege determination for \
+ connID=%d opID=%d requesterDN="%s" privilege="%s" result=%b
+INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGES_594=hasPrivilege determination for \
+ connID=%d opID=%d requesterDN="%s" privilegeSet="%s" result=%b
+MILD_ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES_595=You do not have sufficient \
+ privileges to use the proxied authorization control
+INFO_DSCORE_DESCRIPTION_CHECK_STARTABILITY_596=Used to determine whether a \
+ server can be started or notand the mode to be used to start it
+MILD_ERR_ENTRY_SCHEMA_ATTR_NO_VALUES_597=Entry %s violates the Directory \
+ Server schema configuration because it includes attribute %s without any \
+ values
+FATAL_ERR_DSCORE_ERROR_NODETACH_AND_WINDOW_SERVICE_598=OpenDS is configured \
+ to run as a window service and it cannot run in no-detach mode
+INFO_DSCORE_DESCRIPTION_WINDOWS_NET_START_599=Used by the window service code \
+ to inform that start-ds is being called from the window services after a call \
+ to net start
+MILD_ERR_ENTRY_DECODE_UNRECOGNIZED_VERSION_600=Unable to decode an entry \
+ because it had an unsupported entry version byte value of %s
+MILD_ERR_ENTRY_DECODE_EXCEPTION_601=Unable to decode an entry because an \
+ unexpected exception was caught during processing:  %s
+MILD_ERR_SEARCH_FILTER_NOT_EXACTLY_ONE_602=The provided search filter "%s" \
+ could not be decoded because the NOT filter between positions %d and %d did \
+ not contain exactly one filter component
+MILD_ERR_SORTKEY_INVALID_ORDER_INDICATOR_603=The provided sort key value %s \
+ is invalid because it does not start with either '+' (to indicate sorting in \
+ ascending order) or '-' (to indicate sorting in descending order)
+MILD_ERR_SORTKEY_UNDEFINED_TYPE_604=The provided sort key value %s is invalid \
+ because it references undefined attribute type %s
+MILD_ERR_SORTKEY_NO_ORDERING_RULE_605=The provided sort key value %s is \
+ invalid because attribute type %s does not have a default ordering matching \
+ rule and no specific rule was provided
+MILD_ERR_SORTKEY_UNDEFINED_ORDERING_RULE_606=The provided sort key value %s \
+ is invalid because it references undefined ordering matching rule %s
+MILD_ERR_SORTORDER_DECODE_NO_KEYS_607=The provided sort order string "%s" is \
+ invalid because it does not contain any sort keys
+INFO_RESULT_SORT_CONTROL_MISSING_608=Sort Control Missing
+INFO_RESULT_OFFSET_RANGE_ERROR_609=Offset Range Error
+INFO_RESULT_VIRTUAL_LIST_VIEW_ERROR_610=Virtual List View Error
+SEVERE_ERR_CONTROL_INSUFFICIENT_ACCESS_RIGHTS_611=The request control with \
+ Object Identifier (OID) "%s" cannot be used due to insufficient access rights
+SEVERE_ERR_HOST_PORT_ALREADY_SPECIFIED_612=The connection handler %s is \
+ trying to use the listener %s which is already in use by another connection \
+ handler
+SEVERE_ERR_HOST_PORT_CANNOT_BE_USED_613=The server cannot use the listener %s \
+ of connection handler %s because it is already being used by another process \
+ or because it does not have the rights to use it
+SEVERE_ERR_NOT_AVAILABLE_CONNECTION_HANDLERS_614=No enabled connection \
+ handler available
+SEVERE_ERR_ERROR_STARTING_CONNECTION_HANDLERS_615=Could not start connection \
+ handlers
+SEVERE_ERR_BIND_REJECTED_LOCKDOWN_MODE_616=Unable to process the non-root \
+ bind because the server is in lockdown mode
+SEVERE_WARN_DIRECTORY_SERVER_ENTERING_LOCKDOWN_MODE_617=The Directory Server \
+ is entering lockdown mode, in which clients will only be allowed to connect \
+ via a loopback address, and only root users will be allowed to process \
+ operations
+NOTICE_DIRECTORY_SERVER_LEAVING_LOCKDOWN_MODE_618=The Directory Server is \
+ leaving lockdown mode and will resume normal operation
+NOTICE_REJECT_OPERATION_IN_LOCKDOWN_MODE_619=Rejecting the requested \
+ operation because the server is in lockdown mode and will only accept \
+ requests from root users over loopback connections
+SEVERE_ERR_COMPRESSEDSCHEMA_UNRECOGNIZED_AD_TOKEN_620=Unable to decode the \
+ provided attribute because it used an undefined attribute description token \
+ %s
+SEVERE_ERR_COMPRESSEDSCHEMA_UNKNOWN_OC_TOKEN_621=Unable to decode the \
+ provided object class set because it used an undefined token %s
+SEVERE_ERR_COMPRESSEDSCHEMA_CANNOT_WRITE_UPDATED_DATA_622=Unable to write the \
+ updated compressed schema token data:  %s
+SEVERE_ERR_ENTRYENCODECFG_INVALID_LENGTH_623=Unable to decode the provided \
+ entry encode configuration element because it has an invalid length
+INFO_RESULT_NO_OPERATION_624=No Operation
+SEVERE_ERR_SEARCH_FILTER_CREATE_EXTENSIBLE_MATCH_NO_AT_OR_MR_625=Unable to \
+ create an extensible match search filter using the provided information \
+ because it did not contain either an attribute type or a matching rule ID. \
+ At least one of these must be provided
+SEVERE_ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR_626=The provided search \
+ filter "%s" could not be decoded because the extensible match component \
+ starting at position %d did not contain either an attribute description or a \
+ matching rule ID.  At least one of these must be provided
+SEVERE_ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_SUCH_MR_627=The provided search \
+ filter "%s" could not be decoded because the extensible match component \
+ starting at position %d referenced an unknown matching rule %s
+MILD_ERR_BIND_OPERATION_WRITABILITY_DISABLED_628=Rejecting a bind request for \
+ user %s because either the entire server or the user's backend has a \
+ writability mode of 'disabled' and password policy state updates would not be \
+ allowed
+MILD_ERR_MODIFY_PW_IN_HISTORY_629=The provided new password was found in the \
+ password history for the user
+SEVERE_WARN_BIND_MULTIPLE_USER_IDLE_TIME_LIMITS_630=There are multiple \
+ user-specific idle time limit values contained in user entry %s.  The default \
+ server idle time limit will be used
+SEVERE_WARN_BIND_CANNOT_PROCESS_USER_IDLE_TIME_LIMIT_631=The user-specific \
+ idle time limit value %s contained in user entry %s could not be parsed as an \
+ integer.  The default server idle time limit will be used
+INFO_IDLETIME_LIMIT_EXCEEDED_632=This connection has been teriminated because \
+ it has remained idle for too long
+SEVERE_ERR_PWPOLICY_WARNING_INTERVAL_LARGER_THAN_MAX_AGE_633=The password \
+ policy configuration entry "%s" is invalid because if a maximum password age \
+ is configured, then the password expiration warning interval must be shorter \
+ than the maximum password age
+SEVERE_ERR_PWPOLICY_MIN_AGE_PLUS_WARNING_GREATER_THAN_MAX_AGE_634=The \
+ password policy configuration entry "%s" is invalid because if both a minimum \
+ password age and a maximum password age are configured, then the sum of the \
+ minimum password age and the password expiration warning interval must be \
+ shorter than the maximum password age
+SEVERE_ERR_REGISTER_WORKFLOW_ALREADY_EXISTS_635=Unable to register workflow \
+ %s with the Directory Server because another workflow with the same workflow \
+ ID is already registered
+SEVERE_ERR_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS_636=Unable to register \
+ workflow node %s with the network group %s because another workflow node with \
+ the same workflow node ID is already registered
+SEVERE_ERR_REGISTER_NETWORK_GROUP_ALREADY_EXISTS_637=Unable to register \
+ network group %s with the Directory Server because another network group with \
+ the same network group ID is already registered
+MILD_ERR_IDLETIME_DISCONNECT_ERROR_638=An error occurred while attempting to \
+ disconnect client connection %d:  %s
+SEVERE_ERR_IDLETIME_UNEXPECTED_ERROR_639=An unexpected error occurred in the \
+ idle time limit thread:  %s
+SEVERE_ERR_DIRCFG_SERVER_ALREADY_RUNNING_640=The Directory Server is \
+ currently running.  Environment configuration changes are not allowed with \
+ the server running
+SEVERE_ERR_DIRCFG_INVALID_SERVER_ROOT_641=The specified server root directory \
+ '%s' is invalid.  The specified path must exist and must be a directory
+SEVERE_ERR_DIRCFG_INVALID_CONFIG_FILE_642=The specified config file path '%s' \
+ is invalid.  The specified path must exist and must be a file
+SEVERE_ERR_DIRCFG_INVALID_CONFIG_CLASS_643=The specified config handler class \
+ '%s' is invalid.  The specified class must be a subclass of the \
+ org.opends.server.api.ConfigHandler superclass
+SEVERE_ERR_DIRCFG_INVALID_SCHEMA_DIRECTORY_644=The specified schema \
+ configuration directory '%s' is invalid.  The specified path must exist and \
+ must be a directory
+SEVERE_ERR_DIRCFG_INVALID_LOCK_DIRECTORY_645=The specified lock directory \
+ '%s' is invalid.  The specified path must exist and must be a directory
+SEVERE_ERR_DIRCFG_INVALID_CONCURRENCY_LEVEL_646=The specified lock table \
+ concurrency level %d is invalid.  It must be an integer value greater than \
+ zero
+SEVERE_ERR_DIRCFG_INVALID_LOCK_TABLE_SIZE_647=The specified initial lock \
+ table size %d is invalid.  It must be an integer value greater than zero
+FATAL_ERR_CANNOT_SET_ENVIRONMENT_CONFIG_WHILE_RUNNING_648=The Directory \
+ Server is currently running.  The environment configuration may not be \
+ altered while the server is online
diff --git a/opendj-sdk/opends/src/messages/messages/extension.properties b/opendj-sdk/opends/src/messages/messages/extension.properties
new file mode 100644
index 0000000..a30de43
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/extension.properties
@@ -0,0 +1,1736 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=EXTENSIONS
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+SEVERE_ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST_1=An error occurred \
+ while attempting to initialize the message digest generator for the %s \
+ algorithm:  %s
+MILD_ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD_2=An error occurred \
+ while attempting to base64-decode the password value %s:  %s
+MILD_ERR_PWSCHEME_NOT_REVERSIBLE_3=The %s password storage scheme is not \
+ reversible, so it is impossible to recover the plaintext version of an \
+ encoded password
+MILD_ERR_JMX_ALERT_HANDLER_CANNOT_REGISTER_4=An error occurred while trying \
+ to register the JMX alert handler with the MBean server:  %s
+MILD_ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD_5=An unexpected error occurred while \
+ attempting to encode a password using the storage scheme defined in class %s: \
+ %s
+INFO_FIFOCACHE_DESCRIPTION_MAX_MEMORY_PCT_6=Specifies the maximum percentage \
+ of available memory in the JVM that the entry cache should be allowed to \
+ consume.  Its value should be an integer between 1 and 100.  Changes to this \
+ configuration attribute will take effect immediately, although if the value \
+ is reduced to a percentage that is less than the current consumption in the \
+ JVM, it may take some time for existing cache items to be purged
+SEVERE_ERR_FIFOCACHE_CANNOT_DETERMINE_MAX_MEMORY_PCT_7=An error occurred \
+ while attempting to determine the value of the ds-cfg-max-memory-percent \
+ attribute in configuration entry %s:  %s.  The default of %d will be used
+INFO_FIFOCACHE_DESCRIPTION_MAX_ENTRIES_8=Specifies the maximum number of \
+ entries that may be held in the entry cache, with a value of zero indicating \
+ that there should be no limit to the number of entries (although the memory \
+ percentage will still be observed).  Changes to this configuration attribute \
+ will take effect immediately, although if it is reduced to a value that is \
+ less than the number of entries currently held in the cache, it may take some \
+ time for existing cache items to be purged
+SEVERE_ERR_FIFOCACHE_CANNOT_DETERMINE_MAX_ENTRIES_9=An error occurred while \
+ attempting to determine the value of the ds-cfg-max-entries attribute in \
+ configuration entry %s:  %s.  No hard limit on the number of entries will be \
+ enforced, but the value of ds-cfg-max-memory-percent will still be observed
+INFO_FIFOCACHE_DESCRIPTION_LOCK_TIMEOUT_10=Specifies the maximum length of \
+ time in milliseconds that the entry cache should block while attempting to \
+ acquire a lock for an entry.  Changes to this configuration attribute will \
+ take effect immediately
+SEVERE_ERR_FIFOCACHE_CANNOT_DETERMINE_LOCK_TIMEOUT_11=An error occurred while \
+ attempting to determine the value of the ds-cfg-lock-timeout attribute in \
+ configuration entry %s:  %s.  The default of %d will be used
+INFO_FIFOCACHE_DESCRIPTION_INCLUDE_FILTERS_12=Specifies a set of search \
+ filters that may be used to indicate which entries should be included in the \
+ entry cache.  Entries that do not match at least one of these filters will \
+ not be stored in the cache.  If no filters are provided, then any entry will \
+ be accepted.  Changes to this configuration attribute will take effect \
+ immediately, but will not impact existing entries that are already held in \
+ the cache
+SEVERE_WARN_FIFOCACHE_CANNOT_DECODE_INCLUDE_FILTER_13=An error occurred while \
+ attempting to decode the value "%s" from attribute ds-cfg-include-filter of \
+ entry %s:  %s.  This filter will not be used when determining whether to \
+ store an entry in the cache
+SEVERE_WARN_FIFOCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS_14=An error occurred \
+ while attempting to decode any of the values from attribute \
+ ds-cfg-include-filter of entry %s.  All entries will be considered eligible \
+ for inclusion in the cache
+SEVERE_ERR_FIFOCACHE_CANNOT_DETERMINE_INCLUDE_FILTERS_15=An error occurred \
+ while attempting to determine the value of the ds-cfg-include-filter \
+ attribute in configuration entry %s:  %s.  All entries will be considered \
+ eligible for inclusion in the cache
+INFO_FIFOCACHE_DESCRIPTION_EXCLUDE_FILTERS_16=Specifies a set of search \
+ filters that may be used to indicate which entries should be excluded from \
+ the entry cache.  Entries that match any of these filters will not be stored \
+ in the cache.  If no filters are provided, then any entry will be accepted. \
+ Changes to this configuration attribute will take effect immediately, but \
+ will not impact existing entries that are already held in the cache
+SEVERE_WARN_FIFOCACHE_CANNOT_DECODE_EXCLUDE_FILTER_17=An error occurred while \
+ attempting to decode the value "%s" from attribute ds-cfg-exclude-filter of \
+ entry %s:  %s.  This filter will not be used when determining whether to \
+ store an entry in the cache
+SEVERE_WARN_FIFOCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS_18=An error occurred \
+ while attempting to decode any of the values from attribute \
+ ds-cfg-exclude-filter of entry %s.  All entries will be considered eligible \
+ for inclusion in the cache
+SEVERE_ERR_FIFOCACHE_CANNOT_DETERMINE_EXCLUDE_FILTERS_19=An error occurred \
+ while attempting to determine the value of the ds-cfg-exclude-filter \
+ attribute in configuration entry %s:  %s.  All entries will be considered \
+ eligible for inclusion in the cache
+SEVERE_ERR_FIFOCACHE_INVALID_MAX_MEMORY_PCT_20=The ds-cfg-max-memory-percent \
+ attribute of entry %s, which holds the maximum percentage of JVM memory \
+ available for use in the entry cache, has an invalid value:  %s.  Its value \
+ must be an integer between 1 and 100
+SEVERE_ERR_FIFOCACHE_INVALID_MAX_ENTRIES_21=The ds-cfg-max-entries attribute \
+ of entry %s, which specifies the maximum number of entries that may be held \
+ in the entry cache, has an invalid value:  %s.  Its value must be a positive \
+ integer, or zero to indicate that no limit should be enforced
+SEVERE_ERR_FIFOCACHE_INVALID_LOCK_TIMEOUT_22=The ds-cfg-lock-timeout \
+ attribute of entry %s, which specifies the maximum length of time in \
+ milliseconds that the cache should block while attempting to obtain a lock on \
+ an entry, has an invalid value:  %s.  Its value must be a positive integer, \
+ or zero to indicate that it should never block
+SEVERE_ERR_FIFOCACHE_INVALID_INCLUDE_FILTER_23=The ds-cfg-include-filter \
+ attribute of entry %s, which specifies a set of search filters that may be \
+ used to control which entries are included in the cache, has an invalid value \
+ of "%s":  %s
+SEVERE_ERR_FIFOCACHE_INVALID_INCLUDE_FILTERS_24=The ds-cfg-include-filter \
+ attribute of entry %s, which specifies a set of search filters that may be \
+ used to control which entries are included in the cache, has an invalid \
+ value:  %s
+SEVERE_ERR_FIFOCACHE_INVALID_EXCLUDE_FILTER_25=The ds-cfg-exclude-filter \
+ attribute of entry %s, which specifies a set of search filters that may be \
+ used to control which entries are excluded from the cache, has an invalid \
+ value of "%s":  %s
+SEVERE_ERR_FIFOCACHE_INVALID_EXCLUDE_FILTERS_26=The ds-cfg-exclude-filter \
+ attribute of entry %s, which specifies a set of search filters that may be \
+ used to control which entries are excluded from the cache, has an invalid \
+ value:  %s
+INFO_FIFOCACHE_UPDATED_MAX_MEMORY_PCT_27=The amount of memory that may be \
+ used for the entry cache has been updated to %d percent of the total memory \
+ available to the JVM, or approximately %d bytes.  If this percentage has been \
+ reduced, it may take some time for entries to be purged so that the current \
+ cache memory consumption can reflect this new setting
+INFO_FIFOCACHE_UPDATED_MAX_ENTRIES_28=The number of entries that may be held \
+ in the entry cache has been updated to %d.  If this value has been reduced, \
+ it may take some time for entries to be purged so that the cache can reflect \
+ this new setting
+INFO_FIFOCACHE_UPDATED_LOCK_TIMEOUT_29=The lock timeout that will be used to \
+ determine the length of time that the cache should block while attempting to \
+ acquire a lock for an entry has been set to %d milliseconds
+INFO_FIFOCACHE_UPDATED_INCLUDE_FILTERS_30=The set of search filters that will \
+ control which entries may be included in the cache has been updated
+INFO_FIFOCACHE_UPDATED_EXCLUDE_FILTERS_31=The set of search filters that will \
+ control which entries should be be excluded from the cache has been updated
+MILD_ERR_EXTOP_PASSMOD_ILLEGAL_REQUEST_ELEMENT_TYPE_32=The password modify \
+ extended request sequence included an ASN.1 element of an invalid type:  %s
+MILD_ERR_EXTOP_PASSMOD_CANNOT_DECODE_REQUEST_33=An unexpected error occurred \
+ while attempting to decode the password modify extended request sequence:  %s
+MILD_ERR_EXTOP_PASSMOD_NO_AUTH_OR_USERID_34=The password modify extended \
+ request cannot be processed because it does not contain an authorization ID \
+ and the underlying connection is not authenticated
+SEVERE_ERR_EXTOP_PASSMOD_CANNOT_LOCK_USER_ENTRY_35=The password modify \
+ extended request cannot be processed because the server was unable to obtain \
+ a write lock on user entry %s after multiple attempts
+MILD_ERR_EXTOP_PASSMOD_CANNOT_DECODE_AUTHZ_DN_36=The password modify extended \
+ request cannot be processed because the server cannot decode "%s" as a valid \
+ DN for use in the authorization ID for the operation
+MILD_ERR_EXTOP_PASSMOD_INVALID_AUTHZID_STRING_37=The password modify extended \
+ request cannot be processed because it contained an invalid authorization ID \
+ that did not start with either "dn:" or "u:".  The provided authorization ID \
+ string was "%s"
+MILD_ERR_EXTOP_PASSMOD_NO_USER_ENTRY_BY_AUTHZID_38=The password modify \
+ extended request cannot be processed because it was not possible to identify \
+ the user entry to update based on the authorization DN of "%s"
+MILD_ERR_EXTOP_PASSMOD_NO_DN_BY_AUTHZID_39=The password modify extended \
+ request cannot be processed because the provided authorization UID of "%s" \
+ did not match any entries in the directory
+MILD_ERR_EXTOP_PASSMOD_MULTIPLE_ENTRIES_BY_AUTHZID_40=The password modify \
+ extended request cannot be processed because the provided authorization UID \
+ of "%s" matched more than one entry in the directory
+MILD_ERR_EXTOP_PASSMOD_INVALID_OLD_PASSWORD_41=The password modify extended \
+ operation cannot be processed because the current password provided for the \
+ user is invalid
+INFO_FILE_KEYMANAGER_DESCRIPTION_FILE_43=Specifies the path to the file \
+ containing the Directory Server keystore information.  Changes to this \
+ configuration attribute will take effect the next time that the key manager \
+ is accessed
+SEVERE_ERR_FILE_KEYMANAGER_NO_FILE_ATTR_44=The configuration entry %s that \
+ defines a file-based key manager does not contain attribute \
+ ds-cfg-key-store-file that should hold the path to the keystore file
+SEVERE_ERR_FILE_KEYMANAGER_NO_SUCH_FILE_45=The keystore file %s specified in \
+ attribute ds-cfg-key-store-file of configuration entry %s does  not exist
+SEVERE_ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE_46=An unexpected error \
+ occurred while trying to determine the value of configuration attribute \
+ ds-cfg-key-store-file in configuration entry %s:  %s
+INFO_FILE_KEYMANAGER_DESCRIPTION_TYPE_47=Specifies the keystore type for the \
+ Directory Server keystore.  Valid values should always include 'JKS' and \
+ 'PKCS12', but different implementations may allow other values as well.  If \
+ no value is provided, then the JVM-default value will be used.  Changes to \
+ this configuration attribute will take effect the next time that the key \
+ manager is accessed
+SEVERE_ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_TYPE_48=An unexpected error \
+ occurred while trying to determine the value of configuration attribute \
+ ds-cfg-key-store-type in configuration entry %s:  %s
+INFO_FILE_KEYMANAGER_DESCRIPTION_PIN_PROPERTY_49=Specifies the name of the \
+ Java property that contains the clear-text PIN needed to access the \
+ file-based key manager.  Changes to this configuration attribute will take \
+ effect the next time that the key manager is accessed
+SEVERE_ERR_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET_50=Java property %s which is \
+ specified in attribute ds-cfg-key-store-pin-property of configuration entry \
+ %s should contain the PIN needed to access the file-based key manager, but \
+ this property is not set
+SEVERE_ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_PROPERTY_51=An unexpected \
+ error occurred while trying to determine the value of configuration attribute \
+ ds-cfg-key-store-pin-property in configuration entry %s:  %s
+INFO_FILE_KEYMANAGER_DESCRIPTION_PIN_ENVAR_52=Specifies the name of the \
+ environment variable that contains the clear-text PIN needed to access the \
+ file-based key manager.  Changes to this configuration attribute will take \
+ effect the next time that the key manager is accessed
+SEVERE_ERR_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET_53=Environment variable %s which \
+ is specified in attribute ds-cfg-key-store-pin-environment-variable of \
+ configuration entry %s should contain the PIN needed to access the file-based \
+ key manager, but this property is not set
+SEVERE_ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_ENVAR_54=An unexpected error \
+ occurred while trying to determine the value of configuration attribute \
+ ds-cfg-key-store-pin-environment-variable in configuration entry %s:  %s
+INFO_FILE_KEYMANAGER_DESCRIPTION_PIN_FILE_55=Specifies the path to the text \
+ file whose only contents should be a single line containing the clear-text \
+ PIN needed to access the file-based key manager.  Changes to this \
+ configuration attribute will take effect the next time that the key manager \
+ is accessed
+SEVERE_ERR_FILE_KEYMANAGER_PIN_NO_SUCH_FILE_56=File %s specified in attribute \
+ ds-cfg-key-store-pin-file of configuration entry %s should contain the PIN \
+ needed to access the file-based key manager, but this file does not exist
+SEVERE_ERR_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ_57=An error occurred while \
+ trying to read the keystore PIN from file %s specified in configuration \
+ attribute ds-cfg-key-store-pin-file of configuration entry %s:  %s
+SEVERE_ERR_FILE_KEYMANAGER_PIN_FILE_EMPTY_58=File %s specified in attribute \
+ ds-cfg-key-store-pin-file of configuration entry %s should contain the PIN \
+ needed to access the file-based key manager, but this file is empty
+SEVERE_ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_FILE_59=An unexpected error \
+ occurred while trying to determine the value of configuration attribute \
+ ds-cfg-key-store-pin-file in configuration entry %s:  %s
+SEVERE_ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_FROM_ATTR_60=An unexpected \
+ error occurred while trying to determine the value of configuration attribute \
+ ds-cfg-key-store-pin in configuration entry %s:  %s
+SEVERE_ERR_FILE_KEYMANAGER_NO_PIN_61=Configuration entry %s does not specify \
+ a means of determining the PIN needed to access the contents of the \
+ file-based key manager.  The PIN may be specified in a Java property (named \
+ by attribute ds-cfg-key-store-pin-property), an environment variable (named \
+ by attribute ds-cfg-key-store-pin-environment-variable), a text file (named \
+ by attribute ds-cfg-key-store-pin-file), or directly in the entry using \
+ attribute ds-cfg-key-store-pin
+SEVERE_ERR_FILE_KEYMANAGER_CANNOT_LOAD_62=An error occurred while trying to \
+ load the keystore contents from file %s:  %s
+SEVERE_ERR_FILE_KEYMANAGER_INVALID_TYPE_63=The keystore type %s specified in \
+ attribute ds-cfg-key-store-type of configuration entry %s is not valid:  %s
+INFO_FILE_KEYMANAGER_UPDATED_FILE_64=The value of the ds-cfg-key-store-file \
+ attribute in configuration entry %s has been updated to %s.  The new value \
+ will take effect the next time the key manager is accessed
+INFO_FILE_KEYMANAGER_UPDATED_TYPE_65=The value of the ds-cfg-key-store-type \
+ attribute in configuration entry %s has been updated to %s.  The new value \
+ will take effect the next time the key manager is accessed
+INFO_FILE_KEYMANAGER_UPDATED_PIN_66=The PIN to use to access the file-based \
+ key manager has been updated.  The new value will take effect the next time \
+ the key manager is accessed
+INFO_PKCS11_KEYMANAGER_DESCRIPTION_PIN_PROPERTY_67=Specifies the name of the \
+ Java property that contains the clear-text PIN needed to access the PKCS#11 \
+ key manager.  Changes to this configuration attribute will take effect the \
+ next time that the key manager is accessed
+SEVERE_ERR_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET_68=Java property %s which \
+ is specified in attribute ds-cfg-key-store-pin-property of configuration \
+ entry %s should contain the PIN needed to access the PKCS#11 key manager, but \
+ this property is not set
+SEVERE_ERR_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_PROPERTY_69=An unexpected \
+ error occurred while trying to determine the value of configuration attribute \
+ ds-cfg-key-store-pin-property in configuration entry %s:  %s
+INFO_PKCS11_KEYMANAGER_DESCRIPTION_PIN_ENVAR_70=Specifies the name of the \
+ environment variable that contains the clear-text PIN needed to access the \
+ PKCS#11 key manager.  Changes to this configuration attribute will take \
+ effect the next time that the key manager is accessed
+SEVERE_ERR_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET_71=Environment variable %s \
+ which is specified in attribute ds-cfg-key-store-pin-environment-variable of \
+ configuration entry %s should contain the PIN needed to access the PKCS#11 \
+ key manager, but this property is not set
+SEVERE_ERR_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_ENVAR_72=An unexpected \
+ error occurred while trying to determine the value of configuration attribute \
+ ds-cfg-key-store-pin-environment-variable in configuration entry %s:  %s
+INFO_PKCS11_KEYMANAGER_DESCRIPTION_PIN_FILE_73=Specifies the path to the text \
+ file whose only contents should be a single line containing the clear-text \
+ PIN needed to access the PKCS#11 key manager.  Changes to this configuration \
+ attribute will take effect the next time that the key manager is accessed
+SEVERE_ERR_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE_74=File %s specified in \
+ attribute ds-cfg-key-store-pin-file of configuration entry %s should contain \
+ the PIN needed to access the PKCS#11 key manager, but this file does not \
+ exist
+SEVERE_ERR_PKCS11_KEYMANAGER_PIN_FILE_CANNOT_READ_75=An error occurred while \
+ trying to read the keystore PIN from file %s specified in configuration \
+ attribute ds-cfg-key-store-pin-file of configuration entry %s:  %s
+SEVERE_ERR_PKCS11_KEYMANAGER_PIN_FILE_EMPTY_76=File %s specified in attribute \
+ ds-cfg-key-store-pin-file of configuration entry %s should contain the PIN \
+ needed to access the PKCS#11 key manager, but this file is empty
+SEVERE_ERR_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_FILE_77=An unexpected error \
+ occurred while trying to determine the value of configuration attribute \
+ ds-cfg-key-store-pin-file in configuration entry %s:  %s
+INFO_PKCS11_KEYMANAGER_DESCRIPTION_PIN_ATTR_78=Specifies the clear-text PIN \
+ needed to access the PKCS#11 key manager.  Changes to this configuration \
+ attribute will take effect the next time that the key manager is accessed
+SEVERE_ERR_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_FROM_ATTR_79=An unexpected \
+ error occurred while trying to determine the value of configuration attribute \
+ ds-cfg-key-store-pin in configuration entry %s:  %s
+SEVERE_ERR_PKCS11_KEYMANAGER_NO_PIN_80=Configuration entry %s does not \
+ specify a means of determining the PIN needed to access the contents of the \
+ PKCS#11 key manager.  The PIN may be specified in a Java property (named by \
+ attribute ds-cfg-key-store-pin-property), an environment variable (named by \
+ attribute ds-cfg-key-store-pin-environment-variable), a text file (named by \
+ attribute ds-cfg-key-store-pin-file), or directly in the entry using \
+ attribute ds-cfg-key-store-pin
+SEVERE_ERR_PKCS11_KEYMANAGER_CANNOT_LOAD_81=An error occurred while trying to \
+ access the PKCS#11 key manager:  %s
+INFO_PKCS11_KEYMANAGER_UPDATED_PIN_82=The PIN to use to access the PKCS#11 \
+ key manager has been updated.  The new value will take effect the next time \
+ the key manager is accessed
+SEVERE_ERR_FILE_KEYMANAGER_CANNOT_CREATE_FACTORY_83=An error occurred while \
+ trying to create a key manager factory to access the contents of keystore \
+ file %s:  %s
+SEVERE_ERR_PKCS11_KEYMANAGER_CANNOT_CREATE_FACTORY_84=An error occurred while \
+ trying to create a key manager factory to access the contents of the PKCS#11 \
+ keystore:  %s
+INFO_FILE_TRUSTMANAGER_DESCRIPTION_FILE_85=Specifies the path to the file \
+ containing the Directory Server trust store information.  Changes to this \
+ configuration attribute will take effect the next time that the trust manager \
+ is accessed
+SEVERE_ERR_FILE_TRUSTMANAGER_NO_FILE_ATTR_86=The configuration entry %s that \
+ defines a file-based trust manager does not contain attribute \
+ ds-cfg-trust-store-file that should hold the path to the trust store file
+SEVERE_ERR_FILE_TRUSTMANAGER_NO_SUCH_FILE_87=The trust store file %s \
+ specified in attribute ds-cfg-trust-store-file of configuration entry %s does \
+ not exist
+SEVERE_ERR_FILE_TRUSTMANAGER_CANNOT_DETERMINE_FILE_88=An unexpected error \
+ occurred while trying to determine the value of configuration attribute \
+ ds-cfg-trust-store-file in configuration entry %s:  %s
+INFO_FILE_TRUSTMANAGER_DESCRIPTION_TYPE_89=Specifies the keystore type for \
+ the Directory Server trust store.  Valid values should always include 'JKS' \
+ and 'PKCS12', but different implementations may allow other values as well. \
+ If no value is provided, then the JVM-default value will be used.  Changes to \
+ this configuration attribute will take effect the next time that the trust \
+ manager is accessed
+SEVERE_ERR_FILE_TRUSTMANAGER_CANNOT_DETERMINE_TYPE_90=An unexpected error \
+ occurred while trying to determine the value of configuration attribute \
+ ds-cfg-trust-store-type in configuration entry %s:  %s
+INFO_FILE_TRUSTMANAGER_DESCRIPTION_PIN_PROPERTY_91=Specifies the name of the \
+ Java property that contains the clear-text PIN needed to access the \
+ file-based trust manager.  Changes to this configuration attribute will take \
+ effect the next time that the trust manager is accessed
+SEVERE_ERR_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET_92=Java property %s which \
+ is specified in attribute ds-cfg-trust-store-pin-property of configuration \
+ entry %s should contain the PIN needed to access the file-based trust \
+ manager, but this property is not set
+SEVERE_ERR_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_PROPERTY_93=An unexpected \
+ error occurred while trying to determine the value of configuration attribute \
+ ds-cfg-trust-store-pin-property in configuration entry %s:  %s
+INFO_FILE_TRUSTMANAGER_DESCRIPTION_PIN_ENVAR_94=Specifies the name of the \
+ environment variable that contains the clear-text PIN needed to access the \
+ file-based trust manager.  Changes to this configuration attribute will take \
+ effect the next time that the trust manager is accessed
+SEVERE_ERR_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET_95=Environment variable %s \
+ which is specified in attribute ds-cfg-trust-store-pin-environment-variable \
+ of configuration entry %s should contain the PIN needed to access the \
+ file-based trust manager, but this property is not set
+SEVERE_ERR_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_ENVAR_96=An unexpected \
+ error occurred while trying to determine the value of configuration attribute \
+ ds-cfg-trust-store-pin-environment-variable in configuration entry %s:  %s
+INFO_FILE_TRUSTMANAGER_DESCRIPTION_PIN_FILE_97=Specifies the path to the text \
+ file whose only contents should be a single line containing the clear-text \
+ PIN needed to access the file-based trust manager.  Changes to this \
+ configuration attribute will take effect the next time that the trust manager \
+ is accessed
+SEVERE_ERR_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE_98=File %s specified in \
+ attribute ds-cfg-trust-store-pin-file of configuration entry %s should \
+ contain the PIN needed to access the file-based trust manager, but this file \
+ does not exist
+SEVERE_ERR_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ_99=An error occurred while \
+ trying to read the trust store PIN from file %s specified in configuration \
+ attribute ds-cfg-trust-store-pin-file of configuration entry %s:  %s
+SEVERE_ERR_FILE_TRUSTMANAGER_PIN_FILE_EMPTY_100=File %s specified in \
+ attribute ds-cfg-trust-store-pin-file of configuration entry %s should \
+ contain the PIN needed to access the file-based trust manager, but this file \
+ is empty
+SEVERE_ERR_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_FILE_101=An unexpected \
+ error occurred while trying to determine the value of configuration attribute \
+ ds-cfg-trust-store-pin-file in configuration entry %s:  %s
+INFO_FILE_TRUSTMANAGER_DESCRIPTION_PIN_ATTR_102=Specifies the clear-text PIN \
+ needed to access the file-based trust manager.  Changes to this configuration \
+ attribute will take effect the next time that the trust manager is accessed
+SEVERE_ERR_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_FROM_ATTR_103=An unexpected \
+ error occurred while trying to determine the value of configuration attribute \
+ ds-cfg-trust-store-pin in configuration entry %s:  %s
+SEVERE_ERR_FILE_TRUSTMANAGER_CANNOT_LOAD_104=An error occurred while trying \
+ to load the trust store contents from file %s:  %s
+SEVERE_ERR_FILE_TRUSTMANAGER_CANNOT_CREATE_FACTORY_105=An error occurred \
+ while trying to create a trust manager factory to access the contents of \
+ trust store file %s:  %s
+SEVERE_ERR_FILE_TRUSTMANAGER_INVALID_TYPE_106=The trust store type %s \
+ specified in attribute ds-cfg-trust-store-type of configuration entry %s is \
+ not valid:  %s
+INFO_FILE_TRUSTMANAGER_UPDATED_FILE_107=The value of the \
+ ds-cfg-trust-store-file attribute in configuration entry %s has been updated \
+ to %s.  The new value will take effect the next time the trust manager is \
+ accessed
+INFO_FILE_TRUSTMANAGER_UPDATED_TYPE_108=The value of the \
+ ds-cfg-trust-store-type attribute in configuration entry %s has been updated \
+ to %s.  The new value will take effect the next time the trust manager is \
+ accessed
+INFO_FILE_TRUSTMANAGER_UPDATED_PIN_109=The PIN to use to access the \
+ file-based trust manager has been updated.  The new value will take effect \
+ the next time the trust manager is accessed
+SEVERE_ERR_NULL_SECURITY_PROVIDER_READ_ERROR_110=An unexpected error occurred \
+ while attempting to read data from the client using the null connection \
+ security provider:  %s
+SEVERE_ERR_NULL_SECURITY_PROVIDER_WRITE_ERROR_111=An unexpected error \
+ occurred while attempting to write data to the client using the null \
+ connection security provider:  %s
+SEVERE_ERR_TLS_SECURITY_PROVIDER_CANNOT_INITIALIZE_112=An error occurred \
+ while attempting to initialize the SSL context for use in the TLS connection \
+ security provider:  %s
+SEVERE_ERR_TLS_SECURITY_PROVIDER_UNEXPECTED_UNWRAP_STATUS_113=An unexpected \
+ status result was returned to the TLS connection security provider when \
+ attempting to unwrap encrypted data read from the client:  %s
+SEVERE_ERR_TLS_SECURITY_PROVIDER_READ_ERROR_114=An unexpected error occurred \
+ while attempting to read data from the client using the TLS connection \
+ security provider:  %s
+SEVERE_ERR_TLS_SECURITY_PROVIDER_WRITE_NEEDS_UNWRAP_115=An attempt was made \
+ to write data to a client through the TLS connection security provider, but \
+ the SSL indicated that it was necessary to read data from the client in order \
+ to perform the SSL negotiation, but no data was available for reading.  This \
+ is an unexpected condition, and it is not possible to continue processing on \
+ this client connection without the potential for blocking other client \
+ connections, so connection will be closed
+SEVERE_ERR_TLS_SECURITY_PROVIDER_UNEXPECTED_WRAP_STATUS_116=An unexpected \
+ status result was returned to the TLS connection security provider when \
+ attempting to wrap clear-text data for writing to the client:  %s
+SEVERE_ERR_TLS_SECURITY_PROVIDER_WRITE_ERROR_117=An unexpected error occurred \
+ while attempting to write data to the client using the TLS connection \
+ security provider:  %s
+MILD_ERR_SEDCM_NO_PEER_CERTIFICATE_118=Could not map the provided certificate \
+ chain to a user entry because no peer certificate was available
+MILD_ERR_SEDCM_PEER_CERT_NOT_X509_119=Could not map the provided certificate \
+ chain to a user because the peer certificate was not an X.509 certificate \
+ (peer certificate format was %s)
+MILD_ERR_SEDCM_CANNOT_DECODE_SUBJECT_AS_DN_120=Could not map the provided \
+ certificate chain to a user because the peer certificate subject "%s" could \
+ not be decoded as an LDAP DN:  %s
+MILD_ERR_SEDCM_CANNOT_GET_ENTRY_121=Could not map the provided certificate \
+ chain to a user because an error occurred while attempting to retrieve the \
+ user entry with DN "%s":  %s
+MILD_ERR_SEDCM_NO_USER_FOR_DN_122=Could not map the provided certificate \
+ chain to a user because no user entry exists with a DN of %s
+MILD_ERR_SASLEXTERNAL_NO_CLIENT_CONNECTION_123=The SASL EXTERNAL bind request \
+ could not be processed because the associated bind request does not have a \
+ reference to the client connection
+MILD_ERR_SASLEXTERNAL_NO_SECURITY_PROVIDER_124=The SASL EXTERNAL bind request \
+ could not be processed because the associated client connection does not have \
+ a security provider
+MILD_ERR_SASLEXTERNAL_CLIENT_NOT_USING_TLS_PROVIDER_125=The SASL EXTERNAL \
+ bind request could not be processed because the client connection is not \
+ using the TLS security provider (client security provider is %s).  The TLS \
+ security provider is required for clients that wish to use SASL EXTERNAL \
+ authentication
+MILD_ERR_SASLEXTERNAL_NO_CLIENT_CERT_126=The SASL EXTERNAL bind request could \
+ not be processed because the client did not present an certificate chain \
+ during SSL/TLS negotiation
+MILD_ERR_SASLEXTERNAL_NO_MAPPING_127=The SASL EXTERNAL bind request failed \
+ because the certificate chain presented by the client during SSL/TLS \
+ negotiation could not be mapped to a user entry in the Directory Server
+MILD_ERR_STARTTLS_NO_CLIENT_CONNECTION_128=StartTLS cannot be used on this \
+ connection because the underlying client connection is not available
+MILD_ERR_STARTTLS_NOT_TLS_CAPABLE_129=StartTLS cannot be used on this client \
+ connection because this connection type is not capable of using StartTLS to \
+ protect its communication
+MILD_ERR_STARTTLS_ERROR_ON_ENABLE_130=An unexpected error occurred while \
+ attempting to enable the TLS connection security manager on the client \
+ connection for the purpose of StartTLS:  %s
+INFO_SASLEXTERNAL_DESCRIPTION_VALIDATION_POLICY_131=Indicates whether the \
+ SASL EXTERNAL mechanism handler should attempt to validate the peer \
+ certificate against a certificate in the corresponding user's entry.  The \
+ value must be one of "true" (which will always attempt to validate the \
+ certificate and will fail if no certificates are present), "false" (which \
+ will never attempt to validate the peer certificate), and "ifpresent" (which \
+ will validate the peer certificate if there are one or more certificates in \
+ the user's entry, but will not fail if there are no certificates in the \
+ entry.  Changes to this configuration attribute will take effect immediately
+SEVERE_ERR_SASLEXTERNAL_INVALID_VALIDATION_VALUE_132=Configuration entry %s \
+ has an invalid value %s for attribute \
+ ds-cfg-client-certificate-validation-policy.  The value must be one of \
+ "always", "never", or "ifpresent"
+SEVERE_ERR_SASLEXTERNAL_CANNOT_GET_VALIDATION_POLICY_133=An unexpected error \
+ occurred while attempting to determine the value of the \
+ ds-cfg-client-certificate-validation-policy attribute in configuration entry \
+ %s:  %s
+INFO_SASLEXTERNAL_DESCRIPTION_CERTIFICATE_ATTRIBUTE_134=Specifies the name of \
+ the attribute that will be used to hold the certificate information in user \
+ entries for the purpose of validation.  This must specify the name of a valid \
+ attribute type defined in the server schema.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_SASLEXTERNAL_CANNOT_GET_CERT_ATTR_135=An unexpected error occurred \
+ while attempting to determine the value of the ds-cfg-certificate-attribute \
+ attribute in configuration entry %s:  %s
+SEVERE_ERR_SASLEXTERNAL_UNKNOWN_CERT_ATTR_136=The attribute %s referenced in \
+ configuration attribute ds-cfg-certificate-attribute in configuration entry \
+ %s does not exist in the Directory Server schema.  The attribute that is to \
+ be used for certificate validation during SASL EXTERNAL authentication must \
+ be defined in the server schema
+MILD_ERR_SASLEXTERNAL_NO_CERT_IN_ENTRY_137=Unable to authenticate via SASL \
+ EXTERNAL because the mapped user entry %s does not have any certificates with \
+ which to verify the presented peer certificate
+MILD_ERR_SASLEXTERNAL_PEER_CERT_NOT_FOUND_138=Unable to authenticate via SASL \
+ EXTERNAL because the mapped user entry %s did not contain the peer \
+ certificate presented by the client
+MILD_ERR_SASLEXTERNAL_CANNOT_VALIDATE_CERT_139=An error occurred while \
+ attempting to validate the peer certificate presented by the client with a \
+ certificate from the user's entry %s:  %s
+INFO_SASLEXTERNAL_UPDATED_VALIDATION_POLICY_140=Attribute \
+ ds-cfg-client-certificate-validation-policy in configuration entry %s has \
+ been updated.  The new client certificate validation policy is %s
+INFO_SASLEXTERNAL_UPDATED_CERT_ATTR_141=Attribute \
+ ds-cfg-certificate-attribute in configuration entry %s has been updated.  The \
+ %s attribute will now be used when validating peer certificates
+INFO_SASLPLAIN_DESCRIPTION_USERNAME_ATTRIBUTE_142=Specifies the name of the \
+ attribute that will be used to identify user entries based on the \
+ authcID/authzID provided during SASL PLAIN authentication.  This must specify \
+ the name of a valid attribute type defined in the server schema.  Changes to \
+ this configuration attribute will take effect immediately
+SEVERE_ERR_SASLPLAIN_CANNOT_GET_USERNAME_ATTR_143=An unexpected error \
+ occurred while attempting to determine the value of the \
+ ds-cfg-user-name-attribute attribute in configuration entry %s:  %s
+SEVERE_ERR_SASLPLAIN_UNKNOWN_USERNAME_ATTR_144=The attribute %s referenced in \
+ configuration attribute ds-cfg-user-name-attribute in configuration entry %s \
+ does not exist in the Directory Server schema.  The attribute that is to be \
+ used for username lookups during SASL PLAIN authentication must be defined in \
+ the server schema
+INFO_SASLPLAIN_DESCRIPTION_USER_BASE_DN_145=Specifies the base DN that should \
+ be used when searching for entries based on the authcID/authzID provided \
+ during SASL PLAIN authentication.  Changes to this configuration attribute \
+ will take effect immediately
+SEVERE_ERR_SASLPLAIN_CANNOT_GET_USER_BASE_DN_146=An unexpected error occurred \
+ while attempting to determine the value of the ds-cfg-user-base-dn attribute \
+ in configuration entry %s:  %s
+MILD_ERR_SASLPLAIN_NO_SASL_CREDENTIALS_147=SASL PLAIN authentication requires \
+ that SASL credentials be provided but none were included in the bind request
+MILD_ERR_SASLPLAIN_NO_NULLS_IN_CREDENTIALS_148=The SASL PLAIN bind request \
+ did not include any NULL characters.  NULL characters are required as \
+ delimiters between the authorization ID and authentication ID, and also \
+ between the authentication ID and the password
+MILD_ERR_SASLPLAIN_NO_SECOND_NULL_149=The SASL PLAIN bind request did not \
+ include a second NULL character in the credentials, which is required as a \
+ delimiter between the authentication ID and the password
+MILD_ERR_SASLPLAIN_ZERO_LENGTH_AUTHCID_150=The authentication ID contained in \
+ the SASL PLAIN bind request had a length of zero characters, which is not \
+ allowed.  SASL PLAIN authentication does not allow an empty string for use as \
+ the authentication ID
+MILD_ERR_SASLPLAIN_ZERO_LENGTH_PASSWORD_151=The password contained in the \
+ SASL PLAIN bind request had a length of zero characters, which is not \
+ allowed.  SASL PLAIN authentication does not allow an empty string for use as \
+ the password
+MILD_ERR_SASLPLAIN_CANNOT_DECODE_AUTHCID_AS_DN_152=An error occurred while \
+ attempting to decode the SASL PLAIN authentication ID "%s" because it \
+ appeared to contain a DN but DN decoding failed:  %s
+MILD_ERR_SASLPLAIN_AUTHCID_IS_NULL_DN_153=The authentication ID in the SASL \
+ PLAIN bind request appears to be an empty DN.  This is not allowed
+MILD_ERR_SASLPLAIN_CANNOT_GET_ENTRY_BY_DN_154=An error occurred while \
+ attempting to retrieve user entry %s as specified in the DN-based \
+ authentication ID of a SASL PLAIN bind request:  %s
+MILD_ERR_SASLPLAIN_CANNOT_PERFORM_INTERNAL_SEARCH_155=An error occurred while \
+ trying to perform an internal search to retrieve the user entry associated \
+ with the SASL PLAIN authentication ID %s.  The result of that search was %s \
+ with a message of %s
+MILD_ERR_SASLPLAIN_MULTIPLE_MATCHING_ENTRIES_156=The internal search \
+ attempting to resolve SASL PLAIN authentication ID %s matched multiple \
+ entries.  Authentication cannot succeed unless the authentication ID is \
+ mapped to exactly one user entry
+MILD_ERR_SASLPLAIN_NO_MATCHING_ENTRIES_157=The server was not able to find \
+ any user entries for the provided authentication ID of %s
+MILD_ERR_SASLPLAIN_NO_PW_ATTR_158=The SASL PLAIN authentication failed \
+ because the mapped user entry did not contain any values for the %s attribute
+MILD_ERR_SASLPLAIN_UNKNOWN_STORAGE_SCHEME_159=A password in the target user \
+ entry %s could not be processed via SASL PLAIN because that password has an \
+ unknown storage scheme of %s
+MILD_ERR_SASLPLAIN_INVALID_PASSWORD_160=The provided password is invalid
+INFO_SASLPLAIN_UPDATED_USERNAME_ATTR_161=Attribute ds-cfg-user-name-attribute \
+ in configuration entry %s has been updated.  The %s attribute will now be \
+ used when looking up user entries based on their authcID/authzID
+INFO_SASLPLAIN_UPDATED_USER_BASE_DN_162=Attribute ds-cfg-user-base-dn in \
+ configuration entry %s has been updated.  The DN %s will now be used as the \
+ search base when looking up user entries based on their authcID/authzID
+INFO_SASLPLAIN_CANNOT_LOCK_ENTRY_163=The Directory Server was unable to \
+ obtain a read lock on user entry %s in order to retrieve that entry
+MILD_ERR_SEDCM_CANNOT_LOCK_ENTRY_164=The Directory Server was unable to \
+ obtain a read lock on user entry %s in order to retrieve that entry
+INFO_SASLANONYMOUS_TRACE_165=SASL ANONYMOUS bind operation (conn=%d, op=%d) \
+ provided trace information:  %s
+SEVERE_ERR_SASLCRAMMD5_CANNOT_GET_MESSAGE_DIGEST_166=An unexpected error \
+ occurred while attempting to obtain an MD5 digest engine for use by the \
+ CRAM-MD5 SASL handler:  %s
+INFO_SASLCRAMMD5_DESCRIPTION_USERNAME_ATTRIBUTE_167=Specifies the name of the \
+ attribute that will be used to identify user entries based on the username \
+ provided during SASL CRAM-MD5 authentication.  This must specify the name of \
+ a valid attribute type defined in the server schema.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_SASLCRAMMD5_CANNOT_GET_USERNAME_ATTR_168=An unexpected error \
+ occurred while attempting to determine the value of the \
+ ds-cfg-user-name-attribute attribute in configuration entry %s:  %s
+SEVERE_ERR_SASLCRAMMD5_UNKNOWN_USERNAME_ATTR_169=The attribute %s referenced \
+ in configuration attribute ds-cfg-user-name-attribute in configuration entry \
+ %s does not exist in the Directory Server schema.  The attribute that is to \
+ be used for username lookups during SASL CRAM-MD5 authentication must be \
+ defined in the server schema
+INFO_SASLCRAMMD5_DESCRIPTION_USER_BASE_DN_170=Specifies the base DN that \
+ should be used when searching for entries based on the username provided \
+ during SASL CRAM-MD5 authentication.  Changes to this configuration attribute \
+ will take effect immediately
+SEVERE_ERR_SASLCRAMMD5_CANNOT_GET_USER_BASE_DN_171=An unexpected error \
+ occurred while attempting to determine the value of the ds-cfg-user-base-dn \
+ attribute in configuration entry %s:  %s
+MILD_ERR_SASLCRAMMD5_NO_STORED_CHALLENGE_172=The SASL CRAM-MD5 bind request \
+ contained SASL credentials but there is no stored challenge for this client \
+ connection.  The first CRAM-MD5 bind request in the two-stage process must \
+ not contain client SASL credentials
+MILD_ERR_SASLCRAMMD5_INVALID_STORED_CHALLENGE_173=The SASL CRAM-MD5 bind \
+ request contained SASL credentials, but the stored SASL state information for \
+ this client connection is not in an appropriate form for the challenge
+MILD_ERR_SASLCRAMMD5_NO_SPACE_IN_CREDENTIALS_174=The SASL CRAM-MD5 bind \
+ request from the client included SASL credentials but there was no space to \
+ separate the username from the authentication digest
+MILD_ERR_SASLCRAMMD5_INVALID_DIGEST_LENGTH_175=The SASL CRAM-MD5 bind request \
+ included SASL credentials, but the decoded digest string had an invalid \
+ length of %d bytes rather than the %d bytes expected for a hex representation \
+ of an MD5 digest
+MILD_ERR_SASLCRAMMD5_INVALID_DIGEST_CONTENT_176=The SASL CRAM-MD5 bind \
+ request included SASL credentials, but the decoded digest was not comprised \
+ of only hexadecimal digits:  %s
+MILD_ERR_SASLCRAMMD5_CANNOT_DECODE_USERNAME_AS_DN_177=An error occurred while \
+ attempting to decode the SASL CRAM-MD5 username "%s" because it appeared to \
+ contain a DN but DN decoding failed:  %s
+MILD_ERR_SASLCRAMMD5_USERNAME_IS_NULL_DN_178=The username in the SASL \
+ CRAM-MD5 bind request appears to be an empty DN.  This is not allowed
+INFO_SASLCRAMMD5_CANNOT_LOCK_ENTRY_179=The Directory Server was unable to \
+ obtain a read lock on user entry %s in order to retrieve that entry
+MILD_ERR_SASLCRAMMD5_CANNOT_GET_ENTRY_BY_DN_180=An error occurred while \
+ attempting to retrieve user entry %s as specified in the DN-based username of \
+ a SASL CRAM-MD5 bind request:  %s
+MILD_ERR_SASLCRAMMD5_ZERO_LENGTH_USERNAME_181=The username contained in the \
+ SASL CRAM-MD5 bind request had a length of zero characters, which is not \
+ allowed.  CRAM-MD5 authentication does not allow an empty string for use as \
+ the username
+MILD_ERR_SASLCRAMMD5_CANNOT_PERFORM_INTERNAL_SEARCH_182=An error occurred \
+ while trying to perform an internal search to retrieve the user entry \
+ associated with the SASL CRAM-MD5 username %s.  The result of that search was \
+ %s with a message of %s
+MILD_ERR_SASLCRAMMD5_MULTIPLE_MATCHING_ENTRIES_183=The internal search \
+ attempting to resolve SASL CRAM-MD5 username %s matched multiple entries. \
+ Authentication cannot succeed unless the username is mapped to exactly one \
+ user entry
+MILD_ERR_SASLCRAMMD5_NO_MATCHING_ENTRIES_184=The server was not able to find \
+ any user entries for the provided username of %s
+MILD_ERR_SASLCRAMMD5_NO_PW_ATTR_185=The SASL CRAM-MD5 authentication failed \
+ because the mapped user entry did not contain any values for the %s attribute
+MILD_ERR_SASLCRAMMD5_UNKNOWN_STORAGE_SCHEME_186=A password in the target user \
+ entry %s could not be processed via SASL CRAM-MD5 because that password has \
+ an unknown storage scheme of %s
+MILD_ERR_SASLCRAMMD5_CANNOT_GET_CLEAR_PASSWORD_187=An error occurred while \
+ attempting to obtain the clear-text password for user %s from the value with \
+ storage scheme %s:  %s
+MILD_ERR_SASLCRAMMD5_INVALID_PASSWORD_188=The provided password is invalid
+MILD_ERR_SASLCRAMMD5_NO_REVERSIBLE_PASSWORDS_189=SASL CRAM-MD5 authentication \
+ is not possible for user %s because none of the passwords in the user entry \
+ are stored in a reversible form
+INFO_SASLCRAMMD5_UPDATED_USERNAME_ATTR_190=Attribute \
+ ds-cfg-user-name-attribute in configuration entry %s has been updated.  The \
+ %s attribute will now be used when looking up user entries based on their \
+ username
+INFO_SASLCRAMMD5_UPDATED_USER_BASE_DN_191=Attribute ds-cfg-user-base-dn in \
+ configuration entry %s has been updated.  The DN %s will now be used as the \
+ search base when looking up user entries based on their username
+SEVERE_ERR_SASLDIGESTMD5_CANNOT_GET_MESSAGE_DIGEST_192=An unexpected error \
+ occurred while attempting to obtain an MD5 digest engine for use by the \
+ DIGEST-MD5 SASL handler:  %s
+INFO_SASLDIGESTMD5_DESCRIPTION_USERNAME_ATTRIBUTE_193=Specifies the name of \
+ the attribute that will be used to identify user entries based on the \
+ username provided during SASL DIGEST-MD5 authentication.  This must specify \
+ the name of a valid attribute type defined in the server schema.  Changes to \
+ this configuration attribute will take effect immediately
+SEVERE_ERR_SASLDIGESTMD5_CANNOT_GET_USERNAME_ATTR_194=An unexpected error \
+ occurred while attempting to determine the value of the \
+ ds-cfg-user-name-attribute attribute in configuration entry %s:  %s
+SEVERE_ERR_SASLDIGESTMD5_UNKNOWN_USERNAME_ATTR_195=The attribute %s \
+ referenced in configuration attribute ds-cfg-user-name-attribute in \
+ configuration entry %s does not exist in the Directory Server schema.  The \
+ attribute that is to be used for username lookups during SASL DIGEST-MD5 \
+ authentication must be defined in the server schema
+INFO_SASLDIGESTMD5_DESCRIPTION_USER_BASE_DN_196=Specifies the base DN that \
+ should be used when searching for entries based on the username provided \
+ during SASL DIGEST-MD5 authentication.  Changes to this configuration \
+ attribute will take effect immediately
+SEVERE_ERR_SASLDIGESTMD5_CANNOT_GET_USER_BASE_DN_197=An unexpected error \
+ occurred while attempting to determine the value of the ds-cfg-user-base-dn \
+ attribute in configuration entry %s:  %s
+INFO_SASLDIGESTMD5_DESCRIPTION_REALM_198=Specifies the realm that should be \
+ used by the server for DIGEST-MD5 authentication.  If this is not provided, \
+ then the server will default to using a set of realm names that correspond to \
+ the defined suffixes.  Changes to this configuration attribute will take \
+ effect immediately
+SEVERE_ERR_SASLDIGESTMD5_CANNOT_GET_REALM_199=An unexpected error occurred \
+ while attempting to determine the value of the ds-cfg-realm attribute in \
+ configuration entry %s:  %s
+SEVERE_WARN_SASLDIGESTMD5_CHALLENGE_TOO_LONG_200=The initial DIGEST-MD5 must \
+ be less than 2048 bytes, but the generated challenge was %d bytes
+MILD_ERR_SASLDIGESTMD5_NO_CREDENTIALS_201=The client connection included \
+ DIGEST-MD5 state information, indicating that the client was in the process \
+ of performing a DIGEST-MD5 bind, but the bind request did not include any \
+ credentials
+MILD_ERR_SASLDIGESTMD5_INVALID_STORED_STATE_202=The SASL DIGEST-MD5 bind \
+ request contained SASL credentials, but the stored SASL state information for \
+ this client connection is not in an appropriate form for the challenge
+SEVERE_WARN_SASLDIGESTMD5_CANNOT_PARSE_ISO_CREDENTIALS_203=An error occurred \
+ while attempting to parse the DIGEST-MD5 credentials as a string using the %s \
+ character set:  %s.  The server will re-try using UTF-8
+SEVERE_WARN_SASLDIGESTMD5_CANNOT_PARSE_UTF8_CREDENTIALS_204=An error occurred \
+ while attempting to parse the DIGEST-MD5 credentials as a string using the \
+ UTF-8 character set:  %s
+MILD_ERR_SASLDIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS_205=The DIGEST-MD5 \
+ credentials provided by the client contained an invalid token of "%s" \
+ starting at position %d
+MILD_ERR_SASLDIGESTMD5_INVALID_CHARSET_206=The DIGEST-MD5 credentials \
+ provided by the client specified an invalid character set of %s.  Only a \
+ value of 'utf-8' is acceptable for this parameter
+MILD_ERR_SASLDIGESTMD5_CANNOT_DECODE_REALM_AS_DN_207=An error occurred while \
+ attempting to parse the provided response realm "%s" as a DN:  %s
+MILD_ERR_SASLDIGESTMD5_INVALID_REALM_208=The DIGEST-MD5 credentials provided \
+ by the client included an invalid realm of "%s"
+SEVERE_ERR_SASLDIGESTMD5_INVALID_NONCE_209=The DIGEST-MD5 credentials \
+ provided by the client included a nonce that was different from the nonce \
+ supplied by the server.  This could indicate a replay attack or a chosen \
+ plaintext attack, and as a result the client connection will be terminated
+MILD_ERR_SASLDIGESTMD5_CANNOT_DECODE_NONCE_COUNT_210=The DIGEST-MD5 \
+ credentials provided by the client included a nonce count "%s" that could not \
+ be decoded as a hex-encoded integer
+SEVERE_ERR_SASLDIGESTMD5_CANNOT_DECODE_STORED_NONCE_COUNT_211=An unexpected \
+ error occurred while attempting to decode the nonce count stored by the \
+ server for this client connection:  %s
+SEVERE_ERR_SASLDIGESTMD5_INVALID_NONCE_COUNT_212=The DIGEST-MD5 credentials \
+ provided by the client included a nonce count that was different from the \
+ count expected by the server.  This could indicate a replay attack, and as a \
+ result the client connection will be terminated
+MILD_ERR_SASLDIGESTMD5_INTEGRITY_NOT_SUPPORTED_213=The client requested the \
+ auth-int quality of protection but integrity protection is not currently \
+ supported by the Directory Server
+MILD_ERR_SASLDIGESTMD5_CONFIDENTIALITY_NOT_SUPPORTED_214=The client requested \
+ the auth-conf quality of protection but confidentiality protection is not \
+ currently supported by the Directory Server
+MILD_ERR_SASLDIGESTMD5_INVALID_QOP_215=The DIGEST-MD5 credentials provided by \
+ the client requested an invalid quality of protection mechanism of %s
+MILD_ERR_SASLDIGESTMD5_CANNOT_PARSE_RESPONSE_DIGEST_216=The DIGEST-MD5 \
+ credentials provided by the client included a digest that could not be \
+ decoded as a hex-encoded byte sequence:  %s
+MILD_ERR_SASLDIGESTMD5_INVALID_RESPONSE_TOKEN_217=The DIGEST-MD5 credentials \
+ provided by the client included an invalid token named "%s"
+MILD_ERR_SASLDIGESTMD5_NO_USERNAME_IN_RESPONSE_218=The DIGEST-MD5 credentials \
+ provided by the client did not contain the required "username" token
+MILD_ERR_SASLDIGESTMD5_NO_NONCE_IN_RESPONSE_219=The DIGEST-MD5 credentials \
+ provided by the client did not contain the required "nonce" token
+MILD_ERR_SASLDIGESTMD5_NO_CNONCE_IN_RESPONSE_220=The DIGEST-MD5 credentials \
+ provided by the client did not contain the required "cnonce" token
+MILD_ERR_SASLDIGESTMD5_NO_NONCE_COUNT_IN_RESPONSE_221=The DIGEST-MD5 \
+ credentials provided by the client did not contain the required "nc" token
+MILD_ERR_SASLDIGESTMD5_NO_DIGEST_URI_IN_RESPONSE_222=The DIGEST-MD5 \
+ credentials provided by the client did not contain the required "digest-uri" \
+ token
+MILD_ERR_SASLDIGESTMD5_NO_DIGEST_IN_RESPONSE_223=The DIGEST-MD5 credentials \
+ provided by the client did not contain the required "response" token
+MILD_ERR_SASLDIGESTMD5_CANNOT_DECODE_USERNAME_AS_DN_224=An error occurred \
+ while attempting to decode the SASL DIGEST-MD5 username "%s" because it \
+ appeared to contain a DN but DN decoding failed:  %s
+MILD_ERR_SASLDIGESTMD5_USERNAME_IS_NULL_DN_225=The username in the SASL \
+ DIGEST-MD5 bind request appears to be an empty DN.  This is not allowed
+INFO_SASLDIGESTMD5_CANNOT_LOCK_ENTRY_226=The Directory Server was unable to \
+ obtain a read lock on user entry %s in order to retrieve that entry
+MILD_ERR_SASLDIGESTMD5_CANNOT_GET_ENTRY_BY_DN_227=An error occurred while \
+ attempting to retrieve user entry %s as specified in the DN-based username of \
+ a SASL DIGEST-MD5 bind request:  %s
+MILD_ERR_SASLDIGESTMD5_ZERO_LENGTH_USERNAME_228=The username contained in the \
+ SASL DIGEST-MD5 bind request had a length of zero characters, which is not \
+ allowed.  DIGEST-MD5 authentication does not allow an empty string for use as \
+ the username
+MILD_ERR_SASLDIGESTMD5_CANNOT_PERFORM_INTERNAL_SEARCH_229=An error occurred \
+ while trying to perform an internal search to retrieve the user entry \
+ associated with the SASL DIGEST-MD5 username %s.  The result of that search \
+ was %s with a message of %s
+MILD_ERR_SASLDIGESTMD5_MULTIPLE_MATCHING_ENTRIES_230=The internal search \
+ attempting to resolve SASL DIGEST-MD5 username %s matched multiple entries. \
+ Authentication cannot succeed unless the username is mapped to exactly one \
+ user entry
+MILD_ERR_SASLDIGESTMD5_NO_MATCHING_ENTRIES_231=The server was not able to \
+ find any user entries for the provided username of %s
+MILD_ERR_SASLDIGESTMD5_NO_PW_ATTR_232=The SASL DIGEST-MD5 authentication \
+ failed because the mapped user entry did not contain any values for the %s \
+ attribute
+MILD_ERR_SASLDIGESTMD5_UNKNOWN_STORAGE_SCHEME_233=A password in the target \
+ user entry %s could not be processed via SASL DIGEST-MD5 because that \
+ password has an unknown storage scheme of %s
+MILD_ERR_SASLDIGESTMD5_CANNOT_GET_CLEAR_PASSWORD_234=An error occurred while \
+ attempting to obtain the clear-text password for user %s from the value with \
+ storage scheme %s:  %s
+MILD_ERR_SASLDIGESTMD5_INVALID_CREDENTIALS_235=The DIGEST-MD5 credentials \
+ provided by the client are not appropriate for any password in the associated \
+ user account
+MILD_ERR_SASLDIGESTMD5_NO_REVERSIBLE_PASSWORDS_236=SASL DIGEST-MD5 \
+ authentication is not possible for user %s because none of the passwords in \
+ the user entry are stored in a reversible form
+SEVERE_WARN_SASLDIGESTMD5_CANNOT_GENERATE_RESPONSE_DIGEST_237=An error \
+ occurred while attempting to generate a server-side digest to compare with \
+ the client response:  %s
+SEVERE_ERR_SASLDIGESTMD5_CANNOT_GENERATE_RESPONSE_AUTH_DIGEST_238=An error \
+ occurred while trying to generate the response auth digest to include in the \
+ server SASL credentials:  %s
+MILD_ERR_SASLDIGESTMD5_INVALID_CLOSING_QUOTE_POS_239=The DIGEST-MD5 response \
+ challenge could not be parsed because it had an invalid quotation mark at \
+ position %d
+INFO_SASLDIGESTMD5_UPDATED_USERNAME_ATTR_240=Attribute \
+ ds-cfg-user-name-attribute in configuration entry %s has been updated.  The \
+ %s attribute will now be used when looking up user entries based on their \
+ username
+INFO_SASLDIGESTMD5_UPDATED_USER_BASE_DN_241=Attribute ds-cfg-user-base-dn in \
+ configuration entry %s has been updated.  The DN %s will now be used as the \
+ search base when looking up user entries based on their username
+INFO_SASLDIGESTMD5_UPDATED_NEW_REALM_242=Attribute ds-cfg-realm in \
+ configuration entry %s has been updated.  The realm "%s" will now be \
+ advertised by the server in the challenge response
+INFO_SASLDIGESTMD5_UPDATED_NO_REALM_243=Attribute ds-cfg-realm in \
+ configuration entry %s has been updated.  The realm(s) advertised by the \
+ server in the challenge response will be the DNs of the server suffixes
+INFO_SASLGSSAPI_DESCRIPTION_USERNAME_ATTRIBUTE_244=Specifies the name of the \
+ attribute that will be used to identify user entries based on the username \
+ provided during SASL GSSAPI authentication.  This must specify the name of a \
+ valid attribute type defined in the server schema.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_SASLGSSAPI_CANNOT_GET_USERNAME_ATTR_245=An unexpected error \
+ occurred while attempting to determine the value of the \
+ ds-cfg-user-name-attribute attribute in configuration entry %s:  %s
+SEVERE_ERR_SASLGSSAPI_UNKNOWN_USERNAME_ATTR_246=The attribute %s referenced \
+ in configuration attribute ds-cfg-user-name-attribute in configuration entry \
+ %s does not exist in the Directory Server schema.  The attribute that is to \
+ be used for username lookups during SASL GSSAPI authentication must be \
+ defined in the server schema
+INFO_SASLGSSAPI_DESCRIPTION_USER_BASE_DN_247=Specifies the base DN that \
+ should be used when searching for entries based on the username provided \
+ during SASL GSSAPI authentication.  Changes to this configuration attribute \
+ will take effect immediately
+SEVERE_ERR_SASLGSSAPI_CANNOT_GET_USER_BASE_DN_248=An unexpected error \
+ occurred while attempting to determine the value of the ds-cfg-user-base-dn \
+ attribute in configuration entry %s:  %s
+INFO_SASLGSSAPI_DESCRIPTION_SERVER_FQDN_249=Specifies the fully-qualified \
+ domain name that should be used for the server during SASL GSSAPI \
+ authentication.  Changes to this configuration attribute will take effect \
+ immediately
+SEVERE_ERR_SASLGSSAPI_CANNOT_GET_SERVER_FQDN_250=An unexpected error occurred \
+ while attempting to determine the value of the ds-cfg-server-fqdn attribute \
+ in configuration entry %s:  %s
+INFO_SASLGSSAPI_UPDATED_USERNAME_ATTR_251=Attribute \
+ ds-cfg-user-name-attribute in configuration entry %s has been updated.  The \
+ %s attribute will now be used when looking up user entries based on their \
+ username
+INFO_SASLGSSAPI_UPDATED_USER_BASE_DN_252=Attribute ds-cfg-user-base-dn in \
+ configuration entry %s has been updated.  The DN %s will now be used as the \
+ search base when looking up user entries based on their username
+INFO_SASLGSSAPI_UPDATED_NEW_SERVER_FQDN_253=Attribute ds-cfg-server-fqdn in \
+ configuration entry %s has been updated.  The value "%s" will now be used as \
+ the fully-qualified name of the Directory Server for GSSAPI authentication
+INFO_SASLGSSAPI_UPDATED_NO_SERVER_FQDN_254=Attribute ds-cfg-server-fqdn in \
+ configuration entry %s has been updated.  The Directory Server will attempt \
+ to determine its own FQDN for use in GSSAPI authentication
+INFO_SASLGSSAPI_UNEXPECTED_CALLBACK_255=An unexpected callback was provided \
+ for the SASL server for use during GSSAPI authentication:  %s
+INFO_SASLGSSAPI_DESCRIPTION_KDC_ADDRESS_256=Specifies the address of the KDC \
+ that should be used during SASL GSSAPI authentication.  If this is not \
+ specified, then an attempt will be made to obtain it from the system-wide \
+ Kerberos configuration.  Changes to this configuration attribute will take \
+ effect immediately for subsequent GSSAPI bind attempts
+MILD_ERR_SASLGSSAPI_CANNOT_GET_KDC_ADDRESS_257=An unexpected error occurred \
+ while attempting to determine the value of the ds-cfg-kdc-address attribute \
+ in configuration entry %s:  %s
+INFO_SASLGSSAPI_DESCRIPTION_REALM_258=Specifies the default realm that should \
+ be used during SASL GSSAPI authentication.  If this is not specified, then an \
+ attempt will be made to obtain it from the system-wide Kerberos \
+ configuration.  Changes to this configuration attribute will take effect \
+ immediately for subsequent GSSAPI bind attempts
+MILD_ERR_SASLGSSAPI_CANNOT_GET_REALM_259=An unexpected error occurred while \
+ attempting to determine the value of the ds-cfg-realm attribute in \
+ configuration entry %s:  %s
+MILD_ERR_SASLGSSAPI_NO_CLIENT_CONNECTION_260=No client connection was \
+ available for use in processing the GSSAPI bind request
+MILD_ERR_SASLGSSAPI_CANNOT_CREATE_SASL_SERVER_261=An error occurred while \
+ attempting to create the SASL server instance to process the GSSAPI bind \
+ request:  %s
+MILD_ERR_SASLGSSAPI_CANNOT_EVALUATE_RESPONSE_262=An error occurred while \
+ attempting to evaluate the challenge response provided by the client in the \
+ GSSAPI bind request:  %s
+MILD_ERR_SASLGSSAPI_NO_AUTHZ_ID_263=The GSSAPI authentication process appears \
+ to have completed but no authorization ID is available for mapping to a \
+ directory user
+MILD_ERR_SASLGSSAPI_CANNOT_PERFORM_INTERNAL_SEARCH_264=An error occurred \
+ while attempting to perform an internal search to map the GSSAPI \
+ authorization ID %s to a Directory Server user (result code %d, error message \
+ "%s")
+MILD_ERR_SASLGSSAPI_MULTIPLE_MATCHING_ENTRIES_265=The GSSAPI authorization ID \
+ %s appears to have multiple matches in the Directory Server
+MILD_ERR_SASLGSSAPI_CANNOT_MAP_AUTHZID_266=The GSSAPI authorization ID %s \
+ could not be mapped to any user in the Directory Server
+INFO_SASLGSSAPI_UPDATED_KDC_267=Attribute ds-cfg-kdc-address in configuration \
+ entry %s has been updated.  The value "%s" will now be used as the address of \
+ the KDC for GSSAPI authentication
+INFO_SASLGSSAPI_UNSET_KDC_268=Attribute ds-cfg-kdc-address in configuration \
+ entry %s has been un-set as a system property.  Any further GSSAPI \
+ authentication attempts will rely on the Kerberos configuration in the \
+ underlying operating system to determine the KDC address
+INFO_SASLGSSAPI_UPDATED_REALM_269=Attribute ds-cfg-realm in configuration \
+ entry %s has been updated.  The value "%s" will now be used as the default \
+ realm for GSSAPI authentication
+INFO_SASLGSSAPI_UNSET_REALM_270=Attribute ds-cfg-realm in configuration entry \
+ %s has been un-set as a system property.  Any further GSSAPI authentication \
+ attempts will rely on the Kerberos configuration in the underlying operating \
+ system to determine the default realm
+MILD_ERR_SASLGSSAPI_CANNOT_CREATE_LOGIN_CONTEXT_271=An error occurred while \
+ attempting to create the JAAS login context for GSSAPI authentication:  %s
+MILD_ERR_SASLGSSAPI_CANNOT_AUTHENTICATE_SERVER_272=An error occurred while \
+ attempting to perform server-side Kerberos authentication to support a GSSAPI \
+ bind operation:  %s
+INFO_SASLGSSAPI_DESCRIPTION_KEYTAB_FILE_273=Specifies the path to the keytab \
+ file containing the secret key for the Kerberos principal to use when \
+ processing GSSAPI authentication.  If this is not specified, then the \
+ system-wide default keytab file will be used.  Changes to this configuration \
+ attribute will not take effect until the GSSAPI SASL mechanism handler is \
+ disabled and re-enabled or the Directory Server is restarted
+MILD_ERR_SASLGSSAPI_CANNOT_GET_KEYTAB_FILE_274=An unexpected error occurred \
+ while attempting to determine the value of the ds-cfg-keytab attribute in \
+ configuration entry %s:  %s
+SEVERE_ERR_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG_275=An error occurred while \
+ attempting to write a temporary JAAS configuration file for use during GSSAPI \
+ processing:  %s
+SEVERE_ERR_SASLGSSAPI_DIFFERENT_AUTHID_AND_AUTHZID_276=The authentication ID \
+ %s was not equal to the authorization ID %s.  This is not supported for \
+ GSSAPI authentication
+SEVERE_ERR_EXTOP_WHOAMI_PROXYAUTH_INSUFFICIENT_PRIVILEGES_277=You do not have \
+ sufficient privileges to use the proxied authorization control
+INFO_SOFTREFCACHE_DESCRIPTION_LOCK_TIMEOUT_278=Specifies the maximum length \
+ of time in milliseconds that the entry cache should block while attempting to \
+ acquire a lock for an entry.  Changes to this configuration attribute will \
+ take effect immediately
+SEVERE_ERR_SOFTREFCACHE_CANNOT_DETERMINE_LOCK_TIMEOUT_279=An error occurred \
+ while attempting to determine the value of the ds-cfg-lock-timeout attribute \
+ in configuration entry %s:  %s.  The default of %d will be used
+INFO_SOFTREFCACHE_DESCRIPTION_INCLUDE_FILTERS_280=Specifies a set of search \
+ filters that may be used to indicate which entries should be included in the \
+ entry cache.  Entries that do not match at least one of these filters will \
+ not be stored in the cache.  If no filters are provided, then any entry will \
+ be accepted.  Changes to this configuration attribute will take effect \
+ immediately, but will not impact existing entries that are already held in \
+ the cache
+SEVERE_WARN_SOFTREFCACHE_CANNOT_DECODE_INCLUDE_FILTER_281=An error occurred \
+ while attempting to decode the value "%s" from attribute \
+ ds-cfg-include-filter of entry %s:  %s.  This filter will not be used when \
+ determining whether to store an entry in the cache
+SEVERE_WARN_SOFTREFCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS_282=An error \
+ occurred while attempting to decode any of the values from attribute \
+ ds-cfg-include-filter of entry %s.  All entries will be considered eligible \
+ for inclusion in the cache
+SEVERE_ERR_SOFTREFCACHE_CANNOT_DETERMINE_INCLUDE_FILTERS_283=An error \
+ occurred while attempting to determine the value of the ds-cfg-include-filter \
+ attribute in configuration entry %s:  %s.  All entries will be considered \
+ eligible for inclusion in the cache
+INFO_SOFTREFCACHE_DESCRIPTION_EXCLUDE_FILTERS_284=Specifies a set of search \
+ filters that may be used to indicate which entries should be excluded from \
+ the entry cache.  Entries that match any of these filters will not be stored \
+ in the cache.  If no filters are provided, then any entry will be accepted. \
+ Changes to this configuration attribute will take effect immediately, but \
+ will not impact existing entries that are already held in the cache
+SEVERE_WARN_SOFTREFCACHE_CANNOT_DECODE_EXCLUDE_FILTER_285=An error occurred \
+ while attempting to decode the value "%s" from attribute \
+ ds-cfg-exclude-filter of entry %s:  %s.  This filter will not be used when \
+ determining whether to store an entry in the cache
+SEVERE_WARN_SOFTREFCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS_286=An error \
+ occurred while attempting to decode any of the values from attribute \
+ ds-cfg-exclude-filter of entry %s.  All entries will be considered eligible \
+ for inclusion in the cache
+SEVERE_ERR_SOFTREFCACHE_CANNOT_DETERMINE_EXCLUDE_FILTERS_287=An error \
+ occurred while attempting to determine the value of the ds-cfg-exclude-filter \
+ attribute in configuration entry %s:  %s.  All entries will be considered \
+ eligible for inclusion in the cache
+SEVERE_ERR_SOFTREFCACHE_INVALID_LOCK_TIMEOUT_288=The ds-cfg-lock-timeout \
+ attribute of entry %s, which specifies the maximum length of time in \
+ milliseconds that the cache should block while attempting to obtain a lock on \
+ an entry, has an invalid value:  %s.  Its value must be a positive integer, \
+ or zero to indicate that it should never block
+SEVERE_ERR_SOFTREFCACHE_INVALID_INCLUDE_FILTER_289=The ds-cfg-include-filter \
+ attribute of entry %s, which specifies a set of search filters that may be \
+ used to control which entries are included in the cache, has an invalid value \
+ of "%s":  %s
+SEVERE_ERR_SOFTREFCACHE_INVALID_INCLUDE_FILTERS_290=The ds-cfg-include-filter \
+ attribute of entry %s, which specifies a set of search filters that may be \
+ used to control which entries are included in the cache, has an invalid \
+ value:  %s
+SEVERE_ERR_SOFTREFCACHE_INVALID_EXCLUDE_FILTER_291=The ds-cfg-exclude-filter \
+ attribute of entry %s, which specifies a set of search filters that may be \
+ used to control which entries are excluded from the cache, has an invalid \
+ value of "%s":  %s
+SEVERE_ERR_SOFTREFCACHE_INVALID_EXCLUDE_FILTERS_292=The ds-cfg-exclude-filter \
+ attribute of entry %s, which specifies a set of search filters that may be \
+ used to control which entries are excluded from the cache, has an invalid \
+ value:  %s
+INFO_SOFTREFCACHE_UPDATED_LOCK_TIMEOUT_293=The lock timeout that will be used \
+ to determine the length of time that the cache should block while attempting \
+ to acquire a lock for an entry has been set to %d milliseconds
+INFO_SOFTREFCACHE_UPDATED_INCLUDE_FILTERS_294=The set of search filters that \
+ will control which entries may be included in the cache has been updated
+INFO_SOFTREFCACHE_UPDATED_EXCLUDE_FILTERS_295=The set of search filters that \
+ will control which entries should be be excluded from the cache has been \
+ updated
+INFO_EXACTMAP_DESCRIPTION_MATCH_ATTR_298=Specifies the name or OID of the \
+ attribute whose value should exactly match the ID string provided to this \
+ identity mapper.  At least one value must be provided.  All values must refer \
+ to the name or OID of an attribute type defined in the Directory Server \
+ schema.  If multiple attribute type names or OIDs are provided, then at least \
+ one of those attributes must contain the provided ID string value in exactly \
+ one entry
+MILD_ERR_EXACTMAP_NO_MATCH_ATTR_299=Configuration entry %s does not have any \
+ values for attribute ds-cfg-match-attribute, which is used to specify which \
+ attribute(s) may be used to map a given ID string to a user entry
+MILD_ERR_EXACTMAP_UNKNOWN_ATTR_300=Configuration entry %s contains value %s \
+ for attribute ds-cfg-match-attribute but that is not a valid name or OID for \
+ any attribute type defined in the Directory Server schema
+MILD_ERR_EXACTMAP_CANNOT_DETERMINE_MATCH_ATTR_301=An error occurred while \
+ attempting to process the value(s) of attribute ds-cfg-match-attribute in \
+ configuration entry %s:  %s
+INFO_EXACTMAP_DESCRIPTION_SEARCH_BASE_302=Specifies the base DN(s) that \
+ should be used when performing searches to map the provided ID string to a \
+ user entry.  If no values are provided, then the root DSE will be used as the \
+ search base
+MILD_ERR_EXACTMAP_CANNOT_DETERMINE_MATCH_BASE_303=An error occurred while \
+ attempting to process the value(s) of attribute ds-cfg-match-base-dn in \
+ configuration entry %s:  %s
+INFO_EXACTMAP_UPDATED_MATCH_ATTRS_304=The set of attributes to use when \
+ matching ID strings to user entries contained in attribute \
+ ds-cfg-match-attribute of configuration entry %s has been updated
+INFO_EXACTMAP_UPDATED_MATCH_BASES_305=The set of search base DNs to use when \
+ matching ID strings to user entries contained in attribute \
+ ds-cfg-match-base-dn of configuration entry %s has been updated
+MILD_ERR_EXACTMAP_MULTIPLE_MATCHING_ENTRIES_306=ID string %s mapped to \
+ multiple users
+MILD_ERR_EXACTMAP_INEFFICIENT_SEARCH_307=The internal search based on ID \
+ string %s could not be processed efficiently:  %s.  Check the server \
+ configuration to ensure that all associated backends are properly configured \
+ for these types of searches
+MILD_ERR_EXACTMAP_SEARCH_FAILED_308=An internal failure occurred while \
+ attempting to resolve ID string %s to a user entry:  %s
+INFO_SASLCRAMMD5_DESCRIPTION_IDENTITY_MAPPER_DN_309=Specifies the DN of the \
+ configuration entry that holds the configuration for the identity mapper that \
+ should be used to map the CRAM-MD5 username to a Directory Server user entry. \
+ Changes to this configuration attribute will take effect immediately
+MILD_ERR_SASLCRAMMD5_NO_IDENTITY_MAPPER_ATTR_310=Configuration entry %s does \
+ not contain attribute ds-cfg-identity-mapper-dn which specifies the DN of the \
+ identity mapper to use in conjunction with the CRAM-MD5 SASL mechanism.  This \
+ is a required attribute
+MILD_ERR_SASLCRAMMD5_NO_SUCH_IDENTITY_MAPPER_311=The identity mapper %s \
+ specified in attribute ds-cfg-identity-mapper-dn of configuration entry %s \
+ does not reference a valid identity mapper configuration that is enabled for \
+ use in the Directory Server
+MILD_ERR_SASLCRAMMD5_CANNOT_GET_IDENTITY_MAPPER_312=An error occurred while \
+ trying to process the value of the ds-cfg-identity-mapper-dn attribute in \
+ configuration entry %s to determine which identity mapper should be used in \
+ conjunction with the CRAM-MD5 SASL mechanism:  %s
+MILD_ERR_SASLCRAMMD5_CANNOT_MAP_USERNAME_313=An error occurred while \
+ attempting to map username %s to a Directory Server entry:  %s
+INFO_SASLCRAMMD5_UPDATED_IDENTITY_MAPPER_314=Attribute \
+ ds-cfg-identity-mapper-dn in configuration entry %s has been updated.  The \
+ identity mapper defined in configuration entry %s will now be used to map \
+ usernames to entries when processing SASL CRAM-MD5 bind requests
+INFO_SASLDIGESTMD5_DESCRIPTION_IDENTITY_MAPPER_DN_315=Specifies the DN of the \
+ configuration entry that holds the configuration for the identity mapper that \
+ should be used to map the DIGEST-MD5 username to a Directory Server user \
+ entry.  Changes to this configuration attribute will take effect immediately
+MILD_ERR_SASLDIGESTMD5_NO_IDENTITY_MAPPER_ATTR_316=Configuration entry %s \
+ does not contain attribute ds-cfg-identity-mapper-dn which specifies the DN \
+ of the identity mapper to use in conjunction with the DIGEST-MD5 SASL \
+ mechanism.  This is a required attribute
+MILD_ERR_SASLDIGESTMD5_NO_SUCH_IDENTITY_MAPPER_317=The identity mapper %s \
+ specified in attribute ds-cfg-identity-mapper-dn of configuration entry %s \
+ does not reference a valid identity mapper configuration that is enabled for \
+ use in the Directory Server
+MILD_ERR_SASLDIGESTMD5_CANNOT_GET_IDENTITY_MAPPER_318=An error occurred while \
+ trying to process the value of the ds-cfg-identity-mapper-dn attribute in \
+ configuration entry %s to determine which identity mapper should be used in \
+ conjunction with the DIGEST-MD5 SASL mechanism:  %s
+MILD_ERR_SASLDIGESTMD5_CANNOT_MAP_USERNAME_319=An error occurred while \
+ attempting to map username %s to a Directory Server entry:  %s
+INFO_SASLDIGESTMD5_UPDATED_IDENTITY_MAPPER_320=Attribute \
+ ds-cfg-identity-mapper-dn in configuration entry %s has been updated.  The \
+ identity mapper defined in configuration entry %s will now be used to map \
+ usernames to entries when processing SASL DIGEST-MD5 bind requests
+INFO_SASLPLAIN_DESCRIPTION_IDENTITY_MAPPER_DN_321=Specifies the DN of the \
+ configuration entry that holds the configuration for the identity mapper that \
+ should be used to map the provided username to a Directory Server user entry. \
+ Changes to this configuration attribute will take effect immediately
+MILD_ERR_SASLPLAIN_NO_IDENTITY_MAPPER_ATTR_322=Configuration entry %s does \
+ not contain attribute ds-cfg-identity-mapper-dn which specifies the DN of the \
+ identity mapper to use in conjunction with the PLAIN SASL mechanism.  This is \
+ a required attribute
+MILD_ERR_SASLPLAIN_NO_SUCH_IDENTITY_MAPPER_323=The identity mapper %s \
+ specified in attribute ds-cfg-identity-mapper-dn of configuration entry %s \
+ does not reference a valid identity mapper configuration that is enabled for \
+ use in the Directory Server
+MILD_ERR_SASLPLAIN_CANNOT_GET_IDENTITY_MAPPER_324=An error occurred while \
+ trying to process the value of the ds-cfg-identity-mapper-dn attribute in \
+ configuration entry %s to determine which identity mapper should be used in \
+ conjunction with the PLAIN SASL mechanism:  %s
+MILD_ERR_SASLPLAIN_CANNOT_MAP_USERNAME_325=An error occurred while attempting \
+ to map username %s to a Directory Server entry:  %s
+INFO_SASLPLAIN_UPDATED_IDENTITY_MAPPER_326=Attribute \
+ ds-cfg-identity-mapper-dn in configuration entry %s has been updated.  The \
+ identity mapper defined in configuration entry %s will now be used to map \
+ usernames to entries when processing SASL PLAIN bind requests
+MILD_ERR_EXTOP_CANCEL_NO_REQUEST_VALUE_327=Unable to process the cancel \
+ request because the extended operation did not include a request value
+MILD_ERR_EXTOP_CANCEL_CANNOT_DECODE_REQUEST_VALUE_328=An error occurred while \
+ attempting to decode the value of the cancel extended request:  %s
+INFO_EXTOP_CANCEL_REASON_329=Processing on this operation was terminated as a \
+ result of receiving a cancel request (message ID %d)
+MILD_ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD_330=Password storage scheme \
+ %s does not support use with the authentication password attribute syntax
+INFO_PWLENGTHVALIDATOR_DESCRIPTION_MIN_LENGTH_331=Specifies the minimum \
+ number of characters that a password will be allowed to have.  A value of \
+ zero indicates that there is no minimum length.  Changes to this \
+ configuration attribute will take effect immediately
+MILD_ERR_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MIN_LENGTH_332=An error occurred \
+ while attempting to determine the minimum allowed password length from the \
+ ds-cfg-minimum-password-length attribute:  %s
+INFO_PWLENGTHVALIDATOR_DESCRIPTION_MAX_LENGTH_333=Specifies the maximum \
+ number of characters that a password will be allowed to have.  A value of \
+ zero indicates that there is no maximum length.  Changes to this \
+ configuration attribute will take effect immediately
+MILD_ERR_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MAX_LENGTH_334=An error occurred \
+ while attempting to determine the maximum allowed password length from the \
+ ds-cfg-maximum-password-length attribute:  %s
+MILD_ERR_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX_335=The configured minimum \
+ password length of %d characters is greater than the configured maximum \
+ password length of %d
+MILD_ERR_PWLENGTHVALIDATOR_TOO_SHORT_336=The provided password is shorter \
+ than the minimum required length of %d characters
+MILD_ERR_PWLENGTHVALIDATOR_TOO_LONG_337=The provided password is longer than \
+ the maximum allowed length of %d characters
+INFO_PWLENGTHVALIDATOR_UPDATED_MIN_LENGTH_338=The minimum password length has \
+ been updated to %d
+INFO_PWLENGTHVALIDATOR_UPDATED_MAX_LENGTH_339=The maximum password length has \
+ been updated to %d
+INFO_RANDOMPWGEN_DESCRIPTION_CHARSET_340=Specifies the character set(s) that \
+ should be used to generate the passwords.  Each character set should be given \
+ a name (consisting of only ASCII alphabetic characters) followed immediately \
+ by a colon and the set of characters that should be included in that \
+ character set.  Changes to this configuration attribute will take effect \
+ immediately
+MILD_ERR_RANDOMPWGEN_NO_CHARSETS_341=Configuration entry "%s" does not \
+ contain attribute ds-cfg-password-character-set which specifies the sets of \
+ characters that should be used when generating the password.  This is a \
+ required attribute
+MILD_ERR_RANDOMPWGEN_CHARSET_NAME_CONFLICT_342=Configuration entry "%s" \
+ contains multiple definitions for the %s character set
+MILD_ERR_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS_343=An error occurred while \
+ attempting to decode the value(s) of the configuration attribute \
+ ds-cfg-password-character-set, which is used to hold the character set(s) for \
+ use in generating the password:  %s
+INFO_RANDOMPWGEN_DESCRIPTION_PWFORMAT_344=Specifies the format that should be \
+ used for passwords constructed by this password generator.  The value should \
+ be a comma-delimited sequence of elements, where each element is the name of \
+ a character set followed by a colon and the number of characters to choose at \
+ random from that character set.  Changes to this configuration attribute will \
+ take effect immediately
+MILD_ERR_RANDOMPWGEN_NO_PWFORMAT_345=Configuration entry "%s" does not \
+ contain attribute ds-cfg-password-format which specifies the format to use \
+ for the generated password.  This is a required attribute
+MILD_ERR_RANDOMPWGEN_UNKNOWN_CHARSET_346=The password format string "%s" \
+ references an undefined character set "%s"
+MILD_ERR_RANDOMPWGEN_INVALID_PWFORMAT_347=The password format string "%s" \
+ contains an invalid syntax.  This value should be a comma-delimited sequence \
+ of elements, where each element is the name of a character set followed by a \
+ colon and the number of characters to choose at random from that character \
+ set
+MILD_ERR_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT_348=An error occurred while \
+ attempting to decode the value for configuration attribute \
+ ds-cfg-password-format, which is used to specify the format for the generated \
+ passwords:  %s
+INFO_SASLGSSAPI_DESCRIPTION_IDENTITY_MAPPER_DN_349=Specifies the DN of the \
+ configuration entry that holds the configuration for the identity mapper that \
+ should be used to map the GSSAPI principal to a Directory Server user entry. \
+ Changes to this configuration attribute will take effect immediately
+MILD_ERR_SASLGSSAPI_NO_IDENTITY_MAPPER_ATTR_350=Configuration entry %s does \
+ not contain attribute ds-cfg-identity-mapper-dn which specifies the DN of the \
+ identity mapper to use in conjunction with the GSSAPI SASL mechanism.  This \
+ is a required attribute
+MILD_ERR_SASLGSSAPI_NO_SUCH_IDENTITY_MAPPER_351=The identity mapper %s \
+ specified in attribute ds-cfg-identity-mapper-dn of configuration entry %s \
+ does not reference a valid identity mapper configuration that is enabled for \
+ use in the Directory Server
+MILD_ERR_SASLGSSAPI_CANNOT_GET_IDENTITY_MAPPER_352=An error occurred while \
+ trying to process the value of the ds-cfg-identity-mapper-dn attribute in \
+ configuration entry %s to determine which identity mapper should be used in \
+ conjunction with the GSSAPI SASL mechanism:  %s
+INFO_SASLGSSAPI_UPDATED_IDENTITY_MAPPER_353=Attribute \
+ ds-cfg-identity-mapper-dn in configuration entry %s has been updated.  The \
+ value "%s" will now be used as the DN of the identity mapper configuration \
+ entry for GSSAPI authentication
+MILD_ERR_EXTOP_PASSMOD_CANNOT_GET_PW_POLICY_354=An error occurred while \
+ attempting to get the password policy for user %s:  %s
+MILD_ERR_EXTOP_PASSMOD_REQUIRE_CURRENT_PW_355=The current password must be \
+ provided for self password changes
+MILD_ERR_EXTOP_PASSMOD_SECURE_AUTH_REQUIRED_356=Password modify operations \
+ that supply the user's current password must be performed over a secure \
+ communication channel
+MILD_ERR_EXTOP_PASSMOD_USER_PW_CHANGES_NOT_ALLOWED_357=End users are not \
+ allowed to change their passwords
+MILD_ERR_EXTOP_PASSMOD_SECURE_CHANGES_REQUIRED_358=Password changes must be \
+ performed over a secure communication channel
+MILD_ERR_EXTOP_PASSMOD_IN_MIN_AGE_359=The password cannot be changed because \
+ the previous password change was too recent
+MILD_ERR_EXTOP_PASSMOD_PASSWORD_IS_EXPIRED_360=The password cannot be changed \
+ because it is expired
+MILD_ERR_EXTOP_PASSMOD_NO_PW_GENERATOR_361=No new password was provided, and \
+ no password generator has been defined that may be used to automatically \
+ create a new password
+MILD_ERR_EXTOP_PASSMOD_CANNOT_GENERATE_PW_362=An error occurred while \
+ attempting to create a new password using the password generator:  %s
+MILD_ERR_EXTOP_PASSMOD_PRE_ENCODED_NOT_ALLOWED_363=The password policy does \
+ not allow users to supply pre-encoded passwords
+MILD_ERR_EXTOP_PASSMOD_UNACCEPTABLE_PW_364=The provided new password failed \
+ the validation checks defined in the server:  %s
+MILD_ERR_EXTOP_PASSMOD_CANNOT_ENCODE_PASSWORD_365=Unable to encode the \
+ provided password using the default scheme(s):  %s
+MILD_ERR_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER_368=The identity mapper with \
+ configuration entry DN %s as specified for use with the password modify \
+ extended operation defined in entry %s either does not exist or is not \
+ enabled.  The identity mapper is a required component, and the password \
+ modify extended operation will not be enabled
+MILD_ERR_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER_369=An error occurred while \
+ attempting to determine the identity mapper to use in conjunction with the \
+ password modify extended operation defined in configuration entry %s:  %s. \
+ The password modify extended operation will not be enabled for use in the \
+ server
+MILD_ERR_EXTOP_PASSMOD_CANNOT_MAP_USER_370=The provided authorization ID \
+ string "%s" could not be mapped to any user in the directory
+MILD_ERR_EXTOP_PASSMOD_ERROR_MAPPING_USER_371=An error occurred while \
+ attempting to map authorization ID string "%s" to a user entry:  %s
+INFO_ERRORLOG_ACCTNOTHANDLER_DESCRIPTION_NOTIFICATION_TYPES_372=Specifies the \
+ status notification types for which log messages should be generated.  It is \
+ a multivalued attribute, and changes will take effect immediately
+MILD_ERR_ERRORLOG_ACCTNOTHANDLER_INVALID_TYPE_373=Configuration entry %s \
+ contains unrecognized account status notification type %s
+MILD_ERR_ERRORLOG_ACCTNOTHANDLER_CANNOT_GET_NOTIFICATION_TYPES_374=An error \
+ occurred while attempting to determine the account status notification types \
+ from configuration entry %s:  %s
+NOTICE_ERRORLOG_ACCTNOTHANDLER_NOTIFICATION_375=Account-Status-Notification \
+ type='%s' userdn='%s' id=%d msg='%s'
+MILD_ERR_SASLDIGESTMD5_CANNOT_GET_REVERSIBLE_PASSWORDS_376=An error occurred \
+ while attempting to retrieve the clear-text password(s) for user %s in order \
+ to perform SASL DIGEST-MD5 authentication:  %s
+MILD_ERR_SASLCRAMMD5_CANNOT_GET_REVERSIBLE_PASSWORDS_377=An error occurred \
+ while attempting to retrieve the clear-text password(s) for user %s in order \
+ to perform SASL CRAM-MD5 authentication:  %s
+MILD_ERR_SASLPLAIN_CANNOT_CHECK_PASSWORD_VALIDITY_378=An error occurred while \
+ attempting to verify the password for user %s during SASL PLAIN \
+ authentication:  %s
+MILD_ERR_STARTTLS_ERROR_SENDING_CLEAR_RESPONSE_379=An unexpected error \
+ occurred while attempting to send the clear-text response to the client after \
+ starting TLS negotiation:  %s
+MILD_WARN_EXTOP_PASSMOD_NOOP_380=The password modify operation was not \
+ actually performed in the Directory Server because the LDAP no-op control was \
+ present in the request
+MILD_ERR_EXTOP_PASSMOD_ACCOUNT_DISABLED_381=The user account has been \
+ administratively disabled
+MILD_ERR_EXTOP_PASSMOD_ACCOUNT_LOCKED_382=The user account is locked
+MILD_ERR_STATICMEMBERS_NO_SUCH_ENTRY_383=Unable to examine entry %s as a \
+ potential member of static group %s because that entry does not exist in the \
+ Directory Server
+MILD_ERR_STATICMEMBERS_CANNOT_GET_ENTRY_384=An error occurred while \
+ attempting to retrieve entry %s as a potential member of static group %s:  %s
+MILD_ERR_STATICGROUP_INVALID_OC_COMBINATION_385=Entry %s cannot be parsed as \
+ a valid static group because static groups are not allowed to have both the \
+ %s and %s object classes
+MILD_ERR_STATICGROUP_NO_VALID_OC_386=Entry %s cannot be parsed as a valid \
+ static group because it does not contain exactly one of the %s or the %s \
+ object classes
+MILD_ERR_STATICGROUP_CANNOT_DECODE_MEMBER_VALUE_AS_DN_387=Value %s for \
+ attribute %s in entry %s cannot be parsed as a valid DN:  %s.  It will be \
+ excluded from the set of group members
+MILD_ERR_STATICGROUP_ADD_MEMBER_ALREADY_EXISTS_388=Cannot add user %s as a \
+ new member of static group %s because that user is already in the member list \
+ for the group
+MILD_ERR_STATICGROUP_REMOVE_MEMBER_NO_SUCH_MEMBER_389=Cannot remove user %s \
+ as a member of static group %s because that user is not included in the \
+ member list for the group
+MILD_ERR_STATICGROUP_ADD_MEMBER_UPDATE_FAILED_390=Cannot add user %s as a new \
+ member of static group %s because an error occurred while attempting to \
+ perform an internal modification to update the group:  %s
+MILD_ERR_STATICGROUP_REMOVE_MEMBER_UPDATE_FAILED_391=Cannot remove user %s as \
+ a member of static group %s because an error occurred while attempting to \
+ perform an internal modification to update the group:  %s
+MILD_ERR_EXTOP_PASSMOD_INSUFFICIENT_PRIVILEGES_392=You do not have sufficient \
+ privileges to perform password reset operations
+MILD_ERR_SASLDIGESTMD5_EMPTY_AUTHZID_393=The provided authorization ID was \
+ empty, which is not allowed for DIGEST-MD5 authentication
+MILD_ERR_SASLDIGESTMD5_AUTHZID_INVALID_DN_394=The provided authorization ID \
+ %s contained an invalid DN:  %s
+MILD_ERR_SASLDIGESTMD5_AUTHZID_INSUFFICIENT_PRIVILEGES_395=The authenticating \
+ user %s does not have sufficient privileges to assume a different \
+ authorization identity
+MILD_ERR_SASLDIGESTMD5_AUTHZID_NO_SUCH_ENTRY_396=The entry %s specified as \
+ the authorization identity does not exist
+MILD_ERR_SASLDIGESTMD5_AUTHZID_CANNOT_GET_ENTRY_397=The entry %s specified as \
+ the authorization identity could not be retrieved:  %s
+MILD_ERR_SASLDIGESTMD5_AUTHZID_NO_MAPPED_ENTRY_398=The server was unable to \
+ find any entry corresponding to authorization ID %s
+MILD_ERR_SASLDIGESTMD5_CANNOT_MAP_AUTHZID_399=An error occurred while \
+ attempting to map authorization ID %s to a user entry:  %s
+MILD_ERR_SASLPLAIN_AUTHZID_INVALID_DN_400=The provided authorization ID %s \
+ contained an invalid DN:  %s
+MILD_ERR_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES_401=The authenticating \
+ user %s does not have sufficient privileges to specify an alternate \
+ authorization ID
+MILD_ERR_SASLPLAIN_AUTHZID_NO_SUCH_ENTRY_402=The entry corresponding to \
+ authorization DN %s does not exist in the Directory Server
+MILD_ERR_SASLPLAIN_AUTHZID_CANNOT_GET_ENTRY_403=An error occurred while \
+ attempting to retrieve entry %s specified as the authorization ID:  %s
+MILD_ERR_SASLPLAIN_AUTHZID_NO_MAPPED_ENTRY_404=No entry corresponding to \
+ authorization ID %s was found in the server
+MILD_ERR_SASLPLAIN_AUTHZID_CANNOT_MAP_AUTHZID_405=An error occurred while \
+ attempting to map authorization ID %s to a user entry:  %s
+INFO_SASLEXTERNAL_DESCRIPTION_CERT_MAPPER_DN_406=Specifies the DN of the \
+ configuration entry that defines the certificate mapper to use when mapping a \
+ certificate to a user entry.  Changes to this configuration attribute will \
+ take effect immediately
+MILD_ERR_SASLEXTERNAL_NO_CERTIFICATE_MAPPER_DN_407=Configuration entry %s \
+ does not contain attribute ds-cfg-certificate-mapper-dn which is required to \
+ specify which certificate mapper should be used to map certificates to user \
+ entries
+MILD_ERR_SASLEXTERNAL_INVALID_CERTIFICATE_MAPPER_DN_408=Configuration entry \
+ %s contains a certificate mapper DN of %s, but no such certificate mapper is \
+ enabled for use in the Directory Server
+MILD_ERR_SASLEXTERNAL_CANNOT_GET_CERT_MAPPER_DN_409=An error occurred while \
+ attempting to retrieve the certificate mapper DN from configuration entry %s: \
+ %s
+INFO_SASLEXTERNAL_UPDATED_CERT_MAPPER_DN_410=Attribute \
+ ds-cfg-certificate-mapper-dn in configuration entry %s has been updated. \
+ Certificate mapper %s will now be used to map certificates to user entries
+INFO_SDTUACM_DESCRIPTION_SUBJECT_ATTR_411=Specifies the name of the attribute \
+ type in user entries that contains the subjects of the certificates held by \
+ that user.  Changes to this configuration attribute will take effect \
+ immediately
+SEVERE_ERR_SDTUACM_NO_SUBJECT_ATTR_412=Configuration entry %s does not \
+ contain required attribute %s, which is used to specify which attribute \
+ should contain the subjects of the certificates held by users
+SEVERE_ERR_SDTUACM_NO_SUCH_ATTR_413=Configuration entry %s indicates that \
+ certificate subjects should be held in attribute %s, but this attribute is \
+ not defined in the server schema
+SEVERE_ERR_SDTUACM_CANNOT_GET_SUBJECT_ATTR_414=An error occurred while \
+ attempting to determine which attribute type should be used to hold \
+ certificate subjects from configuration entry %s:  %s
+INFO_SDTUACM_DESCRIPTION_BASE_DN_415=Specifies the base DNs below which the \
+ searches to find matching user entries will be performed.  If no base DN(s) \
+ are provided, then the server will search below all public naming contexts. \
+ Changes to this configuration attribute will take effect immediately
+SEVERE_ERR_SDTUACM_CANNOT_GET_BASE_DN_416=An error occurred while attempting \
+ to determine the search base DN(s) from configuration entry %s:  %s
+SEVERE_ERR_SDTUACM_NO_PEER_CERTIFICATE_417=Could not map the provided \
+ certificate chain to a user entry because no peer certificate was available
+SEVERE_ERR_SDTUACM_PEER_CERT_NOT_X509_418=Could not map the provided \
+ certificate chain to a user because the peer certificate was not an X.509 \
+ certificate (peer certificate format was %s)
+SEVERE_ERR_SDTUACM_MULTIPLE_MATCHING_ENTRIES_419=The certificate with subject \
+ %s could not be mapped to exactly one user.  It maps to both %s and %s
+INFO_SATUACM_DESCRIPTION_ATTR_MAP_420=Specifies the name of the attribute \
+ type in user entries that defines the mapping between attributes in \
+ certificate subjects and attributes in user entries.  Values should be in the \
+ form 'certattr:userattr'.  Changes to this configuration attribute will take \
+ effect immediately
+SEVERE_ERR_SATUACM_NO_MAP_ATTR_421=Configuration entry %s does not contain \
+ required attribute %s, which is used to specify the mappings between \
+ attributes in certificate subjects and attributes in user entries
+SEVERE_ERR_SATUACM_INVALID_MAP_FORMAT_422=Configuration entry %s has value \
+ '%s' which violates the format required for attribute mappings.  The expected \
+ format is 'certattr:userattr'
+SEVERE_ERR_SATUACM_DUPLICATE_CERT_ATTR_423=Configuration entry %s contains \
+ multiple mappings for certificate attribute %s
+SEVERE_ERR_SATUACM_NO_SUCH_ATTR_424=Mapping %s in configuration entry %s \
+ references attribute %s which is not defined in the server schema
+SEVERE_ERR_SATUACM_DUPLICATE_USER_ATTR_425=Configuration entry %s contains \
+ multiple mappings for user attribute %s
+SEVERE_ERR_SATUACM_CANNOT_GET_ATTR_MAP_426=An error occurred while attempting \
+ to determine the set of attribute mappings from configuration entry %s:  %s
+INFO_SATUACM_DESCRIPTION_BASE_DN_427=Specifies the base DNs below which the \
+ searches to find matching user entries will be performed.  If no base DN(s) \
+ are provided, then the server will search below all public naming contexts. \
+ Changes to this configuration attribute will take effect immediately
+SEVERE_ERR_SATUACM_CANNOT_GET_BASE_DN_428=An error occurred while attempting \
+ to determine the search base DN(s) from configuration entry %s:  %s
+SEVERE_ERR_SATUACM_NO_PEER_CERTIFICATE_429=Could not map the provided \
+ certificate chain to a user entry because no peer certificate was available
+SEVERE_ERR_SATUACM_PEER_CERT_NOT_X509_430=Could not map the provided \
+ certificate chain to a user because the peer certificate was not an X.509 \
+ certificate (peer certificate format was %s)
+SEVERE_ERR_SATUACM_CANNOT_DECODE_SUBJECT_AS_DN_431=Unable to decode peer \
+ certificate subject %s as a DN:  %s
+SEVERE_ERR_SATUACM_NO_MAPPABLE_ATTRIBUTES_432=Peer certificate subject %s \
+ does not contain any attributes for which a mapping has been established
+SEVERE_ERR_SATUACM_MULTIPLE_MATCHING_ENTRIES_433=The certificate with subject \
+ %s could not be mapped to exactly one user.  It maps to both %s and %s
+INFO_FCM_DESCRIPTION_FINGERPRINT_ATTR_434=Specifies the name of the attribute \
+ type in user entries that contains the fingerprints of the certificates held \
+ by that user.  Changes to this configuration attribute will take effect \
+ immediately
+SEVERE_ERR_FCM_NO_FINGERPRINT_ATTR_435=Configuration entry %s does not \
+ contain required attribute %s, which is used to specify which attribute \
+ should contain the fingerprints of the certificates held by users
+SEVERE_ERR_FCM_NO_SUCH_ATTR_436=Configuration entry %s indicates that \
+ certificate fingerprints should be held in attribute %s, but this attribute \
+ is not defined in the server schema
+SEVERE_ERR_FCM_CANNOT_GET_FINGERPRINT_ATTR_437=An error occurred while \
+ attempting to determine which attribute type should be used to hold \
+ certificate fingerprints from configuration entry %s:  %s
+INFO_FCM_DESCRIPTION_FINGERPRINT_ALGORITHM_438=Specifies the name of the \
+ digest algorithm used for the certificate fingerprints.  The value should be \
+ either 'MD5' or 'SHA1'.  Changes to this configuration attribute will take \
+ effect immediately
+SEVERE_ERR_FCM_NO_FINGERPRINT_ALGORITHM_439=Configuration entry %s does not \
+ contain required attribute %s, which is used to specify which digest \
+ algorithm should be used to compute certificate fingerprints
+SEVERE_ERR_FCM_CANNOT_GET_FINGERPRINT_ALGORITHM_440=An error occurred while \
+ attempting to determine the digest algorithm from configuration entry %s:  %s
+INFO_FCM_DESCRIPTION_BASE_DN_441=Specifies the base DNs below which the \
+ searches to find matching user entries will be performed.  If no base DN(s) \
+ are provided, then the server will search below all public naming contexts. \
+ Changes to this configuration attribute will take effect immediately
+SEVERE_ERR_FCM_CANNOT_GET_BASE_DN_442=An error occurred while attempting to \
+ determine the search base DN(s) from configuration entry %s:  %s
+SEVERE_ERR_FCM_NO_PEER_CERTIFICATE_443=Could not map the provided certificate \
+ chain to a user entry because no peer certificate was available
+SEVERE_ERR_FCM_PEER_CERT_NOT_X509_444=Could not map the provided certificate \
+ chain to a user because the peer certificate was not an X.509 certificate \
+ (peer certificate format was %s)
+SEVERE_ERR_FCM_CANNOT_CALCULATE_FINGERPRINT_445=An error occurred while \
+ attempting to calculate the fingerprint for the peer certificate with subject \
+ %s:  %s
+SEVERE_ERR_FCM_MULTIPLE_MATCHING_ENTRIES_446=The certificate with fingerprint \
+ %s could not be mapped to exactly one user.  It maps to both %s and %s
+MILD_ERR_DYNAMICGROUP_CANNOT_DECODE_MEMBERURL_447=Unable to decode value "%s" \
+ in entry "%s" as an LDAP URL:  %s
+MILD_ERR_DYNAMICGROUP_NESTING_NOT_SUPPORTED_448=Dynamic groups do not support \
+ nested groups
+MILD_ERR_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED_449=Dynamic groups do \
+ not support explicitly altering their membership
+MILD_WARN_DYNAMICGROUP_NONEXISTENT_BASE_DN_450=Base DN %s specified in \
+ dynamic group %s does not exist in the server
+SEVERE_ERR_DYNAMICGROUP_INTERNAL_SEARCH_FAILED_451=An error occurred while \
+ attempting perform an internal search with base DN %s and filter %s to \
+ resolve the member list for dynamic group %s:  result code %s, error message \
+ %s
+SEVERE_ERR_DYNAMICGROUP_CANNOT_RETURN_ENTRY_452=The server encountered a \
+ timeout while attempting to add user %s to the member list for dynamic group \
+ %s
+INFO_PWDIFFERENCEVALIDATOR_DESCRIPTION_MIN_DIFFERENCE_453=Specifies the \
+ minimum difference that a password will be allowed to have.  A value of zero \
+ indicates that there is no minimum difference.  Changes to this configuration \
+ attribute will take effect immediately
+MILD_ERR_PWDIFFERENCEVALIDATOR_CANNOT_DETERMINE_MIN_DIFFERENCE_454=An error \
+ occurred while attempting to determine the minimum allowed password \
+ difference from the ds-cfg-minimum-password-difference attribute:  %s
+INFO_PWDIFFERENCEVALIDATOR_UPDATED_MIN_DIFFERENCE_455=The minimum password \
+ difference has been updated to %d
+MILD_ERR_PWDIFFERENCEVALIDATOR_TOO_SMALL_456=The provided password differs \
+ less than the minimum required difference of %d characters
+MILD_ERR_REPEATEDCHARS_VALIDATOR_TOO_MANY_CONSECUTIVE_457=The provided \
+ password contained too many instances of the same character appearing \
+ consecutively.  The maximum number of times the same character may appear \
+ consecutively in a password is %d
+MILD_ERR_UNIQUECHARS_VALIDATOR_NOT_ENOUGH_UNIQUE_CHARS_458=The provided \
+ password does not contain enough unique characters.  The minimum number of \
+ unique characters that may appear in a user password is %d
+MILD_ERR_SUBSCHEMASUBENTRY_VATTR_NOT_SEARCHABLE_459=The %s attribute is not \
+ searchable and should not be included in otherwise unindexed search filters
+MILD_ERR_DICTIONARY_VALIDATOR_PASSWORD_IN_DICTIONARY_460=The provided \
+ password was found in the server's dictionary
+MILD_ERR_DICTIONARY_VALIDATOR_NO_SUCH_FILE_461=The specified dictionary file \
+ %s does not exist
+MILD_ERR_DICTIONARY_VALIDATOR_CANNOT_READ_FILE_462=An error occurred while \
+ attempting to load the dictionary from file %s:  %s
+MILD_ERR_ATTRVALUE_VALIDATOR_PASSWORD_IN_ENTRY_463=The provided password was \
+ found in another attribute in the user entry
+MILD_ERR_CHARSET_VALIDATOR_ILLEGAL_CHARACTER_464=The provided password \
+ contained character '%s' which is not allowed for use in passwords
+MILD_ERR_CHARSET_VALIDATOR_TOO_FEW_CHARS_FROM_SET_465=The provided password \
+ did not contain enough characters from the character set '%s'.  The minimum \
+ number of characters from that set that must be present in user passwords is \
+ %d
+MILD_ERR_CHARSET_VALIDATOR_NO_COLON_466=The provided character set definition \
+ '%s' is invalid because it does not contain a colon to separate the minimum \
+ count from the character set
+MILD_ERR_CHARSET_VALIDATOR_NO_CHARS_467=The provided character set definition \
+ '%s' is invalid because the provided character set is empty
+MILD_ERR_CHARSET_VALIDATOR_INVALID_COUNT_468=The provided character set \
+ definition '%s' is invalid because the value before the colon must be an \
+ integer greater than zero
+MILD_ERR_CHARSET_VALIDATOR_DUPLICATE_CHAR_469=The provided character set \
+ definition '%s' is invalid because it contains character '%s' which has \
+ already been used
+MILD_ERR_VIRTUAL_STATIC_GROUP_MULTIPLE_TARGETS_470=The virtual static group \
+ defined in entry %s contains multiple target group DNs, but only one is \
+ allowed
+MILD_ERR_VIRTUAL_STATIC_GROUP_CANNOT_DECODE_TARGET_471=Unable to decode "%s" \
+ as the target DN for group %s:  %s
+MILD_ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_472=The virtual static group defined \
+ in entry %s does not contain a target group definition
+MILD_ERR_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED_473=Virtual static groups \
+ do not support nesting
+MILD_ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP_474=Target group %s referenced \
+ by virtual static group %s does not exist
+MILD_ERR_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED_475=Altering \
+ membership for virtual static group %s is not allowed
+MILD_ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL_476=Virtual static \
+ group %s references target group %s which is itself a virtual static group. \
+ One virtual static group is not allowed to reference another as its target \
+ group
+INFO_FSCACHE_UPDATED_MAX_ENTRIES_477=The number of entries that may be held \
+ in the entry cache has been updated to %d.  If this value has been reduced, \
+ it may take some time for entries to be purged so that the cache can reflect \
+ this new setting
+INFO_FSCACHE_UPDATED_LOCK_TIMEOUT_478=The lock timeout that will be used to \
+ determine the length of time that the cache should block while attempting to \
+ acquire a lock for an entry has been set to %d milliseconds
+INFO_FSCACHE_UPDATED_INCLUDE_FILTERS_479=The set of search filters that will \
+ control which entries may be included in the cache has been updated
+INFO_FSCACHE_UPDATED_EXCLUDE_FILTERS_480=The set of search filters that will \
+ control which entries should be be excluded from the cache has been updated
+INFO_FSCACHE_UPDATED_MAX_MEMORY_SIZE_481=The amount of space that may be used \
+ for the entry cache has been updated to %d bytes. If the previous amount has \
+ been reduced, it may take some time for entries to be purged so that the \
+ current cache spaceconsumption can reflect this new setting
+INFO_FSCACHE_UPDATED_TYPE_482=The entry cache type has been changed to %s
+INFO_FSCACHE_UPDATED_JE_MEMORY_PCT_483=The amount of memory that may be used \
+ for the entry cache Berkeley DB JE internal cache has been updated to %d \
+ percent of the total memory available to the JVM
+INFO_FSCACHE_UPDATED_JE_MEMORY_SIZE_484=The amount of JVM memory that may be \
+ used for the entry cache Berkeley DB JE internal cache has been updated to %d \
+ bytes
+INFO_FSCACHE_UPDATED_IS_PERSISTENT_485=The persistence state for the entry \
+ cache has been changed to %s
+SEVERE_ERR_FSCACHE_CANNOT_LOAD_PERSISTENT_DATA_486=An error occurred while \
+ trying to load persistent cache. Persistent cache will be flushed now
+SEVERE_ERR_FSCACHE_CANNOT_STORE_PERSISTENT_DATA_487=An error occurred while \
+ trying to store persistent cache. Persistent cache will be flushed now
+FATAL_ERR_FSCACHE_CANNOT_INITIALIZE_488=A fatal error occurred while trying \
+ to initialize file system entry cache. This cache will be disabled now
+SEVERE_ERR_FSCACHE_CANNOT_STORE_ENTRY_489=Unable to store new cache entry in \
+ the file system entry cache
+SEVERE_ERR_FSCACHE_CANNOT_RETRIEVE_ENTRY_490=Unable to retrieve an existing \
+ cache entry from the file system entry cache
+SEVERE_ERR_FSCACHE_CANNOT_SET_JE_MEMORY_PCT_491=Internal error occurred while \
+ trying to set the entry cache backend internal cache size as percentage. The \
+ previous or default value will be used instead
+SEVERE_ERR_FSCACHE_CANNOT_SET_JE_MEMORY_SIZE_492=Internal error occurred \
+ while trying to set the entry cache backend internal cache size in bytes. The \
+ previous or default value will be used instead
+FATAL_ERR_FSCACHE_HOMELESS_493=A fatal error occurred while trying to setup \
+ file system entry cache home. No suitable path can be found to host the cache \
+ home
+SEVERE_WARN_FSCACHE_SET_PERMISSIONS_FAILED_494=Unable to set file permissions \
+ for the file system entry cache backend database directory %s
+SEVERE_WARN_FSCACHE_OFFLINE_STATE_FAIL_495=%s backend current offline state \
+ does not match persistent cache last recorded offline state. All cached data \
+ for this backend is now discarded
+INFO_FSCACHE_RESTORE_PROGRESS_REPORT_496=Restored %d cache entries of %d \
+ total persistent cache entries found
+INFO_FSCACHE_SAVE_PROGRESS_REPORT_497=Made persistent %d cache entries of %d \
+ total cache entries found
+INFO_FSCACHE_INDEX_NOT_FOUND_498=No previous persistent cache state can be \
+ found. Starting with an empty cache
+SEVERE_ERR_FSCACHE_INDEX_IMPAIRED_499=The persistent cache index is \
+ inconsistent or damaged. Persistent cache will be flushed now
+MILD_ERR_ENTRYUUID_VATTR_NOT_SEARCHABLE_501=The %s attribute is not \
+ searchable and should not be included in otherwise unindexed search filters
+SEVERE_ERR_PWPSTATE_EXTOP_NO_PRIVILEGE_502=You do not have sufficient \
+ privileges to use the password policy state extended operation
+SEVERE_ERR_PWPSTATE_EXTOP_NO_REQUEST_VALUE_503=The provided password policy \
+ state extended request did not include a request value
+SEVERE_ERR_PWPSTATE_EXTOP_DECODE_FAILURE_504=An unexpected error occurred \
+ while attempting to decode password policy state extended request value:  %s
+SEVERE_ERR_PWPSTATE_EXTOP_MULTIPLE_ENTRIES_505=SEVERE ERROR:  Multiple \
+ entries were found with DN %s
+SEVERE_ERR_PWPSTATE_EXTOP_INVALID_OP_ENCODING_506=An unexpected error \
+ occurred while attempting to decode an operation from the password policy \
+ state extended request:  %s
+SEVERE_ERR_PWPSTATE_EXTOP_NO_DISABLED_VALUE_507=No value was provided for the \
+ password policy state operation intended to set the disabled state for the \
+ user.  Exactly one value (either 'true' or 'false') must be given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_DISABLED_VALUE_COUNT_508=Multiple values were \
+ provided for the password policy state operation intended to set the disabled \
+ state for the user.  Exactly one value (either 'true' or 'false') must be \
+ given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_DISABLED_VALUE_509=The value provided for the \
+ password policy state operation  intended to set the disabled state for the \
+ user was invalid.  The value must be either 'true' or 'false'
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_ACCT_EXP_VALUE_COUNT_510=Multiple values were \
+ provided for the password policy state operation intended to set the account \
+ expiration time for the user.  Exactly one value must be given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_ACCT_EXP_VALUE_511=The value %s provided for \
+ the password policy state operation used to set the account expiration time \
+ was invalid:  %s.  The value should be specifed using the generalized time \
+ format
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_PWCHANGETIME_VALUE_COUNT_512=Multiple values \
+ were provided for the password policy state operation intended to set the \
+ password changed time for the user.  Exactly one value must be given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_PWCHANGETIME_VALUE_513=The value %s provided \
+ for the password policy state operation used to set the password changed time \
+ was invalid:  %s.  The value should be specifed using the generalized time \
+ format
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_PWWARNEDTIME_VALUE_COUNT_514=Multiple values \
+ were provided for the password policy state operation intended to set the \
+ password warned time for the user.  Exactly one value must be given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_PWWARNEDTIME_VALUE_515=The value %s provided \
+ for the password policy state operation used to set the password warned time \
+ was invalid:  %s.  The value should be specifed using the generalized time \
+ format
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_ADD_FAILURE_TIME_COUNT_516=Multiple values were \
+ provided for the password policy state operation intended to add an \
+ authentication failure time for the user.  Exactly one value must be given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_AUTH_FAILURE_TIME_517=The value %s provided for \
+ the password policy state operation used to update the authentication failure \
+ times was invalid:  %s.  The value should be specifed using the generalized \
+ time format
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_LAST_LOGIN_TIME_COUNT_518=Multiple values were \
+ provided for the password policy state operation intended to set the last \
+ login time for the user.  Exactly one value must be given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_LAST_LOGIN_TIME_519=The value %s provided for \
+ the password policy state operation used to set the last login time was \
+ invalid:  %s.  The value should be specifed using the generalized time format
+SEVERE_ERR_PWPSTATE_EXTOP_NO_RESET_STATE_VALUE_520=No value was provided for \
+ the password policy state operation intended to set the reset state for the \
+ user.  Exactly one value (either 'true' or 'false') must be given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_RESET_STATE_VALUE_COUNT_521=Multiple values \
+ were provided for the password policy state operation intended to set the \
+ reset state for the user.  Exactly one value (either 'true' or 'false') must \
+ be given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_RESET_STATE_VALUE_522=The value provided for \
+ the password policy state operation  intended to set the reset state for the \
+ user was invalid.  The value must be either 'true' or 'false'
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_ADD_GRACE_LOGIN_TIME_COUNT_523=Multiple values \
+ were provided for the password policy state operation intended to add a grace \
+ login use time for the user.  Exactly one value must be given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME_524=The value %s provided for \
+ the password policy state operation used to update the grace login use times \
+ was invalid:  %s.  The value should be specifed using the generalized time \
+ format
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_REQUIRED_CHANGE_TIME_COUNT_525=Multiple values \
+ were provided for the password policy state operation intended to set the \
+ required change time for the user.  Exactly one value must be given
+SEVERE_ERR_PWPSTATE_EXTOP_BAD_REQUIRED_CHANGE_TIME_526=The value %s provided \
+ for the password policy state operation used to set the required change time \
+ was invalid:  %s.  The value should be specifed using the generalized time \
+ format
+SEVERE_ERR_PWPSTATE_EXTOP_UNKNOWN_OP_TYPE_527=The password policy state \
+ extended request included an operation with an invalid or unsupported \
+ operation type of %s
+MILD_WARN_EXTOP_PASSMOD_CANNOT_UPDATE_PWP_STATE_528=An error occurred while \
+ attempting to update the password policy state information for user %s as \
+ part of a password modify extended operation (result code='%s', error \
+ message='%s')
+MILD_ERR_SASLDIGESTMD5_INVALID_DIGEST_URI_529=The DIGEST-MD5 credentials \
+ provided by the client requested an invalid digest URI of %s.  The expected \
+ digest URI was %s
+MILD_ERR_EXTOP_PASSMOD_PW_IN_HISTORY_530=The provided new password was \
+ already contained in the password history
+MILD_ERR_SMTPALERTHANDLER_NO_SMTP_SERVERS_531=The Directory Server is not \
+ configured with any SMTP servers.  The SMTP alert handler cannot be used \
+ unless the Directory Server is configured with information about at least one \
+ SMTP server
+SEVERE_WARN_SMTPALERTHANDLER_ERROR_SENDING_MESSAGE_532=An error occurred when \
+ trying to send an e-mail message for administrative alert with type %s and \
+ message %s:  %s
+MILD_ERR_REGEXMAP_INVALID_MATCH_PATTERN_533=The provided match pattern "%s" \
+ could not be parsed as a regular expression:  %s
+MILD_ERR_REGEXMAP_UNKNOWN_ATTR_534=Configuration entry %s contains value %s \
+ for attribute ds-cfg-match-attribute but that is not a valid name or OID for \
+ any attribute type defined in the Directory Server schema
+MILD_ERR_REGEXMAP_MULTIPLE_MATCHING_ENTRIES_535=The processed ID string %s \
+ mapped to multiple users
+MILD_ERR_REGEXMAP_INEFFICIENT_SEARCH_536=The internal search based on \
+ processed ID string %s could not be processed efficiently:  %s.  Check the \
+ server configuration to ensure that all associated backends are properly \
+ configured for these types of searches
+MILD_ERR_REGEXMAP_SEARCH_FAILED_537=An internal failure occurred while \
+ attempting to resolve processed ID string %s to a user entry:  %s
+MILD_ERR_STATICGROUP_ADD_NESTED_GROUP_ALREADY_EXISTS_538=Cannot add group %s \
+ as a new nested group of static group %s because that group is already in the \
+ nested group list for the group
+MILD_ERR_STATICGROUP_REMOVE_NESTED_GROUP_NO_SUCH_GROUP_539=Cannot remove \
+ group %s as a nested group of static group %s because that group is not \
+ included in the nested group list for the group
+MILD_ERR_STATICGROUP_GROUP_INSTANCE_INVALID_540=Group instance with DN %s has \
+ been deleted and is no longer valid
diff --git a/opendj-sdk/opends/src/messages/messages/jeb.properties b/opendj-sdk/opends/src/messages/messages/jeb.properties
new file mode 100644
index 0000000..173b68f
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/jeb.properties
@@ -0,0 +1,321 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=JEB
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+MILD_ERR_JEB_INCORRECT_ROUTING_1=The backend does not contain that part of \
+ the Directory Information Tree pertaining to the entry '%s'
+SEVERE_ERR_JEB_OPEN_DATABASE_FAIL_2=The database could not be opened: %s
+SEVERE_ERR_JEB_OPEN_ENV_FAIL_3=The database environment could not be opened: \
+ %s
+SEVERE_ERR_JEB_HIGHEST_ID_FAIL_5=The database highest entry identifier could \
+ not be determined
+SEVERE_WARN_JEB_FUNCTION_NOT_SUPPORTED_6=The requested operation is not \
+ supported by this backend
+SEVERE_ERR_JEB_CREATE_FAIL_7=The backend database directory could not be \
+ created: %s
+SEVERE_ERR_JEB_REMOVE_FAIL_8=The backend database files could not be removed: \
+ %s
+SEVERE_ERR_JEB_DIRECTORY_INVALID_9=The backend database directory '%s' is not \
+ a valid directory
+SEVERE_ERR_JEB_MISSING_DN2ID_RECORD_10=The DN database does not contain a \
+ record for '%s'
+SEVERE_ERR_JEB_MISSING_ID2ENTRY_RECORD_11=The entry database does not contain \
+ a record for ID %s
+SEVERE_ERR_JEB_ENTRY_DATABASE_CORRUPT_12=The entry database does not contain \
+ a valid record for ID %s
+SEVERE_ERR_JEB_DATABASE_EXCEPTION_14=Database exception: %s
+INFO_CONFIG_DESCRIPTION_INDEX_ATTRIBUTE_16=The attribute type name of the \
+ attribute index
+INFO_CONFIG_DESCRIPTION_INDEX_TYPE_17=The kind of indexing to be enabled on \
+ an attribute index. Permitted values include "equality", "presence", \
+ "substring" and "ordering")
+INFO_CONFIG_DESCRIPTION_INDEX_ENTRY_LIMIT_18=A performance tuning parameter \
+ for attribute indexes. The entry limit of an attribute index, where a value \
+ of 0 means there is no threshold. When the number of entries matching an \
+ index value reaches the limit, the value is no longer maintained in the index
+INFO_CONFIG_DESCRIPTION_INDEX_SUBSTRING_LENGTH_25=The length of substrings in \
+ a substring index
+SEVERE_ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE_26=The attribute '%s' cannot \
+ have indexing of type '%s' because it does not have a corresponding matching \
+ rule
+MILD_ERR_JEB_UNCHECKED_EXCEPTION_28=Unchecked exception during database \
+ transaction
+NOTICE_JEB_CLEAN_DATABASE_START_29=Starting database cleaning on %d log \
+ file(s) in '%s'
+NOTICE_JEB_CLEAN_DATABASE_MARKED_30=Marked %d log file(s) for cleaning
+NOTICE_JEB_CLEAN_DATABASE_FINISH_31=Finished database cleaning; now %d log \
+ file(s) remaining
+NOTICE_JEB_SUBTREE_DELETE_SIZE_LIMIT_EXCEEDED_32=Exceeded the administrative \
+ limit on the number of entries that may be deleted in a subtree delete \
+ operation. The number of entries actually deleted was %d. The operation may \
+ be retried until all entries in the subtree have been deleted
+NOTICE_JEB_DELETED_ENTRY_COUNT_33=The number of entries deleted was %d
+MILD_ERR_JEB_DUPLICATE_CONFIG_ENTRY_36=The configuration entry '%s' will be \
+ ignored. Only one configuration entry with object class '%s' is allowed
+MILD_ERR_JEB_CONFIG_ENTRY_NOT_RECOGNIZED_37=The configuration entry '%s' will \
+ be ignored because it is not recognized
+MILD_ERR_JEB_INDEX_ATTRIBUTE_TYPE_NOT_FOUND_38=The index configuration entry \
+ '%s' will be ignored because it specifies an unknown attribute type '%s'
+MILD_ERR_JEB_DUPLICATE_INDEX_CONFIG_39=The index configuration entry '%s' \
+ will be ignored because it specifies the attribute type '%s', which has \
+ already been defined in another index configuration entry
+SEVERE_ERR_JEB_IO_ERROR_40=I/O error during backend operation: %s
+NOTICE_JEB_BACKEND_STARTED_42=The database backend %s containing %d entries \
+ has started
+MILD_ERR_JEB_IMPORT_PARENT_NOT_FOUND_43=The parent entry '%s' does not exist
+SEVERE_WARN_JEB_IMPORT_ENTRY_EXISTS_44=The entry exists and the import \
+ options do not allow it to be replaced
+MILD_ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED_45=There is no index configured \
+ for attribute type '%s'
+MILD_ERR_JEB_SEARCH_NO_SUCH_OBJECT_46=The search base entry '%s' does not \
+ exist
+MILD_ERR_JEB_ADD_NO_SUCH_OBJECT_47=The entry '%s' cannot be added because its \
+ parent entry does not exist
+MILD_ERR_JEB_DELETE_NO_SUCH_OBJECT_48=The entry '%s' cannot be removed \
+ because it does not exist
+MILD_ERR_JEB_MODIFY_NO_SUCH_OBJECT_49=The entry '%s' cannot be modified \
+ because it does not exist
+MILD_ERR_JEB_MODIFYDN_NO_SUCH_OBJECT_50=The entry '%s' cannot be renamed \
+ because it does not exist
+MILD_ERR_JEB_ADD_ENTRY_ALREADY_EXISTS_51=The entry '%s' cannot be added \
+ because an entry with that name already exists
+MILD_ERR_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF_52=The entry '%s' cannot be \
+ removed because it has subordinate entries
+MILD_ERR_JEB_MODIFYDN_ALREADY_EXISTS_53=The entry cannot be renamed to '%s' \
+ because an entry with that name already exists
+MILD_ERR_JEB_NEW_SUPERIOR_NO_SUCH_OBJECT_54=The entry cannot be moved because \
+ the new parent entry '%s' does not exist
+NOTICE_JEB_CACHE_SIZE_AFTER_PRELOAD_61=The database cache is %d MB after \
+ pre-loading
+SEVERE_ERR_JEB_BACKUP_CANNOT_GET_MAC_63=An error occurred while attempting to \
+ obtain the %s MAC provider to create the signed hash for the backup:  %s
+SEVERE_ERR_JEB_BACKUP_CANNOT_GET_DIGEST_64=An error occurred while attempting \
+ to obtain the %s message digest to create the hash for the backup:  %s
+SEVERE_ERR_JEB_BACKUP_CANNOT_CREATE_ARCHIVE_FILE_65=An error occurred while \
+ trying to create the database archive file %s in directory %s:  %s
+SEVERE_ERR_JEB_BACKUP_CANNOT_GET_CIPHER_66=An error occurred while attempting \
+ to obtain the %s cipher to use to encrypt the backup:  %s
+SEVERE_ERR_JEB_BACKUP_ZIP_COMMENT_67=%s backup %s of backend %s
+SEVERE_ERR_JEB_BACKUP_CANNOT_LIST_LOG_FILES_68=An error occurred while \
+ attempting to obtain a list of the files in directory %s to include in the \
+ database backup:  %s
+SEVERE_ERR_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE_69=An error occurred while \
+ attempting to back up database file %s:  %s
+SEVERE_ERR_JEB_BACKUP_CANNOT_CLOSE_ZIP_STREAM_70=An error occurred while \
+ trying to close the database archive file %s in directory %s:  %s
+SEVERE_ERR_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR_71=An error occurred \
+ while attempting to update the backup descriptor file %s with information \
+ about the database backup:  %s
+SEVERE_ERR_JEB_BACKUP_UNSIGNED_HASH_ERROR_72=The computed hash of backup %s \
+ is different to the value computed at time of backup
+SEVERE_ERR_JEB_BACKUP_SIGNED_HASH_ERROR_73=The computed signed hash of backup \
+ %s is different to the value computed at time of backup
+SEVERE_ERR_JEB_INCR_BACKUP_REQUIRES_FULL_74=A full backup must be taken \
+ before an incremental backup can be taken
+SEVERE_ERR_JEB_CANNOT_RENAME_RESTORE_DIRECTORY_75=The directory %s, \
+ containing the files restored from backup, could not be renamed to the \
+ backend directory %s
+SEVERE_ERR_JEB_INCR_BACKUP_FROM_WRONG_BASE_76=One of the following base \
+ backup IDs must be specified for the incremental backup: %s
+SEVERE_ERR_JEB_CANNOT_CREATE_BACKUP_TAG_FILE_77=The backup tag file %s could \
+ not be created in %s
+SEVERE_ERR_JEB_BACKUP_CANNOT_RESTORE_78=An error occurred while attempting to \
+ restore the files from backup %s: %s
+SEVERE_ERR_JEB_BACKUP_MISSING_BACKUPID_79=The information for backup %s could \
+ not be found in the backup directory %s
+INFO_JEB_BACKUP_FILE_UNCHANGED_82=Not changed: %s
+INFO_JEB_BACKUP_CLEANER_ACTIVITY_83=Including %s additional log file(s) due \
+ to cleaner activity
+INFO_JEB_BACKUP_VERIFY_FILE_84=Verifying: %s
+INFO_JEB_BACKUP_RESTORED_FILE_85=Restored: %s (size %d)
+INFO_JEB_BACKUP_ARCHIVED_FILE_86=Archived: %s
+INFO_JEB_EXPORT_FINAL_STATUS_87=Exported %d entries and skipped %d in %d \
+ seconds (average rate %.1f/sec)
+INFO_JEB_EXPORT_PROGRESS_REPORT_88=Exported %d records and skipped %d (recent \
+ rate %.1f/sec)
+INFO_JEB_IMPORT_THREAD_COUNT_89=Starting import (using %d threads)
+INFO_JEB_IMPORT_BUFFER_SIZE_90=Buffer size per thread = %,d
+INFO_JEB_IMPORT_LDIF_PROCESSING_TIME_91=LDIF processing took %d seconds
+INFO_JEB_IMPORT_INDEX_PROCESSING_TIME_92=Index processing took %d seconds
+INFO_JEB_IMPORT_CLOSING_DATABASE_93=Flushing data to disk
+INFO_JEB_IMPORT_FINAL_STATUS_94=Processed %d entries, imported %d, skipped \
+ %d, rejected %d and migrated %d in %d seconds (average rate %.1f/sec)
+INFO_JEB_IMPORT_ENTRY_LIMIT_EXCEEDED_COUNT_95=Number of index values that \
+ exceeded the entry limit: %d
+INFO_JEB_IMPORT_PROGRESS_REPORT_96=Processed %d entries, skipped %d, rejected \
+ %d, and migrated %d (recent rate %.1f/sec)
+INFO_JEB_IMPORT_CACHE_AND_MEMORY_REPORT_97=Free memory = %d MB, Cache miss \
+ rate = %.1f/entry
+INFO_JEB_INDEX_MERGE_NO_DATA_98=There is no data to be loaded into the %s \
+ index
+INFO_JEB_INDEX_MERGE_START_99=Starting %d-way merge to load the %s index
+INFO_JEB_INDEX_MERGE_COMPLETE_100=The %s index has been loaded
+INFO_JEB_VERIFY_CLEAN_FINAL_STATUS_101=Checked %d records and found %d \
+ error(s) in %d seconds (average rate %.1f/sec)
+INFO_JEB_VERIFY_MULTIPLE_REFERENCE_COUNT_102=Number of records referencing \
+ more than one entry: %d
+INFO_JEB_VERIFY_ENTRY_LIMIT_EXCEEDED_COUNT_103=Number of records that exceed \
+ the entry limit: %d
+INFO_JEB_VERIFY_AVERAGE_REFERENCE_COUNT_104=Average number of entries \
+ referenced is %.2f/record
+INFO_JEB_VERIFY_MAX_REFERENCE_COUNT_105=Maximum number of entries referenced \
+ by any record is %d
+INFO_JEB_VERIFY_FINAL_STATUS_106=Checked %d entries and found %d error(s) in \
+ %d seconds (average rate %.1f/sec)
+INFO_JEB_VERIFY_ENTRY_LIMIT_STATS_HEADER_107=Statistics for records that have \
+ exceeded the entry limit:
+INFO_JEB_VERIFY_ENTRY_LIMIT_STATS_ROW_108=  File %s has %d such record(s) \
+ min=%d max=%d median=%d
+INFO_JEB_VERIFY_PROGRESS_REPORT_109=Processed %d records and found %d \
+ error(s) (recent rate %.1f/sec)
+INFO_JEB_VERIFY_CACHE_AND_MEMORY_REPORT_110=Free memory = %d MB, Cache miss \
+ rate = %.1f/record
+MILD_ERR_JEB_INVALID_PAGED_RESULTS_COOKIE_111=The following paged results \
+ control cookie value was not recognized: %s
+INFO_JEB_REFERRAL_RESULT_MESSAGE_112=A referral entry %s indicates that the \
+ operation must be processed at a different server
+INFO_JEB_IMPORT_ENVIRONMENT_CONFIG_119=Database environment properties: %s
+INFO_JEB_IMPORT_BEGINNING_INTERMEDIATE_MERGE_121=Ending import pass %d \
+ because the pass size has been reached.  Beginning the intermediate index \
+ merge
+INFO_JEB_IMPORT_BEGINNING_FINAL_MERGE_122=Beginning final index merge
+INFO_JEB_IMPORT_RESUMING_LDIF_PROCESSING_123=Intermediate index merge \
+ processing complete (index processing time %d seconds).  Resuming LDIF \
+ processing
+INFO_JEB_IMPORT_FINAL_MERGE_COMPLETED_124=Final index merge complete \
+ (processing time %d seconds)
+SEVERE_ERR_JEB_INCOMPATIBLE_ENTRY_VERSION_126=Entry record with ID %s is not \
+ compatible with this version of the backend database. Entry version: %x
+INFO_JEB_LOOKTHROUGH_LIMIT_EXCEEDED_127=This search operation has checked the \
+ maximum of %d entries for matches
+SEVERE_WARN_JEB_SET_PERMISSIONS_FAILED_128=An error occurred while setting \
+ file permissions for the backend database directory %s: %s
+SEVERE_WARN_JEB_GET_ENTRY_COUNT_FAILED_129=Unable to determine the total \
+ number of entries in the container: %s
+INFO_JEB_CONFIG_ATTR_REQUIRES_RESTART_130=The change to the %s attribute will \
+ not take effect until the backend is restarted
+INFO_JEB_REBUILD_PROGRESS_REPORT_131=%.1f%% Completed. Processed %d/%d \
+ records. (recent rate %.1f/sec)
+INFO_JEB_REBUILD_CACHE_AND_MEMORY_REPORT_132=Free memory = %d MB, Cache miss \
+ rate = %.1f/record
+INFO_JEB_REBUILD_FINAL_STATUS_133=Rebuild complete. Processed %d records in \
+ %d seconds (average rate %.1f/sec)
+SEVERE_ERR_JEB_REBUILD_INDEX_FAILED_134=An error occurred while rebuilding \
+ index %s: %s
+MILD_ERR_JEB_REBUILD_INSERT_ENTRY_FAILED_135=An error occurred while \
+ inserting entry into the %s database/index: %s
+SEVERE_ERR_JEB_REBUILD_INDEX_CONFLICT_136=Another rebuild of index %s is \
+ already in progress
+INFO_JEB_REBUILD_START_137=Rebuild of index(es) %s started with %d total \
+ records to process
+SEVERE_ERR_JEB_REBUILD_BACKEND_ONLINE_138=Rebuilding system index(es) must be \
+ done with the backend containing the base DN disabled
+SEVERE_ERR_ENTRYIDSORTER_CANNOT_EXAMINE_ENTRY_139=Unable to examine the entry \
+ with ID %s for sorting purposes:  %s
+MILD_ERR_JEB_SEARCH_CANNOT_SORT_UNINDEXED_140=The search results cannot be \
+ sorted because the given search request is not indexed
+MILD_ERR_ENTRYIDSORTER_NEGATIVE_START_POS_141=Unable to process the virtual \
+ list view request because the target start position was before the beginning \
+ of the result set
+MILD_ERR_ENTRYIDSORTER_OFFSET_TOO_LARGE_142=Unable to process the virtual \
+ list view request because the target offset %d was greater than the total \
+ number of results in the list (%d)
+MILD_ERR_ENTRYIDSORTER_TARGET_VALUE_NOT_FOUND_143=Unable to prcess the \
+ virtual list view request because no entry was found in the result set with a \
+ sort value greater than or equal to the provided assertion value
+MILD_ERR_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV_144=The requested search \
+ operation included both the simple paged results control and the virtual list \
+ view control.  These controls are mutually exclusive and cannot be used \
+ together
+MILD_ERR_JEB_SEARCH_UNINDEXED_INSUFFICIENT_PRIVILEGES_145=You do not have \
+ sufficient privileges to perform an unindexed search
+SEVERE_WARN_JEB_UNABLE_SET_PERMISSIONS_146=This platform does not support \
+ setting file permissions %s to the database directory %s
+NOTICE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD_148=Some index keys have \
+ already exceeded the previous index entry limit in index %s. This index must \
+ be rebuilt before it can use the new limit
+NOTICE_JEB_INDEX_ADD_REQUIRES_REBUILD_150=Due to changes in the \
+ configuration, index %s is currently operating in a degraded state and must \
+ be rebuilt before it can used
+SEVERE_ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD_151=An error occurred while \
+ reading from index %s. The index seems to be corrupt and is now operating in \
+ a degraded state. The index must be rebuilt before it can return to normal \
+ operation
+SEVERE_ERR_JEB_IMPORT_BACKEND_ONLINE_152=The backend must be disabled before \
+ the import processcan start
+SEVERE_ERR_JEB_IMPORT_THREAD_EXCEPTION_153=An error occurred in import thread \
+ %s: %s. The thread can not continue
+SEVERE_ERR_JEB_IMPORT_NO_WORKER_THREADS_154=There are no more import worker \
+ threads to process the imported entries
+SEVERE_ERR_JEB_IMPORT_CREATE_TMPDIR_ERROR_155=Unable to create the temporary \
+ directory %s
+SEVERE_ERR_JEB_INVALID_LOGGING_LEVEL_156=The database logging level string \
+ '%s' provided for configuration entry '%s' is invalid.  The value must be one \
+ of OFF, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, or ALL.  Note \
+ that these values are case sensitive
+INFO_JEB_IMPORT_MIGRATION_START_157=Migrating %s entries for base DN %s
+INFO_JEB_IMPORT_LDIF_START_158=Processing LDIF
+INFO_JEB_IMPORT_LDIF_END_159=End of LDIF reached
+SEVERE_ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR_160=Sort attribute %s for VLV \
+ index %s is not defined in the server schema
+SEVERE_ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER_161=An error occured while parsing \
+ the search filter %s defined for VLV index %s: %s
+MILD_ERR_JEB_VLV_INDEX_NOT_CONFIGURED_162=There is no VLV index configured \
+ with name '%s'
+MILD_ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN_163=A plugin caused the \
+ modify DN operation to be aborted while moving and/or renaming an entry from \
+ %s to %s
+MILD_ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_SCHEMA_ERROR_164=A plugin caused \
+ the modify DN operation to be aborted while moving and/or renaming an entry \
+ from %s to %s because the change to that entry violated the server schema \
+ configuration:  %s
diff --git a/opendj-sdk/opends/src/messages/messages/log.properties b/opendj-sdk/opends/src/messages/messages/log.properties
new file mode 100644
index 0000000..29c8a98
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/log.properties
@@ -0,0 +1,70 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=LOG
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+SEVERE_ERR_LOGGER_ERROR_WRITING_RECORD_1=Error occurred while writing log \
+ record for logger %s: %s. Any further write errors will be ignored
+SEVERE_ERR_LOGGER_ERROR_OPENING_FILE_2=Error occurred while opening log file \
+ %s for logger %s: %s
+SEVERE_ERR_LOGGER_ERROR_CLOSING_FILE_3=Error occurred while closing log file \
+ for logger %s: %s
+SEVERE_ERR_LOGGER_ERROR_FLUSHING_BUFFER_4=Error occurred while flushing \
+ writer buffer for logger %s: %s
+MILD_WARN_ERROR_LOGGER_INVALID_SEVERITY_5=Invalid error log severity "%s"
+MILD_WARN_ERROR_LOGGER_INVALID_CATEGORY_6=Invalid error log category "%s"
+MILD_WARN_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY_7=Invalid override of \
+ severity level "%s"
+SEVERE_WARN_LOGGER_SET_PERMISSION_FAILED_8=Error occurred while setting file \
+ permissions for the log file %s: %s
+MILD_WARN_LOGGER_UNABLE_SET_PERMISSIONS_9=This platform does not support \
+ setting file permissions %s to the log file %s
diff --git a/opendj-sdk/opends/src/messages/messages/plugin.properties b/opendj-sdk/opends/src/messages/messages/plugin.properties
new file mode 100644
index 0000000..3c2e994
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/plugin.properties
@@ -0,0 +1,310 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=PLUGIN
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+SEVERE_ERR_PLUGIN_NULL_CONFIG_ENTRY_1=Unable to initialize an instance of the \
+ plugin defined in class %s because the provided configuration entry was null
+INFO_PLUGIN_DESCRIPTION_SHUTDOWN_PASSWORD_2=Specifies an optional encoded \
+ password that will be required in order to be able to stop the Directory \
+ Server.  If this is not provided, then no password will be required (although \
+ it will still be necessary to authenticate to the server in order to be able \
+ to add necessary task entry).  Changes to this password will take effect \
+ immediately
+SEVERE_ERR_PLUGIN_ADLIST_NO_PLUGIN_TYPES_3=The LDAP attribute description \
+ list plugin instance defined in configuration entry %s does not list any \
+ plugin types.  This plugin must be configured to operate as a pre-parse \
+ search plugin
+SEVERE_ERR_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE_4=The LDAP attribute description \
+ list plugin instance defined in configuration entry %s lists an invalid \
+ plugin type %s.  This plugin may only be used as a pre-parse search plugin
+SEVERE_ERR_PLUGIN_PROFILER_NO_PLUGIN_TYPES_5=The Directory Server profiler \
+ plugin instance defined in configuration entry %s does not list any plugin \
+ types.  This plugin must be configured to operate as a startup plugin
+SEVERE_ERR_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE_6=The Directory Server \
+ profiler plugin instance defined in configuration entry %s lists an invalid \
+ plugin type %s.  This plugin may only be used as a startup plugin
+INFO_PLUGIN_PROFILER_DESCRIPTION_PROFILE_DIR_7=Specifies the path to the \
+ directory into which profile information will be written.  The directory must \
+ exist and the Directory Server must have permission to create new files in \
+ it.  Changes to this configuration attribute will take effect immediately
+SEVERE_WARN_PLUGIN_PROFILER_CANNOT_DETERMINE_PROFILE_DIR_8=An unexpected \
+ error occurred while attempting to determine the value of the \
+ ds-cfg-profile-directory attribute in the %s entry:  %s.  The default profile \
+ directory of %s will be used
+SEVERE_ERR_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA_9=An unexpected error \
+ occurred when the profiler plugin defined in configuration entry %s attempted \
+ to write the information captured to output file %s:  %s
+INFO_PLUGIN_PROFILER_DESCRIPTION_AUTOSTART_10=Indicates whether the profiler \
+ plugin should start collecting data automatically when the Directory Server \
+ is started.  This will only be read when the server is started, and any \
+ changes will take effect on the next restart
+SEVERE_WARN_PLUGIN_PROFILER_CANNOT_DETERMINE_AUTOSTART_11=An unexpected error \
+ occurred while attempting to determine the value of the \
+ ds-cfg-enable-profiling-on-startup attribute in the %s entry:  %s.  Profiling \
+ information will not automatically be captured on startup and must be \
+ manually enabled
+INFO_PLUGIN_PROFILER_DESCRIPTION_INTERVAL_12=Specifies the sample interval \
+ that should be used when capturing profiling information in the server. \
+ Changes to this configuration attribute will take effect the next time the \
+ profiler is started
+SEVERE_WARN_PLUGIN_PROFILER_CANNOT_DETERMINE_INTERVAL_13=An unexpected error \
+ occurred while attempting to determine the value of the \
+ ds-cfg-profile-sample-intervalattribute in the %s entry:  %s.  The default \
+ sample interval of %d milliseconds will be used
+INFO_PLUGIN_PROFILER_DESCRIPTION_STATE_14=Specifies the current state for the \
+ profiler.  It will be either "enabled" (which indicates that the profiler \
+ thread is actively collecting data) or "disabled".  This is a read-only \
+ attribute
+INFO_PLUGIN_PROFILER_DESCRIPTION_ACTION_15=Specifies the action that should \
+ be taken by the profiler.  A value of "start" will cause the profiler thread \
+ to start collecting data if it is not already active.  A value of "stop" will \
+ cause the profiler thread to stop collecting data and write it do disk, and a \
+ value of "cancel" will cause the profiler thread to stop collecting data and \
+ discard anything that has been captured.  These operations will occur \
+ immediately
+SEVERE_WARN_PLUGIN_PROFILER_INVALID_PROFILE_DIR_16=The profile directory %s \
+ specified in attribute ds-cfg-profile-directory of configuration entry %s is \
+ invalid because the specified path does not exist or is not a directory
+SEVERE_WARN_PLUGIN_PROFILER_CANNOT_DETERMINE_ACTION_17=An unexpected error \
+ occurred while attempting to determine the value of the ds-cfg-profile-action \
+ attribute in the %s entry:  %s.  No action will be taken
+INFO_PLUGIN_PROFILER_UPDATED_INTERVAL_18=The sample interval for the profiler \
+ plugin defined in configuration entry %s has been updated to %d milliseconds
+SEVERE_ERR_PLUGIN_PROFILER_CANNOT_UPDATE_INTERVAL_19=An unexpected error \
+ occurred while attempting to update the sample interval for the profiler \
+ plugin defined in configuration entry %s:  %s
+INFO_PLUGIN_PROFILER_UPDATED_DIRECTORY_20=The profile directory for the \
+ profiler plugin defined in configuration entry %s has been changed to %s
+SEVERE_ERR_PLUGIN_PROFILER_CANNOT_UPDATE_DIRECTORY_21=An unexpected error \
+ occurred while attempting to update the profile directory for the profiler \
+ plugin defined in configuration entry %s:  %s
+INFO_PLUGIN_PROFILER_STARTED_PROFILING_22=The profiler plugin defined in \
+ configuration entry %s has been activated and has started capturing data
+INFO_PLUGIN_PROFILER_ALREADY_PROFILING_23=The profiler plugin defined in \
+ configuration entry %s is already active, and therefore the request to start \
+ profiling has been ignored
+INFO_PLUGIN_PROFILER_NOT_RUNNING_24=The profiler plugin defined in \
+ configuration entry %s received a request to stop capturing data but it was \
+ not active so no action has been taken
+INFO_PLUGIN_PROFILER_STOPPED_PROFILING_25=The profiler plugin defined in \
+ configuration entry %s has been stopped and is no longer capturing data
+INFO_PLUGIN_PROFILER_WROTE_PROFILE_DATA_26=The data collected by the profiler \
+ plugin defined in configuration entry %s has been written to %s
+MILD_ERR_PLUGIN_PROFILER_UNKNOWN_ACTION_27=The profiler plugin defined in \
+ configuration entry %s has been requested to perform an action %s that is not \
+ recognized by the server.  No action will be taken
+INFO_PLUGIN_PROFILER_SKIPPING_ACTION_28=A profiler action %s was requested \
+ for the profiler plugin defined in configuration entry %s, but one or more \
+ problems were encountered with the plugin configuration and therefore the \
+ requested action will be skipped
+SEVERE_ERR_PLUGIN_PROFILER_CANNOT_PERFORM_ACTION_29=An unexpected error \
+ occurred while attempting to process the requested action for the profiler \
+ plugin defined in configuration entry %s:  %s
+FATAL_ERR_PLUGIN_STARTUP_PLUGIN_EXCEPTION_30=The startup plugin defined in \
+ configuration entry %s threw an exception when it was invoked during the \
+ Directory Server startup process:  %s.  The server startup process has been \
+ aborted
+FATAL_ERR_PLUGIN_STARTUP_PLUGIN_RETURNED_NULL_31=The startup plugin defined \
+ in configuration entry %s returned a null value when it was invoked during \
+ the Directory Server startup process.  This is an illegal return value, and \
+ the server startup process has been aborted
+SEVERE_ERR_PLUGIN_STARTUP_PLUGIN_FAIL_CONTINUE_32=The startup plugin defined \
+ in configuration entry %s encountered an error when it was invoked during the \
+ Directory Server startup process:  %s (error ID %d).  The startup process \
+ will continue, but this failure may impact the operation of the server
+FATAL_ERR_PLUGIN_STARTUP_PLUGIN_FAIL_ABORT_33=The startup plugin defined in \
+ configuration entry %s encountered an error when it was invoked during the \
+ Directory Server startup process:  %s (error ID %d).  The server startup \
+ process has been aborted
+SEVERE_ERR_PLUGIN_SHUTDOWN_PLUGIN_EXCEPTION_34=The shutdown plugin defined in \
+ configuration entry %s threw an exception when it was invoked during the \
+ Directory Server shutdown process:  %s
+SEVERE_ERR_PLUGIN_POST_CONNECT_PLUGIN_EXCEPTION_35=The post-connect plugin \
+ defined in configuration entry %s threw an exception when it was invoked for \
+ connection %d from %s:  %s.  The connection will be terminated
+SEVERE_ERR_PLUGIN_POST_CONNECT_PLUGIN_RETURNED_NULL_36=The post-connect \
+ plugin defined in configuration entry %s returned null when invoked for \
+ connection %d from %s.  This is an illegal response, and the connection will \
+ be terminated
+SEVERE_ERR_PLUGIN_POST_DISCONNECT_PLUGIN_EXCEPTION_37=The post-disconnect \
+ plugin defined in configuration entry %s threw an exception when it was \
+ invoked for connection %d from %s:  %s
+SEVERE_ERR_PLUGIN_POST_DISCONNECT_PLUGIN_RETURNED_NULL_38=The post-disconnect \
+ plugin defined in configuration entry %s returned null when invoked for \
+ connection %d from %s.  This is an illegal response
+SEVERE_ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION_39=The pre-parse %s plugin \
+ defined in configuration entry %s threw an exception when it was invoked for \
+ connection %d operation %d:  %s.  Processing on this operation will be \
+ terminated
+SEVERE_ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL_40=The pre-parse %s plugin \
+ defined in configuration entry %s returned null when invoked for connection \
+ %d operation %s.  This is an illegal response, and processing on this \
+ operation will be terminated
+SEVERE_ERR_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION_41=The pre-operation %s \
+ plugin defined in configuration entry %s threw an exception when it was \
+ invoked for connection %d operation %d:  %s.  Processing on this operation \
+ will be terminated
+SEVERE_ERR_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL_42=The pre-operation %s \
+ plugin defined in configuration entry %s returned null when invoked for \
+ connection %d operation %d.  This is an illegal response, and processing on \
+ this operation will be terminated
+SEVERE_ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION_43=The post-operation %s \
+ plugin defined in configuration entry %s threw an exception when it was \
+ invoked for connection %d operation %d:  %s.  Processing on this operation \
+ will be terminated
+SEVERE_ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL_44=The post-operation \
+ %s plugin defined in configuration entry %s returned null when invoked for \
+ connection %d operation %d.  This is an illegal response, and processing on \
+ this operation will be terminated
+SEVERE_ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION_45=The post-response %s \
+ plugin defined in configuration entry %s threw an exception when it was \
+ invoked for connection %d operation %d:  %s.  Processing on this operation \
+ will be terminated
+SEVERE_ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL_46=The post-response %s \
+ plugin defined in configuration entry %s returned null when invoked for \
+ connection %d operation %d.  This is an illegal response, and processing on \
+ this operation will be terminated
+SEVERE_ERR_PLUGIN_SEARCH_ENTRY_PLUGIN_EXCEPTION_47=The search result entry \
+ plugin defined in configuration entry %s threw an exception when it was \
+ invoked for connection %d operation %d with entry %s:  %s.  Processing on \
+ this search operation will be terminated
+SEVERE_ERR_PLUGIN_SEARCH_ENTRY_PLUGIN_RETURNED_NULL_48=The search result \
+ entry plugin defined in configuration entry %s returned null when invoked for \
+ connection %d operation %d with entry %s.  This is an illegal response, and \
+ processing on this search operation will be terminated
+SEVERE_ERR_PLUGIN_SEARCH_REFERENCE_PLUGIN_EXCEPTION_49=The search result \
+ reference plugin defined in configuration entry %s threw an exception when it \
+ was invoked for connection %d operation %d with referral URL(s) %s:  %s. \
+ Processing on this search operation will be terminated
+SEVERE_ERR_PLUGIN_SEARCH_REFERENCE_PLUGIN_RETURNED_NULL_50=The search result \
+ reference plugin defined in configuration entry %s returned null when invoked \
+ for connection %d operation %d with referral URL(s) %s.  This is an illegal \
+ response, and processing on this search operation will be terminated
+SEVERE_ERR_PLUGIN_LASTMOD_INVALID_PLUGIN_TYPE_51=An attempt was made to \
+ register the LastMod plugin to be invoked as a %s plugin.  This plugin type \
+ is not allowed for this plugin
+INFO_PROFILEVIEWER_DESCRIPTION_FILENAMES_52=Specifies the path to a profile \
+ data file.  This  argument may be provided more than once to analyze data \
+ from multiple data files
+INFO_PROFILEVIEWER_DESCRIPTION_USE_GUI_53=Indicates whether to view the \
+ profile information in GUI mode or to write the resulting data to standard \
+ output
+INFO_PROFILEVIEWER_DESCRIPTION_USAGE_54=Displays this usage information
+SEVERE_ERR_PROFILEVIEWER_CANNOT_INITIALIZE_ARGS_55=An unexpected error \
+ occurred while attempting to initialize the command-line arguments:  %s
+SEVERE_ERR_PROFILEVIEWER_ERROR_PARSING_ARGS_56=An error occurred while \
+ parsing the command-line arguments:  %s
+SEVERE_ERR_PROFILEVIEWER_CANNOT_PROCESS_DATA_FILE_57=An error occurred while \
+ trying to process the profile data in file %s:  %s
+SEVERE_ERR_PLUGIN_LDIF_IMPORT_PLUGIN_EXCEPTION_58=The LDIF import plugin \
+ defined in configuration entry %s threw an exception when it was invoked on \
+ entry %s:  %s
+SEVERE_ERR_PLUGIN_LDIF_IMPORT_PLUGIN_RETURNED_NULL_59=The LDIF import plugin \
+ defined in configuration entry %s returned null when invoked on entry %s. \
+ This is an illegal response
+SEVERE_ERR_PLUGIN_LDIF_EXPORT_PLUGIN_EXCEPTION_60=The LDIF export plugin \
+ defined in configuration entry %s threw an exception when it was invoked on \
+ entry %s:  %s
+SEVERE_ERR_PLUGIN_LDIF_EXPORT_PLUGIN_RETURNED_NULL_61=The LDIF export plugin \
+ defined in configuration entry %s returned null when invoked on entry %s. \
+ This is an illegal response
+SEVERE_ERR_PLUGIN_ENTRYUUID_INVALID_PLUGIN_TYPE_62=An attempt was made to \
+ register the EntryUUID plugin to be invoked as a %s plugin.  This plugin type \
+ is not allowed for this plugin
+SEVERE_ERR_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_EXCEPTION_63=The intermediate \
+ response plugin defined in configuration entry %s threw an exception when it \
+ was invoked for connection %d operation %d:  %s.  Processing on this \
+ operation will be terminated
+SEVERE_ERR_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_RETURNED_NULL_64=The \
+ intermediate response plugin defined in configuration entry %s returned null \
+ when invoked for connection %d operation %d.  This is an illegal response, \
+ and processing on this operation will be terminated
+SEVERE_ERR_PLUGIN_PWPIMPORT_INVALID_PLUGIN_TYPE_65=An attempt was made to \
+ register the password policy import plugin to be invoked as a %s plugin. \
+ This plugin type is not allowed for this plugin
+SEVERE_ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD_66=An error occurred \
+ while attempting to encode a password value stored in attribute %s of user \
+ entry %s:  %s.  Password values for this user will not be encoded
+SEVERE_ERR_PLUGIN_TYPE_NOT_SUPPORTED_67=The plugin defined in configuration \
+ entry %s does not support the %s plugin type
+INFO_PROFILEVIEWER_TOOL_DESCRIPTION_68=This utility may be used to view \
+ information in data files captured by the Directory Server profiler
+SEVERE_ERR_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES_69=The password policy \
+ import plugin is not configured any default auth password schemes, and the \
+ server does not support the %s auth password scheme
+SEVERE_ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME_70=Auth password \
+ storage scheme %s referenced by the password policy import plugin is not \
+ configured for use in the server
+SEVERE_ERR_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES_71=The password policy \
+ import plugin is not configured any default user password schemes, and the \
+ server does not support the %s auth password scheme
+SEVERE_ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME_72=User password \
+ storage scheme %s referenced by the password policy import plugin is not \
+ configured for use in the server
+SEVERE_WARN_PLUGIN_PWIMPORT_NO_SUCH_POLICY_73=Entry '%s' indicates that it \
+ uses custom password policy '%s', but no such policy is defined in the \
+ server.  Any passwords contained in the entry will be encoded using the \
+ default storage schemes, but authentication as this user may not be possible
+SEVERE_WARN_PLUGIN_PWIMPORT_CANNOT_DECODE_POLICY_DN_74=An error occurred \
+ while attempting to decode the value of the custom password policy attribute \
+ in entry '%s':  %s.  Any passwords contained in the entry will be encoded \
+ using the default storage schemes, but authentication as this user may not be \
+ possible
+SEVERE_ERR_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_EXCEPTION_75=The subordinate \
+ modify DN plugin defined in configuration entry %s threw an exception when it \
+ was invoked for connection %d operation %d:  %s.  Processing on this \
+ operation will be terminated
+SEVERE_ERR_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_RETURNED_NULL_76=The \
+ subordinate modify DN plugin defined in configuration entry %s returned null \
+ when invoked for connection %d operation %s.  This is an illegal response, \
+ and processing on this operation will be terminated
diff --git a/opendj-sdk/opends/src/messages/messages/protocol.properties b/opendj-sdk/opends/src/messages/messages/protocol.properties
new file mode 100644
index 0000000..cda5141
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/protocol.properties
@@ -0,0 +1,1406 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=PROTOCOL
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+MILD_ERR_ASN1_NULL_ELEMENT_1=Cannot decode the provided byte array as an \
+ ASN.1 element because the array was null
+MILD_ERR_ASN1_SHORT_ELEMENT_2=Cannot decode the provided byte array as an \
+ ASN.1 element because the length of the array (%d bytes) is less than the \
+ minimum required for an ASN.1 element (2 bytes)
+MILD_ERR_ASN1_INVALID_NUM_LENGTH_BYTES_3=Cannot decode the provided byte \
+ array as an ASN.1 element because it contained a multi-byte length with an \
+ invalid number of bytes (%d)
+MILD_ERR_ASN1_TRUNCATED_LENGTH_4=Cannot decode the provided byte array as an \
+ ASN.1 element because it contained a multi-byte length of %d bytes but the \
+ array was too short to contain the entire length
+MILD_ERR_ASN1_LENGTH_MISMATCH_5=Cannot decode the provided byte array as an \
+ ASN.1 element because the decoded value length (%d bytes) does not equal the \
+ number of bytes remaining in the provided array (%d)
+MILD_ERR_ASN1_ELEMENT_SET_NULL_6=Cannot decode the provided byte array as a \
+ set of ASN.1 elements because the array was null
+MILD_ERR_ASN1_ELEMENT_SET_NO_LENGTH_7=Cannot decode the provided byte array \
+ as a set of ASN.1 elements because the end of the array was reached after \
+ having read the BER type but none of the value for an element
+MILD_ERR_ASN1_ELEMENT_SET_INVALID_NUM_LENGTH_BYTES_8=Cannot decode the \
+ provided byte array as a set of ASN.1 elements because it contained a \
+ multi-byte length with an invalid number of bytes (%d)
+MILD_ERR_ASN1_ELEMENT_SET_TRUNCATED_LENGTH_9=Cannot decode the provided byte \
+ array as a set of ASN.1 elements because it contained a multi-byte length of \
+ %d bytes but the array was too short to contain the entire length
+MILD_ERR_ASN1_ELEMENT_SET_TRUNCATED_VALUE_10=Cannot decode the provided byte \
+ array as a set of ASN.1 elements because the decoded length of an element \
+ (%d) is more than the number of bytes remaining (%d)
+MILD_ERR_ASN1_BOOLEAN_SET_VALUE_NULL_11=Cannot decode the provided byte array \
+ as the value of an ASN.1 Boolean element because the array was null
+MILD_ERR_ASN1_BOOLEAN_SET_VALUE_INVALID_LENGTH_12=Cannot decode the provided \
+ byte array as the value of an ASN.1 Boolean element because the array did not \
+ have a length of exactly one byte (provided length was %d)
+MILD_ERR_ASN1_BOOLEAN_DECODE_ELEMENT_NULL_13=Cannot decode the provided ASN.1 \
+ element as a Boolean element because the provided element was null
+MILD_ERR_ASN1_BOOLEAN_DECODE_ELEMENT_INVALID_LENGTH_14=Cannot decode the \
+ provided ASN.1 element as a Boolean element because the length of the element \
+ value was not exactly one byte (actual length was %d)
+MILD_ERR_ASN1_BOOLEAN_DECODE_ARRAY_NULL_15=Cannot decode the provided byte \
+ array as an ASN.1 Boolean element because the array was null
+MILD_ERR_ASN1_BOOLEAN_SHORT_ELEMENT_16=Cannot decode the provided byte array \
+ as an ASN.1 Boolean element because the length of the array (%d bytes) is \
+ less than the minimum required for a Boolean element (3 bytes)
+MILD_ERR_ASN1_BOOLEAN_DECODE_ARRAY_INVALID_LENGTH_17=Cannot decode the \
+ provided byte array as an ASN.1 Boolean element because the decoded value \
+ length was not exactly one byte (decoded length was %d)
+MILD_ERR_ASN1_NULL_SET_VALUE_INVALID_LENGTH_18=Cannot decode the provided \
+ byte array as the value of an ASN.1 null element because the array did not \
+ have a length of exactly zero byte (provided length was %d)
+MILD_ERR_ASN1_NULL_DECODE_ELEMENT_NULL_19=Cannot decode the provided ASN.1 \
+ element as a null element because the provided element was null
+MILD_ERR_ASN1_NULL_DECODE_ELEMENT_INVALID_LENGTH_20=Cannot decode the \
+ provided ASN.1 element as a null element because the length of the element \
+ value was not exactly zero bytes (actual length was %d)
+MILD_ERR_ASN1_NULL_DECODE_ARRAY_NULL_21=Cannot decode the provided byte array \
+ as an ASN.1 null element because the array was null
+MILD_ERR_ASN1_NULL_DECODE_ARRAY_INVALID_LENGTH_22=Cannot decode the provided \
+ byte array as an ASN.1 null element because the decoded value length was not \
+ exactly zero bytes (decoded length was %d)
+MILD_ERR_ASN1_OCTET_STRING_DECODE_ELEMENT_NULL_23=Cannot decode the provided \
+ ASN.1 element as an octet string element because the provided element was \
+ null
+MILD_ERR_ASN1_OCTET_STRING_DECODE_ARRAY_NULL_24=Cannot decode the provided \
+ byte array as an ASN.1 octet string element because the array was null
+MILD_ERR_ASN1_INTEGER_SET_VALUE_NULL_25=Cannot decode the provided byte array \
+ as the value of an ASN.1 integer element because the array was null
+MILD_ERR_ASN1_INTEGER_SET_VALUE_INVALID_LENGTH_26=Cannot decode the provided \
+ byte array as the value of an ASN.1 integer element because the array did not \
+ have a length between 1 and 4 bytes (provided length was %d)
+MILD_ERR_ASN1_INTEGER_DECODE_ELEMENT_NULL_27=Cannot decode the provided ASN.1 \
+ element as an integer element because the provided element was null
+MILD_ERR_ASN1_INTEGER_DECODE_ELEMENT_INVALID_LENGTH_28=Cannot decode the \
+ provided ASN.1 element as an integer element because the length of the \
+ element value was not between one and four bytes (actual length was %d)
+MILD_ERR_ASN1_INTEGER_DECODE_ARRAY_NULL_29=Cannot decode the provided byte \
+ array as an ASN.1 integer element because the array was null
+MILD_ERR_ASN1_INTEGER_SHORT_ELEMENT_30=Cannot decode the provided byte array \
+ as an ASN.1 integer element because the length of the array (%d bytes) is \
+ less than the minimum required for an integer element (3 bytes)
+MILD_ERR_ASN1_INTEGER_DECODE_ARRAY_INVALID_LENGTH_31=Cannot decode the \
+ provided byte array as an ASN.1 integer element because the decoded value \
+ length was not between 1 and 4 bytes (decoded length was %d)
+MILD_ERR_ASN1_ENUMERATED_SET_VALUE_NULL_32=Cannot decode the provided byte \
+ array as the value of an ASN.1 enumerated element because the array was null
+MILD_ERR_ASN1_ENUMERATED_SET_VALUE_INVALID_LENGTH_33=Cannot decode the \
+ provided byte array as the value of an ASN.1 enumerated element because the \
+ array did not have a length between 1 and 4 bytes (provided length was %d)
+MILD_ERR_ASN1_ENUMERATED_DECODE_ELEMENT_NULL_34=Cannot decode the provided \
+ ASN.1 element as an enumerated element because the provided element was null
+MILD_ERR_ASN1_ENUMERATED_DECODE_ELEMENT_INVALID_LENGTH_35=Cannot decode the \
+ provided ASN.1 element as an enumerated element because the length of the \
+ element value was not between one and four bytes (actual length was %d)
+MILD_ERR_ASN1_ENUMERATED_DECODE_ARRAY_NULL_36=Cannot decode the provided byte \
+ array as an ASN.1 enumerated element because the array was null
+MILD_ERR_ASN1_ENUMERATED_SHORT_ELEMENT_37=Cannot decode the provided byte \
+ array as an ASN.1 enumerated element because the length of the array (%d \
+ bytes) is less than the minimum required for an enumerated element (3 bytes)
+MILD_ERR_ASN1_ENUMERATED_DECODE_ARRAY_INVALID_LENGTH_38=Cannot decode the \
+ provided byte array as an ASN.1 enumerated element because the decoded value \
+ length was not between 1 and 4 bytes (decoded length was %d)
+MILD_ERR_ASN1_SEQUENCE_SET_VALUE_NULL_39=Cannot decode the provided byte \
+ array as the value of an ASN.1 sequence element because the array was null
+MILD_ERR_ASN1_SEQUENCE_DECODE_ELEMENT_NULL_40=Cannot decode the provided \
+ ASN.1 element as a sequence element because the provided element was null
+MILD_ERR_ASN1_SEQUENCE_DECODE_ARRAY_NULL_41=Cannot decode the provided byte \
+ array as an ASN.1 sequence element because the array was null
+MILD_ERR_ASN1_SET_SET_VALUE_NULL_42=Cannot decode the provided byte array as \
+ the value of an ASN.1 set element because the array was null
+MILD_ERR_ASN1_SET_DECODE_ELEMENT_NULL_43=Cannot decode the provided ASN.1 \
+ element as a set element because the provided element was null
+MILD_ERR_ASN1_SET_DECODE_ARRAY_NULL_44=Cannot decode the provided byte array \
+ as an ASN.1 set element because the array was null
+MILD_ERR_LDAP_MESSAGE_DECODE_NULL_45=Cannot decode the provided ASN.1 \
+ sequence as an LDAP message because the sequence was null
+MILD_ERR_LDAP_MESSAGE_DECODE_INVALID_ELEMENT_COUNT_46=Cannot decode the \
+ provided ASN.1 sequence as an LDAP message because the sequence contained an \
+ invalid number of elements (expected 2 or 3, got %d)
+MILD_ERR_LDAP_MESSAGE_DECODE_MESSAGE_ID_47=Cannot decode the provided ASN.1 \
+ sequence as an LDAP message because the first element of the sequence could \
+ not be decoded as an integer message ID:  %s
+MILD_ERR_LDAP_MESSAGE_DECODE_PROTOCOL_OP_48=Cannot decode the provided ASN.1 \
+ sequence as an LDAP message because the second element of the sequence could \
+ not be decoded as the protocol op:  %s
+MILD_ERR_LDAP_MESSAGE_DECODE_CONTROLS_49=Cannot decode the provided ASN.1 \
+ sequence as an LDAP message because the third element of the sequence could \
+ not be decoded as the set of controls:  %s
+MILD_ERR_LDAP_CONTROL_DECODE_NULL_50=Cannot decode the provided ASN.1 element \
+ as an LDAP control because the element was null
+MILD_ERR_LDAP_CONTROL_DECODE_SEQUENCE_51=Cannot decode the provided ASN.1 \
+ element as an LDAP control because the element could not be decoded as a \
+ sequence:  %s
+MILD_ERR_LDAP_CONTROL_DECODE_INVALID_ELEMENT_COUNT_52=Cannot decode the \
+ provided ASN.1 element as an LDAP control because the control sequence \
+ contained an invalid number of elements (expected 1 to 3, got %d)
+MILD_ERR_LDAP_CONTROL_DECODE_OID_53=Cannot decode the provided ASN.1 element \
+ as an LDAP control because the OID could not be decoded as a string:  %s
+MILD_ERR_LDAP_CONTROL_DECODE_CRITICALITY_54=Cannot decode the provided ASN.1 \
+ element as an LDAP control because the criticality could not be decoded as \
+ Boolean value:  %s
+MILD_ERR_LDAP_CONTROL_DECODE_VALUE_55=Cannot decode the provided ASN.1 \
+ element as an LDAP control because the value could not be decoded as an octet \
+ string:  %s
+MILD_ERR_LDAP_CONTROL_DECODE_INVALID_TYPE_56=Cannot decode the provided ASN.1 \
+ element as an LDAP control because the BER type for the second element in the \
+ sequence was invalid (expected 01 or 04, got %x)
+MILD_ERR_LDAP_CONTROL_DECODE_CONTROLS_NULL_57=Cannot decode the provided \
+ ASN.1 element as a set of LDAP controls because the element was null
+MILD_ERR_LDAP_CONTROL_DECODE_CONTROLS_SEQUENCE_58=Cannot decode the provided \
+ ASN.1 element as a set of LDAP controls because the element could not be \
+ decoded as a sequence:  %s
+MILD_ERR_LDAP_ABANDON_REQUEST_DECODE_ID_59=Cannot decode the provided ASN.1 \
+ element as an LDAP abandon request protocol op because a problem occurred \
+ while trying to obtain the message ID of the operation to abandon:  %s
+MILD_ERR_LDAP_RESULT_DECODE_SEQUENCE_60=Cannot decode the provided ASN.1 \
+ element as an LDAP result protocol op because a problem occurred while trying \
+ to parse the result sequence:  %s
+MILD_ERR_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT_61=Cannot decode the \
+ provided ASN.1 element as an LDAP result protocol op because the result \
+ sequence did not contain a valid number of elements (expected 3 or 4, got %d)
+MILD_ERR_LDAP_RESULT_DECODE_RESULT_CODE_62=Cannot decode the provided ASN.1 \
+ element as an LDAP result protocol op because the first element in the result \
+ sequence could not be decoded as an integer result code:  %s
+MILD_ERR_LDAP_RESULT_DECODE_MATCHED_DN_63=Cannot decode the provided ASN.1 \
+ element as an LDAP result protocol op because the second element in the \
+ result sequence could not be decoded as the matched DN:  %s
+MILD_ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE_64=Cannot decode the provided ASN.1 \
+ element as an LDAP result protocol op because the third element in the result \
+ sequence could not be decoded as the error message:  %s
+MILD_ERR_LDAP_RESULT_DECODE_REFERRALS_65=Cannot decode the provided ASN.1 \
+ element as an LDAP result protocol op because the fourth element in the \
+ result sequence could not be decoded as a set of referral URLs:  %s
+MILD_ERR_LDAP_BIND_RESULT_DECODE_INVALID_ELEMENT_COUNT_66=Cannot decode the \
+ provided ASN.1 element as an LDAP bind response protocol op because the \
+ result sequence did not contain a valid number of elements (expected 3 to 5, \
+ got %d)
+MILD_ERR_LDAP_BIND_RESULT_DECODE_SERVER_SASL_CREDENTIALS_67=Cannot decode the \
+ provided ASN.1 element as an LDAP bind response protocol op because the final \
+ element in the result sequence could not be decoded as the server SASL \
+ credentials:  %s
+MILD_ERR_LDAP_BIND_RESULT_DECODE_INVALID_TYPE_68=Cannot decode the provided \
+ ASN.1 element as an LDAP bind response protocol op because the BER type for \
+ the fourth element in the sequence was invalid (expected A3 or 87, got %x)
+MILD_ERR_LDAP_EXTENDED_RESULT_DECODE_INVALID_ELEMENT_COUNT_69=Cannot decode \
+ the provided ASN.1 element as an LDAP bind response protocol op because the \
+ result sequence did not contain a valid number of elements (expected 3 to 6, \
+ got %d)
+MILD_ERR_LDAP_EXTENDED_RESULT_DECODE_REFERRALS_70=Cannot decode the provided \
+ ASN.1 element as an LDAP bind response protocol op because the set of \
+ referral URLs could not be decoded:  %s
+MILD_ERR_LDAP_EXTENDED_RESULT_DECODE_OID_71=Cannot decode the provided ASN.1 \
+ element as an LDAP bind response protocol op because the response OID could \
+ not be decoded:  %s
+MILD_ERR_LDAP_EXTENDED_RESULT_DECODE_VALUE_72=Cannot decode the provided \
+ ASN.1 element as an LDAP bind response protocol op because the response value \
+ could not be decoded:  %s
+MILD_ERR_LDAP_EXTENDED_RESULT_DECODE_INVALID_TYPE_73=Cannot decode the \
+ provided ASN.1 element as an LDAP extended response protocol op because one \
+ of the elements it contained had an invalid BER type (expected A3, 8A, or 8B, \
+ got %x)
+MILD_ERR_LDAP_UNBIND_DECODE_74=Cannot decode the provided ASN.1 element as an \
+ LDAP unbind request protocol op:  %s
+MILD_ERR_LDAP_BIND_REQUEST_DECODE_SEQUENCE_75=Cannot decode the provided \
+ ASN.1 element as an LDAP bind request protocol op because the element could \
+ not be decoded as a sequence:  %s
+MILD_ERR_LDAP_BIND_REQUEST_DECODE_INVALID_ELEMENT_COUNT_76=Cannot decode the \
+ provided ASN.1 element as an LDAP bind request protocol op because the \
+ request sequence had an invalid number of elements (expected 3, got %d)
+MILD_ERR_LDAP_BIND_REQUEST_DECODE_VERSION_77=Cannot decode the provided ASN.1 \
+ element as an LDAP bind request protocol op because the protocol version \
+ could not be decoded as an integer:  %s
+MILD_ERR_LDAP_BIND_REQUEST_DECODE_DN_78=Cannot decode the provided ASN.1 \
+ element as an LDAP bind request protocol op because the bind DN could not be \
+ properly decoded:  %s
+MILD_ERR_LDAP_BIND_REQUEST_DECODE_PASSWORD_79=Cannot decode the provided \
+ ASN.1 element as an LDAP bind request protocol op because the password to use \
+ for simple authentication could not be decoded:  %s
+MILD_ERR_LDAP_BIND_REQUEST_DECODE_SASL_INFO_80=Cannot decode the provided \
+ ASN.1 element as an LDAP bind request protocol op because the SASL \
+ authentication information could not be decoded:  %s
+MILD_ERR_LDAP_BIND_REQUEST_DECODE_INVALID_CRED_TYPE_81=Cannot decode the \
+ provided ASN.1 element as an LDAP bind request protocol op because the \
+ authentication info element had an invalid BER type (expected 80 or A3, got \
+ %x)
+MILD_ERR_LDAP_BIND_REQUEST_DECODE_CREDENTIALS_82=Cannot decoded the provided \
+ ASN.1 element as an LDAP bind request protocol op because an unexpected error \
+ occurred while trying to decode the authentication info element:  %s
+MILD_ERR_LDAP_COMPARE_REQUEST_DECODE_SEQUENCE_83=Cannot decode the provided \
+ ASN.1 element as an LDAP compare request protocol op because the element \
+ could not be decoded as a sequence:  %s
+MILD_ERR_LDAP_COMPARE_REQUEST_DECODE_INVALID_ELEMENT_COUNT_84=Cannot decode \
+ the provided ASN.1 element as an LDAP compare request protocol op because the \
+ request sequence had an invalid number of elements (expected 2, got %d)
+MILD_ERR_LDAP_COMPARE_REQUEST_DECODE_DN_85=Cannot decode the provided ASN.1 \
+ element as an LDAP compare request protocol op because the target DN could \
+ not be properly decoded:  %s
+MILD_ERR_LDAP_COMPARE_REQUEST_DECODE_AVA_86=Cannot decode the provided ASN.1 \
+ element as an LDAP compare request protocol op because the attribute value \
+ assertion could not be decoded as a sequence:  %s
+MILD_ERR_LDAP_COMPARE_REQUEST_DECODE_AVA_COUNT_87=Cannot decode the provided \
+ ASN.1 element as an LDAP compare request protocol op because the attribute \
+ value assertion sequence had an invalid number of elements (expected 2, got \
+ %d)
+MILD_ERR_LDAP_COMPARE_REQUEST_DECODE_TYPE_88=Cannot decode the provided ASN.1 \
+ element as an LDAP compare request protocol op because the attribute type \
+ could not be properly decoded:  %s
+MILD_ERR_LDAP_COMPARE_REQUEST_DECODE_VALUE_89=Cannot decode the provided \
+ ASN.1 element as an LDAP compare request protocol op because the assertion \
+ value could not be properly decoded:  %s
+MILD_ERR_LDAP_DELETE_REQUEST_DECODE_DN_90=Cannot decode the provided ASN.1 \
+ element as an LDAP delete request protocol op because the target DN could not \
+ be properly decoded:  %s
+MILD_ERR_LDAP_EXTENDED_REQUEST_DECODE_SEQUENCE_91=Cannot decode the provided \
+ ASN.1 element as an LDAP extended request protocol op because the element \
+ could not be decoded as a sequence:  %s
+MILD_ERR_LDAP_EXTENDED_REQUEST_DECODE_INVALID_ELEMENT_COUNT_92=Cannot decode \
+ the provided ASN.1 element as an LDAP extended request protocol op because \
+ the request sequence had an invalid number of elements (expected 1 or 2, got \
+ %d)
+MILD_ERR_LDAP_EXTENDED_REQUEST_DECODE_OID_93=Cannot decode the provided ASN.1 \
+ element as an LDAP extended request protocol op because the OID could not be \
+ properly decoded:  %s
+MILD_ERR_LDAP_EXTENDED_REQUEST_DECODE_VALUE_94=Cannot decode the provided \
+ ASN.1 element as an LDAP extended request protocol op because the value could \
+ not be properly decoded:  %s
+MILD_ERR_LDAP_MODIFY_DN_REQUEST_DECODE_SEQUENCE_95=Cannot decode the provided \
+ ASN.1 element as an LDAP modify DN request protocol op because the element \
+ could not be decoded as a sequence:  %s
+MILD_ERR_LDAP_MODIFY_DN_REQUEST_DECODE_INVALID_ELEMENT_COUNT_96=Cannot decode \
+ the provided ASN.1 element as an LDAP modify DN request protocol op because \
+ the request sequence had an invalid number of elements (expected 3 or 4, got \
+ %d)
+MILD_ERR_LDAP_MODIFY_DN_REQUEST_DECODE_DN_97=Cannot decode the provided ASN.1 \
+ element as an LDAP modify DN request protocol op because the entry DN could \
+ not be properly decoded:  %s
+MILD_ERR_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_RDN_98=Cannot decode the provided \
+ ASN.1 element as an LDAP modify DN request protocol op because the new RDN \
+ could not be properly decoded:  %s
+MILD_ERR_LDAP_MODIFY_DN_REQUEST_DECODE_DELETE_OLD_RDN_99=Cannot decode the \
+ provided ASN.1 element as an LDAP modify DN request protocol op because the \
+ deleteOldRDN flag could not be properly decoded:  %s
+MILD_ERR_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_SUPERIOR_100=Cannot decode the \
+ provided ASN.1 element as an LDAP modify DN request protocol op because the \
+ new superior DN could not be properly decoded:  %s
+MILD_ERR_LDAP_ATTRIBUTE_DECODE_SEQUENCE_101=Cannot decode the provided ASN.1 \
+ element as an LDAP attribute because the element could not be decoded as a \
+ sequence:  %s
+MILD_ERR_LDAP_ATTRIBUTE_DECODE_INVALID_ELEMENT_COUNT_102=Cannot decode the \
+ provided ASN.1 element as an LDAP attribute because the request sequence had \
+ an invalid number of elements (expected 2, got %d)
+MILD_ERR_LDAP_ATTRIBUTE_DECODE_TYPE_103=Cannot decode the provided ASN.1 \
+ element as an LDAP attribute because the attribute type could not be decoded: \
+ %s
+MILD_ERR_LDAP_ATTRIBUTE_DECODE_VALUES_104=Cannot decode the provided ASN.1 \
+ element as an LDAP attribute because the set of values could not be decoded: \
+ %s
+MILD_ERR_LDAP_ADD_REQUEST_DECODE_SEQUENCE_105=Cannot decode the provided \
+ ASN.1 element as an LDAP add request protocol op because the element could \
+ not be decoded as a sequence:  %s
+MILD_ERR_LDAP_ADD_REQUEST_DECODE_INVALID_ELEMENT_COUNT_106=Cannot decode the \
+ provided ASN.1 element as an LDAP add request protocol op because the request \
+ sequence had an invalid number of elements (expected 2, got %d)
+MILD_ERR_LDAP_ADD_REQUEST_DECODE_DN_107=Cannot decode the provided ASN.1 \
+ element as an LDAP add request protocol op because the entry DN could not be \
+ decoded:  %s
+MILD_ERR_LDAP_ADD_REQUEST_DECODE_ATTRS_108=Cannot decode the provided ASN.1 \
+ element as an LDAP add request protocol op because the set of attributes \
+ could not be decoded:  %s
+MILD_ERR_LDAP_MODIFICATION_DECODE_SEQUENCE_109=Cannot decode the provided \
+ ASN.1 element as an LDAP modification because the element could not be \
+ decoded as a sequence:  %s
+MILD_ERR_LDAP_MODIFICATION_DECODE_INVALID_ELEMENT_COUNT_110=Cannot decode the \
+ provided ASN.1 element as an LDAP modification because the request sequence \
+ had an invalid number of elements (expected 2, got %d)
+MILD_ERR_LDAP_MODIFICATION_DECODE_INVALID_MOD_TYPE_111=Cannot decode the \
+ provided ASN.1 element as an LDAP modification because it contained an \
+ invalid modification type (%d)
+MILD_ERR_LDAP_MODIFICATION_DECODE_MOD_TYPE_112=Cannot decode the provided \
+ ASN.1 element as an LDAP modification because the modification type could not \
+ be decoded:  %s
+MILD_ERR_LDAP_MODIFICATION_DECODE_ATTR_113=Cannot decode the provided ASN.1 \
+ element as an LDAP modification because the attribute could not be decoded: \
+ %s
+MILD_ERR_LDAP_MODIFY_REQUEST_DECODE_SEQUENCE_114=Cannot decode the provided \
+ ASN.1 element as an LDAP modify request protocol op because the element could \
+ not be decoded as a sequence:  %s
+MILD_ERR_LDAP_MODIFY_REQUEST_DECODE_INVALID_ELEMENT_COUNT_115=Cannot decode \
+ the provided ASN.1 element as an LDAP modify request protocol op because the \
+ request sequence had an invalid number of elements (expected 2, got %d)
+MILD_ERR_LDAP_MODIFY_REQUEST_DECODE_DN_116=Cannot decode the provided ASN.1 \
+ element as an LDAP modify request protocol op because the entry DN could not \
+ be decoded:  %s
+MILD_ERR_LDAP_MODIFY_REQUEST_DECODE_MODS_117=Cannot decode the provided ASN.1 \
+ element as an LDAP modify request protocol op because the set of \
+ modifications could not be decoded:  %s
+MILD_ERR_LDAP_SEARCH_ENTRY_DECODE_SEQUENCE_118=Cannot decode the provided \
+ ASN.1 element as an LDAP search result entry protocol op because the element \
+ could not be decoded as a sequence:  %s
+MILD_ERR_LDAP_SEARCH_ENTRY_DECODE_INVALID_ELEMENT_COUNT_119=Cannot decode the \
+ provided ASN.1 element as an LDAP search result entry protocol op because the \
+ request sequence had an invalid number of elements (expected 2, got %d)
+MILD_ERR_LDAP_SEARCH_ENTRY_DECODE_DN_120=Cannot decode the provided ASN.1 \
+ element as an LDAP search result entry protocol op because the entry DN could \
+ not be decoded:  %s
+MILD_ERR_LDAP_SEARCH_ENTRY_DECODE_ATTRS_121=Cannot decode the provided ASN.1 \
+ element as an LDAP search result entry protocol op because the set of \
+ attributes could not be decoded:  %s
+MILD_ERR_LDAP_SEARCH_REFERENCE_DECODE_SEQUENCE_122=Cannot decode the provided \
+ ASN.1 element as an LDAP search result reference protocol op because the \
+ element could not be decoded as a sequence:  %s
+MILD_ERR_LDAP_SEARCH_REFERENCE_DECODE_URLS_123=Cannot decode the provided \
+ ASN.1 element as an LDAP search result reference protocol op because a \
+ problem occurred while trying to decode the sequence elements as referral \
+ URLs:  %s
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_SEQUENCE_124=Cannot decode the provided \
+ ASN.1 element as an LDAP search request protocol op because the element could \
+ not be decoded as a sequence:  %s
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_INVALID_ELEMENT_COUNT_125=Cannot decode \
+ the provided ASN.1 element as an LDAP search request protocol op because the \
+ request sequence had an invalid number of elements (expected 8, got %d)
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_BASE_126=Cannot decode the provided ASN.1 \
+ element as an LDAP search request protocol op because the base DN could not \
+ be decoded:  %s
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_INVALID_SCOPE_127=Cannot decode the \
+ provided ASN.1 element as an LDAP search request protocol op because the \
+ provided scope value (%d) is invalid
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_SCOPE_128=Cannot decode the provided \
+ ASN.1 element as an LDAP search request protocol op because the scope could \
+ not be decoded:  %s
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_INVALID_DEREF_129=Cannot decode the \
+ provided ASN.1 element as an LDAP search request protocol op because the \
+ provided alias dereferencing policy value (%d) is invalid
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_DEREF_130=Cannot decode the provided \
+ ASN.1 element as an LDAP search request protocol op because the alias \
+ dereferencing policy could not be decoded:  %s
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_SIZE_LIMIT_131=Cannot decode the provided \
+ ASN.1 element as an LDAP search request protocol op because the size limit \
+ could not be decoded:  %s
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_TIME_LIMIT_132=Cannot decode the provided \
+ ASN.1 element as an LDAP search request protocol op because the time limit \
+ could not be decoded:  %s
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_TYPES_ONLY_133=Cannot decode the provided \
+ ASN.1 element as an LDAP search request protocol op because the typesOnly \
+ flag could not be decoded:  %s
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_FILTER_134=Cannot decode the provided \
+ ASN.1 element as an LDAP search request protocol op because the filter could \
+ not be decoded:  %s
+MILD_ERR_LDAP_SEARCH_REQUEST_DECODE_ATTRIBUTES_135=Cannot decode the provided \
+ ASN.1 element as an LDAP search request protocol op because the requested \
+ attribute set could not be decoded:  %s
+MILD_ERR_LDAP_PROTOCOL_OP_DECODE_NULL_136=Cannot decode the provided ASN.1 \
+ element as an LDAP protocol op because the element was null
+MILD_ERR_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE_137=Cannot decode the provided \
+ ASN.1 element as an LDAP protocol op because the element had an invalid BER \
+ type (%x) for an LDAP protocol op
+MILD_ERR_LDAP_FILTER_DECODE_NULL_138=Cannot decode the provided ASN.1 element \
+ as an LDAP search filter because the element was null
+MILD_ERR_LDAP_FILTER_DECODE_INVALID_TYPE_139=Cannot decode the provided ASN.1 \
+ element as an LDAP search filter because the element had an invalid BER type \
+ (%x) for a search filter
+MILD_ERR_LDAP_FILTER_DECODE_COMPOUND_SET_140=Cannot decode the provided ASN.1 \
+ element as an LDAP search filter because the compound filter set could not be \
+ decoded:  %s
+MILD_ERR_LDAP_FILTER_DECODE_COMPOUND_COMPONENTS_141=Cannot decode the \
+ provided ASN.1 element as an LDAP search filter because an unexpected error \
+ occurred while trying to decode one of the compound filter components:  %s
+MILD_ERR_LDAP_FILTER_DECODE_NOT_ELEMENT_142=Cannot decode the provided ASN.1 \
+ element as an LDAP search filter because the value of the element cannot \
+ itself be decoded as an ASN.1 element for a NOT filter component:  %s
+MILD_ERR_LDAP_FILTER_DECODE_NOT_COMPONENT_143=Cannot decode the provided \
+ ASN.1 element as an LDAP search filter because the NOT component element \
+ could not be decoded as an LDAP filter:  %s
+MILD_ERR_LDAP_FILTER_DECODE_TV_SEQUENCE_144=Cannot decode the provided ASN.1 \
+ element as an LDAP search filter because the element could not be decoded as \
+ a type-and-value sequence:  %s
+MILD_ERR_LDAP_FILTER_DECODE_TV_INVALID_ELEMENT_COUNT_145=Cannot decode the \
+ provided ASN.1 element as an LDAP search filter because the type-and-value \
+ sequence had an invalid number of elements (expected 2, got %d)
+MILD_ERR_LDAP_FILTER_DECODE_TV_TYPE_146=Cannot decode the provided ASN.1 \
+ element as an LDAP search filter because the attribute type could not be \
+ decoded from the type-and-value sequence:  %s
+MILD_ERR_LDAP_FILTER_DECODE_TV_VALUE_147=Cannot decode the provided ASN.1 \
+ element as an LDAP search filter because the assertion value could not be \
+ decoded from the type-and-value sequence:  %s
+MILD_ERR_LDAP_FILTER_DECODE_SUBSTRING_SEQUENCE_148=Cannot decode the provided \
+ ASN.1 element as an LDAP search filter because the element could not be \
+ decoded as a substring sequence:  %s
+MILD_ERR_LDAP_FILTER_DECODE_SUBSTRING_INVALID_ELEMENT_COUNT_149=Cannot decode \
+ the provided ASN.1 element as an LDAP search filter because the substring \
+ sequence had an invalid number of elements (expected 2, got %d)
+MILD_ERR_LDAP_FILTER_DECODE_SUBSTRING_TYPE_150=Cannot decode the provided \
+ ASN.1 element as an LDAP search filter because the attribute type could not \
+ be decoded from the substring sequence:  %s
+MILD_ERR_LDAP_FILTER_DECODE_SUBSTRING_ELEMENTS_151=Cannot decode the provided \
+ ASN.1 element as an LDAP search filter because the substring value sequence \
+ could not be decoded:  %s
+MILD_ERR_LDAP_FILTER_DECODE_SUBSTRING_NO_SUBELEMENTS_152=Cannot decode the \
+ provided ASN.1 element as an LDAP search filter because the substring value \
+ sequence did not contain any elements
+MILD_ERR_LDAP_FILTER_DECODE_SUBSTRING_INVALID_SUBTYPE_153=Cannot decode the \
+ provided ASN.1 element as an LDAP search filter because the substring value \
+ sequence had an element with an invalid BER type (%x)
+MILD_ERR_LDAP_FILTER_DECODE_SUBSTRING_VALUES_154=Cannot decode the provided \
+ ASN.1 element as an LDAP search filter because a problem occurred while \
+ trying to parse the substring value elements:  %s
+MILD_ERR_LDAP_FILTER_DECODE_PRESENCE_TYPE_155=Cannot decode the provided \
+ ASN.1 element as an LDAP search filter because the element could not be \
+ decoded as the presence attribute type:  %s
+MILD_ERR_LDAP_FILTER_DECODE_EXTENSIBLE_SEQUENCE_156=Cannot decode the \
+ provided ASN.1 element as an LDAP search filter because the element could not \
+ be decoded as an extensible matching sequence:  %s
+MILD_ERR_LDAP_FILTER_DECODE_EXTENSIBLE_INVALID_TYPE_157=Cannot decode the \
+ provided ASN.1 element as an LDAP search filter because the extensible \
+ matching sequence had an element with an invalid BER type (%x)
+MILD_ERR_LDAP_FILTER_DECODE_EXTENSIBLE_ELEMENTS_158=Cannot decode the \
+ provided ASN.1 element as an LDAP search filter because a problem occurred \
+ while trying to parse the extensible match sequence elements:  %s
+MILD_ERR_LDAP_CLIENT_SEND_RESPONSE_NO_RESULT_CODE_159=The server attempted to \
+ send a response to the %s operation (conn=%d, op=%d), but the operation did \
+ not have a result code.  This could indicate that the operation did not \
+ complete properly or that it is one that is not allowed to have a response. \
+ Using a generic 'Operations Error' response
+MILD_ERR_LDAP_CLIENT_SEND_RESPONSE_INVALID_OP_160=The server attempted to \
+ send a response to the %s operation (conn=%d, op=%d), but this type of \
+ operation is not allowed to have responses.  Backtrace:  %s
+MILD_ERR_LDAP_CLIENT_SEND_MESSAGE_ENCODE_ASN1_161=The server was unable to \
+ encode the provided LDAP message %s (conn=%d, op=%d) into an ASN.1 element: \
+ %s
+MILD_ERR_LDAP_CLIENT_SEND_MESSAGE_ENCODE_BYTES_162=The server was unable to \
+ encode the ASN.1 element generated from LDAP message %s (conn=%d, op=%d) into \
+ a byte array:  %s
+MILD_ERR_LDAP_CLIENT_SEND_MESSAGE_IO_PROBLEM_163=The server was unable to \
+ send the LDAP message %s (conn=%d, op=%d) to the client because an I/O \
+ problem was encountered:  %s
+MILD_ERR_LDAP_CLIENT_SEND_MESSAGE_UNEXPECTED_PROBLEM_164=The server was \
+ unable to send the LDAP message %s (conn=%d, op=%d) to the client because an \
+ unexpected problem was encountered:  %s
+INFO_LDAP_CLIENT_GENERIC_NOTICE_OF_DISCONNECTION_165=The Directory Server is \
+ closing the connection to this client
+MILD_WARN_LDAP_CLIENT_DISCONNECT_IN_PROGRESS_166=The Directory Server is \
+ currently in the process of closing this client connection
+MILD_ERR_LDAP_CLIENT_DECODE_ZERO_BYTE_VALUE_167=The client sent a request to \
+ the Directory Server that was an ASN.1 element with a zero-byte value.  This \
+ cannot possibly be a valid LDAP message
+MILD_ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED_168=The client sent a \
+ request to the Directory Server with an ASN.1 element value length of %d \
+ bytes.  This exceeds the maximum allowed request size of %d bytes, so \
+ processing cannot continue on this connection
+MILD_ERR_LDAP_CLIENT_DECODE_INVALID_MULTIBYTE_LENGTH_169=The client sent a \
+ request to the Directory Server with an ASN.1 element using multiple bytes to \
+ express the value length.  The request indicated that %d bytes were needed to \
+ express the length, but this exceeds the maximum allowed limit of four bytes
+MILD_ERR_LDAP_CLIENT_DECODE_ASN1_FAILED_170=The client sent a request to the \
+ Directory Server that could not be properly decoded as an ASN.1 element:  %s
+MILD_ERR_LDAP_CLIENT_DECODE_LDAP_MESSAGE_FAILED_171=The client sent a request \
+ to the Directory Server that could not be properly decoded as an LDAP \
+ message:  %s
+SEVERE_ERR_LDAP_CLIENT_INVALID_DECODE_STATE_172=An internal error has \
+ occurred within the Directory Server to cause it to lose track of where it is \
+ in decoding requests on this client connection.  It had an invalid decode \
+ state of %d, and this connection must be terminated
+MILD_ERR_LDAP_CLIENT_DECODE_INVALID_REQUEST_TYPE_173=The client sent an LDAP \
+ message to the Directory Server that was not a valid message for a client \
+ request:  %s
+MILD_ERR_LDAP_CLIENT_CANNOT_CONVERT_MESSAGE_TO_OPERATION_174=The Directory \
+ Server was unable to convert the LDAP message read from the client (%s) to an \
+ internal operation for processing:  %s
+MILD_ERR_LDAP_ABANDON_INVALID_MESSAGE_TYPE_175=Cannot convert the provided \
+ LDAP message (%s) to an abandon operation:  %s
+MILD_ERR_LDAP_UNBIND_INVALID_MESSAGE_TYPE_176=Cannot convert the provided \
+ LDAP message (%s) to an unbind operation:  %s
+FATAL_ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED_177=The LDAP connection \
+ handler defined in configuration entry %s was unable to open a selector to \
+ allow it to multiplex the associated accept sockets:  %s.  This connection \
+ handler will be disabled
+SEVERE_ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED_178=The LDAP connection \
+ handler defined in configuration entry %s was unable to create a server \
+ socket channel to accept connections on %s:%d:  %s.  The Directory Server \
+ will not listen for new connections on that address
+FATAL_ERR_LDAP_CONNHANDLER_NO_ACCEPTORS_179=The LDAP connection handler \
+ defined in configuration entry %s was unable to create any of the socket \
+ channels on any of the configured addresses.  This connection handler will be \
+ disabled
+MILD_ERR_LDAP_CONNHANDLER_DENIED_CLIENT_180=The connection attempt from \
+ client %s to %s has been rejected because the client was included in one of \
+ the denied address ranges
+MILD_ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT_181=The connection attempt from \
+ client %s to %s has been rejected because the client was not included in one \
+ of the allowed address ranges
+INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT_182=An internal error \
+ prevented the Directory Server from properly registering the client \
+ connection from %s to %s with an appropriate request handler:  %s
+MILD_ERR_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION_183=The LDAP connection \
+ handler defined in configuration entry %s was unable to accept a new client \
+ connection:  %s
+FATAL_ERR_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES_184=The LDAP \
+ connection handler defined in configuration entry %s has experienced \
+ consecutive failures while trying to accept client connections:  %s.  This \
+ connection handler will be disabled
+FATAL_ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR_185=The LDAP connection handler \
+ defined in configuration entry %s caught an unexpected error while trying to \
+ listen for new connections:  %s.  This connection handler will be disabled
+FATAL_ERR_LDAP_REQHANDLER_OPEN_SELECTOR_FAILED_186=%s was unable to open a \
+ selector to multiplex reads from clients:  %s.  This request handler cannot \
+ continue processing
+FATAL_ERR_LDAP_REQHANDLER_CANNOT_REGISTER_187=%s was unable to register this \
+ client connection with the selector:  %s
+FATAL_ERR_LDAP_REQHANDLER_REJECT_DUE_TO_SHUTDOWN_188=This connection could \
+ not be registered with a request handler because the Directory Server is \
+ shutting down
+FATAL_ERR_LDAP_REQHANDLER_REJECT_DUE_TO_QUEUE_FULL_189=This connection could \
+ not be registered with a request handler because the pending queue associated \
+ with %s is too full
+FATAL_ERR_LDAP_REQHANDLER_DEREGISTER_DUE_TO_SHUTDOWN_190=This client \
+ connection is being deregistered from the associated request handler because \
+ the Directory Server is shutting down:  %s
+MILD_ERR_ASN1_READER_MAX_SIZE_EXCEEDED_191=Cannot decode the data read as an \
+ ASN.1 element because the decoded element length of %d bytes was larger than \
+ the maximum allowed element length of %d bytes.  The underlying input stream \
+ has been closed and this reader may no longer be used
+MILD_ERR_LDAP_FILTER_STRING_NULL_192=Cannot decode the provided string as an \
+ LDAP search filter because the string was null
+MILD_ERR_LDAP_FILTER_UNCAUGHT_EXCEPTION_193=Cannot decode the provided string \
+ %s as an LDAP search filter because an unexpected exception was thrown during \
+ processing:  %s
+MILD_ERR_LDAP_FILTER_MISMATCHED_PARENTHESES_194=The provided search filter \
+ "%s" had mismatched parentheses around the portion between positions %d and \
+ %d
+MILD_ERR_LDAP_FILTER_NO_EQUAL_SIGN_195=The provided search filter "%s" was \
+ missing an equal sign in the suspected simple filter component between \
+ positions %d and %d
+MILD_ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE_196=The provided search filter "%s" \
+ had an invalid escaped byte value at position %d.  A backslash in a value \
+ must be followed by two hexadecimal characters that define the byte that has \
+ been encoded
+MILD_ERR_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES_197=The provided search \
+ filter "%s" could not be decoded because the compound filter between \
+ positions %d and %d did not start with an open parenthesis and end with a \
+ close parenthesis (they may be parentheses for different filter components)
+MILD_ERR_LDAP_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS_198=The provided \
+ search filter "%s" could not be decoded because the closing parenthesis at \
+ position %d did not have a corresponding open parenthesis
+MILD_ERR_LDAP_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS_199=The provided \
+ search filter "%s" could not be decoded because the closing parenthesis at \
+ position %d did not have a corresponding close parenthesis
+MILD_ERR_LDAP_FILTER_SUBSTRING_NO_ASTERISKS_200=The provided search filter \
+ "%s" could not be decoded because the assumed substring filter value between \
+ positions %d and %d did not have any asterisk wildcard characters
+MILD_ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_COLON_201=The provided search filter \
+ "%s" could not be decoded because the extensible match component starting at \
+ position %d did not have a colon to denote the end of the attribute type name
+MILD_ERR_LDAP_DISCONNECT_DUE_TO_INVALID_REQUEST_TYPE_202=Terminating this \
+ connection because the client sent an invalid message of type %s (LDAP \
+ message ID %d) that is not allowed for request messages
+SEVERE_ERR_LDAP_DISCONNECT_DUE_TO_PROCESSING_FAILURE_203=An unexpected \
+ failure occurred while trying to process a request of type %s (LDAP message \
+ ID %d):  %s.  The client connection will be terminated
+MILD_ERR_LDAP_INVALID_BIND_AUTH_TYPE_204=The bind request message (LDAP \
+ message ID %d) included an invalid authentication type of %s.  This is a \
+ protocol error, and this connection will be terminated as per RFC 2251 \
+ section 4.2.3
+MILD_ERR_LDAP_DISCONNECT_DUE_TO_BIND_PROTOCOL_ERROR_205=This client \
+ connection is being terminated because a protocol error occurred while trying \
+ to process a bind request.  The LDAP message ID was %d and the error message \
+ for the bind response was %s
+MILD_ERR_LDAPV2_SKIPPING_EXTENDED_RESPONSE_206=An extended response message \
+ would have been sent to an LDAPv2 client (connection ID=%d, operation ID=%d): \
+ %s.  LDAPv2 does not allow extended operations, so this response will not be \
+ sent
+MILD_ERR_LDAPV2_SKIPPING_SEARCH_REFERENCE_207=A search performed by an LDAPv2 \
+ client (connection ID=%d, operation ID=%d) would have included a search \
+ result reference %s.  Referrals are not allowed for LDAPv2 clients, so this \
+ search reference will not be sent
+MILD_ERR_LDAPV2_REFERRAL_RESULT_CHANGED_208=The original result code for this \
+ message was 10 but this result is not allowed for LDAPv2 clients
+MILD_ERR_LDAPV2_REFERRALS_OMITTED_209=The response included one or more \
+ referrals, which are not allowed for LDAPv2 clients.  The referrals included \
+ were:  %s
+MILD_ERR_LDAPV2_CLIENTS_NOT_ALLOWED_210=The Directory Server has been \
+ configured to deny access to LDAPv2 clients.  This connection will be closed
+MILD_ERR_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED_211=The client with connection \
+ ID %d authenticated to the Directory Server using LDAPv2, but attempted to \
+ send an extended operation request (LDAP message ID %d), which is not allowed \
+ for LDAPv2 clients.  The connection will be terminated
+MILD_ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION_212=An attempt was made to \
+ initialize the LDAP statistics monitor provider as defined in configuration \
+ entry %s.  This monitor provider should only be dynamically created within \
+ the Directory Server itself and not from within the configuration
+SEVERE_ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION_213=The LDAP request \
+ handler thread "%s" encountered an unexpected error that would have caused \
+ the thread to die:  %s.  The error has been caught and the request handler \
+ should continue operating as normal
+MILD_ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER_214=The attempt to register this \
+ connection with the Directory Server was rejected.  This may indicate that \
+ the server already has the maximum allowed number of concurrent connections \
+ established, or that it is in a restricted access mode
+INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_ADDRESS_215=Specifies the address or \
+ set of addresses on which this connection handler may accept client \
+ connections.  If no value is specified, then the server will accept \
+ connections on all active addresses.  Changes to this configuration attribute \
+ will not take effect until the connection handler is disabled and re-enabled, \
+ or until the Directory Server is restarted
+INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT_216=Specifies the TCP port on \
+ which this connection handler may accept client connections.  Changes to this \
+ configuration attribute will not take effect until the connection handler is \
+ disabled and re-enabled, or until the Directory Server is restarted
+INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOWED_CLIENTS_217=Specifies a set of \
+ address masks that may be used to determine the addresses of the clients that \
+ are allowed to establish connections to this connection handler.  If no \
+ values are specified, then all clients with addresses that do not match an \
+ address on the deny list will be allowed.  Changes to this configuration \
+ attribute will take effect immediately but will not interfere with \
+ connections that may already be established
+INFO_LDAP_CONNHANDLER_DESCRIPTION_DENIED_CLIENTS_218=Specifies a set of \
+ address masks that may be used to determine the set of addresses of the \
+ clients that are not allowed to establish connections to this connection \
+ handler.  If both allowed and denied client masks are defined and a client \
+ connection matches one or more masks in both lists, then the connection will \
+ be denied.  If only a denied list is specified, then any client not matching \
+ a mask in that list will be allowed.  Changes to this configuration attribute \
+ will take effect immediately but will not interfere with connections that may \
+ already be established
+INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_LDAPV2_219=Indicates whether to allow \
+ communication with LDAPv2 clients.  LDAPv2 is considered an obsolete \
+ protocol, and clients using it will not be allowed to take advantage of all \
+ features offered by the server.  Changes to this configuration attribute will \
+ take effect immediately, but will not interfere with connections that may \
+ already be established
+INFO_LDAP_CONNHANDLER_DESCRIPTION_NUM_REQUEST_HANDLERS_220=Specifies the \
+ number of threads that should be used to read requests from clients and place \
+ them in the work queue for processing.  On large systems accepting many \
+ concurrent requests, it may be more efficient to have multiple threads \
+ reading requests from clients.  Changes to this configuration attribute will \
+ not take effect until the connection handler is disabled and re-enabled, or \
+ until the Directory Server is restarted
+INFO_LDAP_CONNHANDLER_DESCRIPTION_SEND_REJECTION_NOTICE_221=Indicates whether \
+ to send an LDAPv3 notice of disconnection message to client connections that \
+ are rejected before closing the connection.  Changes to this configuration \
+ attribute will take effect immediately
+INFO_LDAP_CONNHANDLER_DESCRIPTION_USE_TCP_KEEPALIVE_222=Indicates whether to \
+ use the TCP KeepAlive feature for client connections established through this \
+ connection handler.  This is recommended because it may help the server \
+ detect client connections that are no longer valid, and may help prevent \
+ intermediate network devices from closing connections due to a lack of \
+ communication.  Changes to this configuration attribute will take effect \
+ immediately but will only be applied to connections established after the \
+ change
+INFO_LDAP_CONNHANDLER_DESCRIPTION_USE_TCP_NODELAY_223=Indicates whether to \
+ use the TCP NoDelay feature for client connections established through this \
+ connection handler.  This is recommended because it will generally allow \
+ faster responses to clients, although directories that frequently process \
+ searches that match multiple entries may be able to achieve higher throughput \
+ if it is disabled.  Changes to this configuration attribute will take effect \
+ immediately but will only be applied to connections established after the \
+ change
+INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_REUSE_ADDRESS_224=Indicates whether \
+ to use the SO_REUSEADDR socket option for the socket accepting connections \
+ for this connection handler.  It should generally be enabled unless you have \
+ been instructed to disable it by support engineers.  Changes to this \
+ configuration attribute will not take effect until the connection handler is \
+ disabled and re-enabled, or until the Directory Server is restarted
+INFO_LDAP_CONNHANDLER_DESCRIPTION_MAX_REQUEST_SIZE_225=Specifies the maximum \
+ size in bytes that will be allowed when reading requests from clients.  This \
+ can be used to prevent denial of service attacks from clients that send \
+ extremely large requests.  A value of zero indicates that no limit should be \
+ imposed.  Changes to this configuration attribute will take effect \
+ immediately
+INFO_LDAP_CONNHANDLER_DESCRIPTION_USE_SSL_226=Indicates whether this \
+ connection handler should use SSL when accepting connections from clients. \
+ Changes to this configuration attribute will not take effect until the \
+ connection handler is disabled and re-enabled, or until the Directory Server \
+ is restarted
+INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_STARTTLS_227=Indicates whether this \
+ connection handler should allow clients to use the StartTLS extended \
+ operation to initiate secure communication over a non-SSL LDAP connection. \
+ This may not be used if SSL is enabled for the connection handler.  Changes \
+ to this configuration attribute will take effect immediately for LDAP clients
+INFO_LDAP_CONNHANDLER_DESCRIPTION_SSL_CLIENT_AUTH_POLICY_228=Specifies the \
+ policy that should be used regarding requesting or requiring the client to \
+ present its own certificate when establishing an SSL-based connection or \
+ using StartTLS to initiate a secure channel in an established connection. \
+ Changes to this configuration attribute will not take effect until the \
+ connection handler is disabled and re-enabled, or until the Directory Server \
+ is restarted
+INFO_LDAP_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME_229=Specifies the \
+ nickname of the certificate that the connection handler should use when \
+ accepting SSL-based connections or performing StartTLS negotiation.  Changes \
+ to this configuration attribute will not take effect until the connection \
+ handler is disabled and re-enabled, or until the Directory Server is \
+ restarted
+SEVERE_ERR_LDAP_CONNHANDLER_UNKNOWN_LISTEN_ADDRESS_230=The specified listen \
+ address "%s" in configuration entry "%s" could not be resolved:  %s.  Please \
+ make sure that name resolution is properly configured on this system
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_LISTEN_ADDRESS_231=An unexpected \
+ error occurred while processing the ds-cfg-listen-address attribute in \
+ configuration entry %s, which is used to specify the address or set of \
+ addresses on which to listen for client connections:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_NO_LISTEN_PORT_232=No listen port was defined \
+ using configuration ds-cfg-listen-port in configuration entry %s.  This is a \
+ required attribute
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_LISTEN_PORT_233=An unexpected \
+ error occurred while processing the ds-cfg-listen-port attribute in \
+ configuration entry %s, which is used to specify the port on which to listen \
+ for client connections:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOWED_CLIENTS_234=An \
+ unexpected error occurred while processing the ds-cfg-allowed-client \
+ attribute in configuration entry %s, which is used to specify the address \
+ mask(s) of the clients that are allowed to establish connections to this \
+ connection handler:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_DENIED_CLIENTS_235=An unexpected \
+ error occurred while processing the ds-cfg-denied-client attribute in \
+ configuration entry %s, which is used to specify the address mask(s) of the \
+ clients that are not allowed to establish connections to this connection \
+ handler:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOW_LDAPV2_236=An unexpected \
+ error occurred while processing the ds-cfg-allow-ldapv2 attribute in \
+ configuration entry %s, which is used to indicate whether LDAPv2 clients will \
+ be allowed to access this connection handler:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_NUM_REQUEST_HANDLERS_237=An \
+ unexpected error occurred while processing the ds-cfg-num-request-handlers \
+ attribute in configuration entry %s, which is used to specify the number of \
+ request handlers to use to read requests from clients: %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_SEND_REJECTION_NOTICE_238=An \
+ unexpected error occurred while processing the ds-cfg-send-rejection-notice \
+ attribute in configuration entry %s, which is used to indicate whether to \
+ send a notice of disconnection message to rejected client connections: %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_USE_TCP_KEEPALIVE_239=An \
+ unexpected error occurred while processing the ds-cfg-use-tcp-keepalive \
+ attribute in configuration entry %s, which is used to periodically send TCP \
+ Keep-Alive messages over idle connections:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_USE_TCP_NODELAY_240=An \
+ unexpected error occurred while processing the ds-cfg-use-tcp-nodelay \
+ attribute in configuration entry %s, which is used to determine whether to \
+ immediately flush responses to clients:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOW_REUSE_ADDRESS_241=An \
+ unexpected error occurred while processing the ds-cfg-allow-tcp-reuse-address \
+ attribute in configuration entry %s, which is used to determine whether to \
+ set the SO_REUSEADDR option on the listen socket:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_MAX_REQUEST_SIZE_242=An \
+ unexpected error occurred while processing the ds-cfg-max-request-size \
+ attribute in configuration entry %s, which is used to determine the maximum \
+ size in bytes that may be used for a client request:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_USE_SSL_243=An unexpected error \
+ occurred while processing the ds-cfg-use-ssl attribute in configuration entry \
+ %s, which is used to indicate whether to use SSL when accepting client \
+ connections:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_HAVE_SSL_AND_STARTTLS_244=The LDAP \
+ connection handler defined in configuration entry %s is configured to \
+ communicate over SSL and also to allow clients to use the StartTLS extended \
+ operation.  These options may not be used at the same time, so clients will \
+ not be allowed to use the StartTLS operation
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOW_STARTTLS_245=An unexpected \
+ error occurred while processing the ds-cfg-allow-start-tls attribute in \
+ configuration entry %s, which is used to indicate whether clients may use the \
+ StartTLS extended operation:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_INVALID_SSL_CLIENT_AUTH_POLICY_246=The SSL client \
+ authentication policy "%s" specified in attribute \
+ ds-cfg-ssl-client-auth-policy of configuration entry %s is invalid.  The \
+ value must be one of "disabled", "optional", or "required"
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_CLIENT_AUTH_POLICY_247=An \
+ unexpected error occurred while processing the ds-cfg-ssl-client-auth-policy \
+ attribute in configuration entry %s, which is used to specify the policy that \
+ should be used for requesting/requiring SSL client authentication:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_CERT_NICKNAME_248=An \
+ unexpected error occurred while processing the ds-cfg-ssl-cert-nickname \
+ attribute in configuration entry %s, which is used to specify the nickname of \
+ the certificate to use for accepting SSL/TSL connections:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_INVALID_ADDRESS_MASK_249=The string %s defined in \
+ attribute %s of configuration entry %s could not be decoded as a valid \
+ address mask:  %s
+INFO_LDAP_CONNHANDLER_NEW_ALLOWED_CLIENTS_250=A new set of allowed client \
+ address masks has been applied for configuration entry %s
+INFO_LDAP_CONNHANDLER_NEW_DENIED_CLIENTS_251=A new set of denied client \
+ address masks has been applied for configuration entry %s
+INFO_LDAP_CONNHANDLER_NEW_ALLOW_LDAPV2_252=The value of the \
+ ds-cfg-allow-ldapv2 attribute has been updated to %s in configuration entry \
+ %s
+INFO_LDAP_CONNHANDLER_NEW_SEND_REJECTION_NOTICE_253=The value of the \
+ ds-cfg-send-rejection-notice attribute has been updated to %s in \
+ configuration entry %s
+INFO_LDAP_CONNHANDLER_NEW_USE_KEEPALIVE_254=The value of the \
+ ds-cfg-use-tcp-keepalive attribute has been updated to %s in configuration \
+ entry %s
+INFO_LDAP_CONNHANDLER_NEW_USE_TCP_NODELAY_255=The value of the \
+ ds-cfg-use-tcp-nodelay attribute has been updated to %s in configuration \
+ entry %s
+INFO_LDAP_CONNHANDLER_NEW_MAX_REQUEST_SIZE_256=The value of the \
+ ds-cfg-max-request-size attribute has been updated to %s in configuration \
+ entry %s
+INFO_LDAP_CONNHANDLER_NEW_ALLOW_STARTTLS_257=The value of the \
+ ds-cfg-allow-start-tls attribute has been updated to %s in configuration \
+ entry %s
+INFO_LDAP_CONNHANDLER_DESCRIPTION_KEEP_STATS_258=Indicates whether the \
+ connection handler should keep statistics regarding LDAP client \
+ communication.  Maintaining this information may cause a slight decrease in \
+ performance, but can be useful for understanding client usage patterns. \
+ Changes to this configuration attribute will take effect immediately, but \
+ will only apply for new connections and will have the side effect of clearing \
+ any existing statistical data that may have been collected
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_KEEP_STATS_259=An unexpected \
+ error occurred while processing the ds-cfg-keep-stats attribute in \
+ configuration entry %s, which is used to indicate whether LDAP usage \
+ statistics should be enabled for this connection handler:  %s
+INFO_LDAP_CONNHANDLER_NEW_KEEP_STATS_260=The value of the ds-cfg-keep-stats \
+ attribute has been updated to %s in configuration entry %s
+MILD_ERR_ASN1_LONG_SET_VALUE_INVALID_LENGTH_261=Cannot decode the provided \
+ byte array as the value of an ASN.1 long element because the array did not \
+ have a length between 1 and 8 bytes (provided length was %d)
+MILD_ERR_ASN1_LONG_DECODE_ELEMENT_INVALID_LENGTH_262=Cannot decode the \
+ provided ASN.1 element as a long element because the length of the element \
+ value was not between one and eight bytes (actual length was %d)
+MILD_ERR_ASN1_LONG_DECODE_ARRAY_INVALID_LENGTH_263=Cannot decode the provided \
+ byte array as an ASN.1 long element because the decoded value length was not \
+ between 1 and 8 bytes (decoded length was %d)
+SEVERE_ERR_INTERNAL_CANNOT_DECODE_DN_264=An unexpected error occurred while \
+ trying to decode the DN %s used for internal operations as a root user:  %s
+INFO_LDAP_CONNHANDLER_DESCRIPTION_SSL_ENABLED_PROTOCOLS_265=Specifies the \
+ names of the SSL protocols that will be allowed for use in SSL or StartTLS \
+ communication.  Changes to this configuration attribute will take immediately \
+ but will only impact new SSL/TLS-based sessions created after the change
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_PROTOCOLS_266=An unexpected \
+ error occurred while processing the ds-cfg-ssl-protocols attribute in \
+ configuration entry %s, which is used to specify the names of the SSL \
+ protocols to allow for SSL/TLS sessions:  %s
+INFO_LDAP_CONNHANDLER_DESCRIPTION_SSL_ENABLED_CIPHERS_267=Specifies the names \
+ of the SSL cipher suites that will be allowed for use in SSL or StartTLS \
+ communication.  Changes to this configuration attribute will take immediately \
+ but will only impact new SSL/TLS-based sessions created after the change
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_CIPHERS_268=An unexpected \
+ error occurred while processing the ds-cfg-ssl-protocols attribute in \
+ configuration entry %s, which is used to specify the names of the SSL cipher \
+ suites to allow for SSL/TLS sessions:  %s
+INFO_LDAP_CONNHANDLER_NEW_SSL_PROTOCOLS_269=The value of the \
+ ds-cfg-ssl-protocols attribute has been updated to %s in configuration entry \
+ %s
+INFO_LDAP_CONNHANDLER_NEW_SSL_CIPHERS_270=The value of the \
+ ds-cfg-ssl-cipher-suites attribute has been updated to %s in configuration \
+ entry %s
+MILD_ERR_LDAP_TLS_EXISTING_SECURITY_PROVIDER_271=The TLS connection security \
+ provider cannot be enabled on this client connection because it is already \
+ using the %s provider.  StartTLS may only be used on clear-text connections
+MILD_ERR_LDAP_TLS_STARTTLS_NOT_ALLOWED_272=StartTLS cannot be enabled on this \
+ LDAP client connection because the corresponding LDAP connection handler is \
+ configured to reject StartTLS requests.  The use of StartTLS may be enabled \
+ using the ds-cfg-allow-start-tls configuration attribute
+MILD_ERR_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER_273=An error occurred while \
+ attempting to create a TLS connection security provider for this client \
+ connection for use with StartTLS:  %s
+MILD_ERR_LDAP_TLS_NO_PROVIDER_274=StartTLS is not available on this client \
+ connection because the connection does not have access to a TLS connection \
+ security provider
+MILD_ERR_LDAP_TLS_CLOSURE_NOT_ALLOWED_275=The LDAP connection handler does \
+ not allow clients to close a StartTLS session on a client connection while \
+ leaving the underlying TCP connection active.  The TCP connection will be \
+ closed
+MILD_ERR_LDAP_CONNHANDLER_STARTED_LISTENING_276=Started listening for new \
+ connections on %s
+MILD_ERR_LDAP_CONNHANDLER_STOPPED_LISTENING_277=Stopped listening for new \
+ connections on %s
+MILD_ERR_LDAP_PAGED_RESULTS_DECODE_NULL_278=Cannot decode the provided ASN.1 \
+ element as an LDAP paged results control value because the element is null
+MILD_ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE_279=Cannot decode the provided \
+ ASN.1 element as an LDAP paged results control value because the element \
+ could not be decoded as a sequence:  %s
+MILD_ERR_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT_280=Cannot decode \
+ the provided ASN.1 element as an LDAP paged results control value because the \
+ request sequence has an invalid number of elements (expected 2, got %d)
+MILD_ERR_LDAP_PAGED_RESULTS_DECODE_SIZE_281=Cannot decode the provided ASN.1 \
+ element as an LDAP paged results control value because the size element could \
+ not be properly decoded:  %s
+MILD_ERR_LDAP_PAGED_RESULTS_DECODE_COOKIE_282=Cannot decode the provided \
+ ASN.1 element as an LDAP paged results control value because the cookie could \
+ not be properly decoded:  %s
+MILD_ERR_LDAPASSERT_NO_CONTROL_VALUE_283=Cannot decode the provided LDAP \
+ assertion control because the control does not have a value
+MILD_ERR_LDAPASSERT_INVALID_CONTROL_VALUE_284=Cannot decode the provided LDAP \
+ assertion control because the control value cannot be decoded as an ASN.1 \
+ element:  %s
+MILD_ERR_PREREADREQ_NO_CONTROL_VALUE_285=Cannot decode the provided LDAP \
+ pre-read request control because the control does not have a value
+MILD_ERR_PREREADREQ_CANNOT_DECODE_VALUE_286=Cannot decode the provided LDAP \
+ pre-read request control because an error occurred while trying to decode the \
+ control value:  %s
+MILD_ERR_POSTREADREQ_NO_CONTROL_VALUE_287=Cannot decode the provided LDAP \
+ post-read request control because the control does not have a value
+MILD_ERR_POSTREADREQ_CANNOT_DECODE_VALUE_288=Cannot decode the provided LDAP \
+ post-read request control because an error occurred while trying to decode \
+ the control value:  %s
+MILD_ERR_PREREADRESP_NO_CONTROL_VALUE_289=Cannot decode the provided LDAP \
+ pre-read response control because the control does not have a value
+MILD_ERR_PREREADRESP_CANNOT_DECODE_VALUE_290=Cannot decode the provided LDAP \
+ pre-read response control because an error occurred while trying to decode \
+ the control value:  %s
+MILD_ERR_POSTREADRESP_NO_CONTROL_VALUE_291=Cannot decode the provided LDAP \
+ post-read response control because the control does not have a value
+MILD_ERR_POSTREADRESP_CANNOT_DECODE_VALUE_292=Cannot decode the provided LDAP \
+ post-read response control because an error occurred while trying to decode \
+ the control value:  %s
+MILD_ERR_PROXYAUTH1_NO_CONTROL_VALUE_293=Cannot decode the provided proxied \
+ authorization V1 control because it does not have a value
+MILD_ERR_PROXYAUTH1_INVALID_ELEMENT_COUNT_294=Cannot decode the provided \
+ proxied authorization V1 control because the ASN.1 sequence in the control \
+ value has an invalid number of elements (expected 1, got %d)
+MILD_ERR_PROXYAUTH1_CANNOT_DECODE_VALUE_295=Cannot decode the provided \
+ proxied authorization V1 control because an error occurred while attempting \
+ to decode the control value:  %s
+MILD_ERR_PROXYAUTH1_NO_SUCH_USER_296=User %s specified in the proxied \
+ authorization V1 control does not exist in the Directory Server
+MILD_ERR_PROXYAUTH2_NO_CONTROL_VALUE_297=Cannot decode the provided proxied \
+ authorization V2 control because it does not have a value
+MILD_ERR_PROXYAUTH2_CANNOT_DECODE_VALUE_298=Cannot decode the provided \
+ proxied authorization V2 control because an error occurred while attempting \
+ to decode the control value:  %s
+MILD_ERR_PROXYAUTH2_NO_IDENTITY_MAPPER_299=Unable to process proxied \
+ authorization V2 control because it contains an authorization ID based on a \
+ username and no proxied authorization identity mapper is configured in the \
+ Directory Server
+MILD_ERR_PROXYAUTH2_INVALID_AUTHZID_300=The authorization ID "%s" contained \
+ in the proxied authorization V2 control is invalid because it does not start \
+ with "dn:" to indicate a user DN or "u:" to indicate a username
+MILD_ERR_PROXYAUTH2_NO_SUCH_USER_301=User %s specified in the proxied \
+ authorization V2 control does not exist in the Directory Server
+MILD_ERR_PSEARCH_CHANGETYPES_INVALID_TYPE_302=The provided integer value %d \
+ does not correspond to any persistent search change type
+MILD_ERR_PSEARCH_CHANGETYPES_NO_TYPES_303=The provided integer value \
+ indicated that there were no persistent search change types, which is not \
+ allowed
+MILD_ERR_PSEARCH_CHANGETYPES_INVALID_TYPES_304=The provided integer value %d \
+ was outside the range of acceptable values for an encoded change type set
+MILD_ERR_PSEARCH_NO_CONTROL_VALUE_305=Cannot decode the provided persistent \
+ search control because it does not have a value
+MILD_ERR_PSEARCH_INVALID_ELEMENT_COUNT_306=Cannot decode the provided \
+ persistent search control because the value sequence has an invalid number of \
+ elements (expected 3, got %d)
+MILD_ERR_PSEARCH_CANNOT_DECODE_VALUE_307=Cannot decode the provided \
+ persistent search control because an error occurred while attempting to \
+ decode the control value:  %s
+MILD_ERR_ECN_NO_CONTROL_VALUE_308=Cannot decode the provided entry change \
+ notification control because it does not have a value
+MILD_ERR_ECN_INVALID_ELEMENT_COUNT_309=Cannot decode the provided entry \
+ change notification control because the value sequence has an invalid number \
+ of elements (expected between 1 and 3, got %d)
+MILD_ERR_ECN_ILLEGAL_PREVIOUS_DN_310=Cannot decode the provided entry change \
+ notification control because it contains a previous DN element but had a \
+ change type of %s.  The previous DN element may only be provided with the \
+ modify DN change type
+MILD_ERR_ECN_INVALID_ELEMENT_TYPE_311=Cannot decode the provided entry change \
+ notification control because the second element in the value sequence has an \
+ invalid type of %s that is not appropriate for either a previous DN or a \
+ change number
+MILD_ERR_ECN_CANNOT_DECODE_VALUE_312=Cannot decode the provided entry change \
+ notification control because an error occurred while attempting to decode the \
+ control value:  %s
+MILD_ERR_AUTHZIDRESP_NO_CONTROL_VALUE_313=Cannot decode the provided \
+ authorization identity response control because it does not have a value
+MILD_ERR_LDAP_INTERMEDIATE_RESPONSE_DECODE_SEQUENCE_314=Cannot decode the \
+ provided ASN.1 element as an LDAP intermediate response protocol op because \
+ the element could not be decoded as a sequence:  %s
+MILD_ERR_LDAP_INTERMEDIATE_RESPONSE_DECODE_INVALID_ELEMENT_COUNT_315=Cannot \
+ decode the provided ASN.1 element as an LDAP intermediate response protocol \
+ op because the request sequence had an invalid number of elements (expected \
+ 0, 1, or or 2, got %d)
+MILD_ERR_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_OID_316=An error occurred \
+ while attempting to decode the intermediate response OID:  %s
+MILD_ERR_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_VALUE_317=An error occurred \
+ while attempting to decode the intermediate response value:  %s
+MILD_ERR_LDAP_INTERMEDIATE_RESPONSE_INVALID_ELEMENT_TYPE_318=The intermediate \
+ response sequence element contained an invalid BER type %s that was not \
+ appropriate for either the OID or the value
+INFO_LDAP_CONNHANDLER_DESCRIPTION_BACKLOG_319=Specifies the accept queue \
+ size, which controls the number of new connection attempts that may be \
+ allowed to queue up in the backlog before being rejected.  This should only \
+ need to be changed if it is expected that the Directory Server will receive \
+ large numbers of new connection attempts at the same time.  Changes to this \
+ configuration attribute will not take effect until the connection handler is \
+ disabled and re-enabled, or until the Directory Server is restarted
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_BACKLOG_320=An unexpected error \
+ occurred while processing the ds-cfg-accept-backlog attribute in \
+ configuration entry %s, which is used to specify the accept backlog size:  %s
+SEVERE_ERR_MVFILTER_INVALID_LDAP_FILTER_TYPE_321=The provided LDAP filter \
+ "%s" cannot be used as a matched values filter because filters of type %s are \
+ not allowed for use in matched values filters
+SEVERE_ERR_MVFILTER_INVALID_DN_ATTRIBUTES_FLAG_322=The provided LDAP filter \
+ "%s" cannot be used as a matched values filter because it is an extensible \
+ match filter that contains the dnAttributes flag, which is not allowed for \
+ matched values filters
+SEVERE_ERR_MVFILTER_INVALID_AVA_SEQUENCE_SIZE_323=The provided matched values \
+ filter could not be decoded because there were an invalid number of elements \
+ in the attribute value assertion (expected 2, got %d)
+SEVERE_ERR_MVFILTER_CANNOT_DECODE_AVA_324=An error occurred while attempting \
+ to decode the attribute value assertion in the provided matched values \
+ filter:  %s
+SEVERE_ERR_MVFILTER_INVALID_SUBSTRING_SEQUENCE_SIZE_325=The provided matched \
+ values filter could not be decoded because there were an invalid number of \
+ elements in the substring sequence (expected 2, got %d)
+SEVERE_ERR_MVFILTER_NO_SUBSTRING_ELEMENTS_326=The provided matched values \
+ filter could not be decoded because there were no subInitial, subAny, or \
+ subFinal components in the substring filter
+SEVERE_ERR_MVFILTER_MULTIPLE_SUBINITIALS_327=The provided matched values \
+ filter could not be decoded because there were multiple subInitial components \
+ in the substring filter
+SEVERE_ERR_MVFILTER_MULTIPLE_SUBFINALS_328=The provided matched values filter \
+ could not be decoded because there were multiple subFinal components in the \
+ substring filter
+SEVERE_ERR_MVFILTER_INVALID_SUBSTRING_ELEMENT_TYPE_329=The provided matched \
+ values filter could not be decoded because there was an invalid element of \
+ type %s in the substring filter
+SEVERE_ERR_MVFILTER_CANNOT_DECODE_SUBSTRINGS_330=The provided matched values \
+ filter could not be decoded because an error occurred while decoding the \
+ substring filter component:  %s
+SEVERE_ERR_MVFILTER_CANNOT_DECODE_PRESENT_TYPE_331=The provided matched \
+ values filter could not be decoded because an error occurred while decoding \
+ the presence filter component:  %s
+SEVERE_ERR_MVFILTER_INVALID_EXTENSIBLE_SEQUENCE_SIZE_332=The provided matched \
+ values filter could not be decoded because there were an invalid number of \
+ elements in the extensible match sequence (expected 2 or 3, found %d)
+SEVERE_ERR_MVFILTER_MULTIPLE_MATCHING_RULE_IDS_333=The provided matched \
+ values filter could not be decoded because there were multiple matching rule \
+ ID elements found in the extensible match filter sequence
+SEVERE_ERR_MVFILTER_MULTIPLE_ATTRIBUTE_TYPES_334=The provided matched values \
+ filter could not be decoded because there were multiple attribute type \
+ elements found in the extensible match filter sequence
+SEVERE_ERR_MVFILTER_MULTIPLE_ASSERTION_VALUES_335=The provided matched values \
+ filter could not be decoded because there were multiple assertion value \
+ elements found in the extensible match filter sequence
+SEVERE_ERR_MVFILTER_INVALID_EXTENSIBLE_ELEMENT_TYPE_336=The provided matched \
+ values filter could not be decoded because there was an invalid element of \
+ type %s in the extensible match filter
+SEVERE_ERR_MVFILTER_CANNOT_DECODE_EXTENSIBLE_MATCH_337=The provided matched \
+ values filter could not be decoded because an error occurred while decoding \
+ the extensible match filter component:  %s
+SEVERE_ERR_MVFILTER_INVALID_ELEMENT_TYPE_338=The provided matched values \
+ filter could not be decoded because it had an invalid BER type of %s
+SEVERE_ERR_MATCHEDVALUES_NO_CONTROL_VALUE_339=Cannot decode the provided \
+ matched values control because it does not have a value
+SEVERE_ERR_MATCHEDVALUES_CANNOT_DECODE_VALUE_AS_SEQUENCE_340=Cannot decode \
+ the provided matched values control because an error occurred while \
+ attempting to decode the value as an ASN.1 sequence:  %s
+SEVERE_ERR_MATCHEDVALUES_NO_FILTERS_341=Cannot decode the provided matched \
+ values control because the control value does not specify any filters for use \
+ in matching attribute values
+SEVERE_ERR_PWEXPIRED_CONTROL_INVALID_VALUE_342=Cannot decode the provided \
+ control as a password expired control because the provided control had a \
+ value that could not be parsed as an integer
+SEVERE_ERR_PWEXPIRING_NO_CONTROL_VALUE_343=Cannot decode the provided \
+ password expiring control because it does not have a value
+SEVERE_ERR_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION_344=Cannot \
+ decode the provided control as a password expiring control because an error \
+ occurred while attempting to decode the number of seconds until expiration: \
+ %s
+MILD_WARN_LDAP_CLIENT_DUPLICATE_MESSAGE_ID_345=The Directory Server is \
+ already processing another request on the same client connection with the \
+ same message ID of %d
+MILD_WARN_LDAP_CLIENT_CANNOT_ENQUEUE_346=The Directory Server encountered an \
+ unexpected error while attempting to add the client request to the work \
+ queue:  %s
+INFO_JMX_CONNHANDLER_DESCRIPTION_LISTEN_PORT_347=Specifies the TCP port on \
+ which this connection handler may accept administrative connections.  Changes \
+ to this configuration attribute will not take effect until the connection \
+ handler is disabled and re-enabled, or until the Directory Server is \
+ restarted
+SEVERE_ERR_JMX_CONNHANDLER_NO_LISTEN_PORT_348=No listen port was defined \
+ using configuration ds-cfg-listen-port in configuration entry %s.  This is a \
+ required attribute
+SEVERE_ERR_JMX_CONNHANDLER_CANNOT_DETERMINE_LISTEN_PORT_349=An unexpected \
+ error occurred while processing the ds-cfg-listen-port attribute in \
+ configuration entry %s, which is used to specify the port on which to listen \
+ for client connections:  %s
+INFO_JMX_CONNHANDLER_DESCRIPTION_USE_SSL_350=Indicates whether this \
+ connection handler should use SSL when accepting connections from clients. \
+ Changes to this configuration attribute will not take effect until the \
+ connection handler is disabled and re-enabled, or until the Directory Server \
+ is restarted
+SEVERE_ERR_JMX_CONNHANDLER_CANNOT_DETERMINE_USE_SSL_351=An unexpected error \
+ occurred while processing the ds-cfg-use-ssl attribute in configuration entry \
+ %s, which is used to indicate whether to use SSL when accepting client \
+ connections:  %s
+INFO_JMX_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME_352=Specifies the nickname \
+ of the certificate that the connection handler should use when accepting \
+ SSL-based connections or performing StartTLS negotiation.  Changes to this \
+ configuration attribute will not take effect until the connection handler is \
+ disabled and re-enabled, or until the Directory Server is restarted
+SEVERE_ERR_JMX_CONNHANDLER_CANNOT_DETERMINE_SSL_CERT_NICKNAME_353=An \
+ unexpected error occurred while processing the ds-cfg-ssl-cert-nickname \
+ attribute in configuration entry %s, which is used to specify the nickname of \
+ the certificate to use for accepting SSL/TSL connections:  %s
+SEVERE_ERR_PWPOLICYREQ_CONTROL_HAS_VALUE_354=Cannot decode the provided \
+ control as a password policy request control because the provided control had \
+ a value but the password policy request control should not have a value
+SEVERE_ERR_PWPOLICYRES_NO_CONTROL_VALUE_355=Cannot decode the provided \
+ password policy response control because it does not have a value
+SEVERE_ERR_PWPOLICYRES_INVALID_WARNING_TYPE_356=Cannot decode the provided \
+ password policy response control because the warning element has an invalid \
+ type of %s
+SEVERE_ERR_PWPOLICYRES_INVALID_ERROR_TYPE_357=Cannot decode the provided \
+ password policy response control because the error element has an invalid \
+ type of %d
+SEVERE_ERR_PWPOLICYRES_INVALID_ELEMENT_TYPE_358=Cannot decode the provided \
+ password policy response control because the value sequence has an element \
+ with an invalid type of %s
+SEVERE_ERR_PWPOLICYRES_DECODE_ERROR_359=Cannot decode the provided password \
+ policy response control:  %s
+INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_EXPIRED_360=passwordExpired
+INFO_PWPERRTYPE_DESCRIPTION_ACCOUNT_LOCKED_361=accountLocked
+INFO_PWPERRTYPE_DESCRIPTION_CHANGE_AFTER_RESET_362=changeAfterReset
+INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_MOD_NOT_ALLOWED_363=passwordModNotAllowed
+INFO_PWPERRTYPE_DESCRIPTION_MUST_SUPPLY_OLD_PASSWORD_364=mustSupplyOldPassword
+INFO_PWPERRTYPE_DESCRIPTION_INSUFFICIENT_PASSWORD_QUALITY_365=insufficientPasswordQuality
+INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_SHORT_366=passwordTooShort
+INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_YOUNG_367=passwordTooYoung
+INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_IN_HISTORY_368=passwordInHistory
+INFO_PWPWARNTYPE_DESCRIPTION_TIME_BEFORE_EXPIRATION_369=timeBeforeExpiration
+INFO_PWPWARNTYPE_DESCRIPTION_GRACE_LOGINS_REMAINING_370=graceAuthNsRemaining
+MILD_ERR_PROXYAUTH1_CANNOT_LOCK_USER_371=Unable to obtain a lock on user \
+ entry %s for the proxied authorization V1 control validation
+MILD_ERR_PROXYAUTH1_UNUSABLE_ACCOUNT_372=Use of the proxied authorization V1 \
+ control for user %s is not allowed by the password policy configuration
+MILD_ERR_PROXYAUTH2_CANNOT_LOCK_USER_373=Unable to obtain a lock on user \
+ entry %s for the proxied authorization V2 control validation
+MILD_ERR_PROXYAUTH2_UNUSABLE_ACCOUNT_374=Use of the proxied authorization V2 \
+ control for user %s is not allowed by the password policy configuration
+SEVERE_ERR_ACCTUSABLEREQ_CONTROL_HAS_VALUE_375=Cannot decode the provided \
+ control as an account availability request control because the provided \
+ control had a value but the account availability request control should not \
+ have a value
+SEVERE_ERR_ACCTUSABLERES_NO_CONTROL_VALUE_376=Cannot decode the provided \
+ account availability response control because it does not have a value
+SEVERE_ERR_ACCTUSABLERES_UNKNOWN_UNAVAILABLE_TYPE_377=The account \
+ availability response control indicated that the account was unavailable but \
+ had an unknown unavailable element type of %s
+SEVERE_ERR_ACCTUSABLERES_UNKNOWN_VALUE_ELEMENT_TYPE_378=The account \
+ availability response control had an unknown ACCOUNT_USABLE_RESPONSE element \
+ type of %s
+SEVERE_ERR_ACCTUSABLERES_DECODE_ERROR_379=Cannot decode the provided account \
+ availability response control:  %s
+SEVERE_ERR_ADDRESSMASK_PREFIX_DECODE_ERROR_380=Cannot decode the provided \
+ address mask prefix because aninvalid value was specified. The permitted \
+ values for IPv4are 0 to32 and for IPv6 0 to128
+SEVERE_ERR_ADDRESSMASK_WILDCARD_DECODE_ERROR_381=Cannot decode the provided \
+ address mask because an prefix maskwas specified with an wild card "*" match \
+ character
+SEVERE_ERR_ADDRESSMASK_FORMAT_DECODE_ERROR_382=Cannot decode the provided \
+ address mask because the it has an invalid format
+MILD_ERR_LDAP_NO_CLEAR_SECURITY_PROVIDER_383=LDAP connection handler %s could \
+ not send a clear-text response to the client because it does not have a \
+ reference to a clear connection security provider
+MILD_ERR_LDAP_ATTRIBUTE_DUPLICATE_VALUES_384=The provided LDAP attribute %s \
+ contains duplicate values
+MILD_ERR_LDAP_FILTER_UNKNOWN_MATCHING_RULE_385=The provided LDAP search \
+ filter references unknown matching rule %s
+MILD_ERR_LDAP_FILTER_VALUE_WITH_NO_ATTR_OR_MR_386=The provided LDAP search \
+ filter has an assertion value but does not include either an attribute type \
+ or a matching rule ID
+FATAL_ERR_LDAP_REQHANDLER_DETECTED_JVM_ISSUE_CR6322825_387=Unable to call \
+ select() in the LDAP connection handler:  %s.  It appears that your JVM may \
+ be susceptible to the issue described at \
+ http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6322825, and it is unable \
+ to handle LDAP requests in its current configuration.  Please upgrade to a \
+ newer JVM that does not exhibit this behavior (Java 5.0 Update 8 or higher) \
+ or set the number of available file descriptors to a value greater than or \
+ equal to 8193 (e.g., by issuing the command 'ulimit -n 8193') before starting \
+ the Directory Server
+MILD_ERR_PROXYAUTH1_CONTROL_NOT_CRITICAL_388=Unwilling to process the request \
+ because it contains a proxied authorization V1 control which is not marked \
+ critical.  The proxied authorization control must always have a criticality \
+ of "true"
+MILD_ERR_PROXYAUTH2_CONTROL_NOT_CRITICAL_389=Unwilling to process the request \
+ because it contains a proxied authorization V2 control which is not marked \
+ critical.  The proxied authorization control must always have a criticality \
+ of "true"
+INFO_LDAP_CONNHANDLER_DESCRIPTION_KEYMANAGER_DN_390=Specifies the DN of the \
+ configuration entry for the key manager provider that should be used with \
+ this LDAP connection handler.  Changes to this attribute will take effect \
+ immediately, but only for subsequent attempts to access the key manager \
+ provider for associated client connections
+SEVERE_ERR_LDAP_CONNHANDLER_INVALID_KEYMANAGER_DN_391=Configuration attribute \
+ ds-cfg-key-manager-provider-dn of configuration entry %s has an invalid value \
+ %s which does not reference an enabled key manager provider
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_KEYMANAGER_DN_392=An error \
+ occurred while processing the ds-cfg-key-manager-provider-dn attribute in \
+ configuration entry %s, which is used to specify the key manager provider for \
+ use with the LDAP connection handler:  %s
+INFO_LDAP_CONNHANDLER_DESCRIPTION_TRUSTMANAGER_DN_393=Specifies the DN of the \
+ configuration entry for the trust manager provider that should be used with \
+ this LDAP connection handler.  Changes to this attribute will take effect \
+ immediately, but only for subsequent attempts to access the trust manager \
+ provider for associated client connections
+SEVERE_ERR_LDAP_CONNHANDLER_INVALID_TRUSTMANAGER_DN_394=Configuration \
+ attribute ds-cfg-trust-manager-provider-dn of configuration entry %s has an \
+ invalid value %s which does not reference an enabled trust manager provider
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_DETERMINE_TRUSTMANAGER_DN_395=An error \
+ occurred while processing the ds-cfg-trust-manager-provider-dn attribute in \
+ configuration entry %s, which is used to specify the trust manager provider \
+ for use with the LDAP connection handler:  %s
+INFO_LDAP_CONNHANDLER_NEW_KEYMANAGER_DN_396=The value of the \
+ ds-cfg-key-manager-provider-dn attribute has been updated to %s in \
+ configuration entry %s
+INFO_LDAP_CONNHANDLER_NEW_TRUSTMANAGER_DN_397=The value of the \
+ ds-cfg-trust-manager-provider-dn attribute has been updated to %s in \
+ configuration entry %s
+INFO_JMX_CONNHANDLER_DESCRIPTION_KEYMANAGER_DN_398=Specifies the DN of the \
+ key manager provider that the connection handler should use when accepting \
+ SSL-based connections or performing StartTLS negotiation.  Changes to this \
+ configuration attribute will take effect immediately
+SEVERE_ERR_JMX_CONNHANDLER_INVALID_KEYMANAGER_DN_399=An error occurred while \
+ processing the ds-cfg-key-manager-provider-dn attribute in configuration \
+ entry %s, because the provided key manager DN %s does not refer to an enabled \
+ key manager provider
+SEVERE_ERR_JMX_CONNHANDLER_CANNOT_DETERMINE_KEYMANAGER_DN_400=An unexpected \
+ error occurred while processing the ds-cfg-key-manager-provider-dn attribute \
+ in configuration entry %s, which is used to specify the DN of the key manager \
+ provider to use for accepting SSL/TSL connections:  %s
+MILD_ERR_LDAP_CONNHANDLER_CANNOT_SET_SECURITY_PROVIDER_401=An error occurred \
+ while attempting to configure the connection security provider for the client \
+ connection:  %s
+SEVERE_ERR_LDAP_CONNHANDLER_NO_KEYMANAGER_DN_402=The LDAP connection handler \
+ defined in configuration entry %s is configured to use either SSL or \
+ StartTLS, but does not specify which key manager provider should be used
+SEVERE_ERR_LDAP_CONNHANDLER_NO_TRUSTMANAGER_DN_403=The LDAP connection \
+ handler defined in configuration entry %s is configured to use either SSL or \
+ StartTLS, but does not specify which trust manager provider should be used
+INFO_LDAPS_CONNHANDLER_DESCRIPTION_ENABLE_404=Specifies whether to enable the \
+ LDAPS connection handler
+MILD_ERR_LDAP_FILTER_NOT_EXACTLY_ONE_405=The provided search filter "%s" \
+ could not be decoded because the NOT filter between positions %d and %d did \
+ not contain exactly one filter component
+INFO_SORTREQ_CONTROL_NO_VALUE_406=Unable to decode the provided control as a \
+ server-side sort request control because it does not include a control value
+INFO_SORTREQ_CONTROL_UNDEFINED_ATTR_407=Unable to process the provided \
+ server-side sort request control because it references attribute type %s \
+ which is not defined in the server schema
+INFO_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE_408=Unable to process the \
+ provided server-side sort request control because it references undefined \
+ ordering matching rule %s
+INFO_SORTREQ_CONTROL_INVALID_SEQ_ELEMENT_TYPE_409=Unable to process the \
+ provided server-side sort request control because the value sequence contains \
+ an element with an unsupported type of %s
+INFO_SORTREQ_CONTROL_CANNOT_DECODE_VALUE_410=Unable to process the provided \
+ server-side sort request control because an error occurred while attempting \
+ to decode the control value:  %s
+INFO_SORTRES_CONTROL_NO_VALUE_411=Unable to decode the provided control as a \
+ server-side sort response control because it does not include a control value
+INFO_SORTRES_CONTROL_CANNOT_DECODE_VALUE_412=Unable to process the provided \
+ server-side sort response control because an error occurred while attempting \
+ to decode the control value:  %s
+INFO_SORTREQ_CONTROL_NO_ATTR_NAME_413=Unable to process the provided \
+ server-side sort request control because the sort order string "%s" included \
+ a sort key with no attribute name
+INFO_SORTREQ_CONTROL_NO_MATCHING_RULE_414=Unable to process the provided \
+ server-side sort request control because the sort order string "%s" included \
+ a sort key with a colon but no matching rule name
+INFO_SORTREQ_CONTROL_NO_SORT_KEYS_415=Unable to process the provided \
+ server-side sort request control because it did not contain any sort keys
+INFO_SORTREQ_CONTROL_NO_ORDERING_RULE_FOR_ATTR_416=Unable to process the \
+ provided server-side sort request control because it included attribute %s \
+ which does not have a default ordering matching rule and no ordering rule was \
+ specified in the sort key
+INFO_VLVREQ_CONTROL_NO_VALUE_417=Unable to decode the provided control as a \
+ VLV request control because it does not include a control value
+INFO_VLVREQ_CONTROL_INVALID_ELEMENT_COUNT_418=Unable to decode the provided \
+ control as a VLV request control because it contains an invalid number of \
+ elements:  %d
+INFO_VLVREQ_CONTROL_INVALID_TARGET_TYPE_419=Unable to decode the provided \
+ control as a VLV request control because the target element type %s is \
+ invalid
+INFO_VLVREQ_CONTROL_CANNOT_DECODE_VALUE_420=Unable to process the provided \
+ VLV request control because an error occurred while attempting to decode the \
+ control value:  %s
+INFO_VLVRES_CONTROL_NO_VALUE_421=Unable to decode the provided control as a \
+ VLV response control because it does not include a control value
+INFO_VLVRES_CONTROL_INVALID_ELEMENT_COUNT_422=Unable to decode the provided \
+ control as a VLV response control because it contains an invalid number of \
+ elements:  %d
+INFO_VLVRES_CONTROL_CANNOT_DECODE_VALUE_423=Unable to process the provided \
+ VLV response control because an error occurred while attempting to decode the \
+ control value:  %s
+INFO_GETEFFECTIVERIGHTS_INVALID_AUTHZID_424=The authorization ID "%s" \
+ contained in the geteffectiverights control is invalid because it does not \
+ start with "dn:" to indicate a user DN
+INFO_GETEFFECTIVERIGHTS_DECODE_ERROR_425=Cannot decode the provided \
+ geteffectiverights request control:  %s
+INFO_CANNOT_DECODE_GETEFFECTIVERIGHTS_AUTHZID_DN_426=Unable to decode authzid \
+ DN string "%s" as a valid distinguished name:  %s
+MILD_ERR_LDAP_FILTER_ENCLOSED_IN_APOSTROPHES_427=An LDAP filter enclosed in \
+ apostrophes is invalid:  %s
+INFO_JMX_CONNHANDLER_DESCRIPTION_ENABLE_428=Specifies whether to enable the \
+ JMX connection handler
+MILD_ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE_429=The provided search filter \
+ contains an invalid attribute type '%s' with invalid character '%s' at \
+ position %d
+MILD_ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR_430=The provided search \
+ filter "%s" could not be decoded because the extensible match component \
+ starting at position %d did not include either an attribute description or a \
+ matching rule ID.  At least one of them must be provided
+MILD_ERR_LDAPV2_CONTROLS_NOT_ALLOWED_431=LDAPv2 clients are not allowed to \
+ use request controls
+SEVERE_ERR_LDAP_CONNHANDLER_CANNOT_BIND_432=The LDAP connection handler \
+ defined in configuration entry %s was unable to bind to %s:%d:  %s
+SEVERE_ERR_JMX_CONNHANDLER_CANNOT_BIND_433=The JMX connection handler defined \
+ in configuration entry %s was unable to bind to port %d:  %s
+MILD_ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES_434=You do not have sufficient \
+ privileges to perform add operations through JMX
+MILD_ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES_435=You do not have sufficient \
+ privileges to perform delete operations through JMX
+MILD_ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES_436=You do not have sufficient \
+ privileges to perform modify operations through JMX
+MILD_ERR_JMX_MODDN_INSUFFICIENT_PRIVILEGES_437=You do not have sufficient \
+ privileges to perform modify DN operations through JMX
+MILD_ERR_JMX_SEARCH_INSUFFICIENT_PRIVILEGES_438=You do not have sufficient \
+ privileges to perform search operations through JMX
+MILD_ERR_JMX_INSUFFICIENT_PRIVILEGES_439=You do not have sufficient \
+ privileges to establish the connection through JMX. At least JMX_READ \
+ privilege is required
diff --git a/opendj-sdk/opends/src/messages/messages/quicksetup.properties b/opendj-sdk/opends/src/messages/messages/quicksetup.properties
new file mode 100644
index 0000000..0724ad2
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/quicksetup.properties
@@ -0,0 +1,1082 @@
+global.category=QUICKSETUP
+global.ordinal=-1
+
+INFO_ADMINISTRATOR_ALREADY_REGISTERED=Administrator already registered.
+INFO_ADS_EXCEPTION=An unexpected error occurred managing the registration \
+ information.%nThe error is: %s
+INFO_BACKGROUND_ICON=images/opendsbackground.png
+INFO_BACKGROUND_ICON_DESCRIPTION=OpenDS QuickSetup.
+INFO_BACKGROUND_ICON_TOOLTIP=OpenDS QuickSetup
+INFO_BASE_DN_IS_CONFIGURATION_DN=The provided Directory Base DN is used for \
+ storing the server configuration data. You must specify a different DN.
+INFO_BASE_DN_LABEL=Directory Base DN:
+INFO_BASE_DN_TOOLTIP=Enter the DN of the top entry where your data will be \
+ stored
+INFO_BROWSE_BUTTON_LABEL=Browse...
+INFO_BROWSE_BUTTON_TOOLTIP=Click to display a file system browser
+INFO_BUG_MSG=An unexpected error occurred.
+INFO_BUILD_EXTRACTOR_ERROR=Failed to extract build: %s
+INFO_BUILD_EXTRACTOR_ERROR_FILE_NO_EXIST=File %s does not exist.
+INFO_BUILD_EXTRACTOR_ERROR_FILE_NOT_ZIP=File %s is not a .zip file.
+INFO_BUILD_EXTRACTOR_FILE_INVALID=Could not extract a valid OpenDS \
+ installation from %s because: %s
+INFO_BUILD_MANAGER_DOWNLOADING_BUILD=Downloading Build...
+INFO_BUILD_MANAGER_DOWNLOADING_BUILD_DONE=Finished Downloading Build
+INFO_BUILD_MANAGER_DOWNLOADING_BUILD_PROGRESS=Downloading Build: %s%% \
+ Completed
+INFO_CANCEL_BUTTON_LABEL=Cancel
+INFO_CANCEL_BUTTON_TOOLTIP=Cancel the currently running operation
+INFO_CANNOT_BIND_PORT=Cannot bind to port %s.%n%nThe port could be already in \
+ use by another application or maybe you do not have the rights to access it.
+INFO_CANNOT_BIND_PRIVILEDGED_PORT=Cannot bind to privileged port %s.%n%nThe \
+ port could be already in use by another application or maybe you do not have \
+ the rights to access it.
+INFO_CANNOT_CONNECT_TO_REMOTE_AUTHENTICATION=The provided credentials are not \
+ valid.
+INFO_CANNOT_CONNECT_TO_REMOTE_GENERIC=Could not connect to %s. The error \
+ message received is:%n%s%nCheck that the server is running and that the \
+ provided credentials are valid.
+INFO_CANNOT_CONNECT_TO_REMOTE_PERMISSIONS=You do not have enough access \
+ rights to read the configuration in %s. %nProvide credentials with enough \
+ rights.
+INFO_CANNOT_CONNECT_TO_SHUTDOWN_WITH_CAUSE=Could not connect to the Directory \
+ Server with the provided credentials.  The possible causes for this are:%n%s
+INFO_CANNOT_CONNECT_TO_SHUTDOWN_WITHOUT_CAUSE=Could not connect to the \
+ Directory Server with the provided credentials.%nCheck that the \
+ Administrative User DN and password are valid.
+INFO_CANNOT_UPDATE_SECURITY_WARNING=Disabled.  A valid keytool command could \
+ not be found.
+INFO_CANNOT_USE_DEFAULT_PORT=Could not use 389. Port in use or user not \
+ authorized.
+INFO_CANNOT_USE_DEFAULT_SECURE_PORT=Could not use 636. Port in use or user \
+ not authorized.
+INFO_CERTIFICATE_CHAIN_COMBO_TOOLTIP=To view the details of a given \
+ certificate select it.
+INFO_CERTIFICATE_CHAIN_LABEL=Certificate Chain:
+INFO_CERTIFICATE_DIALOG_CANCEL_BUTTON_TOOLTIP=Close this dialog and do not \
+ accept the certificate.
+INFO_CERTIFICATE_DIALOG_OK_BUTTON_TOOLTIP=Close this dialog and accept the \
+ certificate.
+INFO_CERTIFICATE_DIALOG_TITLE=Certificate Not Trusted
+INFO_CERTIFICATE_EXCEPTION=You must accept the certificate presented by \
+ %s:%s.
+INFO_CERTIFICATE_EXPIRED=%s - Expired
+INFO_CERTIFICATE_EXPIRES_ON_LABEL=Expires On:
+INFO_CERTIFICATE_HIDE_DETAILS_TEXT=<br><br><a href="">Hide Certificate \
+ Details</a>
+INFO_CERTIFICATE_ISSUED_BY_LABEL=Issued By:
+INFO_CERTIFICATE_LABEL=Certificate:
+INFO_CERTIFICATE_NAME_MISMATCH_TEXT=The Certificate presented by the server \
+ %0$s:%1$s could not be trusted.<br><br>There is a name mismatch between the \
+ name of the server (%0$s) and the subject DN of the certificate.  This could \
+ be caused because you are connected to a server pretending to be \
+ %0$s:%1$s.<br><br>Before accepting this certificate, you should examine the \
+ server''s certificate carefully.<br><br>Are you willing to accept this \
+ certificate for the purpose of identifying the server %0$s:%1$s?
+INFO_CERTIFICATE_NOT_TRUSTED_TEXT=The Certificate presented by the server \
+ %0$s:%1$s could not be trusted.<br><br>Possible reasons for this \
+ error:<br>&nbsp;&nbsp;&nbsp;&nbsp;-The Certificate Authority that issued the \
+ certificate is not recognized (this is the case of the self-signed \
+ certificates).<br>&nbsp;&nbsp;&nbsp;&nbsp;-The server''s certificate is \
+ incomplete due to a misconfiguration.<br>&nbsp;&nbsp;&nbsp;&nbsp;-The \
+ server''s certificate has expired.<br>Before accepting this certificate, you \
+ should examine the server''s certificate carefully.<br><br>Are you willing to \
+ accept this certificate for the purpose of identifying the server %0$s:%1$s?
+INFO_CERTIFICATE_NOT_VALID_YET=%s - Not valid yet
+INFO_CERTIFICATE_PUBLIC_KEY_LABEL=Public Key:
+INFO_CERTIFICATE_SERIAL_NUMBER_LABEL=Serial Number:
+INFO_CERTIFICATE_SHOW_DETAILS_TEXT=<br><br><a href="">Show Certificate \
+ Details</a>
+INFO_CERTIFICATE_SIGNATURE_ALGORITHM_LABEL=Signature Algorithm:
+INFO_CERTIFICATE_SIGNATURE_LABEL=Signature:
+INFO_CERTIFICATE_SUBJECT_LABEL=Subject:
+INFO_CERTIFICATE_TITLE=Certificate Not Trusted
+INFO_CERTIFICATE_TYPE_LABEL=Type:
+INFO_CERTIFICATE_VALID_FROM_LABEL=Valid From:
+INFO_CERTIFICATE_VERSION_LABEL=Version:
+INFO_CHECKBOX_COLOR=000,000,000
+INFO_CLI_ERROR_READING_STDIN=Unexpected error reading standard input.
+INFO_CLI_UNKNOWN_ARGUMENT=Unknown argument %s
+INFO_CLI_UPGRADE_UNKNOWN_ARGUMENT=Unknown argument %s
+INFO_CLOSE_BUTTON_INSTALL_TOOLTIP=Close Setup Window
+INFO_CLOSE_BUTTON_LABEL=Close
+INFO_CLOSE_BUTTON_TOOLTIP=Close Setup Window
+INFO_CLOSE_PROGRESS_BUTTON_TOOLTIP=Close Progress Dialog
+INFO_COMBOBOX_BACKGROUND_COLOR=255,255,255
+INFO_CONFIRM_CANCEL_INSTALL_MSG=Are you sure you want to cancel OpenDS \
+ QuickSetup?%nIf you click 'Yes' nothing will be installed on your system.
+INFO_CONFIRM_CANCEL_INSTALL_TITLE=Confirmation Required
+INFO_CONFIRM_CANCEL_PROMPT=Cancel the running operation?
+INFO_CONFIRM_CANCEL_TITLE=Confirmation Required
+INFO_CONFIRM_CANCEL_UPGRADE_MSG=OpenDS QuickUpgrade has not yet \
+ completed.%nIf you click 'Yes' any changes that have been made to the server \
+ being upgraded will be backed out.%n%nAre you sure you want to close the \
+ QuickUpgrade Window?%n
+INFO_CONFIRM_CANCEL_UPGRADE_TITLE=Confirmation Required
+INFO_CONFIRM_CLOSE_INSTALL_MSG=OpenDS QuickSetup has not yet completed.%nAre \
+ you sure you want to close the QuickSetup Window?
+INFO_CONFIRM_CLOSE_INSTALL_TITLE=Confirmation Required
+INFO_CONFIRM_QUIT_INSTALL_MSG=Are you sure you want to quit OpenDS \
+ QuickSetup?%nIf you click 'Yes' nothing will be installed on your system.
+INFO_CONFIRM_QUIT_INSTALL_TITLE=Confirmation Required
+INFO_CONFIRM_QUIT_UPGRADE_MSG=Are you sure you want to quit OpenDS \
+ QuickUpgrade?%nIf you click 'Yes' nothing will be upgraded on your system.
+INFO_CONFIRM_QUIT_UPGRADE_TITLE=Confirmation Required
+INFO_CONFIRMATION_TITLE=Confirmation Required
+INFO_CONTACTING_SERVER_LABEL=Contacting server...
+INFO_CONTINUE_BUTTON_INSTALL_TOOLTIP=Continue with Setup
+INFO_CONTINUE_BUTTON_LABEL=Continue
+INFO_COULD_NOT_LAUNCH_STATUS_PANEL_MSG=An unexpected error occurred launching \
+ the Status Panel.
+INFO_CREATE_BASE_ENTRY_LABEL=Only Create Base Entry (%s)
+INFO_CREATE_BASE_ENTRY_TOOLTIP=Only create the top entry for the Directory \
+ Base DN
+INFO_CREATE_GLOBAL_ADMINISTRATOR_STEP=Global Administrator
+INFO_CREATE_NEW_SUFFIX_LABEL=Create first instance of base DN to be \
+ replicated
+INFO_CREATE_NEW_SUFFIX_TOOLTIP=Check this to create a new base DN.
+INFO_CURRENT_STEP_ICON=images/currentstep.png
+INFO_CURRENT_STEP_ICON_DESCRIPTION=Current Step Indicator.
+INFO_CURRENT_STEP_ICON_TOOLTIP=Current Step Indicator
+INFO_CURRENT_STEP_PANEL_BACKGROUND_COLOR=255,255,255
+INFO_DATA_OPTIONS_PANEL_INSTRUCTIONS=Choose options for the LDAP data to be \
+ hosted by OpenDS.
+INFO_DATA_OPTIONS_PANEL_TITLE=Directory Data
+INFO_DATA_OPTIONS_STEP=Directory Data
+INFO_DATA_REPLICATION_OPTIONS_PANEL_INSTRUCTIONS=Choose the Data Replication \
+ Options.
+INFO_DATA_REPLICATION_OPTIONS_PANEL_TITLE=Topology Options
+INFO_DATA_REPLICATION_STEP=Topology Options
+INFO_DEFAULT_BACKGROUND_COLOR=236,236,236
+INFO_DEFAULT_LABEL_COLOR=000,000,000
+INFO_DETAILS_LABEL=Details:
+INFO_DIRECTORY_DATA_LABEL=Directory Data:
+INFO_DIRECTORY_EXISTS_NOT_EMPTY=The directory %s is not empty.
+INFO_DIRECTORY_MANAGER_DN_IS_CONFIG_DN=The provided Administrative User DN is \
+ used for the configuration of the Directory Server.
+INFO_DIRECTORY_NOT_WRITABLE=You do not have write access on the directory %s. \
+ You must have file right access on the Installation directory.
+INFO_DIV_OPEN_ERROR_BACKGROUND_1_COLOR=000000
+INFO_DIV_OPEN_ERROR_BACKGROUND_2_COLOR=FFFFCC
+INFO_DIV_OPEN_ERROR_BACKGROUND_3_COLOR=E1E1A7
+INFO_DIV_OPEN_SUCCESSFUL_BACKGROUND_1_COLOR=000000
+INFO_DIV_OPEN_SUCCESSFUL_BACKGROUND_2_COLOR=FFFFCC
+INFO_DIV_OPEN_SUCCESSFUL_BACKGROUND_3_COLOR=E1E1A7
+INFO_DOWNLOADING=Downloading...
+INFO_DOWNLOADING_ERROR=An error occurred downloading remote file(s) %s.
+INFO_DOWNLOADING_RATIO=Downloading: %s%% Completed.
+INFO_EMPTY_ADMINISTRATOR_PWD=You must provide a Global Administrative User \
+ Password.
+INFO_EMPTY_ADMINISTRATOR_UID=You must provide a Global Administrative User \
+ ID.
+INFO_EMPTY_BASE_DN=You must provide a Directory Base DN.
+INFO_EMPTY_DIRECTORY_MANAGER_DN=You must provide an Administrative User DN.
+INFO_EMPTY_HOST_NAME=You must provide the name of the host.
+INFO_EMPTY_PWD=You must provide the password of the Administrative User.
+INFO_EMPTY_REMOTE_DN=You must provide a value for the Administrative User.
+INFO_EMPTY_REMOTE_HOST=You must provide the fully qualified name of the host.
+INFO_EMPTY_REMOTE_PWD=You must provide an Admin User password.
+INFO_EMPTY_SERVER_LOCATION=Invalid Directory Selected You must provide a \
+ valid OpenDS root installation directory.
+INFO_ENABLE_SSL=Enable SSL on LDAP Port %s
+INFO_ENABLE_SSL_LABEL=Enable SSL on Port:
+INFO_ENABLE_SSL_TOOLTIP=Enables SSL on the specified port.
+INFO_ENABLE_STARTTLS=Enable StartTLS
+INFO_ENABLE_STARTTLS_LABEL=Enable StartTLS for LDAP
+INFO_ENABLE_STARTTLS_TOOLTIP=Allows encrypted communication over the standard \
+ LDAP port.
+INFO_ENABLE_WINDOWS_SERVICE_LABEL=Run OpenDS as a Windows Service
+INFO_ENABLE_WINDOWS_SERVICE_TOOLTIP=Check this check box if you want OpenDS \
+ to run as a Windows Service.
+INFO_EQUAL_PORTS=You must specify different ports for LDAP and LDAPS \
+ communication.
+INFO_ERROR_ACCESSING_JKS_KEYSTORE=Could not access the JKS key store.  Check \
+ that the contents of the file correspond to a valid JKS key store, that you \
+ have access rights to it and that the provided password is valid.
+INFO_ERROR_ACCESSING_PKCS11_KEYSTORE=Could not access the PKCS#11 key store. \
+ Check that is installed and that the provided password is valid.
+INFO_ERROR_ACCESSING_PKCS12_KEYSTORE=Could not access the PKCS#12 key store. \
+ Check that the contents of the file correspond to a valid PKCS#12 key store, \
+ that you have access rights to it and that the provided password is valid.
+INFO_ERROR_APPLY_LDIF_ADD=Error processing add operation of %s: %s
+INFO_ERROR_APPLY_LDIF_DELETE=Error processing delete operation of %s: %s
+INFO_ERROR_APPLY_LDIF_MODIFY=Error processing modification operation of %s: \
+ %s
+INFO_ERROR_APPLYING_CUSTOM_CONFIG=Error applying configuration customizations \
+ to server.
+INFO_ERROR_APPLYING_CUSTOM_SCHEMA=Error applying schema customizations to \
+ server.
+INFO_ERROR_ARTIFICIAL=Artificial error.
+INFO_ERROR_BACKUP_DB=Error backing up databases.
+INFO_ERROR_BACKUP_DB_TOOL_RETURN_CODE=The backup tool returned error code %s.
+INFO_ERROR_BACKUP_FILESYSTEM=Error backing up files.
+INFO_ERROR_BAD_STAGE_DIRECTORY=Directory %s does not contain a staged \
+ installation of OpenDS as was expected.  Verify that the new installation \
+ package (.zip) is an OpenDS installation file and that you have write access \
+ permission for this directory.
+INFO_ERROR_BROWSER_CLOSE_BUTTON_TOOLTIP=Close this window
+INFO_ERROR_BROWSER_COPY_BUTTON_LABEL=Copy URL
+INFO_ERROR_BROWSER_COPY_BUTTON_TOOLTIP=Copies the URL to the system clipboard
+INFO_ERROR_BROWSER_DISPLAY_MSG=Could not launch the web browser.<br>You can \
+ copy and paste the following URL manually into your web browser:<br><span \
+ style="font-style:italic">%s</span>
+INFO_ERROR_BROWSER_DISPLAY_TITLE=Error
+INFO_ERROR_CONFIGURING=Error Configuring Directory Server.
+INFO_ERROR_CONFIGURING_CERTIFICATE=Error Configuring Certificates.
+INFO_ERROR_CONFIGURING_REMOTE_GENERIC=An unexpected error occurred \
+ configuring server %s.%nThe error is: %s
+INFO_ERROR_CONNECTING_TO_LOCAL=An unexpected error occurred connecting to the \
+ server.
+INFO_ERROR_COPYING=An unexpected error occurred extracting file %s.
+INFO_ERROR_COPYING_FILE=Error copying file %s to %s.
+INFO_ERROR_COULD_NOT_CREATE_PARENT_DIR=Could not create parent directory %s. \
+ Check that you have file system access rights.
+INFO_ERROR_CREATING_BASE_ENTRY=Error Creating Base Entry.
+INFO_ERROR_CREATING_BUILD_INFO=Error determining OpenDS build information.
+INFO_ERROR_CREATING_TEMP_FILE=An error occurred creating the temporary file.
+INFO_ERROR_DELETING_DIRECTORY=Error deleting directory %s.  Check that you \
+ have the rights to delete this directory and that there is no other \
+ application using it.
+INFO_ERROR_DELETING_FILE=Error deleting file %s.  Check that you have the \
+ rights to delete this file and that there is no other application using it.
+INFO_ERROR_DELETING_STAGE_DIRECTORY=Error deleting stage directory %s.
+INFO_ERROR_DETERMINING_CURRENT_BUILD=Error determining current build \
+ information.
+INFO_ERROR_DETERMINING_CUSTOM_CONFIG=Error determining configuration \
+ customizations.
+INFO_ERROR_DETERMINING_CUSTOM_SCHEMA=Error determining schema customizations.
+INFO_ERROR_DETERMINING_SERVER_STATE=Failed to determine the server's state.
+INFO_ERROR_DETERMINING_SVN_REV=Error determining installation's Subversion \
+ revision number.
+INFO_ERROR_DETERMINING_UPGRADE_BUILD=Error determining upgrade build \
+ information.
+INFO_ERROR_DISABLING_WINDOWS_SERVICE=Error Disabling Windows service.  Try to \
+ kill the process opends_service.exe and the running the \
+ %s\bat\windows-service.bat -d command-line to disable the service manually.
+INFO_ERROR_DURING_INITIALIZATION_LOG=Error during the initialization with \
+ contents from server %s.  Last log details: %s.  Task state: %s.  Check the \
+ error logs of the server for more information.
+INFO_ERROR_DURING_INITIALIZATION_NO_LOG=Error during the initialization with \
+ contents from server %0$s.  Task state: %1$s.  Check the error logs of %0$s \
+ for more information.
+INFO_ERROR_EMPTY_RESPONSE=ERROR:  The response value may not be an empty \
+ string
+INFO_ERROR_ENABLING_WINDOWS_SERVICE=Error Enabling Windows service.
+INFO_ERROR_FAILED_MOVING_FILE=Failed to move file %s to %s.  Make sure this \
+ file is not currently locked by another application.
+INFO_ERROR_FAILED_TO_CREATE_STAGE_DIRECTORY=Failed to create staging \
+ directory %s.
+INFO_ERROR_ICON=images/error_small.gif
+INFO_ERROR_ICON_DESCRIPTION=Error.
+INFO_ERROR_ICON_TOOLTIP=Error
+INFO_ERROR_IMPORT_AUTOMATICALLY_GENERATED=Error Importing \
+ Automatically-Generated Data when invoked with arguments %s:  %s.
+INFO_ERROR_IMPORT_LDIF_TOOL_RETURN_CODE=The import LDIF tool returned error \
+ code %s.
+INFO_ERROR_IMPORTING_LDIF=Error Importing LDIF File.
+INFO_ERROR_INITIALIZING_LOG=Error initializing log.
+INFO_ERROR_INITIALIZING_UPGRADE=Error initializing upgrade.
+INFO_ERROR_INSTALL_ROOT_DIR_EMPTY=Directory %s is either empty or you lack \
+ permissionsto access its contents.
+INFO_ERROR_INSTALL_ROOT_DIR_NO_DIR=Directory %s does not contain directory \
+ %s.
+INFO_ERROR_INSTALL_ROOT_DIR_NO_EXIST=Directory %s does not exist.
+INFO_ERROR_INSTALL_ROOT_DIR_NOT_DIR=File %s is not an OpenDS installation \
+ root.
+INFO_ERROR_INSTALL_ROOT_DIR_NULL=The root directory is null.
+INFO_ERROR_INVALID_PORT_VALUE=Invalid port value %s.  A port number must be \
+ an integer between 1 and 65535.
+INFO_ERROR_INVALID_SERVER_LOCATION=Invalid Directory Selected: %s%nEither the \
+ selected directory is not a valid OpenDS root installation%ndirectory or you \
+ do not have access permissions for this directory.
+INFO_ERROR_LARGE_ICON=images/error_large.gif
+INFO_ERROR_LAUNCHING_INITIALIZATION=Error launching initialization with \
+ contents from server %s.
+INFO_ERROR_LDIF_DIFF_TOOL_RETURN_CODE=The LDIF diff tool returned error code \
+ %s.
+INFO_ERROR_LOGGING_OPERATION=Error writting operation details to log.
+INFO_ERROR_OPTION_REQUIRED=Option %s is required.
+INFO_ERROR_OPTION_REQUIRED_OR_INTERACTIVE=Option %s is required when not \
+ invoking this command in interactive mode.  See the usage statement.
+INFO_ERROR_PARSING_OPTIONS=Error parsing options.
+INFO_ERROR_POOLING_INITIALIZATION=Error reading the progress of the \
+ initialization with contents from server %s.
+INFO_ERROR_PORT_IN_USE=The server can not be started as another application \
+ is using port %s.  Check that you have access to this port before restarting \
+ the server.
+INFO_ERROR_PROP_VALUE=The value of property %s could not be determined.
+INFO_ERROR_READING_ERROROUTPUT=Error Reading error output.
+INFO_ERROR_READING_OUTPUT=Error Reading output.
+INFO_ERROR_READING_REGISTERED_SERVERS_CONFIRM=The following errors where \
+ encountered reading the configuration of the existing servers:%n%s%n%nDo you \
+ want to continue?
+INFO_ERROR_READING_SERVER_CONFIGURATION=Error reading configuration. \
+ Details:%n%s
+INFO_ERROR_REFLECTION=An unexpected error occurred while loading classes.
+INFO_ERROR_RENAMING_FILE=Error renaming file %s to %s.
+INFO_ERROR_RESTORING_FILE=The following could not be restored after the \
+ failed upgrade attempt.  You should restore this file/directory manually: %s \
+ to %s
+INFO_ERROR_SERVER_HEALTH_CHECK_FAILURE=Server health check failed.
+INFO_ERROR_SERVER_STATUS=Error determining the server's status.
+INFO_ERROR_STARTING_SERVER=Error Starting Directory Server.
+INFO_ERROR_STARTING_SERVER_CODE=Error Starting Directory Server.  Error code: \
+ %s.
+INFO_ERROR_STARTING_SERVER_IN_UNIX=Could not connect to the server after \
+ after requesting start.  Verify that the server has access rights to port %s.
+INFO_ERROR_STARTING_SERVER_IN_WINDOWS=Could not connect to the server after \
+ requesting start.  If you have a firewall configured check that it allows \
+ connections to port %s.
+INFO_ERROR_STARTING_SERVER_WITH_NO_CONNECTION_HANDLERS=Error Starting Server \
+ with no connection handlers: %s.
+INFO_ERROR_STOPPING_SERVER=Error Stopping Directory Server.
+INFO_ERROR_STOPPING_SERVER_CODE=Error Stopping Directory Server.  Error code: \
+ %s.
+INFO_ERROR_TITLE=Error
+INFO_ERROR_UPGRADE_MIGRATION=Migration Error
+INFO_ERROR_UPGRADE_MIGRATION_ADD=An attempt to add entry <b>%s</b> to the \
+ newly upgraded server was unsuccessful.
+INFO_ERROR_UPGRADE_MIGRATION_CONFIG=Configuration Migration Error
+INFO_ERROR_UPGRADE_MIGRATION_DELETE=An attempt to delete entry <b>%s</b> to \
+ the newly upgraded server was unsuccessful.
+INFO_ERROR_UPGRADE_MIGRATION_MODIFY=An attempt to modify entry <b>%s</b> to \
+ the newly upgraded server was unsuccessful.
+INFO_ERROR_UPGRADE_MIGRATION_NOTE=You can cancel this upgrade altogether, \
+ continue anyway or retry this operation.  If you cancel the server will be \
+ restored to the state it was in before the upgrade was attempted.  If you \
+ continue you should be aware that the server may not configured as it was \
+ before this upgrade.  A copy of the original installation files will be kept \
+ in <i>%s</i>.
+INFO_ERROR_UPGRADE_MIGRATION_SCHEMA=Schema Migration Error
+INFO_ERROR_UPGRADE_MIGRATION_UNEXPECTED=An unexpected error occured while \
+ processing entry <b>%s</b>.
+INFO_ERROR_UPGRADED_SERVER_STARTS_WITH_ERRORS=The upgraded server starts with \
+ errors: %s
+INFO_ERROR_UPGRADING_COMPONENTS=Error upgrading components.
+INFO_ERROR_WRITING_TO_TEMP_FILE=An error occurred writing to temporary file \
+ %s.
+INFO_ERROR_ZIP_STREAM=An unexpected error occurred reading the zip file %s.
+INFO_ERROR_ZIPINPUTSTREAMNULL=Could not retrieve zip file %s.  The input \
+ stream is null.
+INFO_EXCEPTION_DETAILS=Details: %s
+INFO_EXCEPTION_OUT_OF_MEMORY_DETAILS=Not enough memory to perform the \
+ operation.  Details: %s
+INFO_EXCEPTION_ROOT_CAUSE=Root Cause:
+INFO_FIELD_INVALID_COLOR=255,000,000
+INFO_FIELD_VALID_COLOR=000,000,000
+INFO_FILE_DOES_NOT_EXIST=Path %s does not exist.
+INFO_FILE_EXISTS=The file %s already exists.
+INFO_FINISH_BUTTON_INSTALL_LABEL=Finish
+INFO_FINISH_BUTTON_INSTALL_TOOLTIP=Finish Installation and Setup
+INFO_FINISH_BUTTON_LABEL=Finish
+INFO_FINISH_BUTTON_TOOLTIP=Finish Setup
+INFO_FINISH_BUTTON_UPGRADE_TOOLTIP=Finish Upgrade
+INFO_FINISHED_PANEL_TITLE=Finished
+INFO_FINISHED_STEP=Finished
+INFO_FRAME_INSTALL_TITLE=OpenDS QuickSetup
+INFO_FRAME_UPGRADE_TITLE=OpenDS QuickUpgrade
+INFO_GENERAL_ACTION_REQUIRED=Action Required
+INFO_GENERAL_BUILD_ID=Build ID
+INFO_GENERAL_CHECKING_DATA=Checking Data...
+INFO_GENERAL_INFO=Information
+INFO_GENERAL_LOADING=Loading...
+INFO_GENERAL_NONE=None
+INFO_GENERAL_SEE_FOR_DETAILS=See %s for a detailed log of this operation.
+INFO_GENERAL_SEE_FOR_HISTORY=See %s for a history installation history.
+INFO_GENERAL_SERVER_STARTED=started
+INFO_GENERAL_SERVER_STOPPED=stopped
+INFO_GENERAL_UNSET=Unset
+INFO_GENERAL_UNSPECIFIED=Unspecified
+INFO_GENERAL_UNSUPPORTED=Unsupported
+INFO_GENERAL_WARNING=Warning
+INFO_GLOBAL_ADMINISTRATOR_DESCRIPTION=The Administrator that can manage all \
+ the OpenDS instances.
+INFO_GLOBAL_ADMINISTRATOR_PANEL_INSTRUCTIONS=Provide the informaton to create \
+ a Global Administrator that will able to manage your whole replication \
+ topology.
+INFO_GLOBAL_ADMINISTRATOR_PANEL_TITLE=Create Global Administrator
+INFO_GLOBAL_ADMINISTRATOR_PWD_CONFIRM_LABEL=Global Administrator Password \
+ (confirm):
+INFO_GLOBAL_ADMINISTRATOR_PWD_CONFIRM_TOOLTIP=Confirm the password of the \
+ Global Administrator.
+INFO_GLOBAL_ADMINISTRATOR_PWD_LABEL=Global Administrator Password:
+INFO_GLOBAL_ADMINISTRATOR_PWD_TOOLTIP=The Global Administrator Password.
+INFO_GLOBAL_ADMINISTRATOR_UID_LABEL=Global Administrator ID:
+INFO_GLOBAL_ADMINISTRATOR_UID_TOOLTIP=The Global Administrator ID.
+INFO_HELP_SMALL_ICON=images/help_small.gif
+INFO_HELP_SMALL_ICON_DESCRIPTION=Help icon.
+INFO_HELP_WAIT_DESCRIPTION=Busy, please wait.
+INFO_HIDE_DETAILS_BUTTON_LABEL=Hide Details
+INFO_HIDE_EXCEPTION_DETAILS=Hide Details
+INFO_HOST_NAME_LABEL=Host Name:
+INFO_HOST_NAME_TOOLTIP=Enter the name of the host.
+INFO_HTML_SEPARATOR_COLOR=666666
+INFO_IMPORT_AUTOMATICALLY_GENERATED_LABEL=Import Automatically-Generated \
+ Example Data
+INFO_IMPORT_AUTOMATICALLY_GENERATED_TOOLTIP=Populate the base DN with \
+ automatically-generated LDAP data
+INFO_IMPORT_DATA_FROM_LDIF_LABEL=Import Data from LDIF File
+INFO_IMPORT_DATA_FROM_LDIF_TOOLTIP=Use the contents of an LDIF file to \
+ populate the base DN with data
+INFO_IMPORT_PATH_LABEL=Path:
+INFO_IMPORT_PATH_TOOLTIP=Enter the full path of the LDIF file containing the \
+ data to be imported
+INFO_INFO_IGNORING_FILE=Ignoring %s since %s exists.
+INFO_INFORMATION_ICON=images/info_small.gif
+INFO_INFORMATION_ICON_DESCRIPTION=Information.
+INFO_INFORMATION_ICON_TOOLTIP=Information
+INFO_INFORMATION_LARGE_ICON=images/info_large.gif
+INFO_INITIALIZE_PROGRESS_WITH_PERCENTAGE=%s entries processed (%s %% \
+ complete).
+INFO_INITIALIZE_PROGRESS_WITH_PROCESSED=%s entries processed.
+INFO_INITIALIZE_PROGRESS_WITH_UNPROCESSED=%s remaining to be processed.
+INFO_INSTALL_SERVER_MUST_BE_TEMPORARILY_STARTED=The Server will be \
+ temporarily started.
+INFO_INSTALLANDUPGRADE_WELCOME_PANEL_INSTRUCTIONS=The OpenDS QuickSetup tool \
+ can either install and configure a new server instance or upgrade an existing \
+ server instance. In either case, QuickSetup will use the latest weekly build, \
+ which in this case is: %s (Build ID: %s) <br><br> You can also use QuickSetup \
+ to set up a weekly build you have downloaded manually. To run QuickSetup in \
+ this case, use the setup command at the top level of the OpenDS \
+ directory.<br><br> OpenDS requires a Java SE 5.0 or higher runtime.<br><br> \
+ Additional information on QuickSetup is available on the <a \
+ href="https://www.opends.org/wiki/page/OverviewOfTheQuickSetupTool"> OpenDS \
+ documentation wiki</a>.
+INFO_INSTALLANDUPGRADE_WELCOME_PANEL_TITLE=Welcome
+INFO_INSTALLANDUPGRADER_RBINSTALL_LABEL=Install New Server Instance
+INFO_INSTALLANDUPGRADER_RBINSTALL_TOOLTIP=Select to install a new server \
+ instance.
+INFO_INSTALLANDUPGRADER_RBUPGRADE_LABEL=Upgrade Existing Server Instance
+INFO_INSTALLANDUPGRADER_RBUPGRADE_TOOLTIP=Select to upgrade an existing \
+ server instance.
+INFO_INSTALLSTATUS_CANOVERWRITECURRENTINSTALL_MSG=The Directory Server \
+ contains some database files.<br>If you continue with the setup the contents \
+ of these database files will be deleted.
+INFO_INSTALLSTATUS_CONFIGFILEMODIFIED=Has already been configured
+INFO_INSTALLSTATUS_DBFILEEXIST=Contains data
+INFO_INSTALLSTATUS_INSTALLED=OpenDS Server Already Configured<br> QuickSetup \
+ can only be used with OpenDS Servers that have not yet been configured.  The \
+ current server:%s
+INFO_INSTALLSTATUS_NOT_INSTALLED=The Directory Server is not installed.
+INFO_INSTALLSTATUS_SERVERRUNNING=Is currently running on port %s
+INFO_INSTRUCTIONS_COLOR=000,000,000
+INFO_INVALID_CHAR_IN_PATH=The path contains the character "%s" which is not \
+ allowed to install OpenDS.
+INFO_INVALID_NUMBER_ENTRIES_RANGE=The number of user entries to generate \
+ automatically must be an integer between %s and %s.
+INFO_INVALID_PORT_VALUE_RANGE=The LDAP Listener Port must be an integer \
+ between %s and %s.
+INFO_INVALID_REMOTE_PORT=The provided port is not valid.
+INFO_INVALID_REMOTE_REPLICATION_PORT_VALUE_RANGE=The Replication Port on %s \
+ must be an integer between %s and %s.
+INFO_INVALID_REPLICATION_PORT_VALUE_RANGE=The Replication Port must be an \
+ integer between %s and %s.
+INFO_INVALID_SECURE_PORT_VALUE_RANGE=The LDAPS Listener Port must be an \
+ integer between %s and %s.
+INFO_JKS_CERTIFICATE=Use existing Java Key Store File
+INFO_JKS_CERTIFICATE_LABEL=Java Key Store (JKS) File
+INFO_JKS_CERTIFICATE_TOOLTIP=Select this option if you have a JKS \
+ certificate.
+INFO_JKS_KEYSTORE_DOES_NOT_EXIST=No certificates for the Java Key Store could \
+ be found.  Check that the provided path is valid.
+INFO_KEYSTORE_PATH_DOES_NOT_EXIST=The provided key store path does not exist.
+INFO_KEYSTORE_PATH_LABEL=Key Store Path:
+INFO_KEYSTORE_PATH_NOT_A_FILE=The provided key store path is not a file.
+INFO_KEYSTORE_PATH_NOT_PROVIDED=You must provide the path of the key store.
+INFO_KEYSTORE_PATH_TOOLTIP=Absolute path to the keystore.
+INFO_KEYSTORE_PWD_EMPTY=You must provide the password of the key store.
+INFO_KEYSTORE_PWD_LABEL=Key Store Password:
+INFO_KEYSTORE_PWD_TOOLTIP=Provide the password required to access the \
+ existing key store.
+INFO_KEYSTORE_TYPE_LABEL=Key Store Type:
+INFO_LDIF_FILE_DOES_NOT_EXIST=The provided LDIF file does not exist.
+INFO_LDIF_FILES_DESCRIPTION=LDAP Data Interchange Format (*.ldif)
+INFO_LEAVE_DATABASE_EMPTY_LABEL=Leave Database Empty
+INFO_LEAVE_DATABASE_EMPTY_TOOLTIP=Do not create any entry for the Directory \
+ Base DN
+INFO_MINIMIZED_ICON=images/opendsminimized.gif
+INFO_MINIMIZED_ICON_DESCRIPTION=OpenDS QuickSetup minimized.
+INFO_MINIMIZED_ICON_TOOLTIP=OpenDS QuickSetup
+INFO_MINIMIZED_MAC_ICON=images/opendsminimizedmac.png
+INFO_NETWORK_ERROR_TITLE=Network Error
+INFO_NEXT_BUTTON_LABEL=Next >
+INFO_NEXT_BUTTON_TOOLTIP=Go to Next Step
+INFO_NO_ENTRIES_TO_INITIALIZE=No entries found to initialize.
+INFO_NO_LDIF_PATH=You must provide the path of the LDIF file to import.
+INFO_NO_NUMBER_ENTRIES=You must provide the number of user entries to \
+ generate automatically.
+INFO_NO_SECURITY=disabled
+INFO_NO_SUFFIXES_CHOSEN_TO_REPLICATE=You must select at least one base DN to \
+ replicate contents with.
+INFO_NOT_A_BASE_DN=The provided Directory Base DN is not a valid DN.
+INFO_NOT_A_DIRECTORY_MANAGER_DN=The provided Administrative User DN is not a \
+ valid DN.
+INFO_NOT_A_DIRECTORY_MANAGER_IN_CONFIG=The provided DN is not one of the \
+ Administrative User DN.
+INFO_NOT_AVAILABLE_LABEL=<not available>
+INFO_NOT_ENOUGH_DISK_SPACE=There is not enough free disk space under %s.%nAt \
+ least %s megabytes of free disk space are required to install OpenDS.
+INFO_NOT_EQUAL_PWD=The passwords you have provided do not match.
+INFO_NOT_GLOBAL_ADMINISTRATOR_PROVIDED=You must provide the Global \
+ Administrator ID to be able to access the configuration of all the remote \
+ servers that have been previously installed.
+INFO_NUMBER_ENTRIES_LABEL=Number of User Entries:
+INFO_NUMBER_ENTRIES_TOOLTIP=Enter the number of user entries to be generated
+INFO_OK_BUTTON_LABEL=OK
+INFO_OPEN_GENERIC_FILE_DIALOG_TITLE=Choose a File
+INFO_OPEN_LDIF_FILE_DIALOG_TITLE=Choose an LDIF File
+INFO_OPEN_SERVER_LOCATION_DIALOG_TITLE=Choose Installation Path
+INFO_OPEN_ZIP_FILE_DIALOG_TITLE=Choose an OpenDS Installation Package (.zip)
+INFO_OPENDS_SMALL_ICON=images/opends_logo_small.png
+INFO_OPENDS_SMALL_ICON_DESCRIPTION=OpenDS icon.
+INFO_OPTIONPANE_BACKGROUND_COLOR=255,255,255
+INFO_ORACLE_ACTION_PROMPT=Have you performed the tasks described?
+INFO_ORACLE_ACTION_PROMPT_CANCEL=No, Cancel
+INFO_ORACLE_ACTION_PROMPT_CONTINUE=Yes, Continue
+INFO_ORACLE_DESC_ACTION=This operation requires that you perform specific \
+ tasks described in the details section before continuing.
+INFO_ORACLE_EI_ACTION_STEP1=Before starting the operation you should export \
+ the entire data set for this server to LDIF format.  <b>If you have not \
+ completed this step you should cancel this operation now</b>.
+INFO_ORACLE_EI_ACTION_STEP2=Continue with this operation until this tool has \
+ finished.
+INFO_ORACLE_EI_ACTION_STEP3=When this operation is complete, manually delete \
+ the files in the 'db' directory.
+INFO_ORACLE_EI_ACTION_STEP4=Reimport that data from the LDIF file that you \
+ had created in the first step.
+INFO_ORACLE_INFO_PROMPT=Would you like to continue with this operation?
+INFO_ORACLE_NO_SILENT=This operation includes specific instructions and/or \
+ questions that you must follow.  Silent mode is not supported for this \
+ version.
+INFO_PANEL_BACKGROUND_COLOR=255,255,255
+INFO_PANEL_BORDER_COLOR=204,204,204
+INFO_PARENT_DIRECTORY_COULD_NOT_BE_FOUND=Could not find a parent directory \
+ for %s.
+INFO_PARENT_DIRECTORY_DOES_NOT_EXIST_CONFIRMATION=The parent directory of %s \
+ does not exist.%nWould you like to create this directory?
+INFO_PASSWORDFIELD_COLOR=000,000,000
+INFO_PKCS11_CERTIFICATE=Use existing PKCS#11 Token
+INFO_PKCS11_CERTIFICATE_LABEL=PKCS#11 Token
+INFO_PKCS11_CERTIFICATE_TOOLTIP=Select this option if you have a PKCS#11 \
+ token.
+INFO_PKCS11_KEYSTORE_DOES_NOT_EXIST=No certificates for the PCKS#11 key store \
+ could be found.  Check that is installed, that you have access rights to it \
+ and that the key store contains certificates.
+INFO_PKCS12_CERTIFICATE=Use existing PKCS#12 File
+INFO_PKCS12_CERTIFICATE_LABEL=PKCS#12 File
+INFO_PKCS12_CERTIFICATE_TOOLTIP=Select this option if you have a PKCS#12 \
+ certificate.
+INFO_PKCS12_KEYSTORE_DOES_NOT_EXIST=No certificates for the PCKS#12 key store \
+ could be found.  Check that the provided path and password are valid and that \
+ the key store contains certificates.
+INFO_PREVIOUS_BUTTON_LABEL=< Previous
+INFO_PREVIOUS_BUTTON_TOOLTIP=Go to Previous Step
+INFO_PROGRESS_CANCEL=Waiting to cancel operation.
+INFO_PROGRESS_COLOR=000,000,000
+INFO_PROGRESS_CONFIGURING=Configuring Directory Server
+INFO_PROGRESS_CONFIGURING_REPLICATION=Configuring Replication
+INFO_PROGRESS_CONFIGURING_REPLICATION_REMOTE=Configuring Replication on %s
+INFO_PROGRESS_COPYING_FILE=Copying file %s to %s
+INFO_PROGRESS_CREATING_ADMINISTRATOR=Creating Global Administrator
+INFO_PROGRESS_CREATING_ADS=Creating Registration Configuration
+INFO_PROGRESS_CREATING_ADS_ON_REMOTE=Creating Registration Configuration on \
+ %s
+INFO_PROGRESS_CREATING_BASE_ENTRY=Creating Base Entry %s
+INFO_PROGRESS_DELETING_DIRECTORY=Deleting directory %s
+INFO_PROGRESS_DELETING_EXTERNAL_DB_FILES=Deleting Database Files outside the \
+ Installation Path:
+INFO_PROGRESS_DELETING_EXTERNAL_LOG_FILES=Deleting Log Files outside the \
+ Installation Path:
+INFO_PROGRESS_DELETING_FILE=Deleting file %s
+INFO_PROGRESS_DELETING_FILE_DOES_NOT_EXIST=Ignoring file %s since it does not \
+ exist.
+INFO_PROGRESS_DELETING_INSTALLATION_FILES=Deleting Files under the \
+ Installation Path:
+INFO_PROGRESS_DETAILS_LABEL=Details:
+INFO_PROGRESS_DIALOG_TITLE=Progress
+INFO_PROGRESS_DISABLING_WINDOWS_SERVICE=Disabling Windows Service...
+INFO_PROGRESS_DONE=Done.
+INFO_PROGRESS_DOWNLOADING=Downloading
+INFO_PROGRESS_ENABLING_WINDOWS_SERVICE=Enabling Windows Service...
+INFO_PROGRESS_ERROR=Error.
+INFO_PROGRESS_EXTRACTING=Extracting %s
+INFO_PROGRESS_IMPORT_AUTOMATICALLY_GENERATED=Importing \
+ Automatically-Generated Data (%s Entries):
+INFO_PROGRESS_IMPORTING_LDIF=Importing LDIF file %s:
+INFO_PROGRESS_INITIALIZING_ADS=Initializing Registration information
+INFO_PROGRESS_INITIALIZING_SUFFIX=Initializing base DN %s with the contents \
+ from %s:
+INFO_PROGRESS_PANEL_TITLE=Progress
+INFO_PROGRESS_POINTS=.....
+INFO_PROGRESS_SERVER_ALREADY_STOPPED=The Directory Server is already stopped.
+INFO_PROGRESS_SERVER_STOPPED=Server stopped.
+INFO_PROGRESS_SERVER_WAITING_TO_STOP=Waiting for Server to stop...
+INFO_PROGRESS_STARTING=Starting Directory Server:
+INFO_PROGRESS_STEP=Progress
+INFO_PROGRESS_STOPPING=Stopping Directory Server:
+INFO_PROGRESS_TITLE=Progress
+INFO_PROGRESS_UNCONFIGURING_ADS_ON_REMOTE=Reverting Registration \
+ Configuration on %s
+INFO_PROGRESS_UNCONFIGURING_REPLICATION_REMOTE=Unconfiguring Replication on \
+ %s
+INFO_PROGRESS_UPDATING_CERTIFICATES=Configuring Certificates
+INFO_PROGRESSBAR_INITIAL_LABEL=Starting...
+INFO_PROGRESSBAR_TOOLTIP=Progress Bar
+INFO_PWD_TOO_SHORT=The minimum length required for the Administrative User \
+ password is %s characters.
+INFO_QUIT_BUTTON_INSTALL_TOOLTIP=Quit Setup
+INFO_QUIT_BUTTON_LABEL=Quit
+INFO_QUIT_BUTTON_UPGRADE_TOOLTIP=Quit Upgrade
+INFO_READ_ONLY_COLOR=000,000,000
+INFO_REMOTE_ADS_EXCEPTION=An unexpected error occurred managing the \
+ registration information in %s.%nThe error is: %s
+INFO_REMOTE_REPLICATION_PORT_ALREADY_CHOSEN_FOR_OTHER_PROTOCOL=You must \
+ specify a different Replication port for existing server %s.  The specified \
+ port has already been chosen to configure the new server.
+INFO_REMOTE_REPLICATION_PORT_INSTRUCTIONS=You must provide the ports that \
+ will be used to replicate data for the remote servers specified below.<br>The \
+ specified ports must be free on the remote hosts and the user that is being \
+ used to run the Directory Servers must have access rights to them.
+INFO_REMOTE_REPLICATION_PORT_TITLE=Replication Port of Remote Servers
+INFO_REMOTE_REPLICATION_PORTS_STEP=Replication Port
+INFO_REMOTE_SERVER_DN_LABEL=Admin User:
+INFO_REMOTE_SERVER_DN_TOOLTIP=The DN or the UID of an administrator in the \
+ OpenDS you want to replicate data with.
+INFO_REMOTE_SERVER_HOST_LABEL=Host Name:
+INFO_REMOTE_SERVER_HOST_TOOLTIP=The fully qualified name of the host where \
+ the OpenDS you want to replicate data with is located.
+INFO_REMOTE_SERVER_PORT_IS_SECURE_LABEL=This is a Secure Port
+INFO_REMOTE_SERVER_PORT_IS_SECURE_TOOLTIP=Check this is the provided port is \
+ the LDAPS port.
+INFO_REMOTE_SERVER_PORT_LABEL=Port:
+INFO_REMOTE_SERVER_PORT_TOOLTIP=The LDAP port of the OpenDS you want to \
+ replicate data with.
+INFO_REMOTE_SERVER_PWD_LABEL=Admin Password:
+INFO_REMOTE_SERVER_PWD_TOOLTIP=The password of an administrator in the OpenDS \
+ you want to replicate data with.
+INFO_REMOTE_SERVER_REPLICATION_PORT=%s - To be configured on remote server %s
+INFO_REPLICATE_WITH_SUFFIXES_LABEL=Create local instance of existing base DNs \
+ and configure replication:
+INFO_REPLICATE_WITH_SUFFIXES_TOOLTIP=Check this to Create Base DNs whose \
+ Contents are replicated with Existing Base DNs.
+INFO_REPLICATED_SERVER_LABEL=This server will be part of a replication \
+ topology
+INFO_REPLICATED_SERVER_TOOLTIP=Check this if you want to replicate the data \
+ on the server that you are creating with other servers.
+INFO_REPLICATION_PORT_ALREADY_CHOSEN_FOR_OTHER_PROTOCOL=You must specify a \
+ different Replication port than those you chose for LDAP and LDAPS \
+ communication.
+INFO_REPLICATION_PORT_LABEL=Replication Port:
+INFO_REPLICATION_PORT_TOOLTIP=The port that will be used to send and receive \
+ replication updates between this server and the other servers.
+INFO_RETRY_BUTTON_LABEL=Retry
+INFO_REVERSION_CANCELED=Reversion canceled.
+INFO_REVERSION_ORACLE_EI_ACTION=Reversion from version %s to version %s \
+ requires further action.
+INFO_REVERSION_ORACLE_FAILURE=reversion from version %s to version %s is not \
+ supported.  To reversion You must uninstall the current server, install the \
+ new server, and manually migrate your data.
+INFO_REVERSION_ORACLE_SUCCESS=Reversion from version %s to version %s is \
+ supported.
+INFO_REVERT_ERROR_EMPTY_HISTORY_DIR=There are no existing backup locations \
+ from prior upgrades.  The 'history' directory is empty.
+INFO_REVERT_ERROR_INVALID_FILES_DIR=The upgrade backup directory does not \
+ appear to contain files backed up from an invocation of the upgrade tool.
+INFO_REVERT_ERROR_NO_DIR=ERROR:  No reversion directory specified.  You must \
+ specify one of %s
+INFO_REVERT_ERROR_NO_HISTORY_DIR=There are no existing backup locations from \
+ prior upgrades.  The 'history' directory does not exist.
+INFO_REVERT_ERROR_NOT_DIR_FILES_DIR=The upgrade backup directory is not a \
+ directory.
+INFO_REVERT_ERROR_NULL_FILES_DIR=The upgrade backup directory is invalid or \
+ could not be determined.
+INFO_REVERT_LAUNCHER_USAGE_DESCRIPTION=This utility reverts the current \
+ installation of the Directory Server to a version prior to running the \
+ upgrade utility.
+INFO_REVIEW_CREATE_BASE_ENTRY_LABEL=Only Create Base Entry (%s)
+INFO_REVIEW_CREATE_SUFFIX=Create New Base DN %s.Base DN Data: %s
+INFO_REVIEW_IMPORT_AUTOMATICALLY_GENERATED=Import Automatically-Generated \
+ Data (%s Entries)
+INFO_REVIEW_IMPORT_LDIF=Import Data from LDIF File (%s)
+INFO_REVIEW_LEAVE_DATABASE_EMPTY_LABEL=Leave Database Empty
+INFO_REVIEW_PANEL_INSTRUCTIONS=Review your settings and click Finish if they \
+ are correct.
+INFO_REVIEW_PANEL_TITLE=Review
+INFO_REVIEW_REPLICATE_SUFFIX=Replicate contents with base DNs:%n%s
+INFO_REVIEW_STEP=Review
+INFO_SECURITY_OPTIONS_CANCEL_BUTTON_TOOLTIP=Close this dialog and discard \
+ configuration.
+INFO_SECURITY_OPTIONS_DIALOG_TITLE=OpenDS QuickSetup
+INFO_SECURITY_OPTIONS_INSTRUCTIONS=Specify the options for enabling secure \
+ access to the server.
+INFO_SECURITY_OPTIONS_OK_BUTTON_TOOLTIP=Close this dialog and accept \
+ configuration.
+INFO_SECURITY_OPTIONS_TITLE=Configure Secure Access
+INFO_SELECT_ALIAS_CANCEL_BUTTON_TOOLTIP=Close this dialog and discard \
+ selected alias.
+INFO_SELECT_ALIAS_MSG=The provided Key Store contains multiple \
+ certificates.<br>Select the alias of the certificate that you want to be used \
+ as Server Certificate:
+INFO_SELECT_ALIAS_OK_BUTTON_TOOLTIP=Close this dialog and accept selected \
+ alias.
+INFO_SELECT_ALIAS_TITLE=OpenDS QuickSetup
+INFO_SELF_SIGNED_CERTIFICATE=Create a new Self-Signed Certificate
+INFO_SERVER_DIRECTORY_MANAGER_DN_LABEL=Administrative User DN:
+INFO_SERVER_DIRECTORY_MANAGER_DN_TOOLTIP=Enter the distinguished name (DN) of \
+ the Administrative User account that will used for managing OpenDS
+INFO_SERVER_DIRECTORY_MANAGER_PWD_CONFIRM_LABEL=Password (confirm):
+INFO_SERVER_DIRECTORY_MANAGER_PWD_CONFIRM_TOOLTIP=Re-enter the password for \
+ the OpenDS Administrative User account
+INFO_SERVER_DIRECTORY_MANAGER_PWD_LABEL=Password:
+INFO_SERVER_DIRECTORY_MANAGER_PWD_TOOLTIP=Enter a password for the OpenDS \
+ Administrative User account
+INFO_SERVER_ERROR=Error on %s:
+INFO_SERVER_LOCATION_LABEL=Installation Path:
+INFO_SERVER_LOCATION_PARENT_TOOLTIP=Enter the full path to the parent \
+ location where the server files will be stored
+INFO_SERVER_LOCATION_RELATIVE_TOOLTIP=Enter the relative path to the location \
+ where the server files will be stored
+INFO_SERVER_NOT_RUNNING_MSG=The Directory Server is not running.  Click 'Yes' \
+ to continue the uninstall.
+INFO_SERVER_NOT_RUNNING_TITLE=Directory Server not Running
+INFO_SERVER_PORT_LABEL=LDAP Listener Port:
+INFO_SERVER_PORT_TOOLTIP=Enter the port number that the server will use to \
+ listen for LDAP requests
+INFO_SERVER_SECURITY_BUTTON_LABEL=Configure...
+INFO_SERVER_SECURITY_BUTTON_TOOLTIP=Click to configure the LDAP Secure \
+ Access.
+INFO_SERVER_SECURITY_LABEL=LDAP Secure Access:
+INFO_SERVER_SECURITY_TOOLTIP=The LDAP Secure Access Configuration for the new \
+ OpenDS server.
+INFO_SERVER_SETTINGS_PANEL_INSTRUCTIONS=Enter a port to listen for LDAP \
+ requests and enter a password for the OpenDS administrative user.
+INFO_SERVER_SETTINGS_PANEL_INSTRUCTIONS_WEBSTART=Choose a location for the \
+ server files and enter a password for the OpenDS administrative user.
+INFO_SERVER_SETTINGS_PANEL_TITLE=Server Settings
+INFO_SERVER_SETTINGS_STEP=Server Settings
+INFO_SETUP_LAUNCHER_GUI_LAUNCHED_FAILED=%n%nThe graphical Setup launch \
+ failed.%n%nLaunching command line Setup...
+INFO_SETUP_LAUNCHER_GUI_LAUNCHED_FAILED_DETAILS=%n%nThe graphical Setup \
+ launch failed.  Check file %s for more details.%n%nLaunching command line \
+ Setup...
+INFO_SETUP_LAUNCHER_LAUNCHING_GUI=Launching graphical setup...
+INFO_SETUP_LAUNCHER_USAGE_DESCRIPTION=This utility may be used to setup the \
+ Directory Server.
+INFO_SHOW_DETAILS_BUTTON_LABEL=Show Details
+INFO_SHOW_EXCEPTION_DETAILS=Show Details
+INFO_SHUTDOWN_BUTTON_LABEL=Shutdown
+INFO_SHUTDOWN_DIRECTORY_MANAGER_CANCEL_BUTTON_TOOLTIP=Close this window
+INFO_SHUTDOWN_DIRECTORY_MANAGER_DIALOG_MSG=<b>Directory Server is \
+ Running</b><br>The server is currently running and must be stopped before \
+ uninstallation can continue.  Provide the information below to allow the \
+ uninstaller to shut it down. You can also click Cancel and then shut the \
+ server down yourself.
+INFO_SHUTDOWN_DIRECTORY_MANAGER_DIALOG_TITLE=Authentication Required
+INFO_SHUTDOWN_DIRECTORY_MANAGER_DN_LABEL=Administrative User DN:
+INFO_SHUTDOWN_DIRECTORY_MANAGER_DN_TOOLTIP=Enter the distinguished name (DN) \
+ of the Administrative User account that will used to shutdown OpenDS
+INFO_SHUTDOWN_DIRECTORY_MANAGER_PWD_LABEL=Password:
+INFO_SHUTDOWN_DIRECTORY_MANAGER_PWD_TOOLTIP=Enter the password of the OpenDS \
+ Administrative User account
+INFO_SHUTDOWN_DIRECTORY_MANAGER_SHUTDOWN_BUTTON_TOOLTIP=Click here to \
+ shutdown the server with the provided authentication
+INFO_SPLASH_ICON=images/opendssplash.png
+INFO_SPLASH_ICON_DESCRIPTION=OpenDS QuickSetup Launching.
+INFO_SPLASH_ICON_TOOLTIP=OpenDS QuickSetup Launching
+INFO_SSL_ACCESS_LABEL=SSL Access:
+INFO_SSL_PORT_TEXTFIELD_TOOLTIP=The LDAPS port.
+INFO_STANDALONE_SERVER_LABEL=This will be a standalone server
+INFO_STANDALONE_SERVER_TOOLTIP=Check this if you do not want to replicate the \
+ data on the server that you are creating with other servers.
+INFO_START_SERVER_LABEL=Start Server when Configuration has Completed
+INFO_START_SERVER_TOOLTIP=Check this check box if you want to start the \
+ server once the installation and configuration has completed
+INFO_STARTTLS_ACCESS_LABEL=StartTLS Access:
+INFO_STEP_UPGRADE_CHOOSE_VERSION=Choose Version
+INFO_SUBSECTION_LEFT_ICON=images/divider-left.png
+INFO_SUBSECTION_LEFT_ICON_DESCRIPTION=Decoration icon.
+INFO_SUBSECTION_RIGHT_ICON=images/divider-right.png
+INFO_SUBSECTION_RIGHT_ICON_DESCRIPTION=Decoration icon.
+INFO_SUFFIX_INITIALIZED_SUCCESSFULLY=Base DN initialized successfully.
+INFO_SUFFIX_LIST_EMPTY=-No Base DNs Found-
+INFO_SUFFIX_LIST_REPLICA_DISPLAY_ENTRIES=%s  (%s entries)
+INFO_SUFFIX_LIST_REPLICA_DISPLAY_ENTRIES_NOT_AVAILABLE=%s (number of entries \
+ not available)
+INFO_SUFFIX_LIST_REPLICA_DISPLAY_NO_ENTRIES=%s  (no entries)
+INFO_SUFFIX_LIST_UNKNOWN_LABEL=<unknown>
+INFO_SUFFIXES_STEP=Data Replication
+INFO_SUFFIXES_TO_REPLICATE_DN_TOOLTIP=The Distinguished Name (DN) of the base \
+ DN to replicate.
+INFO_SUFFIXES_TO_REPLICATE_PANEL_INSTRUCTIONS=Choose whether to create base \
+ DNs as defined on remote servers or to create a new base DN.
+INFO_SUFFIXES_TO_REPLICATE_PANEL_TITLE=Data Replication
+INFO_SUMMARY_CANCELING=Canceling...
+INFO_SUMMARY_CONFIGURING=Configuring Directory Server...
+INFO_SUMMARY_CONFIGURING_ADS=Creating Registration Configuration...
+INFO_SUMMARY_CONFIGURING_REPLICATION=Configuring Replication...
+INFO_SUMMARY_CREATING_BASE_ENTRY=Creating Base Entry...
+INFO_SUMMARY_DOWNLOADING=Downloading Binary Files...
+INFO_SUMMARY_ENABLING_WINDOWS_SERVICE=Enabling Windows Service...
+INFO_SUMMARY_EXTRACTING=Extracting Binary Files...
+INFO_SUMMARY_IMPORTING_AUTOMATICALLY_GENERATED=Importing \
+ Automatically-Generated Data...
+INFO_SUMMARY_IMPORTING_LDIF=Importing LDIF File...
+INFO_SUMMARY_INITIALIZE_REPLICATED_SUFFIXES=Initializing Contents of \
+ Replicated Base DNs...
+INFO_SUMMARY_INSTALL_FINISHED_CANCELED=<b>OpenDS QuickSetup Canceled.</b> \
+ <br>The upgrade operation was canceled and any files installed to your system \
+ during this operation have been removed.
+INFO_SUMMARY_INSTALL_FINISHED_SUCCESSFULLY=<b>OpenDS QuickSetup Completed \
+ Successfully.</b><br>OpenDS is now installed in %s.<br>The server is \
+ %s.<br><br>Visit the <a \
+ href="https://www.opends.org/wiki/page/QuickReferenceGuide"> OpenDS Quick \
+ Reference</a> page for an overview of server management and \
+ configuration.<br>To see basic server configuration status and to start/stop \
+ the server, click Launch Status Panel.  Note that you can launch this tool \
+ later using %s.<br><INPUT type="submit" value="Launch Status Panel"></INPUT>
+INFO_SUMMARY_INSTALL_FINISHED_WITH_ERROR=An error occurred.  Check 'Details' \
+ text area for more information.<br>The server is %s.<br>To see basic server \
+ configuration status, click Launch Status Panel.  Note that you can launch \
+ this tool later using %s.<br><INPUT type="submit" value="Launch Status \
+ Panel"></INPUT>
+INFO_SUMMARY_INSTALL_NOT_STARTED=Starting QuickSetup...
+INFO_SUMMARY_REVERT_ABORT=Canceling Reversion...
+INFO_SUMMARY_REVERT_CLEANUP=Cleaning Up...
+INFO_SUMMARY_REVERT_FINISHED_CANCELED_CLI=OpenDS Reversion Canceled. The \
+ upgrade operation was canceled and the installation has been restored to the \
+ state it was in before the reversion operation.
+INFO_SUMMARY_REVERT_FINISHED_SUCCESSFULLY_CLI=OpenDS Reversion Completed \
+ Successfully.  The OpenDS installation at %s has now been reverted to version \
+ %s.
+INFO_SUMMARY_REVERT_FINISHED_WITH_ERRORS_CLI=OpenDS Reversion Failed. The \
+ reversion operation could not complete successfully due to errors and the \
+ installation has been restored to the state it was in before the reversion \
+ operation.  See the logs for details on why the reversion operation failed.
+INFO_SUMMARY_REVERT_FINISHED_WITH_WARNINGS_CLI=OpenDS Reversion Succeeded \
+ With Warnings. The reversion operation completed successfully but the \
+ reverter had problems that require attention. See the logs for details on the \
+ problems.
+INFO_SUMMARY_REVERT_HISTORY=Recording Reversion History...
+INFO_SUMMARY_REVERT_INITIALIZING=Initializing Reversion...
+INFO_SUMMARY_REVERT_NOT_STARTED=Starting Reversion...
+INFO_SUMMARY_REVERT_REVERTING_COMPONENTS=Reverting Components...
+INFO_SUMMARY_REVERT_VERIFYING=Verifying revert...
+INFO_SUMMARY_START_ERROR=An error occurred Starting Server.  Check 'Details' \
+ text area for more information.
+INFO_SUMMARY_START_SUCCESS=OpenDS Started Successfully.
+INFO_SUMMARY_STARTING=Starting Server...
+INFO_SUMMARY_STOP_ERROR=An error occurred Stopping Server.  Check 'Details' \
+ text area for more information.
+INFO_SUMMARY_STOP_SUCCESS=OpenDS Stopped Successfully.
+INFO_SUMMARY_STOPPING=Stopping Server...
+INFO_SUMMARY_UPGRADE_ABORT=Canceling Upgrade...
+INFO_SUMMARY_UPGRADE_APPLYING_CONFIG_CUSTOMIZATION=Applying Configuration \
+ Customizations...
+INFO_SUMMARY_UPGRADE_APPLYING_SCHEMA_CUSTOMIZATION=Applying Schema \
+ Customizations...
+INFO_SUMMARY_UPGRADE_BACKING_UP_DB=Backing Up Data...
+INFO_SUMMARY_UPGRADE_BACKING_UP_FILES=Backing Up Files...
+INFO_SUMMARY_UPGRADE_CALCULATING_CONFIG_CUSTOMIZATION=Calculating \
+ Configuration Customizations...
+INFO_SUMMARY_UPGRADE_CALCULATING_SCHEMA_CUSTOMIZATION=Calculating Schema \
+ Customizations...
+INFO_SUMMARY_UPGRADE_CHECK_SERVER_HEALTH=Checking Server Health...
+INFO_SUMMARY_UPGRADE_CLEANUP=Cleaning Up...
+INFO_SUMMARY_UPGRADE_DOWNLOADING=Downloading Build...
+INFO_SUMMARY_UPGRADE_EXTRACTING=Extracting Build...
+INFO_SUMMARY_UPGRADE_FINISHED_CANCELED=<b>OpenDS QuickUpgrade Canceled.</b> \
+ <br>The upgrade operation was canceled and the installation has been restored \
+ to the state it was in before the upgrade operation.<br><br><INPUT \
+ type="submit" value="Launch Status Panel"></INPUT>
+INFO_SUMMARY_UPGRADE_FINISHED_CANCELED_CLI=OpenDS QuickUpgrade Canceled. The \
+ upgrade operation was canceled and the installation has been restored to the \
+ state it was in before the upgrade operation.
+INFO_SUMMARY_UPGRADE_FINISHED_SUCCESSFULLY=<b>OpenDS QuickUpgrade Completed \
+ Successfully.</b><br>The OpenDS installation at %s has now been upgraded to \
+ version %s.<br><br><INPUT type="submit" value="Launch Status Panel"></INPUT>
+INFO_SUMMARY_UPGRADE_FINISHED_SUCCESSFULLY_CLI=OpenDS QuickUpgrade Completed \
+ Successfully.  The OpenDS installation at %s has now been upgraded to version \
+ %s.
+INFO_SUMMARY_UPGRADE_FINISHED_WITH_ERRORS=<b>OpenDS QuickUpgrade \
+ Failed</b><br>The upgrade operation could not complete successfully due to \
+ errors and the installation has been restored to the state it was in before \
+ the upgrade operation.  See the 'Details' text for more information on why \
+ the upgrade operation failed.<br><br><INPUT type="submit" value="Launch \
+ Status Panel"></INPUT>
+INFO_SUMMARY_UPGRADE_FINISHED_WITH_ERRORS_CLI=OpenDS QuickUpgrade Failed. The \
+ upgrade operation could not complete successfully due to errors and the \
+ installation has been restored to the state it was in before the upgrade \
+ operation.  See the logs for details on why the upgrade operation failed.
+INFO_SUMMARY_UPGRADE_FINISHED_WITH_WARNINGS=<b>OpenDS QuickUpgrade Succeeded \
+ With Warnings</b><br>The upgrade operation completed successfully but the \
+ upgrader had problems that require attention. See the 'Details' text for more \
+ information on the problems.<br><br><INPUT type="submit" value="Launch Status \
+ Panel"></INPUT>
+INFO_SUMMARY_UPGRADE_FINISHED_WITH_WARNINGS_CLI=OpenDS QuickUpgrade Succeeded \
+ With Warnings. The upgrade operation completed successfully but the upgrader \
+ had problems that require attention. See the logs for details on the \
+ problems.
+INFO_SUMMARY_UPGRADE_HISTORY=Recording Upgrade History...
+INFO_SUMMARY_UPGRADE_INITIALIZING=Initializing Upgrade...
+INFO_SUMMARY_UPGRADE_NOT_STARTED=Starting Upgrade...
+INFO_SUMMARY_UPGRADE_PREPARING_CUSTOMIZATIONS=Preparing Customizations...
+INFO_SUMMARY_UPGRADE_UPGRADING_COMPONENTS=Upgrading Components...
+INFO_SUMMARY_UPGRADE_VERIFYING=Verifying Upgrade...
+INFO_SUMMARY_WAITING_TO_CANCEL=Waiting to Cancel...
+INFO_TEXT_AREA_BORDER_COLOR=000,000,000
+INFO_TEXTFIELD_COLOR=000,000,000
+INFO_TOPOLOGY_EXISTS_LABEL=There is already a server in the topology
+INFO_TOPOLOGY_EXISTS_TOOLTIP=Check this if you already created a server that \
+ you want to replicate data with.
+INFO_UPGRADE_BUILD_ID_LABEL=Build Version:
+INFO_UPGRADE_BUILD_ID_TOOLTIP=The ID of the build version installed in the \
+ above location
+INFO_UPGRADE_BUILD_ID_UNKNOWN=Unknown
+INFO_UPGRADE_CANCELED=Upgrade canceled.
+INFO_UPGRADE_CHOOSE_VERSION_BUILD_LIST_ERROR=<b>Error Accessing Build \
+ Information.</b><br>Unable to retrieve the list of builds from %0$s due to: \
+ %1$s.<br>Possible Causes:<br><ul><li>Need to specify a \
+ proxy.<br><table><tr><td><input value="Specify Proxy" \
+ type="submit"></input></td><td>Current Proxy: \
+ %2$s<td></tr></table><br></li><li>%0$s is down or experiencing \
+ difficulty.</li></ul><br>You can still continue with upgrade but will need to \
+ download a build separately and then point to it in the wizard.
+INFO_UPGRADE_CHOOSE_VERSION_LOADING_BUILD_INFO=Loading remote build \
+ information...
+INFO_UPGRADE_CHOOSE_VERSION_LOCAL_LABEL=Upgrade Based on Downloaded Weekly \
+ Build (.zip)
+INFO_UPGRADE_CHOOSE_VERSION_LOCAL_PATH=Path:
+INFO_UPGRADE_CHOOSE_VERSION_LOCAL_TOOLTIP=Upgrade to a build whose .zip file \
+ you have already downloaded.
+INFO_UPGRADE_CHOOSE_VERSION_PANEL_INSTRUCTIONS=Choose a new version or \
+ reference build to use for the upgrading.
+INFO_UPGRADE_CHOOSE_VERSION_PANEL_TITLE=Choose New Version
+INFO_UPGRADE_CHOOSE_VERSION_READING_BUILD_INFO=Reading remote build \
+ information...
+INFO_UPGRADE_CHOOSE_VERSION_REMOTE_LABEL=Choose New Version from \
+ opends.dev.java.net
+INFO_UPGRADE_CHOOSE_VERSION_REMOTE_NIGHTLY=Nightly Builds
+INFO_UPGRADE_CHOOSE_VERSION_REMOTE_TOOLTIP=Download and upgrade to a build \
+ publicly available on the OpenDS website.
+INFO_UPGRADE_CHOOSE_VERSION_REMOTE_WEEKLY=Weekly Builds
+INFO_UPGRADE_CHOOSE_VERSION_UNABLE_TO_ACCESS_BUILD_INFO=Unable to access \
+ remote build information.
+INFO_UPGRADE_FILE_PROMPT=Enter the name and path of the OpenDS install file \
+ (.zip):
+INFO_UPGRADE_LAUNCHER_DESCRIPTION=This utility may be used to upgrade the \
+ Directory Server to a newer version.
+INFO_UPGRADE_LAUNCHER_GUI_LAUNCHED_FAILED=%n%nThe graphical upgrade launch \
+ failed.%n%nLaunching command line upgrade...
+INFO_UPGRADE_LAUNCHER_GUI_LAUNCHED_FAILED_DETAILS=%n%nThe graphical upgrade \
+ launch failed.  Check file %s for more details.%n%nLaunching command line \
+ upgrade...
+INFO_UPGRADE_LAUNCHER_LAUNCHING_CLI=Launching command line upgrade...
+INFO_UPGRADE_LAUNCHER_LAUNCHING_GUI=Launching graphical upgrade...
+INFO_UPGRADE_LAUNCHER_USAGE_DESCRIPTION=This utility may be used to upgrade \
+ the Directory Server to a newer version.  Use of this tool assumes that you \
+ have already downloaded an OpenDS install package (.zip) file.  You can also \
+ upgrade your server using the Java Web Start version of this tool by visiting \
+ the OpenDS web site at www.opends.org.
+INFO_UPGRADE_LOCATION_LABEL=Server to Upgrade:
+INFO_UPGRADE_LOCATION_TOOLTIP=File system location of the build that will be \
+ upgraded
+INFO_UPGRADE_LOG_FIELD_FROM=From:
+INFO_UPGRADE_LOG_FIELD_NOTE=Note:
+INFO_UPGRADE_LOG_FIELD_OP=Operation:
+INFO_UPGRADE_LOG_FIELD_STATUS=Status:
+INFO_UPGRADE_LOG_FIELD_TIME=Time:
+INFO_UPGRADE_LOG_FIELD_TO=To:
+INFO_UPGRADE_LOG_STATUS_CANCEL=Canceled
+INFO_UPGRADE_LOG_STATUS_FAILURE=Failure
+INFO_UPGRADE_LOG_STATUS_STARTED=Started
+INFO_UPGRADE_LOG_STATUS_SUCCESS=Success
+INFO_UPGRADE_MOD=Processed server modifications: %s
+INFO_UPGRADE_MOD_IGNORE=Attribute or value already exists: %s
+INFO_UPGRADE_MOD_NO_SCHEMA=Processed server modifications (schema checking \
+ disabled): %s
+INFO_UPGRADE_ORACLE_ACTION=Upgrade requires manual action
+INFO_UPGRADE_ORACLE_INFO=Upgrade information
+INFO_UPGRADE_ORACLE_SUCCESS=Upgrade from version %s to version %s is \
+ supported.
+INFO_UPGRADE_ORACLE_UNSUPPORTED=Upgrade not supportedfrom version %s to \
+ version %s is not supported.  To upgrade You must uninstall the current \
+ server, install the new server, and manually migrate your data.
+INFO_UPGRADE_ORACLE_WARNING=Upgrade warning
+INFO_UPGRADE_REVIEW_PANEL_INSTRUCTIONS=Review your settings and click Finish \
+ if they are correct.
+INFO_UPGRADE_REVIEW_PANEL_NEW_VERSION_LABEL=New Version:
+INFO_UPGRADE_REVIEW_PANEL_NEW_VERSION_TOOLTIP=The target version of the \
+ server
+INFO_UPGRADE_REVIEW_PANEL_OLD_VERSION_LABEL=Current Version:
+INFO_UPGRADE_REVIEW_PANEL_OLD_VERSION_TOOLTIP=The current version of the \
+ server
+INFO_UPGRADE_REVIEW_PANEL_SERVER_LABEL=Server to Upgrade:
+INFO_UPGRADE_REVIEW_PANEL_SERVER_TOOLTIP=File system location of the build \
+ that will be upgraded
+INFO_UPGRADE_REVIEW_PANEL_START_SERVER=Start Server when the Upgrade has \
+ Completed
+INFO_UPGRADE_REVIEW_PANEL_START_SERVER_TOOLTIP=Check this check box if you \
+ want to start the server once the upgrade has completed
+INFO_UPGRADE_REVIEW_PANEL_TITLE=Review
+INFO_UPGRADE_VERIFICATION_FAILURE_CANCEL=Cancel Upgrade
+INFO_UPGRADE_VERIFICATION_FAILURE_PROMPT=The upgraded server returned errors \
+ on startup.  Would you like to cancel the upgrade?  If you cancel, any \
+ changes made to the server by this upgrade will be backed out.
+INFO_UPGRADE_VERIFICATION_FAILURE_TITLE=Upgrade Verification Failed
+INFO_UPGRADE_VERIFICATION_FAILURE_VIEW_DETAILS=View Error Details
+INFO_UPGRADE_WELCOME_PANEL_TITLE=Welcome
+INFO_UPGRADE_WELCOME_PANEL_WEBSTART_INSTRUCTIONS=The OpenDS QuickUpgrade tool \
+ will upgrade an existing build in place.<br><br>This instance of QuickUpgrade \
+ will upgrade the server you specify below to the following OpenDS build: %s \
+ (Build ID: %s) .<br><br> Additional information on this tool is available on \
+ the <a href="https://www.opends.org/wiki/"> OpenDS documentation \
+ wiki</a>.<br><br><b>Note:</b> The upgrade tool will need to stop and start \
+ the OpenDS server
+INFO_UPGRADING_RATIO=Downloading: %s%% Completed - Upgrading file: %s %% \
+ Completed.
+INFO_USE_EXISTING_CERTIFICATE_LABEL=Use an Existing Certificate:
+INFO_USE_EXISTING_CERTIFICATE_TOOLTIP=Select this if you have already a \
+ certificate you want the new server to use.
+INFO_USE_SELF_SIGNED_LABEL=Generate Self-Signed Certificate (recommended for \
+ testing only)
+INFO_USE_SELF_SIGNED_TOOLTIP=Create a new Self-Signed Certificate to encrypt \
+ communication.
+INFO_VALIDATING_RATIO=Downloading: %s%% Completed - Validating file: %s %% \
+ Completed.
+INFO_WAIT=images/wait.gif
+INFO_WAIT_TINY=images/wait_tiny.png
+INFO_WARNING_ICON=images/warning_small.gif
+INFO_WARNING_ICON_DESCRIPTION=Warning.
+INFO_WARNING_ICON_TOOLTIP=Warning
+INFO_WARNING_LARGE_ICON=images/warning_large.gif
+INFO_WEB_PROXY_DLG_AUTH_LABEL=Authentication:
+INFO_WEB_PROXY_DLG_AUTH_REQ_LABEL=Required by proxy
+INFO_WEB_PROXY_DLG_HOST_LABEL=Host:
+INFO_WEB_PROXY_DLG_PASSWORD_LABEL=Password:
+INFO_WEB_PROXY_DLG_PORT_LABEL=Port:
+INFO_WEB_PROXY_DLG_TITLE=Web Proxy Configuration
+INFO_WEB_PROXY_DLG_USER_LABEL=User:
+INFO_WELCOME_PANEL_OFFLINE_INSTRUCTIONS=The OpenDS QuickSetup tool will ask \
+ you for some basic server and data configuration settings and will get your \
+ server up and running quickly.<br><br>Note that you can also install the \
+ latest weekly build launching the setup via Java Web Start from the <a \
+ href="https://opends.dev.java.net/public/downloads_index.html">OpenDS \
+ Downloads Page</a>.  This instance of QuickSetup will use the following \
+ OpenDS build: %s (Build ID: %s) <br><br> OpenDS requires a Java SE 5.0 or \
+ higher runtime.<br><br> Additional information on QuickSetup is available on \
+ the <a href="https://www.opends.org/wiki/page/OverviewOfTheQuickSetupTool"> \
+ OpenDS documentation wiki</a>.
+INFO_WELCOME_PANEL_TITLE=Welcome
+INFO_WELCOME_PANEL_WEBSTART_INSTRUCTIONS=The OpenDS QuickSetup tool will ask \
+ you for some basic server and data configuration settings and will get your \
+ server up and running quickly.<br><br>QuickSetup will install and configure \
+ the latest weekly build. You can also use QuickSetup to set up a weekly build \
+ you have downloaded manually. To run QuickSetup in this case, use the %s \
+ command at the top level of the OpenDS directory.  This instance of \
+ QuickSetup will use the following OpenDS build: %s (Build ID: %s) <br><br> \
+ OpenDS requires a Java SE 5.0 or higher runtime.<br><br> Additional \
+ information on QuickSetup is available on the <a \
+ href="https://www.opends.org/wiki/page/OverviewOfTheQuickSetupTool"> OpenDS \
+ documentation wiki</a>.
+INFO_WELCOME_STEP=Welcome
+INFO_ZIP_FILES_DESCRIPTION=OpenDS Installation Package (.zip)
diff --git a/opendj-sdk/opends/src/messages/messages/replication.properties b/opendj-sdk/opends/src/messages/messages/replication.properties
new file mode 100644
index 0000000..7e4a14f
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/replication.properties
@@ -0,0 +1,186 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=SYNC
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+MILD_ERR_SYNC_INVALID_DN_1=The configured DN is already used by another \
+ domain
+MILD_ERR_INVALID_CHANGELOG_SERVER_4=Invalid replication server configuration
+MILD_ERR_UNKNOWN_HOSTNAME_5=Changelog failed to start because the hostname is \
+ unknown
+MILD_ERR_COULD_NOT_BIND_CHANGELOG_6=Changelog failed to start : could not \
+ bind to the changelog listen port : %d. Error : %s
+MILD_ERR_UNKNOWN_TYPE_7=Unknown operation type : %s
+MILD_ERR_ERROR_REPLAYING_OPERATION_8=Error %s when replaying operation with \
+ changenumber %s %s : %s
+MILD_ERR_OPERATION_NOT_FOUND_IN_PENDING_9=Internal Error : Operation %s \
+ change number %s was not found in pending list
+MILD_ERR_COULD_NOT_INITIALIZE_DB_10=Changelog failed to start because the \
+ database %s could not be opened
+MILD_ERR_COULD_NOT_READ_DB_11=Changelog failed to start because the database \
+ %s could not be read
+MILD_ERR_EXCEPTION_REPLAYING_OPERATION_12=An Exception was caught while \
+ replaying operation %s : %s
+MILD_ERR_NEED_CHANGELOG_PORT_13=The replication server port must be defined
+MILD_ERR_ERROR_UPDATING_RUV_14=Error %s when updating server state %s : %s \
+ base dn : %s
+MILD_ERR_ERROR_SEARCHING_RUV_15=Error %s when searching for server state %s : \
+ %s base dn : %s
+NOTICE_SERVER_DISCONNECT_16=%s has disconnected from this replication server
+NOTICE_NO_CHANGELOG_SERVER_LISTENING_17=There is no replication server \
+ listening on %s
+NOTICE_CHANGELOG_MISSING_CHANGES_18=The replication server %s is missing some \
+ changes that this server has already processed
+NOTICE_NEED_MORE_THAN_ONE_CHANGELOG_SERVER_19=More than one replication \
+ server should be configured
+NOTICE_EXCEPTION_STARTING_SESSION_20=Caught Exception during initial \
+ communication with replication server :
+NOTICE_CANNOT_RECOVER_CHANGES_21=Error when searching old changes from the \
+ database.
+NOTICE_COULD_NOT_FIND_CHANGELOG_WITH_MY_CHANGES_22=Could not find a \
+ replication server that has seen all the local changes. Going to replay \
+ changes
+NOTICE_COULD_NOT_FIND_CHANGELOG_23=Could not connect to any replication \
+ server on suffix %s, retrying...
+NOTICE_EXCEPTION_CLOSING_DATABASE_24=Error closing changelog database %s :
+SEVERE_ERR_EXCEPTION_DECODING_OPERATION_25=Error trying to replay %s, \
+ operation could not be decoded :
+FATAL_ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR_26=Error Trying to use the \
+ underlying database. The Changelog Service is going to shut down.
+SEVERE_ERR_IGNORE_BAD_DN_IN_DATABASE_IDENTIFIER_27=A badly formatted DN was \
+ found in the list of database known By this changelog service :%s. This \
+ Identifier will be ignored.
+SEVERE_ERR_ERROR_CLOSING_CHANGELOG_ENV_28=Error closing the changelog \
+ database :
+SEVERE_ERR_EXCEPTION_CHANGELOG_TRIM_FLUSH_29=Error during the changelog \
+ database trimming or flush process. The Changelog service is going to \
+ shutdown.
+SEVERE_ERR_CHANGELOG_CONNECTION_ERROR_30=Error during Changelog service \
+ message processing . Connection from %s is rejected.
+SEVERE_ERR_UNKNOWN_MESSAGE_31=%s has sent an unknown message. Closing the \
+ connection.
+SEVERE_ERR_WRITER_UNEXPECTED_EXCEPTION_32=An unexpected error happened \
+ handling connection with %s.This connection is going to be closed.
+SEVERE_ERR_CHANGELOG_ERROR_SENDING_ACK_33=An unexpected error occurred  while \
+ sending an ack to %s.This connection is going to be closed and reopened.
+SEVERE_ERR_EXCEPTION_RECEIVING_REPLICATION_MESSAGE_34=An Exception was caught \
+ while receiving replication message : %s
+MILD_ERR_LOOP_REPLAYING_OPERATION_35=A loop was detected while replaying \
+ operation: %s
+MILD_ERR_FILE_CHECK_CREATE_FAILED_36=An Exception was caught while testing \
+ existence or trying  to create the directory for the changelog database : %s
+INFO_CHANGELOG_SERVER_ATTR_37=Specifies the list of replication servers to \
+ which this replication server should connect. Each value of this attribute \
+ should contain a values build with the hostname and the port number of the \
+ remote server separated with a ":"
+INFO_SERVER_ID_ATTR_38=Specifies the server ID. Each replication server in \
+ the topology Must be assigned a unique server ID in the topology
+INFO_CHANGELOG_PORT_ATTR_39=Specifies the port number that the replication \
+ server will use to listen for connections from LDAP servers
+INFO_WINDOW_SIZE_ATTR_40=Specifies the receive window size of the replication \
+ server
+INFO_QUEUE_SIZE_ATTR_41=Specifies the receive queue size of the replication \
+ server. The replication servers will queue up to this number of messages in \
+ its memory queue and save the older messages to persistent storage. Using a \
+ larger size may improve performances when The replication delay is larger \
+ than this size but at the cost of using more memory
+INFO_CHANGELOG_DIR_PATH_ATTR_42=Specifies the replication server directory. \
+ The replication server will create all persistent storage below this path
+INFO_PURGE_DELAY_ATTR_43=Specifies the Changelog Purge Delay, The replication \
+ servers will keep all changes up to this amount of time before deleting them. \
+ This values defines the maximum age of a backup that can be restored because \
+ replication servers would not be able to refresh LDAP servers with older \
+ versions of the data. A zero value can be used to specify an infinite delay \
+ (or never purge)
+SEVERE_ERR_SIMULTANEOUS_IMPORT_EXPORT_REJECTED_44=The current request is \
+ rejected due to an import or an export already in progress for the same data
+SEVERE_ERR_INVALID_IMPORT_SOURCE_45=Invalid source for the import
+SEVERE_ERR_INVALID_EXPORT_TARGET_46=Invalid target for the export
+SEVERE_ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN_47=No reachable peer in the domain
+SEVERE_ERR_NO_MATCHING_DOMAIN_48=No domain matches the base DN provided
+SEVERE_ERR_MULTIPLE_MATCHING_DOMAIN_49=Multiple domains match the base DN \
+ provided
+SEVERE_ERR_INVALID_PROVIDER_50=The provider class does not allow the \
+ operation requested
+SEVERE_ERR_COULD_NOT_SOLVE_HOSTNAME_51=The hostname %s could not be resolved \
+ as an IP address
+NOTICE_READER_NULL_MSG_52=Received a Null Msg from %s
+NOTICE_READER_EXCEPTION_53=Exception when reading messages from %s
+SEVERE_ERR_DUPLICATE_SERVER_ID_54=Servers %s and %s have the same ServerId : \
+ %d
+SEVERE_ERR_DUPLICATE_REPLICATION_SERVER_ID_55=Replication Servers %s and %s \
+ have the same ServerId : %d
+SEVERE_ERR_BAD_HISTORICAL_56=Entry %s was containing some unknown historical \
+ information, This may cause some inconsistency for this entry
+SEVERE_ERR_CANNOT_ADD_CONFLICT_ATTRIBUTE_57=A conflict was detected but the \
+ conflict information could not beadded. Operation :
+SEVERE_ERR_CANNOT_RENAME_CONFLICT_ENTRY_58=An error happened trying the \
+ rename a conflicting entry :
+SEVERE_ERR_EXCEPTION_RENAME_CONFLICT_ENTRY_59=An Exception happened when \
+ trying the rename a conflicting entry :
+SEVERE_ERR_CHANGELOG_UNSUPPORTED_UTF8_ENCODING_60=The JVM does not support \
+ UTF-8. This is required to be able to encode the changes in the database. \
+ This replication server will now shutdown
+SEVERE_ERR_REPLICATION_COULD_NOT_CONNECT_61=The Replication is configured for \
+ suffix  %s but was not able to connect to any Replication Server
+NOTICE_NOW_FOUND_CHANGELOG_62=Replication Server %s now used for Replication \
+ Domain %s
+NOTICE_DISCONNECTED_FROM_CHANGELOG_63=The connection to Replication Server %s \
+ has been dropped by the Replication Server
+SEVERE_ERR_CHANGELOG_ERROR_SENDING_INFO_64=An unexpected error occurred \
+ while sending a Server  Info message to %s. This connection is going to be \
+ closed and reopened
+SEVERE_ERR_CHANGELOG_ERROR_SENDING_ERROR_65=An unexpected error occurred \
+ while sending an Error Message to %s. This connection is going to be closed \
+ and reopened
+SEVERE_ERR_CHANGELOG_ERROR_SENDING_MSG_66=An unexpected error occurred  while \
+ sending a Message to %s. This connection is going to be closed and reopened
diff --git a/opendj-sdk/opends/src/messages/messages/schema.properties b/opendj-sdk/opends/src/messages/messages/schema.properties
new file mode 100644
index 0000000..741f487
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/schema.properties
@@ -0,0 +1,917 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=SCHEMA
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+SEVERE_ERR_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE_1=Unable to retrieve \
+ approximate matching rule %s used as the default for the %s attribute syntax. \
+ Approximate matching will not be allowed by default for attributes with this \
+ syntax
+SEVERE_ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE_2=Unable to retrieve \
+ equality matching rule %s used as the default for the %s attribute syntax. \
+ Equality matching will not be allowed by default for attributes with this \
+ syntax
+SEVERE_ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE_3=Unable to retrieve \
+ ordering matching rule %s used as the default for the %s attribute syntax. \
+ Ordering matches will not be allowed by default for attributes with this \
+ syntax
+SEVERE_ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE_4=Unable to retrieve \
+ substring matching rule %s used as the default for the %s attribute syntax. \
+ Substring matching will not be allowed by default for attributes with this \
+ syntax
+SEVERE_WARN_ATTR_SYNTAX_ILLEGAL_BOOLEAN_5=The provided value %s is not \
+ allowed for attributes with a Boolean syntax.  The only allowed values are \
+ 'TRUE' and 'FALSE'
+SEVERE_WARN_ATTR_SYNTAX_BIT_STRING_TOO_SHORT_6=The provided value %s is too \
+ short to be a valid bit string.  A bit string must be a series of binary \
+ digits surrounded by single quotes and followed by a capital letter B
+SEVERE_WARN_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED_7=The provided value %s is not \
+ a valid bit string because it is not surrounded by single quotes and followed \
+ by a capital letter B
+SEVERE_WARN_ATTR_SYNTAX_BIT_STRING_INVALID_BIT_8=The provided value %s is not \
+ a valid bit string because %s is not a valid binary digit
+MILD_ERR_ATTR_SYNTAX_COUNTRY_STRING_INVALID_LENGTH_9=The provided value %s is \
+ not a valid country string because the length is not exactly two characters
+MILD_ERR_ATTR_SYNTAX_COUNTRY_STRING_NOT_PRINTABLE_10=The provided value %s is \
+ not a valid country string because it contains one or more non-printable \
+ characters
+MILD_ERR_ATTR_SYNTAX_DELIVERY_METHOD_NO_ELEMENTS_11=The provided value %s is \
+ not a valid delivery method value because it does not contain any elements
+MILD_ERR_ATTR_SYNTAX_DELIVERY_METHOD_INVALID_ELEMENT_12=The provided value %s \
+ is not a valid delivery method value because %s is not a valid method
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_TOO_SHORT_13=The provided value %s \
+ is too short to be a valid generalized time value
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_YEAR_14=The provided value \
+ %s is not a valid generalized time value because the %s character is not \
+ allowed in the century or year specification
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH_15=The provided value \
+ %s is not a valid generalized time value because %s is not a valid month \
+ specification
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY_16=The provided value %s \
+ is not a valid generalized time value because %s is not a valid day \
+ specification
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR_17=The provided value \
+ %s is not a valid generalized time value because %s is not a valid hour \
+ specification
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE_18=The provided value \
+ %s is not a valid generalized time value because %s is not a valid minute \
+ specification
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SECOND_19=The provided value \
+ %s is not a valid generalized time value because %s is not a valid second \
+ specification
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SUBSECOND_20=The provided \
+ value %s is not a valid generalized time value because the sub-second \
+ component is not valid (between 1 and 3 numeric digits)
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_LONG_SUBSECOND_21=The provided value \
+ %s is not a valid generalized time value because the sub-second value may not \
+ contain more than three digits
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET_22=The provided value \
+ %s is not a valid generalized time value because %s is not a valid GMT offset
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR_23=The provided value \
+ %s is not a valid generalized time value because it contains an invalid \
+ character %s at position %d
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_CANNOT_PARSE_24=The provided value \
+ %s could not be parsed as a valid generalized time:  %s
+MILD_ERR_ATTR_SYNTAX_DN_INVALID_25=The provided value %s could not be parsed \
+ as a valid distinguished name:  %s
+MILD_ERR_ATTR_SYNTAX_DN_END_WITH_COMMA_26=The provided value %s could not be \
+ parsed as a valid distinguished name because the last non-space character was \
+ a comma or semicolon
+MILD_ERR_ATTR_SYNTAX_DN_ATTR_START_WITH_DIGIT_27=The provided value %s could \
+ not be parsed as a valid distinguished name because numeric digit %s is not \
+ allowed as the first character in an attribute name
+MILD_ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR_28=The provided value %s could not \
+ be parsed as a valid distinguished name because character %c at position %d \
+ is not allowed in an attribute name
+MILD_ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_UNDERSCORE_CHAR_29=The provided value %s \
+ could not be parsed as a valid distinguished name because the underscore \
+ character is not allowed in an attribute name unless the %s  configuration \
+ option is enabled
+MILD_ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DASH_30=The provided value %s \
+ could not be parsed as a valid distinguished name because the hyphen \
+ character is not allowed as the first character of an attribute name
+MILD_ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_UNDERSCORE_31=The provided value \
+ %s could not be parsed as a valid distinguished name because the underscore \
+ character is not allowed as the first character of an attribute name even if \
+ the %s configuration option is enabled
+MILD_ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DIGIT_32=The provided value %s \
+ could not be parsed as a valid distinguished name because the digit %c is not \
+ allowed allowed as the first character of an attribute name unless the name \
+ is specified as an OID or the %s  configuration option is enabled
+MILD_ERR_ATTR_SYNTAX_DN_ATTR_NO_NAME_33=The provided value %s could not be \
+ parsed as a valid distinguished name because it contained an RDN containing \
+ an empty attribute name
+MILD_ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD_34=The provided value %s could \
+ not be parsed as a valid distinguished name because the parsed attribute name \
+ %s included a period but that name did not appear to be a valid OID
+MILD_ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME_35=The provided value %s could not \
+ be parsed as a valid distinguished name because the last non-space character \
+ was part of the attribute name %s
+MILD_ERR_ATTR_SYNTAX_DN_NO_EQUAL_36=The provided value %s could not be parsed \
+ as a valid distinguished name because the next non-space character after \
+ attribute name %s should have been an equal sign but instead was %c
+MILD_ERR_ATTR_SYNTAX_DN_INVALID_CHAR_37=The provided value %s could not be \
+ parsed as a valid distinguished name because character %c at position %d is \
+ not valid
+MILD_ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT_38=The provided value %s could \
+ not be parsed as a valid distinguished name because an attribute value \
+ started with an octothorpe (#) but was not followed by a positive multiple of \
+ two hexadecimal digits
+MILD_ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT_39=The provided value %s could not \
+ be parsed as a valid distinguished name because an attribute value started \
+ with an octothorpe (#) but contained a character %c that was not a valid \
+ hexadecimal digit
+MILD_ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE_40=The provided value %s \
+ could not be parsed as a valid distinguished name because an unexpected \
+ failure occurred while attempting to parse an attribute value from one of the \
+ RDN components:  %s
+MILD_ERR_ATTR_SYNTAX_DN_UNMATCHED_QUOTE_41=The provided value %s could not be \
+ parsed as a valid distinguished name because one of the RDN components \
+ included a quoted value that did not have a corresponding closing quotation \
+ mark
+MILD_ERR_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID_42=The provided value %s \
+ could not be parsed as a valid distinguished name because one of the RDN \
+ components included a value with an escaped hexadecimal digit that was not \
+ followed by a second hexadecimal digit
+SEVERE_WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO_43=The provided value %s could \
+ not be parsed as a valid integer because the first digit may not be zero \
+ unless it is the only digit
+SEVERE_WARN_ATTR_SYNTAX_INTEGER_MISPLACED_DASH_44=The provided value %s could \
+ not be parsed as a valid integer because the dash may only appear if it is \
+ the first character of the value followed by one or more digits
+SEVERE_WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER_45=The provided value %s \
+ could not be parsed as a valid integer because character %c at position %d is \
+ not allowed in an integer value
+SEVERE_WARN_ATTR_SYNTAX_INTEGER_EMPTY_VALUE_46=The provided value %s could \
+ not be parsed as a valid integer because it did not contain any digits
+SEVERE_WARN_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE_47=The provided value %s \
+ could not be parsed as a valid integer because it contained only a dash not \
+ followed by an integer value
+MILD_ERR_ATTR_SYNTAX_OID_NO_VALUE_48=The provided value could not be parsed \
+ as a valid OID because it did not contain any characters
+MILD_ERR_ATTR_SYNTAX_OID_ILLEGAL_CHARACTER_49=The provided value %s could not \
+ be parsed as a valid OID because it had an illegal character at position %d
+MILD_ERR_ATTR_SYNTAX_OID_CONSECUTIVE_PERIODS_50=The provided value %s could \
+ not be parsed as a valid OID because it had two consecutive periods at or \
+ near position %d
+MILD_ERR_ATTR_SYNTAX_OID_ENDS_WITH_PERIOD_51=The provided value %s could not \
+ be parsed as a valid OID because it ends with a period
+MILD_ERR_ATTR_SYNTAX_ATTRTYPE_EMPTY_VALUE_52=The provided value could not be \
+ parsed as a valid attribute type description because it was empty or \
+ contained only whitespace
+MILD_ERR_ATTR_SYNTAX_ATTRTYPE_EXPECTED_OPEN_PARENTHESIS_53=The provided value \
+ "%s" could not be parsed as an attribute type description because an open \
+ parenthesis was expected at position %d but instead a '%s' character was \
+ found
+MILD_ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE_54=The provided value "%s" \
+ could not be parsed as an attribute type description because the end of the \
+ value was encountered while the Directory Server expected more data to be \
+ provided
+MILD_ERR_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID_55=The provided \
+ value "%s" could not be parsed as an attribute type description because the \
+ numeric OID contained two consecutive periods at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID_56=The provided \
+ value "%s" could not be parsed as an attribute type description because the \
+ numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_STRING_OID_57=The provided \
+ value "%s" could not be parsed as an attribute type description because the \
+ non-numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_58=The provided value "%s" could \
+ not be parsed as an attribute type description because it contained an \
+ illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRTYPE_UNEXPECTED_CLOSE_PARENTHESIS_59=The provided \
+ value "%s" could not be parsed as an attribute type description because it \
+ contained an unexpected closing parenthesis at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_60=The provided value "%s" could \
+ not be parsed as an attribute type description because a single quote was \
+ expected as the first non-blank character following token %s.  However, the \
+ character %s was found instead
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUPERIOR_TYPE_61=The definition for \
+ the attribute type with OID %s declared a superior type with an OID of %s. \
+ No attribute type with this OID exists in the server schema
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_APPROXIMATE_MR_62=The definition for \
+ the attribute type with OID %s declared that approximate matching should be \
+ performed using the matching rule "%s".  No such approximate matching rule is \
+ configured for use in the Directory Server
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_EQUALITY_MR_63=The definition for \
+ the attribute type with OID %s declared that equality matching should be \
+ performed using the matching rule "%s".  No such equality matching rule is \
+ configured for use in the Directory Server
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_ORDERING_MR_64=The definition for \
+ the attribute type with OID %s declared that ordering matching should be \
+ performed using the matching rule "%s".  No such ordering matching rule is \
+ configured for use in the Directory Server
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUBSTRING_MR_65=The definition for \
+ the attribute type with OID %s declared that substring matching should be \
+ performed using the matching rule "%s".  No such substring matching rule is \
+ configured for use in the Directory Server
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SYNTAX_66=The definition for the \
+ attribute type with OID %s declared that it should have a syntax with OID %s. \
+ No such syntax is configured for use in the Directory Server
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_INVALID_ATTRIBUTE_USAGE_67=The definition \
+ for the attribute type with OID %s declared that it should have an attribute \
+ usage of %s.  This is an invalid usage
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS_68=The provided value \
+ "%s" could not be parsed as an attribute type description because a single \
+ quote was expected at position %d but the character %s was found instead
+MILD_ERR_ATTR_SYNTAX_OBJECTCLASS_EMPTY_VALUE_69=The provided value could not \
+ be parsed as a valid objectclass description because it was empty or \
+ contained only whitespace
+MILD_ERR_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_OPEN_PARENTHESIS_70=The provided \
+ value "%s" could not be parsed as an objectclass description because an open \
+ parenthesis was expected at position %d but instead a '%s' character was \
+ found
+MILD_ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE_71=The provided value "%s" \
+ could not be parsed as an objectclass description because the end of the \
+ value was encountered while the Directory Server expected more data to be \
+ provided
+MILD_ERR_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID_72=The provided \
+ value "%s" could not be parsed as an objectclass description because the \
+ numeric OID contained two consecutive periods at position %d
+MILD_ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID_73=The provided \
+ value "%s" could not be parsed as an objectclass description because the \
+ numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID_74=The provided \
+ value "%s" could not be parsed as an objectclass description because the \
+ non-numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_75=The provided value "%s" \
+ could not be parsed as an objectclass description because it contained an \
+ illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_OBJECTCLASS_UNEXPECTED_CLOSE_PARENTHESIS_76=The provided \
+ value "%s" could not be parsed as an objectclass description because it \
+ contained an unexpected closing parenthesis at position %d
+MILD_ERR_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_77=The provided value "%s" \
+ could not be parsed as an objectclass description because a single quote was \
+ expected as the first non-blank character following token %s.  However, the \
+ character %s was found instead
+SEVERE_WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_SUPERIOR_CLASS_78=The definition \
+ for the objectclass with OID %s declared a superior objectclass with an OID \
+ of %s.  No objectclass with this OID exists in the server schema
+SEVERE_WARN_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS_79=The provided \
+ value "%s" could not be parsed as an objectclass description because a single \
+ quote was expected at position %d but the character %s was found instead
+SEVERE_WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_REQUIRED_ATTR_80=The definition \
+ for the objectclass with OID %s declared that it should include required \
+ attribute "%s".  No attribute type matching this name or OID exists in the \
+ server schema
+SEVERE_WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_OPTIONAL_ATTR_81=The definition \
+ for the objectclass with OID %s declared that it should include optional \
+ attribute "%s".  No attribute type matching this name or OID exists in the \
+ server schema
+SEVERE_WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER_82=The provided value "%s" \
+ cannot be parsed as a valid IA5 string because it contains an illegal \
+ character "%s" that is not allowed in the IA5 (ASCII) character set
+INFO_ATTR_SYNTAX_TELEPHONE_DESCRIPTION_STRICT_MODE_83=This indicates whether \
+ the telephone number attribute syntax should use a strict mode in which it \
+ will only accept values in the ITU-T E.123 format.  If this is enabled, then \
+ any value not in this format will be rejected.  If this is disabled, then any \
+ value will be accepted, but only the digits will be considered when \
+ performing matching
+SEVERE_WARN_ATTR_SYNTAX_TELEPHONE_CANNOT_DETERMINE_STRICT_MODE_84=An error \
+ occurred while trying to retrieve attribute \
+ ds-cfg-strict-telephone-number-format from configuration entry %s:  %s.  The \
+ Directory Server will not enforce strict compliance to the ITU-T E.123 format \
+ for telephone number values
+MILD_ERR_ATTR_SYNTAX_TELEPHONE_EMPTY_85=The provided value is not a valid \
+ telephone number because it is empty or null
+MILD_ERR_ATTR_SYNTAX_TELEPHONE_NO_PLUS_86=The provided value "%s" is not a \
+ valid telephone number because strict telephone number checking is enabled \
+ and the value does not start with a plus sign in compliance with the ITU-T \
+ E.123 specification
+MILD_ERR_ATTR_SYNTAX_TELEPHONE_ILLEGAL_CHAR_87=The provided value "%s" is not \
+ a valid telephone number because strict telephone number checking is enabled \
+ and the character %s at position %d is not allowed by the ITU-T E.123 \
+ specification
+MILD_ERR_ATTR_SYNTAX_TELEPHONE_NO_DIGITS_88=The provided value "%s" is not a \
+ valid telephone number because it does not contain any numeric digits
+INFO_ATTR_SYNTAX_TELEPHONE_UPDATED_STRICT_MODE_89=The value of configuration \
+ attribute ds-cfg-strict-telephone-number-format, which indicates whether to \
+ use strict telephone number syntax checking, has been updated to %s in \
+ configuration entry %s
+SEVERE_WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR_90=The provided value \
+ "%s" is not a valid numeric string because it contained character %s at \
+ position %d that was neither a digit nor a space
+MILD_ERR_ATTR_SYNTAX_NUMERIC_STRING_EMPTY_VALUE_91=The provided value is not \
+ a valid numeric string because it did not contain any characters.  A numeric \
+ string value must contain at least one numeric digit or space
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_EMPTY_VALUE_92=The provided value could not \
+ be parsed as a valid attribute syntax description because it was empty or \
+ contained only whitespace
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_OPEN_PARENTHESIS_93=The provided \
+ value "%s" could not be parsed as an attribute syntax description because an \
+ open parenthesis was expected at position %d but instead a '%s' character was \
+ found
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE_94=The provided value "%s" \
+ could not be parsed as an attribute syntax description because the end of the \
+ value was encountered while the Directory Server expected more data to be \
+ provided
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID_95=The provided \
+ value "%s" could not be parsed as an attribute syntax description because the \
+ numeric OID contained two consecutive periods at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID_96=The provided \
+ value "%s" could not be parsed as an attribute syntax description because the \
+ numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_IN_STRING_OID_97=The provided \
+ value "%s" could not be parsed as an attribute syntax description because the \
+ non-numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS_98=The provided \
+ value "%s" could not be parsed as an attribute syntax description because it \
+ contained an unexpected closing parenthesis at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_TOKEN_99=The provided value \
+ "%s" could not be parsed as an attribute syntax description because an \
+ unexpected error occurred while trying to read the "DESC" token from the \
+ string at or near position %d:  %s
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_TOKEN_NOT_DESC_100=The provided value "%s" \
+ could not be parsed as an attribute syntax description because the "DESC" \
+ token was expected but the string "%s" was found instead
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_VALUE_101=The provided value \
+ "%s" could not be parsed as an attribute syntax description because an \
+ unexpected error occurred while trying to read the value of the "DESC" token \
+ from the string at or near position %d:  %s
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_CLOSE_PARENTHESIS_102=The provided \
+ value "%s" could not be parsed as an attribute syntax description because a \
+ close parenthesis was expected at position %d but instead a '%s' character \
+ was found
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_AFTER_CLOSE_103=The provided \
+ value "%s" could not be parsed as an attribute syntax description because an \
+ illegal character %s was found at position %d after the close parenthesis
+SEVERE_WARN_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_QUOTE_AT_POS_104=The provided \
+ value "%s" could not be parsed as an attribute syntax description because a \
+ single quote was expected at position %d but the character %s was found \
+ instead
+SEVERE_WARN_ATTR_SYNTAX_PRINTABLE_STRING_EMPTY_VALUE_105=The provided value \
+ could not be parsed as a printable string because it was null or empty.  A \
+ printable string must contain at least one character
+SEVERE_WARN_ATTR_SYNTAX_PRINTABLE_STRING_ILLEGAL_CHARACTER_106=The provided \
+ value "%s" could not be parsed as a printable string because it contained an \
+ invalid character %s at position %d
+SEVERE_WARN_ATTR_SYNTAX_SUBSTRING_ONLY_WILDCARD_107=The provided value "*" \
+ could not be parsed as a substring assertion because it consists only of a \
+ wildcard character and zero-length substrings are not allowed
+SEVERE_WARN_ATTR_SYNTAX_SUBSTRING_CONSECUTIVE_WILDCARDS_108=The provided \
+ value "%s" could not be parsed as a substring assertion because it contains \
+ consecutive wildcard characters at position %d and zero-length substrings are \
+ not allowed
+MILD_ERR_ATTR_SYNTAX_UTC_TIME_TOO_SHORT_109=The provided value %s is too \
+ short to be a valid UTC time value
+MILD_ERR_ATTR_SYNTAX_UTC_TIME_INVALID_YEAR_110=The provided value %s is not a \
+ valid UTC time value because the %s character is not allowed in the century \
+ or year specification
+MILD_ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH_111=The provided value %s is not \
+ a valid UTC time value because %s is not a valid month specification
+MILD_ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY_112=The provided value %s is not a \
+ valid UTC time value because %s is not a valid day specification
+MILD_ERR_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR_113=The provided value %s is not a \
+ valid UTC time value because %s is not a valid hour specification
+MILD_ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MINUTE_114=The provided value %s is not \
+ a valid UTC time value because %s is not a valid minute specification
+MILD_ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR_115=The provided value %s is not a \
+ valid UTC time value because it contains an invalid character %s at position \
+ %d
+MILD_ERR_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND_116=The provided value %s is not \
+ a valid UTC time value because %s is not a valid second specification
+MILD_ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET_117=The provided value %s is not \
+ a valid UTC time value because %s is not a valid GMT offset
+MILD_ERR_ATTR_SYNTAX_UTC_TIME_CANNOT_PARSE_118=The provided value %s could \
+ not be parsed as a valid UTC time:  %s
+MILD_ERR_ATTR_SYNTAX_DCR_EMPTY_VALUE_119=The provided value could not be \
+ parsed as a valid DIT content rule description because it was empty or \
+ contained only whitespace
+MILD_ERR_ATTR_SYNTAX_DCR_EXPECTED_OPEN_PARENTHESIS_120=The provided value \
+ "%s" could not be parsed as a DIT content rule description because an open \
+ parenthesis was expected at position %d but instead a '%s' character was \
+ found
+MILD_ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE_121=The provided value "%s" could \
+ not be parsed as a DIT content rule description because the end of the value \
+ was encountered while the Directory Server expected more data to be provided
+MILD_ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID_122=The provided value \
+ "%s" could not be parsed as a DIT content rule description because the \
+ numeric OID contained two consecutive periods at position %d
+MILD_ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID_123=The provided value \
+ "%s" could not be parsed as a DIT content rule description because the \
+ numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID_124=The provided value \
+ "%s" could not be parsed as a DIT content rule description because the \
+ non-numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_DCR_UNEXPECTED_CLOSE_PARENTHESIS_125=The provided value \
+ "%s" could not be parsed as a DIT content rule description because it \
+ contained an unexpected closing parenthesis at position %d
+MILD_ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_126=The provided value "%s" could not \
+ be parsed as a DIT content rule description because it contained an illegal \
+ character %s at position %d
+MILD_ERR_ATTR_SYNTAX_DCR_UNKNOWN_STRUCTURAL_CLASS_127=The DIT content rule \
+ "%s" is associated with a structural objectclass %s that is not defined in \
+ the server schema
+MILD_ERR_ATTR_SYNTAX_DCR_STRUCTURAL_CLASS_NOT_STRUCTURAL_128=The DIT content \
+ rule "%s" is associated with the objectclass with OID %s (%s).  This \
+ objectclass exists in the server schema but is defined as %s rather than \
+ structural
+MILD_ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS_129=The DIT content rule \
+ "%s" is associated with an auxiliary objectclass %s that is not defined in \
+ the server schema
+MILD_ERR_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY_130=The DIT content \
+ rule "%s" is associated with an auxiliary objectclass %s.  This objectclass \
+ exists in the server schema but is defined as %s rather than auxiliary
+MILD_ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR_131=The DIT content rule "%s" \
+ is associated with a required attribute type %s that is not defined in the \
+ server schema
+MILD_ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR_132=The DIT content rule "%s" \
+ is associated with an optional attribute type %s that is not defined in the \
+ server schema
+MILD_ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR_133=The DIT content rule \
+ "%s" is associated with a prohibited attribute type %s that is not defined in \
+ the server schema
+MILD_ERR_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS_134=The provided value "%s" \
+ could not be parsed as a DIT content rule description because a single quote \
+ was expected at position %d but the %s character was found instead
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_EMPTY_VALUE_135=The provided value could not \
+ be parsed as a valid name form description because it was empty or contained \
+ only whitespace
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_OPEN_PARENTHESIS_136=The provided \
+ value "%s" could not be parsed as a name form description because an open \
+ parenthesis was expected at position %d but instead a '%c' character was \
+ found
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE_137=The provided value "%s" \
+ could not be parsed as a name form description because the end of the value \
+ was encountered while the Directory Server expected more data to be provided
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_DOUBLE_PERIOD_IN_NUMERIC_OID_138=The provided \
+ value "%s" could not be parsed as a name form description because the numeric \
+ OID contained two consecutive periods at position %d
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_NUMERIC_OID_139=The provided \
+ value "%s" could not be parsed as a name form description because the numeric \
+ OID contained an illegal character %c at position %d
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_STRING_OID_140=The provided \
+ value "%s" could not be parsed as a name form description because the \
+ non-numeric OID contained an illegal character %c at position %d
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_UNEXPECTED_CLOSE_PARENTHESIS_141=The provided \
+ value "%s" could not be parsed as a name form description because it \
+ contained an unexpected closing parenthesis at position %d
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_142=The provided value "%s" could \
+ not be parsed as a name form description because it contained an illegal \
+ character %c at position %d
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_STRUCTURAL_CLASS_143=The name form \
+ description "%s" is associated with a structural objectclass %s that is not \
+ defined in the server schema
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_STRUCTURAL_CLASS_NOT_STRUCTURAL_144=The name \
+ form description "%s" is associated with the objectclass with OID %s (%s). \
+ This objectclass exists in the server schema but is defined as %s rather than \
+ structural
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_REQUIRED_ATTR_145=The definition for \
+ the name form with OID %s declared that it should include required attribute \
+ "%s".  No attribute type matching this name or OID exists in the server \
+ schema
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_OPTIONAL_ATTR_146=The definition for \
+ the name form with OID %s declared that it should include optional attribute \
+ "%s".  No attribute type matching this name or OID exists in the server \
+ schema
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_NO_STRUCTURAL_CLASS_147=The provided value \
+ "%s" could not be parsed as a name form description because it does not \
+ specify the structural objectclass with which it is associated
+MILD_ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS_148=The provided value \
+ "%s" could not be parsed as a name form description because a single quote \
+ was expected at position %d but the %c character was found instead
+MILD_ERR_ATTR_SYNTAX_MR_EMPTY_VALUE_149=The provided value could not be \
+ parsed as a valid matching rule description because it was empty or contained \
+ only whitespace
+MILD_ERR_ATTR_SYNTAX_MR_EXPECTED_OPEN_PARENTHESIS_150=The provided value "%s" \
+ could not be parsed as a matching rule description because an open \
+ parenthesis was expected at position %d but instead a '%s' character was \
+ found
+MILD_ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE_151=The provided value "%s" could not \
+ be parsed as a matching rule description because the end of the value was \
+ encountered while the Directory Server expected more data to be provided
+MILD_ERR_ATTR_SYNTAX_MR_DOUBLE_PERIOD_IN_NUMERIC_OID_152=The provided value \
+ "%s" could not be parsed as a matching rule description because the numeric \
+ OID contained two consecutive periods at position %d
+MILD_ERR_ATTR_SYNTAX_MR_ILLEGAL_CHAR_IN_NUMERIC_OID_153=The provided value \
+ "%s" could not be parsed as a matching rule description because the numeric \
+ OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_MR_ILLEGAL_CHAR_IN_STRING_OID_154=The provided value \
+ "%s" could not be parsed as a matching rule description because the \
+ non-numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_MR_UNEXPECTED_CLOSE_PARENTHESIS_155=The provided value \
+ "%s" could not be parsed as a matching rule description because it contained \
+ an unexpected closing parenthesis at position %d
+MILD_ERR_ATTR_SYNTAX_MR_ILLEGAL_CHAR_156=The provided value "%s" could not be \
+ parsed as a matching rule description because it contained an illegal \
+ character %s at position %d
+MILD_ERR_ATTR_SYNTAX_MR_UNKNOWN_SYNTAX_157=The matching rule description "%s" \
+ is associated with attribute syntax %s that is not defined in the server \
+ schema
+MILD_ERR_ATTR_SYNTAX_MR_NO_SYNTAX_158=The provided value "%s" could not be \
+ parsed as a matching rule description because it does not specify the \
+ attribute syntax with which it is associated
+MILD_ERR_ATTR_SYNTAX_MR_EXPECTED_QUOTE_AT_POS_159=The provided value "%s" \
+ could not be parsed as a matching rule description because a single quote was \
+ expected at position %d but the %s character was found instead
+MILD_ERR_ATTR_SYNTAX_MRUSE_EMPTY_VALUE_160=The provided value could not be \
+ parsed as a valid matching rule use description because it was empty or \
+ contained only whitespace
+MILD_ERR_ATTR_SYNTAX_MRUSE_EXPECTED_OPEN_PARENTHESIS_161=The provided value \
+ "%s" could not be parsed as a matching rule use description because an open \
+ parenthesis was expected at position %d but instead a '%s' character was \
+ found
+MILD_ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE_162=The provided value "%s" could \
+ not be parsed as a matching rule use description because the end of the value \
+ was encountered while the Directory Server expected more data to be provided
+MILD_ERR_ATTR_SYNTAX_MRUSE_DOUBLE_PERIOD_IN_NUMERIC_OID_163=The provided \
+ value "%s" could not be parsed as a matching rule use description because the \
+ numeric OID contained two consecutive periods at position %d
+MILD_ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_NUMERIC_OID_164=The provided value \
+ "%s" could not be parsed as a matching rule use description because the \
+ numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_STRING_OID_165=The provided value \
+ "%s" could not be parsed as a matching rule use description because the \
+ non-numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_MRUSE_UNKNOWN_MATCHING_RULE_166=The provided value "%s" \
+ could not be parsed as a matching rule use description because the specified \
+ matching rule %s is unknown
+MILD_ERR_ATTR_SYNTAX_MRUSE_UNEXPECTED_CLOSE_PARENTHESIS_167=The provided \
+ value "%s" could not be parsed as a matching rule use description because it \
+ contained an unexpected closing parenthesis at position %d
+MILD_ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_168=The provided value "%s" could not \
+ be parsed as a matching rule use description because it contained an illegal \
+ character %s at position %d
+MILD_ERR_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR_169=The matching rule use description \
+ "%s" is associated with attribute type %s that is not defined in the server \
+ schema
+MILD_ERR_ATTR_SYNTAX_MRUSE_NO_ATTR_170=The provided value "%s" could not be \
+ parsed as a matching rule description because it does not specify the set of \
+ attribute types that may be used with the associated OID
+MILD_ERR_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS_171=The provided value "%s" \
+ could not be parsed as a matching rule use description because a single quote \
+ was expected at position %d but the %s character was found instead
+MILD_ERR_ATTR_SYNTAX_DSR_EMPTY_VALUE_172=The provided value could not be \
+ parsed as a valid DIT structure rule description because it was empty or \
+ contained only whitespace
+MILD_ERR_ATTR_SYNTAX_DSR_EXPECTED_OPEN_PARENTHESIS_173=The provided value \
+ "%s" could not be parsed as a DIT structure rule description because an open \
+ parenthesis was expected at position %d but instead a '%s' character was \
+ found
+MILD_ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE_174=The provided value "%s" could \
+ not be parsed as a DIT structure rule description because the end of the \
+ value was encountered while the Directory Server expected more data to be \
+ provided
+MILD_ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID_175=The provided value "%s" \
+ could not be parsed as a DIT structure rule description because the rule ID \
+ contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_DSR_UNEXPECTED_CLOSE_PARENTHESIS_176=The provided value \
+ "%s" could not be parsed as a DIT structure rule description because it \
+ contained an unexpected closing parenthesis at position %d
+MILD_ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_177=The provided value "%s" could not \
+ be parsed as a DIT structure rule description because it contained an illegal \
+ character %s at position %d
+MILD_ERR_ATTR_SYNTAX_DSR_UNKNOWN_NAME_FORM_178=The provided value "%s" could \
+ not be parsed as a DIT structure rule description because it referenced an \
+ unknown name form %s
+MILD_ERR_ATTR_SYNTAX_DSR_UNKNOWN_RULE_ID_179=The provided value "%s" could \
+ not be parsed as a DIT structure rule description because it referenced an \
+ unknown rule ID %d for a superior DIT structure rule
+MILD_ERR_ATTR_SYNTAX_DSR_NO_NAME_FORM_180=The provided value "%s" could not \
+ be parsed as a DIT structure rule description because it did not specify the \
+ name form for the rule
+MILD_ERR_ATTR_SYNTAX_DSR_EXPECTED_QUOTE_AT_POS_181=The provided value "%s" \
+ could not be parsed as a DIT structure rule description because a single \
+ quote was expected at position %d but the %s character was found instead
+MILD_ERR_ATTR_SYNTAX_DSR_DOUBLE_PERIOD_IN_NUMERIC_OID_182=The provided value \
+ "%s" could not be parsed as a DIT structure rule description because the \
+ numeric OID contained two consecutive periods at position %d
+MILD_ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_NUMERIC_OID_183=The provided value \
+ "%s" could not be parsed as a DIT structure rule description because the \
+ numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_STRING_OID_184=The provided value \
+ "%s" could not be parsed as a DIT structure rule description because the \
+ non-numeric OID contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_TELEX_TOO_SHORT_185=The provided value "%s" is too short \
+ to be a valid telex number value
+MILD_ERR_ATTR_SYNTAX_TELEX_NOT_PRINTABLE_186=The provided value "%s" does not \
+ hold a valid telex number because a character %s at position %d was not a \
+ valid printable string character
+MILD_ERR_ATTR_SYNTAX_TELEX_ILLEGAL_CHAR_187=The provided value "%s" does not \
+ hold a valid telex number because character %s at position %d was neither a \
+ valid printable string character nor a dollar sign to separate the telex \
+ number components
+MILD_ERR_ATTR_SYNTAX_TELEX_TRUNCATED_188=The provided value "%s" does not \
+ hold a valid telex number because the end of the value was found before three \
+ dollar-delimited printable strings could be read
+MILD_ERR_ATTR_SYNTAX_FAXNUMBER_EMPTY_189=The provided value could not be \
+ parsed as a valid facsimile telephone number because it was empty
+MILD_ERR_ATTR_SYNTAX_FAXNUMBER_NOT_PRINTABLE_190=The provided value "%s" \
+ could not be parsed as a valid facsimile telephone number because character \
+ %s at position %d was not a valid printable string character
+MILD_ERR_ATTR_SYNTAX_FAXNUMBER_END_WITH_DOLLAR_191=The provided value "%s" \
+ could not be parsed as a valid facsimile telephone number because it ends \
+ with a dollar sign, but that dollar sign should have been followed by a fax \
+ parameter
+MILD_ERR_ATTR_SYNTAX_FAXNUMBER_ILLEGAL_PARAMETER_192=The provided value "%s" \
+ could not be parsed as a valid facsimile telephone number because the string \
+ "%s" between positions %d and %d was not a valid fax parameter
+MILD_ERR_ATTR_SYNTAX_NAMEANDUID_INVALID_DN_193=The provided value "%s" could \
+ not be parsed as a valid name and optional UID value because an error \
+ occurred while trying to parse the DN portion:  %s
+MILD_ERR_ATTR_SYNTAX_NAMEANDUID_ILLEGAL_BINARY_DIGIT_194=The provided value \
+ "%s" could not be parsed as a valid name and optional UID value because the \
+ UID portion contained an illegal binary digit %s at position %d
+MILD_ERR_ATTR_SYNTAX_TELETEXID_EMPTY_195=The provided value could not be \
+ parsed as a valid teletex terminal identifier because it was empty
+MILD_ERR_ATTR_SYNTAX_TELETEXID_NOT_PRINTABLE_196=The provided value "%s" \
+ could not be parsed as a valid teletex terminal identifier because character \
+ %s at position %d was not a valid printable string character
+MILD_ERR_ATTR_SYNTAX_TELETEXID_END_WITH_DOLLAR_197=The provided value "%s" \
+ could not be parsed as a valid teletex terminal identifier because it ends \
+ with a dollar sign, but that dollar sign should have been followed by a TTX \
+ parameter
+MILD_ERR_ATTR_SYNTAX_TELETEXID_PARAM_NO_COLON_198=The provided value "%s" \
+ could not be parsed as a valid teletex terminal identifier because the \
+ parameter string does not contain a colon to separate the name from the value
+MILD_ERR_ATTR_SYNTAX_TELETEXID_ILLEGAL_PARAMETER_199=The provided value "%s" \
+ could not be parsed as a valid teletex terminal identifier because the string \
+ "%s" is not a valid TTX parameter name
+MILD_ERR_ATTR_SYNTAX_OTHER_MAILBOX_EMPTY_VALUE_200=The provided value could \
+ not be parsed as an other mailbox value because it was empty
+MILD_ERR_ATTR_SYNTAX_OTHER_MAILBOX_NO_MBTYPE_201=The provided value "%s" \
+ could not be parsed as an other mailbox value because there was no mailbox \
+ type before the dollar sign
+MILD_ERR_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MBTYPE_CHAR_202=The provided value \
+ "%s" could not be parsed as an other mailbox value because the mailbox type \
+ contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_OTHER_MAILBOX_NO_MAILBOX_203=The provided value "%s" \
+ could not be parsed as an other mailbox value because there was no mailbox \
+ after the dollar sign
+MILD_ERR_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MB_CHAR_204=The provided value \
+ "%s" could not be parsed as an other mailbox value because the mailbox \
+ contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_GUIDE_NO_OC_205=The provided value "%s" could not be \
+ parsed as a guide value because it did not contain an objectclass name or OID \
+ before the octothorpe (#) character
+MILD_ERR_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR_206=The provided value "%s" could not \
+ be parsed as a guide value because the criteria portion %s contained an \
+ illegal character %c at position %d
+MILD_ERR_ATTR_SYNTAX_GUIDE_MISSING_CLOSE_PAREN_207=The provided value "%s" \
+ could not be parsed as a guide value because the criteria portion %s did not \
+ contain a close parenthesis that corresponded to the initial open parenthesis
+MILD_ERR_ATTR_SYNTAX_GUIDE_INVALID_QUESTION_MARK_208=The provided value "%s" \
+ could not be parsed as a guide value because the criteria portion %s started \
+ with a question mark but was not followed by the string "true" or "false"
+MILD_ERR_ATTR_SYNTAX_GUIDE_NO_DOLLAR_209=The provided value "%s" could not be \
+ parsed as a guide value because the criteria portion %s did not contain a \
+ dollar sign to separate the attribute type from the match type
+MILD_ERR_ATTR_SYNTAX_GUIDE_NO_ATTR_210=The provided value "%s" could not be \
+ parsed as a guide value because the criteria portion %s did not specify an \
+ attribute type before the dollar sign
+MILD_ERR_ATTR_SYNTAX_GUIDE_NO_MATCH_TYPE_211=The provided value "%s" could \
+ not be parsed as a guide value because the criteria portion %s did not \
+ specify a match type after the dollar sign
+MILD_ERR_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE_212=The provided value "%s" \
+ could not be parsed as a guide value because the criteria portion %s had an \
+ invalid match type starting at position %d
+MILD_ERR_ATTR_SYNTAX_ENHANCEDGUIDE_NO_SHARP_213=The provided value "%s" could \
+ not be parsed as an enhanced guide value because it did not contain an \
+ octothorpe (#) character to separate the objectclass from the criteria
+MILD_ERR_ATTR_SYNTAX_ENHANCEDGUIDE_NO_OC_214=The provided value "%s" could \
+ not be parsed as an enhanced guide value because it did not contain an \
+ objectclass name or OID before the octothorpe (#) character
+MILD_ERR_ATTR_SYNTAX_ENHANCEDGUIDE_DOUBLE_PERIOD_IN_OC_OID_215=The provided \
+ value "%s" could not be parsed as an enhanced guide value because the numeric \
+ OID %s specifying the objectclass contained two consecutive periods at \
+ position %d
+MILD_ERR_ATTR_SYNTAX_ENHANCEDGUIDE_ILLEGAL_CHAR_IN_OC_OID_216=The provided \
+ value "%s" could not be parsed as an enhanced guide value because the numeric \
+ OID %s specifying the objectclass contained an illegal character %s at \
+ position %d
+MILD_ERR_ATTR_SYNTAX_ENHANCEDGUIDE_ILLEGAL_CHAR_IN_OC_NAME_217=The provided \
+ value "%s" could not be parsed as an enhanced guide value because the \
+ objectclass name %s contained an illegal character %s at position %d
+MILD_ERR_ATTR_SYNTAX_ENHANCEDGUIDE_NO_FINAL_SHARP_218=The provided value "%s" \
+ could not be parsed as an enhanced guide value because it did not have an \
+ octothorpe (#) character to separate the criteria from the scope
+MILD_ERR_ATTR_SYNTAX_ENHANCEDGUIDE_NO_SCOPE_219=The provided value "%s" could \
+ not be parsed as an enhanced guide value because no scope was provided after \
+ the final octothorpe (#) character
+MILD_ERR_ATTR_SYNTAX_ENHANCEDGUIDE_INVALID_SCOPE_220=The provided value "%s" \
+ could not be parsed as an enhanced guide value because the specified scope %s \
+ was invalid
+MILD_ERR_ATTR_SYNTAX_ENHANCEDGUIDE_NO_CRITERIA_221=The provided value "%s" \
+ could not be parsed as an enhanced guide value because it did not specify any \
+ criteria between the octothorpe (#) characters
+MILD_ERR_ATTR_SYNTAX_OID_INVALID_VALUE_222=The provided value %s could not be \
+ parsed as a valid OID:  %s
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_NORMALIZE_FAILURE_223=An unexpected \
+ error occurred while trying to normalize value %s as a generalized time \
+ value:  %s
+SEVERE_WARN_OMR_CASE_EXACT_COMPARE_CANNOT_NORMALIZE_224=An error occurred \
+ while attempting to compare two AttributeValue objects using the \
+ caseExactOrderingMatch matching rule because the normalized form of one of \
+ those values could not be retrieved:  %s
+SEVERE_WARN_OMR_CASE_EXACT_COMPARE_INVALID_TYPE_225=An error occurred while \
+ attempting to compare two objects using the caseExactOrderingMatch matching \
+ rule because the objects were of an unsupported type %s.  Only byte arrays, \
+ ASN.1 octet strings, and attribute value objects may be compared
+SEVERE_WARN_OMR_CASE_IGNORE_COMPARE_CANNOT_NORMALIZE_226=An error occurred \
+ while attempting to compare two AttributeValue objects using the \
+ caseIgnoreOrderingMatch matching rule because the normalized form of one of \
+ those values could not be retrieved:  %s
+SEVERE_WARN_OMR_CASE_IGNORE_COMPARE_INVALID_TYPE_227=An error occurred while \
+ attempting to compare two objects using the caseIgnoreOrderingMatch matching \
+ rule because the objects were of an unsupported type %s.  Only byte arrays, \
+ ASN.1 octet strings, and attribute value objects may be compared
+SEVERE_WARN_OMR_GENERALIZED_TIME_COMPARE_CANNOT_NORMALIZE_228=An error \
+ occurred while attempting to compare two AttributeValue objects using the \
+ generalizedTimeOrderingMatch matching rule because the normalized form of one \
+ of those values could not be retrieved:  %s
+SEVERE_WARN_OMR_GENERALIZED_TIME_COMPARE_INVALID_TYPE_229=An error occurred \
+ while attempting to compare two objects using the \
+ generalizedTimeOrderingMatch matching rule because the objects were of an \
+ unsupported type %s.  Only byte arrays, ASN.1 octet strings, and attribute \
+ value objects may be compared
+SEVERE_WARN_OMR_INTEGER_COMPARE_CANNOT_NORMALIZE_230=An error occurred while \
+ attempting to compare two AttributeValue objects using the \
+ integerOrderingMatch matching rule because the normalized form of one of \
+ those values could not be retrieved:  %s
+SEVERE_WARN_OMR_INTEGER_COMPARE_INVALID_TYPE_231=An error occurred while \
+ attempting to compare two objects using the integerOrderingMatch matching \
+ rule because the objects were of an unsupported type %s.  Only byte arrays, \
+ ASN.1 octet strings, and attribute value objects may be compared
+SEVERE_WARN_OMR_NUMERIC_STRING_COMPARE_CANNOT_NORMALIZE_232=An error occurred \
+ while attempting to compare two AttributeValue objects using the \
+ numericStringOrderingMatch matching rule because the normalized form of one \
+ of those values could not be retrieved:  %s
+SEVERE_WARN_OMR_NUMERIC_STRING_COMPARE_INVALID_TYPE_233=An error occurred \
+ while attempting to compare two objects using the numericStringOrderingMatch \
+ matching rule because the objects were of an unsupported type %s.  Only byte \
+ arrays, ASN.1 octet strings, and attribute value objects may be compared
+SEVERE_WARN_OMR_OCTET_STRING_COMPARE_CANNOT_NORMALIZE_234=An error occurred \
+ while attempting to compare two AttributeValue objects using the \
+ octetStringOrderingMatch matching rule because the normalized form of one of \
+ those values could not be retrieved:  %s
+SEVERE_WARN_OMR_OCTET_STRING_COMPARE_INVALID_TYPE_235=An error occurred while \
+ attempting to compare two objects using the octetStringOrderingMatch matching \
+ rule because the objects were of an unsupported type %s.  Only byte arrays, \
+ ASN.1 octet strings, and attribute value objects may be compared
+SEVERE_WARN_ATTR_SYNTAX_UUID_INVALID_LENGTH_236=The provided value "%s" has \
+ an invalid length for a UUID.  All UUID values must have a length of exactly \
+ 36 bytes, but the provided value had a length of %d bytes
+SEVERE_WARN_ATTR_SYNTAX_UUID_EXPECTED_DASH_237=The provided value "%s" should \
+ have had a dash at position %d, but the character '%s' was found instead
+SEVERE_WARN_ATTR_SYNTAX_UUID_EXPECTED_HEX_238=The provided value "%s" should \
+ have had a hexadecimal digit at position %d, but the character '%s' was found \
+ instead
+INFO_ATTR_SYNTAX_DIRECTORYSTRING_DESCRIPTION_ALLOW_ZEROLENGTH_239=Indicates \
+ whether attributes with the directory string syntax will be allowed to have \
+ zero-length values.  This is technically not allowed by the LDAP \
+ specifications, but it may be useful for backward compatibility with previous \
+ Directory Server releases
+SEVERE_ERR_ATTR_SYNTAX_DIRECTORYSTRING_CANNOT_DETERMINE_ZEROLENGTH_240=An \
+ error occurred while trying to determine the value of the %s configuration \
+ attribute, which indicates whether directory string attributes should be \
+ allowed to have zero-length values:  %s
+SEVERE_ERR_ATTR_SYNTAX_DIRECTORYSTRING_INVALID_ZEROLENGTH_VALUE_241=The \
+ operation attempted to assign a zero-length value to an attribute with the \
+ directory string syntax
+INFO_ATTR_SYNTAX_DIRECTORYSTRING_UPDATED_ALLOW_ZEROLENGTH_242=The %s \
+ attribute in configuration entry %s has been updated with a new value of %s
+SEVERE_ERR_ATTR_SYNTAX_AUTHPW_INVALID_SCHEME_CHAR_243=The provided \
+ authPassword value had an invalid scheme character at position %d
+SEVERE_ERR_ATTR_SYNTAX_AUTHPW_NO_SCHEME_244=The provided authPassword value \
+ had a zero-length scheme element
+SEVERE_ERR_ATTR_SYNTAX_AUTHPW_NO_SCHEME_SEPARATOR_245=The provided \
+ authPassword value was missing the separator character or had an illegal \
+ character between the scheme and authInfo elements
+SEVERE_ERR_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_INFO_CHAR_246=The provided \
+ authPassword value had an invalid authInfo character at position %d
+SEVERE_ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO_247=The provided authPassword \
+ value had a zero-length authInfo element
+SEVERE_ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO_SEPARATOR_248=The provided \
+ authPassword value was missing the separator character or had an illegal \
+ character between the authInfo and authValue elements
+SEVERE_ERR_EMR_INTFIRSTCOMP_NO_INITIAL_PARENTHESIS_249=The provided value \
+ "%s" could not be parsed by the integer first component matching rule because \
+ it did not start with a parenthesis
+SEVERE_ERR_EMR_INTFIRSTCOMP_NO_NONSPACE_250=The provided value "%s" could not \
+ be parsed by the integer first component matching rule because it did not \
+ have any non-space characters after the opening parenthesis
+SEVERE_ERR_EMR_INTFIRSTCOMP_NO_SPACE_AFTER_INT_251=The provided value "%s" \
+ could not be parsed by the integer first component matching rule because it \
+ did not have any space characters after the first component
+SEVERE_ERR_EMR_INTFIRSTCOMP_FIRST_COMPONENT_NOT_INT_252=The provided value \
+ "%s" could not be parsed by the integer first component matching rule because \
+ the first component does not appear to be an integer value
+SEVERE_ERR_ATTR_SYNTAX_USERPW_NO_VALUE_253=No value was given to decode by \
+ the user password attribute syntax
+SEVERE_ERR_ATTR_SYNTAX_USERPW_NO_OPENING_BRACE_254=Unable to decode the \
+ provided value according to the user password syntax because the value does \
+ not start with the opening curly brace ("{") character
+SEVERE_ERR_ATTR_SYNTAX_USERPW_NO_CLOSING_BRACE_255=Unable to decode the \
+ provided value according to the user password syntax because the value does \
+ not contain a closing curly brace ("}") character
+SEVERE_ERR_ATTR_SYNTAX_USERPW_NO_SCHEME_256=Unable to decode the provided \
+ value according to the user password syntax because the value does not \
+ contain a storage scheme name
+MILD_ERR_ATTR_SYNTAX_RFC3672_SUBTREE_SPECIFICATION_INVALID_257=The provided \
+ value "%s" could not be parsed as a valid RFC 3672 subtree specification
+MILD_ERR_ATTR_SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_INVALID_258=The provided \
+ value "%s" could not be parsed as a valid absolute subtree specification
+MILD_ERR_ATTR_SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_INVALID_259=The provided \
+ value "%s" could not be parsed as a valid relative subtree specification
+SEVERE_WARN_ATTR_SYNTAX_ILLEGAL_INTEGER_260=The provided value %s is not \
+ allowed for attributes with a Integer syntax
+SEVERE_ERR_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_VALUE_CHAR_261=The provided \
+ authPassword value had an invalid authValue character at position %d
+SEVERE_ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_VALUE_262=The provided authPassword \
+ value had a zero-length authValue element
+SEVERE_ERR_ATTR_SYNTAX_AUTHPW_INVALID_TRAILING_CHAR_263=The provided \
+ authPassword value had an invalid trailing character at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER_264=The provided \
+ value "%s" could not be parsed as an attribute syntax extension because an \
+ invalid characterwas found at position %d
+MILD_ERR_ATTR_SYNTAX_ATTRSYNTAX_INVALID_EXTENSION_265=The attribute syntax \
+ could not be parsed because of aninvalid extension.%s
+SEVERE_WARN_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE_266=The definition \
+ for objectclass %s is invalid because it has an objectclass type of %s but \
+ this is incompatible with the objectclass type %s for the superior class %s
+SEVERE_WARN_ATTR_SYNTAX_OBJECTCLASS_STRUCTURAL_SUPERIOR_NOT_TOP_267=The \
+ definition for objectclass %s is invalid because it is defined as a \
+ structural class but its superior chain does not include the "top" \
+ objectclass
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_INVALID_SUPERIOR_USAGE_268=The definition \
+ for attribute type %s is invalid because its attribute usage %s is not the \
+ same as the usage for its superior type %s
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_COLLECTIVE_FROM_NONCOLLECTIVE_269=The \
+ definition for attribute type %s is invalid because it is defined as a \
+ collective type but the superior type %s is not collective
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_NONCOLLECTIVE_FROM_COLLECTIVE_270=The \
+ definition for attribute type %s is invalid because it is not defined as a \
+ collective type but the superior type %s is collective
+MILD_ERR_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_STRUCTURAL_271=The DIT \
+ content rule "%s" is not valid because it prohibits the use of attribute type \
+ %s which is required by the associated structural object class %s
+MILD_ERR_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_AUXILIARY_272=The DIT content \
+ rule "%s" is not valid because it prohibits the use of attribute type %s \
+ which is required by the associated auxiliary object class %s
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_COLLECTIVE_IS_OPERATIONAL_273=The definition \
+ for attribute type %s is invalid because it is declared COLLECTIVE but does \
+ not have a usage of userApplications
+SEVERE_WARN_ATTR_SYNTAX_ATTRTYPE_NO_USER_MOD_NOT_OPERATIONAL_274=The \
+ definition for attribute type %s is invalid because it is declared \
+ NO-USER-MODIFICATION but does not have an operational usage
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_FRACTION_CHAR_275=The \
+ provided value %s is not a valid generalized time value because it contains \
+ illegal character %s in the fraction component
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_EMPTY_FRACTION_276=The provided \
+ value %s is not a valid generalized time value because it does not contain at \
+ least one digit after the period to use as the fractional component
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_NO_TIME_ZONE_INFO_277=The provided \
+ value %s is not a valid generalized time value because it does not end with \
+ 'Z' or a time zone offset
+SEVERE_WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME_278=The provided value \
+ %s is not a valid generalized time value because it represents an invalid \
+ time (e.g., a date that does not exist):  %s
diff --git a/opendj-sdk/opends/src/messages/messages/sync.properties b/opendj-sdk/opends/src/messages/messages/sync.properties
new file mode 100644
index 0000000..1929487
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/sync.properties
@@ -0,0 +1,172 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+
+#
+# Global directives
+#
+global.category=SYNC
+
+#
+# Format string definitions
+#
+MILD_ERR_SYNC_INVALID_DN_1=The configured DN is already used by another \
+ domain
+MILD_ERR_INVALID_CHANGELOG_SERVER_4=Invalid replication server configuration
+MILD_ERR_UNKNOWN_HOSTNAME_5=Changelog failed to start because the hostname is \
+ unknown
+MILD_ERR_COULD_NOT_BIND_CHANGELOG_6=Changelog failed to start : could not \
+ bind to the changelog listen port : %d. Error : %s
+MILD_ERR_UNKNOWN_TYPE_7=Unknown operation type : %s
+MILD_ERR_ERROR_REPLAYING_OPERATION_8=Error %s when replaying operation with \
+ changenumber %s %s : %s
+MILD_ERR_OPERATION_NOT_FOUND_IN_PENDING_9=Internal Error : Operation %s \
+ change number %s was not found in pending list
+MILD_ERR_COULD_NOT_INITIALIZE_DB_10=Changelog failed to start because the \
+ database %s could not be opened
+MILD_ERR_COULD_NOT_READ_DB_11=Changelog failed to start because the database \
+ %s could not be read
+MILD_ERR_EXCEPTION_REPLAYING_OPERATION_12=An Exception was caught while \
+ replaying operation %s : %s
+MILD_ERR_NEED_CHANGELOG_PORT_13=The replication server port must be defined
+MILD_ERR_ERROR_UPDATING_RUV_14=Error %s when updating server state %s : %s \
+ base dn : %s
+MILD_ERR_ERROR_SEARCHING_RUV_15=Error %s when searching for server state %s : \
+ %s base dn : %s
+NOTICE_SERVER_DISCONNECT_16=%s has disconnected from this replication server
+NOTICE_NO_CHANGELOG_SERVER_LISTENING_17=There is no replication server \
+ listening on %s
+NOTICE_CHANGELOG_MISSING_CHANGES_18=The replication server %s is missing some \
+ changes that this server has already processed
+NOTICE_NEED_MORE_THAN_ONE_CHANGELOG_SERVER_19=More than one replication \
+ server should be configured
+NOTICE_EXCEPTION_STARTING_SESSION_20=Caught Exception during initial \
+ communication with replication server :
+NOTICE_CANNOT_RECOVER_CHANGES_21=Error when searching old changes from the \
+ database.
+NOTICE_COULD_NOT_FIND_CHANGELOG_WITH_MY_CHANGES_22=Could not find a \
+ replication server that has seen all the local changes. Going to replay \
+ changes
+NOTICE_COULD_NOT_FIND_CHANGELOG_23=Could not connect to any replication \
+ server on suffix %s, retrying...
+NOTICE_EXCEPTION_CLOSING_DATABASE_24=Error closing changelog database %s :
+SEVERE_ERR_EXCEPTION_DECODING_OPERATION_25=Error trying to replay %s, \
+ operation could not be decoded :
+FATAL_ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR_26=Error Trying to use the \
+ underlying database. The Changelog Service is going to shut down.
+SEVERE_ERR_IGNORE_BAD_DN_IN_DATABASE_IDENTIFIER_27=A badly formatted DN was \
+ found in the list of database known By this changelog service :%s. This \
+ Identifier will be ignored.
+SEVERE_ERR_ERROR_CLOSING_CHANGELOG_ENV_28=Error closing the changelog \
+ database :
+SEVERE_ERR_EXCEPTION_CHANGELOG_TRIM_FLUSH_29=Error during the changelog \
+ database trimming or flush process. The Changelog service is going to \
+ shutdown.
+SEVERE_ERR_CHANGELOG_CONNECTION_ERROR_30=Error during Changelog service \
+ message processing . Connection from %s is rejected.
+SEVERE_ERR_UNKNOWN_MESSAGE_31=%s has sent an unknown message. Closing the \
+ connection.
+SEVERE_ERR_WRITER_UNEXPECTED_EXCEPTION_32=An unexpected error happened \
+ handling connection with %s.This connection is going to be closed.
+SEVERE_ERR_CHANGELOG_ERROR_SENDING_ACK_33=An unexpected error occurred  while \
+ sending an ack to %s.This connection is going to be closed and reopened.
+SEVERE_ERR_EXCEPTION_RECEIVING_REPLICATION_MESSAGE_34=An Exception was caught \
+ while receiving replication message : %s
+MILD_ERR_LOOP_REPLAYING_OPERATION_35=A loop was detected while replaying \
+ operation: %s
+MILD_ERR_FILE_CHECK_CREATE_FAILED_36=An Exception was caught while testing \
+ existence or trying  to create the directory for the changelog database : %s
+INFO_CHANGELOG_SERVER_ATTR_37=Specifies the list of replication servers to \
+ which this replication server should connect. Each value of this attribute \
+ should contain a values build with the hostname and the port number of the \
+ remote server separated with a ":"
+INFO_SERVER_ID_ATTR_38=Specifies the server ID. Each replication server in \
+ the topology Must be assigned a unique server ID in the topology
+INFO_CHANGELOG_PORT_ATTR_39=Specifies the port number that the replication \
+ server will use to listen for connections from LDAP servers
+INFO_WINDOW_SIZE_ATTR_40=Specifies the receive window size of the replication \
+ server
+INFO_QUEUE_SIZE_ATTR_41=Specifies the receive queue size of the replication \
+ server. The replication servers will queue up to this number of messages in \
+ its memory queue and save the older messages to persistent storage. Using a \
+ larger size may improve performances when The replication delay is larger \
+ than this size but at the cost of using more memory
+INFO_CHANGELOG_DIR_PATH_ATTR_42=Specifies the replication server directory. \
+ The replication server will create all persistent storage below this path
+INFO_PURGE_DELAY_ATTR_43=Specifies the Changelog Purge Delay, The replication \
+ servers will keep all changes up to this amount of time before deleting them. \
+ This values defines the maximum age of a backup that can be restored because \
+ replication servers would not be able to refresh LDAP servers with older \
+ versions of the data. A zero value can be used to specify an infinite delay \
+ (or never purge)
+SEVERE_ERR_SIMULTANEOUS_IMPORT_EXPORT_REJECTED_44=The current request is \
+ rejected due to an import or an export already in progress for the same data
+SEVERE_ERR_INVALID_IMPORT_SOURCE_45=Invalid source for the import
+SEVERE_ERR_INVALID_EXPORT_TARGET_46=Invalid target for the export
+SEVERE_ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN_47=No reachable peer in the domain
+SEVERE_ERR_NO_MATCHING_DOMAIN_48=No domain matches the base DN provided
+SEVERE_ERR_MULTIPLE_MATCHING_DOMAIN_49=Multiple domains match the base DN \
+ provided
+SEVERE_ERR_INVALID_PROVIDER_50=The provider class does not allow the \
+ operation requested
+SEVERE_ERR_COULD_NOT_SOLVE_HOSTNAME_51=The hostname %s could not be resolved \
+ as an IP address
+NOTICE_READER_NULL_MSG_52=Received a Null Msg from %s
+NOTICE_READER_EXCEPTION_53=Exception when reading messages from %s
+SEVERE_ERR_DUPLICATE_SERVER_ID_54=Servers %s and %s have the same ServerId : \
+ %d
+SEVERE_ERR_DUPLICATE_REPLICATION_SERVER_ID_55=Replication Servers %s and %s \
+ have the same ServerId : %d
+SEVERE_ERR_BAD_HISTORICAL_56=Entry %s was containing some unknown historical \
+ information, This may cause some inconsistency for this entry
+SEVERE_ERR_CANNOT_ADD_CONFLICT_ATTRIBUTE_57=A conflict was detected but the \
+ conflict information could not beadded. Operation :
+SEVERE_ERR_CANNOT_RENAME_CONFLICT_ENTRY_58=An error happened trying the \
+ rename a conflicting entry :
+SEVERE_ERR_EXCEPTION_RENAME_CONFLICT_ENTRY_59=An Exception happened when \
+ trying the rename a conflicting entry :
+SEVERE_ERR_CHANGELOG_UNSUPPORTED_UTF8_ENCODING_60=The JVM does not support \
+ UTF-8. This is required to be able to encode the changes in the database. \
+ This replication server will now shutdown
+SEVERE_ERR_REPLICATION_COULD_NOT_CONNECT_61=The Replication is configured for \
+ suffix  %s but was not able to connect to any Replication Server
+NOTICE_NOW_FOUND_CHANGELOG_62=Replication Server %s now used for Replication \
+ Domain %s
+NOTICE_DISCONNECTED_FROM_CHANGELOG_63=The connection to Replication Server %s \
+ has been dropped by the Replication Server
+SEVERE_ERR_CHANGELOG_ERROR_SENDING_INFO_64=An unexpected error occurred \
+ while sending a Server  Info message to %s. This connection is going to be \
+ closed and reopened
+SEVERE_ERR_CHANGELOG_ERROR_SENDING_ERROR_65=An unexpected error occurred \
+ while sending an Error Message to %s. This connection is going to be closed \
+ and reopened
+SEVERE_ERR_CHANGELOG_ERROR_SENDING_MSG_66=An unexpected error occurred  while \
+ sending a Message to %s. This connection is going to be closed and reopened
diff --git a/opendj-sdk/opends/src/messages/messages/task.properties b/opendj-sdk/opends/src/messages/messages/task.properties
new file mode 100644
index 0000000..05a6238
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/task.properties
@@ -0,0 +1,123 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=TASK
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+SEVERE_ERR_TASK_CANNOT_ENABLE_BACKEND_1=The task could not enable a backend: \
+ %s
+SEVERE_ERR_TASK_CANNOT_DISABLE_BACKEND_2=The task could not disable a \
+ backend: %s
+INFO_TASK_SHUTDOWN_DEFAULT_MESSAGE_3=The Directory Server shutdown process \
+ has been initiated by task %s
+INFO_TASK_SHUTDOWN_CUSTOM_MESSAGE_4=The Directory Server shutdown process has \
+ been initiated by task %s:  %s
+SEVERE_ERR_TASK_ADDSCHEMAFILE_NO_FILENAME_5=Unable to add one or more files \
+ to the server schema because no schema file names were provided in attribute \
+ %s of task entry %s
+SEVERE_ERR_TASK_ADDSCHEMAFILE_NO_SUCH_FILE_6=Unable to add one or more files \
+ to the server schema because the specified schema file %s does not exist in \
+ schema directory %s
+SEVERE_ERR_TASK_ADDSCHEMAFILE_ERROR_CHECKING_FOR_FILE_7=Unable to add one or \
+ more files to the server schema because an error occurred while attempting to \
+ determine whether file %s exists in schema directory %s:  %s
+SEVERE_ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE_8=An error occurred \
+ while attempting to load the contents of schema file %s into the server \
+ schema:  %s
+SEVERE_ERR_TASK_ADDSCHEMAFILE_CANNOT_LOCK_SCHEMA_9=Unable to add one or more \
+ files to the server schema because the server was unable to obtain a write \
+ lock on the schema entry %s after multiple attempts
+SEVERE_ERR_TASK_ADDSCHEMAFILE_INSUFFICIENT_PRIVILEGES_10=You do not have \
+ sufficient privileges to modify the server schema
+SEVERE_ERR_TASK_BACKUP_INSUFFICIENT_PRIVILEGES_11=You do not have sufficient \
+ privileges to initiate a Directory Server backup
+SEVERE_ERR_TASK_RESTORE_INSUFFICIENT_PRIVILEGES_12=You do not have sufficient \
+ privileges to initiate a Directory Server restore
+SEVERE_ERR_TASK_LDIFIMPORT_INSUFFICIENT_PRIVILEGES_13=You do not have \
+ sufficient privileges to initiate an LDIF import
+SEVERE_ERR_TASK_LDIFEXPORT_INSUFFICIENT_PRIVILEGES_14=You do not have \
+ sufficient privileges to initiate an LDIF export
+SEVERE_ERR_TASK_SHUTDOWN_INSUFFICIENT_RESTART_PRIVILEGES_15=You do not have \
+ sufficient privileges to initiate a Directory Server restart
+SEVERE_ERR_TASK_SHUTDOWN_INSUFFICIENT_SHUTDOWN_PRIVILEGES_16=You do not have \
+ sufficient privileges to initiate a Directory Server shutdown
+SEVERE_ERR_TASK_ADDSCHEMAFILE_CANNOT_NOTIFY_SYNC_PROVIDER_17=An error \
+ occurred while attempting to notify a synchronization provider of type %s \
+ about the schema changes made by the add schema file task:  %s
+SEVERE_ERR_TASK_INDEXREBUILD_INSUFFICIENT_PRIVILEGES_18=You do not have \
+ sufficient privileges to initiate an index rebuild
+SEVERE_ERR_TASK_INITIALIZE_TARGET_INVALID_DN_19=Invalid DN provided with the \
+ Initialize Target task
+SEVERE_ERR_TASK_INITIALIZE_INVALID_DN_20=Invalid DN provided with the \
+ Initialize task
+SEVERE_ERR_TASK_ENTERLOCKDOWN_NOT_ROOT_21=Only root users may place the \
+ server in lockdown mode
+SEVERE_ERR_TASK_ENTERLOCKDOWN_NOT_LOOPBACK_22=Only root users connected from \
+ a loopback address may place the server in lockdown mode
+SEVERE_ERR_TASK_LEAVELOCKDOWN_NOT_ROOT_23=Only root users may cause the \
+ server to leave lockdown mode
+SEVERE_ERR_TASK_LEAVELOCKDOWN_NOT_LOOPBACK_24=Only root users connected from \
+ a loopback address may cause the server to leave lockdown mode
+SEVERE_ERR_TASK_DISCONNECT_NO_PRIVILEGE_25=You do not have sufficient \
+ privileges to terminate client connections
+SEVERE_ERR_TASK_DISCONNECT_INVALID_CONN_ID_26=Unable to decode value %s as an \
+ integer connection ID
+SEVERE_ERR_TASK_DISCONNECT_NO_CONN_ID_27=Attribute %s must be provided to \
+ specify the connection ID for the client to disconnect
+SEVERE_ERR_TASK_DISCONNECT_INVALID_NOTIFY_CLIENT_28=Unable to decode value %s \
+ as an indication of whether to notify the client before disconnecting it. \
+ The provided value should be either 'true' or 'false'
+INFO_TASK_DISCONNECT_GENERIC_MESSAGE_29=An administrator has terminated this \
+ client connection
+SEVERE_ERR_TASK_DISCONNECT_NO_SUCH_CONNECTION_30=There is no client \
+ connection with connection ID %s
+INFO_TASK_DISCONNECT_MESSAGE_31=An administrator has terminated this client \
+ connection
diff --git a/opendj-sdk/opends/src/messages/messages/third_party.properties b/opendj-sdk/opends/src/messages/messages/third_party.properties
new file mode 100644
index 0000000..aa7960a
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/third_party.properties
@@ -0,0 +1,54 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=THIRD_PARTY
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
diff --git a/opendj-sdk/opends/src/messages/messages/tools.properties b/opendj-sdk/opends/src/messages/messages/tools.properties
new file mode 100644
index 0000000..8097b4e
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/tools.properties
@@ -0,0 +1,2168 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=TOOLS
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+SEVERE_ERR_TOOLS_CANNOT_CREATE_SSL_CONNECTION_1=Unable to create an SSL \
+ connection to the server: %s
+SEVERE_ERR_TOOLS_SSL_CONNECTION_NOT_INITIALIZED_2=Unable to create an SSL \
+ connection to the server because the connection factory has not been \
+ initialized
+SEVERE_ERR_TOOLS_CANNOT_LOAD_KEYSTORE_FILE_3=Cannot load the key store file: \
+ %s
+SEVERE_ERR_TOOLS_CANNOT_INIT_KEYMANAGER_4=Cannot initialize the key manager \
+ for the key store:%s
+SEVERE_ERR_TOOLS_CANNOT_LOAD_TRUSTSTORE_FILE_5=Cannot load the key store \
+ file: %s
+SEVERE_ERR_TOOLS_CANNOT_INIT_TRUSTMANAGER_6=Cannot initialize the key manager \
+ for the key store:%s
+INFO_ENCPW_DESCRIPTION_LISTSCHEMES_7=List available password storage schemes
+INFO_ENCPW_DESCRIPTION_CLEAR_PW_8=Clear-text password to encode or to compare \
+ against an encoded password
+INFO_ENCPW_DESCRIPTION_CLEAR_PW_FILE_9=Clear-text password file
+INFO_ENCPW_DESCRIPTION_ENCODED_PW_10=Encoded password to compare against the \
+ clear-text password
+INFO_ENCPW_DESCRIPTION_ENCODED_PW_FILE_11=Encoded password file
+INFO_DESCRIPTION_CONFIG_CLASS_12=The fully-qualified name of the Java class \
+ to use as the Directory Server configuration handler.  If this is not \
+ provided, then a default of org.opends.server.extensions.ConfigFileHandler \
+ will be used
+INFO_DESCRIPTION_CONFIG_FILE_13=Specifies the path to the Directory Server \
+ configuration file
+INFO_ENCPW_DESCRIPTION_SCHEME_14=Scheme to use for the encoded password
+INFO_DESCRIPTION_USAGE_15=Displays this usage information
+SEVERE_ERR_CANNOT_INITIALIZE_ARGS_16=An unexpected error occurred while \
+ attempting to initialize the command-line arguments:  %s
+SEVERE_ERR_ERROR_PARSING_ARGS_17=An error occurred while parsing the \
+ command-line arguments:  %s
+SEVERE_ERR_ENCPW_NO_CLEAR_PW_18=No clear-text password was specified.  Use \
+ --%s or --%s to specify the password to encode
+SEVERE_ERR_ENCPW_NO_SCHEME_19=No password storage scheme was specified.  Use \
+ the --%s argument to specify the storage scheme
+SEVERE_ERR_SERVER_BOOTSTRAP_ERROR_20=An unexpected error occurred while \
+ attempting to bootstrap the Directory Server client-side code:  %s
+SEVERE_ERR_CANNOT_LOAD_CONFIG_21=An error occurred while trying to load the \
+ Directory Server configuration:  %s
+SEVERE_ERR_CANNOT_LOAD_SCHEMA_22=An error occurred while trying to load the \
+ Directory Server schema:  %s
+SEVERE_ERR_CANNOT_INITIALIZE_CORE_CONFIG_23=An error occurred while trying to \
+ initialize the core Directory Server configuration:  %s
+SEVERE_ERR_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES_24=An error occurred while \
+ trying to initialize the Directory Server password storage schemes:  %s
+SEVERE_ERR_ENCPW_NO_STORAGE_SCHEMES_25=No password storage schemes have been \
+ configured for use in the Directory Server
+SEVERE_ERR_ENCPW_NO_SUCH_SCHEME_26=Password storage scheme "%s" is not \
+ configured for use in the Directory Server
+INFO_ENCPW_PASSWORDS_MATCH_27=The provided clear-text and encoded passwords \
+ match
+INFO_ENCPW_PASSWORDS_DO_NOT_MATCH_28=The provided clear-text and encoded \
+ passwords do not match
+SEVERE_ERR_ENCPW_ENCODED_PASSWORD_29=Encoded Password:  "%s"
+SEVERE_ERR_ENCPW_CANNOT_ENCODE_30=An error occurred while attempting to \
+ encode the clear-text password:  %s
+INFO_LDIFEXPORT_DESCRIPTION_LDIF_FILE_33=Path to the LDIF file to be written
+INFO_LDIFEXPORT_DESCRIPTION_APPEND_TO_LDIF_34=Append an existing LDIF file \
+ rather than overwriting it
+INFO_LDIFEXPORT_DESCRIPTION_BACKEND_ID_35=Backend ID for the backend to \
+ export
+INFO_LDIFEXPORT_DESCRIPTION_EXCLUDE_BRANCH_36=Base DN of a branch to exclude \
+ from the LDIF export
+INFO_LDIFEXPORT_DESCRIPTION_INCLUDE_ATTRIBUTE_37=Attribute to include in the \
+ LDIF export
+INFO_LDIFEXPORT_DESCRIPTION_EXCLUDE_ATTRIBUTE_38=Attribute to exclude from \
+ the LDIF export
+INFO_LDIFEXPORT_DESCRIPTION_INCLUDE_FILTER_39=Filter to identify entries to \
+ include in the LDIF export
+INFO_LDIFEXPORT_DESCRIPTION_EXCLUDE_FILTER_40=Filter to identify entries to \
+ exclude from the LDIF export
+INFO_LDIFEXPORT_DESCRIPTION_WRAP_COLUMN_41=Column at which to wrap long lines \
+ (0 for no wrapping)
+INFO_LDIFEXPORT_DESCRIPTION_COMPRESS_LDIF_42=Compress the LDIF data as it is \
+ exported
+INFO_LDIFEXPORT_DESCRIPTION_ENCRYPT_LDIF_43=Encrypt the LDIF data as it is \
+ exported
+INFO_LDIFEXPORT_DESCRIPTION_SIGN_HASH_44=Generate a signed hash of the export \
+ data
+SEVERE_ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER_52=Unable to decode exclude \
+ filter string "%s" as a valid search filter:  %s
+SEVERE_ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER_53=Unable to decode include \
+ filter string "%s" as a valid search filter:  %s
+SEVERE_ERR_CANNOT_DECODE_BASE_DN_54=Unable to decode base DN string "%s" as a \
+ valid distinguished name:  %s
+SEVERE_ERR_LDIFEXPORT_MULTIPLE_BACKENDS_FOR_ID_55=Multiple Directory Server \
+ backends are configured with the requested backend ID "%s"
+SEVERE_ERR_LDIFEXPORT_NO_BACKENDS_FOR_ID_56=None of the Directory Server \
+ backends are configured with the requested backend ID "%s"
+SEVERE_ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE_57=Unable to decode exclude \
+ branch string "%s" as a valid distinguished name:  %s
+SEVERE_ERR_LDIFEXPORT_CANNOT_DECODE_WRAP_COLUMN_AS_INTEGER_58=Unable to \
+ decode wrap column value "%s" as an integer
+SEVERE_ERR_LDIFEXPORT_ERROR_DURING_EXPORT_59=An error occurred while \
+ attempting to process the LDIF export:  %s
+SEVERE_ERR_CANNOT_DECODE_BACKEND_BASE_DN_60=Unable to decode the backend \
+ configuration base DN string "%s" as a valid DN:  %s
+SEVERE_ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY_61=Unable to retrieve the \
+ backend configuration base entry "%s" from the server configuration:  %s
+SEVERE_ERR_CANNOT_DETERMINE_BACKEND_CLASS_62=Cannot determine the name of the \
+ Java class providing the logic for the backend defined in configuration entry \
+ %s:  %s
+SEVERE_ERR_CANNOT_LOAD_BACKEND_CLASS_63=Unable to load class %s referenced in \
+ configuration entry %s for use as a Directory Server backend:  %s
+SEVERE_ERR_CANNOT_INSTANTIATE_BACKEND_CLASS_64=Unable to create an instance \
+ of class %s referenced in configuration entry %s as a Directory Server \
+ backend:  %s
+SEVERE_ERR_NO_BASES_FOR_BACKEND_65=No base DNs have been defined in backend \
+ configuration entry %s.  This backend will not be evaluated
+SEVERE_ERR_CANNOT_DETERMINE_BASES_FOR_BACKEND_66=Unable to determine the set \
+ of base DNs defined in backend configuration entry %s:  %s
+INFO_LDIFIMPORT_DESCRIPTION_LDIF_FILE_69=Path to the LDIF file to be imported
+INFO_LDIFIMPORT_DESCRIPTION_APPEND_70=Append to an existing database rather \
+ than overwriting it
+INFO_LDIFIMPORT_DESCRIPTION_REPLACE_EXISTING_71=Replace existing entries when \
+ appending to the database
+INFO_LDIFIMPORT_DESCRIPTION_BACKEND_ID_72=Backend ID for the backend to \
+ import
+INFO_LDIFIMPORT_DESCRIPTION_EXCLUDE_BRANCH_73=Base DN of a branch to exclude \
+ from the LDIF import
+INFO_LDIFIMPORT_DESCRIPTION_INCLUDE_ATTRIBUTE_74=Attribute to include in the \
+ LDIF import
+INFO_LDIFIMPORT_DESCRIPTION_EXCLUDE_ATTRIBUTE_75=Attribute to exclude from \
+ the LDIF import
+INFO_LDIFIMPORT_DESCRIPTION_INCLUDE_FILTER_76=Filter to identify entries to \
+ include in the LDIF import
+INFO_LDIFIMPORT_DESCRIPTION_EXCLUDE_FILTER_77=Filter to identify entries to \
+ exclude from the LDIF import
+INFO_LDIFIMPORT_DESCRIPTION_REJECT_FILE_78=Write rejected entries to the \
+ specified file
+INFO_LDIFIMPORT_DESCRIPTION_OVERWRITE_79=Overwrite an existing rejects and/or \
+ skip file rather than appending to it
+INFO_LDIFIMPORT_DESCRIPTION_IS_COMPRESSED_80=LDIF file is compressed
+INFO_LDIFIMPORT_DESCRIPTION_IS_ENCRYPTED_81=LDIF file is encrypted
+SEVERE_ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER_89=Unable to decode exclude \
+ filter string "%s" as a valid search filter:  %s
+SEVERE_ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER_90=Unable to decode include \
+ filter string "%s" as a valid search filter:  %s
+SEVERE_ERR_LDIFIMPORT_MULTIPLE_BACKENDS_FOR_ID_92=Imported branches or \
+ backend IDs can not span across multiple Directory Server backends
+SEVERE_ERR_LDIFIMPORT_NO_BACKENDS_FOR_ID_93=None of the Directory Server \
+ backends are configured with the requested backend ID or base DNs that \
+ include the specified branches
+SEVERE_ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE_94=Unable to decode exclude \
+ branch string "%s" as a valid distinguished name:  %s
+SEVERE_ERR_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE_95=An error occurred while \
+ trying to open the rejects file %s for writing:  %s
+SEVERE_ERR_LDIFIMPORT_ERROR_DURING_IMPORT_96=An error occurred while \
+ attempting to process the LDIF import:  %s
+INFO_PROCESSING_OPERATION_104=Processing %s request for %s
+INFO_OPERATION_FAILED_105=%s operation failed
+INFO_OPERATION_SUCCESSFUL_106=%s operation successful for DN %s
+INFO_PROCESSING_COMPARE_OPERATION_107=Comparing type %s with value %s in \
+ entry %s
+INFO_COMPARE_OPERATION_RESULT_FALSE_108=Compare operation returned false for \
+ entry %s
+INFO_COMPARE_OPERATION_RESULT_TRUE_109=Compare operation returned true for \
+ entry %s
+INFO_SEARCH_OPERATION_INVALID_PROTOCOL_110=Invalid operation type returned in \
+ search result %s
+INFO_DESCRIPTION_TRUSTALL_111=Trust all server SSL certificates
+INFO_DESCRIPTION_BINDDN_112=Specifies the DN to use to bind to the server
+INFO_DESCRIPTION_BINDPASSWORD_113=Specifies the password to use to bind to \
+ the server
+INFO_DESCRIPTION_BINDPASSWORDFILE_114=Bind password file
+INFO_DESCRIPTION_ENCODING_115=Use the specified character set for \
+ command-line input
+INFO_DESCRIPTION_VERBOSE_116=Use verbose mode
+INFO_DESCRIPTION_KEYSTOREPATH_117=Certificate keystore path
+INFO_DESCRIPTION_TRUSTSTOREPATH_118=Certificate trust store path
+INFO_DESCRIPTION_KEYSTOREPASSWORD_119=Certificate keystore PIN
+INFO_DESCRIPTION_HOST_120=Directory server hostname or IP address
+INFO_DESCRIPTION_PORT_121=Directory server port number
+INFO_DESCRIPTION_SHOWUSAGE_122=Display this usage information
+INFO_DESCRIPTION_CONTROLS_123=Use a request control with the provided \
+ information
+INFO_DESCRIPTION_CONTINUE_ON_ERROR_124=Continue processing even if there are \
+ errors
+INFO_DESCRIPTION_USE_SSL_125=Use SSL for secure communication with the server
+INFO_DESCRIPTION_START_TLS_126=Use StartTLS to secure communication with the \
+ server
+INFO_DESCRIPTION_USE_SASL_EXTERNAL_127=Use the SASL EXTERNAL authentication \
+ mechanism
+INFO_DELETE_DESCRIPTION_FILENAME_128=File containing the DNs of the entries \
+ to delete
+INFO_DELETE_DESCRIPTION_DELETE_SUBTREE_129=Delete the specified entry and all \
+ entries below it
+INFO_MODIFY_DESCRIPTION_DEFAULT_ADD_130=Treat records with no changetype as \
+ add operations
+INFO_SEARCH_DESCRIPTION_BASEDN_131=Search base DN
+INFO_SEARCH_DESCRIPTION_SIZE_LIMIT_132=Maximum number of entries to return \
+ from the search
+INFO_SEARCH_DESCRIPTION_TIME_LIMIT_133=Maximum length of time in seconds to \
+ allow for the search
+INFO_SEARCH_DESCRIPTION_SEARCH_SCOPE_134=Search scope ('base', 'one', 'sub', \
+ or 'subordinate')
+INFO_SEARCH_DESCRIPTION_DEREFERENCE_POLICY_135=Alias dereference policy \
+ ('never', 'always', 'search', or 'find')
+SEVERE_ERR_LDAPAUTH_CANNOT_SEND_SIMPLE_BIND_136=Cannot send the simple bind \
+ request:  %s
+SEVERE_ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE_137=Cannot read the bind \
+ response from the server:  %s
+SEVERE_ERR_LDAPAUTH_SERVER_DISCONNECT_138=The Directory Server indicated that \
+ it was closing the connection to the client (result code %d, message "%s"
+SEVERE_ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE_139=The Directory Server \
+ sent an unexpected extended response message to the client:  %s
+SEVERE_ERR_LDAPAUTH_UNEXPECTED_RESPONSE_140=The Directory Server sent an \
+ unexpected response message to the client:  %s
+MILD_ERR_LDAPAUTH_SIMPLE_BIND_FAILED_141=The simple bind attempt failed
+SEVERE_ERR_LDAPAUTH_NO_SASL_MECHANISM_142=A SASL bind was requested but no \
+ SASL mechanism was specified
+MILD_ERR_LDAPAUTH_UNSUPPORTED_SASL_MECHANISM_143=The requested SASL mechanism \
+ "%s" is not supported by this client
+MILD_ERR_LDAPAUTH_TRACE_SINGLE_VALUED_144=The trace SASL property may only be \
+ given a single value
+MILD_ERR_LDAPAUTH_INVALID_SASL_PROPERTY_145=Property "%s" is not allowed for \
+ the %s SASL mechanism
+SEVERE_ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND_146=Cannot send the SASL %S bind \
+ request:  %s
+MILD_ERR_LDAPAUTH_SASL_BIND_FAILED_147=The SASL %s bind attempt failed
+MILD_ERR_LDAPAUTH_NO_SASL_PROPERTIES_148=No SASL properties were provided for \
+ use with the %s mechanism
+MILD_ERR_LDAPAUTH_AUTHID_SINGLE_VALUED_149=The "authid" SASL property only \
+ accepts a single value
+MILD_ERR_LDAPAUTH_SASL_AUTHID_REQUIRED_150=The "authid" SASL property is \
+ required for use with the %s mechanism
+MILD_ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND_151=Cannot send the initial \
+ bind request in the multi-stage %s bind to the server:  %s
+MILD_ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE_152=Cannot read the \
+ initial %s bind response from the server:  %s
+MILD_ERR_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE_153=The client received an \
+ unexpected intermediate bind response.  The "SASL bind in progress" result \
+ was expected for the first response in the multi-stage %s bind process, but \
+ the bind response had a result code of %d (%s) and an error message of "%s"
+MILD_ERR_LDAPAUTH_NO_CRAMMD5_SERVER_CREDENTIALS_154=The initial bind response \
+ from the server did not include any server SASL credentials containing the \
+ challenge information needed to complete the CRAM-MD5 authentication
+MILD_ERR_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST_155=An unexpected error \
+ occurred while trying to initialize the MD5 digest generator:  %s
+MILD_ERR_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND_156=Cannot send the second \
+ bind request in the multi-stage %s bind to the server:  %s
+MILD_ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE_157=Cannot read the second \
+ %s bind response from the server:  %s
+MILD_ERR_LDAPAUTH_NO_ALLOWED_SASL_PROPERTIES_158=One or more SASL properties \
+ were provided, but the %s mechanism does not take any SASL properties
+MILD_ERR_LDAPAUTH_AUTHZID_SINGLE_VALUED_159=The "authzid" SASL property only \
+ accepts a single value
+MILD_ERR_LDAPAUTH_REALM_SINGLE_VALUED_160=The "realm" SASL property only \
+ accepts a single value
+MILD_ERR_LDAPAUTH_QOP_SINGLE_VALUED_161=The "qop" SASL property only accepts \
+ a single value
+MILD_ERR_LDAPAUTH_DIGESTMD5_QOP_NOT_SUPPORTED_162=The "%s" QoP mode is not \
+ supported by this client.  Only the "auth" mode is currently available for \
+ use
+MILD_ERR_LDAPAUTH_DIGESTMD5_INVALID_QOP_163=The specified DIGEST-MD5 quality \
+ of protection mode "%s" is not valid.  The only QoP mode currently supported \
+ is "auth"
+MILD_ERR_LDAPAUTH_DIGEST_URI_SINGLE_VALUED_164=The "digest-uri" SASL property \
+ only accepts a single value
+MILD_ERR_LDAPAUTH_NO_DIGESTMD5_SERVER_CREDENTIALS_165=The initial bind \
+ response from the server did not include any server SASL credentials \
+ containing the challenge information needed to complete the DIGEST-MD5 \
+ authentication
+MILD_ERR_LDAPAUTH_DIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS_166=The DIGEST-MD5 \
+ credentials provided by the server contained an invalid token of "%s" \
+ starting at position %d
+MILD_ERR_LDAPAUTH_DIGESTMD5_INVALID_CHARSET_167=The DIGEST-MD5 credentials \
+ provided by the server specified the use of the "%s" character set.  The \
+ character set that may be specified in the DIGEST-MD5 credentials is "utf-8"
+MILD_ERR_LDAPAUTH_REQUESTED_QOP_NOT_SUPPORTED_BY_SERVER_168=The requested QoP \
+ mode of "%s" is not listed as supported by the Directory Server.  The \
+ Directory Server's list of supported QoP modes is:  "%s"
+MILD_ERR_LDAPAUTH_DIGESTMD5_NO_NONCE_169=The server SASL credentials provided \
+ in response to the initial DIGEST-MD5 bind request did not include the nonce \
+ to use to generate the authentication digests
+MILD_ERR_LDAPAUTH_DIGESTMD5_CANNOT_CREATE_RESPONSE_DIGEST_170=An error \
+ occurred while attempting to generate the response digest for the DIGEST-MD5 \
+ bind request:  %s
+MILD_ERR_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS_171=The DIGEST-MD5 bind response \
+ from the server did not include the "rspauth" element to provide a digest of \
+ the response authentication information
+MILD_ERR_LDAPAUTH_DIGESTMD5_COULD_NOT_DECODE_RSPAUTH_172=An error occurred \
+ while trying to decode the rspauth element of the DIGEST-MD5 bind response \
+ from the server as a hexadecimal string:  %s
+MILD_ERR_LDAPAUTH_DIGESTMD5_COULD_NOT_CALCULATE_RSPAUTH_173=An error occurred \
+ while trying to calculate the expected rspauth element to compare against the \
+ value included in the DIGEST-MD5 response from the server:  %s
+MILD_ERR_LDAPAUTH_DIGESTMD5_RSPAUTH_MISMATCH_174=The rpsauth element included \
+ in the DIGEST-MD5 bind response from the Directory Server was different from \
+ the expected value calculated by the client
+MILD_ERR_LDAPAUTH_DIGESTMD5_INVALID_CLOSING_QUOTE_POS_175=The DIGEST-MD5 \
+ response challenge could not be parsed because it had an invalid quotation \
+ mark at position %d
+INFO_LDAPAUTH_PROPERTY_DESCRIPTION_TRACE_176=Specifies a text string that may \
+ be written to the Directory Server error log as trace information for the \
+ bind
+INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID_177=Specifies the authentication ID \
+ for the bind
+INFO_LDAPAUTH_PROPERTY_DESCRIPTION_REALM_178=Specifies the realm into which \
+ the authentication is to be performed
+INFO_LDAPAUTH_PROPERTY_DESCRIPTION_QOP_179=Specifies the quality of \
+ protection to use for the bind
+INFO_LDAPAUTH_PROPERTY_DESCRIPTION_DIGEST_URI_180=Specifies the digest URI to \
+ use for the bind
+INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHZID_181=Specifies the authorization ID \
+ to use for the bind
+INFO_DESCRIPTION_SASL_PROPERTIES_182=SASL bind options
+INFO_LDAPAUTH_PROPERTY_DESCRIPTION_KDC_183=Specifies the KDC to use for the \
+ Kerberos authentication
+MILD_ERR_LDAPAUTH_KDC_SINGLE_VALUED_184=The "kdc" SASL property only accepts \
+ a single value
+MILD_ERR_LDAPAUTH_GSSAPI_INVALID_QOP_185=The specified GSSAPI quality of \
+ protection mode "%s" is not valid.  The only QoP mode currently supported is \
+ "auth"
+SEVERE_ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_JAAS_CONFIG_186=An error occurred \
+ while trying to create the temporary JAAS configuration for GSSAPI \
+ authentication:  %s
+MILD_ERR_LDAPAUTH_GSSAPI_LOCAL_AUTHENTICATION_FAILED_187=An error occurred \
+ while attempting to perform local authentication to the Kerberos realm:  %s
+MILD_ERR_LDAPAUTH_GSSAPI_REMOTE_AUTHENTICATION_FAILED_188=An error occurred \
+ while attempting to perform GSSAPI authentication to the Directory Server: \
+ %s
+SEVERE_ERR_LDAPAUTH_NONSASL_RUN_INVOCATION_189=The \
+ LDAPAuthenticationHandler.run() method was called for a non-SASL bind.  The \
+ backtrace for this call is %s
+SEVERE_ERR_LDAPAUTH_UNEXPECTED_RUN_INVOCATION_190=The \
+ LDAPAuthenticationHandler.run() method was called for a SASL bind with an \
+ unexpected mechanism of "%s".  The backtrace for this call is %s
+SEVERE_ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_SASL_CLIENT_191=An error occurred \
+ while attempting to create a SASL client to process the GSSAPI \
+ authentication:  %s
+SEVERE_ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_INITIAL_CHALLENGE_192=An error \
+ occurred while attempting to create the initial challenge for GSSAPI \
+ authentication:  %s
+MILD_ERR_LDAPAUTH_GSSAPI_CANNOT_VALIDATE_SERVER_CREDS_193=An error occurred \
+ while trying to validate the SASL credentials provided by the Directory \
+ Server in the GSSAPI bind response:  %s
+MILD_ERR_LDAPAUTH_GSSAPI_UNEXPECTED_SUCCESS_RESPONSE_194=The Directory Server \
+ unexpectedly returned a success response to the client even though the client \
+ does not believe that the GSSAPI negotiation is complete
+MILD_ERR_LDAPAUTH_GSSAPI_BIND_FAILED_195=The GSSAPI bind attempt failed
+SEVERE_ERR_LDAPAUTH_NONSASL_CALLBACK_INVOCATION_196=The \
+ LDAPAuthenticationHandler.handle() method was called for a non-SASL bind. \
+ The backtrace for this call is %s
+SEVERE_ERR_LDAPAUTH_UNEXPECTED_GSSAPI_CALLBACK_197=The \
+ LDAPAuthenticationHandler.handle() method was called during a GSSAPI bind \
+ attempt with an unexpected callback type of %s
+SEVERE_ERR_LDAPAUTH_UNEXPECTED_CALLBACK_INVOCATION_198=The \
+ LDAPAuthenticationHandler.handle() method was called for an unexpected SASL \
+ mechanism of %s.  The backtrace for this call is %s
+INFO_LDAPAUTH_PASSWORD_PROMPT_199=Password for user '%s':
+INFO_DESCRIPTION_VERSION_200=LDAP protocol version number
+MILD_ERR_DESCRIPTION_INVALID_VERSION_201=Invalid LDAP version number '%s'. \
+ Allowed values are 2 and 3
+SEVERE_ERR_LDAPAUTH_CANNOT_SEND_WHOAMI_REQUEST_202=Cannot send the 'Who Am \
+ I?' request to the Directory Server:  %s
+SEVERE_ERR_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE_203=Cannot read the 'Who Am \
+ I?' response from the Directory Server:  %s
+MILD_ERR_LDAPAUTH_WHOAMI_FAILED_204=The 'Who Am I?' request was rejected by \
+ the Directory Server
+SEVERE_ERR_SEARCH_INVALID_SEARCH_SCOPE_205=Invalid scope %s specified for the \
+ search request
+SEVERE_ERR_SEARCH_NO_FILTERS_206=No filters specified for the search request
+INFO_VERIFYINDEX_DESCRIPTION_BASE_DN_207=Specifies the base DN of a backend \
+ supporting indexing. Verification is performed on indexes within the scope of \
+ the given base DN
+INFO_VERIFYINDEX_DESCRIPTION_INDEX_NAME_208=Specifies the name of an index to \
+ be verified. For an attribute index this is simply an attribute name. \
+ Multiple indexes may be verified for completeness, or all indexes if no \
+ indexes are specified.  An index is complete if each index value references \
+ all entries containing that value
+INFO_VERIFYINDEX_DESCRIPTION_VERIFY_CLEAN_209=Specifies that a single index \
+ should be verified to ensure it is clean.  An index is clean if each index \
+ value references only entries containing that value.  Only one index at a \
+ time may be verified in this way
+SEVERE_ERR_VERIFYINDEX_ERROR_DURING_VERIFY_210=An error occurred while \
+ attempting to perform index verification:  %s
+SEVERE_ERR_VERIFYINDEX_VERIFY_CLEAN_REQUIRES_SINGLE_INDEX_211=Only one index \
+ at a time may be verified for cleanliness
+SEVERE_ERR_BACKEND_NO_INDEXING_SUPPORT_212=The backend does not support \
+ indexing
+SEVERE_ERR_LDIFEXPORT_CANNOT_EXPORT_BACKEND_213=The Directory Server backend \
+ with backend ID "%s" does not provide a mechanism for performing LDIF exports
+SEVERE_ERR_LDIFIMPORT_CANNOT_IMPORT_214=The Directory Server backend with \
+ backend ID %s does not provide a mechanism for performing LDIF imports
+INFO_DESCRIPTION_DONT_WRAP_215=Do not wrap long lines
+INFO_LDIFIMPORT_DESCRIPTION_INCLUDE_BRANCH_216=Base DN of a branch to include \
+ in the LDIF import
+SEVERE_ERR_CANNOT_DETERMINE_BACKEND_ID_217=Cannot determine the backend ID \
+ for the backend defined in configuration entry %s:  %s
+SEVERE_ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE_218=Unable to decode include \
+ branch string "%s" as a valid distinguished name:  %s
+SEVERE_ERR_LDIFIMPORT_INVALID_INCLUDE_BASE_219=Provided include base DN "%s" \
+ is not handled by the backend with backend ID %s
+SEVERE_ERR_MULTIPLE_BACKENDS_FOR_BASE_230=Multiple Directory Server backends \
+ are configured to support base DN "%s"
+SEVERE_ERR_NO_BACKENDS_FOR_BASE_231=None of the Directory Server backends are \
+ configured to support the requested base DN "%s"
+INFO_LDIFEXPORT_DESCRIPTION_INCLUDE_BRANCH_240=Base DN of a branch to include \
+ in the LDIF export
+SEVERE_ERR_LDIFEXPORT_CANNOT_DECODE_INCLUDE_BASE_241=Unable to decode include \
+ branch string "%s" as a valid distinguished name:  %s
+SEVERE_ERR_LDIFEXPORT_INVALID_INCLUDE_BASE_242=Provided include base DN "%s" \
+ is not handled by the backend with backend ID %s
+INFO_BACKUPDB_DESCRIPTION_BACKEND_ID_245=Backend ID for the backend to \
+ archive
+INFO_BACKUPDB_DESCRIPTION_BACKUP_ID_246=Use the provided identifier for the \
+ backup
+INFO_BACKUPDB_DESCRIPTION_BACKUP_DIR_247=Path to the target directory for the \
+ backup file(s)
+INFO_BACKUPDB_DESCRIPTION_INCREMENTAL_248=Perform an incremental backup \
+ rather than a full backup
+INFO_BACKUPDB_DESCRIPTION_COMPRESS_249=Compress the backup contents
+INFO_BACKUPDB_DESCRIPTION_ENCRYPT_250=Encrypt the backup contents
+INFO_BACKUPDB_DESCRIPTION_HASH_251=Generate a hash of the backup contents
+INFO_BACKUPDB_DESCRIPTION_SIGN_HASH_252=Sign the hash of the backup contents
+SEVERE_ERR_BACKUPDB_MULTIPLE_BACKENDS_FOR_ID_260=Multiple Directory Server \
+ backends are configured with the requested backend ID "%s"
+SEVERE_ERR_BACKUPDB_NO_BACKENDS_FOR_ID_261=None of the Directory Server \
+ backends are configured with the requested backend ID "%s"
+SEVERE_ERR_BACKUPDB_CONFIG_ENTRY_MISMATCH_262=The configuration for the \
+ backend with backend ID %s is held in entry "%s", but other backups in the \
+ target backup directory %s were generated from a backend whose configuration \
+ was held in configuration entry "%s"
+SEVERE_ERR_BACKUPDB_INVALID_BACKUP_DIR_263=An error occurred while attempting \
+ to use the specified path "%s" as the target directory for the backup:  %s
+SEVERE_ERR_BACKUPDB_CANNOT_BACKUP_264=The target backend %s cannot be backed \
+ up using the requested configuration:  %s
+SEVERE_ERR_BACKUPDB_ERROR_DURING_BACKUP_265=An error occurred while \
+ attempting to back up backend %s with the requested configuration:  %s
+INFO_BACKUPDB_DESCRIPTION_BACKUP_ALL_274=Back up all backends in the server
+SEVERE_ERR_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID_275=The %s and %s \
+ arguments may not be used together.  Exactly one of them must be provided
+SEVERE_ERR_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID_276=Neither the %s argument \
+ nor the %s argument was provided.  Exactly one of them is required
+SEVERE_ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR_277=An error occurred while \
+ attempting to create the backup directory %s:  %s
+SEVERE_WARN_BACKUPDB_BACKUP_NOT_SUPPORTED_278=Backend ID %s was included in \
+ the set of backends to archive, but this backend does not provide support for \
+ a backup mechanism.  It will be skipped
+SEVERE_WARN_BACKUPDB_NO_BACKENDS_TO_ARCHIVE_279=None of the target backends \
+ provide a backup mechanism.  The backup operation has been aborted
+NOTICE_BACKUPDB_STARTING_BACKUP_280=Starting backup for backend %s
+SEVERE_ERR_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR_281=An error occurred \
+ while attempting to parse the backup descriptor file %s:  %s
+NOTICE_BACKUPDB_COMPLETED_WITH_ERRORS_282=The backup process completed with \
+ one or more errors
+NOTICE_BACKUPDB_COMPLETED_SUCCESSFULLY_283=The backup process completed \
+ successfully
+SEVERE_ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER_284=An error occurred while \
+ attempting to initialize the crypto manager:  %s
+INFO_BACKUPDB_DESCRIPTION_INCREMENTAL_BASE_ID_287=Backup ID of the source \
+ archive for an incremental backup
+SEVERE_ERR_BACKUPDB_INCREMENTAL_BASE_REQUIRES_INCREMENTAL_288=The use of the \
+ %s argument requires that the %s argument is also provided
+INFO_RESTOREDB_DESCRIPTION_BACKEND_ID_291=Backend ID for the backend to \
+ restore
+INFO_RESTOREDB_DESCRIPTION_BACKUP_ID_292=Backup ID of the backup to restore
+INFO_RESTOREDB_DESCRIPTION_BACKUP_DIR_293=Path to the directory containing \
+ the backup file(s)
+INFO_RESTOREDB_DESCRIPTION_LIST_BACKUPS_294=List available backups in the \
+ backup directory
+INFO_RESTOREDB_DESCRIPTION_VERIFY_ONLY_295=Verify the contents of the backup \
+ but do not restore it
+SEVERE_ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY_304=An error occurred while \
+ attempting to examine the set of backups contained in backup directory %s: \
+ %s
+INFO_RESTOREDB_LIST_BACKUP_ID_305=Backup ID:          %s
+INFO_RESTOREDB_LIST_BACKUP_DATE_306=Backup Date:        %s
+INFO_RESTOREDB_LIST_INCREMENTAL_307=Is Incremental:     %s
+INFO_RESTOREDB_LIST_COMPRESSED_308=Is Compressed:      %s
+INFO_RESTOREDB_LIST_ENCRYPTED_309=Is Encrypted:       %s
+INFO_RESTOREDB_LIST_HASHED_310=Has Unsigned Hash:  %s
+INFO_RESTOREDB_LIST_SIGNED_311=Has Signed Hash:    %s
+INFO_RESTOREDB_LIST_DEPENDENCIES_312=Dependent Upon:     %s
+SEVERE_ERR_RESTOREDB_INVALID_BACKUP_ID_313=The requested backup ID %s does \
+ not exist in %s
+SEVERE_ERR_RESTOREDB_NO_BACKUPS_IN_DIRECTORY_314=There are no Directory \
+ Server backups contained in %s
+SEVERE_ERR_RESTOREDB_NO_BACKENDS_FOR_DN_315=The backups contained in \
+ directory %s were taken from a Directory Server backend defined in \
+ configuration entry %s but no such backend is available
+SEVERE_ERR_RESTOREDB_CANNOT_RESTORE_316=The Directory Server backend \
+ configured with backend ID %s does not provide a mechanism for restoring \
+ backups
+SEVERE_ERR_RESTOREDB_ERROR_DURING_BACKUP_317=An unexpected error occurred \
+ while attempting to restore backup %s from %s:  %s
+SEVERE_ERR_BACKUPDB_SIGN_REQUIRES_HASH_326=The use of the %s argument \
+ requires that the %s argument is also provided
+INFO_DESCRIPTION_NOOP_327=Show what would be done but do not perform any \
+ operation
+SEVERE_ERR_BACKUPDB_CANNOT_LOCK_BACKEND_328=An error occurred while \
+ attempting to acquire a shared lock for backend %s:  %s.  This generally \
+ means that some other process has exclusive access to this backend (e.g., a \
+ restore or an LDIF import).  This backend will not be archived
+SEVERE_WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND_329=An error occurred while \
+ attempting to release the shared lock for backend %s:  %s.  This lock should \
+ automatically be cleared when the backup process exits, so no further action \
+ should be required
+SEVERE_ERR_RESTOREDB_CANNOT_LOCK_BACKEND_330=An error occurred while \
+ attempting to acquire an exclusive lock for backend %s:  %s.  This generally \
+ means some other process is still using this backend (e.g., it is in use by \
+ the Directory Server or a backup or LDIF export is in progress.  The restore \
+ cannot continue
+SEVERE_WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND_331=An error occurred while \
+ attempting to release the exclusive lock for backend %s:  %s.  This lock \
+ should automatically be cleared when the restore process exits, so no further \
+ action should be required
+SEVERE_ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND_332=An error occurred while \
+ attempting to acquire an exclusive lock for backend %s:  %s.  This generally \
+ means some other process is still using this backend (e.g., it is in use by \
+ the Directory Server or a backup or LDIF export is in progress.  The LDIF \
+ import cannot continue
+SEVERE_WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND_333=An error occurred while \
+ attempting to release the exclusive lock for backend %s:  %s.  This lock \
+ should automatically be cleared when the import process exits, so no further \
+ action should be required
+SEVERE_ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND_334=An error occurred while \
+ attempting to acquire a shared lock for backend %s:  %s.  This generally \
+ means that some other process has an exclusive lock on this backend (e.g., an \
+ LDIF import or a restore).  The LDIF export cannot continue
+SEVERE_WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND_335=An error occurred while \
+ attempting to release the shared lock for backend %s:  %s.  This lock should \
+ automatically be cleared when the export process exits, so no further action \
+ should be required
+SEVERE_ERR_VERIFYINDEX_CANNOT_LOCK_BACKEND_336=An error occurred while \
+ attempting to acquire a shared lock for backend %s:  %s.  This generally \
+ means that some other process has an exclusive lock on this backend (e.g., an \
+ LDIF import or a restore).  The index verification cannot continue
+SEVERE_WARN_VERIFYINDEX_CANNOT_UNLOCK_BACKEND_337=An error occurred while \
+ attempting to release the shared lock for backend %s:  %s.  This lock should \
+ automatically be cleared when the verification process exits, so no further \
+ action should be required
+INFO_DESCRIPTION_TYPES_ONLY_338=Only retrieve attribute names but not their \
+ values
+INFO_LDIFIMPORT_DESCRIPTION_SKIP_SCHEMA_VALIDATION_339=Skip schema validation \
+ during the LDIF import
+SEVERE_ERR_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS_340=An error occurred while \
+ attempting to initialize the LDIF export plugins:  %s
+SEVERE_ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS_341=An error occurred while \
+ attempting to initialize the LDIF import plugins:  %s
+INFO_DESCRIPTION_ASSERTION_FILTER_342=Use the LDAP assertion control with the \
+ provided filter
+MILD_ERR_LDAP_ASSERTION_INVALID_FILTER_343=The search filter provided for the \
+ LDAP assertion control was invalid:  %s
+INFO_DESCRIPTION_PREREAD_ATTRS_346=Use the LDAP ReadEntry pre-read control
+INFO_DESCRIPTION_POSTREAD_ATTRS_347=Use the LDAP ReadEntry post-read control
+MILD_ERR_LDAPMODIFY_PREREAD_NO_VALUE_348=The pre-read response control did \
+ not include a value
+MILD_ERR_LDAPMODIFY_PREREAD_CANNOT_DECODE_VALUE_349=An error occurred while \
+ trying to decode the entry contained in the value of the pre-read response \
+ control:  %s
+INFO_LDAPMODIFY_PREREAD_ENTRY_350=Target entry before the operation:
+MILD_ERR_LDAPMODIFY_POSTREAD_NO_VALUE_351=The post-read response control did \
+ not include a value
+MILD_ERR_LDAPMODIFY_POSTREAD_CANNOT_DECODE_VALUE_352=An error occurred while \
+ trying to decode the entry contained in the value of the post-read response \
+ control:  %s
+INFO_LDAPMODIFY_POSTREAD_ENTRY_353=Target entry after the operation:
+INFO_DESCRIPTION_PROXY_AUTHZID_354=Use the proxied authorization control with \
+ the given authorization ID
+INFO_DESCRIPTION_PSEARCH_INFO_355=Use the persistent search control
+MILD_ERR_PSEARCH_MISSING_DESCRIPTOR_356=The request to use the persistent \
+ search control did not include a descriptor that indicates the options to use \
+ with that control
+MILD_ERR_PSEARCH_DOESNT_START_WITH_PS_357=The persistent search descriptor %s \
+ did not start with the required 'ps' string
+MILD_ERR_PSEARCH_INVALID_CHANGE_TYPE_358=The provided change type value %s is \
+ invalid.  The recognized change types are add, delete, modify, modifydn, and \
+ any
+MILD_ERR_PSEARCH_INVALID_CHANGESONLY_359=The provided changesOnly value %s is \
+ invalid.  Allowed values are 1 to only return matching entries that have \
+ changed since the beginning of the search, or 0 to also include existing \
+ entries that match the search criteria
+MILD_ERR_PSEARCH_INVALID_RETURN_ECS_360=The provided returnECs value %s is \
+ invalid.  Allowed values are 1 to request that the entry change notification \
+ control be included in updated entries, or 0 to exclude the control from \
+ matching entries
+INFO_DESCRIPTION_REPORT_AUTHZID_361=Use the authorization identity control
+INFO_BIND_AUTHZID_RETURNED_362=# Bound with authorization ID %s
+INFO_SEARCH_DESCRIPTION_FILENAME_363=File containing a list of search filter \
+ strings
+INFO_DESCRIPTION_MATCHED_VALUES_FILTER_364=Use the LDAP matched values \
+ control with the provided filter
+MILD_ERR_LDAP_MATCHEDVALUES_INVALID_FILTER_365=The provided matched values \
+ filter was invalid:  %s
+FATAL_ERR_LDIF_FILE_CANNOT_OPEN_FOR_READ_366=An error occurred while \
+ attempting to open the LDIF file %s for reading:  %s
+FATAL_ERR_LDIF_FILE_READ_ERROR_367=An error occurred while attempting to read \
+ the contents of LDIF file %s:  %s
+SEVERE_ERR_LDIF_FILE_INVALID_LDIF_ENTRY_368=Error at or near line %d in LDIF \
+ file %s:  %s
+INFO_ENCPW_DESCRIPTION_AUTHPW_369=Use the authentication password syntax \
+ rather than the user password syntax
+SEVERE_ERR_ENCPW_NO_AUTH_STORAGE_SCHEMES_370=No authentication password \
+ storage schemes have been configured for use in the Directory Server
+SEVERE_ERR_ENCPW_NO_SUCH_AUTH_SCHEME_371=Authentication password storage \
+ scheme "%s" is not configured for use in the Directory Server
+SEVERE_ERR_ENCPW_INVALID_ENCODED_AUTHPW_372=The provided password is not a \
+ valid encoded authentication password value:  %s
+SEVERE_ERR_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY_373=An error occurred while \
+ attempting to initialize the password policy components:  %s
+INFO_STOPDS_DESCRIPTION_HOST_374=Directory server hostname or IP address
+INFO_STOPDS_DESCRIPTION_PORT_375=Directory server port number
+INFO_STOPDS_DESCRIPTION_USESSL_376=Use SSL for secure communication with the \
+ server
+INFO_STOPDS_DESCRIPTION_USESTARTTLS_377=Use StartTLS for secure communication \
+ with the server
+INFO_STOPDS_DESCRIPTION_BINDDN_378=Specifies the DN to use to bind to the \
+ server
+INFO_STOPDS_DESCRIPTION_BINDPW_379=Specifies the password to use to bind to \
+ the server
+INFO_STOPDS_DESCRIPTION_BINDPWFILE_380=Bind password file
+INFO_STOPDS_DESCRIPTION_SASLOPTIONS_381=SASL bind options
+INFO_STOPDS_DESCRIPTION_PROXYAUTHZID_382=Use the proxied authorization \
+ control with the given authorization ID
+INFO_STOPDS_DESCRIPTION_STOP_REASON_383=Reason the server is being stopped or \
+ restarted
+INFO_STOPDS_DESCRIPTION_STOP_TIME_384=Time to begin the shutdown in \
+ YYYYMMDDhhmmss format (local time)
+INFO_STOPDS_DESCRIPTION_TRUST_ALL_385=Trust all server SSL certificates
+INFO_STOPDS_DESCRIPTION_KSFILE_386=Certificate keystore path
+INFO_STOPDS_DESCRIPTION_KSPW_387=Certificate keystore PIN
+INFO_STOPDS_DESCRIPTION_KSPWFILE_388=Certificate keystore PIN file
+INFO_STOPDS_DESCRIPTION_TSFILE_389=Certificate trust store path
+INFO_STOPDS_DESCRIPTION_TSPW_390=Certificate trust store PIN
+INFO_STOPDS_DESCRIPTION_TSPWFILE_391=Certificate trust store PIN file
+INFO_STOPDS_DESCRIPTION_SHOWUSAGE_392=Display this usage information
+SEVERE_ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS_395=ERROR:  You may not \
+ provide both the %s and the %s arguments
+SEVERE_ERR_STOPDS_CANNOT_DECODE_STOP_TIME_396=ERROR:  Unable to decode the \
+ provided stop time.  It should be in the form YYYYMMDDhhmmssZ for UTC time or \
+ YYYYMMDDhhmmss for local time
+SEVERE_ERR_STOPDS_CANNOT_INITIALIZE_SSL_397=ERROR:  Unable to perform SSL \
+ initialization:  %s
+SEVERE_ERR_STOPDS_CANNOT_PARSE_SASL_OPTION_398=ERROR:  The provided SASL \
+ option string "%s" could not be parsed in the form "name=value"
+SEVERE_ERR_STOPDS_NO_SASL_MECHANISM_399=ERROR:  One or more SASL options were \
+ provided, but none of them were the "mech" option to specify which SASL \
+ mechanism should be used
+SEVERE_ERR_STOPDS_CANNOT_DETERMINE_PORT_400=ERROR:  Cannot parse the value of \
+ the %s argument as an integer value between 1 and 65535:  %s
+SEVERE_ERR_STOPDS_CANNOT_CONNECT_401=ERROR:  Cannot establish a connection to \
+ the Directory Server:  %s
+SEVERE_ERR_STOPDS_UNEXPECTED_CONNECTION_CLOSURE_402=NOTICE:  The connection \
+ to the Directory Server was closed while waiting for a response to the \
+ shutdown request.  This likely means that the server has started the shudown \
+ process
+SEVERE_ERR_STOPDS_IO_ERROR_403=ERROR:  An I/O error occurred while attempting \
+ to communicate with the Directory Server:  %s
+SEVERE_ERR_STOPDS_DECODE_ERROR_404=ERROR:  An error occurred while trying to \
+ decode the response from the server:  %s
+SEVERE_ERR_STOPDS_INVALID_RESPONSE_TYPE_405=ERROR:  Expected an add response \
+ message but got a %s message instead
+INFO_BIND_PASSWORD_EXPIRED_406=# Your password has expired
+INFO_BIND_PASSWORD_EXPIRING_407=# Your password will expire in %s
+INFO_BIND_ACCOUNT_LOCKED_408=# Your account has been locked
+INFO_BIND_MUST_CHANGE_PASSWORD_409=# You must change your password before any \
+ other operations will be allowed
+INFO_BIND_GRACE_LOGINS_REMAINING_410=# You have %d grace logins remaining
+INFO_DESCRIPTION_USE_PWP_CONTROL_411=Use the password policy request control
+INFO_STOPDS_DESCRIPTION_RESTART_412=Attempt to automatically restart the \
+ server once it has stopped
+INFO_COMPARE_DESCRIPTION_FILENAME_413=File containing the DNs of the entries \
+ to compare
+INFO_LDIFSEARCH_DESCRIPTION_LDIF_FILE_414=Specifies the LDIF file containing \
+ the data to search.  Multiple files may be specified by providing the option \
+ multiple times.  If no files are provided, the data will be read from \
+ standard input
+INFO_LDIFSEARCH_DESCRIPTION_BASEDN_415=The base DN for the search.  Multiple \
+ base DNs may be specified by providing the option multiple times.  If no base \
+ DN is provided, then the root DSE will be used
+INFO_LDIFSEARCH_DESCRIPTION_SCOPE_416=The scope for the search.  It must be \
+ one of 'base', 'one', 'sub', or 'subordinate'.  If it is not provided, then \
+ 'sub' will be used
+INFO_LDIFSEARCH_DESCRIPTION_FILTER_FILE_419=The path to the file containing \
+ the search filter(s) to use.  If this is not provided, then the filter must \
+ be provided on the command line after all configuration options
+INFO_LDIFSEARCH_DESCRIPTION_OUTPUT_FILE_420=The path to the output file to \
+ which the matching entries should be written.  If this is not provided, then \
+ the data will be written to standard output
+INFO_LDIFSEARCH_DESCRIPTION_OVERWRITE_EXISTING_421=Indicates that any \
+ existing output file should be overwritten rather than appending to it
+INFO_LDIFSEARCH_DESCRIPTION_DONT_WRAP_422=Indicates that long lines should \
+ not be wrapped
+INFO_LDIFSEARCH_DESCRIPTION_SIZE_LIMIT_423=Specifies the maximum number of \
+ matching entries to return
+INFO_LDIFSEARCH_DESCRIPTION_TIME_LIMIT_424=Specifies the maximum length of \
+ time (in seconds) to spend processing
+SEVERE_ERR_LDIFSEARCH_NO_FILTER_428=No search filter was specified.  Either a \
+ filter file or an individual search filter must be provided
+SEVERE_ERR_LDIFSEARCH_CANNOT_INITIALIZE_CONFIG_429=An error occurred while \
+ attempting to process the Directory Server configuration file %s:  %s
+SEVERE_ERR_LDIFSEARCH_CANNOT_INITIALIZE_SCHEMA_430=An error occurred while \
+ attempting to initialize the Directory Server schema based on the information \
+ in configuration file %s:  %s
+SEVERE_ERR_LDIFSEARCH_CANNOT_PARSE_FILTER_431=An error occurred while \
+ attempting to parse search filter '%s':  %s
+SEVERE_ERR_LDIFSEARCH_CANNOT_PARSE_BASE_DN_432=An error occurred while \
+ attempting to parse base DN '%s':  %s
+SEVERE_ERR_LDIFSEARCH_CANNOT_PARSE_TIME_LIMIT_433=An error occurred while \
+ attempting to parse the time limit as an integer:  %s
+SEVERE_ERR_LDIFSEARCH_CANNOT_PARSE_SIZE_LIMIT_434=An error occurred while \
+ attempting to parse the size limit as an integer:  %s
+SEVERE_ERR_LDIFSEARCH_CANNOT_CREATE_READER_435=An error occurred while \
+ attempting to create the LDIF reader:  %s
+SEVERE_ERR_LDIFSEARCH_CANNOT_CREATE_WRITER_436=An error occurred while \
+ attempting to create the LDIF writer used to return matching entries:  %s
+MILD_WARN_LDIFSEARCH_TIME_LIMIT_EXCEEDED_437=The specified time limit has \
+ been exceeded during search processing
+MILD_WARN_LDIFSEARCH_SIZE_LIMIT_EXCEEDED_438=The specified size limit has \
+ been exceeded during search processing
+SEVERE_ERR_LDIFSEARCH_CANNOT_READ_ENTRY_RECOVERABLE_439=An error occurred \
+ while attempting to read an entry from the LDIF content:  %s.  Skipping this \
+ entry and continuing processing
+SEVERE_ERR_LDIFSEARCH_CANNOT_READ_ENTRY_FATAL_440=An error occurred while \
+ attempting to read an entry from the LDIF content:  %s.  Unable to continue \
+ processing
+SEVERE_ERR_LDIFSEARCH_ERROR_DURING_PROCESSING_441=An unexpected error \
+ occurred during search processing:  %s
+SEVERE_ERR_LDIFSEARCH_CANNOT_INITIALIZE_JMX_442=An error occurred while \
+ attempting to initialize the Directory Server JMX subsystem based on the \
+ information in configuration file %s:  %s
+INFO_LDIFDIFF_DESCRIPTION_SOURCE_LDIF_443=Specifies the LDIF file to use as \
+ the source data
+INFO_LDIFDIFF_DESCRIPTION_TARGET_LDIF_444=Specifies the LDIF file to use as \
+ the target data
+INFO_LDIFDIFF_DESCRIPTION_OUTPUT_LDIF_445=Specifies the file to which the \
+ output should be written
+INFO_LDIFDIFF_DESCRIPTION_OVERWRITE_EXISTING_446=Indicates that any existing \
+ output file should be overwritten rather than appending to it
+SEVERE_ERR_LDIFDIFF_CANNOT_INITIALIZE_JMX_452=An error occurred while \
+ attempting to initialize the Directory Server JMX subsystem based on the \
+ information in configuration file %s:  %s
+SEVERE_ERR_LDIFDIFF_CANNOT_INITIALIZE_CONFIG_453=An error occurred while \
+ attempting to process the Directory Server configuration file %s:  %s
+SEVERE_ERR_LDIFDIFF_CANNOT_INITIALIZE_SCHEMA_454=An error occurred while \
+ attempting to initialize the Directory Server schema based on the information \
+ in configuration file %s:  %s
+SEVERE_ERR_LDIFDIFF_CANNOT_OPEN_SOURCE_LDIF_455=An error occurred while \
+ attempting to open source LDIF %s:  %s
+SEVERE_ERR_LDIFDIFF_ERROR_READING_SOURCE_LDIF_456=An error occurred while \
+ reading the contents of source LDIF %s:  %s
+SEVERE_ERR_LDIFDIFF_CANNOT_OPEN_TARGET_LDIF_457=An error occurred while \
+ attempting to open target LDIF %s:  %s
+SEVERE_ERR_LDIFDIFF_ERROR_READING_TARGET_LDIF_458=An error occurred while \
+ reading the contents of target LDIF %s:  %s
+SEVERE_ERR_LDIFDIFF_CANNOT_OPEN_OUTPUT_459=An error occurred while attempting \
+ to open the LDIF writer for the diff output:  %s
+INFO_LDIFDIFF_NO_DIFFERENCES_460=No differences were detected between the \
+ source and target LDIF files
+SEVERE_ERR_LDIFDIFF_ERROR_WRITING_OUTPUT_461=An error occurred while \
+ attempting to write the diff output:  %s
+INFO_CONFIGDS_DESCRIPTION_LDAP_PORT_464=Specifies the port on which the \
+ Directory Server should listen for LDAP communication
+INFO_CONFIGDS_DESCRIPTION_BASE_DN_465=Specifies the base DN for user \
+ information in the Directory Server.  Multiple base DNs may be provided by \
+ using this option multiple times
+INFO_CONFIGDS_DESCRIPTION_ROOT_DN_466=Specifies the DN for the initial root \
+ user for the Directory Server
+INFO_CONFIGDS_DESCRIPTION_ROOT_PW_467=Specifies the password for the initial \
+ root user for the Directory Server
+INFO_CONFIGDS_DESCRIPTION_ROOT_PW_FILE_468=Specifies the path to a file \
+ containing the password for the initial root user for the Directory Server
+SEVERE_ERR_CONFIGDS_CANNOT_ACQUIRE_SERVER_LOCK_472=An error occurred while \
+ attempting to acquire the server-wide lock file %s:  %s.  This generally \
+ means that the Directory Server is running, or another tool that requires \
+ exclusive access to the server is in use
+SEVERE_ERR_CONFIGDS_CANNOT_INITIALIZE_JMX_473=An error occurred while \
+ attempting to initialize the Directory Server JMX subsystem based on the \
+ information in configuration file %s:  %s
+SEVERE_ERR_CONFIGDS_CANNOT_INITIALIZE_CONFIG_474=An error occurred while \
+ attempting to process the Directory Server configuration file %s:  %s
+SEVERE_ERR_CONFIGDS_CANNOT_INITIALIZE_SCHEMA_475=An error occurred while \
+ attempting to initialize the Directory Server schema based on the information \
+ in configuration file %s:  %s
+SEVERE_ERR_CONFIGDS_CANNOT_PARSE_BASE_DN_476=An error occurred while \
+ attempting to parse base DN value "%s" as a DN:  %s
+SEVERE_ERR_CONFIGDS_CANNOT_PARSE_ROOT_DN_477=An error occurred while \
+ attempting to parse root DN value "%s" as a DN:  %s
+SEVERE_ERR_CONFIGDS_NO_ROOT_PW_478=The DN for the initial root user was \
+ provided, but no corresponding password was given.  If the root DN is \
+ specified then the password must also be provided
+SEVERE_ERR_CONFIGDS_CANNOT_UPDATE_BASE_DN_479=An error occurred while \
+ attempting to update the base DN(s) for user data in the Directory Server: \
+ %s
+SEVERE_ERR_CONFIGDS_CANNOT_UPDATE_LDAP_PORT_480=An error occurred while \
+ attempting to update the port on which to listen for LDAP communication:  %s
+SEVERE_ERR_CONFIGDS_CANNOT_UPDATE_ROOT_USER_481=An error occurred while \
+ attempting to update the entry for the initial Directory Server root user: \
+ %s
+SEVERE_ERR_CONFIGDS_CANNOT_WRITE_UPDATED_CONFIG_482=An error occurred while \
+ writing the updated Directory Server configuration:  %s
+SEVERE_ERR_CONFIGDS_NO_CONFIG_CHANGES_483=ERROR:  No configuration changes \
+ were specified
+INFO_CONFIGDS_WROTE_UPDATED_CONFIG_484=Successfully wrote the updated \
+ Directory Server configuration
+INFO_INSTALLDS_DESCRIPTION_TESTONLY_485=Just verify that the JVM can be \
+ started properly
+INFO_INSTALLDS_DESCRIPTION_PROGNAME_486=The setup command used to invoke this \
+ program
+INFO_INSTALLDS_DESCRIPTION_SILENT_489=Perform a silent installation
+INFO_INSTALLDS_DESCRIPTION_BASEDN_490=Specifies the base DN for user \
+ information in the Directory Server.  Multiple base DNs may be provided by \
+ using this option multiple times
+INFO_INSTALLDS_DESCRIPTION_ADDBASE_491=Indicates whether to create the base \
+ entry in the Directory Server database
+INFO_INSTALLDS_DESCRIPTION_IMPORTLDIF_492=Specifies the path to an LDIF file \
+ containing data that should be added to the Directory Server database. \
+ Multiple LDIF files may be provided by using this option multiple times
+INFO_INSTALLDS_DESCRIPTION_LDAPPORT_493=Specifies the port on which the \
+ Directory Server should listen for LDAP communication
+INFO_INSTALLDS_DESCRIPTION_SKIPPORT_494=Skip the check to determine whether \
+ the specified LDAP port is usable
+INFO_INSTALLDS_DESCRIPTION_ROOTDN_495=Specifies the DN for the initial root \
+ user for the Directory Server
+INFO_INSTALLDS_DESCRIPTION_ROOTPW_496=Specifies the password for the initial \
+ root user for the Directory Server
+INFO_INSTALLDS_DESCRIPTION_ROOTPWFILE_497=Specifies the path to a file \
+ containing the password for the initial root user for the Directory Server
+INFO_INSTALLDS_DESCRIPTION_HELP_498=Display this usage information
+SEVERE_ERR_INSTALLDS_NO_CONFIG_FILE_499=ERROR:  No configuration file path \
+ was provided (use the %s argument)
+SEVERE_ERR_INSTALLDS_CANNOT_INITIALIZE_JMX_500=An error occurred while \
+ attempting to initialize the Directory Server JMX subsystem based on the \
+ information in configuration file %s:  %s
+SEVERE_ERR_INSTALLDS_CANNOT_INITIALIZE_CONFIG_501=An error occurred while \
+ attempting to process the Directory Server configuration file %s:  %s
+SEVERE_ERR_INSTALLDS_CANNOT_INITIALIZE_SCHEMA_502=An error occurred while \
+ attempting to initialize the Directory Server schema based on the information \
+ in configuration file %s:  %s
+SEVERE_ERR_INSTALLDS_CANNOT_PARSE_DN_503=An error occurred while attempting \
+ to parse the string "%s" as a valid DN:  %s
+INFO_INSTALLDS_PROMPT_BASEDN_504=What do you wish to use as the base DN for \
+ the directory data?
+INFO_INSTALLDS_PROMPT_IMPORT_505=Do you wish to populate the directory \
+ database with information from an existing LDIF file?
+INFO_INSTALLDS_PROMPT_IMPORT_FILE_506=Please specify the path to the LDIF \
+ file containing the data to import
+SEVERE_ERR_INSTALLDS_TWO_CONFLICTING_ARGUMENTS_507=ERROR:  You may not \
+ provide both the %s and the %s arguments at the same time
+INFO_INSTALLDS_PROMPT_ADDBASE_508=Would you like to have the base %s entry \
+ automatically created in the directory database?
+INFO_INSTALLDS_PROMPT_LDAPPORT_509=On which port would you like the Directory \
+ Server to accept connections from LDAP clients?
+SEVERE_ERR_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT_510=ERROR:  Unable to \
+ bind to port %d.  This port may already be in use, or you may not have \
+ permission to bind to it.  On UNIX-based operating systems, non-root users \
+ may not be allowed to bind to ports 1 through 1024
+SEVERE_ERR_INSTALLDS_CANNOT_BIND_TO_PORT_511=ERROR:  Unable to bind to port \
+ %d.  This port may already be in use, or you may not have permission to bind \
+ to it
+INFO_INSTALLDS_PROMPT_ROOT_DN_512=What would you like to use as the initial \
+ root user DN for the Directory Server?
+SEVERE_ERR_INSTALLDS_NO_ROOT_PASSWORD_513=ERROR:  No password was provided \
+ for the initial root user.  When performing a silent installation, this must \
+ be provided using either the %s or the %s argument
+INFO_INSTALLDS_PROMPT_ROOT_PASSWORD_514=Please provide the password to use \
+ for the initial root user
+INFO_INSTALLDS_PROMPT_CONFIRM_ROOT_PASSWORD_515=Please re-enter the password \
+ for confirmation
+INFO_INSTALLDS_STATUS_CONFIGURING_DS_516=Applying the requested configuration \
+ to the Directory Server...
+INFO_INSTALLDS_STATUS_CREATING_BASE_LDIF_517=Creating a temporary LDIF file \
+ with the initial base entry contents...
+SEVERE_ERR_INSTALLDS_CANNOT_CREATE_BASE_ENTRY_LDIF_518=An error occurred \
+ while attempting to create the base LDIF file:  %s
+INFO_INSTALLDS_STATUS_IMPORTING_LDIF_519=Importing the LDIF data into the \
+ Directory Server database...
+INFO_INSTALLDS_STATUS_SUCCESS_520=The OpenDS setup process has completed \
+ successfully
+INFO_INSTALLDS_PROMPT_VALUE_YES_521=yes
+INFO_INSTALLDS_PROMPT_VALUE_NO_522=no
+MILD_ERR_INSTALLDS_INVALID_YESNO_RESPONSE_523=ERROR:  The provided value \
+ could not be interpreted as a yes or no response.  Please enter a response of \
+ either "yes" or "no"
+MILD_ERR_INSTALLDS_INVALID_INTEGER_RESPONSE_524=ERROR:  The provided response \
+ could not be interpreted as an integer.  Please provide the repsonse as an \
+ integer value
+MILD_ERR_INSTALLDS_INTEGER_BELOW_LOWER_BOUND_525=ERROR:  The provided value \
+ is less than the lowest allowed value of %d
+MILD_ERR_INSTALLDS_INTEGER_ABOVE_UPPER_BOUND_526=ERROR:  The provided value \
+ is greater than the largest allowed value of %d
+MILD_ERR_INSTALLDS_INVALID_DN_RESPONSE_527=ERROR:  The provided response \
+ could not be interpreted as an LDAP DN
+MILD_ERR_INSTALLDS_INVALID_STRING_RESPONSE_528=ERROR:  The response value may \
+ not be an empty string
+MILD_ERR_INSTALLDS_INVALID_PASSWORD_RESPONSE_529=ERROR:  The password value \
+ may not be an empty string
+MILD_ERR_INSTALLDS_PASSWORDS_DONT_MATCH_530=ERROR:  The provided password \
+ values do not match
+MILD_ERR_INSTALLDS_ERROR_READING_FROM_STDIN_531=ERROR:  Unexpected failure \
+ while reading from standard input:  %s
+INFO_LDIFIMPORT_DESCRIPTION_QUIET_532=Use quiet mode (no output)
+INFO_INSTALLDS_IMPORT_SUCCESSFUL_533=Import complete
+INFO_INSTALLDS_INITIALIZING_534=Please wait while the setup program \
+ initializes...
+MILD_ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT_535=Invalid number of arguments \
+ provided for tag %s on line number %d of the template file:  expected %d, got \
+ %d
+MILD_ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT_536=Invalid number of \
+ arguments provided for tag %s on line number %d of the template file: \
+ expected between %d and %d, got %d
+MILD_ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE_537=Undefined attribute %s \
+ referenced on line %d of the template file
+MILD_ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND_538=Value %d is below the \
+ lowest allowed value of %d for tag %s on line %d of the template file
+MILD_ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER_539=Cannot parse value "%s" as \
+ an integer for tag %s on line %d of the template file
+MILD_ERR_MAKELDIF_TAG_INTEGER_ABOVE_UPPER_BOUND_540=Value %d is above the \
+ largest allowed value of %d for tag %s on line %d of the template file
+MILD_ERR_MAKELDIF_TAG_INVALID_EMPTY_STRING_ARGUMENT_541=Argument %d for tag \
+ %s on line number %d may not be an empty string
+MILD_ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_BOOLEAN_542=Cannot parse value "%s" as \
+ a Boolean value for tag %s on line %d of the template file.  The value must \
+ be either 'true' or 'false'
+MILD_ERR_MAKELDIF_UNDEFINED_BRANCH_SUBORDINATE_543=The branch with entry DN \
+ %s references a subordinate template named %s which is not defined in the \
+ template file
+MILD_ERR_MAKELDIF_CANNOT_LOAD_TAG_CLASS_544=Unable to load class %s for use \
+ as a MakeLDIF tag
+MILD_ERR_MAKELDIF_CANNOT_INSTANTIATE_TAG_545=Cannot instantiate class %s as a \
+ MakeLDIF tag
+MILD_ERR_MAKELDIF_CONFLICTING_TAG_NAME_546=Cannot register the tag defined in \
+ class %s because the tag name %s conflicts with the name of another tag that \
+ has already been registered
+MILD_WARN_MAKELDIF_WARNING_UNDEFINED_CONSTANT_547=Possible reference to an \
+ undefined constant %s on line %d
+MILD_ERR_MAKELDIF_DEFINE_MISSING_EQUALS_548=The constant definition on line \
+ %d is missing an equal sign to delimit the constant name from the value
+MILD_ERR_MAKELDIF_DEFINE_NAME_EMPTY_549=The constant definition on line %d \
+ does not include a name for the constant
+MILD_ERR_MAKELDIF_CONFLICTING_CONSTANT_NAME_550=The definition for constant \
+ %s on line %d conflicts with an earlier constant definition included in the \
+ template
+MILD_ERR_MAKELDIF_WARNING_DEFINE_VALUE_EMPTY_551=Constant %s defined on line \
+ %d has not been assigned a value
+MILD_ERR_MAKELDIF_CONFLICTING_BRANCH_DN_552=The branch definition %s starting \
+ on line %d conflicts with an earlier branch definition contained in the \
+ template file
+MILD_ERR_MAKELDIF_CONFLICTING_TEMPLATE_NAME_553=The template definition %s \
+ starting on line %d conflicts with an earlier template definition contained \
+ in the template file
+MILD_ERR_MAKELDIF_UNEXPECTED_TEMPLATE_FILE_LINE_554=Unexpected template line \
+ "%s" encountered on line %d of the template file
+MILD_ERR_MAKELDIF_UNDEFINED_TEMPLATE_SUBORDINATE_555=The template named %s \
+ references a subordinate template named %s which is not defined in the \
+ template file
+MILD_ERR_MAKELDIF_CANNOT_DECODE_BRANCH_DN_556=Unable to decode branch DN "%s" \
+ on line %d of the template file
+MILD_ERR_MAKELDIF_BRANCH_SUBORDINATE_TEMPLATE_NO_COLON_557=Subordinate \
+ template definition on line %d for branch %s is missing a colon to separate \
+ the template name from the number of entries
+MILD_ERR_MAKELDIF_BRANCH_SUBORDINATE_INVALID_NUM_ENTRIES_558=Subordinate \
+ template definition on line %d for branch %s specified invalid number of \
+ entries %d for template %s
+MILD_WARN_MAKELDIF_BRANCH_SUBORDINATE_ZERO_ENTRIES_559=Subordinate template \
+ definition on line %d for branch %s specifies that zero entries of type %s \
+ should be generated
+MILD_ERR_MAKELDIF_BRANCH_SUBORDINATE_CANT_PARSE_NUMENTRIES_560=Unable to \
+ parse the number of entries for template %s as an integer for the subordinate \
+ template definition on line %d for branch %s
+MILD_ERR_MAKELDIF_TEMPLATE_SUBORDINATE_TEMPLATE_NO_COLON_561=Subordinate \
+ template definition on line %d for template %s is missing a colon to separate \
+ the template name from the number of entries
+MILD_ERR_MAKELDIF_TEMPLATE_SUBORDINATE_INVALID_NUM_ENTRIES_562=Subordinate \
+ template definition on line %d for template %s specified invalid number of \
+ entries %d for subordinate template %s
+MILD_WARN_MAKELDIF_TEMPLATE_SUBORDINATE_ZERO_ENTRIES_563=Subordinate template \
+ definition on line %d for template %s specifies that zero entries of type %s \
+ should be generated
+MILD_ERR_MAKELDIF_TEMPLATE_SUBORDINATE_CANT_PARSE_NUMENTRIES_564=Unable to \
+ parse the number of entries for template %s as an integer for the subordinate \
+ template definition on line %d for template %s
+MILD_ERR_MAKELDIF_TEMPLATE_MISSING_RDN_ATTR_565=The template named %s \
+ includes RDN attribute %s that is not assigned a value in that template
+MILD_ERR_MAKELDIF_NO_COLON_IN_BRANCH_EXTRA_LINE_566=There is no colon to \
+ separate the attribute name from the value pattern on line %d of the template \
+ file in the definition for branch %s
+MILD_ERR_MAKELDIF_NO_ATTR_IN_BRANCH_EXTRA_LINE_567=There is no attribute name \
+ before the colon on line %d of the template file in the definition for branch \
+ %s
+MILD_WARN_MAKELDIF_NO_VALUE_IN_BRANCH_EXTRA_LINE_568=The value pattern for \
+ line %d of the template file in the definition for branch %s is empty
+MILD_ERR_MAKELDIF_NO_COLON_IN_TEMPLATE_LINE_569=There is no colon to separate \
+ the attribute name from the value pattern on line %d of the template file in \
+ the definition for template %s
+MILD_ERR_MAKELDIF_NO_ATTR_IN_TEMPLATE_LINE_570=There is no attribute name \
+ before the colon on line %d of the template file in the definition for \
+ template %s
+MILD_WARN_MAKELDIF_NO_VALUE_IN_TEMPLATE_LINE_571=The value pattern for line \
+ %d of the template file in the definition for template %s is empty
+MILD_ERR_MAKELDIF_NO_SUCH_TAG_572=An undefined tag %s is referenced on line \
+ %d of the template file
+MILD_ERR_MAKELDIF_CANNOT_INSTANTIATE_NEW_TAG_573=An unexpected error occurred \
+ while trying to create a new instance of tag %s referenced on line %d of the \
+ template file:  %s
+INFO_MAKELDIF_DESCRIPTION_TEMPLATE_576=The path to the template file with \
+ information about the LDIF data to generate
+INFO_MAKELDIF_DESCRIPTION_LDIF_577=The path to the LDIF file to be written
+INFO_MAKELDIF_DESCRIPTION_SEED_578=The seed to use to initialize the random \
+ number generator
+INFO_MAKELDIF_DESCRIPTION_HELP_579=Show this usage information
+SEVERE_ERR_MAKELDIF_CANNOT_INITIALIZE_JMX_582=An error occurred while \
+ attempting to initialize the Directory Server JMX subsystem based on the \
+ information in configuration file %s:  %s
+SEVERE_ERR_MAKELDIF_CANNOT_INITIALIZE_CONFIG_583=An error occurred while \
+ attempting to process the Directory Server configuration file %s:  %s
+SEVERE_ERR_MAKELDIF_CANNOT_INITIALIZE_SCHEMA_584=An error occurred while \
+ attempting to initialize the Directory Server schema based on the information \
+ in configuration file %s:  %s
+SEVERE_ERR_MAKELDIF_IOEXCEPTION_DURING_PARSE_585=An error occurred while \
+ attempting to read the template file:  %s
+SEVERE_ERR_MAKELDIF_EXCEPTION_DURING_PARSE_586=An error occurred while \
+ attempting to parse the template file:  %s
+MILD_ERR_MAKELDIF_TAG_INVALID_FORMAT_STRING_587=Cannot parse value "%s" as an \
+ valid format string for tag %s on line %d of the template file
+MILD_ERR_MAKELDIF_TAG_NO_RANDOM_TYPE_ARGUMENT_588=The random tag on line %d \
+ of the template file does not include an argument to specify the type of \
+ random value that should be generated
+MILD_WARN_MAKELDIF_TAG_WARNING_EMPTY_VALUE_589=The value generated from the \
+ random tag on line %d of the template file will always be an empty string
+MILD_ERR_MAKELDIF_TAG_UNKNOWN_RANDOM_TYPE_590=The random tag on line %d of \
+ the template file references an unknown random type of %s
+INFO_MAKELDIF_DESCRIPTION_RESOURCE_PATH_591=Specifies the path to look for \
+ MakeLDIF resources (e.g., data files) not found in the current working \
+ directory or template directory path
+MILD_ERR_MAKELDIF_COULD_NOT_FIND_TEMPLATE_FILE_592=Could not find template \
+ file %s
+MILD_ERR_MAKELDIF_NO_SUCH_RESOURCE_DIRECTORY_593=The specified resource \
+ directory %s could not be found
+MILD_ERR_MAKELDIF_RESOURCE_DIRECTORY_NOT_DIRECTORY_594=The specified resource \
+ directory %s exists but is not a directory
+MILD_ERR_MAKELDIF_TAG_CANNOT_FIND_FILE_595=Cannot find file %s referenced by \
+ tag %s on line %d of the template file
+MILD_ERR_MAKELDIF_TAG_INVALID_FILE_ACCESS_MODE_596=Invalid file access mode \
+ %s for tag %s on line %d of the template file.  It must be either \
+ "sequential" or "random"
+MILD_ERR_MAKELDIF_TAG_CANNOT_READ_FILE_597=An error occurred while trying to \
+ read file %s referenced by tag %s on line %d of the template file:  %s
+MILD_ERR_MAKELDIF_UNABLE_TO_CREATE_LDIF_598=An error occurred while \
+ attempting to open LDIF file %s for writing:  %s
+MILD_ERR_MAKELDIF_ERROR_WRITING_LDIF_599=An error occurred while writing data \
+ to LDIF file %s:  %s
+INFO_MAKELDIF_PROCESSED_N_ENTRIES_600=Processed %d entries
+MILD_ERR_MAKELDIF_CANNOT_WRITE_ENTRY_601=An error occurred while attempting \
+ to write entry %s to LDIF:  %s
+INFO_MAKELDIF_PROCESSING_COMPLETE_602=LDIF processing complete.  %d entries \
+ written
+INFO_LDIFIMPORT_DESCRIPTION_TEMPLATE_FILE_603=Path to a MakeLDIF template to \
+ use to generate the import data
+SEVERE_ERR_LDIFIMPORT_CONFLICTING_OPTIONS_604=The %s and %s arguments are \
+ incompatible and may not be used together
+SEVERE_ERR_LDIFIMPORT_MISSING_REQUIRED_ARGUMENT_605=Neither the %s or the %s \
+ argument was provided.  One of these arguments must be given to specify the \
+ source for the LDIF data to be imported
+SEVERE_ERR_LDIFIMPORT_CANNOT_PARSE_TEMPLATE_FILE_606=Unable to parse the \
+ specified file %s as a MakeLDIF template file:  %s
+MILD_ERR_MAKELDIF_INCOMPLETE_TAG_607=Line %d of the template file contains an \
+ incomplete tag that starts with either '<' or '{' but does get closed
+MILD_ERR_MAKELDIF_TAG_NOT_ALLOWED_IN_BRANCH_608=Tag %s referenced on line %d \
+ of the template file is not allowed for use in branch definitions
+INFO_LDIFIMPORT_DESCRIPTION_RANDOM_SEED_609=Seed for the MakeLDIF random \
+ number generator
+MILD_ERR_LDIFMODIFY_CANNOT_ADD_ENTRY_TWICE_610=Entry %s is added twice in the \
+ set of changes to apply, which is not supported by the LDIF modify tool
+MILD_ERR_LDIFMODIFY_CANNOT_DELETE_AFTER_ADD_611=Entry %s cannot be deleted \
+ because it was previously added in the set of changes.  This is not supported \
+ by the LDIF modify tool
+MILD_ERR_LDIFMODIFY_CANNOT_MODIFY_ADDED_OR_DELETED_612=Cannot modify entry %s \
+ because it was previously added or deleted in the set of changes.  This is \
+ not supported by the LDIF modify tool
+MILD_ERR_LDIFMODIFY_MODDN_NOT_SUPPORTED_613=The modify DN operation targeted \
+ at entry %s cannot be processed because modify DN operations are not \
+ supported by the LDIF modify tool
+MILD_ERR_LDIFMODIFY_UNKNOWN_CHANGETYPE_614=Entry %s has an unknown changetype \
+ of %s
+MILD_ERR_LDIFMODIFY_ADD_ALREADY_EXISTS_615=Unable to add entry %s because it \
+ already exists in the data set
+MILD_ERR_LDIFMODIFY_DELETE_NO_SUCH_ENTRY_616=Unable to delete entry %s \
+ because it does not exist in the data set
+MILD_ERR_LDIFMODIFY_MODIFY_NO_SUCH_ENTRY_617=Unable to modify entry %s \
+ because it does not exist in the data set
+INFO_LDIFMODIFY_DESCRIPTION_SOURCE_620=Specifies the LDIF file containing the \
+ data to be updated
+INFO_LDIFMODIFY_DESCRIPTION_CHANGES_621=Specifies the LDIF file containing \
+ the changes to apply
+INFO_LDIFMODIFY_DESCRIPTION_TARGET_622=Specifies the file to which the \
+ updated data should be written
+INFO_LDIFMODIFY_DESCRIPTION_HELP_623=Displays this usage information
+SEVERE_ERR_LDIFMODIFY_CANNOT_INITIALIZE_JMX_626=An error occurred while \
+ attempting to initialize the Directory Server JMX subsystem based on the \
+ information in configuration file %s:  %s
+SEVERE_ERR_LDIFMODIFY_CANNOT_INITIALIZE_CONFIG_627=An error occurred while \
+ attempting to process the Directory Server configuration file %s:  %s
+SEVERE_ERR_LDIFMODIFY_CANNOT_INITIALIZE_SCHEMA_628=An error occurred while \
+ attempting to initialize the Directory Server schema based on the information \
+ in configuration file %s:  %s
+SEVERE_ERR_LDIFMODIFY_SOURCE_DOES_NOT_EXIST_629=The source LDIF file %s does \
+ not exist
+SEVERE_ERR_LDIFMODIFY_CANNOT_OPEN_SOURCE_630=Unable to open the source LDIF \
+ file %s:  %s
+SEVERE_ERR_LDIFMODIFY_CHANGES_DOES_NOT_EXIST_631=The changes LDIF file %s \
+ does not exist
+SEVERE_ERR_LDIFMODIFY_CANNOT_OPEN_CHANGES_632=Unable to open the changes LDIF \
+ file %s:  %s
+SEVERE_ERR_LDIFMODIFY_CANNOT_OPEN_TARGET_633=Unable to open the target LDIF \
+ file %s for writing:  %s
+SEVERE_ERR_LDIFMODIFY_ERROR_PROCESSING_LDIF_634=An error occurred while \
+ processing the requested changes:  %s
+INFO_LDAPPWMOD_DESCRIPTION_HOST_635=Specifies the address of the Directory \
+ Server system
+INFO_LDAPPWMOD_DESCRIPTION_PORT_636=Specifies the port in which the Directory \
+ Server is listening for LDAP client connections
+INFO_LDAPPWMOD_DESCRIPTION_BIND_DN_637=Specifies the DN to use to bind to the \
+ server
+INFO_LDAPPWMOD_DESCRIPTION_BIND_PW_638=Specifies the password to use to bind \
+ to the server
+INFO_LDAPPWMOD_DESCRIPTION_BIND_PW_FILE_639=Specifies the path to a file \
+ containing the password to use to bind to the server
+INFO_LDAPPWMOD_DESCRIPTION_AUTHZID_640=Specifies the authorization ID for the \
+ user entry whose password should be changed
+INFO_LDAPPWMOD_DESCRIPTION_PROVIDE_DN_FOR_AUTHZID_641=Indicates that the bind \
+ DN should be used as the authorization ID for the password modify operation
+INFO_LDAPPWMOD_DESCRIPTION_NEWPW_642=Specifies the new password to provide \
+ for the target user
+INFO_LDAPPWMOD_DESCRIPTION_NEWPWFILE_643=Specifies the path to a file \
+ containing the new password to provide for the target user
+INFO_LDAPPWMOD_DESCRIPTION_CURRENTPW_644=Specifies the current password for \
+ the target user
+INFO_LDAPPWMOD_DESCRIPTION_CURRENTPWFILE_645=Specifies the path to a file \
+ containing the current password for the target user
+INFO_LDAPPWMOD_DESCRIPTION_USE_SSL_646=Use SSL to secure the communication \
+ with the Directory Server
+INFO_LDAPPWMOD_DESCRIPTION_USE_STARTTLS_647=Use StartTLS to secure the \
+ communication with the Directory Server
+INFO_LDAPPWMOD_DESCRIPTION_BLIND_TRUST_648=Blindly trust any SSL certificate \
+ presented by the server
+INFO_LDAPPWMOD_DESCRIPTION_KEYSTORE_649=The path to the keystore to use when \
+ establishing SSL/TLS communication with the server
+INFO_LDAPPWMOD_DESCRIPTION_KEYSTORE_PINFILE_650=The path to a file containing \
+ the PIN needed to access the contents of the keystore
+INFO_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_651=The path to the trust store to use \
+ when establishing SSL/TLS communication with the server
+INFO_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_PINFILE_652=The path to a file \
+ containing the PIN needed to accessthe contents of the trust store
+SEVERE_ERR_LDAPPWMOD_CONFLICTING_ARGS_656=The %s and %s arguments may not be \
+ provided together
+SEVERE_ERR_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER_657=If either a bind DN \
+ or bind password is provided, then the other must be given as well
+SEVERE_ERR_LDAPPWMOD_ANON_REQUIRES_AUTHZID_AND_CURRENTPW_658=If a bind DN and \
+ password are not provided, then an authorization ID and current password must \
+ be given
+SEVERE_ERR_LDAPPWMOD_DEPENDENT_ARGS_659=If the %s argument is provided, then \
+ the  %s argument must also be given
+SEVERE_ERR_LDAPPWMOD_ERROR_INITIALIZING_SSL_660=Unable to initialize SSL/TLS \
+ support:  %s
+SEVERE_ERR_LDAPPWMOD_CANNOT_CONNECT_661=An error occurred while attempting to \
+ connect to theDirectory Server:  %s
+SEVERE_ERR_LDAPPWMOD_CANNOT_SEND_PWMOD_REQUEST_662=Unable to send the LDAP \
+ password modify request:  %s
+SEVERE_ERR_LDAPPWMOD_CANNOT_READ_PWMOD_RESPONSE_663=Unable to read the LDAP \
+ password modify response:  %s
+SEVERE_ERR_LDAPPWMOD_FAILED_664=The LDAP password modify operation failed \
+ with result code %d
+SEVERE_ERR_LDAPPWMOD_FAILURE_ERROR_MESSAGE_665=Error Message:  %s
+SEVERE_ERR_LDAPPWMOD_FAILURE_MATCHED_DN_666=Matched DN:  %s
+INFO_LDAPPWMOD_SUCCESSFUL_667=The LDAP password modify operation was \
+ successful
+INFO_LDAPPWMOD_ADDITIONAL_INFO_668=Additional Info:  %s
+INFO_LDAPPWMOD_GENERATED_PASSWORD_669=Generated Password:  %s
+SEVERE_ERR_LDAPPWMOD_UNRECOGNIZED_VALUE_TYPE_670=Unable to decode the \
+ password modify response value because it contained an invalid element type \
+ of %s
+SEVERE_ERR_LDAPPWMOD_COULD_NOT_DECODE_RESPONSE_VALUE_671=Unable to decode the \
+ password modify response value:  %s
+SEVERE_ERR_INSTALLDS_IMPORT_UNSUCCESSFUL_672=Import failed
+INFO_COMPARE_CANNOT_BASE64_DECODE_ASSERTION_VALUE_673=The assertion value was \
+ indicated to be base64-encoded, but an error occurred while trying to decode \
+ the value
+INFO_COMPARE_CANNOT_READ_ASSERTION_VALUE_FROM_FILE_674=Unable to read the \
+ assertion value from the specified file:  %s
+INFO_WAIT4DEL_DESCRIPTION_TARGET_FILE_675=Specifies the path to the file to \
+ watch for deletion
+INFO_WAIT4DEL_DESCRIPTION_LOG_FILE_676=Specifies the path to a file \
+ containing log output to monitor
+INFO_WAIT4DEL_DESCRIPTION_TIMEOUT_677=The maximum length of time in seconds \
+ to wait for the target file to be deleted before exiting
+INFO_WAIT4DEL_DESCRIPTION_HELP_678=Displays this usage information
+SEVERE_WARN_WAIT4DEL_CANNOT_OPEN_LOG_FILE_681=WARNING:  Unable to open log \
+ file %s for reading:  %s
+SEVERE_ERR_LDAPCOMPARE_NO_DNS_682=No entry DNs provided for the compare \
+ operation
+INFO_BACKUPDB_TOOL_DESCRIPTION_683=This utility may be used to back up one or \
+ more Directory Server backends
+INFO_CONFIGDS_TOOL_DESCRIPTION_684=This utility may be used to define a base \
+ configuration for the Directory Server
+INFO_ENCPW_TOOL_DESCRIPTION_685=This utility may be used to encode user \
+ passwords with a specified storage scheme, or to determine whether a given \
+ clear-text value matches a provided encoded password
+INFO_LDIFEXPORT_TOOL_DESCRIPTION_686=This utility may be used to export data \
+ from a Directory Server backend in LDIF form
+INFO_LDIFIMPORT_TOOL_DESCRIPTION_687=This utility may be used to import LDIF \
+ data into a Directory Server backend
+INFO_INSTALLDS_TOOL_DESCRIPTION_688=This utility may be used to define a base \
+ configuration for the Directory Server
+INFO_LDAPCOMPARE_TOOL_DESCRIPTION_689=This utility may be used to perform \
+ LDAP compare operations in the Directory Server
+INFO_LDAPDELETE_TOOL_DESCRIPTION_690=This utility may be used to perform LDAP \
+ delete operations in the Directory Server
+INFO_LDAPMODIFY_TOOL_DESCRIPTION_691=This utility may be used to perform LDAP \
+ modify, add, delete, and modify DN operations in the Directory Server
+INFO_LDAPPWMOD_TOOL_DESCRIPTION_692=This utility may be used to perform LDAP \
+ password modify operations in the Directory Server
+INFO_LDAPSEARCH_TOOL_DESCRIPTION_693=This utility may be used to perform LDAP \
+ search operations in the Directory Server
+INFO_LDIFDIFF_TOOL_DESCRIPTION_694=This utility may be used to compare two \
+ LDIF files and report the differences in LDIF format
+INFO_LDIFMODIFY_TOOL_DESCRIPTION_695=This utility may be used to apply a set \
+ of modify, add, and delete operations against data in an LDIF file
+INFO_LDIFSEARCH_TOOL_DESCRIPTION_696=This utility may be used to perform \
+ search operations against data in an LDIF file
+INFO_MAKELDIF_TOOL_DESCRIPTION_697=This utility may be used to generate LDIF \
+ data based on a definition in a template file
+INFO_RESTOREDB_TOOL_DESCRIPTION_698=This utility may be used to restore a \
+ backup of a Directory Server backend
+INFO_STOPDS_TOOL_DESCRIPTION_699=This utility may be used to request that the \
+ Directory Server stop running or perform a restart
+INFO_VERIFYINDEX_TOOL_DESCRIPTION_700=This utility may be used to ensure that \
+ index data is consistent within a backend based on the Berkeley DB Java \
+ Edition
+INFO_WAIT4DEL_TOOL_DESCRIPTION_701=This utility may be used to wait for a \
+ file to be removed from the filesystem
+SEVERE_ERR_TOOL_CONFLICTING_ARGS_702=You may not provide both the --%s and \
+ the --%s arguments
+SEVERE_ERR_LDAPCOMPARE_NO_ATTR_703=No attribute was specified to use as the \
+ target for the comparison
+SEVERE_ERR_LDAPCOMPARE_INVALID_ATTR_STRING_704=Invalid attribute string '%s'. \
+ The attribute string must be in one of the following forms: \
+ 'attribute:value', 'attribute::base64value', or 'attribute:<valueFilePath'
+SEVERE_ERR_TOOL_INVALID_CONTROL_STRING_705=Invalid control specification '%s'
+SEVERE_ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS_706=SASL EXTERNAL \
+ authentication may only be requested if SSL or StartTLS is used
+SEVERE_ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE_707=SASL EXTERNAL authentication \
+ may only be used if a client certificate keystore is specified
+INFO_LDAPSEARCH_PSEARCH_CHANGE_TYPE_708=# Persistent search change type:  %s
+INFO_LDAPSEARCH_PSEARCH_PREVIOUS_DN_709=# Persistent search previous entry \
+ DN:  %s
+INFO_LDAPSEARCH_ACCTUSABLE_HEADER_710=# Account Usability Response Control
+INFO_LDAPSEARCH_ACCTUSABLE_IS_USABLE_711=#   The account is usable
+INFO_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_EXPIRATION_712=#   Time until password \
+ expiration:  %s
+INFO_LDAPSEARCH_ACCTUSABLE_NOT_USABLE_713=#   The account is not usable
+INFO_LDAPSEARCH_ACCTUSABLE_ACCT_INACTIVE_714=#   The account has been \
+ deactivated
+INFO_LDAPSEARCH_ACCTUSABLE_PW_RESET_715=#   The password has been reset
+INFO_LDAPSEARCH_ACCTUSABLE_PW_EXPIRED_716=#   The password has expired
+INFO_LDAPSEARCH_ACCTUSABLE_REMAINING_GRACE_717=#   Number of grace logins \
+ remaining:  %d
+INFO_LDAPSEARCH_ACCTUSABLE_LOCKED_718=#   The account is locked
+INFO_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_UNLOCK_719=#   Time until the account \
+ is unlocked:  %s
+INFO_DESCRIPTION_KEYSTOREPASSWORD_FILE_720=Certificate keystore PIN file
+INFO_DESCRIPTION_TRUSTSTOREPASSWORD_721=Certificate trust store PIN
+INFO_DESCRIPTION_TRUSTSTOREPASSWORD_FILE_722=Certificate trust store PIN file
+INFO_LISTBACKENDS_TOOL_DESCRIPTION_723=This utility may be used to list the \
+ backends and base DNs configured in the Directory Server
+INFO_LISTBACKENDS_DESCRIPTION_BACKEND_ID_726=Backend ID of the backend for \
+ which to list the base DNs
+INFO_LISTBACKENDS_DESCRIPTION_BASE_DN_727=Base DN for which to list the \
+ backend ID
+INFO_LISTBACKENDS_DESCRIPTION_HELP_728=Display this usage information
+SEVERE_ERR_LISTBACKENDS_CANNOT_GET_BACKENDS_734=An error occurred while \
+ trying to read backend information from the server configuration:  %s
+SEVERE_ERR_LISTBACKENDS_INVALID_DN_735=The provided base DN value '%s' could \
+ not be parsed as a valid DN:  %s
+INFO_LISTBACKENDS_NOT_BASE_DN_736=The provided DN '%s' is not a base DN for \
+ any backend configured in the Directory Server
+INFO_LISTBACKENDS_NO_BACKEND_FOR_DN_737=The provided DN '%s' is not below any \
+ base DN for any of the backends configured in the Directory Server
+INFO_LISTBACKENDS_DN_BELOW_BASE_738=The provided DN '%s' is below '%s' which \
+ is configured as a base DN for backend '%s'
+INFO_LISTBACKENDS_BASE_FOR_ID_739=The provided DN '%s' is a base DN for \
+ backend '%s'
+INFO_LISTBACKENDS_LABEL_BACKEND_ID_740=Backend ID
+INFO_LISTBACKENDS_LABEL_BASE_DN_741=Base DN
+SEVERE_ERR_LISTBACKENDS_NO_SUCH_BACKEND_742=There is no backend with ID '%s' \
+ in the server configuration
+SEVERE_ERR_LISTBACKENDS_NO_VALID_BACKENDS_743=None of the provided backend \
+ IDs exist in the server configuration
+SEVERE_ERR_ENCPW_INVALID_ENCODED_USERPW_748=The provided password is not a \
+ valid encoded user password value:  %s
+INFO_ENCPW_DESCRIPTION_USE_COMPARE_RESULT_749=Use the LDAP compare result as \
+ an exit code for the password comparison
+INFO_DESCRIPTION_COUNT_ENTRIES_750=Count the number of entries returned by \
+ the server
+INFO_LDAPSEARCH_MATCHING_ENTRY_COUNT_751=# Total number of matching entries: \
+ %d
+INFO_INSTALLDS_DESCRIPTION_CLI_752=Specifies to use the command line install. \
+ If not specified the graphical interface will be launched.  The rest of the \
+ options (excluding help and version) will only be taken into account if this \
+ option is specified
+INFO_INSTALLDS_DESCRIPTION_SAMPLE_DATA_753=Specifies that the database should \
+ be populated with the specified number of sample entries
+INFO_INSTALLDS_HEADER_POPULATE_TYPE_754=Options for populating the database:
+INFO_INSTALLDS_POPULATE_OPTION_BASE_ONLY_755=Only create the base entry
+INFO_INSTALLDS_POPULATE_OPTION_LEAVE_EMPTY_756=Leave the database empty
+INFO_INSTALLDS_POPULATE_OPTION_IMPORT_LDIF_757=Import data from an LDIF file
+INFO_INSTALLDS_POPULATE_OPTION_GENERATE_SAMPLE_758=Load \
+ automatically-generated sample data
+INFO_INSTALLDS_PROMPT_POPULATE_CHOICE_759=Database population selection:
+SEVERE_ERR_INSTALLDS_NO_SUCH_LDIF_FILE_780=ERROR:  The specified LDIF file %s \
+ does not exist
+INFO_INSTALLDS_PROMPT_NUM_ENTRIES_781=Please specify the number of user \
+ entries to generate:
+SEVERE_ERR_INSTALLDS_CANNOT_CREATE_TEMPLATE_FILE_782=ERROR:  Cannot create \
+ the template file for generating sample data:  %s
+INFO_LDAPPWMOD_DESCRIPTION_KEYSTORE_PIN_783=The PIN needed to access the \
+ contents of the keystore
+INFO_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_PIN_784=The PIN needed to access the \
+ contents of the trust store
+INFO_LDIFEXPORT_DESCRIPTION_EXCLUDE_OPERATIONAL_785=Exclude operational \
+ attributes from the LDIF export
+INFO_LDAPPWMOD_PWPOLICY_WARNING_786=Password Policy Warning:  %s = %d
+INFO_LDAPPWMOD_PWPOLICY_ERROR_787=Password Policy Error:  %s
+MILD_ERR_LDAPPWMOD_CANNOT_DECODE_PWPOLICY_CONTROL_788=Unable to decode the \
+ password policy response control:  %s
+SEVERE_ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE_789=The \
+ connection to the Directory Server was closed before the bind response could \
+ be read
+INFO_DESCRIPTION_SIMPLE_PAGE_SIZE_790=Use the simple paged results control \
+ with the given page size
+SEVERE_ERR_PAGED_RESULTS_REQUIRES_SINGLE_FILTER_791=The simple paged results \
+ control may only be used with a single search filter
+SEVERE_ERR_PAGED_RESULTS_CANNOT_DECODE_792=Unable to decode the simple paged \
+ results control from the search response:  %s
+SEVERE_ERR_PAGED_RESULTS_RESPONSE_NOT_FOUND_793=The simple paged results \
+ response control was not found in the search result done message from the \
+ server
+INFO_LDIFDIFF_DESCRIPTION_SINGLE_VALUE_CHANGES_794=Indicates that each \
+ attribute-level change should be written as a separate modification per \
+ attribute value rather than one modification per entry
+SEVERE_ERR_PROMPTTM_REJECTING_CLIENT_CERT_795=Rejecting client certificate \
+ chain because the prompt trust manager may only be used to trust server \
+ certificates
+SEVERE_WARN_PROMPTTM_NO_SERVER_CERT_CHAIN_796=WARNING:  The server did not \
+ present a certificate chain.  Do you still wish to attempt connecting to the \
+ target server?
+SEVERE_WARN_PROMPTTM_CERT_EXPIRED_797=WARNING:  The server certificate is \
+ expired (expiration time:  %s)
+SEVERE_WARN_PROMPTTM_CERT_NOT_YET_VALID_798=WARNING:  The server certificate \
+ will not be valid until %s
+INFO_PROMPTTM_SERVER_CERT_799=The server is using the following certificate: \
+ \n    Subject DN:  %s\n    Issuer DN:  %s\n    Validity:  %s through %s\nDo \
+ you wish to trust this certificate and continue connecting to the server?
+INFO_PROMPTTM_YESNO_PROMPT_800=Please enter "yes" or "no":
+SEVERE_ERR_PROMPTTM_USER_REJECTED_801=The server certificate has been \
+ rejected by the user
+INFO_STOPDS_SERVER_ALREADY_STOPPED_802=Server already stopped
+INFO_STOPDS_GOING_TO_STOP_803=Stopping Server...\n
+INFO_STOPDS_CHECK_STOPPABILITY_804=Used to determine whether the server can \
+ be stopped or not and the mode to be used to stop it
+INFO_DESCRIPTION_CERT_NICKNAME_805=Nickname of certificate for SSL client \
+ authentication
+INFO_CONFIGDS_DESCRIPTION_JMX_PORT_806=Specifies the port on which the \
+ Directory Server should listen for JMX communication
+SEVERE_ERR_CONFIGDS_CANNOT_UPDATE_JMX_PORT_807=An error occurred while \
+ attempting to update the port on which to listen for JMX communication:  %s
+INFO_INSTALLDS_DESCRIPTION_JMXPORT_808=Specifies the port on which the \
+ Directory Server should listen for JMX communication
+INFO_INSTALLDS_PROMPT_JMXPORT_809=On which port would you like the Directory \
+ Server to accept connections from JMX clients?
+SEVERE_ERR_TOOL_RESULT_CODE_810=Result Code:  %d (%s)
+SEVERE_ERR_TOOL_ERROR_MESSAGE_811=Additional Information:  %s
+SEVERE_ERR_TOOL_MATCHED_DN_812=Matched DN:  %s
+SEVERE_ERR_WINDOWS_SERVICE_NOT_FOUND_813=Could not find the service name for \
+ OpenDS
+SEVERE_ERR_WINDOWS_SERVICE_START_ERROR_814=An unexpected error occurred \
+ starting OpenDS as a windows service
+SEVERE_ERR_WINDOWS_SERVICE_STOP_ERROR_815=An unexpected error occurred \
+ stopping the OpenDS windows service
+INFO_CONFIGURE_WINDOWS_SERVICE_TOOL_DESCRIPTION_816=This utility may be used \
+ to configure OpenDS as a Windows service
+INFO_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_SHOWUSAGE_817=Display this usage \
+ information
+INFO_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_ENABLE_818=Enables OpenDS as a \
+ Windows service
+INFO_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_DISABLE_819=Disables OpenDS as a \
+ Windows service and stops the server
+INFO_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_STATE_820=Provides information \
+ about the state of OpenDS as a Windows service
+SEVERE_ERR_CONFIGURE_WINDOWS_SERVICE_TOO_MANY_ARGS_823=You can only provide \
+ one of the following arguments:\nenableService, disableService, serviceState \
+ or cleanupService
+SEVERE_ERR_CONFIGURE_WINDOWS_SERVICE_TOO_FEW_ARGS_824=You must provide at \
+ least one of the following arguments:\nenableService, disableService or \
+ serviceState or cleanupService
+INFO_WINDOWS_SERVICE_NAME_825=OpenDS
+INFO_WINDOWS_SERVICE_DESCRIPTION_826=Open source Next Generation Directory \
+ Server.  Installation path: %s
+INFO_WINDOWS_SERVICE_SUCCESSULLY_ENABLED_827=OpenDS was successfully enabled \
+ as a Windows service
+INFO_WINDOWS_SERVICE_ALREADY_ENABLED_828=OpenDS was already enabled as a \
+ Windows service
+SEVERE_ERR_WINDOWS_SERVICE_NAME_ALREADY_IN_USE_829=OpenDS could not enabled \
+ as a Windows service.  The service name is already in use
+SEVERE_ERR_WINDOWS_SERVICE_ENABLE_ERROR_830=An unexpected error occurred \
+ trying to enable OpenDS as a Windows service
+INFO_WINDOWS_SERVICE_SUCCESSULLY_DISABLED_831=OpenDS was successfully \
+ disabled as a Windows service
+INFO_WINDOWS_SERVICE_ALREADY_DISABLED_832=OpenDS was already disabled as a \
+ Windows service
+SEVERE_WARN_WINDOWS_SERVICE_MARKED_FOR_DELETION_833=OpenDS has been marked \
+ for deletion as a Windows Service
+SEVERE_ERR_WINDOWS_SERVICE_DISABLE_ERROR_834=An unexpected error occurred \
+ trying to disable OpenDS as a Windows service
+INFO_WINDOWS_SERVICE_ENABLED_835=OpenDS is enabled as a Windows service.  The \
+ service name for OpenDS is: %s
+INFO_WINDOWS_SERVICE_DISABLED_836=OpenDS is disabled as a Windows service
+SEVERE_ERR_WINDOWS_SERVICE_STATE_ERROR_837=An unexpected error occurred \
+ trying to retrieve the state of OpenDS as a Windows service
+INFO_STOPDS_DESCRIPTION_WINDOWS_NET_STOP_838=Used by the window service code \
+ to inform that stop-ds is being called from the window services after a call \
+ to net stop
+INFO_WAIT4DEL_DESCRIPTION_OUTPUT_FILE_839=Specifies the path to a file to \
+ which the command will write the output
+SEVERE_WARN_WAIT4DEL_CANNOT_OPEN_OUTPUT_FILE_840=WARNING:  Unable to open \
+ output file %s for writing:  %s
+INFO_INSTALLDS_ENABLING_WINDOWS_SERVICE_841=Enabling OpenDS as a Windows \
+ service...
+INFO_INSTALLDS_PROMPT_ENABLE_SERVICE_842=Enable OpenDS to run as a Windows \
+ Service?
+INFO_INSTALLDS_DESCRIPTION_ENABLE_WINDOWS_SERVICE_843=Enable OpenDS to run as \
+ a Windows Service
+INFO_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_CLEANUP_844=Allows to disable the \
+ OpenDS service and to clean up the windows registry information associated \
+ with the provided service name
+INFO_WINDOWS_SERVICE_CLEANUP_SUCCESS_845=Clean up of service %s was \
+ successful
+SEVERE_ERR_WINDOWS_SERVICE_CLEANUP_NOT_FOUND_846=Could not find the service \
+ with name %s
+SEVERE_WARN_WINDOWS_SERVICE_CLEANUP_MARKED_FOR_DELETION_847=Service %s has \
+ been marked for deletion
+SEVERE_ERR_WINDOWS_SERVICE_CLEANUP_ERROR_848=An unexpected error occurred \
+ cleaning up the service %s
+INFO_REBUILDINDEX_TOOL_DESCRIPTION_849=This utility may be used to rebuild \
+ index data within a backend based on the Berkeley DB Java Edition
+INFO_REBUILDINDEX_DESCRIPTION_BASE_DN_850=Specifies the base DN of a backend \
+ supporting indexing. Rebuild is performed on indexes within the scope of the \
+ given base DN
+INFO_REBUILDINDEX_DESCRIPTION_INDEX_NAME_851=Specifies the names of index(es) \
+ to rebuild. For an attribute index this is simply an attribute name.  At \
+ least one index must be specified for rebuild
+SEVERE_ERR_REBUILDINDEX_ERROR_DURING_REBUILD_852=An error occurred while \
+ attempting to perform index rebuild:  %s
+SEVERE_ERR_REBUILDINDEX_WRONG_BACKEND_TYPE_853=The backend does not support \
+ rebuilding of indexes
+SEVERE_ERR_REBUILDINDEX_REQUIRES_AT_LEAST_ONE_INDEX_854=At least one index \
+ must be spcified for the rebuild process
+SEVERE_ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND_855=An error occurred \
+ while attempting to acquire a exclusive lock for backend %s:  %s.  This \
+ generally means that some other process has an lock on this backend or the \
+ server is running with this backend online. The rebuild process cannot \
+ continue
+SEVERE_WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND_856=An error occurred while \
+ attempting to release the shared lock for backend %s:  %s.  This lock should \
+ automatically be cleared when the rebuild process exits, so no further action \
+ should be required
+SEVERE_ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND_857=An error occurred \
+ while attempting to acquire a shared lock for backend %s:  %s.  This \
+ generally means that some other process has an exclusive lock on this backend \
+ (e.g., an LDIF import or a restore). The rebuildprocess cannot continue
+INFO_CONFIGDS_DESCRIPTION_LDAPS_PORT_858=Specifies the port on which the \
+ Directory Server should listen for LDAPS communication
+SEVERE_ERR_CONFIGDS_CANNOT_UPDATE_LDAPS_PORT_859=An error occurred while \
+ attempting to update the port on which to listen for LDAPS communication:  %s
+INFO_CONFIGDS_DESCRIPTION_ENABLE_START_TLS_860=Specifies whether to enable or \
+ not StartTLS
+INFO_CONFIGDS_DESCRIPTION_KEYMANAGER_PROVIDER_DN_861=Specifies the DN of the \
+ key manager provider to use for SSL and/or StartTLS
+INFO_CONFIGDS_DESCRIPTION_TRUSTMANAGER_PROVIDER_DN_862=Specifies the DN of \
+ the trust manager provider to use for SSL and/or StartTLS
+SEVERE_ERR_CONFIGDS_CANNOT_PARSE_KEYMANAGER_PROVIDER_DN_863=An error occurred \
+ while attempting to parse key manager provider DN value "%s" as a DN:  %s
+SEVERE_ERR_CONFIGDS_CANNOT_PARSE_TRUSTMANAGER_PROVIDER_DN_864=An error \
+ occurred while attempting to parse trust manager provider DN value "%s" as a \
+ DN:  %s
+SEVERE_ERR_CONFIGDS_CANNOT_ENABLE_STARTTLS_865=An error occurred while \
+ attempting to enable StartTLS: %s
+SEVERE_ERR_CONFIGDS_CANNOT_ENABLE_KEYMANAGER_866=An error occurred while \
+ attempting to enable key manager provider entry: %s
+SEVERE_ERR_CONFIGDS_CANNOT_ENABLE_TRUSTMANAGER_867=An error occurred while \
+ attempting to enable trust manager provider entry: %s
+SEVERE_ERR_CONFIGDS_CANNOT_UPDATE_KEYMANAGER_REFERENCE_868=An error occurred \
+ while attempting to update the key manager provider DN used for LDAPS \
+ communication: %s
+SEVERE_ERR_CONFIGDS_CANNOT_UPDATE_TRUSTMANAGER_REFERENCE_869=An error \
+ occurred while attempting to update the trust manager provider DN used for \
+ LDAPS communication: %s
+INFO_CONFIGDS_DESCRIPTION_KEYMANAGER_PATH_870=Specifies the path of the \
+ keystore to be used by the key manager provider
+INFO_CONFIGDS_DESCRIPTION_CERTNICKNAME_871=Specifies the nickname of the \
+ certificate that the connection handler should use when accepting SSL-based \
+ connections or performing StartTLS negotiation
+SEVERE_ERR_CONFIGDS_KEYMANAGER_PROVIDER_DN_REQUIRED_872=ERROR:  You must \
+ provide the %s argument when providing the %s argument
+SEVERE_ERR_CONFIGDS_CANNOT_UPDATE_CERT_NICKNAME_873=An error occurred while \
+ attempting to update the nickname of the certificate that the connection \
+ handler should use when accepting SSL-based connections or performing \
+ StartTLS negotiation: %s
+INFO_LDAPMODIFY_DESCRIPTION_FILENAME_874=Specifies the LDIF file containing \
+ the changes to apply
+MILD_ERR_MAKELDIF_TEMPLATE_INVALID_PARENT_TEMPLATE_875=The parent template %s \
+ referenced on line %d for template %s is invalid because the referenced \
+ parent template is not defined before the template that extends it
+INFO_DESCRIPTION_SORT_ORDER_876=Sort the results using the provided sort \
+ order
+MILD_ERR_LDAP_SORTCONTROL_INVALID_ORDER_877=The provided sort order was \
+ invalid:  %s
+INFO_DESCRIPTION_VLV_878=Use the virtual list view control to retrieve the \
+ specified results page
+MILD_ERR_LDAPSEARCH_VLV_REQUIRES_SORT_879=If the --%s argument is provided, \
+ then the --%s argument must also be given
+MILD_ERR_LDAPSEARCH_VLV_INVALID_DESCRIPTOR_880=The provided virtual list view \
+ descriptor was invalid.  It must be a value in the form \
+ 'beforeCount:afterCount:offset:contentCount' (where offset specifies the \
+ index of the target entry and contentCount specifies the estimated total \
+ number of results or zero if it is not known), or \
+ 'beforeCount:afterCount:assertionValue' (where the entry should be the first \
+ entry whose primary sort value is greater than or equal to the provided \
+ assertionValue).  In either case, beforeCount is the number of entries to \
+ return before the target value and afterCount is the number of entries to \
+ return after the target value
+SEVERE_WARN_LDAPSEARCH_SORT_ERROR_881=# Server-side sort failed:  %s
+SEVERE_WARN_LDAPSEARCH_CANNOT_DECODE_SORT_RESPONSE_882=# Unable to decode the \
+ server-side sort response:  %s
+INFO_LDAPSEARCH_VLV_TARGET_OFFSET_883=# VLV Target Offset:  %d
+INFO_LDAPSEARCH_VLV_CONTENT_COUNT_884=# VLV Content Count:  %d
+SEVERE_WARN_LDAPSEARCH_VLV_ERROR_885=# Virtual list view processing failed: \
+ %s
+SEVERE_WARN_LDAPSEARCH_CANNOT_DECODE_VLV_RESPONSE_886=# Unable to decode the \
+ virtual list view response:  %s
+SEVERE_ERR_LDIFIMPORT_CANNOT_READ_FILE_887=The specified LDIF file %s cannot \
+ be read
+INFO_DESCRIPTION_EFFECTIVERIGHTS_USER_888=Use geteffectiverights control with \
+ the provided authzid
+INFO_DESCRIPTION_EFFECTIVERIGHTS_ATTR_889=Specifies geteffectiverights \
+ control specific attribute list
+MILD_ERR_EFFECTIVERIGHTS_INVALID_AUTHZID_890=The authorization ID "%s" \
+ contained in the geteffectiverights control is invalid because it does not \
+ start with "dn:" to indicate a user DN
+INFO_DESCRIPTION_PRODUCT_VERSION_891=Display Directory Server version \
+ information
+SEVERE_ERR_DSCFG_ERROR_CANNOT_READ_LDAP_BIND_PASSWORD_1000=The LDAP bind \
+ password could not be read due to the following error: %s
+SEVERE_ERR_DSCFG_ERROR_LDAP_SIMPLE_BIND_FAILED_1001=Unable to authenticate to \
+ the server as %s
+SEVERE_ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_1002=Unable to connect to the \
+ server at %s on port %s
+SEVERE_ERR_DSCFG_ERROR_LDAP_SIMPLE_BIND_NOT_SUPPORTED_1003=Unable to \
+ authenticate using simple authentication
+INFO_DSCFG_DESCRIPTION_SUBCMD_CREATE_1004=Creates %s
+INFO_DSCFG_DESCRIPTION_SUBCMD_DELETE_1005=Deletes %s
+INFO_DSCFG_DESCRIPTION_SUBCMD_LIST_1006=Lists existing %s
+INFO_DSCFG_DESCRIPTION_SUBCMD_GETPROP_1007=Shows %s properties
+INFO_DSCFG_DESCRIPTION_SUBCMD_SETPROP_1008=Modifies %s properties
+SEVERE_ERR_DSCFG_ERROR_MISSING_SUBCOMMAND_1009=A sub-command must be \
+ specified
+INFO_DSCFG_DESCRIPTION_TYPE_1010=The type of %s which should be created. The \
+ value for TYPE can be one of: %s
+SEVERE_ERR_DSCFG_ERROR_NO_PASSWORD_1011=No password was specified for \
+ administrator "%s"
+SEVERE_ERR_DSCFG_ERROR_PROPERTY_UNRECOGNIZED_1012=The property "%s" is not a \
+ recognized property of %s
+SEVERE_ERR_DSCFG_ERROR_PROPERTY_INVALID_VALUE_1013=The value "%s" is not a \
+ valid value for the %s property "%s" which has the following syntax: %s
+SEVERE_ERR_DSCFG_ERROR_PROPERTY_READ_ONLY_1014=The %s property "%s" is \
+ read-only and cannot be modified
+SEVERE_ERR_DSCFG_ERROR_PROPERTY_MANDATORY_1015=The %s property "%s" is \
+ mandatory and must be specified
+SEVERE_ERR_DSCFG_ERROR_PROPERTY_SINGLE_VALUED_1016=It is not possible to \
+ specify multiple values for the %s property "%s" as it is single-valued
+INFO_DSCFG_DESCRIPTION_SUBCMD_HELPPROP_1017=Describes managed objects and \
+ their properties
+INFO_DSCFG_HEADING_COMPONENT_NAME_1018=Component
+INFO_DSCFG_HEADING_PROPERTY_NAME_1019=Property
+INFO_DSCFG_HEADING_PROPERTY_VALUE_1020=Value(s)
+INFO_DSCFG_HEADING_PROPERTY_SYNTAX_1021=Syntax
+INFO_DSCFG_HEADING_PROPERTY_OPTIONS_1022=Options
+INFO_DSCFG_HEADING_PROPERTY_DEFAULT_1023=Default
+INFO_DSCFG_HEADING_PROPERTY_DESCRIPTION_1024=Description
+INFO_DSCFG_DESCRIPTION_PROPERTY_SYNTAX_HELP_1025=See detailed help
+SEVERE_ERR_DSCFG_ERROR_GET_PARENT_DDE_1026=The parent %s could not be \
+ retrieved because its type could not be determined. This is probably due to \
+ the %s having an invalid LDAP entry. Check that the %s has the correct object \
+ classes
+SEVERE_ERR_DSCFG_ERROR_GET_PARENT_MODE_1027=The parent %s could not be \
+ retrieved because of the reasons listed below:
+SEVERE_ERR_DSCFG_ERROR_GET_PARENT_MONFE_1028=The parent %s does not exist
+SEVERE_ERR_DSCFG_ERROR_GET_PARENT_AUTHZ_1029=The parent %s could not be \
+ retrieved because you do not have the correct authorization
+SEVERE_ERR_DSCFG_ERROR_GET_PARENT_CE_1030=The parent %s could not be \
+ retrieved due to a communications problem: %s
+SEVERE_ERR_DSCFG_ERROR_GET_PARENT_CME_1031=The parent %s could not be \
+ retrieved because another client is currently making conflicting \
+ configuration changes
+SEVERE_ERR_DSCFG_ERROR_CREATE_MMPE_1032=The %s could not be created because \
+ the following mandatory properties must be defined: %s
+SEVERE_ERR_DSCFG_ERROR_CREATE_MOAEE_1033=The %s could not be created because \
+ there is already an existing one with the same name
+SEVERE_ERR_DSCFG_ERROR_CREATE_AUTHZ_1034=The %s could not be created because \
+ you do not have the correct authorization
+SEVERE_ERR_DSCFG_ERROR_CREATE_CE_1035=The %s could not be created due to a \
+ communications problem: %s
+SEVERE_ERR_DSCFG_ERROR_CREATE_CME_1036=The %s could not be created because \
+ another client is currently making conflicting configuration changes
+SEVERE_ERR_DSCFG_ERROR_CREATE_ORE_1037=The server prevented the %s from being \
+ created because of the following reason: %s
+SEVERE_ERR_DSCFG_ERROR_DELETE_MONFE_1038=The %s could not be deleted because \
+ it does not exist
+SEVERE_ERR_DSCFG_ERROR_DELETE_AUTHZ_1039=The %s could not be deleted because \
+ you do not have the correct authorization
+SEVERE_ERR_DSCFG_ERROR_DELETE_ORE_1040=The server prevented the %s from being \
+ deleted because of the following reason: %s
+SEVERE_ERR_DSCFG_ERROR_DELETE_CE_1041=The %s could not be deleted due to a \
+ communications problem: %s
+SEVERE_ERR_DSCFG_ERROR_DELETE_CME_1042=The %s could not be deleted because \
+ another client is currently making conflicting configuration changes
+SEVERE_ERR_DSCFG_ERROR_GET_CHILD_DDE_1043=The %s could not be retrieved \
+ because its type could not be determined. This is probably due to the %s \
+ having an invalid LDAP entry. Check that the %s object classes are correct
+SEVERE_ERR_DSCFG_ERROR_GET_CHILD_MODE_1044=The %s could not be retrieved \
+ because of the reasons listed below:
+SEVERE_ERR_DSCFG_ERROR_GET_CHILD_MONFE_1045=The %s does not exist
+SEVERE_ERR_DSCFG_ERROR_GET_CHILD_AUTHZ_1046=The %s could not be accessed \
+ because you do not have the correct authorization
+SEVERE_ERR_DSCFG_ERROR_GET_CHILD_CE_1047=The %s could not be accessed due to \
+ a communications problem: %s
+SEVERE_ERR_DSCFG_ERROR_GET_CHILD_CME_1048=The %s could not be accessed \
+ because another client is currently making conflicting configuration changes
+SEVERE_ERR_DSCFG_ERROR_MODIFY_MONFE_1049=The %s could not be modified because \
+ it does not exist
+SEVERE_ERR_DSCFG_ERROR_MODIFY_AUTHZ_1050=The %s could not be modified because \
+ you do not have the correct authorization
+SEVERE_ERR_DSCFG_ERROR_MODIFY_CE_1051=The %s could not be modified due to a \
+ communications problem: %s
+SEVERE_ERR_DSCFG_ERROR_MODIFY_CME_1052=The %s could not be modified because \
+ another client is currently making conflicting configuration changes
+SEVERE_ERR_DSCFG_ERROR_MODIFY_ORE_1053=The server prevented the %s from being \
+ modified because of the following reason: %s
+SEVERE_ERR_DSCFG_ERROR_LIST_DDE_1054=The %s could not be retrieved because \
+ its type could not be determined. This is probably due to the %s having an \
+ invalid LDAP entry. Check that the %s object classes are correct
+SEVERE_ERR_DSCFG_ERROR_LIST_MODE_1055=The %s could not be retrieved because \
+ of the reasons listed below:
+SEVERE_ERR_DSCFG_ERROR_LIST_MONFE_1056=The %s does not exist
+SEVERE_ERR_DSCFG_ERROR_LIST_AUTHZ_1057=The %s could not be listed because you \
+ do not have the correct authorization
+SEVERE_ERR_DSCFG_ERROR_LIST_CE_1058=The %s could not be listed due to a \
+ communications problem: %s
+SEVERE_ERR_DSCFG_ERROR_LIST_CME_1059=The %s could not be listed because \
+ another client is currently making conflicting configuration changes
+SEVERE_ERR_DSCFG_ERROR_PROPERTY_UNKNOWN_ERROR_1060=The value(s) of the %s \
+ property "%s" could not be determined due to an unknown error: %s
+SEVERE_ERR_DSCFG_ERROR_PROPERTY_DEFAULT_BEHAVIOR_1061=The default value(s) of \
+ the %s property "%s" could not be determined due to the following reason: %s
+SEVERE_ERR_DSCFG_ERROR_PROPERTY_INHERITED_DEFAULT_BEHAVIOR_1062=The inherited \
+ default value(s) of the %s property "%s" could not be determined
+SEVERE_ERR_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_VALUE_1063=The property \
+ argument "%s" does not contain a name/value separator. The argument should \
+ have the following syntax: property:value
+SEVERE_ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_VALUE_1064=The property argument \
+ "%s" does not contain a property name. The argument should have the following \
+ syntax: property:value
+SEVERE_ERR_DSCFG_ERROR_NO_VALUE_IN_PROPERTY_VALUE_1065=The property argument \
+ "%s" does not contain a property value. The argument should have the \
+ following syntax: property:value
+SEVERE_ERR_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED_1066=The sub-type "%s" is not a \
+ recognized type of %s. It should be one of: %s
+SEVERE_ERR_DSCFG_ERROR_TYPE_UNRECOGNIZED_1067="%s" is not a recognized \
+ component type
+SEVERE_ERR_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_MOD_1068=The property \
+ modification "%s" does not contain a name/value separator. The argument \
+ should have the following syntax: property[+|-]:value
+SEVERE_ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD_1069=The property modification \
+ "%s" does not contain a property name. The argument should have the following \
+ syntax: property[+|-]:value
+SEVERE_ERR_DSCFG_ERROR_NO_VALUE_IN_PROPERTY_MOD_1070=The property \
+ modification "%s" does not contain a property value. The argument should have \
+ the following syntax: property[+|-]:value
+SEVERE_ERR_DSCFG_ERROR_INCOMPATIBLE_PROPERTY_MOD_1071=The property \
+ modification "%s" is incompatible with a previous modification to the same \
+ property
+SEVERE_ERR_DSCFG_ERROR_WRONG_MANAGED_OBJECT_TYPE_1072=The %s could not be \
+ retrieved because it was the wrong type of managed object: %s
+INFO_DSCFG_DESCRIPTION_TYPE_DEFAULT_1073=The type of %s which should be \
+ created (Default: %s). The value for TYPE can be one of: %s
+INFO_DSCFG_DESCRIPTION_RECORD_1074=Modifies the display output to show one \
+ property value per line
+INFO_DESCRIPTION_QUIET_1075=Use quiet mode
+INFO_DESCRIPTION_SCRIPT_FRIENDLY_1076=Use script-friendly mode
+INFO_DESCRIPTION_INTERACTIVE_1077=Use interactive mode
+INFO_DSCFG_DESCRIPTION_UNIT_TIME_1078=Display time data using the specified \
+ unit. The value for UNIT can be one of ms, s, m, h, d, or w (milliseconds, \
+ seconds, minutes, hours, days, or weeks)
+INFO_DSCFG_DESCRIPTION_UNIT_SIZE_1079=Display size data using the specified \
+ unit. The value for UNIT can be one of b, kb, mb, gb, or tb (bytes, \
+ kilobytes, megabytes, gigabytes, or terabytes)
+INFO_DSCFG_ERROR_TIME_UNIT_UNRECOGNIZED_1080=The time unit "%s" is invalid. \
+ The valid time units are ms, s, m, h, d, or w (milliseconds, seconds, \
+ minutes, hours, days, or weeks)
+INFO_DSCFG_ERROR_SIZE_UNIT_UNRECOGNIZED_1081=The size unit "%s" is invalid. \
+ The valid size units are b, kb, mb, gb, or tb (bytes, kilobytes, megabytes, \
+ gigabytes, or terabytes)
+INFO_DSCFG_HEADING_COMPONENT_TYPE_1082=Type
+INFO_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_1083=Display subcommands relating to \
+ %s
+INFO_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_ALL_1084=Display all subcommands
+INFO_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_SUMMARY_1085=Display summary usage \
+ information
+INFO_DSCFG_DESCRIPTION_NAME_1086=The name of the %s
+INFO_DSCFG_DESCRIPTION_PROP_1087=The name of a property to be displayed
+INFO_DSCFG_DESCRIPTION_PROP_VAL_1088=Assigns a value to a property where PROP \
+ is the name of the property and VAL is the single value to be assigned. \
+ Specify the same property multiple times in order to assign more than one \
+ value to it
+INFO_DSCFG_DESCRIPTION_ADD_PROP_VAL_1089=Adds a single value to a property \
+ where PROP is the name of the property and VAL is the single value to be \
+ added
+INFO_DSCFG_DESCRIPTION_REMOVE_PROP_VAL_1090=Removes a single value from a \
+ property where PROP is the name of the property and VAL is the single value \
+ to be removed
+INFO_DSCFG_DESCRIPTION_RESET_PROP_1091=Resets a property back to its default \
+ values where PROP is the name of the property to be reset
+INFO_DSCFG_DESCRIPTION_HELP_TYPE_1092=The type of components whose properties \
+ should be described. The value for TYPE must be one of the component types \
+ associated with the CATEGORY specified using the "--category" option
+SEVERE_ERR_DSCFG_ERROR_BIND_PASSWORD_NONINTERACTIVE_1093=The LDAP bind \
+ password was not specified and cannot be read interactively
+INFO_PWPSTATE_TOOL_DESCRIPTION_1094=This utility may be used to retrieve and \
+ manipulate the values of password policy state variables
+INFO_PWPSTATE_DESCRIPTION_HOST_1095=Directory server hostname or IP address
+INFO_PWPSTATE_DESCRIPTION_PORT_1096=Directory server port number
+INFO_PWPSTATE_DESCRIPTION_USESSL_1097=Use SSL for secure communication with \
+ the server
+INFO_PWPSTATE_DESCRIPTION_USESTARTTLS_1098=Use StartTLS to secure \
+ communication with the server
+INFO_PWPSTATE_DESCRIPTION_BINDDN_1099=The DN to use to bind to the server
+INFO_PWPSTATE_DESCRIPTION_BINDPW_1100=The password to use to bind to the \
+ server
+INFO_PWPSTATE_DESCRIPTION_BINDPWFILE_1101=The path to the file containing the \
+ bind password
+INFO_PWPSTATE_DESCRIPTION_TARGETDN_1102=The DN of the user entry for which to \
+ get and set password policy state information
+INFO_PWPSTATE_DESCRIPTION_SASLOPTIONS_1103=SASL bind options
+INFO_PWPSTATE_DESCRIPTION_TRUST_ALL_1104=Trust all server SSL certificates
+INFO_PWPSTATE_DESCRIPTION_KSFILE_1105=Certificate keystore path
+INFO_PWPSTATE_DESCRIPTION_KSPW_1106=Certificate keystore PIN
+INFO_PWPSTATE_DESCRIPTION_KSPWFILE_1107=Certificate keystore PIN file
+INFO_PWPSTATE_DESCRIPTION_TSFILE_1108=Certificate trust store path
+INFO_PWPSTATE_DESCRIPTION_TSPW_1109=Certificate trust store PIN
+INFO_PWPSTATE_DESCRIPTION_TSPWFILE_1110=Certificate trust store PIN file
+INFO_PWPSTATE_DESCRIPTION_SHOWUSAGE_1111=Display this usage information
+INFO_DESCRIPTION_PWPSTATE_GET_ALL_1112=Display all password policy state \
+ information for the user
+INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_POLICY_DN_1113=Display the DN of the \
+ password policy for the user
+INFO_DESCRIPTION_PWPSTATE_GET_ACCOUNT_DISABLED_STATE_1114=Display information \
+ about whether the user account has been administratively disabled
+INFO_DESCRIPTION_PWPSTATE_SET_ACCOUNT_DISABLED_STATE_1115=Specify whether the \
+ user account has been administratively disabled
+INFO_DESCRIPTION_OPERATION_BOOLEAN_VALUE_1116='true' to indicate that the \
+ account is disabled, or 'false' to indicate that it is not disabled
+INFO_DESCRIPTION_PWPSTATE_CLEAR_ACCOUNT_DISABLED_STATE_1117=Clear account \
+ disabled state information from the user account
+INFO_DESCRIPTION_PWPSTATE_GET_ACCOUNT_EXPIRATION_TIME_1118=Display when the \
+ user account will expire
+INFO_DESCRIPTION_PWPSTATE_SET_ACCOUNT_EXPIRATION_TIME_1119=Specify when the \
+ user account will expire
+INFO_DESCRIPTION_OPERATION_TIME_VALUE_1120=A timestamp value using the \
+ generalized time syntax
+INFO_DESCRIPTION_PWPSTATE_CLEAR_ACCOUNT_EXPIRATION_TIME_1121=Clear account \
+ expiration time information from the user account
+INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_ACCOUNT_EXPIRATION_1122=Display \
+ the length of time in seconds until the user account expires
+INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_CHANGED_TIME_1123=Display the time \
+ that the user's password was last changed
+INFO_DESCRIPTION_PWPSTATE_SET_PASSWORD_CHANGED_TIME_1124=Specify the time \
+ that the user's password was last changed.  This should be used only for \
+ testing purposes
+INFO_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_CHANGED_TIME_1125=Clear information \
+ about the time that the user's password was last changed.  This should be \
+ used only for testing purposes
+INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_EXPIRATION_WARNED_TIME_1126=Display \
+ the time that the user first received an expiration warning notice
+INFO_DESCRIPTION_PWPSTATE_SET_PASSWORD_EXPIRATION_WARNED_TIME_1127=Specify \
+ the time that the user first received an expiration warning notice.  This \
+ should be used only for testing purposes
+INFO_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_EXPIRATION_WARNED_TIME_1128=Clear \
+ information about the time that the user first received an expiration warning \
+ notice.  This should be used only for testing purposes
+INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_PASSWORD_EXP_1129=Display length \
+ of time in seconds until the user's password expires
+INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_PASSWORD_EXP_WARNING_1130=Display \
+ the length of time in seconds until the user should start receiving password \
+ expiration warning notices
+INFO_DESCRIPTION_PWPSTATE_GET_AUTH_FAILURE_TIMES_1131=Display the \
+ authentication failure times for the user
+INFO_DESCRIPTION_PWPSTATE_ADD_AUTH_FAILURE_TIME_1132=Add an authentication \
+ failure time to the user account.  This should be used only for testing \
+ purposes
+INFO_DESCRIPTION_PWPSTATE_SET_AUTH_FAILURE_TIMES_1133=Specify the \
+ authentication failure times for the user.  This should be used only for \
+ testing purposes
+INFO_DESCRIPTION_OPERATION_TIME_VALUES_1134=A timestamp value using the \
+ generalized time syntax.  Multiple timestamp values may be given by providing \
+ this argument multiple times
+INFO_DESCRIPTION_PWPSTATE_CLEAR_AUTH_FAILURE_TIMES_1135=Clear authentication \
+ failure time information from the user's account.  This should be used only \
+ for testing purposes
+INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_AUTH_FAILURE_UNLOCK_1136=Display \
+ the length of time in seconds until the authentication failure lockout \
+ expires
+INFO_DESCRIPTION_PWPSTATE_GET_REMAINING_AUTH_FAILURE_COUNT_1137=Display the \
+ number of remaining authentication failures until the user's account is \
+ locked
+INFO_DESCRIPTION_PWPSTATE_GET_LAST_LOGIN_TIME_1138=Display the time that the \
+ user last authenticated to the server
+INFO_DESCRIPTION_PWPSTATE_SET_LAST_LOGIN_TIME_1139=Specify the time that the \
+ user last authenticated to the server.  This should be used only for testing \
+ purposes
+INFO_DESCRIPTION_PWPSTATE_CLEAR_LAST_LOGIN_TIME_1140=Clear the time that the \
+ user last authenticated to the server.  This should be used only for testing \
+ purposes
+INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_IDLE_LOCKOUT_1141=Display the \
+ length of time in seconds until user's account is locked because it has \
+ remained idle for too long
+INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_RESET_STATE_1142=Display information \
+ about whether the user will be required to change his or her password on the \
+ next successful authentication
+INFO_DESCRIPTION_PWPSTATE_SET_PASSWORD_RESET_STATE_1143=Specify whether the \
+ user will be required to change his or her password on the next successful \
+ authentication.  This should be used only for testing purposes
+INFO_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_RESET_STATE_1144=Clear information \
+ about whether the user will be required to change his or her password on the \
+ next successful authentication.  This should be used only for testing \
+ purposes
+INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_RESET_LOCKOUT_1145=Display the \
+ length of time in seconds until user's account is locked because the user \
+ failed to change the password in a timely manner after an administrative \
+ reset
+INFO_DESCRIPTION_PWPSTATE_GET_GRACE_LOGIN_USE_TIMES_1146=Display the grace \
+ login use times for the user
+INFO_DESCRIPTION_PWPSTATE_ADD_GRACE_LOGIN_USE_TIME_1147=Add a grace login use \
+ time to the user account.  This should be used only for testing purposes
+INFO_DESCRIPTION_PWPSTATE_SET_GRACE_LOGIN_USE_TIMES_1148=Specify the grace \
+ login use times for the user.  This should be used only for testing purposes
+INFO_DESCRIPTION_PWPSTATE_CLEAR_GRACE_LOGIN_USE_TIMES_1149=Clear the set of \
+ grace login use times for the user.  This should be used only for testing \
+ purposes
+INFO_DESCRIPTION_PWPSTATE_GET_REMAINING_GRACE_LOGIN_COUNT_1150=Display the \
+ number of grace logins remaining for the user
+INFO_DESCRIPTION_PWPSTATE_GET_PW_CHANGED_BY_REQUIRED_TIME_1151=Display the \
+ required password change time with which the user last complied
+INFO_DESCRIPTION_PWPSTATE_SET_PW_CHANGED_BY_REQUIRED_TIME_1152=Specify the \
+ required password change time with which the user last complied.  This should \
+ be used only for testing purposes
+INFO_DESCRIPTION_PWPSTATE_CLEAR_PW_CHANGED_BY_REQUIRED_TIME_1153=Clear \
+ information about the required password change time with which the user last \
+ complied.  This should be used only for testing purposes
+INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_REQUIRED_CHANGE_TIME_1154=Display \
+ the length of time in seconds that the user has remaining to change his or \
+ her password before the account becomes locked due to the required change \
+ time
+SEVERE_ERR_PWPSTATE_NO_SUBCOMMAND_1155=No subcommand was provided to indicate \
+ which password policy state operation should be performed
+SEVERE_ERR_PWPSTATE_INVALID_BOOLEAN_VALUE_1156=The provided value '%s' was \
+ invalid for the requested operation.  A Boolean value of either 'true' or \
+ 'false' was expected
+SEVERE_ERR_PWPSTATE_NO_BOOLEAN_VALUE_1157=No value was specified, but the \
+ requested operation requires a Boolean value of either 'true' or 'false'
+SEVERE_ERR_PWPSTATE_INVALID_SUBCOMMAND_1158=Unrecognized subcommand '%s'
+SEVERE_ERR_PWPSTATE_CANNOT_SEND_REQUEST_EXTOP_1159=An error occurred while \
+ attempting to send the request to the server:  %s
+SEVERE_ERR_PWPSTATE_CONNECTION_CLOSED_READING_RESPONSE_1160=The Directory \
+ Server closed the connection before the response could be read
+SEVERE_ERR_PWPSTATE_REQUEST_FAILED_1161=The server was unable to process the \
+ request:  result code %d (%s), error message '%s'
+SEVERE_ERR_PWPSTATE_CANNOT_DECODE_RESPONSE_MESSAGE_1162=The server was unable \
+ to decode the response message from the server:  %s
+SEVERE_ERR_PWPSTATE_CANNOT_DECODE_RESPONSE_OP_1163=Unable to decode \
+ information about an operation contained in the response:  %s
+INFO_PWPSTATE_LABEL_PASSWORD_POLICY_DN_1164=Password Policy DN
+INFO_PWPSTATE_LABEL_ACCOUNT_DISABLED_STATE_1165=Account Is Disabled
+INFO_PWPSTATE_LABEL_ACCOUNT_EXPIRATION_TIME_1166=Account Expiration Time
+INFO_PWPSTATE_LABEL_SECONDS_UNTIL_ACCOUNT_EXPIRATION_1167=Seconds Until \
+ Account Expiration
+INFO_PWPSTATE_LABEL_PASSWORD_CHANGED_TIME_1168=Password Changed Time
+INFO_PWPSTATE_LABEL_PASSWORD_EXPIRATION_WARNED_TIME_1169=Password Expiration \
+ Warned Time
+INFO_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_EXPIRATION_1170=Seconds Until \
+ Password Expiration
+INFO_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_EXPIRATION_WARNING_1171=Seconds \
+ Until Password Expiration Warning
+INFO_PWPSTATE_LABEL_AUTH_FAILURE_TIMES_1172=Authentication Failure Times
+INFO_PWPSTATE_LABEL_SECONDS_UNTIL_AUTH_FAILURE_UNLOCK_1173=Seconds Until \
+ Authentication Failure Unlock
+INFO_PWPSTATE_LABEL_REMAINING_AUTH_FAILURE_COUNT_1174=Remaining \
+ Authentication Failure Count
+INFO_PWPSTATE_LABEL_LAST_LOGIN_TIME_1175=Last Login Time
+INFO_PWPSTATE_LABEL_SECONDS_UNTIL_IDLE_LOCKOUT_1176=Seconds Until Idle \
+ Account Lockout
+INFO_PWPSTATE_LABEL_PASSWORD_RESET_STATE_1177=Password Is Reset
+INFO_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_RESET_LOCKOUT_1178=Seconds Until \
+ Password Reset Lockout
+INFO_PWPSTATE_LABEL_GRACE_LOGIN_USE_TIMES_1179=Grace Login Use Times
+INFO_PWPSTATE_LABEL_REMAINING_GRACE_LOGIN_COUNT_1180=Remaining Grace Login \
+ Count
+INFO_PWPSTATE_LABEL_PASSWORD_CHANGED_BY_REQUIRED_TIME_1181=Password Changed \
+ by Required Time
+INFO_PWPSTATE_LABEL_SECONDS_UNTIL_REQUIRED_CHANGE_TIME_1182=Seconds Until \
+ Required Change Time
+SEVERE_ERR_PWPSTATE_INVALID_RESPONSE_OP_TYPE_1183=Unrecognized or invalid \
+ operation type:  %s
+SEVERE_ERR_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS_1184=ERROR:  You may not \
+ provide both the %s and the %s arguments
+SEVERE_ERR_PWPSTATE_CANNOT_INITIALIZE_SSL_1185=ERROR:  Unable to perform SSL \
+ initialization:  %s
+SEVERE_ERR_PWPSTATE_CANNOT_PARSE_SASL_OPTION_1186=ERROR:  The provided SASL \
+ option string "%s" could not be parsed in the form "name=value"
+SEVERE_ERR_PWPSTATE_NO_SASL_MECHANISM_1187=ERROR:  One or more SASL options \
+ were provided, but none of them were the "mech" option to specify which SASL \
+ mechanism should be used
+SEVERE_ERR_PWPSTATE_CANNOT_DETERMINE_PORT_1188=ERROR:  Cannot parse the value \
+ of the %s argument as an integer value between 1 and 65535:  %s
+SEVERE_ERR_PWPSTATE_CANNOT_CONNECT_1189=ERROR:  Cannot establish a connection \
+ to the Directory Server:  %s
+INFO_UPGRADE_DESCRIPTION_FILE_1190=Specifies an existing OpenDS package \
+ (.zip) file to which the current build will be upgraded using the command \
+ line version of this tool
+INFO_UPGRADE_DESCRIPTION_INTERACTIVE_1191=Prompt for any required information \
+ rather than fail
+INFO_UPGRADE_DESCRIPTION_SILENT_1192=Perform a silent upgrade
+INFO_UNINSTALLDS_DESCRIPTION_CLI_1193=Specifies to use the command line \
+ install.  If not specified the graphical interface will be launched.  The \
+ silent install option will only be taken into account if this option is \
+ specified
+INFO_UNINSTALLDS_DESCRIPTION_SILENT_1194=Perform a silent uninstall
+INFO_LDIFIMPORT_DESCRIPTION_COUNT_REJECTS_1195=Count the number of entries \
+ rejected by the server and return that value as the exit code (values > 255 \
+ will be reduced to 255 due to exit code restrictions)
+INFO_DSCFG_DESCRIPTION_FORCE_1196=Ignore non-existent %s
+INFO_LDIFIMPORT_DESCRIPTION_SKIP_FILE_1197=Write skipped entries to the \
+ specified file
+SEVERE_ERR_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE_1198=An error occurred while \
+ trying to open the skip file %s for writing:  %s
+INFO_VERIFYINDEX_DESCRIPTION_COUNT_ERRORS_1199=Count the number of errors \
+ found during the verification and return that value as the exit code (values \
+ > 255 will be reduced to 255 due to exit code restrictions)
+SEVERE_ERR_DSCFG_ERROR_UNABLE_TO_RESET_MANDATORY_PROPERTY_1200=The %s \
+ property "%s" is mandatory cannot be reset. Use the "%s" option to specify a \
+ new value
+INFO_PWPSTATE_LABEL_PASSWORD_HISTORY_1201=Password History
+INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_HISTORY_1202=Display password history \
+ state values for the user
+INFO_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_HISTORY_1203=Clear password history \
+ state values for the user.  This should be used only for testing purposes
+SEVERE_ERR_DSCFG_ERROR_ILLEGAL_NAME_SYNTAX_1204=The name "%s" is not a valid \
+ name for the %s which has the following syntax: %s
+SEVERE_ERR_DSCFG_ERROR_ILLEGAL_NAME_EMPTY_1205=Empty names are not permitted \
+ for %s
+SEVERE_ERR_DSCFG_ERROR_ILLEGAL_NAME_BLANK_1206=Blank names are not permitted \
+ for %s
+SEVERE_ERR_DSCFG_ERROR_ILLEGAL_NAME_UNKNOWN_1207=The name "%s" is not a valid \
+ name for the %s
+INFO_DSCFG_DESCRIPTION_NAME_CREATE_1208=The name of the new %s
+INFO_DSCFG_DESCRIPTION_NAME_CREATE_EXT_1209=The name of the new %s which will \
+ also be used as the value of the "%s" property: %s
+SEVERE_ERR_DSCFG_ERROR_UNABLE_TO_SET_NAMING_PROPERTY_1210=The property "%s" \
+ cannot be set as it is defined implicitly by the name of the %s
+SEVERE_ERR_CONFIGDS_PORT_ALREADY_SPECIFIED_1211=ERROR:  You have specified \
+ the value %s for different ports
+SEVERE_ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED_1212=The property "%s" is not a \
+ recognized property
+SEVERE_ERR_CLI_ERROR_MISSING_PROPERTY_1213=The mandatory property "%s" is \
+ missing
+SEVERE_ERR_CLI_ERROR_INVALID_PROPERTY_VALUE_1214=The value "%s" specified fo \
+ the property "%s" is invalid
+INFO_CLI_HEADING_PROPERTY_DEFAULT_VALUE_1215=Default value
+INFO_DSCFG_DESCRIPTION_ADVANCED_GET_1216=Modifies the display output to show \
+ the advanced properties of the %s
+INFO_DSCFG_DESCRIPTION_ADVANCED_SET_1217=Allows the configuration of advanced \
+ properties during interactive mode
+INFO_DSCFG_DESCRIPTION_ADVANCED_HELP_1218=Modifies the display output to show \
+ the advanced properties of components
+INFO_REVERT_DESCRIPTION_DIRECTORY_1219=Directory where reversion files are \
+ stored.  This should be one of the child directories of the 'history' \
+ directory that is created when the upgrade tool is run
+INFO_REVERT_DESCRIPTION_RECENT_1220=Indicates that the installation will be \
+ reverted to the state before the most recent upgrade
+INFO_REVERT_DESCRIPTION_INTERACTIVE_1221=Prompt for any required information \
+ rather than fail
+INFO_REVERT_DESCRIPTION_SILENT_1222=Perform a silent reversion
+SEVERE_ERR_DSCFG_ERROR_MISSING_NON_INTERACTIVE_ARG_1223=The argument "--%s" \
+ must be specified when this application is used non-interactively
+SEVERE_ERR_DSCFG_ERROR_CANNOT_READ_CONSOLE_INPUT_1224=The response could not \
+ be read from the console due to the following error: %s
+INFO_DSCFG_CREATE_TYPE_PROMPT_1225=Select the type of %s that you want to \
+ create:
+INFO_DSCFG_CREATE_NAME_PROMPT_1226=Enter a name for the %s that you want to \
+ create:
+SEVERE_ERR_DSCFG_ERROR_CREATE_NAME_ALREADY_EXISTS_1227=There is already \
+ another %s with the name "%s"
+INFO_DSCFG_DESCRIPTION_CREATE_HELP_HEADING_TYPE_1228=Type
+INFO_DSCFG_DESCRIPTION_CREATE_HELP_HEADING_DESCR_1229=Description
+SEVERE_ERR_DSCFG_ERROR_FINDER_NO_CHILDREN_1230=Unable to continue since there \
+ are no %s currently configured on the server
+SEVERE_ERR_DSCFG_ERROR_FINDER_SINGLE_CHILD_REJECTED_1231=Unable to continue \
+ because the only available %s was not selected
+INFO_DSCFG_FINDER_PROMPT_SINGLE_1232=There is only one %s: "%s". Are you sure \
+ that this is the correct one?
+INFO_DSCFG_FINDER_PROMPT_MANY_1233=Select the %s from the following list:
+INFO_DSCFG_GENERAL_CONFIRM_NO_1234=no
+INFO_DSCFG_GENERAL_CONFIRM_YES_1235=yes
+SEVERE_ERR_DSCFG_ERROR_GENERAL_CONFIRM_1236=Invalid response. Please enter \
+ "%s" or "%s"
+INFO_DSCFG_GENERAL_CHOICE_PROMPT_NOHELP_1237=Enter choice [1 - %d]:
+INFO_DSCFG_GENERAL_CHOICE_PROMPT_HELP_1238=Enter choice [1 - %d,  ? - help]:
+SEVERE_ERR_DSCFG_ERROR_GENERAL_CHOICE_1239=Invalid response. Please enter a \
+ value between 1 and %d
+INFO_DSCFG_VALUE_READER_MENU_RESET_1240=reset the value back to its default
+INFO_DSCFG_VALUE_READER_MENU_SET_1241=modify the value
+INFO_DSCFG_VALUE_READER_MENU_ADD_1242=add a value
+INFO_DSCFG_VALUE_READER_MENU_REMOVE_1243=remove a value
+INFO_DSCFG_VALUE_READER_MENU_CONTINUE_1244=continue
+INFO_DSCFG_VALUE_READER_PROMPT_REMOVE_1245=Select the value to be removed \
+ from the "%s" property:
+INFO_DSCFG_VALUE_READER_PROMPT_SELECT_VALUE_1246=Select a value for the "%s" \
+ property:
+INFO_DSCFG_VALUE_READER_PROMPT_ENTER_VALUE_1247=Enter a value for the "%s" \
+ property:
+INFO_DSCFG_VALUE_READER_MENU_TITLE_1248=Select a property to be edited, or \
+ enter "%d" to continue:
+INFO_DSCFG_VALUE_READER_PROMPT_MANDATORY_1249=The property "%s" is mandatory \
+ and must have a value specified
+INFO_DSCFG_VALUE_READER_PROMPT_MODIFY_MENU_1250=Do you want to modify the \
+ "%s" property?
+INFO_LDIFIMPORT_DESCRIPTION_CLEAR_BACKEND_1251=Remove all entries for all \
+ base DNs in the backend before importing
+SEVERE_ERR_LDIFIMPORT_MISSING_BACKEND_ARGUMENT_1252=Neither the %s or the %s \
+ argument was provided.  One of these arguments must be given to specify the \
+ backend for the LDIF data to be imported to
+SEVERE_ERR_LDIFIMPORT_MISSING_CLEAR_BACKEND_1253=Importing to a backend \
+ without the append argument will remove all entries for all base DNs (%s) in \
+ the backend. The %s argument must be given to continue with import
+INFO_DSCFG_HELP_FIELD_ENUM_1254=one of the following values:
+INFO_DSCFG_HELP_FIELD_UNDEFINED_1255=undefined
+INFO_DSCFG_HELP_FIELD_INHERITED_ABS_1256=inherits from the property "%s" in \
+ the %s
+INFO_DSCFG_HELP_FIELD_INHERITED_PARENT_1257=inherits from the property "%s" \
+ in the parent %s
+INFO_DSCFG_HELP_FIELD_INHERITED_THIS_1258=inherits from the property "%s" in \
+ this %s
+INFO_DSCFG_HELP_FIELD_SERVER_RESTART_1259=The server must be restarted in \
+ order for changes to this property to take effect
+INFO_DSCFG_HELP_FIELD_COMPONENT_RESTART_1260=The %s must be restarted in \
+ order for changes to this property to take effect
+INFO_DSCFG_HELP_FIELD_READ_ONLY_1261=read-only - this property can only be \
+ specified when the %s is created
+INFO_DSCFG_HELP_FIELD_MONITORING_1262=monitoring - this property is \
+ automatically generated by the server
+INFO_DSCFG_HELP_HEADING_PROPERTY_1263=Property: %s
+INFO_DSCFG_HELP_HEADING_COMPONENT_1264=Component name: %s
+INFO_DSCFG_HELP_HEADING_DEFAULT_1265=Default behavior
+INFO_DSCFG_HELP_HEADING_MANDATORY_1266=Mandatory
+INFO_DSCFG_HELP_HEADING_ADVANCED_1267=Advanced
+INFO_DSCFG_HELP_HEADING_MULTI_VALUED_1268=Multi-valued
+INFO_DSCFG_HELP_HEADING_READ_ONLY_1269=Read-only
+INFO_DSCFG_HELP_HEADING_SYNTAX_1270=Syntax
+INFO_DSCFG_HELP_DESCRIPTION_OPTION_1271=Option Types:
+INFO_DSCFG_HELP_DESCRIPTION_READ_1272=Property value(s) are readable
+INFO_DSCFG_HELP_DESCRIPTION_WRITE_1273=Property value(s) are writable
+INFO_DSCFG_HELP_DESCRIPTION_MANDATORY_1274=The property is mandatory
+INFO_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED_1275=The property is single-valued
+INFO_DSCFG_HELP_DESCRIPTION_ADMIN_ACTION_1276=Administrative action is \
+ required for changes to take effect
+INFO_DSCFG_CONFIRM_CREATE_1277=Are you sure that you want to create the %s?
+INFO_DSCFG_CONFIRM_DELETE_1278=Are you sure that you want to delete the %s?
+INFO_DSCFG_CONFIRM_MODIFY_1279=Are you sure that you want to modify the %s?
+INFO_DSCFG_CONFIRM_CREATE_SUCCESS_1280=The %s was created successfully
+INFO_DSCFG_CONFIRM_DELETE_SUCCESS_1281=The %s was deleted successfully
+INFO_DSCFG_CONFIRM_MODIFY_SUCCESS_1282=The %s was modified successfully
+INFO_DSCFG_CONFIRM_CREATE_FAIL_1283=The %s was not created
+INFO_DSCFG_CONFIRM_DELETE_FAIL_1284=The %s was not deleted
+INFO_DSCFG_CONFIRM_MODIFY_FAIL_1285=The %s was not modified
+INFO_DSCFG_DESCRIPTION_HELP_CATEGORY_1286=The category of components whose \
+ properties should be described
+SEVERE_ERR_DSCFG_ERROR_CATEGORY_UNRECOGNIZED_1287="%s" is not a recognized \
+ component category
+SEVERE_ERR_DSCFG_ERROR_CATEGORY_TYPE_UNRECOGNIZED_1288="%s" is not a \
+ recognized component type in category "%s"
+SEVERE_ERR_DSCFG_ERROR_PROPERTY_UNRECOGNIZED_NO_DEFN_1289=The property "%s" \
+ is not a recognized property
+INFO_DSCFG_DESCRIPTION_HELP_INHERITED_1290=Modifies the display output to \
+ show the inherited properties of components
+MILD_ERR_MAKELDIF_TAG_LIST_NO_ARGUMENTS_1291=The list tag on line %d of the \
+ template file does not contain any arguments to specify the list values.  At \
+ least one list value must be provided
+MILD_WARN_MAKELDIF_TAG_LIST_INVALID_WEIGHT_1292=The list tag on line %d of \
+ the template file contains item '%s' that includes a semicolon but that \
+ semicolon is not followed by an integer.  The semicolon will be assumed to be \
+ part of the value and not a delimiter to separate the value from its relative \
+ weight
diff --git a/opendj-sdk/opends/src/messages/messages/user_defined.properties b/opendj-sdk/opends/src/messages/messages/user_defined.properties
new file mode 100644
index 0000000..501a233
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/user_defined.properties
@@ -0,0 +1,54 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=USER_DEFINED
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
diff --git a/opendj-sdk/opends/src/messages/messages/util.properties b/opendj-sdk/opends/src/messages/messages/util.properties
new file mode 100644
index 0000000..4d27c60
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/util.properties
@@ -0,0 +1,411 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+
+#
+# Global directives
+#
+global.category=UTIL
+
+#
+# Format string definitions
+#
+MILD_ERR_BASE64_DECODE_INVALID_LENGTH_1=The value %s cannot be base64-decoded \
+ because it does not have a length that is a multiple of four bytes
+MILD_ERR_BASE64_DECODE_INVALID_CHARACTER_2=The value %s cannot be \
+ base64-decoded because it contains an illegal character %s that is not \
+ allowed in base64-encoded values
+MILD_ERR_HEX_DECODE_INVALID_LENGTH_3=The value %s cannot be decoded as a \
+ hexadecimal string because it does not have a length that is a multiple of \
+ two bytes
+MILD_ERR_HEX_DECODE_INVALID_CHARACTER_4=The value %s cannot be decoded as a \
+ hexadecimal string because it contains an illegal character %s that is not a \
+ valid hexadecimal digit
+MILD_ERR_LDIF_INVALID_LEADING_SPACE_5=Unable to parse line %d ("%s") from the \
+ LDIF source because the line started with a space but there were no previous \
+ lines in the entry to which this line could be appended
+MILD_ERR_LDIF_NO_ATTR_NAME_6=Unable to parse LDIF entry starting at line %d \
+ because the line "%s" does not include an attribute name
+MILD_ERR_LDIF_NO_DN_7=Unable to parse LDIF entry starting at line %d because \
+ the first line does not contain a DN (the first line was "%s"
+MILD_ERR_LDIF_INVALID_DN_SEPARATOR_8=Unable to parse LDIF entry starting at \
+ line %d because line "%s" contained an invalid separator between the "dn" \
+ prefix and the actual distinguished name
+MILD_ERR_LDIF_INVALID_DN_9=Unable to parse LDIF entry starting at line %d \
+ because an error occurred while trying to parse the value of line "%s" as a \
+ distinguished name:  %s
+MILD_ERR_LDIF_INVALID_ATTR_SEPARATOR_10=Unable to parse LDIF entry %s \
+ starting at line %d because line "%s" contained an invalid separator between \
+ the attribute name and value
+MILD_ERR_LDIF_COULD_NOT_BASE64_DECODE_DN_11=Unable to parse LDIF entry \
+ starting at line %d because it was not possible to base64-decode the DN on \
+ line "%s":  %s
+MILD_ERR_LDIF_COULD_NOT_BASE64_DECODE_ATTR_12=Unable to parse LDIF entry %s \
+ starting at line %d because it was not possible to base64-decode the \
+ attribute on line "%s":  %s
+MILD_WARN_LDIF_DUPLICATE_OBJECTCLASS_13=Entry %s read from LDIF starting at \
+ line %d includes a duplicate objectclass value %s.  The second occurrence of \
+ that objectclass has been skipped
+MILD_WARN_LDIF_DUPLICATE_ATTR_14=Entry %s read from LDIF starting at line %d \
+ includes a duplicate attribute %s with value %s.  The second occurrence of \
+ that attribute value has been skipped
+MILD_ERR_LDIF_MULTIPLE_VALUES_FOR_SINGLE_VALUED_ATTR_15=Entry %s starting at \
+ line %d includes multiple values for single-valued attribute %s
+MILD_ERR_LDIF_INVALID_ATTR_SYNTAX_16=Unable to parse LDIF entry %s starting \
+ at line %d because it has an invalid value "%s" for attribute %s:  %s
+MILD_ERR_LDIF_SCHEMA_VIOLATION_17=Entry %s read from LDIF starting at line %d \
+ is not valid because it violates the server's schema configuration:  %s
+SEVERE_ERR_LDIF_FILE_EXISTS_18=The specified LDIF file %s already exists and \
+ the export configuration indicates that no attempt should be made to append \
+ to or replace the file
+MILD_ERR_LDIF_INVALID_URL_19=Unable to parse LDIF entry %s starting at line \
+ %d because the value of attribute %s was to be read from a URL but the URL \
+ was invalid:  %s
+MILD_ERR_LDIF_URL_IO_ERROR_20=Unable to parse LDIF entry %s starting at line \
+ %d because the value of attribute %s was to be read from URL %s but an error \
+ occurred while trying to read that content:  %s
+SEVERE_ERR_REJECT_FILE_EXISTS_21=The specified reject file %s already exists \
+ and the import configuration indicates that no attempt should be made to \
+ append to or replace the file
+SEVERE_ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT_22=An error occurred \
+ while attempting to determine whether LDIF entry "%s" starting at line %d \
+ should be imported as a result of the include and exclude filter \
+ configuration:  %s
+SEVERE_ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_EXPORT_23=An error occurred \
+ while attempting to determine whether LDIF entry "%s" should be exported as a \
+ result of the include and exclude filter configuration:  %s
+SEVERE_ERR_LDIF_INVALID_DELETE_ATTRIBUTES_24=Error in the LDIF change record \
+ entry. Invalid attributes specified for the delete operation
+SEVERE_ERR_LDIF_NO_MOD_DN_ATTRIBUTES_25=Error in the LDIF change record \
+ entry. No attributes specified for the mod DN operation
+SEVERE_ERR_LDIF_NO_DELETE_OLDRDN_ATTRIBUTE_26=Error in the LDIF change record \
+ entry. No delete old RDN attribute specified for the mod DN operation
+SEVERE_ERR_LDIF_INVALID_DELETE_OLDRDN_ATTRIBUTE_27=Error in the LDIF change \
+ record entry. Invalid value "%s" for the delete old RDN attribute specified \
+ for the mod DN operation
+SEVERE_ERR_LDIF_INVALID_CHANGERECORD_ATTRIBUTE_28=Error in the LDIF change \
+ record entry. Invalid attribute "%s" specified. Expecting attribute "%s"
+SEVERE_ERR_LDIF_INVALID_MODIFY_ATTRIBUTE_29=Error in the LDIF change record \
+ entry. Invalid attribute "%s" specified. Expecting one of the following \
+ attributes "%s"
+SEVERE_ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE_30=Error in the LDIF change \
+ record entry. Invalid value "%s" for the changetype specified. Expecting one \
+ of the following values "%s"
+SEVERE_ERR_LDIF_INVALID_MODIFY_ATTRIBUTE_VAL_31=Error in the LDIF change \
+ record entry. Invalid value for the "%s" attribute specified.
+SEVERE_ERR_SCHEMANAME_EMPTY_VALUE_32=The provided value could not be parsed \
+ to determine whether it contained a valid schema element name or OID because \
+ it was null or empty
+SEVERE_ERR_SCHEMANAME_ILLEGAL_CHAR_33=The provided value "%s" does not \
+ contain a valid schema element name or OID because it contains an illegal \
+ character %s at position %d
+SEVERE_ERR_SCHEMANAME_CONSECUTIVE_PERIODS_34=The provided value "%s" does not \
+ contain a valid schema element name or OID because the numeric OID contains \
+ two consecutive periods at position %d
+SEVERE_ERR_ARG_NO_IDENTIFIER_35=The %s argument does not have either a \
+ single-character or a long identifier that may be used to specify it.  At \
+ least one of these must be specified for each argument
+SEVERE_ERR_ARG_NO_VALUE_PLACEHOLDER_36=The %s argument is configured to take \
+ a value but no value placeholder has been defined for it
+SEVERE_ERR_ARG_NO_INT_VALUE_37=The %s argument does not have any value that \
+ may be retrieved as an integer
+SEVERE_ERR_ARG_CANNOT_DECODE_AS_INT_38=The provided value "%s" for the %s \
+ argument cannot be decoded as an integer
+SEVERE_ERR_ARG_INT_MULTIPLE_VALUES_39=The %s argument has multiple values and \
+ therefore cannot be decoded as a single integer value
+SEVERE_ERR_ARG_NO_BOOLEAN_VALUE_40=The %s argument does not have any value \
+ that may be retrieved as a Boolean
+SEVERE_ERR_ARG_CANNOT_DECODE_AS_BOOLEAN_41=The provided value "%s" for the %s \
+ argument cannot be decoded as a Boolean
+SEVERE_ERR_ARG_BOOLEAN_MULTIPLE_VALUES_42=The %s argument has multiple values \
+ and therefore cannot be decoded as a single Boolean value
+SEVERE_ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND_43=The %s argument \
+ configuration is invalid because the lower bound of %d is greater than the \
+ upper bound of %d
+SEVERE_ERR_INTARG_VALUE_BELOW_LOWER_BOUND_44=The provided %s value %d is \
+ unacceptable because it is below the lower bound of %d
+SEVERE_ERR_INTARG_VALUE_ABOVE_UPPER_BOUND_45=The provided %s value %d is \
+ unacceptable because it is above the upper bound of %d
+SEVERE_ERR_BOOLEANARG_NO_VALUE_ALLOWED_46=The provided %s value is \
+ unacceptable because Boolean arguments are never allowed to have values
+SEVERE_ERR_MCARG_VALUE_NOT_ALLOWED_47=The provided %s value %s is \
+ unacceptable because it is not included in the set of allowed values for that \
+ argument
+SEVERE_ERR_FILEARG_NO_SUCH_FILE_48=The file %s specified for argument %s does \
+ not exist
+SEVERE_ERR_FILEARG_CANNOT_VERIFY_FILE_EXISTENCE_49=An error occurred while \
+ trying to verify the existence of file %s specified for argument %s:  %s
+SEVERE_ERR_FILEARG_CANNOT_OPEN_FILE_50=An error occurred while trying to open \
+ file %s specified for argument %s for reading:  %s
+SEVERE_ERR_FILEARG_CANNOT_READ_FILE_51=An error occurred while trying to read \
+ from file %s specified for argument %s:  %s
+SEVERE_ERR_FILEARG_EMPTY_FILE_52=The file %s specified for argument %s exists \
+ but is empty
+SEVERE_ERR_ARGPARSER_DUPLICATE_SHORT_ID_53=Cannot add argument %s to the \
+ argument list because its short identifier -%s conflicts with the %s argument \
+ that has already been defined
+SEVERE_ERR_ARGPARSER_DUPLICATE_LONG_ID_54=Cannot add argument %s to the \
+ argument list because its long identifier --%s conflicts with the %s argument \
+ that has already been defined
+SEVERE_ERR_ARGPARSER_CANNOT_READ_PROPERTIES_FILE_55=An error occurred while \
+ attempting to read the contents of the argument properties file %s:  %s
+SEVERE_ERR_ARGPARSER_TOO_MANY_TRAILING_ARGS_56=The provided set of \
+ command-line arguments contained too many unnamed trailing arguments.  The \
+ maximum number of allowed trailing arguments is %d
+SEVERE_ERR_ARGPARSER_LONG_ARG_WITHOUT_NAME_57=The provided argument "%s" is \
+ invalid because it does not include the argument name
+SEVERE_ERR_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID_58=Argument --%s is not allowed \
+ for use with this program
+SEVERE_ERR_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID_59=Argument --%s \
+ requires a value but none was provided
+SEVERE_ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID_60=The provided value \
+ "%s" for argument --%s is not acceptable:  %s
+SEVERE_ERR_ARGPARSER_NOT_MULTIVALUED_FOR_LONG_ID_61=The argument --%s was \
+ included multiple times in the provided set of arguments but it does not \
+ allow multiple values
+SEVERE_ERR_ARGPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE_62=A value was \
+ provided for argument --%s but that argument does not take a value
+SEVERE_ERR_ARGPARSER_INVALID_DASH_AS_ARGUMENT_63=The dash character by itself \
+ is invalid for use as an argument name
+SEVERE_ERR_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID_64=Argument -%s is not allowed \
+ for use with this program
+SEVERE_ERR_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID_65=Argument -%s \
+ requires a value but none was provided
+SEVERE_ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID_66=The provided value \
+ "%s" for argument -%s is not acceptable:  %s
+SEVERE_ERR_ARGPARSER_NOT_MULTIVALUED_FOR_SHORT_ID_67=The argument -%s was \
+ included multiple times in the provided set of arguments but it does not \
+ allow multiple values
+SEVERE_ERR_ARGPARSER_CANT_MIX_ARGS_WITH_VALUES_68=The provided argument block \
+ '-%s%s' is illegal because the '%s' argument requires a value but is in the \
+ same block as at least one other argument that doesn't require a value
+SEVERE_ERR_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT_69=Argument "%s" does not \
+ start with one or two dashes and unnamed trailing arguments are not allowed
+SEVERE_ERR_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS_70=At least %d unnamed \
+ trailing arguments are required in the argument list, but too few were \
+ provided
+SEVERE_ERR_ARGPARSER_NO_VALUE_FOR_REQUIRED_ARG_71=The argument %s is required \
+ to have a value but none was provided in the argument list and no default \
+ value is available
+SEVERE_ERR_MOVEFILE_NO_SUCH_FILE_72=The file to move %s does not exist
+SEVERE_ERR_MOVEFILE_NOT_FILE_73=The file to move %s exists but is not a file
+SEVERE_ERR_MOVEFILE_NO_SUCH_DIRECTORY_74=The target directory %s does not \
+ exist
+SEVERE_ERR_MOVEFILE_NOT_DIRECTORY_75=The target directory %s exists but is \
+ not a directory
+SEVERE_ERR_EMAILMSG_INVALID_SENDER_ADDRESS_76=The provided sender address %s \
+ is invalid:  %s
+SEVERE_ERR_EMAILMSG_INVALID_RECIPIENT_ADDRESS_77=The provided recipient \
+ address %s is invalid:  %s
+SEVERE_ERR_EMAILMSG_CANNOT_SEND_78=The specified e-mail message could not be \
+ sent using any of the configured mail servers
+SEVERE_ERR_ARG_SUBCOMMAND_DUPLICATE_SUBCOMMAND_79=The argument parser already \
+ has a %s subcommand
+SEVERE_ERR_ARG_SUBCOMMAND_DUPLICATE_ARGUMENT_NAME_80=There are multiple \
+ arguments for subcommand %s with name %s
+SEVERE_ERR_ARG_SUBCOMMAND_ARGUMENT_GLOBAL_CONFLICT_81=Argument %s for \
+ subcommand %s conflicts with a global argument with the same name
+SEVERE_ERR_ARG_SUBCOMMAND_DUPLICATE_SHORT_ID_82=Argument %s for subcommand %s \
+ has a short identifier -%s that conflicts with that of argument %s
+SEVERE_ERR_ARG_SUBCOMMAND_ARGUMENT_SHORT_ID_GLOBAL_CONFLICT_83=Argument %s \
+ for subcommand %s has a short ID -%s that conflicts with that of global \
+ argument %s
+SEVERE_ERR_ARG_SUBCOMMAND_DUPLICATE_LONG_ID_84=Argument %s for subcommand %s \
+ has a long identifier --%s that conflicts with that of argument %s
+SEVERE_ERR_ARG_SUBCOMMAND_ARGUMENT_LONG_ID_GLOBAL_CONFLICT_85=Argument %s for \
+ subcommand %s has a long ID --%s that conflicts with that of global argument \
+ %s
+SEVERE_ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_NAME_86=There is already another \
+ global argument named "%s"
+SEVERE_ERR_SUBCMDPARSER_GLOBAL_ARG_NAME_SUBCMD_CONFLICT_87=The argument name \
+ %s conflicts with the name of another argument associated with the %s \
+ subcommand
+SEVERE_ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_SHORT_ID_88=Short ID -%s for \
+ global argument %s conflicts with the short ID of another global argument %s
+SEVERE_ERR_SUBCMDPARSER_GLOBAL_ARG_SHORT_ID_CONFLICT_89=Short ID -%s for \
+ global argument %s conflicts with the short ID for the %s argument associated \
+ with subcommand %s
+SEVERE_ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_LONG_ID_90=Long ID --%s for \
+ global argument %s conflicts with the long ID of another global argument %s
+SEVERE_ERR_SUBCMDPARSER_GLOBAL_ARG_LONG_ID_CONFLICT_91=Long ID --%s for \
+ global argument %s conflicts with the long ID for the %s argument associated \
+ with subcommand %s
+SEVERE_ERR_SUBCMDPARSER_CANNOT_READ_PROPERTIES_FILE_92=An error occurred \
+ while attempting to read the contents of the argument properties file %s:  %s
+SEVERE_ERR_SUBCMDPARSER_LONG_ARG_WITHOUT_NAME_93=The provided command-line \
+ argument %s does not contain an argument name
+SEVERE_ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_LONG_ID_94=The provided \
+ argument --%s is not a valid global argument identifier
+SEVERE_ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_LONG_ID_95=The provided argument --%s \
+ is not a valid global or subcommand argument identifier
+SEVERE_ERR_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID_96=Command-line \
+ argument --%s requires a value but none was given
+SEVERE_ERR_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID_97=The provided value \
+ "%s" for argument --%s is not acceptable:  %s
+SEVERE_ERR_SUBCMDPARSER_NOT_MULTIVALUED_FOR_LONG_ID_98=The argument --%s was \
+ included multiple times in the provided set of arguments but it does not \
+ allow multiple values
+SEVERE_ERR_SUBCMDPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE_99=A value was \
+ provided for argument --%s but that argument does not take a value
+SEVERE_ERR_SUBCMDPARSER_INVALID_DASH_AS_ARGUMENT_100=The dash character by \
+ itself is invalid for use as an argument name
+SEVERE_ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID_101=The provided \
+ argument -%s is not a valid global argument identifier
+SEVERE_ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID_102=The provided argument \
+ -%s is not a valid global or subcommand argument identifier
+SEVERE_ERR_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID_103=Argument -%s \
+ requires a value but none was provided
+SEVERE_ERR_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID_104=The provided \
+ value "%s" for argument -%s is not acceptable:  %s
+SEVERE_ERR_SUBCMDPARSER_NOT_MULTIVALUED_FOR_SHORT_ID_105=The argument -%s was \
+ included multiple times in the provided set of arguments but it does not \
+ allow multiple values
+SEVERE_ERR_SUBCMDPARSER_CANT_MIX_ARGS_WITH_VALUES_106=The provided argument \
+ block '-%s%s' is illegal because the '%s' argument requires a value but is in \
+ the same block as at least one other argument that doesn't require a value
+SEVERE_ERR_SUBCMDPARSER_INVALID_ARGUMENT_107=The provided argument %s is not \
+ recognized
+SEVERE_ERR_SUBCMDPARSER_MULTIPLE_SUBCOMMANDS_108=The provided argument %s \
+ specifies a valid subcommand, but another subcommand %s was also given.  Only \
+ a single subcommand may be provided
+SEVERE_ERR_SUBCMDPARSER_NO_VALUE_FOR_REQUIRED_ARG_109=The argument %s is \
+ required to have a value but none was provided in the argument list and no \
+ default value is available
+SEVERE_ERR_LDAPURL_NO_COLON_SLASH_SLASH_110=The provided string "%s" cannot \
+ be decoded as an LDAP URL because it does not contain the necessary :// \
+ component to separate the scheme from the rest of the URL
+SEVERE_ERR_LDAPURL_NO_SCHEME_111=The provided string "%s" cannot be decoded \
+ as an LDAP URL because it does not contain a protocol scheme
+SEVERE_ERR_LDAPURL_NO_HOST_112=The provided string "%s" cannot be decoded as \
+ an LDAP URL because it does not contain a host before the colon to specify \
+ the port number
+SEVERE_ERR_LDAPURL_NO_PORT_113=The provided string "%s" cannot be decoded as \
+ an LDAP URL because it does not contain a port number after the colon \
+ following the host
+SEVERE_ERR_LDAPURL_CANNOT_DECODE_PORT_114=The provided string "%s" cannot be \
+ decoded as an LDAP URL because the port number portion %s cannot be decoded \
+ as an integer
+SEVERE_ERR_LDAPURL_INVALID_PORT_115=The provided string "%s" cannot be \
+ decoded as an LDAP URL because the provided port number %d is not within the \
+ valid range between 1 and 65535
+SEVERE_ERR_LDAPURL_INVALID_SCOPE_STRING_116=The provided string "%s" cannot \
+ be decoded as an LDAP URL because the scope string %s was not one of the \
+ allowed values of base, one, sub, or subordinate
+SEVERE_ERR_LDAPURL_PERCENT_TOO_CLOSE_TO_END_117=The provided URL component \
+ "%s" could not be decoded because the percent character at byte %d was not \
+ followed by two hexadecimal digits
+SEVERE_ERR_LDAPURL_INVALID_HEX_BYTE_118=The provided URL component "%s" could \
+ not be decoded because the character at byte %d was not a valid hexadecimal \
+ digit
+SEVERE_ERR_LDAPURL_CANNOT_CREATE_UTF8_STRING_119=An error occurred while \
+ attempting to represent a byte array as a UTF-8 string during the course of \
+ decoding a portion of an LDAP URL:  %s
+MILD_ERR_CHARSET_NO_COLON_120=Cannot decode value "%s" as a named character \
+ set because it does not contain a colon to separate the name from the set of \
+ characters
+MILD_ERR_CHARSET_CONSTRUCTOR_NO_NAME_121=The named character set is invalid \
+ because it does not contain a name
+MILD_ERR_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR_122=The named character set is \
+ invalid because the provide name "%s" has an invalid character at position \
+ %d.  Only ASCII alphabetic characters are allowed in the name
+MILD_ERR_CHARSET_NO_NAME_123=Cannot decode value "%s" as a named character \
+ set because it does not contain a name to use for the character set
+MILD_ERR_CHARSET_NO_CHARS_124=Cannot decode value "%s" as a named character \
+ set because there are no characters to include in the set
+INFO_TIME_IN_SECONDS_125=%d seconds
+INFO_TIME_IN_MINUTES_SECONDS_126=%d minutes, %s seconds
+INFO_TIME_IN_HOURS_MINUTES_SECONDS_127=%d hours, %d minutes, %s seconds
+INFO_TIME_IN_DAYS_HOURS_MINUTES_SECONDS_128=%d days, %d hours, %d minutes, %s \
+ seconds
+INFO_ACCTNOTTYPE_ACCOUNT_TEMPORARILY_LOCKED_129=account-temporarily-locked
+INFO_ACCTNOTTYPE_ACCOUNT_PERMANENTLY_LOCKED_130=account-permanently-locked
+INFO_ACCTNOTTYPE_ACCOUNT_UNLOCKED_131=account-unlocked
+INFO_ACCTNOTTYPE_ACCOUNT_IDLE_LOCKED_132=account-idle-locked
+INFO_ACCTNOTTYPE_ACCOUNT_RESET_LOCKED_133=account-reset-locked
+INFO_ACCTNOTTYPE_ACCOUNT_DISABLED_134=account-disabled
+INFO_ACCTNOTTYPE_ACCOUNT_ENABLED_135=account-enabled
+INFO_ACCTNOTTYPE_ACCOUNT_EXPIRED_136=account-expired
+INFO_ACCTNOTTYPE_PASSWORD_EXPIRED_137=password-expired
+INFO_ACCTNOTTYPE_PASSWORD_EXPIRING_138=password-expiring
+INFO_ACCTNOTTYPE_PASSWORD_RESET_139=password-reset
+INFO_ACCTNOTTYPE_PASSWORD_CHANGED_140=password-changed
+MILD_ERR_FILEPERM_SET_NO_SUCH_FILE_141=Unable to set permissions for file %s \
+ because it does not exist
+MILD_ERR_FILEPERM_CANNOT_EXEC_CHMOD_142=Unable to execute the chmod command \
+ to set file permissions on %s:  %s
+SEVERE_ERR_FILEPERM_SET_JAVA_EXCEPTION_143=One or more exceptions were thrown \
+ in the process of updating the file permissions for %s.  Some of the \
+ permissions for the file may have been altered
+SEVERE_ERR_FILEPERM_SET_JAVA_FAILED_ALTERED_144=One or more updates to the \
+ file permissions for %s failed, but at least one update was successful.  Some \
+ of the permissions for the file may have been altered
+SEVERE_ERR_FILEPERM_SET_JAVA_FAILED_UNALTERED_145=All of the attempts to \
+ update the file permissions for %s failed.  The file should be left with its \
+ original permissions
+MILD_ERR_FILEPERM_INVALID_UNIX_MODE_STRING_146=The provided string %s does \
+ not represent a valid UNIX file mode.  UNIX file modes must be a \
+ three-character string in which each character is a numeric digit between \
+ zero and seven
+MILD_ERR_EXEC_DISABLED_147=The %s command will not be allowed because the \
+ Directory Server has been configured to refuse the use of the exec method
+SEVERE_ERR_VALIDATOR_PRECONDITION_NOT_MET_148=A precondition of the invoked \
+ method was not met.  This This usually means there is a defect somewhere in \
+ the call stack.  Details: %s
+INFO_GLOBAL_OPTIONS_149=Global Options:
+INFO_GLOBAL_OPTIONS_REFERENCE_150=See "%s --help"
+INFO_SUBCMD_OPTIONS_151=SubCommand Options:
+INFO_ARGPARSER_USAGE_152=Usage:
+INFO_SUBCMDPARSER_SUBCMD_HEADING_153=Available subcommands:
+INFO_SUBCMDPARSER_SUBCMD_REFERENCE_154=See "%s --help-{category}"
+INFO_SUBCMDPARSER_GLOBAL_HEADING_155=The accepted value for global options \
+ are:
+INFO_GLOBAL_HELP_REFERENCE_156=See "%s --help" to get more usage help
+SEVERE_ERR_RENAMEFILE_CANNOT_RENAME_157=Failed to rename file %s to %s
+SEVERE_ERR_RENAMEFILE_CANNOT_DELETE_TARGET_158=Failed to delete target file \
+ %s.  Make sure the file is not currently in use by this or another \
+ application
+SEVERE_ERR_EXPCHECK_TRUSTMGR_CLIENT_CERT_EXPIRED_159=Refusing to trust client \
+ or issuer certificate '%s' because it expired on %s
+SEVERE_ERR_EXPCHECK_TRUSTMGR_CLIENT_CERT_NOT_YET_VALID_160=Refusing to trust \
+ client or issuer certificate '%s' because it is not valid until %s
+SEVERE_ERR_EXPCHECK_TRUSTMGR_SERVER_CERT_EXPIRED_161=Refusing to trust server \
+ or issuer certificate '%s' because it expired on %s
+SEVERE_ERR_EXPCHECK_TRUSTMGR_SERVER_CERT_NOT_YET_VALID_162=Refusing to trust \
+ server or issuer certificate '%s' because it is not valid until %s
+MILD_WARN_LDIF_VALUE_VIOLATES_SYNTAX_163=Entry %s read from LDIF starting at \
+ line %d includes value '%s' for attribute %s that is invalid according to the \
+ associated syntax:  %s
+SEVERE_ERR_SKIP_FILE_EXISTS_164=The specified skip file %s already exists and \
+ the import configuration indicates that no attempt should be made to append \
+ to or replace the file
+MILD_ERR_LDIF_SKIP_165=Skipping entry %s because the DN is not one that \
+ should be included based on the include and exclude branches
+INFO_SUBCMDPARSER_SUBCMD_HELP_HEADING_166=To get the list of subcommands use:
diff --git a/opendj-sdk/opends/src/messages/messages/utility.properties b/opendj-sdk/opends/src/messages/messages/utility.properties
new file mode 100644
index 0000000..72fddc9
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/utility.properties
@@ -0,0 +1,427 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=UTIL
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+MILD_ERR_BASE64_DECODE_INVALID_LENGTH_1=The value %s cannot be base64-decoded \
+ because it does not have a length that is a multiple of four bytes
+MILD_ERR_BASE64_DECODE_INVALID_CHARACTER_2=The value %s cannot be \
+ base64-decoded because it contains an illegal character %c that is not \
+ allowed in base64-encoded values
+MILD_ERR_HEX_DECODE_INVALID_LENGTH_3=The value %s cannot be decoded as a \
+ hexadecimal string because it does not have a length that is a multiple of \
+ two bytes
+MILD_ERR_HEX_DECODE_INVALID_CHARACTER_4=The value %s cannot be decoded as a \
+ hexadecimal string because it contains an illegal character %c that is not a \
+ valid hexadecimal digit
+MILD_ERR_LDIF_INVALID_LEADING_SPACE_5=Unable to parse line %d ("%s") from the \
+ LDIF source because the line started with a space but there were no previous \
+ lines in the entry to which this line could be appended
+MILD_ERR_LDIF_NO_ATTR_NAME_6=Unable to parse LDIF entry starting at line %d \
+ because the line "%s" does not include an attribute name
+MILD_ERR_LDIF_NO_DN_7=Unable to parse LDIF entry starting at line %d because \
+ the first line does not contain a DN (the first line was "%s"
+MILD_ERR_LDIF_INVALID_DN_SEPARATOR_8=Unable to parse LDIF entry starting at \
+ line %d because line "%s" contained an invalid separator between the "dn" \
+ prefix and the actual distinguished name
+MILD_ERR_LDIF_INVALID_DN_9=Unable to parse LDIF entry starting at line %d \
+ because an error occurred while trying to parse the value of line "%s" as a \
+ distinguished name:  %s
+MILD_ERR_LDIF_INVALID_ATTR_SEPARATOR_10=Unable to parse LDIF entry %s \
+ starting at line %d because line "%s" contained an invalid separator between \
+ the attribute name and value
+MILD_ERR_LDIF_COULD_NOT_BASE64_DECODE_DN_11=Unable to parse LDIF entry \
+ starting at line %d because it was not possible to base64-decode the DN on \
+ line "%s":  %s
+MILD_ERR_LDIF_COULD_NOT_BASE64_DECODE_ATTR_12=Unable to parse LDIF entry %s \
+ starting at line %d because it was not possible to base64-decode the \
+ attribute on line "%s":  %s
+MILD_WARN_LDIF_DUPLICATE_OBJECTCLASS_13=Entry %s read from LDIF starting at \
+ line %d includes a duplicate objectclass value %s.  The second occurrence of \
+ that objectclass has been skipped
+MILD_WARN_LDIF_DUPLICATE_ATTR_14=Entry %s read from LDIF starting at line %d \
+ includes a duplicate attribute %s with value %s.  The second occurrence of \
+ that attribute value has been skipped
+MILD_ERR_LDIF_MULTIPLE_VALUES_FOR_SINGLE_VALUED_ATTR_15=Entry %s starting at \
+ line %d includes multiple values for single-valued attribute %s
+MILD_ERR_LDIF_INVALID_ATTR_SYNTAX_16=Unable to parse LDIF entry %s starting \
+ at line %d because it has an invalid value "%s" for attribute %s:  %s
+MILD_ERR_LDIF_SCHEMA_VIOLATION_17=Entry %s read from LDIF starting at line %d \
+ is not valid because it violates the server's schema configuration:  %s
+SEVERE_ERR_LDIF_FILE_EXISTS_18=The specified LDIF file %s already exists and \
+ the export configuration indicates that no attempt should be made to append \
+ to or replace the file
+MILD_ERR_LDIF_INVALID_URL_19=Unable to parse LDIF entry %s starting at line \
+ %d because the value of attribute %s was to be read from a URL but the URL \
+ was invalid:  %s
+MILD_ERR_LDIF_URL_IO_ERROR_20=Unable to parse LDIF entry %s starting at line \
+ %d because the value of attribute %s was to be read from URL %s but an error \
+ occurred while trying to read that content:  %s
+SEVERE_ERR_REJECT_FILE_EXISTS_21=The specified reject file %s already exists \
+ and the import configuration indicates that no attempt should be made to \
+ append to or replace the file
+SEVERE_ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT_22=An error occurred \
+ while attempting to determine whether LDIF entry "%s" starting at line %d \
+ should be imported as a result of the include and exclude filter \
+ configuration:  %s
+SEVERE_ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_EXPORT_23=An error occurred \
+ while attempting to determine whether LDIF entry "%s" should be exported as a \
+ result of the include and exclude filter configuration:  %s
+SEVERE_ERR_LDIF_INVALID_DELETE_ATTRIBUTES_24=Error in the LDIF change record \
+ entry. Invalid attributes specified for the delete operation
+SEVERE_ERR_LDIF_NO_MOD_DN_ATTRIBUTES_25=Error in the LDIF change record \
+ entry. No attributes specified for the mod DN operation
+SEVERE_ERR_LDIF_NO_DELETE_OLDRDN_ATTRIBUTE_26=Error in the LDIF change record \
+ entry. No delete old RDN attribute specified for the mod DN operation
+SEVERE_ERR_LDIF_INVALID_DELETE_OLDRDN_ATTRIBUTE_27=Error in the LDIF change \
+ record entry. Invalid value "%s" for the delete old RDN attribute specified \
+ for the mod DN operation
+SEVERE_ERR_LDIF_INVALID_CHANGERECORD_ATTRIBUTE_28=Error in the LDIF change \
+ record entry. Invalid attribute "%s" specified. Expecting attribute "%s"
+SEVERE_ERR_LDIF_INVALID_MODIFY_ATTRIBUTE_29=Error in the LDIF change record \
+ entry. Invalid attribute "%s" specified. Expecting one of the following \
+ attributes "%s"
+SEVERE_ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE_30=Error in the LDIF change \
+ record entry. Invalid value "%s" for the changetype specified. Expecting one \
+ of the following values "%s"
+SEVERE_ERR_LDIF_INVALID_MODIFY_ATTRIBUTE_VAL_31=Error in the LDIF change \
+ record entry. Invalid value for the "%s" attribute specified.
+SEVERE_ERR_SCHEMANAME_EMPTY_VALUE_32=The provided value could not be parsed \
+ to determine whether it contained a valid schema element name or OID because \
+ it was null or empty
+SEVERE_ERR_SCHEMANAME_ILLEGAL_CHAR_33=The provided value "%s" does not \
+ contain a valid schema element name or OID because it contains an illegal \
+ character %c at position %d
+SEVERE_ERR_SCHEMANAME_CONSECUTIVE_PERIODS_34=The provided value "%s" does not \
+ contain a valid schema element name or OID because the numeric OID contains \
+ two consecutive periods at position %d
+SEVERE_ERR_ARG_NO_IDENTIFIER_35=The %s argument does not have either a \
+ single-character or a long identifier that may be used to specify it.  At \
+ least one of these must be specified for each argument
+SEVERE_ERR_ARG_NO_VALUE_PLACEHOLDER_36=The %s argument is configured to take \
+ a value but no value placeholder has been defined for it
+SEVERE_ERR_ARG_NO_INT_VALUE_37=The %s argument does not have any value that \
+ may be retrieved as an integer
+SEVERE_ERR_ARG_CANNOT_DECODE_AS_INT_38=The provided value "%s" for the %s \
+ argument cannot be decoded as an integer
+SEVERE_ERR_ARG_INT_MULTIPLE_VALUES_39=The %s argument has multiple values and \
+ therefore cannot be decoded as a single integer value
+SEVERE_ERR_ARG_NO_BOOLEAN_VALUE_40=The %s argument does not have any value \
+ that may be retrieved as a Boolean
+SEVERE_ERR_ARG_CANNOT_DECODE_AS_BOOLEAN_41=The provided value "%s" for the %s \
+ argument cannot be decoded as a Boolean
+SEVERE_ERR_ARG_BOOLEAN_MULTIPLE_VALUES_42=The %s argument has multiple values \
+ and therefore cannot be decoded as a single Boolean value
+SEVERE_ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND_43=The %s argument \
+ configuration is invalid because the lower bound of %d is greater than the \
+ upper bound of %d
+SEVERE_ERR_INTARG_VALUE_BELOW_LOWER_BOUND_44=The provided %s value %d is \
+ unacceptable because it is below the lower bound of %d
+SEVERE_ERR_INTARG_VALUE_ABOVE_UPPER_BOUND_45=The provided %s value %d is \
+ unacceptable because it is above the upper bound of %d
+SEVERE_ERR_BOOLEANARG_NO_VALUE_ALLOWED_46=The provided %s value is \
+ unacceptable because Boolean arguments are never allowed to have values
+SEVERE_ERR_MCARG_VALUE_NOT_ALLOWED_47=The provided %s value %s is \
+ unacceptable because it is not included in the set of allowed values for that \
+ argument
+SEVERE_ERR_FILEARG_NO_SUCH_FILE_48=The file %s specified for argument %s does \
+ not exist
+SEVERE_ERR_FILEARG_CANNOT_VERIFY_FILE_EXISTENCE_49=An error occurred while \
+ trying to verify the existence of file %s specified for argument %s:  %s
+SEVERE_ERR_FILEARG_CANNOT_OPEN_FILE_50=An error occurred while trying to open \
+ file %s specified for argument %s for reading:  %s
+SEVERE_ERR_FILEARG_CANNOT_READ_FILE_51=An error occurred while trying to read \
+ from file %s specified for argument %s:  %s
+SEVERE_ERR_FILEARG_EMPTY_FILE_52=The file %s specified for argument %s exists \
+ but is empty
+SEVERE_ERR_ARGPARSER_DUPLICATE_SHORT_ID_53=Cannot add argument %s to the \
+ argument list because its short identifier -%s conflicts with the %s argument \
+ that has already been defined
+SEVERE_ERR_ARGPARSER_DUPLICATE_LONG_ID_54=Cannot add argument %s to the \
+ argument list because its long identifier --%s conflicts with the %s argument \
+ that has already been defined
+SEVERE_ERR_ARGPARSER_CANNOT_READ_PROPERTIES_FILE_55=An error occurred while \
+ attempting to read the contents of the argument properties file %s:  %s
+SEVERE_ERR_ARGPARSER_TOO_MANY_TRAILING_ARGS_56=The provided set of \
+ command-line arguments contained too many unnamed trailing arguments.  The \
+ maximum number of allowed trailing arguments is %d
+SEVERE_ERR_ARGPARSER_LONG_ARG_WITHOUT_NAME_57=The provided argument "%s" is \
+ invalid because it does not include the argument name
+SEVERE_ERR_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID_58=Argument --%s is not allowed \
+ for use with this program
+SEVERE_ERR_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID_59=Argument --%s \
+ requires a value but none was provided
+SEVERE_ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID_60=The provided value \
+ "%s" for argument --%s is not acceptable:  %s
+SEVERE_ERR_ARGPARSER_NOT_MULTIVALUED_FOR_LONG_ID_61=The argument --%s was \
+ included multiple times in the provided set of arguments but it does not \
+ allow multiple values
+SEVERE_ERR_ARGPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE_62=A value was \
+ provided for argument --%s but that argument does not take a value
+SEVERE_ERR_ARGPARSER_INVALID_DASH_AS_ARGUMENT_63=The dash character by itself \
+ is invalid for use as an argument name
+SEVERE_ERR_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID_64=Argument -%s is not allowed \
+ for use with this program
+SEVERE_ERR_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID_65=Argument -%s \
+ requires a value but none was provided
+SEVERE_ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID_66=The provided value \
+ "%s" for argument -%s is not acceptable:  %s
+SEVERE_ERR_ARGPARSER_NOT_MULTIVALUED_FOR_SHORT_ID_67=The argument -%s was \
+ included multiple times in the provided set of arguments but it does not \
+ allow multiple values
+SEVERE_ERR_ARGPARSER_CANT_MIX_ARGS_WITH_VALUES_68=The provided argument block \
+ '-%s%s' is illegal because the '%s' argument requires a value but is in the \
+ same block as at least one other argument that doesn't require a value
+SEVERE_ERR_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT_69=Argument "%s" does not \
+ start with one or two dashes and unnamed trailing arguments are not allowed
+SEVERE_ERR_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS_70=At least %d unnamed \
+ trailing arguments are required in the argument list, but too few were \
+ provided
+SEVERE_ERR_ARGPARSER_NO_VALUE_FOR_REQUIRED_ARG_71=The argument %s is required \
+ to have a value but none was provided in the argument list and no default \
+ value is available
+SEVERE_ERR_MOVEFILE_NO_SUCH_FILE_72=The file to move %s does not exist
+SEVERE_ERR_MOVEFILE_NOT_FILE_73=The file to move %s exists but is not a file
+SEVERE_ERR_MOVEFILE_NO_SUCH_DIRECTORY_74=The target directory %s does not \
+ exist
+SEVERE_ERR_MOVEFILE_NOT_DIRECTORY_75=The target directory %s exists but is \
+ not a directory
+SEVERE_ERR_EMAILMSG_INVALID_SENDER_ADDRESS_76=The provided sender address %s \
+ is invalid:  %s
+SEVERE_ERR_EMAILMSG_INVALID_RECIPIENT_ADDRESS_77=The provided recipient \
+ address %s is invalid:  %s
+SEVERE_ERR_EMAILMSG_CANNOT_SEND_78=The specified e-mail message could not be \
+ sent using any of the configured mail servers
+SEVERE_ERR_ARG_SUBCOMMAND_DUPLICATE_SUBCOMMAND_79=The argument parser already \
+ has a %s subcommand
+SEVERE_ERR_ARG_SUBCOMMAND_DUPLICATE_ARGUMENT_NAME_80=There are multiple \
+ arguments for subcommand %s with name %s
+SEVERE_ERR_ARG_SUBCOMMAND_ARGUMENT_GLOBAL_CONFLICT_81=Argument %s for \
+ subcommand %s conflicts with a global argument with the same name
+SEVERE_ERR_ARG_SUBCOMMAND_DUPLICATE_SHORT_ID_82=Argument %s for subcommand %s \
+ has a short identifier -%s that conflicts with that of argument %s
+SEVERE_ERR_ARG_SUBCOMMAND_ARGUMENT_SHORT_ID_GLOBAL_CONFLICT_83=Argument %s \
+ for subcommand %s has a short ID -%s that conflicts with that of global \
+ argument %s
+SEVERE_ERR_ARG_SUBCOMMAND_DUPLICATE_LONG_ID_84=Argument %s for subcommand %s \
+ has a long identifier --%s that conflicts with that of argument %s
+SEVERE_ERR_ARG_SUBCOMMAND_ARGUMENT_LONG_ID_GLOBAL_CONFLICT_85=Argument %s for \
+ subcommand %s has a long ID --%s that conflicts with that of global argument \
+ %s
+SEVERE_ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_NAME_86=There is already another \
+ global argument named "%s"
+SEVERE_ERR_SUBCMDPARSER_GLOBAL_ARG_NAME_SUBCMD_CONFLICT_87=The argument name \
+ %s conflicts with the name of another argument associated with the %s \
+ subcommand
+SEVERE_ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_SHORT_ID_88=Short ID -%s for \
+ global argument %s conflicts with the short ID of another global argument %s
+SEVERE_ERR_SUBCMDPARSER_GLOBAL_ARG_SHORT_ID_CONFLICT_89=Short ID -%s for \
+ global argument %s conflicts with the short ID for the %s argument associated \
+ with subcommand %s
+SEVERE_ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_LONG_ID_90=Long ID --%s for \
+ global argument %s conflicts with the long ID of another global argument %s
+SEVERE_ERR_SUBCMDPARSER_GLOBAL_ARG_LONG_ID_CONFLICT_91=Long ID --%s for \
+ global argument %s conflicts with the long ID for the %s argument associated \
+ with subcommand %s
+SEVERE_ERR_SUBCMDPARSER_CANNOT_READ_PROPERTIES_FILE_92=An error occurred \
+ while attempting to read the contents of the argument properties file %s:  %s
+SEVERE_ERR_SUBCMDPARSER_LONG_ARG_WITHOUT_NAME_93=The provided command-line \
+ argument %s does not contain an argument name
+SEVERE_ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_LONG_ID_94=The provided \
+ argument --%s is not a valid global argument identifier
+SEVERE_ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_LONG_ID_95=The provided argument --%s \
+ is not a valid global or subcommand argument identifier
+SEVERE_ERR_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID_96=Command-line \
+ argument --%s requires a value but none was given
+SEVERE_ERR_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID_97=The provided value \
+ "%s" for argument --%s is not acceptable:  %s
+SEVERE_ERR_SUBCMDPARSER_NOT_MULTIVALUED_FOR_LONG_ID_98=The argument --%s was \
+ included multiple times in the provided set of arguments but it does not \
+ allow multiple values
+SEVERE_ERR_SUBCMDPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE_99=A value was \
+ provided for argument --%s but that argument does not take a value
+SEVERE_ERR_SUBCMDPARSER_INVALID_DASH_AS_ARGUMENT_100=The dash character by \
+ itself is invalid for use as an argument name
+SEVERE_ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID_101=The provided \
+ argument -%s is not a valid global argument identifier
+SEVERE_ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID_102=The provided argument \
+ -%s is not a valid global or subcommand argument identifier
+SEVERE_ERR_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID_103=Argument -%s \
+ requires a value but none was provided
+SEVERE_ERR_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID_104=The provided \
+ value "%s" for argument -%s is not acceptable:  %s
+SEVERE_ERR_SUBCMDPARSER_NOT_MULTIVALUED_FOR_SHORT_ID_105=The argument -%s was \
+ included multiple times in the provided set of arguments but it does not \
+ allow multiple values
+SEVERE_ERR_SUBCMDPARSER_CANT_MIX_ARGS_WITH_VALUES_106=The provided argument \
+ block '-%s%s' is illegal because the '%s' argument requires a value but is in \
+ the same block as at least one other argument that doesn't require a value
+SEVERE_ERR_SUBCMDPARSER_INVALID_ARGUMENT_107=The provided argument %s is not \
+ recognized
+SEVERE_ERR_SUBCMDPARSER_MULTIPLE_SUBCOMMANDS_108=The provided argument %s \
+ specifies a valid subcommand, but another subcommand %s was also given.  Only \
+ a single subcommand may be provided
+SEVERE_ERR_SUBCMDPARSER_NO_VALUE_FOR_REQUIRED_ARG_109=The argument %s is \
+ required to have a value but none was provided in the argument list and no \
+ default value is available
+SEVERE_ERR_LDAPURL_NO_COLON_SLASH_SLASH_110=The provided string "%s" cannot \
+ be decoded as an LDAP URL because it does not contain the necessary :// \
+ component to separate the scheme from the rest of the URL
+SEVERE_ERR_LDAPURL_NO_SCHEME_111=The provided string "%s" cannot be decoded \
+ as an LDAP URL because it does not contain a protocol scheme
+SEVERE_ERR_LDAPURL_NO_HOST_112=The provided string "%s" cannot be decoded as \
+ an LDAP URL because it does not contain a host before the colon to specify \
+ the port number
+SEVERE_ERR_LDAPURL_NO_PORT_113=The provided string "%s" cannot be decoded as \
+ an LDAP URL because it does not contain a port number after the colon \
+ following the host
+SEVERE_ERR_LDAPURL_CANNOT_DECODE_PORT_114=The provided string "%s" cannot be \
+ decoded as an LDAP URL because the port number portion %s cannot be decoded \
+ as an integer
+SEVERE_ERR_LDAPURL_INVALID_PORT_115=The provided string "%s" cannot be \
+ decoded as an LDAP URL because the provided port number %d is not within the \
+ valid range between 1 and 65535
+SEVERE_ERR_LDAPURL_INVALID_SCOPE_STRING_116=The provided string "%s" cannot \
+ be decoded as an LDAP URL because the scope string %s was not one of the \
+ allowed values of base, one, sub, or subordinate
+SEVERE_ERR_LDAPURL_PERCENT_TOO_CLOSE_TO_END_117=The provided URL component \
+ "%s" could not be decoded because the percent character at byte %d was not \
+ followed by two hexadecimal digits
+SEVERE_ERR_LDAPURL_INVALID_HEX_BYTE_118=The provided URL component "%s" could \
+ not be decoded because the character at byte %d was not a valid hexadecimal \
+ digit
+SEVERE_ERR_LDAPURL_CANNOT_CREATE_UTF8_STRING_119=An error occurred while \
+ attempting to represent a byte array as a UTF-8 string during the course of \
+ decoding a portion of an LDAP URL:  %s
+MILD_ERR_CHARSET_NO_COLON_120=Cannot decode value "%s" as a named character \
+ set because it does not contain a colon to separate the name from the set of \
+ characters
+MILD_ERR_CHARSET_CONSTRUCTOR_NO_NAME_121=The named character set is invalid \
+ because it does not contain a name
+MILD_ERR_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR_122=The named character set is \
+ invalid because the provide name "%s" has an invalid character at position \
+ %d.  Only ASCII alphabetic characters are allowed in the name
+MILD_ERR_CHARSET_NO_NAME_123=Cannot decode value "%s" as a named character \
+ set because it does not contain a name to use for the character set
+MILD_ERR_CHARSET_NO_CHARS_124=Cannot decode value "%s" as a named character \
+ set because there are no characters to include in the set
+INFO_TIME_IN_SECONDS_125=%d seconds
+INFO_TIME_IN_MINUTES_SECONDS_126=%d minutes, %d seconds
+INFO_TIME_IN_HOURS_MINUTES_SECONDS_127=%d hours, %d minutes, %d seconds
+INFO_TIME_IN_DAYS_HOURS_MINUTES_SECONDS_128=%d days, %d hours, %d minutes, %d \
+ seconds
+INFO_ACCTNOTTYPE_ACCOUNT_TEMPORARILY_LOCKED_129=account-temporarily-locked
+INFO_ACCTNOTTYPE_ACCOUNT_PERMANENTLY_LOCKED_130=account-permanently-locked
+INFO_ACCTNOTTYPE_ACCOUNT_UNLOCKED_131=account-unlocked
+INFO_ACCTNOTTYPE_ACCOUNT_IDLE_LOCKED_132=account-idle-locked
+INFO_ACCTNOTTYPE_ACCOUNT_RESET_LOCKED_133=account-reset-locked
+INFO_ACCTNOTTYPE_ACCOUNT_DISABLED_134=account-disabled
+INFO_ACCTNOTTYPE_ACCOUNT_ENABLED_135=account-enabled
+INFO_ACCTNOTTYPE_ACCOUNT_EXPIRED_136=account-expired
+INFO_ACCTNOTTYPE_PASSWORD_EXPIRED_137=password-expired
+INFO_ACCTNOTTYPE_PASSWORD_EXPIRING_138=password-expiring
+INFO_ACCTNOTTYPE_PASSWORD_RESET_139=password-reset
+INFO_ACCTNOTTYPE_PASSWORD_CHANGED_140=password-changed
+MILD_ERR_FILEPERM_SET_NO_SUCH_FILE_141=Unable to set permissions for file %s \
+ because it does not exist
+MILD_ERR_FILEPERM_CANNOT_EXEC_CHMOD_142=Unable to execute the chmod command \
+ to set file permissions on %s:  %s
+SEVERE_ERR_FILEPERM_SET_JAVA_EXCEPTION_143=One or more exceptions were thrown \
+ in the process of updating the file permissions for %s.  Some of the \
+ permissions for the file may have been altered
+SEVERE_ERR_FILEPERM_SET_JAVA_FAILED_ALTERED_144=One or more updates to the \
+ file permissions for %s failed, but at least one update was successful.  Some \
+ of the permissions for the file may have been altered
+SEVERE_ERR_FILEPERM_SET_JAVA_FAILED_UNALTERED_145=All of the attempts to \
+ update the file permissions for %s failed.  The file should be left with its \
+ original permissions
+MILD_ERR_FILEPERM_INVALID_UNIX_MODE_STRING_146=The provided string %s does \
+ not represent a valid UNIX file mode.  UNIX file modes must be a \
+ three-character string in which each character is a numeric digit between \
+ zero and seven
+MILD_ERR_EXEC_DISABLED_147=The %s command will not be allowed because the \
+ Directory Server has been configured to refuse the use of the exec method
+SEVERE_ERR_VALIDATOR_PRECONDITION_NOT_MET_148=A precondition of the invoked \
+ method was not met.  This This usually means there is a defect somewhere in \
+ the call stack.  Details: %s
+INFO_GLOBAL_OPTIONS_149=Global Options:
+INFO_GLOBAL_OPTIONS_REFERENCE_150=See "%s --help"
+INFO_SUBCMD_OPTIONS_151=SubCommand Options:
+INFO_ARGPARSER_USAGE_152=Usage:
+INFO_SUBCMDPARSER_SUBCMD_HEADING_153=Available subcommands:
+INFO_SUBCMDPARSER_SUBCMD_REFERENCE_154=See "%s --help-{category}"
+INFO_SUBCMDPARSER_GLOBAL_HEADING_155=The accepted value for global options \
+ are:
+INFO_GLOBAL_HELP_REFERENCE_156=See "%s --help" to get more usage help
+SEVERE_ERR_RENAMEFILE_CANNOT_RENAME_157=Failed to rename file %s to %s
+SEVERE_ERR_RENAMEFILE_CANNOT_DELETE_TARGET_158=Failed to delete target file \
+ %s.  Make sure the file is not currently in use by this or another \
+ application
+SEVERE_ERR_EXPCHECK_TRUSTMGR_CLIENT_CERT_EXPIRED_159=Refusing to trust client \
+ or issuer certificate '%s' because it expired on %s
+SEVERE_ERR_EXPCHECK_TRUSTMGR_CLIENT_CERT_NOT_YET_VALID_160=Refusing to trust \
+ client or issuer certificate '%s' because it is not valid until %s
+SEVERE_ERR_EXPCHECK_TRUSTMGR_SERVER_CERT_EXPIRED_161=Refusing to trust server \
+ or issuer certificate '%s' because it expired on %s
+SEVERE_ERR_EXPCHECK_TRUSTMGR_SERVER_CERT_NOT_YET_VALID_162=Refusing to trust \
+ server or issuer certificate '%s' because it is not valid until %s
+MILD_WARN_LDIF_VALUE_VIOLATES_SYNTAX_163=Entry %s read from LDIF starting at \
+ line %d includes value '%s' for attribute %s that is invalid according to the \
+ associated syntax:  %s
+SEVERE_ERR_SKIP_FILE_EXISTS_164=The specified skip file %s already exists and \
+ the import configuration indicates that no attempt should be made to append \
+ to or replace the file
+MILD_ERR_LDIF_SKIP_165=Skipping entry %s because the DN is not one that \
+ should be included based on the include and exclude branches
+INFO_SUBCMDPARSER_SUBCMD_HELP_HEADING_166=To get the list of subcommands use:
+SEVERE_ERR_EMBEDUTILS_SERVER_ALREADY_RUNNING_167=The Directory Server cannot \
+ be started because it is already running
diff --git a/opendj-sdk/opends/src/messages/messages/version.properties b/opendj-sdk/opends/src/messages/messages/version.properties
new file mode 100644
index 0000000..1fd5e34
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/messages/version.properties
@@ -0,0 +1,82 @@
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE
+# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+# 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
+# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+#
+#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+#
+#
+# This file contains the primary Directory Server configuration.  It must not
+# be directly edited while the server is online.  The server configuration
+# should only be managed using the administration utilities provided with the
+# Directory Server.
+
+
+#
+# Global directives
+#
+global.category=VERSION
+
+#
+# Format string definitions
+#
+# Keys must be formatted as follows:
+#
+# [SEVERITY]_[DESCRIPTION]_[ORDINAL]
+#
+# where:
+#
+# SEVERITY is one of:
+# [INFO, MILD_WARN, SEVERE_WARN, MILD_ERR, SEVERE_ERR, FATAL_ERR, DEBUG, NOTICE]
+#
+# DESCRIPTION is an upper case string providing a hint as to the context of
+# the message in upper case with the underscore ('_') character serving as
+# word separator
+#
+# ORDINAL is an integer unique among other ordinals in this file
+#
+INFO_890_UPGRADE_1=With this upgrade, the Berkley DB Java Edition JAR will be \
+ upgraded to version 3.2.13 which introduces incompatibilities to the data \
+ format.  Consequently if at a later time you wish to revert this installation \
+ to its prior version you will have to export the data from this server and \
+ reimport it once the reversion has finished
+INFO_890_REVERSION_2=With this reversion, the Berkley DB Java Editiong JAR \
+ will be downgraded to an older version which uses a different data format \
+ than the current version.In order to revert this server you will have to \
+ export the data from this server and reimport it after the reversion has \
+ finished
+INFO_1582_UPGRADE_3=This upgrade introduces improvements to the data format \
+ which are not backward compatible with the current version.  Consequently if \
+ at a later time you wish to revert this installation to its prior version you \
+ will have to export the data from this server and reimport it once the \
+ reversion has finished
+INFO_1582_REVERSION_4=With this reversion the data format used to store data \
+ by the server will be reverted to a prior version.  In order to revert this \
+ server you will have to export the data from this server and reimport it \
+ after the reversion has finished
+INFO_2049_UPGRADE_5=This upgrade introduces improvements to the data format \
+ which are not backward compatible with the current version.  Consequently if \
+ at a later time you wish to revert this installation to its prior version you \
+ will have to export the data from this server and reimport it once the \
+ reversion has finished
+INFO_2049_REVERSION_6=With this reversion the data format used to store data \
+ by the server will be reverted to a prior version.  In order to revert this \
+ server you will have to export the data from this server and reimport it \
+ after the reversion has finished
diff --git a/opendj-sdk/opends/src/messages/src/org/opends/messages/Category.java b/opendj-sdk/opends/src/messages/src/org/opends/messages/Category.java
new file mode 100644
index 0000000..30803f1
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/src/org/opends/messages/Category.java
@@ -0,0 +1,196 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.messages;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumSet;
+
+/**
+ * Defines values for message categories which are loosly based on
+ * server components.  Categories contain an in value that can be
+ * used as a mask for bitwise operations.
+ */
+public enum Category {
+
+  /**
+   * The category that will be used for messages associated with the
+   * core server.
+   */
+  CORE(0x00000000),
+
+  /**
+   * The category that will be used for messages associated with server
+   * extensions (e.g., extended operations, SASL mechanisms, password storage
+   * schemes, password validators, etc.).
+   */
+  EXTENSIONS(0x00100000),
+
+  /**
+   * The category that will be used for messages associated with
+   * connection and protocol handling (e.g., ASN.1 and LDAP).
+   */
+  PROTOCOL(0x00200000),
+
+  /**
+   * The category that will be used for messages associated with
+   * configuration handling.
+   */
+  CONFIG(0x00300000),
+
+  /**
+   * The category that will be used for messages associated with the
+   * server loggers.
+   */
+  LOG(0x00400000),
+
+  /**
+   * The category that will be used for messages associated with the
+   * general server utilities.
+   */
+  UTIL(0x00500000),
+
+  /**
+   * The category that will be used for messages associated with the
+   * server schema elements.
+   */
+  SCHEMA(0x00600000),
+
+  /**
+   * The category that will be used for messages associated with plugin
+   * processing.
+   */
+  PLUGIN(0x00700000),
+
+  /**
+   * The category used for messages associated with the JE backend.
+   */
+  JEB(0x00800000),
+
+  /**
+   * The category used for messages associated with generic backends.
+   */
+  BACKEND(0x00900000),
+
+  /**
+   * The category used for messages associated with tools.
+   */
+  TOOLS(0x00A00000),
+
+  /**
+   * The category used for messages associated with tasks.
+   */
+  TASK(0x00B00000),
+
+  /**
+   * The category used for messages associated with Access Control.
+   */
+  ACCESS_CONTROL(0x00C00000),
+
+  /**
+   * The category used for messages associated with the
+   * administration framework.
+   */
+  ADMIN(0x00D00000),
+
+  /**
+   * The category used for messages associated with the Synchronization.
+   */
+  SYNC(0x00E00000),
+
+  /**
+   * The category used for messages associated with version information.
+   */
+  VERSION(0x00F00000),
+
+  /**
+   * The category used for messages associated with quicksetup tools.
+   */
+  QUICKSETUP(0x01000000),
+
+  /**
+   * The category used for messages associated with the status panel.
+   */
+  STATUS_PANEL(0x01100000),
+
+  /**
+   * The category that will be used for messages associated with
+   * third-party (including user-defined) modules.
+   */
+  THIRD_PARTY(0x80000000),
+
+  /**
+   * The category that will be used for messages associated with
+   * user-defined modules.
+   */
+  USER_DEFINED(0xFFF00000);
+
+  static private Map<Integer,Category> MASK_VALUE_MAP;
+
+  static {
+    MASK_VALUE_MAP = new HashMap<Integer,Category>();
+    for (Category c : EnumSet.allOf(Category.class)) {
+      MASK_VALUE_MAP.put(c.mask, c);
+    }
+  }
+
+  /**
+   * Obtains the <code>Severity</code> associated with the the input
+   * message ID <code>msgId</code>.
+   * @param msgId int message ID
+   * @return Severity assocated with the ID
+   */
+  static public Category parseMessageId(int msgId) {
+    return Category.parseMask(msgId & 0xFFF00000);
+  }
+
+  /**
+   * Obtains the <code>Severity</code> associated with a given mask
+   * value.
+   * @param mask for which a <code>Severity</code> is obtained.
+   * @return Severity associated with <code>mask</code>
+   */
+  static public Category parseMask(int mask) {
+    return MASK_VALUE_MAP.get(mask);
+  }
+
+  private int mask;
+
+  /**
+   * Gets the mask value associated with this category.
+   * @return int mask value
+   */
+  public int getMask() {
+    return this.mask;
+  }
+
+  private Category(int intValue) {
+    this.mask = intValue;
+  }
+
+}
diff --git a/opendj-sdk/opends/src/messages/src/org/opends/messages/Message.java b/opendj-sdk/opends/src/messages/src/org/opends/messages/Message.java
new file mode 100644
index 0000000..b5dde16
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/src/org/opends/messages/Message.java
@@ -0,0 +1,359 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.messages;
+
+import java.util.Locale;
+import java.util.Formatter;
+import java.util.Formattable;
+
+/**
+ * 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
+ */
+public class Message implements CharSequence, Formattable, Comparable {
+
+  /** Represents an empty message string. */
+  public static final Message EMPTY = Message.raw("");
+
+  /**
+   * 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>Categore.USER_DEFINED</code> and a severity
+   * of <code>Severity.INFORMATION</code>
+   *
+   * 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) {
+    Message message = null;
+    if (formatString != null) {
+      message = new MessageDescriptor.Raw(formatString).get(args);
+    }
+    return message;
+  }
+
+  /**
+   * Creates an uninternationalized message that will render itself
+   * the same way regardless of the locale requested in
+   * <code>toString(Locale)</code>.
+   *
+   * 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 category of this message
+   * @param severity of this message
+   * @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, Category category,
+                            Severity severity, Object... args) {
+    Message message = null;
+    if (formatString != null) {
+      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.
+   * @param object from which the message will be created
+   * @param arguments for message
+   * @return a message object that will render the same in all locales;
+   *         null if <code>object</code> is null
+   */
+  static public Message raw(Object object, Object... arguments) {
+    Message message = null;
+    if (object != null) {
+      CharSequence cs = object.toString();
+      message = raw(cs, arguments);
+    }
+    return message;
+  }
+
+  /**
+   * 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. */
+  protected MessageDescriptor descriptor;
+
+  /** Values used to replace argument specifiers in the format string. */
+  protected Object[] args;
+
+  /**
+   * Gets the string representation of this message.
+   * @return String representation of this message
+   */
+  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 = descriptor.getFormatString(locale);
+    if (needsFormatting(s)) {
+      s = new Formatter(locale).format(locale, s, args).toString();
+    }
+    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);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public void formatTo(Formatter formatter, int flags,
+                       int width, int precision) {
+    // 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;
+  }
+
+  /**
+   * 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 candiate for formatting
+   * @return boolean where true indicates that the format
+   *         string requires formatting
+   */
+  private boolean needsFormatting(String s) {
+    return s != null && (args != null || s.indexOf('%') > 0);
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public int compareTo(Object o) {
+    Message thatMessage = (Message)o;
+    return toString().compareTo(thatMessage.toString());
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  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());
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public int hashCode() {
+    int result;
+    result = 31 * toString().hashCode();
+    return result;
+  }
+}
diff --git a/opendj-sdk/opends/src/messages/src/org/opends/messages/MessageBuilder.java b/opendj-sdk/opends/src/messages/src/org/opends/messages/MessageBuilder.java
new file mode 100644
index 0000000..0b4f5de
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/src/org/opends/messages/MessageBuilder.java
@@ -0,0 +1,347 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2007 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.
+ */
+public class MessageBuilder implements Appendable, CharSequence,
+        Serializable
+{
+
+  private static final long serialVersionUID = -3292823563904285315L;
+
+  /** Used internally to store appended messages. */
+  StringBuilder sb = new StringBuilder();
+
+  /** Used internally to store appended messages. */
+  List<Message> messages = new LinkedList<Message>();
+
+  /** Used to render the string representation of appended messages. */
+  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) {
+    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) {
+    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 rawString to append
+   * @return reference to this builder
+   */
+  public MessageBuilder append(CharSequence rawString) {
+    if (rawString != null) {
+      sb.append(rawString);
+      messages.add(Message.raw(rawString));
+    }
+    return this;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public MessageBuilder append(CharSequence csq, int start, int end)
+  {
+    return append(csq.subSequence(start, end));
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public MessageBuilder append(char c) {
+    return append(String.valueOf(c));
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  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.
+   *
+   * @return Message raw message representing builder content
+   */
+  public Message toMessage() {
+    return Message.raw(sb.toString());
+  }
+
+  /**
+   * Returns a raw message representation of the appended
+   * content in a 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 Message raw message representing builder content
+   */
+  public Message toMessage(Locale locale) {
+    return Message.raw(toString(locale));
+  }
+
+  /**
+   * 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/opendj-sdk/opends/src/messages/src/org/opends/messages/MessageDescriptor.java b/opendj-sdk/opends/src/messages/src/org/opends/messages/MessageDescriptor.java
new file mode 100644
index 0000000..4dbbdcb
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/src/org/opends/messages/MessageDescriptor.java
@@ -0,0 +1,932 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.messages;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+/**
+ * Base class for all Message descriptor classes.
+ */
+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 arguements.
+   */
+  static public 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;
+
+    /**
+     * 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
+     */
+    public Arg0(String rbBase, String key, Category category,
+              Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+      message = new Message(this);
+    }
+
+    /**
+     * 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
+     */
+    public Arg0(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+      message = new Message(this);
+    }
+
+    /**
+     * Creates a message.
+     * @return Message object
+     */
+    public Message get() {
+      return message;
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with one arguement.
+   */
+  static public 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
+     */
+    public Arg1(String rbBase, String key, Category category,
+              Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg1(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with two arguements.
+   */
+  static public 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
+     */
+    public Arg2(String rbBase, String key, Category category,
+              Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg2(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with three arguements.
+   */
+  static public 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
+     */
+    public Arg3(String rbBase, String key, Category category,
+              Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg3(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with four arguements.
+   */
+  static public 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
+     */
+    public Arg4(String rbBase, String key, Category category,
+              Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg4(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with five arguements.
+   */
+  static public 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
+     */
+    public Arg5(String rbBase, String key, Category category,
+              Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg5(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with six arguements.
+   */
+  static public 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
+     */
+    public Arg6(String rbBase, String key, Category category,
+              Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg6(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with seven arguements.
+   */
+  static public 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
+     */
+    public Arg7(String rbBase, String key, Category category,
+              Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg7(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with eight arguements.
+   */
+  static public 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
+     */
+    public Arg8(String rbBase, String key, Category category,
+              Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg8(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with nine arguements.
+   */
+  static public 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
+     */
+    public Arg9(String rbBase, String key, Category category,
+              Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg9(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with ten arguements.
+   */
+  static public 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
+     */
+    public Arg10(String rbBase, String key, Category category,
+               Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg10(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with eleven arguements.
+   */
+  static public 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
+     */
+    public Arg11(String rbBase, String key, Category category,
+               Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public Arg11(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * Subclass for creating messages with an any number of arguements.
+   * 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
+   */
+  static public 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
+     */
+    public ArgN(String rbBase, String key, Category category,
+               Severity severity, int ordinal) {
+      super(rbBase, key, category, severity, ordinal);
+    }
+
+    /**
+     * 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
+     */
+    public ArgN(String rbBase, String key, int mask,
+              Severity severity, int ordinal) {
+      super(rbBase, key, mask, severity, ordinal);
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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);
+    }
+
+  }
+
+  /**
+   * 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.
+   */
+  static class Raw extends MessageDescriptor {
+
+    private String formatString;
+
+    /**
+     * Creates a parameterized instance.
+     * @param formatString for created messages
+     */
+    Raw(CharSequence formatString) {
+      this(formatString, Category.USER_DEFINED, Severity.INFORMATION);
+    }
+
+    /**
+     * 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);
+      this.formatString = formatString != null ? formatString.toString() : "";
+    }
+
+    /**
+     * Creates a parameterized instance.  Created messages will
+     * have a category of <code>Category.USER_DEFINED</code>.
+     * @param formatString for created messages
+     * @param mask for created messages
+     * @param severity for created messages
+     */
+    Raw(CharSequence formatString, int mask, Severity severity) {
+      super(null, null, mask, severity, null);
+      this.formatString = formatString != null ? formatString.toString() : "";
+    }
+
+    /**
+     * Creates a message with arguments that will replace format
+     * specifiers in the assocated 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;
+    }
+
+  }
+
+  /** String for accessing backing resource bundle. */
+  protected String rbBase;
+
+  /** Used for accessing format string from the resource bundle. */
+  protected String key;
+
+  /** Category for messages created by this descriptor. */
+  protected 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>.
+   */
+  protected Integer mask;
+
+  /**
+   * The severity associated with messages created by this
+   * descriptor.
+   */
+  protected Severity severity;
+
+  /**
+   * The value that makes a message unique among other messages
+   * having the same severity and category.  May be null for
+   * raw messages.
+   */
+  protected Integer ordinal;
+
+  /**
+   * Obtains the category of this descriptor.  Gauranteed not to be null.
+   * @return Category of this message
+   */
+  public Category getCategory() {
+    return this.category;
+  }
+
+  /**
+   * Obtains the severity of this descriptor.  Gauranteed not to be null.
+   * @return Category of this message
+   */
+  public 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 int getOrdinal() {
+    return this.ordinal;
+  }
+
+  /**
+   * Returns the ID unique to all OpenDS messages.
+   * @return unique ID
+   */
+  public 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 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 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 String getBase() {
+    return this.rbBase;
+  }
+
+  /**
+   * 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) {
+    ResourceBundle bundle = getBundle(locale);
+    return bundle.getString(this.key);
+  }
+
+  private ResourceBundle getBundle(Locale locale) {
+    if (locale == null) locale = Locale.getDefault();
+    return ResourceBundle.getBundle(this.rbBase, locale);
+  }
+
+  /**
+   * 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
+   */
+  private MessageDescriptor(String rbBase, String key, Category category,
+                     Severity severity, Integer ordinal) {
+    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;
+  }
+
+  /**
+   * 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
+   */
+  private MessageDescriptor(String rbBase, String key, int mask,
+                     Severity severity, Integer ordinal) {
+    this(rbBase, key, Category.USER_DEFINED, severity, ordinal);
+    this.mask = mask;
+  }
+
+
+}
diff --git a/opendj-sdk/opends/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java b/opendj-sdk/opends/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java
new file mode 100644
index 0000000..eb5e7ac
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java
@@ -0,0 +1,98 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.messages;
+
+import java.util.Map;
+import java.util.HashMap;
+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
+ * descriptors by ID.
+ */
+public class MessageDescriptorRegistry {
+
+  private static final String REGISTRY_FILE = "descriptors.reg";
+
+  private static final Map<Integer, MessageDescriptor>
+          ID_TO_DESCRIPTORS =
+                  new HashMap<Integer,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);
+          Field[] fa = descClass.getFields();
+          if (fa != null) {
+            for (Field f : fa) {
+              Class<?> c = f.getDeclaringClass();
+              if (c.isAssignableFrom(MessageDescriptor.class)) {
+                MessageDescriptor md = (MessageDescriptor)f.get(null);
+                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);
+  }
+
+}
diff --git a/opendj-sdk/opends/src/messages/src/org/opends/messages/Severity.java b/opendj-sdk/opends/src/messages/src/org/opends/messages/Severity.java
new file mode 100644
index 0000000..df75775
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/src/org/opends/messages/Severity.java
@@ -0,0 +1,193 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.messages;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.EnumSet;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Collections;
+
+/**
+ * Defines values for message severity.  Severities contain an
+ * integer value that can be used for bitwise operations as well
+ * as a short abbreviated string form of each value.
+ */
+public enum Severity {
+
+  /**
+   * The severity that will be used for informational messages.
+   */
+  INFORMATION(0x00000000, "INFO", "INFO"),
+
+  /**
+   * The severity that will be used for mild warning messages.
+   */
+  MILD_WARNING(0x00010000, "MILD_WARN", "WARN"),
+
+  /**
+   * The severity that will be used for severe warning messages.
+   */
+  SEVERE_WARNING(0x00020000, "SEVERE_WARN", "WARN"),
+
+  /**
+   * The severity that will be used for mild error messages.
+   */
+  MILD_ERROR(0x00030000, "MILD_ERR", "ERR"),
+
+  /**
+   * The severity that will be used for severe error messages.
+   */
+  SEVERE_ERROR(0x00040000, "SEVERE_ERR", "ERR"),
+
+  /**
+   * The severity that will be used for fatal error messages.
+   */
+  FATAL_ERROR(0x00050000, "FATAL_ERR", "ERR"),
+
+  /**
+   * The severity that will be used for debug messages.
+   */
+  DEBUG(0x00060000, "DEBUG", "DEBUG"),
+
+  /**
+   * The severity that will be used for important informational
+   * messages.
+   */
+  NOTICE(0x00070000, "NOTICE", "NOTE");
+
+  static private Set<String> PROPERTY_KEY_FORM_VALUES_SET;
+
+  static private Map<String,Severity> PROPERTY_KEY_FORM_MAP;
+
+  static private Map<Integer,Severity> MASK_VALUE_MAP;
+
+  static {
+    MASK_VALUE_MAP = new HashMap<Integer,Severity>();
+    for (Severity c : EnumSet.allOf(Severity.class)) {
+      MASK_VALUE_MAP.put(c.mask, c);
+    }
+  }
+
+  static {
+    PROPERTY_KEY_FORM_MAP = new HashMap<String,Severity>();
+    PROPERTY_KEY_FORM_VALUES_SET = new HashSet<String>();
+    for (Severity s : EnumSet.allOf(Severity.class)) {
+      PROPERTY_KEY_FORM_MAP.put(s.propertyKeyFormName(), s);
+      PROPERTY_KEY_FORM_VALUES_SET.add(s.propertyKeyFormName());
+    }
+  }
+
+  /**
+   * Returns a set of string representing all <code>Severitys'</code>
+   * abbreviated representations.
+   * @return set of messageDescriptorForm strings
+   */
+  static public Set<String> getPropertyKeyFormSet() {
+    return Collections.unmodifiableSet(PROPERTY_KEY_FORM_VALUES_SET);
+  }
+
+  /**
+   * Obtains the <code>Severity</code> associated with a given mask
+   * value.
+   * @param mask for which a <code>Severity</code> is obtained.
+   * @return Severity associated with <code>mask</code>
+   */
+  static public Severity parseMask(int mask) {
+    Severity sev = MASK_VALUE_MAP.get(mask);
+    if (sev == null) {
+      throw new IllegalArgumentException(
+              "No Severity defined with int value " + mask);
+    }
+    return sev;
+  }
+
+  /**
+   * Returns the <code>Severity</code> associated with the input
+   * string <code>s</code> which can either be a severity's name
+   * or messageDescriptorForm.
+   * @param s Severity name or messageDescriptorForm
+   * @return Severity assocated with <code>s</code>
+   */
+  static public Severity parseString(String s) {
+    Severity sev = PROPERTY_KEY_FORM_MAP.get(s);
+    if (sev == null) {
+      sev = valueOf(s);
+    }
+    return sev;
+  }
+
+  /**
+   * Obtains the <code>Severity</code> associated with the the input
+   * message ID <code>msgId</code>.
+   * @param msgId int message ID
+   * @return Severity assocated with the ID
+   */
+  static public Severity parseMessageId(int msgId) {
+    return parseMask(msgId & 0x000F0000);
+  }
+
+  private int mask;
+  private String propertyKeyForm;
+  private String messageDescriptorForm;
+
+  /**
+   * Returns the mask associated with this <code>Severity</code>.
+   * @return mask for this severity
+   */
+  public int getMask() {
+    return mask;
+  }
+
+  /**
+   * Gets the abbreviated form of this <code>Severity</code>.
+   * @return String abbreviated form
+   */
+  public String messageDesciptorName() {
+    return messageDescriptorForm;
+  }
+
+  /**
+   * Gets the name of this severity as it must appear in the
+   * property key name in a messages file.
+   *
+   * @return name of this severity
+   */
+  public String propertyKeyFormName() {
+    return propertyKeyForm;
+  }
+
+  private Severity(int mask, String propertyKeyForm,
+                   String messageDescriptorName) {
+    this.mask = mask;
+    this.propertyKeyForm = propertyKeyForm;
+    this.messageDescriptorForm = messageDescriptorName;
+  }
+
+}
diff --git a/opendj-sdk/opends/src/messages/src/org/opends/messages/package-info.java b/opendj-sdk/opends/src/messages/src/org/opends/messages/package-info.java
new file mode 100644
index 0000000..db6e11e
--- /dev/null
+++ b/opendj-sdk/opends/src/messages/src/org/opends/messages/package-info.java
@@ -0,0 +1,43 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ */
+
+
+
+/**
+ * Defines all the messages that may be used in the Directory Server and tools.
+ * Localizable message format strings are stored in properties files and are
+ * used to generate <code>MessageDescriptor</code>s at build time.  Descriptors
+ * sepcify a category, severity, and ordinal value that is unique to other
+ * messages of the same category.  For the server in particular, these
+ * three values form an ID that is unique among all messages in OpenDS system.
+ * Descriptors also specify a key that is used to access the locale-sensitive
+ * format string from the property file that may also contain argument
+ * specifiers that are used to parameterize messages according to the rules of
+ * <code>java.util.Formatter</code>.
+ */
+package org.opends.messages;
+
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Application.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Application.java
index 327d4c8..03641cf 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Application.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Application.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+
 import org.opends.admin.ads.ADSContext;
 import org.opends.admin.ads.ServerDescriptor;
 import org.opends.admin.ads.TopologyCacheException;
@@ -35,11 +38,12 @@
 import org.opends.quicksetup.event.ProgressNotifier;
 import org.opends.quicksetup.event.ProgressUpdateListener;
 import org.opends.quicksetup.util.ServerController;
-import org.opends.quicksetup.util.Utils;
 import org.opends.quicksetup.util.ProgressMessageFormatter;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.ui.GuiApplication;
 
+import static org.opends.messages.QuickSetupMessages.*;
+import static org.opends.quicksetup.util.Utils.*;
+
 import java.io.PrintStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -216,7 +220,7 @@
   public void notifyListenersDone(Integer ratioWhenCompleted) {
     notifyListeners(ratioWhenCompleted,
             getSummary(getCurrentProgressStep()),
-            formatter.getFormattedDone() + formatter.getLineBreak());
+            getFormattedDoneWithLineBreak());
   }
 
   /**
@@ -229,8 +233,8 @@
    * @param newLogDetail the new log messages that we have for the
    * installation in formatted form.
    */
-  public void notifyListeners(Integer ratio, String currentPhaseSummary,
-      String newLogDetail)
+  public void notifyListeners(Integer ratio, Message currentPhaseSummary,
+      Message newLogDetail)
   {
     listenerDelegate.notifyListeners(getCurrentProgressStep(),
             ratio, currentPhaseSummary, newLogDetail);
@@ -244,80 +248,12 @@
    * @param currentPhaseSummary the localized summary message for the
    * current installation progress in formatted form.
    */
-  public void notifyListeners(Integer ratio, String currentPhaseSummary) {
+  public void notifyListeners(Integer ratio, Message currentPhaseSummary) {
     notifyListeners(ratio, getSummary(getCurrentProgressStep()),
         formatter.getFormattedWithPoints(currentPhaseSummary));
   }
 
   /**
-   * Returns a localized message for a key value.  In  the properties file we
-   * have something of type:
-   * key=value
-   *
-   * @see org.opends.quicksetup.i18n.ResourceProvider#getMsg(String)
-   * @param key the key in the properties file.
-   * @return the value associated to the key in the properties file.
-   * properties file.
-   */
-  public String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  /**
-   * Returns a localized message for a key value.  In  the properties file we
-   * have something of type:
-   * key=value
-   *
-   * For instance if we pass as key "mykey" and as arguments {"value1"} and
-   * in the properties file we have:
-   * mykey=value with argument {0}.
-   *
-   * This method will return "value with argument value1".
-   * @see org.opends.quicksetup.i18n.ResourceProvider#getMsg(String, String[])
-   * @param key the key in the properties file.
-   * @param args the arguments to be passed to generate the resulting value.
-   * @return the value associated to the key in the properties file.
-   */
-  public String getMsg(String key, String... args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  /**
-   * Returns a ResourceProvider instance.
-   * @return a ResourceProvider instance.
-   */
-  public ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
-  /**
-   * Returns a localized message for a given properties key and throwable.
-   * @param key the key of the message in the properties file.
-   * @param t the throwable for which we want to get a message.
-   * @return a localized message for a given properties key and throwable.
-   */
-  public String getThrowableMsg(String key, Throwable t)
-  {
-    return getThrowableMsg(key, null, t);
-  }
-
-  /**
-   * Returns a localized message for a given properties key and throwable.
-   * @param key the key of the message in the properties file.
-   * @param args the arguments of the message in the properties file.
-   * @param t the throwable for which we want to get a message.
-   *
-   * @return a localized message for a given properties key and throwable.
-   */
-  protected String getThrowableMsg(String key, String[] args, Throwable t)
-  {
-    return Utils.getThrowableMsg(getI18n(), key, args, t);
-  }
-
-  /**
    * Sets the formatter this instance should use to used
    * to format progress messages.
    * @param formatter ProgressMessageFormatter for formatting
@@ -345,29 +281,71 @@
    * representation
    * @return the formatted representation of an error for the given text.
    */
-  protected String getFormattedSummary(String text)
+  protected Message getFormattedSummary(Message text)
   {
     return formatter.getFormattedSummary(text);
   }
 
   /**
+   * Returns the formatted text string 'Error' with a line break at the end.
+   * @return formatted 'Error'
+   */
+  protected Message getFormattedErrorWithLineBreak() {
+    return new MessageBuilder(formatter.getFormattedError())
+            .append(formatter.getLineBreak()).toMessage();
+  }
+
+  /**
    * Returns the formatted representation of an error for a given text.
    * @param text the source text from which we want to get the formatted
    * representation
    * @return the formatted representation of an error for the given text.
    */
-  protected String getFormattedError(String text)
+  protected Message getFormattedError(Message text)
   {
     return formatter.getFormattedError(text, false);
   }
 
   /**
+   * Returns the formatted representation of an error message for a given
+   * exception.
+   * This method applies a margin if the applyMargin parameter is
+   * <CODE>true</CODE>.
+   * @param m the exception.
+   * @param b specifies whether we apply a margin or not to the
+   * resulting formatted text.
+   * @return the formatted representation of an error message for the given
+   * exception.
+   */
+  protected Message getFormattedErrorWithLineBreak(Message m, boolean b) {
+    return new MessageBuilder(formatter.getFormattedError(m,b))
+            .append(formatter.getLineBreak()).toMessage();
+  }
+
+  /**
+   * Returns the formatted representation of an error message for a given
+   * exception.
+   * This method applies a margin if the applyMargin parameter is
+   * <CODE>true</CODE>.
+   * @param t the exception.
+   * @param b specifies whether we apply a margin or not to the
+   * resulting formatted text.
+   * @return the formatted representation of an error message for the given
+   * exception.
+   */
+  protected Message getFormattedErrorWithLineBreak(Throwable t, boolean b) {
+    return new MessageBuilder(formatter.getFormattedError(t,b))
+            .append(formatter.getLineBreak()).toMessage();
+  }
+
+
+  /**
    * Returns the formatted representation of an warning for a given text.
    * @param text the source text from which we want to get the formatted
    * representation
    * @return the formatted representation of an warning for the given text.
    */
-  public String getFormattedWarning(String text)
+  public Message getFormattedWarning(Message text)
   {
     return formatter.getFormattedWarning(text, false);
   }
@@ -379,7 +357,7 @@
    * @return the formatted representation of an success message for the given
    * text.
    */
-  protected String getFormattedSuccess(String text)
+  protected Message getFormattedSuccess(Message text)
   {
     return formatter.getFormattedSuccess(text);
   }
@@ -392,7 +370,7 @@
    * @return the formatted representation of a log error message for the given
    * text.
    */
-  public String getFormattedLogError(String text)
+  public Message getFormattedLogError(Message text)
   {
     return formatter.getFormattedLogError(text);
   }
@@ -403,7 +381,7 @@
    * representation
    * @return the formatted representation of a log message for the given text.
    */
-  public String getFormattedLog(String text)
+  public Message getFormattedLog(Message text)
   {
     return formatter.getFormattedLog(text);
   }
@@ -412,9 +390,19 @@
    * Returns the formatted representation of the 'Done' text string.
    * @return the formatted representation of the 'Done' text string.
    */
-  public String getFormattedDone()
+  public Message getFormattedDone()
   {
-    return formatter.getFormattedDone();
+    return Message.raw(formatter.getFormattedDone());
+  }
+
+  /**
+   * Returns the formatted representation of the 'Done' text string
+   * with a line break at the end.
+   * @return the formatted representation of the 'Done' text string.
+   */
+  public Message getFormattedDoneWithLineBreak() {
+    return new MessageBuilder(formatter.getFormattedDone())
+            .append(formatter.getLineBreak()).toMessage();
   }
 
   /**
@@ -424,7 +412,7 @@
    * @param text the String to which add points.
    * @return the formatted representation of the '.....' text string.
    */
-  public String getFormattedWithPoints(String text)
+  public Message getFormattedWithPoints(Message text)
   {
     return formatter.getFormattedWithPoints(text);
   }
@@ -437,12 +425,26 @@
    * @return the formatted representation of a progress message for the given
    * text.
    */
-  public String getFormattedProgress(String text)
+  public Message getFormattedProgress(Message text)
   {
     return formatter.getFormattedProgress(text);
   }
 
   /**
+   * Returns the formatted representation of a progress message for a given
+   * text with a line break.
+   * @param text the source text from which we want to get the formatted
+   * representation
+   * @return the formatted representation of a progress message for the given
+   * text.
+   */
+  public Message getFormattedProgressWithLineBreak(Message text)
+  {
+    return new MessageBuilder(formatter.getFormattedProgress(text))
+            .append(getLineBreak()).toMessage();
+  }
+
+  /**
    * Returns the formatted representation of an error message for a given
    * exception.
    * This method applies a margin if the applyMargin parameter is
@@ -453,16 +455,32 @@
    * @return the formatted representation of an error message for the given
    * exception.
    */
-  protected String getFormattedError(Throwable t, boolean applyMargin)
+  protected Message getFormattedError(Throwable t, boolean applyMargin)
   {
     return formatter.getFormattedError(t, applyMargin);
   }
 
   /**
+   * Returns the formatted representation of an error message for a given
+   * exception.
+   * This method applies a margin if the applyMargin parameter is
+   * <CODE>true</CODE>.
+   * @param m the message.
+   * @param applyMargin specifies whether we apply a margin or not to the
+   * resulting formatted text.
+   * @return the formatted representation of an error message for the given
+   * exception.
+   */
+  protected Message getFormattedError(Message m, boolean applyMargin)
+  {
+    return formatter.getFormattedError(m, applyMargin);
+  }
+
+  /**
    * Returns the line break formatted.
    * @return the line break formatted.
    */
-  public String getLineBreak()
+  public Message getLineBreak()
   {
     return formatter.getLineBreak();
   }
@@ -471,7 +489,7 @@
    * Returns the task separator formatted.
    * @return the task separator formatted.
    */
-  protected String getTaskSeparator()
+  protected Message getTaskSeparator()
   {
     return formatter.getTaskSeparator();
   }
@@ -481,10 +499,10 @@
    * notify the ProgressUpdateListeners of this fact.
    * @param newLogDetail the new log detail.
    */
-  public void notifyListeners(String newLogDetail)
+  public void notifyListeners(Message newLogDetail)
   {
     Integer ratio = getRatio(getCurrentProgressStep());
-    String currentPhaseSummary = getSummary(getCurrentProgressStep());
+    Message currentPhaseSummary = getSummary(getCurrentProgressStep());
     notifyListeners(ratio, currentPhaseSummary, newLogDetail);
   }
 
@@ -515,7 +533,7 @@
    * @param step ProgressStop for which a summary is needed
    * @return String representing the summary
    */
-  public abstract String getSummary(ProgressStep step);
+  public abstract Message getSummary(ProgressStep step);
 
   /**
    * Sets the current install status for this application.
@@ -596,10 +614,10 @@
   protected void notifyListenersOfLog() {
     File logFile = QuickSetupLog.getLogFile();
     if (logFile != null) {
-      notifyListeners(
-          getFormattedProgress(getMsg("general-see-for-details",
-              logFile.getPath())) +
-          formatter.getLineBreak());
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(INFO_GENERAL_SEE_FOR_DETAILS.get(logFile.getPath()));
+      mb.append(formatter.getLineBreak());
+      notifyListeners(mb.toMessage());
     }
   }
 
@@ -623,7 +641,7 @@
               HistoricalRecord.Status.STARTED,
               "log file '" + QuickSetupLog.getLogFile().getPath() + "'");
     } catch (IOException e) {
-      String msg = getMsg("error-logging-operation");
+      Message msg = INFO_ERROR_LOGGING_OPERATION.get();
       throw ApplicationException.createFileSystemException(
               msg, e);
     }
@@ -653,7 +671,7 @@
               new HistoricalLog(getInstallation().getHistoryLogFile());
       log.append(id, from, to, status, note);
     } catch (IOException e) {
-      String msg = getMsg("error-logging-operation");
+      Message msg = INFO_ERROR_LOGGING_OPERATION.get();
       throw ApplicationException.createFileSystemException(msg, e);
     }
   }
@@ -665,22 +683,23 @@
    */
   protected String getStringRepresentation(TopologyCacheException e)
   {
-    StringBuilder buf = new StringBuilder();
+    MessageBuilder buf = new MessageBuilder();
 
     String ldapUrl = e.getLdapUrl();
     if (ldapUrl != null)
     {
       String hostName = ldapUrl.substring(ldapUrl.indexOf("://") + 3);
-      buf.append(getMsg("server-error", hostName) + " ");
+      buf.append(INFO_SERVER_ERROR.get(hostName));
+      buf.append(" ");
     }
     if (e.getCause() instanceof NamingException)
     {
-      buf.append(getThrowableMsg("bug-msg", null, e.getCause()));
+      buf.append(getThrowableMsg(INFO_BUG_MSG.get(), e.getCause()));
     }
     else
     {
       // This is unexpected.
-      buf.append(getThrowableMsg("bug-msg", null, e.getCause()));
+      buf.append(getThrowableMsg(INFO_BUG_MSG.get(), e.getCause()));
     }
     return buf.toString();
   }
@@ -713,7 +732,7 @@
     }
     catch (NamingException ne)
     {
-      String errorMessage = getMsg("cannot-connect-to-remote-generic",
+      Message errorMessage = INFO_CANNOT_CONNECT_TO_REMOTE_GENERIC.get(
           server.getHostPort(true), ne.toString(true));
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR, errorMessage,
@@ -749,15 +768,18 @@
     /**
      * {@inheritDoc}
      */
-    public void println(String msg)
+    public void println(Message msg)
     {
+      MessageBuilder mb = new MessageBuilder();
       if (isFirstLine)
       {
-        notifyListeners(getFormattedLogError(msg));
+        mb.append(getFormattedLogError(msg));
       } else
       {
-        notifyListeners(formatter.getLineBreak() + getFormattedLogError(msg));
+        mb.append(formatter.getLineBreak());
+        mb.append(getFormattedLogError(msg));
       }
+      notifyListeners(mb.toMessage());
       isFirstLine = false;
     }
 
@@ -808,15 +830,18 @@
     /**
      * {@inheritDoc}
      */
-    public void println(String msg)
+    public void println(Message msg)
     {
+      MessageBuilder mb = new MessageBuilder();
       if (isFirstLine)
       {
-        notifyListeners(getFormattedLog(msg));
+        mb.append(getFormattedLog(Message.raw(msg)));
       } else
       {
-        notifyListeners(formatter.getLineBreak() + getFormattedLog(msg));
+        mb.append(formatter.getLineBreak());
+        mb.append(getFormattedLog(Message.raw(msg)));
       }
+      notifyListeners(mb.toMessage());
       isFirstLine = false;
     }
 
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ApplicationException.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ApplicationException.java
index cdae856..63b1832 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ApplicationException.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ApplicationException.java
@@ -26,7 +26,9 @@
  */
 
 package org.opends.quicksetup;
+import org.opends.messages.Message;
 
+import org.opends.server.types.OpenDsException;
 import static org.opends.quicksetup.ApplicationReturnCode.ReturnCode;
 
 /**
@@ -38,11 +40,9 @@
  * @see org.opends.quicksetup.installer.offline.OfflineInstaller
  *
  */
-public class ApplicationException extends Exception
-{
-  private static final long serialVersionUID = -3527273444231560341L;
+public class ApplicationException extends OpenDsException {
 
-  private String formattedMsg = null;
+  private static final long serialVersionUID = -3527273444231560341L;
 
   private ReturnCode type;
 
@@ -52,7 +52,7 @@
    * @param e Exception cause
    * @return ApplicationException with Type property being FILE_SYSTEM_ERROR
    */
-  public static ApplicationException createFileSystemException(String msg,
+  public static ApplicationException createFileSystemException(Message msg,
       Exception e)
   {
     return new ApplicationException(ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
@@ -69,7 +69,7 @@
    * @param rootCause
    *          the root cause of this exception.
    */
-  public ApplicationException(ReturnCode type, String localizedMsg,
+  public ApplicationException(ReturnCode type, Message localizedMsg,
                               Throwable rootCause)
   {
     super(localizedMsg, rootCause);
@@ -77,21 +77,6 @@
   }
 
   /**
-   * The constructor of the ApplicationException.
-   * @param type the type of error we have.
-   * @param localizedMsg a localized string describing the problem.
-   * @param formattedMsg a localized message with extra formatting
-   * @param rootCause the root cause of this exception.
-   */
-  public ApplicationException(ReturnCode type, String localizedMsg,
-                              String formattedMsg, Throwable rootCause)
-  {
-    super(localizedMsg, rootCause);
-    this.formattedMsg = formattedMsg;
-    this.type = type;
-  }
-
-  /**
    * Returns the Type of this exception.
    * @return the Type of this exception.
    */
@@ -101,14 +86,6 @@
   }
 
   /**
-   * Gets the localized message with extra formatting markup.
-   * @return String representing a formatted message.
-   */
-  public String getFormattedMessage() {
-    return formattedMsg;
-  }
-
-  /**
    * {@inheritDoc}
    */
   public String toString()
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/BuildInformation.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/BuildInformation.java
index 81be967..c079645 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/BuildInformation.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/BuildInformation.java
@@ -27,8 +27,9 @@
 
 package org.opends.quicksetup;
 
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.util.Utils;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.server.util.DynamicConstants;
 
 import java.util.HashMap;
@@ -115,7 +116,7 @@
     } catch (IOException e) {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.START_ERROR,
-          getMsg("error-creating-build-info"), e);
+          INFO_ERROR_CREATING_BUILD_INFO.get(), e);
     } finally {
       if (is != null) {
         try {
@@ -329,8 +330,7 @@
     String id = getBuildId();
     if (id != null) {
       sb.append(" (")
-              .append(ResourceProvider.getInstance().
-                      getMsg("general-build-id"))
+              .append(INFO_GENERAL_BUILD_ID.get())
               .append(": ")
               .append(id)
               .append(")");
@@ -389,15 +389,11 @@
     for (String prop : props) {
       if (null == values.get(prop)) {
         throw new ApplicationException(
-            ApplicationReturnCode.ReturnCode.TOOL_ERROR, getMsg(
-                "error-prop-value", prop), null);
+                ApplicationReturnCode.ReturnCode.TOOL_ERROR,
+                INFO_ERROR_PROP_VALUE.get(prop), null);
       }
     }
 
   }
 
-  static private String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplicationHelper.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplicationHelper.java
index 536ca94..89be10e 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplicationHelper.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliApplicationHelper.java
@@ -27,8 +27,11 @@
 
 package org.opends.quicksetup;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.util.Utils;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.server.util.args.ArgumentParser;
 import org.opends.server.util.args.ArgumentException;
 import org.opends.server.util.args.BooleanArgument;
@@ -51,6 +54,9 @@
   static private final Logger LOG =
           Logger.getLogger(CliApplication.class.getName());
 
+  /** Format string used for deriving the console prompt. */
+  static public final String PROMPT_FORMAT = "%s%n[%s]:";
+
   /** Short form of the option for specifying a noninteractive session. */
   static public final Character SILENT_OPTION_SHORT = 's';
 
@@ -74,38 +80,37 @@
    * message until the user provides one of the values in the validValues
    * parameter.
    *
-   * @param  formatKey     Key for access the prompts format string from the
-   *                       bundle
    * @param  prompt        The prompt to present to the user.
    * @param  defaultValue  The default value returned if the user clicks enter.
    * @param  validValues   The valid values that can be accepted as user input.
    *
    * @return The string value read from the user.
    */
-  protected String promptConfirm(String formatKey, String prompt,
-                                 String defaultValue,
-                                 String[] validValues) {
+  protected Message promptConfirm(Message prompt,
+                                  Message defaultValue,
+                                  Message[] validValues) {
 
     System.out.println();
 
     boolean isValid = false;
-    String response = null;
+    Message response = null;
     while (!isValid)
     {
-      String msg = getMsg(formatKey,
-          new String[] {prompt, defaultValue});
+
+      Message msg = Message.raw(PROMPT_FORMAT, prompt, defaultValue);
 
       System.out.print(msg);
       System.out.flush();
 
-      response = readLine();
+      response = Message.raw(readLine());
       if (response.equals(""))
       {
         response = defaultValue;
       }
       for (int i=0; i<validValues.length && !isValid; i++)
       {
-        isValid = validValues[i].equalsIgnoreCase(response);
+        isValid = validValues[i].toString().
+                equalsIgnoreCase(response.toString());
       }
     }
     return response;
@@ -124,7 +129,7 @@
    *
    * @return  The string value read from the user.
    */
-  protected String promptForString(String prompt, String defaultValue) {
+  protected String promptForString(Message prompt, String defaultValue) {
     System.out.println();
     String wrappedPrompt = StaticUtils.wrapText(prompt,
             Utils.getCommandLineMaxLineWidth());
@@ -145,7 +150,7 @@
       String response = readLine();
       if (response.equals("")) {
         if (defaultValue == null) {
-          String message = getMsg("error-empty-response");
+          Message message = INFO_ERROR_EMPTY_RESPONSE.get();
           System.err.println(StaticUtils.wrapText(message,
                   Utils.getCommandLineMaxLineWidth()));
         } else {
@@ -212,8 +217,7 @@
     }
     catch (Exception e)
     {
-      err.println(getMsg("cli-uninstall-error-reading-stdin"));
-
+      err.println(INFO_CLI_ERROR_READING_STDIN.get());
       return null;
     }
   }
@@ -252,22 +256,25 @@
                                  String[] args,
                                  Set<String> validArgs) throws UserDataException
   {
-    ArrayList<String> errors = new ArrayList<String>();
+    ArrayList<Message> errors = new ArrayList<Message>();
 
     for (String arg1 : args) {
       if (validArgs.contains(arg1)) {
         // Ignore
       } else {
-        String[] arg = {arg1};
-        errors.add(getMsg("cli-uninstall-unknown-argument", arg));
+        errors.add(INFO_CLI_UNKNOWN_ARGUMENT.get(arg1));
       }
     }
 
     if (errors.size() > 0)
     {
-      String msg = Utils.getStringFromCollection(errors,
-          Constants.LINE_SEPARATOR+Constants.LINE_SEPARATOR);
-      throw new UserDataException(null, msg);
+      MessageBuilder mb = new MessageBuilder();
+      for (Message error : errors) {
+        mb.append(error);
+        mb.append(Constants.LINE_SEPARATOR);
+        mb.append(Constants.LINE_SEPARATOR);
+      }
+      throw new UserDataException(null, mb.toMessage());
     }
   }
 
@@ -301,11 +308,11 @@
    * @param description localized description of the tool
    * @param caseSensitive whether long args are case sensitive
    * @return ArgumentParser ready for app specific customization
-   * @see org.opends.server.util.args.ArgumentParser#ArgumentParser(
-          String, String, boolean)
+   * @see org.opends.server.util.args.ArgumentParser#ArgumentParser(String,
+   *      Message,boolean)
    */
   protected ArgumentParser createArgumentParser(String mainClass,
-                                                String description,
+                                                Message description,
                                                 boolean caseSensitive) {
 
     // TODO: get rid of this method and user launcher.getArgumentParser
@@ -321,14 +328,14 @@
            new BooleanArgument("noninteractive session",
                    INTERACTIVE_OPTION_SHORT,
                    INTERACTIVE_OPTION_LONG,
-                   0);
+                   null);
       argParser.addArgument(interactiveArg);
 
       silentArg =
            new BooleanArgument("silent session",
                    SILENT_OPTION_SHORT,
                    SILENT_OPTION_LONG,
-                   0);
+                   null);
       argParser.addArgument(silentArg);
 
     } catch (ArgumentException e) {
@@ -338,37 +345,4 @@
     return argParser;
   }
 
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   * @param key String key
-   * @return String message
-   */
-  protected String getMsg(String key)
-  {
-    return org.opends.server.util.StaticUtils.wrapText(getI18n().getMsg(key),
-        Utils.getCommandLineMaxLineWidth());
-  }
-
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   * @param key String key
-   * @param args String[] args
-   * @return String message
-   */
-  protected String getMsg(String key, String... args)
-  {
-    return org.opends.server.util.StaticUtils.wrapText(
-        getI18n().getMsg(key, args), Utils.getCommandLineMaxLineWidth());
-  }
-
-  /**
-   * Gets the resource provider instance.
-   * @return ResourceProvider instance
-   */
-  protected ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java
index 06774c8..544b0a0 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.util.StaticUtils;
 
@@ -69,44 +72,47 @@
   /**
    * {@inheritDoc}
    */
-  public Object confirm(String summary, String details,
-                        String title, MessageType type, String[] options,
-                        String def) {
+  public Object confirm(Message summary, Message details,
+                        Message title, MessageType type, Message[] options,
+                        Message def) {
     return confirm(summary, details, null, title, type, options, def, null);
   }
 
   /**
    * {@inheritDoc}
    */
-  public Object confirm(String summary, String details, String fineDetails,
-                        String title, MessageType type, String[] options,
-                        String def, String viewDetailsOption) {
+  public Object confirm(Message summary, Message details, Message fineDetails,
+                        Message title, MessageType type, Message[] options,
+                        Message def, Message viewDetailsOption) {
     List<String> sOptions = new ArrayList<String>();
     int defInt = -1;
     for (int i = 0; i < options.length; i++) {
-      sOptions.add(createOption(i + 1, options[i]));
+      sOptions.add(createOption(i + 1, options[i].toString()));
       if (options[i].equals(def)) {
         defInt = i + 1;
       }
     }
     if (fineDetails != null) {
       sOptions.add(createOption(options.length + 1,
-              viewDetailsOption != null ? viewDetailsOption : "View Details"));
+              viewDetailsOption != null ?
+                      viewDetailsOption.toString() :
+                      "View Details")); // TODO: i18n
     }
 
-    println(summary);
+    println(String.valueOf(summary));
     println();
-    println(details);
+    println(String.valueOf(details));
 
-    String returnValue = null;
+    Object returnValue = null;
     while (returnValue == null) {
       println();
       for (String o : sOptions) {
         println(o);
       }
-      System.out.print(getMsg("cli-uninstall-confirm-prompt",
-              "Enter a number or press Enter to accept the default",
-              Integer.toString(defInt)));
+      System.out.print( // TODO: i18n
+              Message.raw(CliUserInteraction.PROMPT_FORMAT,
+                      "Enter a number or press Enter to accept the default",
+                      Integer.toString(defInt)));
 
       System.out.flush();
 
@@ -122,11 +128,11 @@
         }
       }
       if (fineDetails != null && respInt == options.length + 1) {
-        println(fineDetails);
+        println(String.valueOf(fineDetails));
       } else if (respInt > 0 && respInt <= options.length) {
         returnValue = options[respInt - 1];
       } else {
-        println("Illegal response " + response);
+        println("Illegal response " + response); // TODO: i18n
       }
     }
     return returnValue;
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java
index 6c7a61e..d806213 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java
@@ -27,13 +27,16 @@
 
 package org.opends.quicksetup;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.util.Utils;
 
 /**
@@ -55,7 +58,7 @@
 
   private boolean canOverwriteCurrentInstall;
 
-  private String installationMsg;
+  private Message installationMsg;
 
   /**
    * The constructor of a CurrentInstallStatus object.
@@ -70,47 +73,48 @@
     {
       Installation installation = Installation.getLocal();
       boolean dbFileExists = false;
-      ArrayList<String> msgs = new ArrayList<String>();
+      ArrayList<Message> msgs = new ArrayList<Message>();
 
       if (installation.getStatus().isServerRunning())
       {
-        msgs.add(getMsg("installstatus-serverrunning", new String[]
-            { String.valueOf(getPort()) }));
+        msgs.add(INFO_INSTALLSTATUS_SERVERRUNNING.get(
+                String.valueOf(getPort())));
       }
 
       if (dbFilesExist())
       {
         dbFileExists = true;
-        msgs.add(getMsg("installstatus-dbfileexist"));
+        msgs.add(INFO_INSTALLSTATUS_DBFILEEXIST.get());
       }
 
       if (isConfigFileModified())
       {
-        msgs.add(getMsg("installstatus-configfilemodified"));
+        msgs.add(INFO_INSTALLSTATUS_CONFIGFILEMODIFIED.get());
       }
       canOverwriteCurrentInstall = (msgs.size() == 1) && dbFileExists;
       isInstalled = msgs.size() > 0;
       if (canOverwriteCurrentInstall)
       {
         installationMsg =
-          getMsg("installstatus-canoverwritecurrentinstall-msg");
+          INFO_INSTALLSTATUS_CANOVERWRITECURRENTINSTALL_MSG.get();
       }
       else if (isInstalled)
       {
-        StringBuilder buf = new StringBuilder();
+        MessageBuilder buf = new MessageBuilder();
         buf.append("<ul>");
-        for (String msg : msgs)
+        for (Message msg : msgs)
         {
-          buf.append("\n<li>").append(msg).append("</li>");
+          buf.append("\n<li>");
+          buf.append(msg);
+          buf.append("</li>");
         }
         buf.append("</ul>");
-        installationMsg = getMsg("installstatus-installed", new String[]
-          { buf.toString() });
+        installationMsg = INFO_INSTALLSTATUS_INSTALLED.get( buf.toString() );
       }
     }
     if (!isInstalled)
     {
-      installationMsg = getMsg("installstatus-not-installed");
+      installationMsg = INFO_INSTALLSTATUS_NOT_INSTALLED.get();
     }
   }
 
@@ -143,7 +147,7 @@
    *
    * @return an String in HTML format describing the status of the installation.
    */
-  public String getInstallationMsg()
+  public Message getInstallationMsg()
   {
     return installationMsg;
   }
@@ -199,19 +203,4 @@
     return mod;
   }
 
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private String getMsg(String key, String[] args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/HistoricalRecord.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/HistoricalRecord.java
index d80ba94..4c67da4 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/HistoricalRecord.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/HistoricalRecord.java
@@ -27,7 +27,8 @@
 
 package org.opends.quicksetup;
 
-import org.opends.quicksetup.i18n.ResourceProvider;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 
 import java.util.StringTokenizer;
 import java.util.EnumSet;
@@ -51,17 +52,17 @@
   // readable programmatically.                       //
   //--------------------------------------------------//
 
-  static private String OPERATION = getMsg("upgrade-log-field-op");
+  static private Message OPERATION = INFO_UPGRADE_LOG_FIELD_OP.get();
 
-  static private String TIME = getMsg("upgrade-log-field-time");
+  static private Message TIME = INFO_UPGRADE_LOG_FIELD_TIME.get();
 
-  static private String FROM = getMsg("upgrade-log-field-from");
+  static private Message FROM = INFO_UPGRADE_LOG_FIELD_FROM.get();
 
-  static private String TO = getMsg("upgrade-log-field-to");
+  static private Message TO = INFO_UPGRADE_LOG_FIELD_TO.get();
 
-  static private String STATUS = getMsg("upgrade-log-field-status");
+  static private Message STATUS = INFO_UPGRADE_LOG_FIELD_STATUS.get();
 
-  static private String NOTE = getMsg("upgrade-log-field-note");
+  static private Message NOTE = INFO_UPGRADE_LOG_FIELD_NOTE.get();
 
   static private String SEPARATOR = " ";
 
@@ -73,18 +74,18 @@
   public enum Status {
 
     /** Operation has started. */
-    STARTED(getMsg("upgrade-log-status-started")),
+    STARTED(INFO_UPGRADE_LOG_STATUS_STARTED.get()),
 
     /** Operation completed successfully. */
-    SUCCESS(getMsg("upgrade-log-status-success")),
+    SUCCESS(INFO_UPGRADE_LOG_STATUS_SUCCESS.get()),
 
     /** Operation failed. */
-    FAILURE(getMsg("upgrade-log-status-failure")),
+    FAILURE(INFO_UPGRADE_LOG_STATUS_FAILURE.get()),
 
     /** Operation was canceled. */
-    CANCEL(getMsg("upgrade-log-status-cancel"));
+    CANCEL(INFO_UPGRADE_LOG_STATUS_CANCEL.get());
 
-    private String representation;
+    private Message representation;
 
     /**
      * Creates a State from a String.
@@ -106,10 +107,10 @@
      * {@inheritDoc}
      */
     public String toString() {
-      return representation;
+      return String.valueOf(representation);
     }
 
-    private Status(String representation) {
+    private Status(Message representation) {
       this.representation = representation;
     }
 
@@ -285,16 +286,16 @@
   public String toString() {
     StringBuilder sb = new StringBuilder();
     sb.append(OPERATION);
-    sb.append(operationId != null ? operationId : getMsg("general-unset"));
+    sb.append(operationId != null ? operationId : INFO_GENERAL_UNSET.get());
     sb.append(SEPARATOR);
     sb.append(TIME);
     sb.append(new SimpleDateFormat(DATE_FORMAT).format(date));
     sb.append(SEPARATOR);
     sb.append(FROM);
-    sb.append(from != null ? from.getBuildString() : getMsg("general-unset"));
+    sb.append(from != null ? from.getBuildString() : INFO_GENERAL_UNSET.get());
     sb.append(SEPARATOR);
     sb.append(TO);
-    sb.append(to != null ? to.getBuildString() : getMsg("general-unset"));
+    sb.append(to != null ? to.getBuildString() : INFO_GENERAL_UNSET.get());
     sb.append(SEPARATOR);
     sb.append(STATUS);
     sb.append(status);
@@ -306,8 +307,4 @@
     return sb.toString();
   }
 
-  static private String getMsg(String key) {
-    return ResourceProvider.getInstance().getMsg(key);
-  }
-
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Installation.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Installation.java
index 4856787..5147d22 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Installation.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Installation.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.io.*;
 import java.util.*;
 import java.util.logging.Level;
@@ -36,7 +39,6 @@
 import java.util.concurrent.ExecutionException;
 
 import org.opends.quicksetup.util.Utils;
-import org.opends.quicksetup.i18n.ResourceProvider;
 
 /**
  * This class represents the physical state of an OpenDS installation.
@@ -251,14 +253,14 @@
    */
   static public void validateRootDirectory(File rootDirectory)
           throws IllegalArgumentException {
-    String failureReason = null;
+    Message failureReason = null;
     if (rootDirectory == null) {
-      failureReason = getMsg("error-install-root-dir-null");
+      failureReason = INFO_ERROR_INSTALL_ROOT_DIR_NULL.get();
     } else if (!rootDirectory.exists()) {
-      failureReason = getMsg("error-install-root-dir-no-exist",
+      failureReason = INFO_ERROR_INSTALL_ROOT_DIR_NO_EXIST.get(
               Utils.getPath(rootDirectory));
     } else if (!rootDirectory.isDirectory()) {
-      failureReason = getMsg("error-install-root-dir-not-dir",
+      failureReason = INFO_ERROR_INSTALL_ROOT_DIR_NOT_DIR.get(
               Utils.getPath(rootDirectory));
     } else {
       String[] children = rootDirectory.list();
@@ -266,17 +268,17 @@
         Set<String> childrenSet = new HashSet<String>(Arrays.asList(children));
         for (String dir : REQUIRED_DIRECTORIES) {
           if (!childrenSet.contains(dir)) {
-            failureReason = getMsg("error-install-root-dir-no-dir",
+            failureReason = INFO_ERROR_INSTALL_ROOT_DIR_NO_DIR.get(
                     Utils.getPath(rootDirectory), dir);
           }
         }
       } else {
-        failureReason = getMsg("error-install-root-dir-empty",
-                    Utils.getPath(rootDirectory));
+        failureReason = INFO_ERROR_INSTALL_ROOT_DIR_EMPTY.get(
+                Utils.getPath(rootDirectory));
       }
     }
     if (failureReason != null) {
-      throw new IllegalArgumentException(failureReason);
+      throw new IllegalArgumentException(failureReason.toString());
     }
   }
 
@@ -791,12 +793,4 @@
     return Utils.getPath(rootDirectory);
   }
 
-  static private String getMsg(String key) {
-    return ResourceProvider.getInstance().getMsg(key);
-  }
-
-  static private String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
 }
\ No newline at end of file
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Launcher.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Launcher.java
index 419a20d..4633c0d 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Launcher.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Launcher.java
@@ -27,11 +27,13 @@
 
 package org.opends.quicksetup;
 
-import static org.opends.server.util.DynamicConstants.PRINTABLE_VERSION_STRING;
+import org.opends.messages.Message;
 import org.opends.server.util.args.ArgumentParser;
 
+import static org.opends.messages.QuickSetupMessages.*;
+import static org.opends.server.util.DynamicConstants.PRINTABLE_VERSION_STRING;
+
 import org.opends.quicksetup.util.Utils;
-import org.opends.quicksetup.i18n.ResourceProvider;
 
 import java.io.PrintStream;
 import java.io.ByteArrayOutputStream;
@@ -138,32 +140,6 @@
   }
 
   /**
-   * Creates an internationaized message based on the input key and
-   * properly formatted for the terminal.
-   * @param key for the message in the bundle
-   * @return String message properly formatted for the terminal
-   */
-  protected String getMsg(String key)
-  {
-    return org.opends.server.util.StaticUtils.wrapText(getI18n().getMsg(key),
-        Utils.getCommandLineMaxLineWidth());
-  }
-
-  /**
-   * Creates an internationaized message based on the input key and
-   * properly formatted for the terminal.
-   * @param key for the message in the bundle
-   * @param args String... arguments for the message
-   * @return String message properly formatted for the terminal
-   */
-  protected String getMsg(String key, String... args)
-  {
-    return org.opends.server.util.StaticUtils.wrapText(
-            getI18n().getMsg(key, args),
-        Utils.getCommandLineMaxLineWidth());
-  }
-
-  /**
    * Prints a usage message to the terminal.
    * @param i18nMsg localized user message that will be printed to the terminal.
    * @param toStdErr whether the message must be printed to the standard error
@@ -260,7 +236,7 @@
    * in some operating systems.
    * @return internationalized String representing the frame title
    */
-  abstract protected String getFrameTitle();
+  abstract protected Message getFrameTitle();
 
   /**
    * Launches the command line based uninstall.
@@ -388,8 +364,8 @@
 
         File logFile = QuickSetupLog.getLogFile();
         if (logFile != null) {
-          System.out.println(getMsg("general-see-for-details",
-                QuickSetupLog.getLogFile().getPath()));
+          System.out.println(INFO_GENERAL_SEE_FOR_DETAILS.get(
+                  QuickSetupLog.getLogFile().getPath()));
         }
       }
     }
@@ -418,13 +394,4 @@
     }
   }
 
-  /**
-   * Returns the ResourceProvider used to get localized messages.
-   * @return the ResourceProvider used to get localized messages.
-   */
-  protected ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ProgressDescriptor.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ProgressDescriptor.java
index b6a7f16..80a69d6 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ProgressDescriptor.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ProgressDescriptor.java
@@ -27,6 +27,8 @@
 
 package org.opends.quicksetup;
 
+import org.opends.messages.Message;
+
 /**
  * This class is used to describe the current state of the installation.
  * It contains the step in which the installation is, the current progress
@@ -48,9 +50,9 @@
 
   private Integer progressBarRatio;
 
-  private String progressBarMsg;
+  private Message progressBarMsg;
 
-  private String detailsMsg;
+  private Message detailsMsg;
 
   /**
    * Constructor for the ProgressDescriptor.
@@ -60,7 +62,7 @@
    * @param detailsMsg the logs.
    */
   public ProgressDescriptor(ProgressStep step,
-      Integer progressBarRatio, String progressBarMsg, String detailsMsg)
+      Integer progressBarRatio, Message progressBarMsg, Message detailsMsg)
   {
     this.step = step;
     this.progressBarRatio = progressBarRatio;
@@ -72,7 +74,7 @@
    * Returns the details message (the log message) of the install.
    * @return the details message (the log message) of the install.
    */
-  public String getDetailsMsg()
+  public Message getDetailsMsg()
   {
     return detailsMsg;
   }
@@ -81,7 +83,7 @@
    * Returns the progress bar message.
    * @return the progress bar message.
    */
-  public String getProgressBarMsg()
+  public Message getProgressBarMsg()
   {
     return progressBarMsg;
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ProgressUpdateListenerDelegate.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ProgressUpdateListenerDelegate.java
index 26ff51c..7ba459c 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ProgressUpdateListenerDelegate.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ProgressUpdateListenerDelegate.java
@@ -26,11 +26,13 @@
  */
 
 package org.opends.quicksetup;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
 
 import org.opends.quicksetup.event.ProgressUpdateListener;
 import org.opends.quicksetup.event.ProgressUpdateEvent;
 import org.opends.quicksetup.util.ProgressMessageFormatter;
-import org.opends.quicksetup.i18n.ResourceProvider;
 
 import java.util.HashSet;
 import java.io.File;
@@ -78,15 +80,14 @@
    *
    * @param current             progress step
    * @param ratio               the integer that specifies which percentage of
-   *                            the whole installation has been completed.
+ *                            the whole installation has been completed.
    * @param currentPhaseSummary the localized summary message for the
-   *                            current installation progress in formatted form.
+*                            current installation progress in formatted form.
    * @param newLogDetail        the new log messages that we have for the
-   *                            installation in formatted form.
    */
   public void notifyListeners(ProgressStep current, Integer ratio,
-                              String currentPhaseSummary,
-                              String newLogDetail) {
+                              Message currentPhaseSummary,
+                              Message newLogDetail) {
     ProgressUpdateEvent ev =
             new ProgressUpdateEvent(current, ratio,
                     currentPhaseSummary, newLogDetail);
@@ -102,10 +103,12 @@
   public void notifyListenersOfLog() {
     File logFile = QuickSetupLog.getLogFile();
     if (logFile != null) {
-      notifyListeners(
-          formatter.getFormattedProgress(getMsg("general-see-for-details",
-              logFile.getPath())) +
-          formatter.getLineBreak());
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(formatter.getFormattedProgress(
+                  INFO_GENERAL_SEE_FOR_DETAILS.get(
+                          logFile.getPath())));
+      mb.append(formatter.getLineBreak());
+      notifyListeners(mb.toMessage());
     }
   }
 
@@ -113,11 +116,8 @@
    * Notify listeners about a change in log detail.
    * @param msg log detail
    */
-  protected void notifyListeners(String msg) {
+  protected void notifyListeners(Message msg) {
     notifyListeners(null, null, null, msg);
   }
 
-  private String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java
index d7caab3..3cddaaa 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java
@@ -33,7 +33,6 @@
 import org.opends.quicksetup.ApplicationReturnCode.ReturnCode;
 import org.opends.quicksetup.event.ProgressUpdateListener;
 import org.opends.quicksetup.event.ProgressUpdateEvent;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.server.util.StaticUtils;
 
 /**
@@ -136,33 +135,4 @@
     return returnValue;
   }
 
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   * @param key String key
-   * @return String message
-   */
-  protected static String getMsg(String key)
-  {
-    return org.opends.server.util.StaticUtils.wrapText(getI18n().getMsg(key),
-        Utils.getCommandLineMaxLineWidth());
-  }
-
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   * @param key String key
-   * @param args String[] args
-   * @return String message
-   */
-  protected static String getMsg(String key, String[] args)
-  {
-    return org.opends.server.util.StaticUtils.wrapText(
-        getI18n().getMsg(key, args), Utils.getCommandLineMaxLineWidth());
-  }
-
-  private static ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/SplashScreen.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/SplashScreen.java
index ac0eaf8..a17afc6 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/SplashScreen.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/SplashScreen.java
@@ -27,6 +27,8 @@
 
 package org.opends.quicksetup;
 
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.awt.Dimension;
 import java.awt.Frame;
 import java.awt.Graphics;
@@ -37,7 +39,6 @@
 
 import javax.swing.SwingUtilities;
 
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.ui.Utilities;
 
 /**
@@ -152,7 +153,7 @@
    */
   private Image getSplashImage()
   {
-    String resource = ResourceProvider.getInstance().getMsg("splash-icon");
+    String resource = INFO_SPLASH_ICON.get().toString();
     resource = "org/opends/quicksetup/" + resource;
     return Toolkit.getDefaultToolkit().createImage(
         this.getClass().getClassLoader().getResource(resource));
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Step.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Step.java
index 5e80f7d..46a8e83 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Step.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/Step.java
@@ -27,6 +27,10 @@
 
 package org.opends.quicksetup;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+import static org.opends.messages.AdminToolMessages.*;
+
 /**
  * This enumeration just represents the different steps that we can have in
  * the installation and uninstallation wizards.
@@ -38,64 +42,64 @@
   /**
    * Welcome step for the installation.
    */
-  WELCOME("welcome-step"),
+  WELCOME(INFO_WELCOME_STEP.get()),
 
   /**
    * Confirmation panel for the uninstallation.
    */
-  CONFIRM_UNINSTALL("confirm-uninstall-step"),
+  CONFIRM_UNINSTALL(INFO_CONFIRM_UNINSTALL_STEP.get()),
 
   /**
    * Server Settings step (path, port, etc.).
    */
-  SERVER_SETTINGS("server-settings-step"),
+  SERVER_SETTINGS(INFO_SERVER_SETTINGS_STEP.get()),
 
   /**
    * Data Replication panel (standalone or replicated).
    */
-  REPLICATION_OPTIONS("data-replication-step"),
+  REPLICATION_OPTIONS(INFO_DATA_REPLICATION_STEP.get()),
   /**
    * Global Administrator creation panel.
    */
-  CREATE_GLOBAL_ADMINISTRATOR("create-global-administrator-step"),
+  CREATE_GLOBAL_ADMINISTRATOR(INFO_CREATE_GLOBAL_ADMINISTRATOR_STEP.get()),
   /**
    * Suffixes to Replicate.
    */
-  SUFFIXES_OPTIONS("suffixes-step"),
+  SUFFIXES_OPTIONS(INFO_SUFFIXES_STEP.get()),
   /**
    * Panel when the user specifies the replication ports of the remote servers
    * that have not defined it.
    */
-  REMOTE_REPLICATION_PORTS("remote-replication-ports-step"),
+  REMOTE_REPLICATION_PORTS(INFO_REMOTE_REPLICATION_PORTS_STEP.get()),
   /**
    * Data Options panel (suffix dn, LDIF path, etc.).
    */
-  NEW_SUFFIX_OPTIONS("data-options-step"),
+  NEW_SUFFIX_OPTIONS(INFO_DATA_OPTIONS_STEP.get()),
 
   /**
    * Review panel for the install.
    */
-  REVIEW("review-step"),
+  REVIEW(INFO_REVIEW_STEP.get()),
 
   /**
    * Progress panel.
    */
-  PROGRESS("progress-step"),
+  PROGRESS(INFO_PROGRESS_STEP.get()),
 
   /**
    * Finished panel.
    */
-  FINISHED("finished-step");
+  FINISHED(INFO_FINISHED_STEP.get());
 
-  private String msgKey;
+  private Message msg;
 
   /**
    * Creates a step.
-   * @param msgKey the message key used to access a message catalog to
+   * @param msg the message key used to access a message catalog to
    * retreive this step's display name
    */
-  Step(String msgKey) {
-    this.msgKey = msgKey;
+  Step(Message msg) {
+    this.msg = msg;
   }
 
   /**
@@ -103,8 +107,8 @@
    * @return String message key used to access a message catalog to
    * retreive this step's display name
    */
-  public String getMessageKey() {
-    return msgKey;
+  public Message getDisplayMessage() {
+    return msg;
   }
 
   /**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataCertificateException.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataCertificateException.java
index 3d3727d4..d6e3304 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataCertificateException.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataCertificateException.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.quicksetup;
+import org.opends.messages.Message;
 
 import java.security.cert.X509Certificate;
 
@@ -64,7 +65,7 @@
   /**
    * Constructor for UserDataCertificateException.
    * @param step the step in the wizard where the exception occurred.
-   * @param localizedMessage the localized message describing the error.
+   * @param message describing the error.
    * @param t the root cause for this exception.
    * @param host the host we tried to connect to.
    * @param port the port we tried to connect to.
@@ -72,11 +73,11 @@
    * @param authType the authentication type.
    * @param type the type of the exception.
    */
-  public UserDataCertificateException(WizardStep step, String localizedMessage,
+  public UserDataCertificateException(WizardStep step, Message message,
       Throwable t, String host, int port, X509Certificate[] chain,
       String authType, Type type)
   {
-    super(step, localizedMessage);
+    super(step, message);
     initCause(t);
     this.host = host;
     this.port = port;
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataConfirmationException.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataConfirmationException.java
index 951b493..251c871 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataConfirmationException.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataConfirmationException.java
@@ -27,6 +27,8 @@
 
 package org.opends.quicksetup;
 
+import org.opends.messages.Message;
+
 /**
  * This exception is used when there is an confirmation to be asked
  * concerning the data provided by the user.  It will be thrown by the class
@@ -40,11 +42,11 @@
   /**
    * Constructor for UserDataConfirmationException.
    * @param step the step in the wizard where the exception occurred.
-   * @param localizedMessage the localized message describing the error.
+   * @param message the localized message describing the error.
    */
-  public UserDataConfirmationException(WizardStep step, String localizedMessage)
+  public UserDataConfirmationException(WizardStep step, Message message)
   {
-    super(step, localizedMessage);
+    super(step, message);
   }
 }
 
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataException.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataException.java
index a02edd0..0d02e3b 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataException.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserDataException.java
@@ -27,39 +27,30 @@
 
 package org.opends.quicksetup;
 
+import org.opends.messages.Message;
+import org.opends.server.types.OpenDsException;
+
 /**
  * This exception is used when there is an error with the data provided by
  * the user.  It will be thrown by the class that is in charge of validating
  * the user data (the Application class).
  *
  */
-public class UserDataException extends Exception
-{
+public class UserDataException extends OpenDsException {
+
   private static final long serialVersionUID = 1798143194655443132L;
 
   private WizardStep step;
 
-  private String localizedMessage;
-
   /**
    * Constructor for UserDataException.
    * @param step the step in the wizard where the exception occurred.
-   * @param localizedMessage the localized message describing the error.
+   * @param message the localized message describing the error.
    */
-  public UserDataException(WizardStep step, String localizedMessage)
+  public UserDataException(WizardStep step, Message message)
   {
-    super(localizedMessage);
+    super(message);
     this.step = step;
-    this.localizedMessage = localizedMessage;
-  }
-
-  /**
-   * Returns the localized message describing the error that occurred.
-   * @return the localized message describing the error that occurred.
-   */
-  public String getLocalizedMessage()
-  {
-    return localizedMessage;
   }
 
   /**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserInteraction.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserInteraction.java
index 47877c9..3cf0736 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserInteraction.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/UserInteraction.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.quicksetup;
+import org.opends.messages.Message;
 
 import java.util.List;
 
@@ -70,8 +71,9 @@
    * @return Object that is the same value as the user selection from the
    *         <code>options</code> parameter.
    */
-  Object confirm(String summary, String detail,
-                 String title, MessageType type, String[] options, String def);
+  Object confirm(Message summary, Message detail,
+                 Message title, MessageType type,
+                 Message[] options, Message def);
 
   /**
    * Present a list of choices to the user and wait for them to select one
@@ -92,9 +94,9 @@
    * @return Object that is the same value as the user selection from the
    *         <code>options</code> parameter.
    */
-  Object confirm(String summary, String detail, String fineDetails,
-                 String title, MessageType type, String[] options, String def,
-                 String viewDetailsOption);
+  Object confirm(Message summary, Message detail, Message fineDetails,
+                 Message title, MessageType type, Message[] options,
+                 Message def, Message viewDetailsOption);
 
   /**
    * Creates a list appropriate for the presentation implementation.
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/WizardStep.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/WizardStep.java
index ff912f5..dc921ec 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/WizardStep.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/WizardStep.java
@@ -27,6 +27,8 @@
 
 package org.opends.quicksetup;
 
+import org.opends.messages.Message;
+
 /**
  * Step in a QuickSetup wizard application.
  */
@@ -37,7 +39,7 @@
    * @return String message key for accessing this step's display name
    * in a message bundle
    */
-  String getMessageKey();
+  Message getDisplayMessage();
 
   /**
    * Indicates that when this step is displayed the application will
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/BrowseActionListener.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/BrowseActionListener.java
index 683ce56..0ea59e6 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/BrowseActionListener.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/BrowseActionListener.java
@@ -35,8 +35,8 @@
 import javax.swing.JFileChooser;
 import javax.swing.text.JTextComponent;
 
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.util.ExtensionFileFilter;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This class is an action listener used to update a text component. When the
@@ -102,24 +102,23 @@
     this.type = type;
     this.parent = parent;
 
-    ResourceProvider i18n = ResourceProvider.getInstance();
-
     fc = new JFileChooser();
     switch (type)
     {
     case LOCATION_DIRECTORY:
       fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
       fc.setDialogType(JFileChooser.OPEN_DIALOG);
-      fc.setDialogTitle(i18n.getMsg("open-server-location-dialog-title"));
+      fc.setDialogTitle(INFO_OPEN_SERVER_LOCATION_DIALOG_TITLE
+              .get().toString());
       break;
 
     case OPEN_LDIF_FILE:
       fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
       fc.setDialogType(JFileChooser.OPEN_DIALOG);
-      fc.setDialogTitle(i18n.getMsg("open-ldif-file-dialog-title"));
+      fc.setDialogTitle(INFO_OPEN_LDIF_FILE_DIALOG_TITLE.get().toString());
       ExtensionFileFilter ldifFiles =
           new ExtensionFileFilter("ldif",
-              i18n.getMsg("ldif-files-description"));
+              INFO_LDIF_FILES_DESCRIPTION.get().toString());
 
       fc.addChoosableFileFilter(ldifFiles);
       fc.setFileFilter(ldifFiles);
@@ -128,10 +127,10 @@
     case OPEN_ZIP_FILE:
         fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
         fc.setDialogType(JFileChooser.OPEN_DIALOG);
-        fc.setDialogTitle(i18n.getMsg("open-zip-file-dialog-title"));
+        fc.setDialogTitle(INFO_OPEN_ZIP_FILE_DIALOG_TITLE.get().toString());
         ExtensionFileFilter zipFiles =
             new ExtensionFileFilter("zip",
-                i18n.getMsg("zip-files-description"));
+                INFO_ZIP_FILES_DESCRIPTION.get().toString());
 
         fc.addChoosableFileFilter(zipFiles);
         fc.setFileFilter(zipFiles);
@@ -140,7 +139,7 @@
     case GENERIC_FILE:
       fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
       fc.setDialogType(JFileChooser.OPEN_DIALOG);
-      fc.setDialogTitle(i18n.getMsg("open-generic-file-dialog-title"));
+      fc.setDialogTitle(INFO_OPEN_GENERIC_FILE_DIALOG_TITLE.get().toString());
 
       break;
 
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/ProgressNotifier.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/ProgressNotifier.java
index ea3609a..f7e9d5e 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/ProgressNotifier.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/ProgressNotifier.java
@@ -27,6 +27,8 @@
 
 package org.opends.quicksetup.event;
 
+import org.opends.messages.Message;
+
 /**
  * Inteface for applications that advertise status to interested
  * listeners.
@@ -54,11 +56,11 @@
    * @param ratio Integer specifying the percentage of the whole
    *        process that has been completed
    * @param currentPhaseSummary localized summary message for
-   *        the current installation progress in formatted
-   *        form
+ *        the current installation progress in formatted
+ *        form
    * @param newLogDetail new log messages in formatted form
    */
-  void notifyListeners(Integer ratio, String currentPhaseSummary,
-      String newLogDetail);
+  void notifyListeners(Integer ratio, Message currentPhaseSummary,
+      Message newLogDetail);
 
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/ProgressUpdateEvent.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/ProgressUpdateEvent.java
index 2db1393..c298179 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/ProgressUpdateEvent.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/event/ProgressUpdateEvent.java
@@ -27,6 +27,7 @@
 
 package org.opends.quicksetup.event;
 
+import org.opends.messages.Message;
 import org.opends.quicksetup.ProgressStep;
 
 /**
@@ -44,22 +45,22 @@
 
   private Integer progressRatio;
 
-  private String currentPhaseSummary;
+  private Message currentPhaseSummary;
 
-  private String newLogs;
+  private Message newLogs;
 
   /**
    * Constructor of the ProgressUpdateEvent.
    * @param step the ProgressStep object describing in which step
    * of the installation we are (configuring server, starting server, etc.)
    * @param progressRatio the integer that specifies which percentage of
-   * the whole installation has been completed.
+ * the whole installation has been completed.
    * @param currentPhaseSummary the localized summary message for the
-   * current installation progress.
+* current installation progress.
    * @param newLogs the new log messages that we have for the installation.
    */
   public ProgressUpdateEvent(ProgressStep step,
-      Integer progressRatio, String currentPhaseSummary, String newLogs)
+      Integer progressRatio, Message currentPhaseSummary, Message newLogs)
   {
     this.step = step;
     this.progressRatio = progressRatio;
@@ -72,7 +73,7 @@
    * status.
    * @return the localized message summary describing the progress status.
    */
-  public String getCurrentPhaseSummary()
+  public Message 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 String getNewLogs()
+  public Message getNewLogs()
   {
     return newLogs;
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/i18n/ResourceProvider.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/i18n/ResourceProvider.java
deleted file mode 100644
index 1bbbdb1..0000000
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/i18n/ResourceProvider.java
+++ /dev/null
@@ -1,206 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-
-package org.opends.quicksetup.i18n;
-
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-import org.opends.quicksetup.util.Utils;
-
-/**
- * This class is used to retrieve localized messages from Resources.properties
- * files.  The locale used currently is the default Locale of the JVM.
- *
- */
-public class ResourceProvider
-{
-  private ResourceBundle bundle;
-
-  private static ResourceProvider instance;
-
-  private static final String BUNDLE_NAME =
-      "org.opends.quicksetup.resources.Resources";
-
-  /**
-   * This constructor is protected to be able to subclass.
-   *
-   */
-  protected ResourceProvider()
-  {
-  }
-
-  /**
-   * Provides an instance of the ResourceProvider.  The instance is unique for
-   * this process (which implies that during the process lifetime we can only
-   * have messages in one language).
-   *
-   * @return an instance of ResourceProvider.
-   */
-  public static ResourceProvider getInstance()
-  {
-    if (instance == null)
-    {
-      instance = new ResourceProvider();
-    }
-    return instance;
-  }
-
-  /**
-   * Gets a localized message for a key value.  In  the properties file we have
-   * something of type:
-   * key=value
-   * @param key the key in the properties file.
-   * @return the value associated to the key in the properties file.
-   * @throws IllegalArgumentException if the key could not be found in the
-   * properties file.
-   */
-  public String getMsg(String key) throws IllegalArgumentException
-  {
-    String msg;
-    try
-    {
-      msg = getResourceBundle().getString(key);
-
-    } catch (java.util.MissingResourceException e)
-    {
-      // The less brutal alternative here is to do msg = key instead
-      // of
-      // throwing an exception but this helps being strict with
-      // resources
-      // (so I prefer to keep it as it is at least at the beginning)
-      throw new IllegalArgumentException("Unknown Resource Bundle key: " +
-          key);
-    }
-    return msg;
-  }
-
-  /**
-   * Gets a localized message for a key value.  In  the properties file we have
-   * something of type:
-   * key=value
-   *
-   * For instance if we pass as key "mykey" and as arguments {"value1"} and
-   * in the properties file we have:
-   * mykey=value with argument {0}.
-   *
-   * This method will return "value with argument value1".
-   *
-   * @param key the key in the properties file.
-   * @param args the arguments to be passed to generate the resulting value.
-   * @return the value associated to the key in the properties file.
-   * @throws IllegalArgumentException if the key could not be found in the
-   * properties file.
-   */
-  public String getMsg(String key, String... args)
-  throws IllegalArgumentException
-  {
-    String msg;
-    try
-    {
-      String pattern = getResourceBundle().getString(key);
-      MessageFormat mf = new MessageFormat(pattern);
-
-      msg = mf.format(args);
-    } catch (java.util.MissingResourceException e)
-    {
-      // The less brutal alternative here is to do msg = key instead
-      // of
-      // throwing an exception but this helps being strict with
-      // resources
-      // (so I prefer to keep it as it is at least at the beginning)
-      throw new IllegalArgumentException("Unknown Resource Bundle key: " +
-          key);
-    }
-
-    return msg;
-  }
-
-  /**
-   * Indicates which is the Locale that will be used to determine the language
-   * of the messages.
-   *
-   * @return the Locale that will be used to determine the language of
-   * the messages.
-   */
-  public Locale getLocale()
-  {
-    return Locale.getDefault();
-  }
-
-  /**
-   * The ResourceBundle that will be used to get the localized messages.
-   * @return the ResourceBundle that will be used to get the localized
-   * messages.
-   */
-  private ResourceBundle getResourceBundle()
-  {
-    if (bundle == null)
-    {
-      try
-      {
-        if (Utils.isWebStart())
-        {
-          /*
-           * Construct a URLClassLoader using only the jar of quicksetup.jar
-           * when we are using Web Start. If we use the current classloader all
-           * the jars (including those marked as lazy) will be downloaded.
-           */
-          URL[] urls = new URL[]
-            { getQuickSetupJarURL() };
-          bundle =
-              ResourceBundle.getBundle(BUNDLE_NAME, getLocale(),
-                  new URLClassLoader(urls));
-        } else
-        {
-          bundle =
-              ResourceBundle.getBundle(BUNDLE_NAME, getLocale(), this
-                  .getClass().getClassLoader());
-        }
-      } catch (java.util.MissingResourceException e)
-      {
-        throw new IllegalStateException("Could not retrieve Resource Bundle: "
-            + BUNDLE_NAME, e);
-
-      }
-    }
-
-    return bundle;
-  }
-
-  /**
-   * Returns the URL of the Jar file that was used to retrieve this class.
-   * @return the URL of the Jar file that was used to retrieve this class.
-   */
-  private URL getQuickSetupJarURL()
-  {
-    return this.getClass().getProtectionDomain().getCodeSource().getLocation();
-  }
-}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installandupgrader/InstallAndUpgrader.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installandupgrader/InstallAndUpgrader.java
index 48c323a..d80e779 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installandupgrader/InstallAndUpgrader.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installandupgrader/InstallAndUpgrader.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.installandupgrader;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.awt.event.WindowEvent;
 import java.io.File;
 import java.io.IOException;
@@ -44,7 +47,6 @@
 import org.opends.quicksetup.UserDataException;
 import org.opends.quicksetup.WizardStep;
 import org.opends.quicksetup.event.ProgressUpdateListener;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.installandupgrader.ui.WelcomePanel;
 import org.opends.quicksetup.installer.Installer;
 import org.opends.quicksetup.installer.offline.OfflineInstaller;
@@ -84,8 +86,7 @@
                         UpgradeLauncher.LOG_FILE_PREFIX,
                         QuickSetupLog.LOG_FILE_SUFFIX));
     } catch (IOException e) {
-      System.err.println(
-              ResourceProvider.getInstance().getMsg("error-initializing-log"));
+      System.err.println(INFO_ERROR_INITIALIZING_LOG.get());
       e.printStackTrace();
     }
     if (Utils.isWebStart())
@@ -130,8 +131,8 @@
   /**
    * {@inheritDoc}
    */
-  public String getFrameTitle() {
-    return getMsg("frame-install-title");
+  public Message getFrameTitle() {
+    return INFO_FRAME_INSTALL_TITLE.get();
   }
 
   /**
@@ -268,7 +269,7 @@
   /**
    * {@inheritDoc}
    */
-  public String getSummary(ProgressStep step) {
+  public Message getSummary(ProgressStep step) {
     return getDelegateApplication().getSummary(step);
   }
 
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installandupgrader/ui/WelcomePanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installandupgrader/ui/WelcomePanel.java
index 621ba57..3fcaa5e 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installandupgrader/ui/WelcomePanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installandupgrader/ui/WelcomePanel.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.installandupgrader.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.ui.*;
 import org.opends.quicksetup.ButtonName;
 import org.opends.quicksetup.UserData;
@@ -121,22 +124,21 @@
   /**
    * {@inheritDoc}
    */
-  protected String getTitle() {
-    return getMsg("installandupgrade-welcome-panel-title");
+  protected Message getTitle() {
+    return INFO_INSTALLANDUPGRADE_WELCOME_PANEL_TITLE.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions() {
+  protected Message getInstructions() {
     /*
      * We can use org.opends.server.util.DynamicConstants without problems as it
      * has been added to quicksetup.jar during build time.
      */
-    return getMsg("installandupgrade-welcome-panel-instructions",
-            new String[] {
+    return INFO_INSTALLANDUPGRADE_WELCOME_PANEL_INSTRUCTIONS.get(
                     DynamicConstants.COMPACT_VERSION_STRING,
-                    DynamicConstants.BUILD_ID});
+                    DynamicConstants.BUILD_ID);
   }
 
   /**
@@ -148,12 +150,12 @@
     p.setLayout(new GridBagLayout());
 
     rbInstall = UIFactory.makeJRadioButton(
-        getMsg("installandupgrader-rbinstall-label"),
-        getMsg("installandupgrader-rbinstall-tooltip"),
+        INFO_INSTALLANDUPGRADER_RBINSTALL_LABEL.get(),
+        INFO_INSTALLANDUPGRADER_RBINSTALL_TOOLTIP.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     rbUpgrade = UIFactory.makeJRadioButton(
-        getMsg("installandupgrader-rbupgrade-label"),
-        getMsg("installandupgrader-rbupgrade-tooltip"),
+        INFO_INSTALLANDUPGRADER_RBUPGRADE_LABEL.get(),
+        INFO_INSTALLANDUPGRADER_RBUPGRADE_TOOLTIP.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     ButtonGroup group = new ButtonGroup();
     group.add(rbInstall);
@@ -215,8 +217,8 @@
     Component c;
 
     LabelFieldDescriptor serverLocationDescriptor =
-            new LabelFieldDescriptor(getMsg("upgrade-location-label"),
-                    getMsg("upgrade-location-tooltip"),
+            new LabelFieldDescriptor(INFO_UPGRADE_LOCATION_LABEL.get(),
+                    INFO_UPGRADE_LOCATION_TOOLTIP.get(),
                     LabelFieldDescriptor.FieldType.TEXTFIELD,
                     LabelFieldDescriptor.LabelType.PRIMARY,
                     UIFactory.PATH_FIELD_SIZE);
@@ -234,8 +236,8 @@
           userData.getServerLocation());
 
     butBrowse =
-      UIFactory.makeJButton(getMsg("browse-button-label"),
-          getMsg("browse-button-tooltip"));
+      UIFactory.makeJButton(INFO_BROWSE_BUTTON_LABEL.get(),
+          INFO_BROWSE_BUTTON_TOOLTIP.get());
 
     BrowseActionListener l =
       new BrowseActionListener(tcServerLocation,
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/AuthenticationData.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/AuthenticationData.java
index 147507d..143c484 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/AuthenticationData.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/AuthenticationData.java
@@ -31,7 +31,7 @@
  * This class is used to provide a data model for the different parameters used
  * to connect to a server that we want to replicate contents with.
  *
- * @see DataReplicationOptions.
+ * @see DataReplicationOptions
  *
  */
 public class AuthenticationData
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallLauncher.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallLauncher.java
index 60d6785..e47ef74 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallLauncher.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallLauncher.java
@@ -26,7 +26,9 @@
  */
 package org.opends.quicksetup.installer;
 
-import static org.opends.server.messages.ToolMessages.*;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 
 import java.io.File;
@@ -101,7 +103,7 @@
     System.setProperty(ServerConstants.PROPERTY_SCRIPT_NAME, scriptName);
 
     argParser = new ArgumentParser(getClass().getName(),
-        getI18n().getMsg("setup-launcher-usage-description"),
+        INFO_SETUP_LAUNCHER_USAGE_DESCRIPTION.get(),
         false);
     BooleanArgument   addBaseEntry;
     BooleanArgument   cliMode;
@@ -121,60 +123,60 @@
     try
     {
       cliMode = new BooleanArgument("cli", 'c', OPTION_LONG_CLI,
-          MSGID_INSTALLDS_DESCRIPTION_CLI);
+          INFO_INSTALLDS_DESCRIPTION_CLI.get());
       argParser.addArgument(cliMode);
 
       silentInstall = new BooleanArgument("silent", 's', "silentInstall",
-          MSGID_INSTALLDS_DESCRIPTION_SILENT);
+          INFO_INSTALLDS_DESCRIPTION_SILENT.get());
       argParser.addArgument(silentInstall);
 
       baseDN = new StringArgument("basedn", OPTION_SHORT_BASEDN,
           OPTION_LONG_BASEDN, false, true, true,
           OPTION_VALUE_BASEDN,
           "dc=example,dc=com", null,
-          MSGID_INSTALLDS_DESCRIPTION_BASEDN);
+          INFO_INSTALLDS_DESCRIPTION_BASEDN.get());
       argParser.addArgument(baseDN);
 
       addBaseEntry = new BooleanArgument("addbase", 'a', "addBaseEntry",
-          MSGID_INSTALLDS_DESCRIPTION_ADDBASE);
+          INFO_INSTALLDS_DESCRIPTION_ADDBASE.get());
       argParser.addArgument(addBaseEntry);
 
       importLDIF = new StringArgument("importldif", OPTION_SHORT_LDIF_FILE,
           OPTION_LONG_LDIF_FILE, false,
           true, true, OPTION_VALUE_LDIF_FILE,
           null, null,
-          MSGID_INSTALLDS_DESCRIPTION_IMPORTLDIF);
+          INFO_INSTALLDS_DESCRIPTION_IMPORTLDIF.get());
       argParser.addArgument(importLDIF);
 
       sampleData = new IntegerArgument("sampledata", 'd', "sampleData", false,
           false, true, "{numEntries}", 0, null,
           true, 0, false, 0,
-          MSGID_INSTALLDS_DESCRIPTION_SAMPLE_DATA);
+          INFO_INSTALLDS_DESCRIPTION_SAMPLE_DATA.get());
       argParser.addArgument(sampleData);
 
       ldapPort = new IntegerArgument("ldapport", OPTION_SHORT_PORT,
           "ldapPort", false, false,
           true, OPTION_VALUE_PORT, 389,
           null, true, 1, true, 65535,
-          MSGID_INSTALLDS_DESCRIPTION_LDAPPORT);
+          INFO_INSTALLDS_DESCRIPTION_LDAPPORT.get());
       argParser.addArgument(ldapPort);
 
       jmxPort = new IntegerArgument("jmxport", 'x', "jmxPort", false, false,
           true, "{jmxPort}",
           SetupUtils.getDefaultJMXPort(), null, true,
           1, true, 65535,
-          MSGID_INSTALLDS_DESCRIPTION_JMXPORT);
+          INFO_INSTALLDS_DESCRIPTION_JMXPORT.get());
       argParser.addArgument(jmxPort);
 
       skipPortCheck = new BooleanArgument("skipportcheck", 'S', "skipPortCheck",
-          MSGID_INSTALLDS_DESCRIPTION_SKIPPORT);
+          INFO_INSTALLDS_DESCRIPTION_SKIPPORT.get());
       argParser.addArgument(skipPortCheck);
 
       rootDN = new StringArgument("rootdn",OPTION_SHORT_ROOT_USER_DN,
           OPTION_LONG_ROOT_USER_DN, false, true,
           true, OPTION_VALUE_ROOT_USER_DN,
           "cn=Directory Manager",
-          null, MSGID_INSTALLDS_DESCRIPTION_ROOTDN);
+          null, INFO_INSTALLDS_DESCRIPTION_ROOTDN.get());
       argParser.addArgument(rootDN);
 
       rootPWString = new StringArgument("rootpwstring", OPTION_SHORT_BINDPWD,
@@ -182,19 +184,19 @@
           false, false, true,
           "{password}", null,
           null,
-          MSGID_INSTALLDS_DESCRIPTION_ROOTPW);
+          INFO_INSTALLDS_DESCRIPTION_ROOTPW.get());
       argParser.addArgument(rootPWString);
 
       rootPWFile = new FileBasedArgument("rootpwfile",
           OPTION_SHORT_BINDPWD_FILE,
           "rootUserPasswordFile", false, false,
           OPTION_VALUE_BINDPWD_FILE,
-          null, null, MSGID_INSTALLDS_DESCRIPTION_ROOTPWFILE);
+          null, null, INFO_INSTALLDS_DESCRIPTION_ROOTPWFILE.get());
       argParser.addArgument(rootPWFile);
 
       enableWindowsService = new BooleanArgument("enablewindowsservice", 'e',
           "enableWindowsService",
-          MSGID_INSTALLDS_DESCRIPTION_ENABLE_WINDOWS_SERVICE);
+          INFO_INSTALLDS_DESCRIPTION_ENABLE_WINDOWS_SERVICE.get());
       if (SetupUtils.isWindows())
       {
         argParser.addArgument(enableWindowsService);
@@ -202,7 +204,7 @@
 
       showUsage = new BooleanArgument("help", OPTION_SHORT_HELP,
           OPTION_LONG_HELP,
-          MSGID_INSTALLDS_DESCRIPTION_HELP);
+          INFO_INSTALLDS_DESCRIPTION_HELP.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
@@ -219,12 +221,12 @@
   protected void guiLaunchFailed(String logFileName) {
     if (logFileName != null)
     {
-      System.err.println(getMsg("setup-launcher-gui-launched-failed-details",
-          logFileName));
+      System.err.println(INFO_SETUP_LAUNCHER_GUI_LAUNCHED_FAILED_DETAILS.get(
+              logFileName));
     }
     else
     {
-      System.err.println(getMsg("setup-launcher-gui-launched-failed"));
+      System.err.println(INFO_SETUP_LAUNCHER_GUI_LAUNCHED_FAILED.get());
     }
   }
 
@@ -239,7 +241,7 @@
    * {@inheritDoc}
    */
   protected void willLaunchGui() {
-    System.out.println(getMsg("setup-launcher-launching-gui"));
+    System.out.println(INFO_SETUP_LAUNCHER_LAUNCHING_GUI.get());
     System.setProperty("org.opends.quicksetup.Application.class",
             "org.opends.quicksetup.installer.offline.OfflineInstaller");
   }
@@ -247,8 +249,8 @@
   /**
    * {@inheritDoc}
    */
-  protected String getFrameTitle() {
-    return getI18n().getMsg("frame-install-title");
+  protected Message getFrameTitle() {
+    return INFO_FRAME_INSTALL_TITLE.get();
   }
 
   /**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
index 664d310..dcc6a71 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
@@ -26,8 +26,6 @@
  */
 package org.opends.quicksetup.installer;
 
-import static org.opends.quicksetup.Step.*;
-
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -63,7 +61,8 @@
 import org.opends.admin.ads.TopologyCacheException;
 import org.opends.admin.ads.util.ApplicationTrustManager;
 import org.opends.quicksetup.ui.*;
-import org.opends.quicksetup.util.Utils;
+import static org.opends.quicksetup.util.Utils.*;
+import static org.opends.quicksetup.Step.*;
 import org.opends.quicksetup.*;
 import org.opends.server.util.CertificateManager;
 import org.opends.quicksetup.installer.ui.DataOptionsPanel;
@@ -75,6 +74,10 @@
 import org.opends.quicksetup.installer.ui.ServerSettingsPanel;
 import org.opends.quicksetup.installer.ui.SuffixesToReplicatePanel;
 import org.opends.server.util.SetupUtils;
+import org.opends.server.types.OpenDsException;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
 
 import javax.naming.ldap.Rdn;
 import javax.swing.*;
@@ -197,7 +200,7 @@
    */
   public UserData createUserData() {
     UserData ud = new UserData();
-    ud.setServerLocation(Utils.getDefaultServerLocation());
+    ud.setServerLocation(getDefaultServerLocation());
     return ud;
   }
 
@@ -346,8 +349,8 @@
   public void closeClicked(WizardStep cStep, QuickSetup qs) {
     if (cStep == PROGRESS) {
       if (isFinished()
-              || qs.displayConfirmation(getMsg("confirm-close-install-msg"),
-              getMsg("confirm-close-install-title"))) {
+              || qs.displayConfirmation(INFO_CONFIRM_CLOSE_INSTALL_MSG.get(),
+              INFO_CONFIRM_CLOSE_INSTALL_TITLE.get())) {
         qs.quit();
       }
     }
@@ -392,8 +395,8 @@
               "Cannot click on quit from progress step");
     } else if (installStatus.isInstalled()) {
       qs.quit();
-    } else if (qs.displayConfirmation(getMsg("confirm-quit-install-msg"),
-            getMsg("confirm-quit-install-title"))) {
+    } else if (qs.displayConfirmation(INFO_CONFIRM_QUIT_INSTALL_MSG.get(),
+            INFO_CONFIRM_QUIT_INSTALL_TITLE.get())) {
       qs.quit();
     }
   }
@@ -491,22 +494,22 @@
   /**
    * {@inheritDoc}
    */
-  public String getCloseButtonToolTipKey() {
-    return "close-button-install-tooltip";
+  public Message getCloseButtonToolTip() {
+    return INFO_CLOSE_BUTTON_INSTALL_TOOLTIP.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  public String getQuitButtonToolTipKey() {
-    return "quit-button-install-tooltip";
+  public Message getQuitButtonToolTip() {
+    return INFO_QUIT_BUTTON_INSTALL_TOOLTIP.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  public String getFinishButtonToolTipKey() {
-    return "finish-button-install-tooltip";
+  public Message getFinishButtonToolTip() {
+    return INFO_FINISH_BUTTON_INSTALL_TOOLTIP.get();
   }
 
   /**
@@ -535,8 +538,8 @@
   /**
    * {@inheritDoc}
    */
-  public String getFrameTitle() {
-    return getMsg("frame-install-title");
+  public Message getFrameTitle() {
+    return INFO_FRAME_INSTALL_TITLE.get();
   }
 
   /** Indicates the current progress step. */
@@ -723,8 +726,8 @@
     }
     catch (IOException ioe)
     {
-      String failedMsg = getThrowableMsg("error-creating-temp-file", null,
-          ioe);
+      Message failedMsg = getThrowableMsg(
+              INFO_ERROR_CREATING_TEMP_FILE.get(), ioe);
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
           failedMsg, ioe);
@@ -737,14 +740,14 @@
    * @throws ApplicationException if something goes wrong.
    */
   protected void configureServer() throws ApplicationException {
-    notifyListeners(getFormattedWithPoints(getMsg("progress-configuring")));
+    notifyListeners(getFormattedWithPoints(INFO_PROGRESS_CONFIGURING.get()));
 
     ArrayList<String> argList = new ArrayList<String>();
     argList.add("-C");
     argList.add(CONFIG_CLASS_NAME);
 
     argList.add("-c");
-    argList.add(Utils.getPath(getInstallation().getCurrentConfigurationFile()));
+    argList.add(getPath(getInstallation().getCurrentConfigurationFile()));
     argList.add("-p");
     argList.add(String.valueOf(getUserData().getServerPort()));
 
@@ -847,13 +850,13 @@
       {
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-            getMsg("error-configuring"), null);
+            INFO_ERROR_CONFIGURING.get(), null);
       }
     } catch (Throwable t)
     {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-          getThrowableMsg("error-configuring", null, t), t);
+          getThrowableMsg(INFO_ERROR_CONFIGURING.get(), t), t);
     }
 
     try
@@ -863,7 +866,7 @@
       {
         notifyListeners(getLineBreak());
         notifyListeners(getFormattedWithPoints(
-            getMsg("progress-updating-certificates")));
+            INFO_PROGRESS_UPDATING_CERTIFICATES.get()));
       }
       CertificateManager certManager;
       CertificateManager trustManager;
@@ -891,7 +894,7 @@
             pwd);
         trustManager.addCertificate(SELF_SIGNED_CERT_ALIAS,
             new File(getTemporaryCertificatePath()));
-        Utils.createFile(getKeystorePinPath(), pwd);
+        createFile(getKeystorePinPath(), pwd);
         f = new File(getTemporaryCertificatePath());
         f.delete();
 
@@ -910,7 +913,7 @@
             sec.getKeystorePassword());
         trustManager.addCertificate(sec.getAliasToUse(),
             new File(getTemporaryCertificatePath()));
-        Utils.createFile(getKeystorePinPath(), sec.getKeystorePassword());
+        createFile(getKeystorePinPath(), sec.getKeystorePassword());
         f = new File(getTemporaryCertificatePath());
         f.delete();
         break;
@@ -928,7 +931,7 @@
             sec.getKeystorePassword());
         trustManager.addCertificate(sec.getAliasToUse(),
             new File(getTemporaryCertificatePath()));
-        Utils.createFile(getKeystorePinPath(), sec.getKeystorePassword());
+        createFile(getKeystorePinPath(), sec.getKeystorePassword());
         f = new File(getTemporaryCertificatePath());
         f.delete();
         break;
@@ -946,7 +949,7 @@
             sec.getKeystorePassword());
         trustManager.addCertificate(sec.getAliasToUse(),
             new File(getTemporaryCertificatePath()));
-        Utils.createFile(getKeystorePinPath(), sec.getKeystorePassword());
+        createFile(getKeystorePinPath(), sec.getKeystorePassword());
         break;
       default:
         throw new IllegalStateException("Unknown certificate type: "+certType);
@@ -960,7 +963,8 @@
     {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-          getThrowableMsg("error-configuring-certificate", null, t), t);
+          getThrowableMsg(INFO_ERROR_CONFIGURING_CERTIFICATE.get(),
+                  t), t);
     }
   }
 
@@ -970,10 +974,9 @@
    * @throws ApplicationException if something goes wrong.
    */
   private void createBaseEntry() throws ApplicationException {
-    String[] arg =
-      { getUserData().getNewSuffixOptions().getBaseDn() };
     notifyListeners(getFormattedWithPoints(
-        getMsg("progress-creating-base-entry", arg)));
+        INFO_PROGRESS_CREATING_BASE_ENTRY.get(
+                getUserData().getNewSuffixOptions().getBaseDn())));
 
     InstallerHelper helper = new InstallerHelper();
     String baseDn = getUserData().getNewSuffixOptions().getBaseDn();
@@ -984,7 +987,7 @@
     argList.add(CONFIG_CLASS_NAME);
 
     argList.add("-f");
-    argList.add(Utils.getPath(getInstallation().getCurrentConfigurationFile()));
+    argList.add(getPath(getInstallation().getCurrentConfigurationFile()));
 
     argList.add("-n");
     argList.add(getBackendName());
@@ -1005,13 +1008,13 @@
       {
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-            getMsg("error-creating-base-entry"), null);
+            INFO_ERROR_CREATING_BASE_ENTRY.get(), null);
       }
     } catch (Throwable t)
     {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-          getThrowableMsg("error-creating-base-entry", null, t), t);
+          getThrowableMsg(INFO_ERROR_CREATING_BASE_ENTRY.get(), t), t);
     }
 
     notifyListeners(getFormattedDone());
@@ -1023,17 +1026,18 @@
    * @throws ApplicationException if something goes wrong.
    */
   private void importLDIF() throws ApplicationException {
-    String[] arg =
-      { getUserData().getNewSuffixOptions().getLDIFPath() };
-    notifyListeners(getFormattedProgress(getMsg("progress-importing-ldif", arg))
-        + getLineBreak());
+    MessageBuilder mb = new MessageBuilder();
+    mb.append(getFormattedProgress(INFO_PROGRESS_IMPORTING_LDIF.get(
+            getUserData().getNewSuffixOptions().getLDIFPath())));
+    mb.append(getLineBreak());
+    notifyListeners(mb.toMessage());
 
     ArrayList<String> argList = new ArrayList<String>();
     argList.add("-C");
     argList.add(CONFIG_CLASS_NAME);
 
     argList.add("-f");
-    argList.add(Utils.getPath(getInstallation().getCurrentConfigurationFile()));
+    argList.add(getPath(getInstallation().getCurrentConfigurationFile()));
     argList.add("-n");
     argList.add(getBackendName());
     argList.add("-l");
@@ -1051,13 +1055,13 @@
       {
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-            getMsg("error-importing-ldif"), null);
+            INFO_ERROR_IMPORTING_LDIF.get(), null);
       }
     } catch (Throwable t)
     {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-          getThrowableMsg("error-importing-ldif", null, t), t);
+          getThrowableMsg(INFO_ERROR_IMPORTING_LDIF.get(), t), t);
     }
   }
 
@@ -1069,18 +1073,19 @@
   private void importAutomaticallyGenerated() throws ApplicationException {
     File templatePath = createTemplateFile();
     int nEntries = getUserData().getNewSuffixOptions().getNumberEntries();
-    String[] arg =
-      { String.valueOf(nEntries) };
-    notifyListeners(getFormattedProgress(getMsg(
-        "progress-import-automatically-generated", arg))
-        + getLineBreak());
+    MessageBuilder mb = new MessageBuilder();
+    mb.append(getFormattedProgress(
+            INFO_PROGRESS_IMPORT_AUTOMATICALLY_GENERATED.get(
+                    String.valueOf(nEntries))));
+    mb.append(getLineBreak());
+    notifyListeners(mb.toMessage());
 
     ArrayList<String> argList = new ArrayList<String>();
     argList.add("-C");
     argList.add(CONFIG_CLASS_NAME);
 
     argList.add("-f");
-    argList.add(Utils.getPath(getInstallation().getCurrentConfigurationFile()));
+    argList.add(getPath(getInstallation().getCurrentConfigurationFile()));
     argList.add("-n");
     argList.add(getBackendName());
     argList.add("-t");
@@ -1100,16 +1105,15 @@
       {
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-            getMsg("error-import-ldif-tool-return-code",
+            INFO_ERROR_IMPORT_LDIF_TOOL_RETURN_CODE.get(
                     Integer.toString(result)), null);
       }
     } catch (Throwable t)
     {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-          getThrowableMsg("error-import-automatically-generated",
-                  new String[] { Utils.listToString(argList, " "),
-                          t.getLocalizedMessage()}, t), t);
+          getThrowableMsg(INFO_ERROR_IMPORT_AUTOMATICALLY_GENERATED.get(
+                  listToString(argList, " "), t.getLocalizedMessage()), t), t);
     }
   }
 
@@ -1131,21 +1135,20 @@
       String dn = auth.getDn();
       String pwd = auth.getPwd();
       notifyListeners(getFormattedWithPoints(
-          getMsg("progress-unconfiguring-ads-on-remote",
-              getHostDisplay(auth))));
+          INFO_PROGRESS_UNCONFIGURING_ADS_ON_REMOTE.get(getHostDisplay(auth))));
       try
       {
         if (auth.useSecureConnection())
         {
           ApplicationTrustManager trustManager = getTrustManager();
           trustManager.setHost(auth.getHostName());
-          ctx = Utils.createLdapsContext(ldapUrl, dn, pwd,
-              Utils.getDefaultLDAPTimeout(), null, trustManager);
+          ctx = createLdapsContext(ldapUrl, dn, pwd,
+              getDefaultLDAPTimeout(), null, trustManager);
         }
         else
         {
-          ctx = Utils.createLdapContext(ldapUrl, dn, pwd,
-              Utils.getDefaultLDAPTimeout(), null);
+          ctx = createLdapContext(ldapUrl, dn, pwd,
+              getDefaultLDAPTimeout(), null);
         }
 
         ADSContext adsContext = new ADSContext(ctx);
@@ -1186,8 +1189,7 @@
       }
       catch (Throwable t)
       {
-        String html = getFormattedError(t, true);
-        notifyListeners(html);
+        notifyListeners(getFormattedError(t, true));
       }
       finally
       {
@@ -1207,8 +1209,8 @@
     for (ServerDescriptor server : hmConfiguredRemoteReplication.keySet())
     {
       notifyListeners(getFormattedWithPoints(
-          getMsg("progress-unconfiguring-replication-remote",
-              server.getHostPort(true))));
+          INFO_PROGRESS_UNCONFIGURING_REPLICATION_REMOTE.get(
+                  server.getHostPort(true))));
       try
       {
         ctx = getRemoteConnection(server, getTrustManager());
@@ -1218,8 +1220,7 @@
       }
       catch (ApplicationException ae)
       {
-        String html = getFormattedError(ae, true);
-        notifyListeners(html);
+        notifyListeners(getFormattedError(ae, true));
       }
       if (ctx != null)
       {
@@ -1246,7 +1247,7 @@
   protected void configureReplication() throws ApplicationException
   {
     notifyListeners(getFormattedWithPoints(
-        getMsg("progress-configuring-replication")));
+        INFO_PROGRESS_CONFIGURING_REPLICATION.get()));
 
     InstallerHelper helper = new InstallerHelper();
     Set<Integer> knownServerIds = new HashSet<Integer>();
@@ -1342,7 +1343,8 @@
     }
     catch (NamingException ne)
     {
-      String failedMsg = getThrowableMsg("error-connecting-to-local", null, ne);
+      Message failedMsg = getThrowableMsg(
+              INFO_ERROR_CONNECTING_TO_LOCAL.get(), ne);
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR, failedMsg, ne);
     }
@@ -1384,8 +1386,8 @@
       for (ServerDescriptor server : hm.keySet())
       {
         notifyListeners(getFormattedWithPoints(
-            getMsg("progress-configuring-replication-remote",
-                server.getHostPort(true))));
+            INFO_PROGRESS_CONFIGURING_REPLICATION_REMOTE.get(
+                    server.getHostPort(true))));
         Integer v = (Integer)server.getServerProperties().get(
             ServerDescriptor.ServerProperty.REPLICATION_SERVER_PORT);
         int replicationPort;
@@ -1431,7 +1433,7 @@
    */
   protected void enableWindowsService() throws ApplicationException {
       notifyListeners(getFormattedProgress(
-        getMsg("progress-enabling-windows-service")));
+        INFO_PROGRESS_ENABLING_WINDOWS_SERVICE.get()));
       InstallerHelper helper = new InstallerHelper();
       helper.enableWindowsService();
   }
@@ -1442,55 +1444,57 @@
    * @param hmSummary the Map to be updated.
    */
   protected void initSummaryMap(
-      Map<InstallProgressStep, String> hmSummary)
+      Map<InstallProgressStep, Message> hmSummary)
   {
     hmSummary.put(InstallProgressStep.NOT_STARTED,
-        getFormattedSummary(getMsg("summary-install-not-started")));
+        getFormattedSummary(INFO_SUMMARY_INSTALL_NOT_STARTED.get()));
     hmSummary.put(InstallProgressStep.DOWNLOADING,
-        getFormattedSummary(getMsg("summary-downloading")));
+        getFormattedSummary(INFO_SUMMARY_DOWNLOADING.get()));
     hmSummary.put(InstallProgressStep.EXTRACTING,
-        getFormattedSummary(getMsg("summary-extracting")));
+        getFormattedSummary(INFO_SUMMARY_EXTRACTING.get()));
     hmSummary.put(InstallProgressStep.CONFIGURING_SERVER,
-        getFormattedSummary(getMsg("summary-configuring")));
+        getFormattedSummary(INFO_SUMMARY_CONFIGURING.get()));
     hmSummary.put(InstallProgressStep.CREATING_BASE_ENTRY,
-        getFormattedSummary(getMsg("summary-creating-base-entry")));
+        getFormattedSummary(INFO_SUMMARY_CREATING_BASE_ENTRY.get()));
     hmSummary.put(InstallProgressStep.IMPORTING_LDIF,
-        getFormattedSummary(getMsg("summary-importing-ldif")));
+        getFormattedSummary(INFO_SUMMARY_IMPORTING_LDIF.get()));
     hmSummary.put(
         InstallProgressStep.IMPORTING_AUTOMATICALLY_GENERATED,
         getFormattedSummary(
-            getMsg("summary-importing-automatically-generated")));
+            INFO_SUMMARY_IMPORTING_AUTOMATICALLY_GENERATED.get()));
     hmSummary.put(InstallProgressStep.CONFIGURING_REPLICATION,
-        getFormattedSummary(getMsg("summary-configuring-replication")));
+        getFormattedSummary(INFO_SUMMARY_CONFIGURING_REPLICATION.get()));
     hmSummary.put(InstallProgressStep.STARTING_SERVER,
-        getFormattedSummary(getMsg("summary-starting")));
+        getFormattedSummary(INFO_SUMMARY_STARTING.get()));
     hmSummary.put(InstallProgressStep.STOPPING_SERVER,
-        getFormattedSummary(getMsg("summary-stopping")));
+        getFormattedSummary(INFO_SUMMARY_STOPPING.get()));
     hmSummary.put(InstallProgressStep.CONFIGURING_ADS,
-        getFormattedSummary(getMsg("summary-configuring-ads")));
+        getFormattedSummary(INFO_SUMMARY_CONFIGURING_ADS.get()));
     hmSummary.put(InstallProgressStep.INITIALIZE_REPLICATED_SUFFIXES,
-        getFormattedSummary(getMsg("summary-initialize-replicated-suffixes")));
+        getFormattedSummary(INFO_SUMMARY_INITIALIZE_REPLICATED_SUFFIXES.get()));
     hmSummary.put(InstallProgressStep.ENABLING_WINDOWS_SERVICE,
-        getFormattedSummary(getMsg("summary-enabling-windows-service")));
+        getFormattedSummary(INFO_SUMMARY_ENABLING_WINDOWS_SERVICE.get()));
     hmSummary.put(InstallProgressStep.WAITING_TO_CANCEL,
-        getFormattedSummary(getMsg("summary-waiting-to-cancel")));
+        getFormattedSummary(INFO_SUMMARY_WAITING_TO_CANCEL.get()));
     hmSummary.put(InstallProgressStep.CANCELING,
-        getFormattedSummary(getMsg("summary-canceling")));
+        getFormattedSummary(INFO_SUMMARY_CANCELING.get()));
 
     Installation installation = getInstallation();
-    String cmd = Utils.getPath(installation.getStatusPanelCommandFile());
+    String cmd = getPath(installation.getStatusPanelCommandFile());
     cmd = UIFactory.applyFontToHtml(cmd, UIFactory.INSTRUCTIONS_MONOSPACE_FONT);
-    String[] args = {formatter.getFormattedText(getInstallationPath()),
-        getMsg("general-server-stopped"),
-        cmd};
     hmSummary.put(InstallProgressStep.FINISHED_SUCCESSFULLY,
-        getFormattedSuccess(
-            getMsg("summary-install-finished-successfully", args)));
+            getFormattedSuccess(
+                    INFO_SUMMARY_INSTALL_FINISHED_SUCCESSFULLY.get(
+                            formatter.getFormattedText(
+                                    Message.raw(getInstallationPath())),
+                            INFO_GENERAL_SERVER_STOPPED.get(),
+                            cmd)));
     hmSummary.put(InstallProgressStep.FINISHED_CANCELED,
-        getFormattedSuccess(
-            getMsg("summary-install-finished-canceled", args)));
+            getFormattedSuccess(INFO_SUMMARY_INSTALL_FINISHED_CANCELED.get()));
     hmSummary.put(InstallProgressStep.FINISHED_WITH_ERROR,
-        getFormattedError(getMsg("summary-install-finished-with-error", args)));
+            getFormattedError(INFO_SUMMARY_INSTALL_FINISHED_WITH_ERROR.get(
+                    INFO_GENERAL_SERVER_STOPPED.get(),
+                    cmd)));
   }
 
   /**
@@ -1498,27 +1502,31 @@
    * @param hmSummary the Map containing the messages.
    */
   protected void updateSummaryWithServerState(
-      Map<InstallProgressStep, String> hmSummary)
+      Map<InstallProgressStep, Message> hmSummary)
   {
    Installation installation = getInstallation();
-   String cmd = Utils.getPath(installation.getStatusPanelCommandFile());
+   String cmd = getPath(installation.getStatusPanelCommandFile());
    cmd = UIFactory.applyFontToHtml(cmd, UIFactory.INSTRUCTIONS_MONOSPACE_FONT);
-   String status;
+   Message status;
    if (installation.getStatus().isServerRunning())
    {
-     status = getMsg("general-server-started");
+     status = INFO_GENERAL_SERVER_STARTED.get();
    }
    else
    {
-     status = getMsg("general-server-stopped");
+     status = INFO_GENERAL_SERVER_STOPPED.get();
    }
-   String[] args = {formatter.getFormattedText(getInstallationPath()), status,
-       cmd};
-   hmSummary.put(InstallProgressStep.FINISHED_SUCCESSFULLY,
-       getFormattedSuccess(
-           getMsg("summary-install-finished-successfully", args)));
-   hmSummary.put(InstallProgressStep.FINISHED_WITH_ERROR,
-       getFormattedError(getMsg("summary-install-finished-with-error", args)));
+    hmSummary.put(InstallProgressStep.FINISHED_SUCCESSFULLY,
+            getFormattedSuccess(
+                    INFO_SUMMARY_INSTALL_FINISHED_SUCCESSFULLY.get(
+                            formatter.getFormattedText(
+                                    Message.raw(getInstallationPath())),
+                            status,
+                            cmd)));
+    hmSummary.put(InstallProgressStep.FINISHED_WITH_ERROR,
+            getFormattedError(INFO_SUMMARY_INSTALL_FINISHED_WITH_ERROR.get(
+                    status,
+                    cmd)));
   }
   /**
    * Checks the value of <code>canceled</code> field and throws an
@@ -1534,7 +1542,7 @@
       notifyListeners(null);
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CANCELLED,
-            getMsg("upgrade-canceled"), null);
+            INFO_UPGRADE_CANCELED.get(), null);
     }
   }
 
@@ -1665,7 +1673,8 @@
     }
     catch (Throwable t)
     {
-      String failedMsg = getThrowableMsg("error-connecting-to-local", null, t);
+      Message failedMsg =
+              getThrowableMsg(INFO_ERROR_CONNECTING_TO_LOCAL.get(), t);
       try
       {
         if (ctx != null)
@@ -1692,7 +1701,7 @@
       String hostPort = server.getHostPort(true);
 
       notifyListeners(getFormattedProgress(
-        getMsg("progress-initializing-suffix", dn, hostPort)));
+        INFO_PROGRESS_INITIALIZING_SUFFIX.get(dn, hostPort)));
       notifyListeners(getLineBreak());
       try
       {
@@ -1709,7 +1718,7 @@
             ServerDescriptor s = ServerDescriptor.createStandalone(rCtx);
             for (ReplicaDescriptor r : s.getReplicas())
             {
-              if (Utils.areDnsEqual(r.getSuffix().getDN(), dn))
+              if (areDnsEqual(r.getSuffix().getDN(), dn))
               {
                 replicationId = r.getReplicationId();
               }
@@ -1717,10 +1726,11 @@
           }
           catch (NamingException ne)
           {
-            String[] arg = {server.getHostPort(true)};
             throw new ApplicationException(
                 ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-                getMsg("cannot-connect-to-remote-generic", arg), ne);
+                INFO_CANNOT_CONNECT_TO_REMOTE_GENERIC.get(
+                        server.getHostPort(true),
+                        ne.getLocalizedMessage()), ne);
           }
           finally
           {
@@ -1754,7 +1764,7 @@
             {
               throw new ApplicationException(
                   ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
-                  pnfe.getLocalizedMessage(), null);
+                  pnfe.getMessageObject(), null);
             }
             try
             {
@@ -1820,13 +1830,13 @@
         {
           ApplicationTrustManager trustManager = getTrustManager();
           trustManager.setHost(auth.getHostName());
-          ctx = Utils.createLdapsContext(ldapUrl, dn, pwd,
-              Utils.getDefaultLDAPTimeout(), null, trustManager);
+          ctx = createLdapsContext(ldapUrl, dn, pwd,
+              getDefaultLDAPTimeout(), null, trustManager);
         }
         else
         {
-          ctx = Utils.createLdapContext(ldapUrl, dn, pwd,
-              Utils.getDefaultLDAPTimeout(), null);
+          ctx = createLdapContext(ldapUrl, dn, pwd,
+              getDefaultLDAPTimeout(), null);
         }
 
         ADSContext adsContext = new ADSContext(ctx);
@@ -1838,9 +1848,8 @@
           {
             try
             {
-              String[] arg = {getHostDisplay(auth)};
               notifyListeners(getFormattedWithPoints(
-                  getMsg("progress-creating-administrator", arg)));
+                  INFO_PROGRESS_CREATING_ADMINISTRATOR.get()));
               adsContext.createAdministrator(getAdministratorProperties());
               createdAdministrator = true;
               notifyListeners(getFormattedDone());
@@ -1853,7 +1862,7 @@
                 ADSContextException.ErrorType.ALREADY_REGISTERED)
               {
                 notifyListeners(getFormattedWarning(
-                    getMsg("administrator-already-registered")));
+                    INFO_ADMINISTRATOR_ALREADY_REGISTERED.get()));
               }
               else
               {
@@ -1865,7 +1874,7 @@
         else
         {
           notifyListeners(getFormattedWithPoints(
-              getMsg("progress-creating-ads-on-remote", getHostDisplay(auth))));
+              INFO_PROGRESS_CREATING_ADS_ON_REMOTE.get(getHostDisplay(auth))));
 
           adsContext.createAdminData(null);
           adsContext.createAdministrator(getAdministratorProperties());
@@ -1879,15 +1888,15 @@
         }
         /* Configure local server to have an ADS */
         notifyListeners(getFormattedWithPoints(
-            getMsg("progress-creating-ads")));
+            INFO_PROGRESS_CREATING_ADS.get()));
         try
         {
           localCtx = createLocalContext();
         }
         catch (Throwable t)
         {
-          String failedMsg = getThrowableMsg("error-connecting-to-local", null,
-              t);
+          Message failedMsg = getThrowableMsg(
+                  INFO_ERROR_CONNECTING_TO_LOCAL.get(), t);
           throw new ApplicationException(
               ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
               failedMsg, t);
@@ -1911,7 +1920,7 @@
           {
             knownServerIds.add(replica.getReplicationId());
           }
-          if (Utils.areDnsEqual(suffix.getDN(),
+          if (areDnsEqual(suffix.getDN(),
               ADSContext.getAdministrationSuffixDN()))
           {
             replicationServers.addAll(suffix.getReplicationServers());
@@ -1998,11 +2007,11 @@
         ServerDescriptor server = ServerDescriptor.createStandalone(ctx);
         for (ReplicaDescriptor replica : server.getReplicas())
         {
-          if (Utils.areDnsEqual(replica.getSuffix().getDN(),
+          if (areDnsEqual(replica.getSuffix().getDN(),
               ADSContext.getAdministrationSuffixDN()))
           {
             notifyListeners(getFormattedWithPoints(
-                getMsg("progress-initializing-ads")));
+                INFO_PROGRESS_INITIALIZING_ADS.get()));
 
             int replicationId = replica.getReplicationId();
             int nTries = 5;
@@ -2023,7 +2032,7 @@
                 {
                   throw new ApplicationException(
                       ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
-                      pnfe.getLocalizedMessage(), null);
+                      pnfe.getMessageObject(), null);
                 }
                 try
                 {
@@ -2044,17 +2053,17 @@
       }
       catch (NoPermissionException x)
       {
-        String[] arg = {getHostDisplay(auth)};
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-            getMsg("cannot-connect-to-remote-permissions", arg), x);
+            INFO_CANNOT_CONNECT_TO_REMOTE_PERMISSIONS.get(
+                    getHostDisplay(auth)), x);
       }
       catch (NamingException ne)
       {
-        String[] arg = {getHostDisplay(auth)};
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-            getMsg("cannot-connect-to-remote-generic", arg), ne);
+            INFO_CANNOT_CONNECT_TO_REMOTE_GENERIC.get(
+                    getHostDisplay(auth), ne.getLocalizedMessage()), ne);
       }
       catch (TopologyCacheException tpe)
       {
@@ -2062,14 +2071,14 @@
             "configure ADS replication.", tpe);
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-            getMsg("bug-msg"), tpe);
+            INFO_BUG_MSG.get(), tpe);
       }
       catch (ADSContextException ace)
       {
-        String[] args = {getHostDisplay(auth), ace.toString()};
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-            getMsg("remote-ads-exception", args), ace);
+            INFO_REMOTE_ADS_EXCEPTION.get(
+                    getHostDisplay(auth), ace.getReason()), ace);
       }
       finally
       {
@@ -2101,15 +2110,16 @@
       {
         /* Configure local server to have an ADS */
         notifyListeners(getFormattedWithPoints(
-            getMsg("progress-creating-ads")));
+            INFO_PROGRESS_CREATING_ADS.get()));
         try
         {
           localCtx = createLocalContext();
         }
         catch (Throwable t)
         {
-          String failedMsg = getThrowableMsg("error-connecting-to-local", null,
-              t);
+          Message failedMsg = getThrowableMsg(
+                  INFO_ERROR_CONNECTING_TO_LOCAL.get(),
+                  t);
           throw new ApplicationException(
               ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
               failedMsg, t);
@@ -2138,7 +2148,7 @@
       {
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-            getMsg("ads-exception", ace.toString()), ace);
+            INFO_ADS_EXCEPTION.get(ace.toString()), ace);
       }
       finally
       {
@@ -2298,13 +2308,13 @@
     serverProperties.put(ADSContext.ServerProperty.JMX_ENABLED, "false");
 
     String path;
-    if (Utils.isWebStart())
+    if (isWebStart())
     {
       path = getUserData().getServerLocation();
     }
     else
     {
-      path = Utils.getInstallPathFromClasspath();
+      path = getInstallPathFromClasspath();
     }
     serverProperties.put(ADSContext.ServerProperty.INSTANCE_PATH, path);
 
@@ -2315,7 +2325,7 @@
     serverProperties.put(ADSContext.ServerProperty.ID, serverID);
 
     serverProperties.put(ADSContext.ServerProperty.HOST_OS,
-        Utils.getOSString());
+        getOSString());
     return serverProperties;
   }
 
@@ -2329,7 +2339,7 @@
     adminProperties.put(ADSContext.AdministratorProperty.PASSWORD,
         getUserData().getGlobalAdministratorPassword());
     adminProperties.put(ADSContext.AdministratorProperty.DESCRIPTION,
-        getMsg("global-administrator-description"));
+        INFO_GLOBAL_ADMINISTRATOR_DESCRIPTION.get());
     return adminProperties;
   }
 
@@ -2344,20 +2354,20 @@
   private void updateUserDataForServerSettingsPanel(QuickSetup qs)
       throws UserDataException
   {
-    ArrayList<String> errorMsgs = new ArrayList<String>();
-    String confirmationMsg = null;
+    ArrayList<Message> errorMsgs = new ArrayList<Message>();
+    Message confirmationMsg = null;
 
-    if (Utils.isWebStart())
+    if (isWebStart())
     {
       // Check the server location
       String serverLocation = qs.getFieldStringValue(FieldName.SERVER_LOCATION);
 
       if ((serverLocation == null) || ("".equals(serverLocation.trim())))
       {
-        errorMsgs.add(getMsg("empty-server-location"));
+        errorMsgs.add(INFO_EMPTY_SERVER_LOCATION.get());
         qs.displayFieldInvalid(FieldName.SERVER_LOCATION, true);
       }
-      else if (!Utils.parentDirectoryExists(serverLocation))
+      else if (!parentDirectoryExists(serverLocation))
       {
         String existingParentDirectory = null;
         File f = new File(serverLocation);
@@ -2379,69 +2389,58 @@
         }
         if (existingParentDirectory == null)
         {
-          String[] arg =
-            { serverLocation };
-          errorMsgs.add(getMsg("parent-directory-could-not-be-found", arg));
+          errorMsgs.add(INFO_PARENT_DIRECTORY_COULD_NOT_BE_FOUND.get(
+                  serverLocation));
           qs.displayFieldInvalid(FieldName.SERVER_LOCATION, true);
         }
         else
         {
-          if (!Utils.canWrite(existingParentDirectory))
+          if (!canWrite(existingParentDirectory))
           {
-            String[] arg =
-              { existingParentDirectory };
-            errorMsgs.add(getMsg("directory-not-writable", arg));
+            errorMsgs.add(INFO_DIRECTORY_NOT_WRITABLE.get(
+                    existingParentDirectory));
             qs.displayFieldInvalid(FieldName.SERVER_LOCATION, true);
           }
-          else if (!Utils.hasEnoughSpace(existingParentDirectory,
+          else if (!hasEnoughSpace(existingParentDirectory,
               getRequiredInstallSpace()))
           {
             long requiredInMb = getRequiredInstallSpace() / (1024 * 1024);
-            String[] args =
-              { existingParentDirectory, String.valueOf(requiredInMb) };
-            errorMsgs.add(getMsg("not-enough-disk-space", args));
+            errorMsgs.add(INFO_NOT_ENOUGH_DISK_SPACE.get(
+                    existingParentDirectory, String.valueOf(requiredInMb)));
             qs.displayFieldInvalid(FieldName.SERVER_LOCATION, true);
           }
           else
           {
-            String[] arg =
-            { serverLocation };
             confirmationMsg =
-              getMsg("parent-directory-does-not-exist-confirmation", arg);
+              INFO_PARENT_DIRECTORY_DOES_NOT_EXIST_CONFIRMATION.get(
+                      serverLocation);
             getUserData().setServerLocation(serverLocation);
           }
         }
-      } else if (Utils.fileExists(serverLocation))
+      } else if (fileExists(serverLocation))
       {
-        String[] arg =
-          { serverLocation };
-        errorMsgs.add(getMsg("file-exists", arg));
+        errorMsgs.add(INFO_FILE_EXISTS.get(serverLocation));
         qs.displayFieldInvalid(FieldName.SERVER_LOCATION, true);
-      } else if (Utils.directoryExistsAndIsNotEmpty(serverLocation))
+      } else if (directoryExistsAndIsNotEmpty(serverLocation))
       {
-        String[] arg =
-          { serverLocation };
-        errorMsgs.add(getMsg("directory-exists-not-empty", arg));
+        errorMsgs.add(INFO_DIRECTORY_EXISTS_NOT_EMPTY.get(serverLocation));
         qs.displayFieldInvalid(FieldName.SERVER_LOCATION, true);
-      } else if (!Utils.canWrite(serverLocation))
+      } else if (!canWrite(serverLocation))
       {
-        String[] arg =
-          { serverLocation };
-        errorMsgs.add(getMsg("directory-not-writable", arg));
+        errorMsgs.add(INFO_DIRECTORY_NOT_WRITABLE.get(serverLocation));
         qs.displayFieldInvalid(FieldName.SERVER_LOCATION, true);
 
-      } else if (!Utils.hasEnoughSpace(serverLocation,
+      } else if (!hasEnoughSpace(serverLocation,
           getRequiredInstallSpace()))
       {
         long requiredInMb = getRequiredInstallSpace() / (1024 * 1024);
-        String[] args =
-          { serverLocation, String.valueOf(requiredInMb) };
-        errorMsgs.add(getMsg("not-enough-disk-space", args));
+        errorMsgs.add(INFO_NOT_ENOUGH_DISK_SPACE.get(
+                serverLocation, String.valueOf(requiredInMb)));
         qs.displayFieldInvalid(FieldName.SERVER_LOCATION, true);
 
-      } else if (Utils.isWindows() && (serverLocation.indexOf("%") != -1))
+      } else if (isWindows() && (serverLocation.indexOf("%") != -1))
       {
-        errorMsgs.add(getMsg("invalid-char-in-path", "%"));
+        errorMsgs.add(INFO_INVALID_CHAR_IN_PATH.get("%"));
         qs.displayFieldInvalid(FieldName.SERVER_LOCATION, true);
       } else
       {
@@ -2455,7 +2454,7 @@
     String hostName = qs.getFieldStringValue(FieldName.HOST_NAME);
     if ((hostName == null) || hostName.trim().length() == 0)
     {
-      errorMsgs.add(getMsg("empty-host-name"));
+      errorMsgs.add(INFO_EMPTY_HOST_NAME.get());
       qs.displayFieldInvalid(FieldName.HOST_NAME, true);
     }
     else
@@ -2472,20 +2471,19 @@
       port = Integer.parseInt(sPort);
       if ((port < MIN_PORT_VALUE) || (port > MAX_PORT_VALUE))
       {
-        String[] args =
-          { String.valueOf(MIN_PORT_VALUE), String.valueOf(MAX_PORT_VALUE) };
-        errorMsgs.add(getMsg("invalid-port-value-range", args));
+        errorMsgs.add(INFO_INVALID_PORT_VALUE_RANGE.get(
+                String.valueOf(MIN_PORT_VALUE),
+                String.valueOf(MAX_PORT_VALUE)));
         qs.displayFieldInvalid(FieldName.SERVER_PORT, true);
-      } else if (!Utils.canUseAsPort(port))
+      } else if (!canUseAsPort(port))
       {
-        if (Utils.isPriviledgedPort(port))
+        if (isPriviledgedPort(port))
         {
-          errorMsgs.add(getMsg("cannot-bind-priviledged-port", new String[]
-            { String.valueOf(port) }));
+          errorMsgs.add(INFO_CANNOT_BIND_PRIVILEDGED_PORT.get(
+            String.valueOf(port)));
         } else
         {
-          errorMsgs.add(getMsg("cannot-bind-port", new String[]
-            { String.valueOf(port) }));
+          errorMsgs.add(INFO_CANNOT_BIND_PORT.get(String.valueOf(port)));
         }
         qs.displayFieldInvalid(FieldName.SERVER_PORT, true);
 
@@ -2497,9 +2495,8 @@
 
     } catch (NumberFormatException nfe)
     {
-      String[] args =
-        { String.valueOf(MIN_PORT_VALUE), String.valueOf(MAX_PORT_VALUE) };
-      errorMsgs.add(getMsg("invalid-port-value-range", args));
+      errorMsgs.add(INFO_INVALID_PORT_VALUE_RANGE.get(
+              String.valueOf(MIN_PORT_VALUE), String.valueOf(MAX_PORT_VALUE)));
       qs.displayFieldInvalid(FieldName.SERVER_PORT, true);
     }
 
@@ -2511,28 +2508,26 @@
     {
       if ((securePort < MIN_PORT_VALUE) || (securePort > MAX_PORT_VALUE))
       {
-        String[] args =
-          { String.valueOf(MIN_PORT_VALUE), String.valueOf(MAX_PORT_VALUE) };
-        errorMsgs.add(getMsg("invalid-secure-port-value-range", args));
+        errorMsgs.add(INFO_INVALID_SECURE_PORT_VALUE_RANGE.get(
+                String.valueOf(MIN_PORT_VALUE),
+                String.valueOf(MAX_PORT_VALUE)));
         qs.displayFieldInvalid(FieldName.SECURITY_OPTIONS, true);
-      } else if (!Utils.canUseAsPort(securePort))
+      } else if (!canUseAsPort(securePort))
       {
-        if (Utils.isPriviledgedPort(securePort))
+        if (isPriviledgedPort(securePort))
         {
-          errorMsgs.add(getMsg("cannot-bind-priviledged-port", new String[]
-            { String.valueOf(securePort) }));
+          errorMsgs.add(INFO_CANNOT_BIND_PRIVILEDGED_PORT.get(
+            String.valueOf(securePort)));
         } else
         {
-          errorMsgs.add(getMsg("cannot-bind-port", new String[]
-            { String.valueOf(securePort) }));
+          errorMsgs.add(INFO_CANNOT_BIND_PORT.get(String.valueOf(securePort)));
         }
         qs.displayFieldInvalid(FieldName.SECURITY_OPTIONS, true);
 
       }
       else if (port == securePort)
       {
-        errorMsgs.add(getMsg("equal-ports",
-            new String[] { String.valueOf(securePort) }));
+        errorMsgs.add(INFO_EQUAL_PORTS.get());
         qs.displayFieldInvalid(FieldName.SECURITY_OPTIONS, true);
         qs.displayFieldInvalid(FieldName.SERVER_PORT, true);
       }
@@ -2554,15 +2549,15 @@
 
     if ((dmDn == null) || (dmDn.trim().length() == 0))
     {
-      errorMsgs.add(getMsg("empty-directory-manager-dn"));
+      errorMsgs.add(INFO_EMPTY_DIRECTORY_MANAGER_DN.get());
       qs.displayFieldInvalid(FieldName.DIRECTORY_MANAGER_DN, true);
-    } else if (!Utils.isDn(dmDn))
+    } else if (!isDn(dmDn))
     {
-      errorMsgs.add(getMsg("not-a-directory-manager-dn"));
+      errorMsgs.add(INFO_NOT_A_DIRECTORY_MANAGER_DN.get());
       qs.displayFieldInvalid(FieldName.DIRECTORY_MANAGER_DN, true);
-    } else if (Utils.isConfigurationDn(dmDn))
+    } else if (isConfigurationDn(dmDn))
     {
-      errorMsgs.add(getMsg("directory-manager-dn-is-config-dn"));
+      errorMsgs.add(INFO_DIRECTORY_MANAGER_DN_IS_CONFIG_DN.get());
       qs.displayFieldInvalid(FieldName.DIRECTORY_MANAGER_DN, true);
     } else
     {
@@ -2582,15 +2577,15 @@
     boolean pwdValid = true;
     if (!pwd1.equals(pwd2))
     {
-      errorMsgs.add(getMsg("not-equal-pwd"));
+      errorMsgs.add(INFO_NOT_EQUAL_PWD.get());
       qs.displayFieldInvalid(FieldName.DIRECTORY_MANAGER_PWD_CONFIRM, true);
       pwdValid = false;
 
     }
     if (pwd1.length() < MIN_DIRECTORY_MANAGER_PWD)
     {
-      errorMsgs.add(getMsg(("pwd-too-short"), new String[]
-        { String.valueOf(MIN_DIRECTORY_MANAGER_PWD) }));
+      errorMsgs.add(INFO_PWD_TOO_SHORT.get(
+              String.valueOf(MIN_DIRECTORY_MANAGER_PWD)));
       qs.displayFieldInvalid(FieldName.DIRECTORY_MANAGER_PWD, true);
       if ((pwd2 == null) || (pwd2.length() < MIN_DIRECTORY_MANAGER_PWD))
       {
@@ -2618,7 +2613,7 @@
     if (errorMsgs.size() > 0)
     {
       throw new UserDataException(Step.SERVER_SETTINGS,
-          Utils.getStringFromCollection(errorMsgs, "\n"));
+          getMessageFromCollection(errorMsgs, "\n"));
     }
     if (confirmationMsg != null)
     {
@@ -2645,7 +2640,7 @@
     String pwd = null;
     boolean isSecure = Boolean.TRUE.equals(qs.getFieldValue(
         FieldName.REMOTE_SERVER_IS_SECURE_PORT));
-    ArrayList<String> errorMsgs = new ArrayList<String>();
+    ArrayList<Message> errorMsgs = new ArrayList<Message>();
 
     DataReplicationOptions.Type type = (DataReplicationOptions.Type)
       qs.getFieldValue(FieldName.REPLICATION_OPTIONS);
@@ -2732,7 +2727,7 @@
     if (errorMsgs.size() > 0)
     {
       throw new UserDataException(Step.REPLICATION_OPTIONS,
-          Utils.getStringFromCollection(errorMsgs, "\n"));
+          getMessageFromCollection(errorMsgs, "\n"));
     }
     if (confirmEx != null)
     {
@@ -2740,7 +2735,7 @@
     }
   }
 
-  private int checkReplicationPort(QuickSetup qs, ArrayList<String> errorMsgs)
+  private int checkReplicationPort(QuickSetup qs, ArrayList<Message> errorMsgs)
   {
     int replicationPort = -1;
     String sPort = qs.getFieldStringValue(FieldName.REPLICATION_PORT);
@@ -2750,20 +2745,20 @@
       if ((replicationPort < MIN_PORT_VALUE) ||
           (replicationPort > MAX_PORT_VALUE))
       {
-        String[] args =
-        { String.valueOf(MIN_PORT_VALUE), String.valueOf(MAX_PORT_VALUE) };
-        errorMsgs.add(getMsg("invalid-replication-port-value-range", args));
+        errorMsgs.add(INFO_INVALID_REPLICATION_PORT_VALUE_RANGE.get(
+                String.valueOf(MIN_PORT_VALUE),
+                String.valueOf(MAX_PORT_VALUE)));
         qs.displayFieldInvalid(FieldName.SERVER_PORT, true);
-      } else if (!Utils.canUseAsPort(replicationPort))
+      } else if (!canUseAsPort(replicationPort))
       {
-        if (Utils.isPriviledgedPort(replicationPort))
+        if (isPriviledgedPort(replicationPort))
         {
-          errorMsgs.add(getMsg("cannot-bind-priviledged-port",
-              new String[] { String.valueOf(replicationPort) }));
+          errorMsgs.add(INFO_CANNOT_BIND_PRIVILEDGED_PORT.get(
+                  String.valueOf(replicationPort)));
         } else
         {
-          errorMsgs.add(getMsg("cannot-bind-port",
-              new String[] { String.valueOf(replicationPort) }));
+          errorMsgs.add(INFO_CANNOT_BIND_PORT.get(
+                  String.valueOf(replicationPort)));
         }
         qs.displayFieldInvalid(FieldName.REPLICATION_PORT, true);
 
@@ -2776,7 +2771,7 @@
             ((replicationPort == sec.getSslPort()) && sec.getEnableSSL()))
         {
           errorMsgs.add(
-              getMsg("replication-port-already-chosen-for-other-protocol"));
+              INFO_REPLICATION_PORT_ALREADY_CHOSEN_FOR_OTHER_PROTOCOL.get());
           qs.displayFieldInvalid(FieldName.REPLICATION_PORT, true);
         }
         else
@@ -2787,21 +2782,20 @@
 
     } catch (NumberFormatException nfe)
     {
-      String[] args =
-      { String.valueOf(MIN_PORT_VALUE), String.valueOf(MAX_PORT_VALUE) };
-      errorMsgs.add(getMsg("invalid-replication-port-value-range", args));
+      errorMsgs.add(INFO_INVALID_REPLICATION_PORT_VALUE_RANGE.get(
+              String.valueOf(MIN_PORT_VALUE), String.valueOf(MAX_PORT_VALUE)));
       qs.displayFieldInvalid(FieldName.REPLICATION_PORT, true);
     }
     return replicationPort;
   }
 
   private void checkRemoteHostPortDnAndPwd(String host, String sPort, String dn,
-      String pwd, QuickSetup qs, ArrayList<String> errorMsgs)
+      String pwd, QuickSetup qs, ArrayList<Message> errorMsgs)
   {
     // Check host
     if ((host == null) || (host.length() == 0))
     {
-      errorMsgs.add(getMsg("empty-remote-host"));
+      errorMsgs.add(INFO_EMPTY_REMOTE_HOST.get());
       qs.displayFieldInvalid(FieldName.REMOTE_SERVER_HOST, true);
     }
     else
@@ -2817,14 +2811,14 @@
     }
     catch (Throwable t)
     {
-      errorMsgs.add(getMsg("invalid-remote-port"));
+      errorMsgs.add(INFO_INVALID_REMOTE_PORT.get());
       qs.displayFieldInvalid(FieldName.REMOTE_SERVER_PORT, true);
     }
 
     // Check dn
     if ((dn == null) || (dn.length() == 0))
     {
-      errorMsgs.add(getMsg("empty-remote-dn"));
+      errorMsgs.add(INFO_EMPTY_REMOTE_DN.get());
       qs.displayFieldInvalid(FieldName.REMOTE_SERVER_DN, true);
     }
     else
@@ -2835,7 +2829,7 @@
     // Check password
     if ((pwd == null) || (pwd.length() == 0))
     {
-      errorMsgs.add(getMsg("empty-remote-pwd"));
+      errorMsgs.add(INFO_EMPTY_REMOTE_PWD.get());
       qs.displayFieldInvalid(FieldName.REMOTE_SERVER_PWD, true);
     }
     else
@@ -2845,12 +2839,12 @@
   }
 
   private void updateUserDataWithADS(String host, int port, String dn,
-      String pwd, QuickSetup qs, ArrayList<String> errorMsgs,
+      String pwd, QuickSetup qs, ArrayList<Message> errorMsgs,
       boolean[] hasGlobalAdministrators,
       String[] effectiveDn) throws UserDataException
   {
     String ldapUrl;
-    host = Utils.getHostNameForLdapUrl(host);
+    host = getHostNameForLdapUrl(host);
     boolean isSecure = Boolean.TRUE.equals(qs.getFieldValue(
         FieldName.REMOTE_SERVER_IS_SECURE_PORT));
     if (isSecure)
@@ -2873,13 +2867,13 @@
       {
         if (isSecure)
         {
-          ctx = Utils.createLdapsContext(ldapUrl, dn, pwd,
-              Utils.getDefaultLDAPTimeout(), null, trustManager);
+          ctx = createLdapsContext(ldapUrl, dn, pwd,
+              getDefaultLDAPTimeout(), null, trustManager);
         }
         else
         {
-          ctx = Utils.createLdapContext(ldapUrl, dn, pwd,
-              Utils.getDefaultLDAPTimeout(), null);
+          ctx = createLdapContext(ldapUrl, dn, pwd,
+              getDefaultLDAPTimeout(), null);
         }
       }
       catch (Throwable t)
@@ -2891,13 +2885,13 @@
           effectiveDn[0] = dn;
           if (isSecure)
           {
-            ctx = Utils.createLdapsContext(ldapUrl, dn, pwd,
-                Utils.getDefaultLDAPTimeout(), null, trustManager);
+            ctx = createLdapsContext(ldapUrl, dn, pwd,
+                getDefaultLDAPTimeout(), null, trustManager);
           }
           else
           {
-            ctx = Utils.createLdapContext(ldapUrl, dn, pwd,
-                Utils.getDefaultLDAPTimeout(), null);
+            ctx = createLdapContext(ldapUrl, dn, pwd,
+                getDefaultLDAPTimeout(), null);
           }
         }
         else
@@ -2928,7 +2922,7 @@
           switch (e.getType())
           {
           case NOT_GLOBAL_ADMINISTRATOR:
-            String errorMsg = getMsg("not-global-administrator-provided");
+            Message errorMsg = INFO_NOT_GLOBAL_ADMINISTRATOR_PROVIDED.get();
             throw new UserDataException(Step.REPLICATION_OPTIONS, errorMsg);
           case GENERIC_CREATING_CONNECTION:
             if ((e.getCause() != null) &&
@@ -2968,14 +2962,16 @@
                 {
                   LOG.log(Level.WARNING,
                       "Error parsing ldap url of TopologyCacheException.", t);
-                  h = getMsg("not-available-label");
+                  h = INFO_NOT_AVAILABLE_LABEL.get().toString();
                   p = -1;
                 }
-                throw new UserDataCertificateException(Step.REPLICATION_OPTIONS,
-                    getMsg("certificate-exception", h, String.valueOf(p)),
-                    e.getCause(), h, p,
-                    e.getTrustManager().getLastRefusedChain(),
-                    e.getTrustManager().getLastRefusedAuthType(), excType);
+                throw new UserDataCertificateException(
+                        Step.REPLICATION_OPTIONS,
+                        INFO_CERTIFICATE_EXCEPTION.get(
+                                h, String.valueOf(p)),
+                        e.getCause(), h, p,
+                        e.getTrustManager().getLastRefusedChain(),
+                        e.getTrustManager().getLastRefusedAuthType(), excType);
               }
             }
           }
@@ -2983,9 +2979,9 @@
         }
         if (exceptionMsgs.size() > 0)
         {
-          String confirmationMsg =
-            getMsg("error-reading-registered-servers-confirm",
-              Utils.getStringFromCollection(exceptionMsgs, "\n"));
+          Message confirmationMsg =
+            INFO_ERROR_READING_REGISTERED_SERVERS_CONFIRM.get(
+                    getStringFromCollection(exceptionMsgs, "n"));
           throw new UserDataConfirmationException(Step.REPLICATION_OPTIONS,
               confirmationMsg);
         }
@@ -3024,38 +3020,37 @@
         if (excType != null)
         {
           throw new UserDataCertificateException(Step.REPLICATION_OPTIONS,
-              getMsg("certificate-exception", host, String.valueOf(port)), t,
+              INFO_CERTIFICATE_EXCEPTION.get(host, String.valueOf(port)), t,
               host, port, trustManager.getLastRefusedChain(),
               trustManager.getLastRefusedAuthType(), excType);
         }
         else
         {
-          String[] arg = {host+":"+port, t.toString()};
           qs.displayFieldInvalid(FieldName.REMOTE_SERVER_HOST, true);
           qs.displayFieldInvalid(FieldName.REMOTE_SERVER_PORT, true);
           qs.displayFieldInvalid(FieldName.REMOTE_SERVER_DN, true);
           qs.displayFieldInvalid(FieldName.REMOTE_SERVER_PWD, true);
-          errorMsgs.add(getMsg("cannot-connect-to-remote-generic", arg));
+          errorMsgs.add(INFO_CANNOT_CONNECT_TO_REMOTE_GENERIC.get(
+                  host+":"+port, t.toString()));
         }
       }
       else if (t instanceof AuthenticationException)
       {
-        String[] arg = {host+":"+port};
-        errorMsgs.add(getMsg("cannot-connect-to-remote-authentication", arg));
+        errorMsgs.add(INFO_CANNOT_CONNECT_TO_REMOTE_AUTHENTICATION.get());
         qs.displayFieldInvalid(FieldName.REMOTE_SERVER_DN, true);
         qs.displayFieldInvalid(FieldName.REMOTE_SERVER_PWD, true);
       }
       else if (t instanceof NoPermissionException)
       {
-        String[] arg = {host+":"+port};
-        errorMsgs.add(getMsg("cannot-connect-to-remote-permissions", arg));
+        errorMsgs.add(INFO_CANNOT_CONNECT_TO_REMOTE_PERMISSIONS.get(
+                  host+":"+port));
         qs.displayFieldInvalid(FieldName.REMOTE_SERVER_DN, true);
         qs.displayFieldInvalid(FieldName.REMOTE_SERVER_PWD, true);
       }
       else if (t instanceof NamingException)
       {
-        String[] arg = {host+":"+port, t.toString()};
-        errorMsgs.add(getMsg("cannot-connect-to-remote-generic", arg));
+        errorMsgs.add(INFO_CANNOT_CONNECT_TO_REMOTE_GENERIC.get(
+                host+":"+port, t.toString()));
         qs.displayFieldInvalid(FieldName.REMOTE_SERVER_HOST, true);
         qs.displayFieldInvalid(FieldName.REMOTE_SERVER_PORT, true);
         qs.displayFieldInvalid(FieldName.REMOTE_SERVER_DN, true);
@@ -3064,12 +3059,13 @@
       else if (t instanceof ADSContextException)
       {
         String[] args = {host+":"+port, t.toString()};
-        errorMsgs.add(getMsg("remote-ads-exception", args));
+        errorMsgs.add(INFO_REMOTE_ADS_EXCEPTION.get(
+                host+":"+port, t.toString()));
       }
       else
       {
         throw new UserDataException(Step.REPLICATION_OPTIONS,
-            getThrowableMsg("bug-msg", null, t));
+            getThrowableMsg(INFO_BUG_MSG.get(), t));
       }
     }
     finally
@@ -3099,14 +3095,14 @@
   private void updateUserDataForCreateAdministratorPanel(QuickSetup qs)
   throws UserDataException
   {
-    ArrayList<String> errorMsgs = new ArrayList<String>();
+    ArrayList<Message> errorMsgs = new ArrayList<Message>();
 
     // Check the Global Administrator UID
     String uid = qs.getFieldStringValue(FieldName.GLOBAL_ADMINISTRATOR_UID);
 
     if ((uid == null) || (uid.trim().length() == 0))
     {
-      errorMsgs.add(getMsg("empty-administrator-uid"));
+      errorMsgs.add(INFO_EMPTY_ADMINISTRATOR_UID.get());
       qs.displayFieldInvalid(FieldName.GLOBAL_ADMINISTRATOR_UID, true);
     }
     else
@@ -3127,15 +3123,15 @@
     boolean pwdValid = true;
     if (!pwd1.equals(pwd2))
     {
-      errorMsgs.add(getMsg("not-equal-pwd"));
+      errorMsgs.add(INFO_NOT_EQUAL_PWD.get());
       qs.displayFieldInvalid(FieldName.GLOBAL_ADMINISTRATOR_PWD_CONFIRM, true);
       pwdValid = false;
 
     }
     if (pwd1.length() < MIN_DIRECTORY_MANAGER_PWD)
     {
-      errorMsgs.add(getMsg(("pwd-too-short"), new String[]
-        { String.valueOf(MIN_DIRECTORY_MANAGER_PWD) }));
+      errorMsgs.add(INFO_PWD_TOO_SHORT.get(
+              String.valueOf(MIN_DIRECTORY_MANAGER_PWD)));
       qs.displayFieldInvalid(FieldName.GLOBAL_ADMINISTRATOR_PWD, true);
       if ((pwd2 == null) || (pwd2.length() < MIN_DIRECTORY_MANAGER_PWD))
       {
@@ -3155,7 +3151,7 @@
     if (errorMsgs.size() > 0)
     {
       throw new UserDataException(Step.CREATE_GLOBAL_ADMINISTRATOR,
-          Utils.getStringFromCollection(errorMsgs, "\n"));
+          getMessageFromCollection(errorMsgs, "\n"));
     }
   }
 
@@ -3171,14 +3167,14 @@
   private void updateUserDataForSuffixesOptionsPanel(QuickSetup qs)
   throws UserDataException
   {
-    ArrayList<String> errorMsgs = new ArrayList<String>();
+    ArrayList<Message> errorMsgs = new ArrayList<Message>();
     if (qs.getFieldValue(FieldName.SUFFIXES_TO_REPLICATE_OPTIONS) ==
       SuffixesToReplicateOptions.Type.REPLICATE_WITH_EXISTING_SUFFIXES)
     {
       Set s = (Set)qs.getFieldValue(FieldName.SUFFIXES_TO_REPLICATE);
       if (s.size() == 0)
       {
-        errorMsgs.add(getMsg("no-suffixes-chosen-to-replicate"));
+        errorMsgs.add(INFO_NO_SUFFIXES_CHOSEN_TO_REPLICATE.get());
         qs.displayFieldInvalid(FieldName.SUFFIXES_TO_REPLICATE, true);
       }
       else
@@ -3219,7 +3215,7 @@
     if (errorMsgs.size() > 0)
     {
       throw new UserDataException(Step.SUFFIXES_OPTIONS,
-          Utils.getStringFromCollection(errorMsgs, "\n"));
+          getMessageFromCollection(errorMsgs, "\n"));
     }
   }
 
@@ -3233,7 +3229,7 @@
   private void updateUserDataForRemoteReplicationPorts(QuickSetup qs)
       throws UserDataException
   {
-    ArrayList<String> errorMsgs = new ArrayList<String>();
+    ArrayList<Message> errorMsgs = new ArrayList<Message>();
     Map<ServerDescriptor, Integer> servers =
       getUserData().getRemoteWithNoReplicationPort();
     Map hm = (Map) qs.getFieldValue(FieldName.REMOTE_REPLICATION_PORT);
@@ -3248,10 +3244,10 @@
         if ((replicationPort < MIN_PORT_VALUE) ||
             (replicationPort > MAX_PORT_VALUE))
         {
-          String[] args = { server.getHostPort(true),
-              String.valueOf(MIN_PORT_VALUE), String.valueOf(MAX_PORT_VALUE)};
-          errorMsgs.add(getMsg("invalid-remote-replication-port-value-range",
-              args));
+          errorMsgs.add(INFO_INVALID_REMOTE_REPLICATION_PORT_VALUE_RANGE.get(
+                  server.getHostPort(true),
+                  String.valueOf(MIN_PORT_VALUE),
+                  String.valueOf(MAX_PORT_VALUE)));
         }
         if (hostName.equalsIgnoreCase(getUserData().getHostName()))
         {
@@ -3266,18 +3262,17 @@
                 getUserData().getReplicationOptions().getReplicationPort()) ||
               (replicationPort == securePort))
           {
-            errorMsgs.add(getMsg(
-                    "remote-replication-port-already-chosen-for-other-protocol",
-                    server.getHostPort(true)));
+            errorMsgs.add(
+                  INFO_REMOTE_REPLICATION_PORT_ALREADY_CHOSEN_FOR_OTHER_PROTOCOL
+                          .get(server.getHostPort(true)));
           }
         }
         servers.put(server, replicationPort);
       } catch (NumberFormatException nfe)
       {
-        String[] args = { hostName, String.valueOf(MIN_PORT_VALUE),
-            String.valueOf(MAX_PORT_VALUE)};
-        errorMsgs.add(getMsg("invalid-remote-replication-port-value-range",
-            args));
+        errorMsgs.add(INFO_INVALID_REMOTE_REPLICATION_PORT_VALUE_RANGE.get(
+                hostName, String.valueOf(MIN_PORT_VALUE),
+                String.valueOf(MAX_PORT_VALUE)));
       }
     }
 
@@ -3285,7 +3280,7 @@
     {
       qs.displayFieldInvalid(FieldName.REMOTE_REPLICATION_PORT, true);
       throw new UserDataException(Step.REMOTE_REPLICATION_PORTS,
-          Utils.getStringFromCollection(errorMsgs, "\n"));
+          getMessageFromCollection(errorMsgs, "\n"));
     }
     else
     {
@@ -3305,7 +3300,7 @@
   private void updateUserDataForNewSuffixOptionsPanel(QuickSetup qs)
       throws UserDataException
   {
-    ArrayList<String> errorMsgs = new ArrayList<String>();
+    ArrayList<Message> errorMsgs = new ArrayList<Message>();
 
     NewSuffixOptions dataOptions = null;
 
@@ -3314,15 +3309,15 @@
     String baseDn = qs.getFieldStringValue(FieldName.DIRECTORY_BASE_DN);
     if ((baseDn == null) || (baseDn.trim().length() == 0))
     {
-      errorMsgs.add(getMsg("empty-base-dn"));
+      errorMsgs.add(INFO_EMPTY_BASE_DN.get());
       qs.displayFieldInvalid(FieldName.DIRECTORY_BASE_DN, true);
-    } else if (!Utils.isDn(baseDn))
+    } else if (!isDn(baseDn))
     {
-      errorMsgs.add(getMsg("not-a-base-dn"));
+      errorMsgs.add(INFO_NOT_A_BASE_DN.get());
       qs.displayFieldInvalid(FieldName.DIRECTORY_BASE_DN, true);
-    } else if (Utils.isConfigurationDn(baseDn))
+    } else if (isConfigurationDn(baseDn))
     {
-      errorMsgs.add(getMsg("base-dn-is-configuration-dn"));
+      errorMsgs.add(INFO_BASE_DN_IS_CONFIGURATION_DN.get());
       qs.displayFieldInvalid(FieldName.DIRECTORY_BASE_DN, true);
     } else
     {
@@ -3340,11 +3335,11 @@
       String ldifPath = qs.getFieldStringValue(FieldName.LDIF_PATH);
       if ((ldifPath == null) || (ldifPath.trim().equals("")))
       {
-        errorMsgs.add(getMsg("no-ldif-path"));
+        errorMsgs.add(INFO_NO_LDIF_PATH.get());
         qs.displayFieldInvalid(FieldName.LDIF_PATH, true);
-      } else if (!Utils.fileExists(ldifPath))
+      } else if (!fileExists(ldifPath))
       {
-        errorMsgs.add(getMsg("ldif-file-does-not-exist"));
+        errorMsgs.add(INFO_LDIF_FILE_DOES_NOT_EXIST.get());
         qs.displayFieldInvalid(FieldName.LDIF_PATH, true);
       } else if (validBaseDn)
       {
@@ -3362,7 +3357,7 @@
       String nEntries = qs.getFieldStringValue(FieldName.NUMBER_ENTRIES);
       if ((nEntries == null) || (nEntries.trim().equals("")))
       {
-        errorMsgs.add(getMsg("no-number-entries"));
+        errorMsgs.add(INFO_NO_NUMBER_ENTRIES.get());
         qs.displayFieldInvalid(FieldName.NUMBER_ENTRIES, true);
       } else
       {
@@ -3378,10 +3373,9 @@
 
         if (!nEntriesValid)
         {
-          String[] args =
-                { String.valueOf(MIN_NUMBER_ENTRIES),
-                    String.valueOf(MAX_NUMBER_ENTRIES) };
-          errorMsgs.add(getMsg("invalid-number-entries-range", args));
+          errorMsgs.add(INFO_INVALID_NUMBER_ENTRIES_RANGE.get(
+                  String.valueOf(MIN_NUMBER_ENTRIES),
+                    String.valueOf(MAX_NUMBER_ENTRIES)));
           qs.displayFieldInvalid(FieldName.NUMBER_ENTRIES, true);
         } else
         {
@@ -3412,7 +3406,7 @@
     if (errorMsgs.size() > 0)
     {
       throw new UserDataException(Step.NEW_SUFFIX_OPTIONS,
-          Utils.getStringFromCollection(errorMsgs, "\n"));
+          getMessageFromCollection(errorMsgs, "\n"));
     }
   }
 
@@ -3590,9 +3584,9 @@
    */
   protected String getSelfSignedKeystorePath()
   {
-    String parentFile = Utils.getPath(getInstallationPath(),
+    String parentFile = getPath(getInstallationPath(),
         Installation.CONFIG_PATH_RELATIVE);
-    return (Utils.getPath(parentFile, "keystore"));
+    return (getPath(parentFile, "keystore"));
   }
 
   /**
@@ -3603,9 +3597,9 @@
    */
   private String getTrustManagerPath()
   {
-    String parentFile = Utils.getPath(getInstallationPath(),
+    String parentFile = getPath(getInstallationPath(),
         Installation.CONFIG_PATH_RELATIVE);
-    return (Utils.getPath(parentFile, "truststore"));
+    return (getPath(parentFile, "truststore"));
   }
 
   /**
@@ -3615,9 +3609,9 @@
    */
   private String getTemporaryCertificatePath()
   {
-    String parentFile = Utils.getPath(getInstallationPath(),
+    String parentFile = getPath(getInstallationPath(),
         Installation.CONFIG_PATH_RELATIVE);
-    return (Utils.getPath(parentFile, "server-cert.txt"));
+    return (getPath(parentFile, "server-cert.txt"));
   }
 
   /**
@@ -3626,9 +3620,9 @@
    */
   private String getKeystorePinPath()
   {
-    String parentFile = Utils.getPath(getInstallationPath(),
+    String parentFile = getPath(getInstallationPath(),
         Installation.CONFIG_PATH_RELATIVE);
-    return (Utils.getPath(parentFile, "keystore.pin"));
+    return (getPath(parentFile, "keystore.pin"));
   }
 
 
@@ -3739,11 +3733,6 @@
     return generatedChar;
   }
 
-  private boolean isCertificateException(Throwable t)
-  {
-    return Utils.isCertificateException(t);
-  }
-
   private Map<ServerDescriptor, Integer> getRemoteWithNoReplicationPort(
       UserData userData)
   {
@@ -3770,12 +3759,12 @@
   private InitialLdapContext createLocalContext() throws NamingException
   {
     String ldapUrl = "ldap://"+
-    Utils.getHostNameForLdapUrl(getUserData().getHostName())+":"+
+    getHostNameForLdapUrl(getUserData().getHostName())+":"+
     getUserData().getServerPort();
     String dn = getUserData().getDirectoryManagerDn();
     String pwd = getUserData().getDirectoryManagerPwd();
-    return Utils.createLdapContext(ldapUrl, dn, pwd,
-        Utils.getDefaultLDAPTimeout(), null);
+    return createLdapContext(ldapUrl, dn, pwd,
+        getDefaultLDAPTimeout(), null);
   }
   private void createLocalAds(InitialLdapContext ctx, boolean addData)
   throws ApplicationException, ADSContextException
@@ -3803,9 +3792,9 @@
     }
     catch (Throwable t)
     {
-      String failedMsg = getThrowableMsg("bug-msg", null, t);
       throw new ApplicationException(
-          ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR, failedMsg, t);
+          ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
+              getThrowableMsg(INFO_BUG_MSG.get(), t), t);
     }
   }
 
@@ -3892,10 +3881,11 @@
       catch (NamingException ne)
       {
         LOG.log(Level.SEVERE, "Error creating task "+attrs, ne);
-        String[] arg = {sourceServerDisplay};
         throw new ApplicationException(
-            ApplicationReturnCode.ReturnCode.APPLICATION_ERROR, getThrowableMsg(
-                "error-launching-initialization", arg, ne), ne);
+            ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
+                getThrowableMsg(INFO_ERROR_LAUNCHING_INITIALIZATION.get(
+                        sourceServerDisplay
+                ), ne), ne);
       }
       i++;
     }
@@ -3912,7 +3902,7 @@
             "ds-task-log-message",
             "ds-task-state"
         });
-    String lastDisplayedMsg = null;
+    Message lastDisplayedMsg = null;
     String lastLogMsg = null;
     long lastTimeMsgDisplayed = -1;
     int totalEntries = 0;
@@ -3933,7 +3923,7 @@
         {
           // Display the number of entries that have been handled and
           // a percentage...
-          String msg;
+          Message msg;
           String sProcessed = getFirstValue(sr,
           "ds-task-processed-entry-count");
           String sUnprocessed = getFirstValue(sr,
@@ -3955,23 +3945,22 @@
             if (processed + unprocessed > 0)
             {
               int perc = (100 * processed) / (processed + unprocessed);
-              msg = getMsg("initialize-progress-with-percentage", sProcessed,
+              msg = INFO_INITIALIZE_PROGRESS_WITH_PERCENTAGE.get(sProcessed,
                   String.valueOf(perc));
             }
             else
             {
-              //msg = getMsg("no-entries-to-initialize");
+              //msg = INFO_NO_ENTRIES_TO_INITIALIZE.get();
               msg = null;
             }
           }
           else if (processed != -1)
           {
-            msg = getMsg("initialize-progress-with-processed", sProcessed);
+            msg = INFO_INITIALIZE_PROGRESS_WITH_PROCESSED.get(sProcessed);
           }
           else if (unprocessed != -1)
           {
-            msg = getMsg("initialize-progress-with-unprocessed",
-                sUnprocessed);
+            msg = INFO_INITIALIZE_PROGRESS_WITH_UNPROCESSED.get(sUnprocessed);
           }
           else
           {
@@ -4025,16 +4014,16 @@
         if (helper.isDone(state) || helper.isStoppedByError(state))
         {
           isOver = true;
-          String errorMsg;
+          Message errorMsg;
           if (lastLogMsg == null)
           {
-            errorMsg = getMsg("error-during-initialization-no-log",
-                sourceServerDisplay, state);
+            errorMsg = INFO_ERROR_DURING_INITIALIZATION_NO_LOG.get(
+                    sourceServerDisplay, state);
           }
           else
           {
-            errorMsg = getMsg("error-during-initialization-log",
-                sourceServerDisplay, lastLogMsg, state);
+            errorMsg = INFO_ERROR_DURING_INITIALIZATION_LOG.get(
+                    sourceServerDisplay, lastLogMsg, state);
           }
 
           if (helper.isCompletedWithErrors(state))
@@ -4061,7 +4050,7 @@
           else if (displayProgress)
           {
             notifyListeners(getFormattedProgress(
-                getMsg("suffix-initialized-successfully")));
+                INFO_SUFFIX_INITIALIZED_SUCCESSFULLY.get()));
           }
         }
       }
@@ -4069,24 +4058,19 @@
       {
         isOver = true;
         notifyListeners(getFormattedProgress(
-            getMsg("suffix-initialized-successfully")));
+            INFO_SUFFIX_INITIALIZED_SUCCESSFULLY.get()));
       }
       catch (NamingException ne)
       {
-        String[] arg = {sourceServerDisplay};
         throw new ApplicationException(
-            ApplicationReturnCode.ReturnCode.APPLICATION_ERROR, getThrowableMsg(
-                "error-pooling-initialization", arg, ne), ne);
+            ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
+                getThrowableMsg(INFO_ERROR_POOLING_INITIALIZATION.get(
+                        sourceServerDisplay),
+                        ne), ne);
       }
     }
   }
 
-  private String getFirstValue(SearchResult entry, String attrName)
-  throws NamingException
-  {
-    return Utils.getFirstValue(entry, attrName);
-  }
-
   private String getLocalReplicationServer()
   {
     return getUserData().getHostName()+":"+
@@ -4111,16 +4095,16 @@
  * could not be found.
  *
  */
-class PeerNotFoundException extends Exception
-{
+class PeerNotFoundException extends OpenDsException {
+
   private static final long serialVersionUID = -362726764261560341L;
 
   /**
    * The constructor for the exception.
-   * @param localizedMsg the localized message.
+   * @param message the localized message.
    */
-  PeerNotFoundException(String localizedMsg)
+  PeerNotFoundException(Message message)
   {
-    super(localizedMsg);
+    super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java
index 2428735..f926735 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java
@@ -41,9 +41,8 @@
 
 import org.opends.quicksetup.ApplicationException;
 import org.opends.quicksetup.ApplicationReturnCode;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.webstart.JnlpProperties;
-import org.opends.quicksetup.util.Utils;
+import static org.opends.quicksetup.util.Utils.*;
 import org.opends.server.admin.DefaultBehaviorException;
 import org.opends.server.admin.ManagedObjectNotFoundException;
 import org.opends.server.admin.client.ManagementContext;
@@ -52,8 +51,10 @@
 import org.opends.server.admin.std.client.*;
 import org.opends.server.admin.std.meta.*;
 import org.opends.server.backends.task.TaskState;
-import org.opends.server.messages.CoreMessages;
-import org.opends.server.messages.ReplicationMessages;
+import org.opends.messages.CoreMessages;
+import org.opends.messages.ReplicationMessages;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 import org.opends.server.tools.ConfigureDS;
 import org.opends.server.tools.ConfigureWindowsService;
 import org.opends.server.tools.ImportLDIF;
@@ -112,7 +113,7 @@
    */
   public String getStartedId()
   {
-    return String.valueOf(CoreMessages.MSGID_DIRECTORY_SERVER_STARTED);
+    return String.valueOf(CoreMessages.NOTE_DIRECTORY_SERVER_STARTED.getId());
   }
 
   /**
@@ -122,7 +123,7 @@
   public void enableWindowsService() throws ApplicationException {
     int code = ConfigureWindowsService.enableService(System.out, System.err);
 
-    String errorMessage = getMsg("error-enabling-windows-service");
+    Message errorMessage = INFO_ERROR_ENABLING_WINDOWS_SERVICE.get();
 
     switch (code) {
       case
@@ -147,21 +148,12 @@
     int code = ConfigureWindowsService.disableService(System.out, System.err);
     if (code == ConfigureWindowsService.SERVICE_DISABLE_ERROR) {
       throw new ApplicationException(
+          // TODO: fix this message's format string
           ApplicationReturnCode.ReturnCode.WINDOWS_SERVICE_ERROR,
-              getMsg("error-disabling-windows-service"), null);
+              INFO_ERROR_DISABLING_WINDOWS_SERVICE.get(""), null);
     }
   }
 
-  private String getThrowableMsg(String key, Throwable t)
-  {
-    return getThrowableMsg(key, null, t);
-  }
-
-  private String getThrowableMsg(String key, String[] args, Throwable t)
-  {
-    return Utils.getThrowableMsg(ResourceProvider.getInstance(), key, args, t);
-  }
-
   /**
    * Creates a template LDIF file with an entry that has as dn the provided
    * baseDn.
@@ -178,7 +170,8 @@
       ldifFile.deleteOnExit();
     } catch (IOException ioe)
     {
-      String failedMsg = getThrowableMsg("error-creating-temp-file", null, ioe);
+      Message failedMsg =
+              getThrowableMsg(INFO_ERROR_CREATING_TEMP_FILE.get(), ioe);
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
           failedMsg, ioe);
@@ -199,19 +192,19 @@
     } catch (DirectoryException de) {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-              getThrowableMsg("error-importing-ldif", null, de), de);
+              getThrowableMsg(INFO_ERROR_IMPORTING_LDIF.get(), de), de);
     } catch (LDIFException le) {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-              getThrowableMsg("error-importing-ldif", null, le), le);
+              getThrowableMsg(INFO_ERROR_IMPORTING_LDIF.get(), le), le);
     } catch (IOException ioe) {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR,
-              getThrowableMsg("error-importing-ldif", null, ioe), ioe);
+              getThrowableMsg(INFO_ERROR_IMPORTING_LDIF.get(), ioe), ioe);
     } catch (Throwable t) {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.BUG, getThrowableMsg(
-              "bug-msg", t), t);
+              INFO_BUG_MSG.get(), t), t);
     }
     return ldifFile;
   }
@@ -357,7 +350,7 @@
         String domainName = null;
         for (int i=0; i<domains.length && (domain == null); i++)
         {
-          if (Utils.areDnsEqual(dn,
+          if (areDnsEqual(dn,
               domains[i].getReplicationDN().toString()))
           {
             domain = domains[i];
@@ -403,8 +396,8 @@
     }
     catch (Throwable t)
     {
-      String errorMessage = getMsg("error-configuring-remote-generic",
-          serverDisplay, t.toString());
+      Message errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
+              serverDisplay, t.toString());
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR, errorMessage,
           t);
@@ -507,8 +500,8 @@
     }
     catch (Throwable t)
     {
-      String errorMessage = getMsg("error-configuring-remote-generic",
-          serverDisplay, t.toString());
+      Message errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
+              serverDisplay, t.toString());
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.CONFIGURATION_ERROR, errorMessage,
           t);
@@ -576,7 +569,8 @@
   public boolean isPeersNotFoundError(String logMsg)
   {
     return logMsg.indexOf(
-        "="+ReplicationMessages.MSGID_NO_REACHABLE_PEER_IN_THE_DOMAIN) != -1;
+        "="+ReplicationMessages.
+                ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.getId()) != -1;
   }
 
   private int getReplicationId(Set<Integer> usedIds)
@@ -590,11 +584,6 @@
     return id;
   }
 
-  private String getMsg(String key, String ... args)
-  {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
   private String getDomainName(String[] existingDomains, int newDomainId)
   {
     String domainName = DOMAIN_BASE_NAME+newDomainId;
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java
index 27c4d1f..807b44a 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.installer.offline;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.io.PrintStream;
 import java.io.File;
 import java.util.ArrayList;
@@ -68,8 +71,8 @@
       new HashMap<InstallProgressStep, Integer>();
 
   /* This map contains the summary associated with each step */
-  private HashMap<InstallProgressStep, String> hmSummary =
-      new HashMap<InstallProgressStep, String>();
+  private HashMap<InstallProgressStep, Message> hmSummary =
+      new HashMap<InstallProgressStep, Message>();
 
   private static final Logger LOG =
     Logger.getLogger(OfflineInstaller.class.getName());
@@ -177,7 +180,7 @@
         notifyListenersOfLog();
         updateSummaryWithServerState(hmSummary);
         setCurrentProgressStep(InstallProgressStep.FINISHED_WITH_ERROR);
-        String html = getFormattedError(ex, true);
+        Message html = getFormattedError(ex, true);
         notifyListeners(html);
         LOG.log(Level.SEVERE, "Error installing.", ex);
       }
@@ -199,8 +202,8 @@
       setCurrentProgressStep(InstallProgressStep.FINISHED_WITH_ERROR);
       ApplicationException ex = new ApplicationException(
           ApplicationReturnCode.ReturnCode.BUG,
-          getThrowableMsg("bug-msg", t), t);
-      String msg = getFormattedError(ex, true);
+          Utils.getThrowableMsg(INFO_BUG_MSG.get(), t), t);
+      Message msg = getFormattedError(ex, true);
       notifyListeners(msg);
       LOG.log(Level.SEVERE, "Error installing.", t);
     }
@@ -219,7 +222,7 @@
   /**
    * {@inheritDoc}
    */
-  public String getSummary(ProgressStep status)
+  public Message getSummary(ProgressStep status)
   {
     return hmSummary.get(status);
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/DataOptionsPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/DataOptionsPanel.java
index 2595212..4325187 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/DataOptionsPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/DataOptionsPanel.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.installer.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.awt.Component;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -309,17 +312,17 @@
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions()
+  protected Message getInstructions()
   {
-    return getMsg("data-options-panel-instructions");
+    return INFO_DATA_OPTIONS_PANEL_INSTRUCTIONS.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("data-options-panel-title");
+    return INFO_DATA_OPTIONS_PANEL_TITLE.get();
   }
 
   /**
@@ -401,17 +404,17 @@
         new HashMap<FieldName, LabelFieldDescriptor>();
 
     hm.put(FieldName.DIRECTORY_BASE_DN, new LabelFieldDescriptor(
-        getMsg("base-dn-label"), getMsg("base-dn-tooltip"),
+        INFO_BASE_DN_LABEL.get(), INFO_BASE_DN_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.DN_FIELD_SIZE));
 
     hm.put(FieldName.LDIF_PATH, new LabelFieldDescriptor(
-        getMsg("import-path-label"), getMsg("import-path-tooltip"),
+        INFO_IMPORT_PATH_LABEL.get(), INFO_IMPORT_PATH_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.SECONDARY, UIFactory.PATH_FIELD_SIZE));
 
     hm.put(FieldName.NUMBER_ENTRIES, new LabelFieldDescriptor(
-        getMsg("number-entries-label"), getMsg("number-entries-tooltip"),
+        INFO_NUMBER_ENTRIES_LABEL.get(), INFO_NUMBER_ENTRIES_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.SECONDARY,
         UIFactory.NUMBER_ENTRIES_FIELD_SIZE));
@@ -435,37 +438,36 @@
 
     JLabel dataLabel =
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-            getMsg("directory-data-label"),
+            INFO_DIRECTORY_DATA_LABEL.get(),
             UIFactory.TextStyle.PRIMARY_FIELD_VALID);
 
     hmLabels.put(FieldName.DATA_OPTIONS, dataLabel);
 
-    String[] arg =
-      { getDefaultStringValue(FieldName.DIRECTORY_BASE_DN) };
     JRadioButton rb =
-        UIFactory.makeJRadioButton(getMsg("create-base-entry-label", arg),
-            getMsg("create-base-entry-tooltip"),
+        UIFactory.makeJRadioButton(INFO_CREATE_BASE_ENTRY_LABEL.get(
+                getDefaultStringValue(FieldName.DIRECTORY_BASE_DN)),
+            INFO_CREATE_BASE_ENTRY_TOOLTIP.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     hmRadioButtons.put(NewSuffixOptions.Type.CREATE_BASE_ENTRY, rb);
 
     dataLabel.setLabelFor(rb);
 
     rb =
-        UIFactory.makeJRadioButton(getMsg("leave-database-empty-label"),
-            getMsg("leave-database-empty-tooltip"),
+        UIFactory.makeJRadioButton(INFO_LEAVE_DATABASE_EMPTY_LABEL.get(),
+            INFO_LEAVE_DATABASE_EMPTY_TOOLTIP.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     hmRadioButtons.put(NewSuffixOptions.Type.LEAVE_DATABASE_EMPTY, rb);
 
     rb =
-        UIFactory.makeJRadioButton(getMsg("import-data-from-ldif-label"),
-            getMsg("import-data-from-ldif-tooltip"),
+        UIFactory.makeJRadioButton(INFO_IMPORT_DATA_FROM_LDIF_LABEL.get(),
+            INFO_IMPORT_DATA_FROM_LDIF_TOOLTIP.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     hmRadioButtons.put(NewSuffixOptions.Type.IMPORT_FROM_LDIF_FILE, rb);
 
     rb =
         UIFactory.makeJRadioButton(
-            getMsg("import-automatically-generated-label"),
-            getMsg("import-automatically-generated-tooltip"),
+            INFO_IMPORT_AUTOMATICALLY_GENERATED_LABEL.get(),
+            INFO_IMPORT_AUTOMATICALLY_GENERATED_TOOLTIP.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     hmRadioButtons
         .put(NewSuffixOptions.Type.IMPORT_AUTOMATICALLY_GENERATED_DATA, rb);
@@ -493,8 +495,8 @@
     if (ldifBrowseButton == null)
     {
       ldifBrowseButton =
-          UIFactory.makeJButton(getMsg("browse-button-label"),
-              getMsg("browse-button-tooltip"));
+          UIFactory.makeJButton(INFO_BROWSE_BUTTON_LABEL.get(),
+              INFO_BROWSE_BUTTON_TOOLTIP.get());
 
       BrowseActionListener l =
           new BrowseActionListener(getField(FieldName.LDIF_PATH),
@@ -515,13 +517,11 @@
     {
       public void changedUpdate(DocumentEvent ev)
       {
-        String[] arg =
-          { (String) getFieldValue(FieldName.DIRECTORY_BASE_DN) };
-
-        String newLabel = getMsg("create-base-entry-label", arg);
+        Message newLabel = INFO_CREATE_BASE_ENTRY_LABEL.get(
+                (String) getFieldValue(FieldName.DIRECTORY_BASE_DN));
         JRadioButton rb =
           getRadioButton(NewSuffixOptions.Type.CREATE_BASE_ENTRY);
-        rb.setText(newLabel);
+        rb.setText(newLabel.toString());
       }
 
       public void insertUpdate(DocumentEvent ev)
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/DataReplicationPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/DataReplicationPanel.java
index 17296fd..424c8b5 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/DataReplicationPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/DataReplicationPanel.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.installer.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.awt.Component;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -276,17 +279,17 @@
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions()
+  protected Message getInstructions()
   {
-    return getMsg("data-replication-options-panel-instructions");
+    return INFO_DATA_REPLICATION_OPTIONS_PANEL_INSTRUCTIONS.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("data-replication-options-panel-title");
+    return INFO_DATA_REPLICATION_OPTIONS_PANEL_TITLE.get();
   }
 
   /**
@@ -303,13 +306,13 @@
   /**
    * {@inheritDoc}
    */
-  protected String getTextForIcon(UIFactory.IconType iconType)
+  protected Message getTextForIcon(UIFactory.IconType iconType)
   {
-    String text;
+    Message text;
     if ((iconType == UIFactory.IconType.WAIT) &&
         rbReplicated.isSelected() && cbTopologyExists.isSelected())
     {
-      text = getMsg("contacting-server-label");
+      text = INFO_CONTACTING_SERVER_LABEL.get();
     }
     else
     {
@@ -405,33 +408,35 @@
         new HashMap<FieldName, LabelFieldDescriptor>();
 
     hm.put(FieldName.REPLICATION_PORT, new LabelFieldDescriptor(
-        getMsg("replication-port-label"),
-        getMsg("replication-port-tooltip"),
+        INFO_REPLICATION_PORT_LABEL.get(),
+        INFO_REPLICATION_PORT_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.SECONDARY,
         UIFactory.PORT_FIELD_SIZE));
 
     hm.put(FieldName.REMOTE_SERVER_DN, new LabelFieldDescriptor(
-        getMsg("remote-server-dn-label"), getMsg("remote-server-dn-tooltip"),
+        INFO_REMOTE_SERVER_DN_LABEL.get(),
+        INFO_REMOTE_SERVER_DN_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.SECONDARY, UIFactory.DN_FIELD_SIZE));
 
     hm.put(FieldName.REMOTE_SERVER_PWD, new LabelFieldDescriptor(
-        getMsg("remote-server-pwd-label"), getMsg("remote-server-pwd-tooltip"),
+        INFO_REMOTE_SERVER_PWD_LABEL.get(),
+        INFO_REMOTE_SERVER_PWD_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.PASSWORD,
         LabelFieldDescriptor.LabelType.SECONDARY,
         UIFactory.PASSWORD_FIELD_SIZE));
 
     hm.put(FieldName.REMOTE_SERVER_HOST, new LabelFieldDescriptor(
-        getMsg("remote-server-host-label"),
-        getMsg("remote-server-host-tooltip"),
+        INFO_REMOTE_SERVER_HOST_LABEL.get(),
+        INFO_REMOTE_SERVER_HOST_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.SECONDARY,
         UIFactory.HOST_FIELD_SIZE));
 
     hm.put(FieldName.REMOTE_SERVER_PORT, new LabelFieldDescriptor(
-        getMsg("remote-server-port-label"),
-        getMsg("remote-server-port-tooltip"),
+        INFO_REMOTE_SERVER_PORT_LABEL.get(),
+        INFO_REMOTE_SERVER_PORT_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.SECONDARY,
         UIFactory.PORT_FIELD_SIZE));
@@ -455,13 +460,13 @@
 
     ButtonGroup buttonGroup = new ButtonGroup();
     rbStandalone =
-      UIFactory.makeJRadioButton(getMsg("standalone-server-label"),
-          getMsg("standalone-server-tooltip"),
+      UIFactory.makeJRadioButton(INFO_STANDALONE_SERVER_LABEL.get(),
+          INFO_STANDALONE_SERVER_TOOLTIP.get(),
           UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     rbStandalone.setOpaque(false);
     rbReplicated =
-      UIFactory.makeJRadioButton(getMsg("replicated-server-label"),
-          getMsg("replicated-server-tooltip"),
+      UIFactory.makeJRadioButton(INFO_REPLICATED_SERVER_LABEL.get(),
+          INFO_REPLICATED_SERVER_TOOLTIP.get(),
           UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     rbReplicated.setOpaque(false);
     buttonGroup.add(rbStandalone);
@@ -469,8 +474,8 @@
 
     DataReplicationOptions.Type type =
       defaultUserData.getReplicationOptions().getType();
-    cbTopologyExists = UIFactory.makeJCheckBox(getMsg("topology-exists-label"),
-        getMsg("topology-exists-tooltip"),
+    cbTopologyExists = UIFactory.makeJCheckBox(INFO_TOPOLOGY_EXISTS_LABEL.get(),
+        INFO_TOPOLOGY_EXISTS_TOOLTIP.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     cbTopologyExists.setOpaque(false);
     rbStandalone.setSelected(type ==
@@ -480,8 +485,8 @@
     cbTopologyExists.setSelected(type ==
       DataReplicationOptions.Type.IN_EXISTING_TOPOLOGY);
     cbRemoteServerPortSecure = UIFactory.makeJCheckBox(
-        getMsg("remote-server-port-is-secure-label"),
-        getMsg("remote-server-port-is-secure-tooltip"),
+        INFO_REMOTE_SERVER_PORT_IS_SECURE_LABEL.get(),
+        INFO_REMOTE_SERVER_PORT_IS_SECURE_TOOLTIP.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     checkEnablingState();
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/GlobalAdministratorPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/GlobalAdministratorPanel.java
index fd772ba..e8d7679 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/GlobalAdministratorPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/GlobalAdministratorPanel.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.installer.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.awt.Component;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -180,17 +183,17 @@
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions()
+  protected Message getInstructions()
   {
-    return getMsg("global-administrator-panel-instructions");
+    return INFO_GLOBAL_ADMINISTRATOR_PANEL_INSTRUCTIONS.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("global-administrator-panel-title");
+    return INFO_GLOBAL_ADMINISTRATOR_PANEL_TITLE.get();
   }
 
   /**
@@ -244,21 +247,21 @@
         new HashMap<FieldName, LabelFieldDescriptor>();
 
     hm.put(FieldName.GLOBAL_ADMINISTRATOR_UID, new LabelFieldDescriptor(
-        getMsg("global-administrator-uid-label"),
-        getMsg("global-administrator-uid-tooltip"),
+        INFO_GLOBAL_ADMINISTRATOR_UID_LABEL.get(),
+        INFO_GLOBAL_ADMINISTRATOR_UID_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.UID_FIELD_SIZE));
 
     hm.put(FieldName.GLOBAL_ADMINISTRATOR_PWD, new LabelFieldDescriptor(
-        getMsg("global-administrator-pwd-label"),
-        getMsg("global-administrator-pwd-tooltip"),
+        INFO_GLOBAL_ADMINISTRATOR_PWD_LABEL.get(),
+        INFO_GLOBAL_ADMINISTRATOR_PWD_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.PASSWORD,
         LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.PASSWORD_FIELD_SIZE));
 
     hm.put(FieldName.GLOBAL_ADMINISTRATOR_PWD_CONFIRM,
         new LabelFieldDescriptor(
-        getMsg("global-administrator-pwd-confirm-label"),
-        getMsg("global-administrator-pwd-confirm-tooltip"),
+        INFO_GLOBAL_ADMINISTRATOR_PWD_CONFIRM_LABEL.get(),
+        INFO_GLOBAL_ADMINISTRATOR_PWD_CONFIRM_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.PASSWORD,
         LabelFieldDescriptor.LabelType.PRIMARY,
         UIFactory.PASSWORD_FIELD_SIZE));
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/InstallReviewPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/InstallReviewPanel.java
index ee3094f..f246ea6 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/InstallReviewPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/InstallReviewPanel.java
@@ -27,6 +27,10 @@
 
 package org.opends.quicksetup.installer.ui;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.admin.ads.ServerDescriptor;
 import org.opends.admin.ads.SuffixDescriptor;
 import org.opends.quicksetup.UserData;
@@ -145,17 +149,17 @@
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions()
+  protected Message getInstructions()
   {
-    return getMsg("review-panel-instructions");
+    return INFO_REVIEW_PANEL_INSTRUCTIONS.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("review-panel-title");
+    return INFO_REVIEW_PANEL_TITLE.get();
   }
 
   /**
@@ -169,46 +173,50 @@
     if (displayServerLocation)
     {
       hm.put(FieldName.SERVER_LOCATION, new LabelFieldDescriptor(
-          getMsg("server-location-label"), getMsg("server-port-tooltip"),
-          LabelFieldDescriptor.FieldType.READ_ONLY,
-          LabelFieldDescriptor.LabelType.PRIMARY, 0));
+              INFO_SERVER_LOCATION_LABEL.get(),
+              INFO_SERVER_LOCATION_RELATIVE_TOOLTIP.get(),
+              LabelFieldDescriptor.FieldType.READ_ONLY,
+              LabelFieldDescriptor.LabelType.PRIMARY, 0));
     }
 
     hm.put(FieldName.HOST_NAME, new LabelFieldDescriptor(
-        getMsg("host-name-label"), getMsg("host-name-tooltip"),
-        LabelFieldDescriptor.FieldType.READ_ONLY,
-        LabelFieldDescriptor.LabelType.PRIMARY, 0));
+            INFO_HOST_NAME_LABEL.get(),
+            INFO_HOST_NAME_TOOLTIP.get(),
+            LabelFieldDescriptor.FieldType.READ_ONLY,
+            LabelFieldDescriptor.LabelType.PRIMARY, 0));
 
     hm.put(FieldName.SERVER_PORT, new LabelFieldDescriptor(
-        getMsg("server-port-label"), getMsg("server-port-tooltip"),
-        LabelFieldDescriptor.FieldType.READ_ONLY,
-        LabelFieldDescriptor.LabelType.PRIMARY, 0));
+            INFO_SERVER_PORT_LABEL.get(),
+            INFO_SERVER_PORT_TOOLTIP.get(),
+            LabelFieldDescriptor.FieldType.READ_ONLY,
+            LabelFieldDescriptor.LabelType.PRIMARY, 0));
 
     hm.put(FieldName.SECURITY_OPTIONS, new LabelFieldDescriptor(
-        getMsg("server-security-label"), getMsg("server-security-tooltip"),
-        LabelFieldDescriptor.FieldType.READ_ONLY,
-        LabelFieldDescriptor.LabelType.PRIMARY, 0));
+            INFO_SERVER_SECURITY_LABEL.get(),
+            INFO_SERVER_SECURITY_TOOLTIP.get(),
+            LabelFieldDescriptor.FieldType.READ_ONLY,
+            LabelFieldDescriptor.LabelType.PRIMARY, 0));
 
     hm.put(FieldName.DIRECTORY_MANAGER_DN, new LabelFieldDescriptor(
-        getMsg("server-directory-manager-dn-label"),
-        getMsg("server-directory-manager-dn-tooltip"),
-        LabelFieldDescriptor.FieldType.READ_ONLY,
-        LabelFieldDescriptor.LabelType.PRIMARY, 0));
+            INFO_SERVER_DIRECTORY_MANAGER_DN_LABEL.get(),
+            INFO_SERVER_DIRECTORY_MANAGER_DN_TOOLTIP.get(),
+            LabelFieldDescriptor.FieldType.READ_ONLY,
+            LabelFieldDescriptor.LabelType.PRIMARY, 0));
 
     hm.put(FieldName.GLOBAL_ADMINISTRATOR_UID, new LabelFieldDescriptor(
-        getMsg("global-administrator-uid-label"), null,
-        LabelFieldDescriptor.FieldType.READ_ONLY,
-        LabelFieldDescriptor.LabelType.PRIMARY, 0));
+            INFO_GLOBAL_ADMINISTRATOR_UID_LABEL.get(), null,
+            LabelFieldDescriptor.FieldType.READ_ONLY,
+            LabelFieldDescriptor.LabelType.PRIMARY, 0));
 
     hm.put(FieldName.DATA_OPTIONS, new LabelFieldDescriptor(
-        getMsg("directory-data-label"), null,
-        LabelFieldDescriptor.FieldType.READ_ONLY,
-        LabelFieldDescriptor.LabelType.PRIMARY, 0));
+            INFO_DIRECTORY_DATA_LABEL.get(), null,
+            LabelFieldDescriptor.FieldType.READ_ONLY,
+            LabelFieldDescriptor.LabelType.PRIMARY, 0));
 
     hm.put(FieldName.REPLICATION_PORT, new LabelFieldDescriptor(
-        getMsg("replication-port-label"), null,
-        LabelFieldDescriptor.FieldType.READ_ONLY,
-        LabelFieldDescriptor.LabelType.PRIMARY, 0));
+            INFO_REPLICATION_PORT_LABEL.get(), null,
+            LabelFieldDescriptor.FieldType.READ_ONLY,
+            LabelFieldDescriptor.LabelType.PRIMARY, 0));
 
     for (FieldName fieldName : hm.keySet())
     {
@@ -260,12 +268,12 @@
 
   /**
    * Returns the localized string describing the DataOptions chosen by the user.
-   * @param options the DataOptions of the user.
+   * @param userInstallData the DataOptions of the user.
    * @return the localized string describing the DataOptions chosen by the user.
    */
-  private String getDataDisplayString(UserData userInstallData)
+  private Message getDataDisplayString(UserData userInstallData)
   {
-    String msg;
+    Message msg;
 
     boolean createSuffix = false;
 
@@ -282,37 +290,34 @@
 
     if (createSuffix)
     {
-      String arg2;
+      Message arg2;
 
       NewSuffixOptions options = userInstallData.getNewSuffixOptions();
       switch (options.getType())
       {
       case CREATE_BASE_ENTRY:
-        arg2 = getMsg("review-create-base-entry-label",
-            new String[] { options.getBaseDn() });
+        arg2 = INFO_REVIEW_CREATE_BASE_ENTRY_LABEL.get(options.getBaseDn());
 
         break;
 
       case LEAVE_DATABASE_EMPTY:
-        arg2 = getMsg("review-leave-database-empty-label");
+        arg2 = INFO_REVIEW_LEAVE_DATABASE_EMPTY_LABEL.get();
         break;
 
       case IMPORT_FROM_LDIF_FILE:
-        arg2 = getMsg("review-import-ldif",
-            new String[] { options.getLDIFPath() });
+        arg2 = INFO_REVIEW_IMPORT_LDIF.get(options.getLDIFPath());
         break;
 
       case IMPORT_AUTOMATICALLY_GENERATED_DATA:
-        arg2 = getMsg("review-import-automatically-generated",
-            new String[] { String.valueOf(options.getNumberEntries()) });
+        arg2 = INFO_REVIEW_IMPORT_AUTOMATICALLY_GENERATED.get(
+                String.valueOf(options.getNumberEntries()));
         break;
 
       default:
         throw new IllegalArgumentException("Unknow type: " + options.getType());
       }
 
-      msg = getMsg("review-create-suffix",
-          new String[] {options.getBaseDn(), arg2});
+      msg = INFO_REVIEW_CREATE_SUFFIX.get(options.getBaseDn(), arg2);
     }
     else
     {
@@ -326,20 +331,20 @@
         }
         buf.append(suffix.getDN());
       }
-      msg = getMsg("review-replicate-suffix", new String[] {buf.toString()});
+      msg = INFO_REVIEW_REPLICATE_SUFFIX.get(buf.toString());
     }
 
     return msg;
   }
    /**
     * Returns the String representing the replication port configuration.
-    * @param options the DataOptions of the user.
+    * @param userInstallData the DataOptions of the user.
     * @return the localized string describing the Replication Ports chosen by
     * the user.
     */
   private String getReplicationPortString(UserData userInstallData)
   {
-    StringBuilder buf = new StringBuilder();
+    MessageBuilder buf = new MessageBuilder();
 
     DataReplicationOptions repl =
       userInstallData.getReplicationOptions();
@@ -355,17 +360,19 @@
         SuffixesToReplicateOptions.Type.REPLICATE_WITH_EXISTING_SUFFIXES) &&
         remotePorts.size() > 0)
     {
-      buf.append(userInstallData.getReplicationOptions().getReplicationPort());
-      TreeSet<String> remoteServerLines = new TreeSet<String>();
+      buf.append(String.valueOf(
+                      userInstallData.getReplicationOptions()
+                              .getReplicationPort()));
+      TreeSet<Message> remoteServerLines = new TreeSet<Message>();
       for (ServerDescriptor server : remotePorts.keySet())
       {
-        String[] args = {String.valueOf(remotePorts.get(server)),
-            server.getHostPort(true)};
-        remoteServerLines.add(getMsg("remote-server-replication-port", args));
+        remoteServerLines.add(INFO_REMOTE_SERVER_REPLICATION_PORT.get(
+                String.valueOf(remotePorts.get(server)),
+                server.getHostPort(true)));
       }
-      for (String line : remoteServerLines)
+      for (Message line : remoteServerLines)
       {
-        buf.append("\n"+line);
+        buf.append("\n").append(line);
       }
     }
     else
@@ -476,7 +483,7 @@
     if (warningLabel == null)
     {
       warningLabel = UIFactory.makeJLabel(UIFactory.IconType.WARNING,
-          getMsg("install-server-must-be-temporarily-started"),
+          INFO_INSTALL_SERVER_MUST_BE_TEMPORARILY_STARTED.get(),
           UIFactory.TextStyle.READ_ONLY);
     }
     return warningLabel;
@@ -487,8 +494,8 @@
     if (startCheckBox == null)
     {
       startCheckBox =
-          UIFactory.makeJCheckBox(getMsg("start-server-label"),
-              getMsg("start-server-tooltip"), UIFactory.TextStyle.CHECKBOX);
+          UIFactory.makeJCheckBox(INFO_START_SERVER_LABEL.get(),
+              INFO_START_SERVER_TOOLTIP.get(), UIFactory.TextStyle.CHECKBOX);
       startCheckBox.setSelected(
           getApplication().getUserData().getStartServer());
       startCheckBox.addActionListener(new ActionListener()
@@ -507,8 +514,8 @@
     if (enableWindowsServiceCheckBox == null)
     {
       enableWindowsServiceCheckBox =
-          UIFactory.makeJCheckBox(getMsg("enable-windows-service-label"),
-              getMsg("enable-windows-service-tooltip"),
+          UIFactory.makeJCheckBox(INFO_ENABLE_WINDOWS_SERVICE_LABEL.get(),
+              INFO_ENABLE_WINDOWS_SERVICE_TOOLTIP.get(),
               UIFactory.TextStyle.CHECKBOX);
       enableWindowsServiceCheckBox.setSelected(
           getApplication().getUserData().getEnableWindowsService());
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/InstallWelcomePanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/InstallWelcomePanel.java
index 42e5ba0..5261d57 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/InstallWelcomePanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/InstallWelcomePanel.java
@@ -27,6 +27,10 @@
 
 package org.opends.quicksetup.installer.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+import org.opends.server.util.DynamicConstants;
+
 import java.awt.Component;
 
 import org.opends.quicksetup.ui.GuiApplication;
@@ -55,41 +59,38 @@
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("welcome-panel-title");
+    return INFO_WELCOME_PANEL_TITLE.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions()
+  protected Message getInstructions()
   {
     /*
      * We can use org.opends.server.util.DynamicConstants without problems as it
      * has been added to quicksetup.jar during build time.
      */
-    String[] args;
-    String msgKey;
+    Message message;
     if (Utils.isWebStart())
     {
-      msgKey = "welcome-panel-webstart-instructions";
-      args = new String[3];
       String cmd = Utils.isWindows()? Installation.WINDOWS_SETUP_FILE_NAME:
           Installation.UNIX_SETUP_FILE_NAME;
-      args[0] = UIFactory.applyFontToHtml(cmd,
-          UIFactory.INSTRUCTIONS_MONOSPACE_FONT);
-      args[1] = org.opends.server.util.DynamicConstants.COMPACT_VERSION_STRING;
-      args[2] = org.opends.server.util.DynamicConstants.BUILD_ID;
+      message = INFO_WELCOME_PANEL_WEBSTART_INSTRUCTIONS.get(
+              UIFactory.applyFontToHtml(cmd,
+                      UIFactory.INSTRUCTIONS_MONOSPACE_FONT),
+              DynamicConstants.COMPACT_VERSION_STRING,
+              DynamicConstants.BUILD_ID);
     }
     else
     {
-      args = new String[2];
-      args[0] = org.opends.server.util.DynamicConstants.COMPACT_VERSION_STRING;
-      args[1] = org.opends.server.util.DynamicConstants.BUILD_ID;
-      msgKey = "welcome-panel-offline-instructions";
+      message = INFO_WELCOME_PANEL_OFFLINE_INSTRUCTIONS.get(
+              DynamicConstants.COMPACT_VERSION_STRING,
+              DynamicConstants.BUILD_ID);
     }
-    return getMsg(msgKey, args);
+    return message;
   }
 
   /**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/RemoteReplicationPortsPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/RemoteReplicationPortsPanel.java
index 9a918f9..dd7ebe6 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/RemoteReplicationPortsPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/RemoteReplicationPortsPanel.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.installer.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.awt.Component;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -180,17 +183,17 @@
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions()
+  protected Message getInstructions()
   {
-    return getMsg("remote-replication-port-instructions");
+    return INFO_REMOTE_REPLICATION_PORT_INSTRUCTIONS.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("remote-replication-port-title");
+    return INFO_REMOTE_REPLICATION_PORT_TITLE.get();
   }
 
   /**
@@ -229,9 +232,11 @@
       for (ServerDescriptor server : orderedServers)
       {
         LabelFieldDescriptor desc = new LabelFieldDescriptor(
-            server.getHostPort(true), getMsg("replication-port-tooltip"),
-            LabelFieldDescriptor.FieldType.TEXTFIELD,
-            LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.PORT_FIELD_SIZE);
+                Message.raw(server.getHostPort(true)),
+                INFO_REPLICATION_PORT_TOOLTIP.get(),
+                LabelFieldDescriptor.FieldType.TEXTFIELD,
+                LabelFieldDescriptor.LabelType.PRIMARY,
+                UIFactory.PORT_FIELD_SIZE);
         Integer defaultValue =
           data.getRemoteWithNoReplicationPort().get(server);
         JTextComponent field = UIFactory.makeJTextComponent(desc,
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SecurityOptionsDialog.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SecurityOptionsDialog.java
index 8977196..6ea1172 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SecurityOptionsDialog.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SecurityOptionsDialog.java
@@ -57,13 +57,14 @@
 import org.opends.quicksetup.SecurityOptions;
 import org.opends.quicksetup.event.BrowseActionListener;
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.installer.Installer;
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.ui.Utilities;
 import org.opends.quicksetup.util.BackgroundTask;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.util.CertificateManager;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This class is a dialog that appears when the user wants to configure
@@ -112,7 +113,7 @@
   throws IllegalArgumentException
   {
     super(parent);
-    setTitle(getMsg("security-options-dialog-title"));
+    setTitle(INFO_SECURITY_OPTIONS_DIALOG_TITLE.get().toString());
     securityOptions = options;
     getContentPane().add(createPanel());
     pack();
@@ -288,7 +289,7 @@
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.RELATIVE;
 
-    String title = getMsg("security-options-title");
+    Message title = INFO_SECURITY_OPTIONS_TITLE.get();
     JLabel l =
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, title,
             UIFactory.TextStyle.TITLE);
@@ -313,7 +314,7 @@
    */
   private Component createInstructionsPane()
   {
-    String instructions = getMsg("security-options-instructions");
+    Message instructions = INFO_SECURITY_OPTIONS_INSTRUCTIONS.get();
 
     JTextComponent instructionsPane =
       UIFactory.makeHtmlPane(instructions, UIFactory.INSTRUCTIONS_FONT);
@@ -341,8 +342,8 @@
       }
     };
 
-    cbEnableSSL = UIFactory.makeJCheckBox(getMsg("enable-ssl-label"),
-        getMsg("enable-ssl-tooltip"), UIFactory.TextStyle.PRIMARY_FIELD_VALID);
+    cbEnableSSL = UIFactory.makeJCheckBox(INFO_ENABLE_SSL_LABEL.get(),
+        INFO_ENABLE_SSL_TOOLTIP.get(), UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     cbEnableSSL.addActionListener(l);
     String sPort = "";
     int port = securityOptions.getSslPort();
@@ -350,21 +351,21 @@
     {
       sPort = String.valueOf(port);
     }
-    tfPort = UIFactory.makeJTextField(sPort,
-        getMsg("ssl-port-textfield-tooltip"), UIFactory.PORT_FIELD_SIZE,
+    tfPort = UIFactory.makeJTextField(Message.raw(sPort),
+        INFO_SSL_PORT_TEXTFIELD_TOOLTIP.get(), UIFactory.PORT_FIELD_SIZE,
         UIFactory.TextStyle.TEXTFIELD);
-    cbEnableStartTLS = UIFactory.makeJCheckBox(getMsg("enable-starttls-label"),
-        getMsg("enable-starttls-tooltip"),
+    cbEnableStartTLS = UIFactory.makeJCheckBox(INFO_ENABLE_STARTTLS_LABEL.get(),
+        INFO_ENABLE_STARTTLS_TOOLTIP.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     cbEnableStartTLS.addActionListener(l);
     rbUseSelfSignedCertificate = UIFactory.makeJRadioButton(
-        getMsg("use-self-signed-label"),
-        getMsg("use-self-signed-tooltip"),
+        INFO_USE_SELF_SIGNED_LABEL.get(),
+        INFO_USE_SELF_SIGNED_TOOLTIP.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     rbUseSelfSignedCertificate.addActionListener(l);
     rbUseExistingCertificate = UIFactory.makeJRadioButton(
-        getMsg("use-existing-certificate-label"),
-        getMsg("use-existing-certificate-tooltip"),
+        INFO_USE_EXISTING_CERTIFICATE_LABEL.get(),
+        INFO_USE_EXISTING_CERTIFICATE_TOOLTIP.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     rbUseExistingCertificate.addActionListener(l);
     ButtonGroup group1 = new ButtonGroup();
@@ -372,22 +373,22 @@
     group1.add(rbUseExistingCertificate);
 
     lKeystoreType = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("keystore-type-label"),
+        INFO_KEYSTORE_TYPE_LABEL.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     lKeystoreType.setOpaque(false);
     rbJKS = UIFactory.makeJRadioButton(
-        getMsg("jks-certificate-label"),
-        getMsg("jks-certificate-tooltip"),
+        INFO_JKS_CERTIFICATE_LABEL.get(),
+        INFO_JKS_CERTIFICATE_TOOLTIP.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     rbJKS.addActionListener(l);
     rbPKCS11 = UIFactory.makeJRadioButton(
-        getMsg("pkcs11-certificate-label"),
-        getMsg("pkcs11-certificate-tooltip"),
+        INFO_PKCS11_CERTIFICATE_LABEL.get(),
+        INFO_PKCS11_CERTIFICATE_TOOLTIP.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     rbPKCS11.addActionListener(l);
     rbPKCS12 = UIFactory.makeJRadioButton(
-        getMsg("pkcs12-certificate-label"),
-        getMsg("pkcs12-certificate-tooltip"),
+        INFO_PKCS12_CERTIFICATE_LABEL.get(),
+        INFO_PKCS12_CERTIFICATE_TOOLTIP.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     rbPKCS12.addActionListener(l);
     ButtonGroup group2 = new ButtonGroup();
@@ -397,16 +398,16 @@
     lKeystoreType.setLabelFor(rbJKS);
 
     lKeystorePath = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("keystore-path-label"),
+        INFO_KEYSTORE_PATH_LABEL.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     lKeystorePath.setOpaque(false);
-    tfKeystorePath = UIFactory.makeJTextField("",
-        getMsg("keystore-path-tooltip"),
+    tfKeystorePath = UIFactory.makeJTextField(Message.EMPTY,
+        INFO_KEYSTORE_PATH_TOOLTIP.get(),
         UIFactory.HOST_FIELD_SIZE, UIFactory.TextStyle.TEXTFIELD);
     lKeystorePath.setLabelFor(tfKeystorePath);
     browseButton =
-      UIFactory.makeJButton(getMsg("browse-button-label"),
-          getMsg("browse-button-tooltip"));
+      UIFactory.makeJButton(INFO_BROWSE_BUTTON_LABEL.get(),
+          INFO_BROWSE_BUTTON_TOOLTIP.get());
 
     BrowseActionListener browseListener =
       new BrowseActionListener(tfKeystorePath,
@@ -415,11 +416,11 @@
     browseButton.addActionListener(browseListener);
 
     lKeystorePwd = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("keystore-pwd-label"),
+        INFO_KEYSTORE_PWD_LABEL.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     lKeystorePwd.setOpaque(false);
-    tfKeystorePwd = UIFactory.makeJPasswordField("",
-        getMsg("keystore-pwd-tooltip"),
+    tfKeystorePwd = UIFactory.makeJPasswordField(Message.EMPTY,
+        INFO_KEYSTORE_PWD_TOOLTIP.get(),
         UIFactory.PASSWORD_FIELD_SIZE, UIFactory.TextStyle.PASSWORD_FIELD);
     lKeystorePwd.setLabelFor(tfKeystorePwd);
 
@@ -430,7 +431,7 @@
     gbc.insets = UIFactory.getEmptyInsets();
     gbc.fill = GridBagConstraints.HORIZONTAL;
     inputPanel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("ssl-access-label"), UIFactory.TextStyle.PRIMARY_FIELD_VALID),
+        INFO_SSL_ACCESS_LABEL.get(), UIFactory.TextStyle.PRIMARY_FIELD_VALID),
         gbc);
 
     JPanel auxPanel = new JPanel(new GridBagLayout());
@@ -458,7 +459,7 @@
     gbc.gridwidth = GridBagConstraints.RELATIVE;
     gbc.weightx = 0.0;
     inputPanel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("starttls-access-label"),
+        INFO_STARTTLS_ACCESS_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID),
         gbc);
     auxPanel = new JPanel(new GridBagLayout());
@@ -479,7 +480,7 @@
     gbc.gridwidth = GridBagConstraints.RELATIVE;
     gbc.weightx = 0.0;
     JLabel lCertificate = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("certificate-label"), UIFactory.TextStyle.PRIMARY_FIELD_VALID);
+        INFO_CERTIFICATE_LABEL.get(), UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     int additionalInset = Math.abs(lCertificate.getPreferredSize().height -
         rbUseSelfSignedCertificate.getPreferredSize().height) / 2;
     gbc.insets.top += additionalInset;
@@ -599,8 +600,8 @@
     gbc.fill = GridBagConstraints.NONE;
     gbc.weightx = 0.0;
     okButton =
-      UIFactory.makeJButton(getMsg("ok-button-label"),
-          getMsg("security-options-ok-button-tooltip"));
+      UIFactory.makeJButton(INFO_OK_BUTTON_LABEL.get(),
+          INFO_SECURITY_OPTIONS_OK_BUTTON_TOOLTIP.get());
     buttonsPanel.add(okButton, gbc);
     okButton.addActionListener(new ActionListener()
     {
@@ -613,8 +614,8 @@
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = UIFactory.HORIZONTAL_INSET_BETWEEN_BUTTONS;
     cancelButton =
-      UIFactory.makeJButton(getMsg("cancel-button-label"),
-          getMsg("security-options-cancel-button-tooltip"));
+      UIFactory.makeJButton(INFO_CANCEL_BUTTON_LABEL.get(),
+          INFO_SECURITY_OPTIONS_CANCEL_BUTTON_TOOLTIP.get());
     buttonsPanel.add(cancelButton, gbc);
     cancelButton.addActionListener(new ActionListener()
     {
@@ -647,7 +648,7 @@
     {
       public Object processBackgroundTask()
       {
-        ArrayList<String> errorMsgs = new ArrayList<String>();
+        ArrayList<Message> errorMsgs = new ArrayList<Message>();
 
         errorMsgs.addAll(checkPort());
 
@@ -664,8 +665,8 @@
           // Bug
           throwable.printStackTrace();
           displayError(
-              Utils.getThrowableMsg(getI18n(), "bug-msg", null, throwable),
-              getMsg("error-title"));
+              Utils.getThrowableMsg(INFO_BUG_MSG.get(), throwable),
+              INFO_ERROR_TITLE.get());
           cancelButton.setEnabled(true);
           okButton.setEnabled(true);
         }
@@ -677,13 +678,13 @@
 
           if (ar.size() > 0)
           {
-            ArrayList<String> errorMsgs = new ArrayList<String>();
+            ArrayList<Message> errorMsgs = new ArrayList<Message>();
             for (Object o: ar)
             {
-              errorMsgs.add((String)o);
+              errorMsgs.add(Message.raw((String)o));
             }
-            displayError(Utils.getStringFromCollection(errorMsgs, "\n"),
-                getMsg("error-title"));
+            displayError(Utils.getMessageFromCollection(errorMsgs, "\n"),
+                INFO_ERROR_TITLE.get());
           }
           else
           {
@@ -734,7 +735,7 @@
    * @param title
    *          the title for the dialog.
    */
-  private void displayError(String msg, String title)
+  private void displayError(Message msg, Message title)
   {
     Utilities.displayError(this, msg, title);
     toFront();
@@ -849,40 +850,23 @@
    * @return the port help message that we display when we cannot use the
    * default port (636).
    */
-  private String getPortHelpMessage()
+  private Message getPortHelpMessage()
   {
-    String s = "";
+    Message s = Message.EMPTY;
     if (securityOptions.getSslPort() != DEFAULT_PORT)
     {
-      s = getMsg("cannot-use-default-secure-port");
+      s = INFO_CANNOT_USE_DEFAULT_SECURE_PORT.get();
     }
     return s;
   }
 
-  /* The following three methods are just commodity methods to retrieve
-   * localized messages */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private String getMsg(String key, String[] args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
   /**
    * Checks the port.
    * @return the error messages found while checking the port.
    */
-  private ArrayList<String> checkPort()
+  private ArrayList<Message> checkPort()
   {
-    ArrayList<String> errorMsgs = new ArrayList<String>();
+    ArrayList<Message> errorMsgs = new ArrayList<Message>();
 
     if (cbEnableSSL.isSelected())
     {
@@ -895,23 +879,22 @@
         if ((port < Installer.MIN_PORT_VALUE) ||
             (port > Installer.MAX_PORT_VALUE))
         {
-          String[] args =
-            { String.valueOf(Installer.MIN_PORT_VALUE),
-              String.valueOf(Installer.MAX_PORT_VALUE) };
-          errorMsgs.add(getMsg("invalid-secure-port-value-range", args));
+          errorMsgs.add(INFO_INVALID_SECURE_PORT_VALUE_RANGE.get(
+                  String.valueOf(Installer.MIN_PORT_VALUE),
+                  String.valueOf(Installer.MAX_PORT_VALUE)));
 
         }
         else if (!Utils.canUseAsPort(port))
         {
           if (Utils.isPriviledgedPort(port))
           {
-            errorMsgs.add(getMsg("cannot-bind-priviledged-port", new String[]
-              { String.valueOf(port) }));
+            errorMsgs.add(INFO_CANNOT_BIND_PRIVILEDGED_PORT.get(
+              String.valueOf(port)));
           }
           else
           {
-            errorMsgs.add(getMsg("cannot-bind-port", new String[]
-              { String.valueOf(port) }));
+            errorMsgs.add(INFO_CANNOT_BIND_PORT.get(
+              String.valueOf(port)));
           }
 
         }
@@ -919,10 +902,9 @@
       }
       catch (NumberFormatException nfe)
       {
-        String[] args =
-          { String.valueOf(Installer.MIN_PORT_VALUE),
-            String.valueOf(Installer.MAX_PORT_VALUE) };
-        errorMsgs.add(getMsg("invalid-secure-port-value-range", args));
+        errorMsgs.add(INFO_INVALID_SECURE_PORT_VALUE_RANGE.get(
+                String.valueOf(Installer.MIN_PORT_VALUE),
+                String.valueOf(Installer.MAX_PORT_VALUE)));
       }
     }
     setValidLater(cbEnableSSL, errorMsgs.size() == 0);
@@ -934,9 +916,9 @@
    * @return the error messages found while checking existing keystore
    * parameters.
    */
-  private ArrayList<String> checkKeystore()
+  private ArrayList<Message> checkKeystore()
   {
-    ArrayList<String> errorMsgs = new ArrayList<String>();
+    ArrayList<Message> errorMsgs = new ArrayList<Message>();
 
     boolean pathValid = true;
     boolean pwdValid = true;
@@ -950,18 +932,18 @@
         /* Check the path */
         if ((path == null) || (path.length() == 0))
         {
-          errorMsgs.add(getMsg("keystore-path-not-provided"));
+          errorMsgs.add(INFO_KEYSTORE_PATH_NOT_PROVIDED.get());
         }
         else
         {
           File f = new File(path);
           if (!f.exists())
           {
-            errorMsgs.add(getMsg("keystore-path-does-not-exist"));
+            errorMsgs.add(INFO_KEYSTORE_PATH_DOES_NOT_EXIST.get());
           }
           else if (!f.isFile())
           {
-            errorMsgs.add(getMsg("keystore-path-not-a-file"));
+            errorMsgs.add(INFO_KEYSTORE_PATH_NOT_A_FILE.get());
           }
         }
 
@@ -972,7 +954,7 @@
       String pwd = String.valueOf(tfKeystorePwd.getPassword());
       if ((pwd == null) || (pwd.length() == 0))
       {
-        errorMsgs.add(getMsg("keystore-pwd-empty"));
+        errorMsgs.add(INFO_KEYSTORE_PWD_EMPTY.get());
         pwdValid = false;
       }
 
@@ -1012,17 +994,17 @@
             // Could not retrieve any certificate
             if (rbPKCS11.isSelected())
             {
-              errorMsgs.add(getMsg("pkcs11-keystore-does-not-exist"));
+              errorMsgs.add(INFO_PKCS11_KEYSTORE_DOES_NOT_EXIST.get());
             }
             else
             {
               if (rbJKS.isSelected())
               {
-                errorMsgs.add(getMsg("jks-keystore-does-not-exist"));
+                errorMsgs.add(INFO_JKS_KEYSTORE_DOES_NOT_EXIST.get());
               }
               else
               {
-                errorMsgs.add(getMsg("pkcs12-keystore-does-not-exist"));
+                errorMsgs.add(INFO_PKCS12_KEYSTORE_DOES_NOT_EXIST.get());
               }
               pathValid = false;
             }
@@ -1039,17 +1021,17 @@
           // because the provided file is not a valid keystore, etc.
           if (rbPKCS11.isSelected())
           {
-            errorMsgs.add(getMsg("error-accessing-pkcs11-keystore"));
+            errorMsgs.add(INFO_ERROR_ACCESSING_PKCS11_KEYSTORE.get());
           }
           else
           {
             if (rbJKS.isSelected())
             {
-              errorMsgs.add(getMsg("error-accessing-jks-keystore"));
+              errorMsgs.add(INFO_ERROR_ACCESSING_JKS_KEYSTORE.get());
             }
             else
             {
-              errorMsgs.add(getMsg("error-accessing-pkcs12-keystore"));
+              errorMsgs.add(INFO_ERROR_ACCESSING_PKCS12_KEYSTORE.get());
             }
             pathValid = false;
           }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SelectAliasDialog.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SelectAliasDialog.java
index 0075beb..8ef3505 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SelectAliasDialog.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SelectAliasDialog.java
@@ -45,9 +45,10 @@
 import javax.swing.text.JTextComponent;
 
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.ui.Utilities;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This class is a dialog that appears when the user must choose the alias to
@@ -68,7 +69,7 @@
   public SelectAliasDialog(JDialog parent)
   {
     super(parent);
-    setTitle(getMsg("select-alias-title"));
+    setTitle(INFO_SELECT_ALIAS_TITLE.get().toString());
     getContentPane().add(createPanel());
     pack();
     int minWidth = (int) getPreferredSize().getWidth();
@@ -135,18 +136,6 @@
     return (String) comboAliases.getSelectedItem();
   }
 
-  /* The following three methods are just commodity methods to retrieve
-   * localized messages */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
   /**
    * Creates and returns the panel of the dialog.
    * @return the panel of the dialog.
@@ -170,7 +159,7 @@
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = UIFactory.LEFT_INSET_SECONDARY_FIELD;
     gbc.fill = GridBagConstraints.BOTH;
-    String msg = getMsg("select-alias-msg");
+    Message msg = INFO_SELECT_ALIAS_MSG.get();
     JTextComponent tf = UIFactory.makeHtmlPane(msg,
             UIFactory.INSTRUCTIONS_FONT);
     tf.setOpaque(false);
@@ -196,8 +185,8 @@
     gbc.weightx = 1.0;
     gbc.gridwidth = 3;
     p2.add(Box.createHorizontalGlue(), gbc);
-    okButton = UIFactory.makeJButton(getMsg("ok-button-label"),
-          getMsg("select-alias-ok-button-tooltip"));
+    okButton = UIFactory.makeJButton(INFO_OK_BUTTON_LABEL.get(),
+          INFO_SELECT_ALIAS_OK_BUTTON_TOOLTIP.get());
     okButton.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent ev)
@@ -209,8 +198,8 @@
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.RELATIVE;
     p2.add(okButton, gbc);
-    JButton cancelButton = UIFactory.makeJButton(getMsg("cancel-button-label"),
-            getMsg("select-alias-cancel-button-tooltip"));
+    JButton cancelButton = UIFactory.makeJButton(INFO_CANCEL_BUTTON_LABEL.get(),
+            INFO_SELECT_ALIAS_CANCEL_BUTTON_TOOLTIP.get());
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = UIFactory.HORIZONTAL_INSET_BETWEEN_BUTTONS;
     p2.add(cancelButton, gbc);
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/ServerSettingsPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/ServerSettingsPanel.java
index 9060834..448a76d 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/ServerSettingsPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/ServerSettingsPanel.java
@@ -53,7 +53,10 @@
 import org.opends.quicksetup.util.Utils;
 import org.opends.quicksetup.SecurityOptions;
 import org.opends.quicksetup.UserData;
+
 import org.opends.server.util.CertificateManager;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This is the panel that contains the Server Settings: the port, the Directory
@@ -223,7 +226,7 @@
       gbc.weightx = 0.0;
       gbc.insets.left = UIFactory.LEFT_INSET_SECONDARY_FIELD;
       auxPanel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-          File.separator, UIFactory.TextStyle.TEXTFIELD), gbc);
+          Message.raw(File.separator), UIFactory.TextStyle.TEXTFIELD), gbc);
 
       gbc.gridwidth = GridBagConstraints.REMAINDER;
       gbc.weightx = 0.3;
@@ -291,7 +294,7 @@
         else
         {
           auxPanel.add(UIFactory.makeJLabel(UIFactory.IconType.WARNING,
-              getMsg("cannot-update-security-warning"),
+              INFO_CANNOT_UPDATE_SECURITY_WARNING.get(),
               UIFactory.TextStyle.SECONDARY_FIELD_VALID), gbc);
         }
       }
@@ -330,24 +333,24 @@
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions()
+  protected Message getInstructions()
   {
     if (Utils.isWebStart())
     {
-      return getMsg("server-settings-panel-instructions-webstart");
+      return INFO_SERVER_SETTINGS_PANEL_INSTRUCTIONS_WEBSTART.get();
     }
     else
     {
-      return getMsg("server-settings-panel-instructions");
+      return INFO_SERVER_SETTINGS_PANEL_INSTRUCTIONS.get();
     }
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("server-settings-panel-title");
+    return INFO_SERVER_SETTINGS_PANEL_TITLE.get();
   }
 
   /**
@@ -426,36 +429,39 @@
         new HashMap<FieldName, LabelFieldDescriptor>();
 
     hm.put(FieldName.HOST_NAME, new LabelFieldDescriptor(
-        getMsg("host-name-label"), getMsg("host-name-tooltip"),
+        INFO_HOST_NAME_LABEL.get(),
+        INFO_HOST_NAME_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.HOST_FIELD_SIZE));
 
     hm.put(FieldName.SERVER_PORT, new LabelFieldDescriptor(
-        getMsg("server-port-label"), getMsg("server-port-tooltip"),
+        INFO_SERVER_PORT_LABEL.get(),
+        INFO_SERVER_PORT_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.PORT_FIELD_SIZE));
 
     hm.put(FieldName.SECURITY_OPTIONS, new LabelFieldDescriptor(
-        getMsg("server-security-label"), getMsg("server-security-tooltip"),
+        INFO_SERVER_SECURITY_LABEL.get(),
+        INFO_SERVER_SECURITY_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.READ_ONLY,
         LabelFieldDescriptor.LabelType.PRIMARY, 0));
 
     hm.put(FieldName.DIRECTORY_MANAGER_DN, new LabelFieldDescriptor(
-        getMsg("server-directory-manager-dn-label"),
-        getMsg("server-directory-manager-dn-tooltip"),
+        INFO_SERVER_DIRECTORY_MANAGER_DN_LABEL.get(),
+        INFO_SERVER_DIRECTORY_MANAGER_DN_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.TEXTFIELD,
         LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.DN_FIELD_SIZE));
 
     hm.put(FieldName.DIRECTORY_MANAGER_PWD, new LabelFieldDescriptor(
-        getMsg("server-directory-manager-pwd-label"),
-        getMsg("server-directory-manager-pwd-tooltip"),
+        INFO_SERVER_DIRECTORY_MANAGER_PWD_LABEL.get(),
+        INFO_SERVER_DIRECTORY_MANAGER_PWD_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.PASSWORD,
         LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.PASSWORD_FIELD_SIZE));
 
     hm.put(FieldName.DIRECTORY_MANAGER_PWD_CONFIRM,
         new LabelFieldDescriptor(
-        getMsg("server-directory-manager-pwd-confirm-label"),
-        getMsg("server-directory-manager-pwd-confirm-tooltip"),
+        INFO_SERVER_DIRECTORY_MANAGER_PWD_CONFIRM_LABEL.get(),
+        INFO_SERVER_DIRECTORY_MANAGER_PWD_CONFIRM_TOOLTIP.get(),
         LabelFieldDescriptor.FieldType.PASSWORD,
         LabelFieldDescriptor.LabelType.PRIMARY,
         UIFactory.PASSWORD_FIELD_SIZE));
@@ -476,7 +482,8 @@
       else
       {
         lSecurity = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-            defaultValue, UIFactory.TextStyle.SECONDARY_FIELD_VALID);
+                Message.raw(defaultValue),
+                UIFactory.TextStyle.SECONDARY_FIELD_VALID);
       }
 
       hmLabels.put(fieldName, label);
@@ -484,8 +491,8 @@
 
     /* Create the elements for the location */
     LabelFieldDescriptor desc =
-        new LabelFieldDescriptor(getMsg("server-location-label"),
-            getMsg("server-location-parent-tooltip"),
+        new LabelFieldDescriptor(INFO_SERVER_LOCATION_LABEL.get(),
+            INFO_SERVER_LOCATION_PARENT_TOOLTIP.get(),
             LabelFieldDescriptor.FieldType.TEXTFIELD,
             LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.PATH_FIELD_SIZE);
     lServerLocation = UIFactory.makeJLabel(desc);
@@ -493,8 +500,8 @@
     lServerLocation.setLabelFor(tfServerLocationParent);
 
     desc =
-        new LabelFieldDescriptor(getMsg("server-location-label"),
-            getMsg("server-location-relative-tooltip"),
+        new LabelFieldDescriptor(INFO_SERVER_LOCATION_LABEL.get(),
+            INFO_SERVER_LOCATION_RELATIVE_TOOLTIP.get(),
             LabelFieldDescriptor.FieldType.TEXTFIELD,
             LabelFieldDescriptor.LabelType.PRIMARY,
             UIFactory.RELATIVE_PATH_FIELD_SIZE);
@@ -524,8 +531,8 @@
     if (browseButton == null)
     {
       browseButton =
-          UIFactory.makeJButton(getMsg("browse-button-label"),
-              getMsg("browse-button-tooltip"));
+          UIFactory.makeJButton(INFO_BROWSE_BUTTON_LABEL.get(),
+              INFO_BROWSE_BUTTON_TOOLTIP.get());
 
       BrowseActionListener l =
           new BrowseActionListener(tfServerLocationParent,
@@ -546,8 +553,8 @@
     if (secureAccessButton == null)
     {
       secureAccessButton =
-          UIFactory.makeJButton(getMsg("server-security-button-label"),
-              getMsg("server-security-button-tooltip"));
+          UIFactory.makeJButton(INFO_SERVER_SECURITY_BUTTON_LABEL.get(),
+              INFO_SERVER_SECURITY_BUTTON_TOOLTIP.get());
 
       secureAccessButton.addActionListener(new ActionListener()
       {
@@ -626,12 +633,12 @@
    * @return the port help message that we display when we cannot use the
    * default port (389).
    */
-  private String getPortHelpMessage()
+  private Message getPortHelpMessage()
   {
-    String s = "";
+    Message s = Message.EMPTY;
     if (defaultUserData.getServerPort() != 389)
     {
-      s = getMsg("cannot-use-default-port");
+      s = INFO_CANNOT_USE_DEFAULT_PORT.get();
     }
     return s;
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SuffixesToReplicatePanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SuffixesToReplicatePanel.java
index 9bbc786..dd30b40 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SuffixesToReplicatePanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/ui/SuffixesToReplicatePanel.java
@@ -66,6 +66,10 @@
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.util.Utils;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
+
 /**
  * This class is used to provide a data model for the list of suffixes that
  * we have to replicate on the new server.
@@ -227,17 +231,17 @@
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions()
+  protected Message getInstructions()
   {
-    return getMsg("suffixes-to-replicate-panel-instructions");
+    return INFO_SUFFIXES_TO_REPLICATE_PANEL_INSTRUCTIONS.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("suffixes-to-replicate-panel-title");
+    return INFO_SUFFIXES_TO_REPLICATE_PANEL_TITLE.get();
   }
 
   /**
@@ -267,8 +271,8 @@
       hmCheckBoxes.clear();
       for (SuffixDescriptor suffix : orderedSuffixes)
       {
-        JCheckBox cb = UIFactory.makeJCheckBox(suffix.getDN(),
-            getMsg("suffixes-to-replicate-dn-tooltip"),
+        JCheckBox cb = UIFactory.makeJCheckBox(Message.raw(suffix.getDN()),
+            INFO_SUFFIXES_TO_REPLICATE_DN_TOOLTIP.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
         cb.setOpaque(false);
         Boolean v = hmOldValues.get(suffix.getId());
@@ -322,13 +326,13 @@
   {
     ButtonGroup buttonGroup = new ButtonGroup();
     rbCreateNewSuffix =
-      UIFactory.makeJRadioButton(getMsg("create-new-suffix-label"),
-          getMsg("create-new-suffix-tooltip"),
+      UIFactory.makeJRadioButton(INFO_CREATE_NEW_SUFFIX_LABEL.get(),
+          INFO_CREATE_NEW_SUFFIX_TOOLTIP.get(),
           UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     rbCreateNewSuffix.setOpaque(false);
     rbReplicate =
-      UIFactory.makeJRadioButton(getMsg("replicate-with-suffixes-label"),
-          getMsg("replicate-with-suffixes-tooltip"),
+      UIFactory.makeJRadioButton(INFO_REPLICATE_WITH_SUFFIXES_LABEL.get(),
+          INFO_REPLICATE_WITH_SUFFIXES_TOOLTIP.get(),
           UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     rbReplicate.setOpaque(false);
     buttonGroup.add(rbCreateNewSuffix);
@@ -342,7 +346,7 @@
       SuffixesToReplicateOptions.Type.REPLICATE_WITH_EXISTING_SUFFIXES);
 
     noSuffixLabel = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("suffix-list-empty"),
+        INFO_SUFFIX_LIST_EMPTY.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
     ActionListener l = new ActionListener()
@@ -404,13 +408,15 @@
       gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
       gbc.weightx = 1.0;
       gbc.gridwidth = GridBagConstraints.REMAINDER;
-      JEditorPane l = UIFactory.makeTextPane(getSuffixString(suffix),
-          UIFactory.TextStyle.SECONDARY_FIELD_VALID);
+      JEditorPane l = UIFactory.makeTextPane(
+              Message.raw(getSuffixString(suffix)),
+              UIFactory.TextStyle.SECONDARY_FIELD_VALID);
       l.setOpaque(false);
       suffixLabels.add(l);
 
       /* Use a prototype label to get the additional insets */
-      JEditorPane proto = UIFactory.makeTextPane(suffix.getDN(),
+      JEditorPane proto = UIFactory.makeTextPane(
+              Message.raw(suffix.getDN()),
           UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
       gbc.insets.top += Math.abs(cb.getPreferredSize().height -
@@ -423,13 +429,13 @@
 
   private String getSuffixString(SuffixDescriptor desc)
   {
-    TreeSet<String> replicaDisplays = new TreeSet<String>();
+    TreeSet<Message> replicaDisplays = new TreeSet<Message>();
     for (ReplicaDescriptor rep: desc.getReplicas())
     {
       replicaDisplays.add(getReplicaDisplay(rep));
     }
-    StringBuilder buf = new StringBuilder();
-    for (String display: replicaDisplays)
+    MessageBuilder buf = new MessageBuilder();
+    for (Message display: replicaDisplays)
     {
       if (buf.length() > 0)
       {
@@ -440,9 +446,9 @@
     return buf.toString();
   }
 
-  private String getReplicaDisplay(ReplicaDescriptor replica)
+  private Message getReplicaDisplay(ReplicaDescriptor replica)
   {
-    String display;
+    Message display;
 
     ServerDescriptor server = replica.getServer();
 
@@ -452,19 +458,17 @@
 
     if (nEntries > 0)
     {
-      String[] args = {serverDisplay, String.valueOf(nEntries)};
-      display = getMsg("suffix-list-replica-display-entries", args);
+      display = INFO_SUFFIX_LIST_REPLICA_DISPLAY_ENTRIES.get(
+              serverDisplay, String.valueOf(nEntries));
     }
     else if (nEntries == 0)
     {
-      String[] arg = {serverDisplay};
-      display = getMsg("suffix-list-replica-display-no-entries", arg);
+      display = INFO_SUFFIX_LIST_REPLICA_DISPLAY_NO_ENTRIES.get(serverDisplay);
     }
     else
     {
-      String[] arg = {serverDisplay};
-      display = getMsg("suffix-list-replica-display-entries-not-available",
-          arg);
+      display = INFO_SUFFIX_LIST_REPLICA_DISPLAY_ENTRIES_NOT_AVAILABLE.get(
+              serverDisplay);
     }
 
     return display;
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java
index a26e9d6..df6873a 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java
@@ -48,6 +48,9 @@
 import org.opends.quicksetup.util.ServerController;
 import org.opends.quicksetup.util.FileManager;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 /**
  * This is an implementation of the Installer class that is used to install
  * the Directory Server using Web Start.
@@ -78,8 +81,8 @@
   private HashMap<InstallProgressStep, Integer> hmRatio =
       new HashMap<InstallProgressStep, Integer>();
 
-  private HashMap<InstallProgressStep, String> hmSummary =
-      new HashMap<InstallProgressStep, String>();
+  private HashMap<InstallProgressStep, Message> hmSummary =
+      new HashMap<InstallProgressStep, Message>();
 
   private static final Logger LOG =
     Logger.getLogger(WebStartInstaller.class.getName());
@@ -234,7 +237,7 @@
         notifyListenersOfLog();
         updateSummaryWithServerState(hmSummary);
         setCurrentProgressStep(InstallProgressStep.FINISHED_WITH_ERROR);
-        String html = getFormattedError(ex, true);
+        Message html = getFormattedError(ex, true);
         notifyListeners(html);
         LOG.log(Level.SEVERE, "Error installing.", ex);
       }
@@ -256,8 +259,8 @@
       setCurrentProgressStep(InstallProgressStep.FINISHED_WITH_ERROR);
       ApplicationException ex = new ApplicationException(
           ApplicationReturnCode.ReturnCode.BUG,
-          getThrowableMsg("bug-msg", t), t);
-      String msg = getFormattedError(ex, true);
+          Utils.getThrowableMsg(INFO_BUG_MSG.get(), t), t);
+      Message msg = getFormattedError(ex, true);
       notifyListeners(msg);
       LOG.log(Level.SEVERE, "Error installing.", t);
     }
@@ -276,9 +279,9 @@
   /**
    * {@inheritDoc}
    */
-  public String getSummary(ProgressStep status)
+  public Message getSummary(ProgressStep status)
   {
-    String summary = null;
+    Message summary = null;
     if (InstallProgressStep.DOWNLOADING.equals(status)) {
       summary = loader.getSummary();
     } else {
@@ -400,7 +403,7 @@
 
   private InputStream getZipInputStream(Integer maxRatio)
       throws ApplicationException {
-    notifyListeners(getFormattedWithPoints(getMsg("progress-downloading")));
+    notifyListeners(getFormattedWithPoints(INFO_PROGRESS_DOWNLOADING.get()));
     InputStream in = null;
 
     waitForLoader(maxRatio);
@@ -412,8 +415,8 @@
     if (in == null)
     {
       throw new ApplicationException(
-          ApplicationReturnCode.ReturnCode.DOWNLOAD_ERROR, getMsg(
-              "error-zipinputstreamnull", new String[] { zipName }), null);
+          ApplicationReturnCode.ReturnCode.DOWNLOAD_ERROR,
+              INFO_ERROR_ZIPINPUTSTREAMNULL.get(zipName), null);
     }
 
     notifyListeners(getFormattedDone());
@@ -437,15 +440,14 @@
         {
           throw new ApplicationException(
               ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
-              getMsg("error-could-not-create-parent-dir",
-                  new String[] {parent}), null);
+              INFO_ERROR_COULD_NOT_CREATE_PARENT_DIR.get(parent), null);
         }
       }
       catch (IOException ioe)
       {
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
-            getMsg("error-could-not-create-parent-dir", new String[] {parent}),
+            INFO_ERROR_COULD_NOT_CREATE_PARENT_DIR.get(parent),
             ioe);
       }
     }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties
deleted file mode 100644
index 5fabe83..0000000
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/resources/Resources.properties
+++ /dev/null
@@ -1,1260 +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
-# trunk/opends/resource/legal-notices/OpenDS.LICENSE
-# or https://OpenDS.dev.java.net/OpenDS.LICENSE.
-# 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
-# trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
-#
-#      Portions Copyright 2006-2007 Sun Microsystems, Inc.
-#
-#
-# This file contains the primary Directory Server configuration.  It must not
-# be directly edited while the server is online.  The server configuration
-# should only be managed using the administration utilities provided with the
-# Directory Server.
-
-#
-# Setup command line messages
-#
-setup-launcher-usage-description=This utility may be used to setup the Directory \
-Server.
-
-setup-launcher-launching-gui=Launching graphical setup...
-setup-launcher-gui-launched-failed=\n\nThe graphical Setup launch failed.\n\n\
-Launching command line Setup...
-setup-launcher-gui-launched-failed-details=\n\nThe graphical Setup launch \
-failed.  Check file {0} for more details.\n\n\
-Launching command line Setup...
-
-
-
-#
-# Upgrade command line messages
-#
-upgrade-launcher-description=This utility may be used to upgrade the Directory \
-  Server to a newer version.
-upgrade-launcher-usage-description=This utility may be used to upgrade the \
-Directory Server to a newer version.  Use of this tool assumes that you have \
-already downloaded an OpenDS install package (.zip) file.  You can also \
-upgrade your server using the Java Web Start version of this tool by visiting \
-the OpenDS web site at www.opends.org.
-upgrade-launcher-launching-gui=Launching graphical upgrade...
-upgrade-launcher-launching-cli=Launching command line upgrade...
-upgrade-launcher-gui-launched-failed=\n\nThe graphical upgrade launch \
-failed.\n\nLaunching command line upgrade...
-upgrade-launcher-gui-launched-failed-details=\n\nThe graphical upgrade launch \
-failed.  Check file {0} for more details.\n\nLaunching command line upgrade...
-cli-upgrade-unknown-argument=Unknown argument {0}
-
-revert-launcher-usage-description=This utility reverts the current installation \
-  of the Directory Server to a version prior to running the upgrade utility.   
-revert-error-no-history-dir=There are no existing backup locations from \
-  prior upgrades.  The 'history' directory does not exist.
-revert-error-empty-history-dir=There are no existing backup locations from \
-  prior upgrades.  The 'history' directory is empty.
-revert-error-null-files-dir=The upgrade backup directory is invalid or could not \
-  be determined.
-revert-error-not-dir-files-dir=The upgrade backup directory is not a directory.
-revert-error-invalid-files-dir=The upgrade backup directory does not appear to \
-  contain files backed up from an invocation of the upgrade tool.
-revert-error-no-dir=ERROR:  No reversion directory specified.  You must specify \
-  one of {0}
-
-
-#
-# Dialog titles
-#
-frame-install-title=OpenDS QuickSetup
-frame-upgrade-title=OpenDS QuickUpgrade
-
-#
-# Wizard buttons (labels and tooltips)
-#
-next-button-label=Next >
-next-button-tooltip=Go to Next Step
-previous-button-label=< Previous
-previous-button-tooltip=Go to Previous Step
-finish-button-label=Finish
-finish-button-install-label=Finish
-finish-button-install-tooltip=Finish Installation and Setup
-finish-button-upgrade-tooltip=Finish Upgrade
-finish-button-tooltip=Finish Setup
-close-button-label=Close
-close-button-tooltip=Close Setup Window
-close-progress-button-tooltip=Close Progress Dialog
-close-button-install-tooltip=Close Setup Window
-quit-button-label=Quit
-quit-button-install-tooltip=Quit Setup
-quit-button-upgrade-tooltip=Quit Upgrade
-cancel-button-label=Cancel
-cancel-button-tooltip=Cancel the currently running operation
-shutdown-button-label=Shutdown
-continue-button-label=Continue
-continue-button-install-tooltip=Continue with Setup
-ok-button-label=OK
-retry-button-label=Retry
-
-#
-# Confirmation dialogs
-#
-confirm-close-install-title=Confirmation Required
-confirm-close-install-msg=OpenDS QuickSetup has not yet completed.\nAre you \
-sure you want to close the QuickSetup Window?
-confirm-cancel-install-title=Confirmation Required
-confirm-cancel-install-msg=Are you sure you want to cancel OpenDS \
-QuickSetup?\nIf you click 'Yes' nothing will be installed on your system.
-confirm-quit-install-title=Confirmation Required
-confirm-quit-install-msg=Are you sure you want to quit OpenDS \
-QuickSetup?\nIf you click 'Yes' nothing will be installed on your system.
-confirm-cancel-upgrade-title=Confirmation Required
-confirm-cancel-upgrade-msg=OpenDS QuickUpgrade has not yet completed.\nIf you \
-  click 'Yes' any changes that have been made to the server being upgraded \
-  will be backed out.\n\nAre you sure you want to close the QuickUpgrade Window?\n
-confirm-quit-upgrade-title=Confirmation Required
-confirm-quit-upgrade-msg=Are you sure you want to quit OpenDS \
-QuickUpgrade?\nIf you click 'Yes' nothing will be upgraded on your system.
-confirm-cancel-title=Confirmation Required
-confirm-cancel-prompt=Cancel the running operation?
-network-error-title=Network Error
-
-#
-# Error dialog title
-#
-error-title=Error
-
-#
-# Confirmation dialog title
-#
-confirmation-title=Confirmation Required
-
-#
-# Error when we cannot launch the status panel
-#
-could-not-launch-status-panel-msg=An unexpected error occurred launching the \
-Status Panel.
-
-#
-# Browser launching error dialog
-#
-error-browser-display-msg=Could not launch the web browser.<br>You can copy \
-and paste the following URL manually into your web browser:<br>\
-<span style="font-style:italic">{0}</span>
-error-browser-display-title=Error
-error-browser-copy-button-label=Copy URL
-error-browser-copy-button-tooltip=Copies the URL to the system clipboard
-error-browser-close-button-tooltip=Close this window
-
-#
-# Dialog asking Directory manager credentials to shutdown server through
-# Protocol.
-#
-shutdown-directory-manager-dialog-title=Authentication Required
-shutdown-directory-manager-dialog-msg=<b>Directory Server is Running</b><br>\
-The server is currently running and must be stopped before uninstallation can \
-continue.  Provide the information below to allow the uninstaller to \
-shut it down. You can also click Cancel and then shut the server down yourself.
-shutdown-directory-manager-dn-label=Administrative User DN:
-shutdown-directory-manager-dn-tooltip=Enter the distinguished name (DN) of the \
-Administrative User account that will used to shutdown OpenDS
-shutdown-directory-manager-pwd-label=Password:
-shutdown-directory-manager-pwd-tooltip=Enter the password of the OpenDS \
-Administrative User account
-shutdown-directory-manager-cancel-button-tooltip=Close this window
-shutdown-directory-manager-shutdown-button-tooltip=Click here to shutdown the \
-server with the provided authentication
-
-#
-# Data validation errors
-#
-# Server Settings
-empty-server-location=Invalid Directory Selected You must provide a valid \
-  OpenDS root installation directory.
-parent-directory-could-not-be-found=Could not find a parent directory for {0}.
-parent-directory-does-not-exist-confirmation=The parent directory of {0} does \
-not exist.\nWould you like to create this directory?
-file-exists=The file {0} already exists.
-directory-exists-not-empty=The directory {0} is not empty.
-directory-not-writable=You do not have write access on the directory {0}. \
-You must have file right access on the Installation directory.
-not-enough-disk-space=There is not enough free disk space under {0}.\nAt \
-least {1} megabytes of free disk space are required to install OpenDS.
-invalid-char-in-path=The path contains the character "{0}" which is not \
-allowed to install OpenDS.
-empty-host-name=You must provide the name of the host.
-invalid-port-value-range=The LDAP Listener Port must be an integer between \
-{0} and {1}.
-invalid-secure-port-value-range=The LDAPS Listener Port must be an \
-integer between {0} and {1}.
-cannot-bind-priviledged-port=Cannot bind to privileged port {0}.\n\nThe port \
-could be already in use by another application or maybe you do not have the \
-rights to access it.
-cannot-bind-port=Cannot bind to port {0}.\n\nThe port could be already in use \
-by another application or maybe you do not have the rights to access it.
-equal-ports=You must specify different ports for LDAP and LDAPS communication.
-empty-directory-manager-dn=You must provide an Administrative User DN.
-not-a-directory-manager-dn=The provided Administrative User DN is not a valid \
-DN.
-directory-manager-dn-is-config-dn=The provided Administrative User DN is \
-used for the configuration of the Directory Server.
-not-equal-pwd=The passwords you have provided do not match.
-pwd-too-short=The minimum length required for the Administrative User \
-password is {0} characters.
-
-#
-# Data Replication Panel
-#
-invalid-replication-port-value-range=The Replication Port must be an integer \
-between {0} and {1}.
-invalid-remote-replication-port-value-range=The Replication Port on {0} must \
-be an integer between {1} and {2}.
-replication-port-already-chosen-for-other-protocol=You must specify a \
-different Replication port than those you chose for LDAP and LDAPS \
-communication.
-remote-replication-port-already-chosen-for-other-protocol=You must specify a \
-different Replication port for existing server {0}.  The specified port has \
-already been chosen to configure the new server.
-empty-remote-host=You must provide the fully qualified name of the host.
-invalid-remote-port=The provided port is not valid.
-empty-remote-dn=You must provide a value for the Administrative User.
-empty-remote-pwd=You must provide an Admin User password.
-not-global-administrator-provided=You must provide the Global Administrator ID \
-to be able to access the configuration of all the remote servers that have \
-been previously installed.
-server-error=Error on {0}:
-error-reading-server-configuration=Error reading configuration.  Details:\n{0}
-error-reading-registered-servers-confirm=The following errors where \
-encountered reading the configuration of the existing servers:\n{0}\n\nDo you \
-want to continue?
-certificate-exception=You must accept the certificate presented by {0}:{1}.
-cannot-connect-to-remote-authentication=The provided credentials are not valid.
-cannot-connect-to-remote-permissions=You do not have enough access rights \
-to read the configuration in {0}. \nProvide credentials with enough rights.
-cannot-connect-to-remote-generic=Could not connect to {0}. The error message \
-received is:\n{1}\nCheck that the server is running and that the provided \
-credentials are valid.
-error-configuring-remote-generic=An unexpected error occurred configuring \
-server {0}.\nThe error is: {1}
-remote-ads-exception=An unexpected error occurred managing the \
-registration information in {0}.\nThe error is: {1}
-ads-exception=An unexpected error occurred managing the registration \
-information.\nThe error is: {0}
-no-suffixes-chosen-to-replicate=You must select at least one base DN to \
-replicate contents with.
-# Create Global Administrator Panel
-empty-administrator-uid=You must provide a Global Administrative User ID.
-empty-administrator-pwd=You must provide a Global Administrative User \
-Password.
-# New Suffix Options Panel
-empty-base-dn=You must provide a Directory Base DN.
-not-a-base-dn=The provided Directory Base DN is not a valid DN.
-base-dn-is-configuration-dn=The provided Directory Base DN is used for \
-storing the server configuration data. You must specify a different DN.
-no-ldif-path=You must provide the path of the LDIF file to import.
-ldif-file-does-not-exist=The provided LDIF file does not exist.
-no-number-entries=You must provide the number of user entries to generate \
-automatically.
-invalid-number-entries-range=The number of user entries to generate \
-automatically must be an integer between {0} and {1}.
-# Directory Manager authentication to shutdown in Windows
-not-a-directory-manager-in-config=The provided DN is not one of the \
-Administrative User DN.
-empty-pwd=You must provide the password of the Administrative User.
-cannot-connect-to-shutdown-with-cause=Could not connect to the Directory \
-Server with the provided credentials.  The possible causes for this are:\n{0}
-cannot-connect-to-shutdown-without-cause=Could not connect to the Directory \
-Server with the provided credentials.\nCheck that the Administrative User DN \
-and password are valid.
-server-not-running-msg=The Directory Server is not running.  Click 'Yes' to \
-continue the uninstall.
-server-not-running-title=Directory Server not Running
-
-#
-# Steps labels (on the left side of the wizard)
-#
-welcome-step=Welcome
-server-settings-step=Server Settings
-data-replication-step=Topology Options
-create-global-administrator-step=Global Administrator
-suffixes-step=Data Replication
-remote-replication-ports-step=Replication Port
-data-options-step=Directory Data
-review-step=Review
-progress-step=Progress
-finished-step=Finished
-step-upgrade-choose-version=Choose Version
-
-#
-# Icon descriptions.  Used for accessibility.
-#
-current-step-icon-description=Current Step Indicator.
-splash-icon-description=OpenDS QuickSetup Launching.
-minimized-icon-description=OpenDS QuickSetup minimized.
-background-icon-description=OpenDS QuickSetup.
-warning-icon-description=Warning.
-error-icon-description=Error.
-information-icon-description=Information.
-opends-small-icon-description=OpenDS icon.
-subsection-left-icon-description=Decoration icon.
-subsection-right-icon-description=Decoration icon.
-help-small-icon-description=Help icon.
-help-wait-description=Busy, please wait.
-
-#
-# Icon tooltips.
-#
-current-step-icon-tooltip=Current Step Indicator
-splash-icon-tooltip=OpenDS QuickSetup Launching
-minimized-icon-tooltip=OpenDS QuickSetup
-background-icon-tooltip=OpenDS QuickSetup
-warning-icon-tooltip=Warning
-error-icon-tooltip=Error
-information-icon-tooltip=Information
-
-#
-# Icon paths.  This is done to be able  to provide localizable icons (for
-# instance for those icons containing a text).  If there is not a localized
-# version of the icon it should be left as it is.
-# The path specified here are the relative resource name to the images.
-#
-current-step-icon=images/currentstep.png
-minimized-icon=images/opendsminimized.gif
-minimized-mac-icon=images/opendsminimizedmac.png
-splash-icon=images/opendssplash.png
-background-icon=images/opendsbackground.png
-error-icon=images/error_small.gif
-error-large-icon=images/error_large.gif
-warning-icon=images/warning_small.gif
-warning-large-icon=images/warning_large.gif
-information-icon=images/info_small.gif
-information-large-icon=images/info_large.gif
-subsection-left-icon=images/divider-left.png
-subsection-right-icon=images/divider-right.png
-opends-small-icon=images/opends_logo_small.png
-help-small-icon=images/help_small.gif
-wait-tiny=images/wait_tiny.png
-wait=images/wait.gif
-
-#
-# Colors: the meaning of colors is not universal.  That is why they are included
-# here.
-# The colors are expressed in RGB decimal format, each value separated with
-# commas.
-#
-default-background-color=236,236,236
-current-step-panel-background-color=255,255,255
-default-label-color=000,000,000
-field-valid-color=000,000,000
-field-invalid-color=255,000,000
-checkbox-color=000,000,000
-read-only-color=000,000,000
-progress-color=000,000,000
-instructions-color=000,000,000
-textfield-color=000,000,000
-passwordfield-color=000,000,000
-panel-border-color=204,204,204
-text-area-border-color=000,000,000
-optionpane-background-color=255,255,255
-panel-background-color=255,255,255
-combobox-background-color=255,255,255
-
-#
-# Color representations to be used in HTML: the meaning of colors is not
-# universal.  That is why they are included here.
-# The colors are expressed in RGB HEXADECIMAL format.  No separation between
-# the different values.
-#
-div-open-error-background-1-color=000000
-div-open-error-background-2-color=FFFFCC
-div-open-error-background-3-color=E1E1A7
-div-open-successful-background-1-color=000000
-div-open-successful-background-2-color=FFFFCC
-div-open-successful-background-3-color=E1E1A7
-html-separator-color=666666
-
-#
-# Welcome Panel specific labels
-#
-welcome-panel-title=Welcome
-# The following line contains some HTML tags.  translators should respect them.
-# Concerning the URL, depending on how works the product page translators
-# have to modify it or not: if the server uses the locale of the browser to display
-# a language there is no translation to be done but if we have specific URL for
-# each language the URL must be localized.
-welcome-panel-offline-instructions=The OpenDS QuickSetup tool will ask you for \
-some basic server and data configuration settings and will get your server up \
-and running quickly.<br><br>Note that you can also install the latest weekly \
-build launching the setup via Java Web Start from the <a \
-href="https://opends.dev.java.net/public/downloads_index.html">OpenDS \
-Downloads Page</a>.  This instance of QuickSetup will use the following OpenDS \
-build: {0} (Build ID: {1}) <br><br> \
-OpenDS requires a Java SE 5.0 or higher runtime.<br><br> \
-Additional information on QuickSetup is available on the <a href="https://www.opends.org/wiki/page/OverviewOfTheQuickSetupTool"> \
-OpenDS documentation wiki</a>.
-welcome-panel-webstart-instructions=The OpenDS QuickSetup tool will ask you for some \
-basic server and data configuration settings and will get your server up \
-and running quickly.<br><br>QuickSetup will install and configure the latest \
-weekly build. You can also use QuickSetup to set up a weekly build you have \
-downloaded manually. To run QuickSetup in this case, use the {0} command at \
-the top level of the OpenDS directory.  This instance of QuickSetup will use \
-the following OpenDS build: {1} (Build ID: {2}) <br><br> \
-OpenDS requires a Java SE 5.0 or higher runtime.<br><br> \
-Additional information on QuickSetup is available on the <a href="https://www.opends.org/wiki/page/OverviewOfTheQuickSetupTool"> \
-OpenDS documentation wiki</a>.
-
-#
-# Server Settings Panel specific labels
-#
-server-settings-panel-title=Server Settings
-server-settings-panel-instructions-webstart=Choose a location for the server \
-files and enter a password for the OpenDS administrative user.
-server-settings-panel-instructions=Enter a port to listen for LDAP requests \
-and enter a password for the OpenDS administrative user.
-server-location-label=Installation Path:
-server-location-parent-tooltip=Enter the full path to the parent location \
-where the server files will be stored
-server-location-relative-tooltip=Enter the relative path to the location \
-where the server files will be stored
-host-name-label=Host Name:
-host-name-tooltip=Enter the name of the host.
-server-port-label=LDAP Listener Port:
-server-port-tooltip=Enter the port number that the server will use to listen \
-for LDAP requests
-server-security-label=LDAP Secure Access:
-server-security-tooltip=The LDAP Secure Access Configuration for the new \
-OpenDS server.
-cannot-update-security-warning=Disabled.  A valid keytool command could not be \
-found.
-server-security-button-label=Configure...
-server-security-button-tooltip=Click to configure the LDAP Secure Access.
-server-directory-manager-dn-label=Administrative User DN:
-server-directory-manager-dn-tooltip=Enter the distinguished name (DN) of the \
-Administrative User account that will used for managing OpenDS
-server-directory-manager-pwd-label=Password:
-server-directory-manager-pwd-tooltip=Enter a password for the OpenDS \
-Administrative User account
-server-directory-manager-pwd-confirm-label=Password (confirm):
-server-directory-manager-pwd-confirm-tooltip=Re-enter the password for the \
-OpenDS Administrative User account
-cannot-use-default-port=Could not use 389. Port in use or user not authorized.
-cannot-use-default-secure-port=Could not use 636. Port in use or user not \
-authorized.
-no-security=disabled
-enable-starttls=Enable StartTLS
-enable-ssl=Enable SSL on LDAP Port {0}
-self-signed-certificate=Create a new Self-Signed Certificate
-jks-certificate=Use existing Java Key Store File
-pkcs11-certificate=Use existing PKCS#11 Token
-pkcs12-certificate=Use existing PKCS#12 File
-
-#
-# Data Replication Panel specific labels
-#
-data-replication-options-panel-title=Topology Options
-data-replication-options-panel-instructions=Choose the Data \
-Replication Options.
-replication-port-label=Replication Port:
-replication-port-tooltip=The port that will be used to send and receive \
-replication updates between this server and the other servers.
-remote-server-dn-label=Admin User:
-remote-server-dn-tooltip=The DN or the UID of an administrator in the OpenDS \
-you want to replicate data with.
-remote-server-pwd-label=Admin Password:
-remote-server-pwd-tooltip=The password of an administrator in the OpenDS \
-you want to replicate data with.
-remote-server-host-label=Host Name:
-remote-server-host-tooltip=The fully qualified name of the host where the \
-OpenDS you want to replicate data with is located.
-remote-server-port-label=Port:
-remote-server-port-tooltip=The LDAP port of the OpenDS you want to \
-replicate data with.
-remote-server-port-is-secure-label=This is a Secure Port
-remote-server-port-is-secure-tooltip=Check this is the provided port is the \
-LDAPS port.
-standalone-server-label=This will be a standalone server
-standalone-server-tooltip=Check this if you do not want to replicate the \
-data on the server that you are creating with other servers.
-replicated-server-label=This server will be part of a replication \
-topology
-replicated-server-tooltip=Check this if you want to replicate the data on \
-the server that you are creating with other servers.
-topology-exists-label=There is already a server in the topology
-topology-exists-tooltip=Check this if you already created a server that you \
-want to replicate data with.
-contacting-server-label=Contacting server...
-
-#
-# The accept certificate dialog.
-#
-certificate-dialog-title=Certificate Not Trusted
-certificate-title=Certificate Not Trusted
-#
-# Double apostrophes required for this item.
-#
-certificate-not-trusted-text=The Certificate presented by the server {0}:{1} \
-could not be trusted.<br><br>Possible reasons for this error:\
-<br>&nbsp;&nbsp;&nbsp;&nbsp;-The Certificate Authority that issued the \
-certificate is not recognized (this is the case of the self-signed \
-certificates).<br>&nbsp;&nbsp;&nbsp;&nbsp;-The server''s \
-certificate is incomplete due to a misconfiguration.\
-<br>&nbsp;&nbsp;&nbsp;&nbsp;-The server''s certificate has expired.<br>Before \
-accepting this certificate, you should examine the server''s certificate \
-carefully.<br><br>Are you willing to accept this certificate for the purpose \
-of identifying the server {0}:{1}?
-#
-# Double apostrophes required for this item.
-#
-certificate-name-mismatch-text=The Certificate presented by the server {0}:{1} \
-could not be trusted.<br><br>There is a name mismatch between the name of the \
-server ({0}) and the subject DN of the certificate.  This could be caused \
-because you are connected to a server pretending to be {0}:{1}.<br><br>\
-Before accepting this certificate, you should examine the server''s \
-certificate carefully.<br><br>Are you willing to accept this certificate for \
-the purpose of identifying the server {0}:{1}?
-certificate-show-details-text=<br><br><a href="">Show Certificate Details</a>
-certificate-hide-details-text=<br><br><a href="">Hide Certificate Details</a>
-certificate-dialog-ok-button-tooltip=Close this dialog and accept the \
-certificate.
-certificate-dialog-cancel-button-tooltip=Close this dialog and do not accept \
-the certificate.
-certificate-chain-label=Certificate Chain:
-certificate-chain-combo-tooltip=To view the details of a given certificate \
-select it.
-certificate-not-valid-yet={0} - Not valid yet
-certificate-expired={0} - Expired
-certificate-subject-label=Subject:
-certificate-issued-by-label=Issued By:
-certificate-valid-from-label=Valid From:
-certificate-expires-on-label=Expires On:
-certificate-type-label=Type:
-certificate-serial-number-label=Serial Number:
-certificate-signature-label=Signature:
-certificate-signature-algorithm-label=Signature Algorithm:
-certificate-version-label=Version:
-certificate-public-key-label=Public Key:
-
-#
-# Global Administrator specific labels
-#
-global-administrator-panel-instructions=Provide the informaton to create a \
-Global Administrator that will able to manage your whole replication \
-topology.
-global-administrator-panel-title=Create Global Administrator
-global-administrator-uid-label=Global Administrator ID:
-global-administrator-uid-tooltip=The Global Administrator ID.
-global-administrator-pwd-label=Global Administrator Password:
-global-administrator-pwd-tooltip=The Global Administrator Password.
-global-administrator-pwd-confirm-label=Global Administrator Password \
-(confirm):
-global-administrator-pwd-confirm-tooltip=Confirm the password of the \
-Global Administrator.
-
-#
-# Remote Replication Ports panel
-#
-remote-replication-port-instructions=You must provide the ports that will be \
-used to replicate data for the remote servers specified below.<br>The \
-specified ports must be free on the remote hosts and the user that is being \
-used to run the Directory Servers must have access rights to them.
-remote-replication-port-title=Replication Port of Remote Servers
-
-#
-# Suffixes to Replicate Panel specific labels
-#
-suffixes-to-replicate-panel-instructions=Choose whether to create base DNs \
-as defined on remote servers or to create a new base DN.
-suffixes-to-replicate-panel-title=Data Replication
-create-new-suffix-label=Create first instance of base DN to be replicated
-create-new-suffix-tooltip=Check this to create a new base DN.
-replicate-with-suffixes-label=Create local instance of existing base DNs and \
-configure replication:
-replicate-with-suffixes-tooltip=Check this to Create Base DNs whose \
-Contents are replicated with Existing Base DNs.
-suffixes-to-replicate-dn-tooltip=The Distinguished Name (DN) of the base DN \
-to replicate.
-suffix-list-replica-display-entries={0}  ({1} entries)
-suffix-list-replica-display-no-entries={0}  (no entries)
-suffix-list-replica-display-entries-not-available={0} (number of entries not \
-available)
-suffix-list-unknown-label=<unknown>
-suffix-list-empty=-No Base DNs Found-
-
-#
-# Security Options dialog specific labels
-#
-security-options-dialog-title=OpenDS QuickSetup
-security-options-title=Configure Secure Access
-security-options-instructions=Specify the options for enabling secure access \
-to the server.
-security-options-ok-button-tooltip=Close this dialog and accept configuration.
-security-options-cancel-button-tooltip=Close this dialog and discard \
-configuration.
-enable-ssl-label=Enable SSL on Port:
-enable-ssl-tooltip=Enables SSL on the specified port.
-ssl-port-textfield-tooltip=The LDAPS port.
-enable-starttls-label=Enable StartTLS for LDAP
-enable-starttls-tooltip=Allows encrypted communication over the standard \
-LDAP port.
-use-self-signed-label=Generate Self-Signed Certificate (recommended for \
-testing only)
-use-self-signed-tooltip=Create a new Self-Signed Certificate to encrypt \
-communication.
-use-existing-certificate-label=Use an Existing Certificate:
-use-existing-certificate-tooltip=Select this if you have already a certificate \
-you want the new server to use.
-keystore-type-label=Key Store Type:
-jks-certificate-label=Java Key Store (JKS) File
-jks-certificate-tooltip=Select this option if you have a JKS certificate.
-pkcs11-certificate-label=PKCS#11 Token
-pkcs11-certificate-tooltip=Select this option if you have a PKCS#11 token.
-pkcs12-certificate-label=PKCS#12 File
-pkcs12-certificate-tooltip=Select this option if you have a PKCS#12 certificate.
-keystore-path-label=Key Store Path:
-keystore-path-tooltip=Absolute path to the keystore.
-keystore-pwd-label=Key Store Password:
-keystore-pwd-tooltip=Provide the password required to access the existing \
-key store.
-ssl-access-label=SSL Access:
-starttls-access-label=StartTLS Access:
-certificate-label=Certificate:
-keystore-path-not-provided=You must provide the path of the key store.
-keystore-path-does-not-exist=The provided key store path does not exist.
-keystore-path-not-a-file=The provided key store path is not a file.
-keystore-pwd-empty=You must provide the password of the key store.
-error-accessing-jks-keystore=Could not access the JKS key store.  Check that \
-the contents of the file correspond to a valid JKS key store, that you have \
-access rights to it and that the provided password is valid.
-error-accessing-pkcs11-keystore=Could not access the PKCS#11 key store.  Check \
-that is installed and that the provided password is valid.
-error-accessing-pkcs12-keystore=Could not access the PKCS#12 key store.  Check \
-that the contents of the file correspond to a valid PKCS#12 key store, that \
-you have access rights to it and that the provided password is valid.
-pkcs11-keystore-does-not-exist=No certificates for the PCKS#11 key store could \
-be found.  Check that is installed, that you have access rights to it and \
-that the key store contains certificates.
-pkcs12-keystore-does-not-exist=No certificates for the PCKS#12 key store could \
-be found.  Check that the provided path and password are valid and that the \
-key store contains certificates.
-jks-keystore-does-not-exist=No certificates for the Java Key Store could be \
-found.  Check that the provided path is valid.
-
-#
-# Select Alias dialog specific labels
-#
-select-alias-title=OpenDS QuickSetup
-select-alias-msg=The provided Key Store contains multiple certificates.<br>\
-Select the alias of the certificate that you want to be used as Server \
-Certificate:
-select-alias-ok-button-tooltip=Close this dialog and accept \
-selected alias.
-select-alias-cancel-button-tooltip=Close this dialog and discard \
-selected alias.
-
-#
-# Data Options Panel specific labels
-#
-data-options-panel-title=Directory Data
-data-options-panel-instructions=Choose options for the LDAP data to be hosted \
-by OpenDS.
-base-dn-label=Directory Base DN:
-base-dn-tooltip=Enter the DN of the top entry where your data will be stored
-directory-data-label=Directory Data:
-create-base-entry-label=Only Create Base Entry ({0})
-create-base-entry-tooltip=Only create the top entry for the Directory Base DN
-leave-database-empty-label=Leave Database Empty
-leave-database-empty-tooltip=Do not create any entry for the Directory Base DN
-import-data-from-ldif-label=Import Data from LDIF File
-import-data-from-ldif-tooltip=Use the contents of an LDIF file to populate the \
-base DN with data
-import-path-label=Path:
-import-path-tooltip=Enter the full path of the LDIF file containing the \
-data to be imported
-import-automatically-generated-label=Import Automatically-Generated Example \
-Data
-import-automatically-generated-tooltip=Populate the base DN with \
-automatically-generated LDAP data
-number-entries-label=Number of User Entries:
-number-entries-tooltip=Enter the number of user entries to be generated
-
-#
-# Review Panel specific labels
-#
-review-panel-title=Review
-review-panel-instructions=Review your settings and click Finish if they are \
-correct.
-review-create-base-entry-label=Only Create Base Entry ({0})
-review-leave-database-empty-label=Leave Database Empty
-review-import-ldif=Import Data from LDIF File ({0})
-review-import-automatically-generated=Import Automatically-Generated Data ({0} \
-Entries)
-review-create-suffix=Create New Base DN {0}.\Base DN Data: {1}
-review-replicate-suffix=Replicate contents with base DNs:\n{0}
-start-server-label=Start Server when Configuration has Completed
-start-server-tooltip=Check this check box if you want to start the server once \
-the installation and configuration has completed
-enable-windows-service-label=Run OpenDS as a Windows Service
-enable-windows-service-tooltip=Check this check box if you want OpenDS to run \
-as a Windows Service.
-remote-server-replication-port={0} - To be configured on remote server {1}
-install-server-must-be-temporarily-started=The Server will be temporarily \
-started.
-
-#
-# Progress Panel specific labels
-#
-progress-panel-title=Progress
-progress-details-label=Details:
-progressbar-initial-label=Starting...
-progressbar-tooltip=Progress Bar
-
-#
-# Finished Panel specific labels
-#
-finished-panel-title=Finished
-
-#
-# Miscellaneous labels
-#
-browse-button-label=Browse...
-browse-button-tooltip=Click to display a file system browser
-ldif-files-description=LDAP Data Interchange Format (*.ldif)
-zip-files-description=OpenDS Installation Package (.zip)
-open-server-location-dialog-title=Choose Installation Path
-open-ldif-file-dialog-title=Choose an LDIF File
-open-zip-file-dialog-title=Choose an OpenDS Installation Package (.zip)
-open-generic-file-dialog-title=Choose a File
-show-details-button-label=Show Details
-hide-details-button-label=Hide Details
-details-label=Details:
-
-#
-# Progress Summary Labels
-#
-summary-install-not-started=Starting QuickSetup...
-summary-downloading=Downloading Binary Files...
-summary-extracting=Extracting Binary Files...
-summary-configuring=Configuring Directory Server...
-summary-creating-base-entry=Creating Base Entry...
-summary-importing-ldif=Importing LDIF File...
-summary-importing-automatically-generated=Importing Automatically-Generated \
-Data...
-summary-configuring-replication=Configuring Replication...
-summary-starting=Starting Directory Server...
-summary-enabling-windows-service=Enabling Windows Service...
-summary-waiting-to-cancel=Waiting to Cancel...
-summary-canceling=Canceling...
-summary-configuring-ads=Creating Registration Configuration...
-summary-initialize-replicated-suffixes=Initializing Contents of Replicated \
-Base DNs...
-summary-install-finished-successfully=<b>OpenDS QuickSetup Completed \
-Successfully.</b><br>OpenDS is now installed in {0}.<br>The server is {1}.<br>\
-<br>Visit the <a href="https://www.opends.org/wiki/page/QuickReferenceGuide"> \
-OpenDS Quick Reference</a> page for an overview of server management and \
-configuration.<br>To see basic server configuration status and to start/stop \
-the server, click Launch Status Panel.  Note that you can launch this tool \
-later using {2}.<br><INPUT type="submit" value="Launch Status Panel"></INPUT>
-summary-install-finished-canceled=<b>OpenDS QuickSetup Canceled.</b> \
-  <br>The upgrade operation was canceled and any files installed to your system \
-  during this operation have been removed.
-summary-install-finished-with-error=An error occurred.  Check 'Details' text \
-area for more information.<br>The server is {1}.<br>To see basic server \
-configuration status, click \
-Launch Status Panel.  Note that you can launch this tool \
-later using {2}.<br><INPUT type="submit" value="Launch Status Panel"></INPUT>
-summary-stopping=Stopping Directory Server...
-summary-upgrade-not-started=Starting Upgrade...
-summary-upgrade-initializing=Initializing Upgrade...
-summary-upgrade-downloading=Downloading Build...
-summary-upgrade-extracting=Extracting Build...
-summary-upgrade-backing-up-db=Backing Up Data...
-summary-upgrade-backing-up-files=Backing Up Files...
-summary-upgrade-check-server-health=Checking Server Health...
-summary-upgrade-calculating-schema-customization=Calculating Schema \
-  Customizations...
-summary-upgrade-calculating-config-customization=Calculating Configuration \
-  Customizations...
-summary-upgrade-upgrading-components=Upgrading Components...
-summary-upgrade-preparing-customizations=Preparing Customizations...
-summary-upgrade-applying-schema-customization=Applying Schema \
-  Customizations...
-summary-upgrade-applying-config-customization=Applying Configuration \
-  Customizations...
-summary-upgrade-verifying=Verifying Upgrade...
-summary-upgrade-history=Recording Upgrade History...
-summary-upgrade-cleanup=Cleaning Up...
-summary-upgrade-abort=Canceling Upgrade...
-summary-upgrade-finished-successfully=<b>OpenDS QuickUpgrade Completed \
-  Successfully.</b><br>The OpenDS installation at {0} has now been upgraded \
-  to version {1}.<br><br><INPUT type="submit" value="Launch Status Panel"></INPUT>
-summary-upgrade-finished-successfully-cli=OpenDS QuickUpgrade Completed \
-  Successfully.  The OpenDS installation at {0} has now been upgraded \
-  to version {1}.
-summary-upgrade-finished-with-errors=<b>OpenDS QuickUpgrade Failed</b><br>\
-  The upgrade operation could not complete successfully due to errors and \
-  the installation has been restored to the state it was in before the upgrade \
-  operation.  See the 'Details' text for more information on why the upgrade \
-  operation failed.<br><br><INPUT type="submit" value="Launch Status Panel"></INPUT>
-summary-upgrade-finished-with-errors-cli=OpenDS QuickUpgrade Failed. \
-  The upgrade operation could not complete successfully due to errors and \
-  the installation has been restored to the state it was in before the upgrade \
-  operation.  See the logs for details on why the upgrade operation failed.
-summary-upgrade-finished-with-warnings=<b>OpenDS QuickUpgrade Succeeded With \
-  Warnings</b><br>The upgrade operation completed successfully but the upgrader \
-  had problems that require attention. See the 'Details' text for more \
-  information on the problems.<br><br><INPUT type="submit" value="Launch Status Panel"></INPUT>
-summary-upgrade-finished-with-warnings-cli=OpenDS QuickUpgrade Succeeded With \
-  Warnings. The upgrade operation completed successfully but the upgrader \
-  had problems that require attention. See the logs for details on the \
-  problems.
-summary-upgrade-finished-canceled=<b>OpenDS QuickUpgrade Canceled.</b> \
-  <br>The upgrade operation was canceled and the installation has been \
-  restored to the state it was in before the upgrade operation.\
-  <br><br><INPUT type="submit" value="Launch Status Panel"></INPUT>
-summary-upgrade-finished-canceled-cli=OpenDS QuickUpgrade Canceled. \
-  The upgrade operation was canceled and the installation has been \
-  restored to the state it was in before the upgrade operation.
-
-summary-revert-not-started=Starting Reversion...
-summary-revert-initializing=Initializing Reversion...
-summary-revert-reverting-components=Reverting Components...
-summary-revert-verifying=Verifying revert...
-summary-revert-history=Recording Reversion History...
-summary-revert-cleanup=Cleaning Up...
-summary-revert-abort=Canceling Reversion...
-summary-revert-finished-successfully-cli=OpenDS Reversion Completed \
-  Successfully.  The OpenDS installation at {0} has now been reverted \
-  to version {1}.
-summary-revert-finished-with-errors-cli=OpenDS Reversion Failed. \
-  The reversion operation could not complete successfully due to errors and \
-  the installation has been restored to the state it was in before the reversion \
-  operation.  See the logs for details on why the reversion operation failed.
-summary-revert-finished-with-warnings-cli=OpenDS Reversion Succeeded With \
-  Warnings. The reversion operation completed successfully but the reverter \
-  had problems that require attention. See the logs for details on the \
-  problems.
-summary-revert-finished-canceled-cli=OpenDS Reversion Canceled. \
-  The upgrade operation was canceled and the installation has been \
-  restored to the state it was in before the reversion operation.
-
-#
-#
-#
-#
-##
-# Progress messages
-#
-progress-title=Progress
-progress-downloading=Downloading
-progress-done=Done.
-progress-points=.....
-progress-error=Error.
-progress-extracting=Extracting {0}
-progress-configuring=Configuring Directory Server
-progress-updating-certificates=Configuring Certificates
-downloading=Downloading...
-downloading-ratio=Downloading: {0}% Completed.
-validating-ratio=Downloading: {0}% Completed - Validating file: {1} % Completed.
-upgrading-ratio=Downloading: {0}% Completed - Upgrading file: {1} % Completed.
-progress-creating-base-entry=Creating Base Entry {0}
-progress-importing-ldif=Importing LDIF file {0}:
-progress-configuring-replication=Configuring Replication
-progress-cancel=Waiting to cancel operation.
-
-progress-configuring-replication-remote=Configuring Replication on {0}
-progress-unconfiguring-replication-remote=Unconfiguring Replication on {0}
-progress-import-automatically-generated=Importing Automatically-Generated Data \
-({0} Entries):
-progress-starting=Starting Directory Server:
-progress-stopping=Stopping Directory Server:
-progress-enabling-windows-service=Enabling Windows Service...
-progress-disabling-windows-service=Disabling Windows Service...
-progress-deleting-external-db-files=Deleting Database Files outside the \
-Installation Path:
-progress-deleting-external-log-files=Deleting Log Files outside the \
-Installation Path:
-progress-deleting-installation-files=Deleting Files under the Installation Path:
-progress-deleting-file=Deleting file {0}
-progress-deleting-directory=Deleting directory {0}
-progress-deleting-file-does-not-exist=Ignoring file {0} since it does not exist.
-
-progress-copying-file=Copying file {0} to {1}
-progress-server-already-stopped=The Directory Server is already stopped.
-progress-server-waiting-to-stop=Waiting for Server to stop...
-progress-server-stopped=Server stopped.
-file-does-not-exist=Path {0} does not exist.
-progress-creating-administrator=Creating Global Administrator
-administrator-already-registered=Administrator already registered.
-progress-creating-ads=Creating Registration Configuration
-progress-creating-ads-on-remote=Creating Registration Configuration on {0}
-progress-unconfiguring-ads-on-remote=Reverting Registration Configuration on {0}
-progress-initializing-ads=Initializing Registration information
-progress-initializing-suffix=Initializing base DN {0} with the contents from \
-{1}:
-suffix-initialized-successfully=Base DN initialized successfully.
-global-administrator-description=The Administrator that can manage all the \
-OpenDS instances.
-
-#
-# Progress errors
-#
-error-copying=An unexpected error occurred extracting file {0}.
-error-zip-stream=An unexpected error occurred reading the zip file {0}.
-exception-details=Details: {0}
-exception-out-of-memory-details=Not enough memory to perform the operation.  \
-Details: {0}
-error-could-not-create-parent-dir=Could not create parent directory {0}.  \
-Check that you have file system access rights.  
-downloading-error=An error occurred downloading remote file(s) {0}.
-error-zipinputstreamnull=Could not retrieve zip file {0}.  The input stream \
-is null.
-bug-msg=An unexpected error occurred.
-error-reflection=An unexpected error occurred while loading classes.
-error-creating-temp-file=An error occurred creating the temporary file.
-error-writing-to-temp-file=An error occurred writing to temporary file {0}.
-error-configuring=Error Configuring Directory Server.
-error-configuring-certificate=Error Configuring Certificates.
-error-enabling-windows-service=Error Enabling Windows service.
-error-disabling-windows-service=Error Disabling Windows service.  Try to kill \
-the process opends_service.exe and the running the \
-{0}\\bat\\windows-service.bat -d command-line to disable the service manually. 
-error-creating-base-entry=Error Creating Base Entry.
-error-importing-ldif=Error Importing LDIF File.
-error-import-automatically-generated=Error Importing Automatically-Generated \
-Data when invoked with arguments {0}:  {1}.
-error-starting-server-with-no-connection-handlers=Error Starting Server with \
-no connection handlers: {0}.
-error-starting-server=Error Starting Directory Server.
-error-starting-server-in-windows=Could not connect to the server after requesting start.  \
-If you have a firewall configured check that it allows connections to port {0}.
-error-starting-server-in-unix=Could not connect to the server after after requesting start.  \
-Verify that the server has access rights to port {0}.
-error-stopping-server=Error Stopping Directory Server.
-error-stopping-server-code=Error Stopping Directory Server.  Error code: {0}.
-error-reading-erroroutput=Error Reading error output.
-error-reading-output=Error Reading output.
-hide-exception-details=Hide Details
-show-exception-details=Show Details
-exception-root-cause=Root Cause:
-error-deleting-file=Error deleting file {0}.  Check that you have the rights \
-to delete this file and that there is no other application using it.
-error-renaming-file=Error renaming file {0} to {1}.
-error-deleting-directory=Error deleting directory {0}.  Check that you have \
-the rights to delete this directory and that there is no other application \
-using it.
-error-copying-file=Error copying file {0} to {1}.
-info-ignoring-file=Ignoring {0} since {1} exists.
-error-connecting-to-local=An unexpected error occurred connecting to the server.
-error-launching-initialization=Error launching initialization with contents \
-from server {0}.
-initialize-progress-with-percentage={0} entries processed ({1} % complete).
-no-entries-to-initialize=No entries found to initialize.
-initialize-progress-with-processed= {0} entries processed.
-initialize-progress-with-unprocessed={0} remaining to be processed.
-error-during-initialization-no-log=Error during the initialization with \
-contents from server {0}.  Task state: {1}.  Check the error logs of {0} for \
-more information.
-error-during-initialization-log=Error during the initialization with \
-contents from server {0}.  Last log details: {1}.  Task state: {2}.  Check the \
-error logs of the server for more information.
-error-pooling-initialization=Error reading the progress of the initialization \
-with contents from server {0}.
-
-
-# Upgrade errors
-error-failed-to-create-stage-directory=Failed to create staging directory {0}.
-error-determining-custom-config=Error determining configuration customizations.
-error-determining-custom-schema=Error determining schema customizations.
-error-deleting-stage-directory=Error deleting stage directory {0}. 
-error-bad-stage-directory=Directory {0} does not contain a staged installation \
-  of OpenDS as was expected.  Verify that the new installation package (.zip) \
-  is an OpenDS installation file and that you have write access permission for \
-  this directory.
-error-determining-current-build=Error determining current build information.
-error-determining-upgrade-build=Error determining upgrade build information.
-error-upgrading-components=Error upgrading components.
-error-logging-operation=Error writting operation details to log.
-error-applying-custom-config=Error applying configuration customizations to server.
-error-applying-custom-schema=Error applying schema customizations to server.
-error-backup-db=Error backing up databases.
-error-backup-filesystem=Error backing up files.
-error-initializing-upgrade=Error initializing upgrade.
-error-artificial=Artificial error.
-error-port-in-use=The server can not be started as another application is using \
-  port {0}.  Check that you have access to this port before restarting the server.
-error-server-status=Error determining the server's status.
-error-server-health-check-failure=Server health check failed.
-error-upgraded-server-starts-with-errors=The upgraded server starts with errors: {0}
-error-restoring-file=The following could not be restored after the failed \
-  upgrade attempt.  You should restore this file/directory manually: {0} to {1}
-
-# General errors
-error-failed-moving-file=Failed to move file {0} to {1}.  Make sure this file is \
-  not currently locked by another application.
-error-prop-value=The value of property {0} could not be determined.
-error-creating-build-info=Error determining OpenDS build information.
-error-determining-svn-rev=Error determining installation's Subversion revision number.
-error-determining-server-state=Failed to determine the server's state.
-error-backup-db-tool-return-code=The backup tool returned error code {0}.
-error-ldif-diff-tool-return-code=The LDIF diff tool returned error code {0}.
-error-import-ldif-tool-return-code=The import LDIF tool returned error code {0}.
-error-apply-ldif-modify=Error processing modification operation of {0}: {1}
-error-apply-ldif-add=Error processing add operation of {0}: {1}
-error-apply-ldif-delete=Error processing delete operation of {0}: {1}
-error-invalid-port-value=Invalid port value {0}.  A port number must be an integer \
-  between 1 and 65535.
-error-initializing-log=Error initializing log.
-error-invalid-server-location=Invalid Directory Selected: {0}\n\
-  Either the selected directory is not a valid OpenDS root installation\n\
-  directory or you do not have access permissions for this directory.
-error-option-required=Option {0} is required.
-error-option-required-or-interactive=Option {0} is required when not invoking \
-  this command in interactive mode.  See the usage statement.
-
-error-parsing-options=Error parsing options.
-error-install-root-dir-null=The root directory is null.
-error-install-root-dir-not-dir=File {0} is not an OpenDS installation root.
-error-install-root-dir-no-exist=Directory {0} does not exist.
-error-install-root-dir-no-dir=Directory {0} does not contain directory {1}.
-error-install-root-dir-empty=Directory {0} is either empty or you lack permissions\
-  to access its contents.
-error-empty-response=ERROR:  The response value may not be an empty string
-
-error-upgrade-migration=Migration Error
-error-upgrade-migration-schema=Schema Migration Error
-error-upgrade-migration-config=Configuration Migration Error
-error-upgrade-migration-add=An attempt to add entry <b>{0}</b> to the newly upgraded \
-  server was unsuccessful.
-error-upgrade-migration-delete=An attempt to delete entry <b>{0}</b> to the newly upgraded \
-  server was unsuccessful.
-error-upgrade-migration-modify=An attempt to modify entry <b>{0}</b> to the newly upgraded \
-  server was unsuccessful.
-error-upgrade-migration-unexpected=An unexpected error occured while processing entry \
-  <b>{0}</b>.
-error-upgrade-migration-note=You can cancel this upgrade altogether, continue anyway or retry this operation.  If you cancel the server will be restored to the state it was in before the upgrade was attempted.  If you continue you should be aware that the server may not configured as it was before this upgrade.  A copy of the original installation files will be kept in <i>{0}</i>.
-
-#
-# Install Status: messages displayed in the offline quick setup
-# if server is already installed.
-#
-installstatus-serverrunning=Is currently running on port {0}
-installstatus-dbfileexist=Contains data
-installstatus-configfilemodified=Has already been configured
-installstatus-installed=OpenDS Server Already Configured<br> \
-QuickSetup can only be used with OpenDS Servers that have not yet been \
-configured.  The current server:{0}
-installstatus-not-installed=The Directory Server is not installed.
-installstatus-canoverwritecurrentinstall-msg=The Directory Server contains \
-some database files.<br>If you continue with the setup the contents of these \
-database files will be deleted.
-
-upgrade-oracle-success=Upgrade from version {0} to version {1} \
-  is supported.
-upgrade-oracle-action=Upgrade requires manual action
-upgrade-oracle-warning=Upgrade warning
-upgrade-oracle-info=Upgrade information
-upgrade-oracle-unsupported=Upgrade not supported\
-  from version {0} to version {1} \
-  is not supported.  To upgrade You must uninstall the current server, install \
-  the new server, and manually migrate your data.
-reversion-oracle-success=Reversion from version {0} to version \
-  {1} is supported.
-reversion-oracle-ei-action=Reversion from version {0} to version {1} \
-  requires further action.
-reversion-oracle-failure=reversion from version {0} to version {1} \
-  is not supported.  To reversion You must uninstall the current server, install \
-  the new server, and manually migrate your data.
-oracle-desc-action=This operation requires that you perform specific tasks described \
-  in the details section before continuing.
-oracle-ei-action-step1=Before starting the operation you should export the entire \
-  data set for this server to LDIF format.  <b>If you have not completed this \
-  step you should cancel this operation now</b>.
-oracle-ei-action-step2=Continue with this operation until this tool has finished.
-oracle-ei-action-step3=When this operation is complete, manually delete the files in the 'db' \
-  directory.
-oracle-ei-action-step4=Reimport that data from the LDIF file that you had created in the first step.
-oracle-action-prompt=Have you performed the tasks described?
-oracle-info-prompt=Would you like to continue with this operation?
-oracle-action-prompt-continue=Yes, Continue
-oracle-action-prompt-cancel=No, Cancel
-oracle-no-silent=This operation includes specific instructions and/or questions \
-  that you must follow.  Silent mode is not supported for this version.
-
-
-upgrade-mod-no-schema=Processed server modifications \
-  (schema checking disabled): {0}
-upgrade-mod=Processed server modifications: {0}
-upgrade-mod-ignore=Attribute or value already exists: {0}
-upgrade-canceled=Upgrade canceled.
-upgrade-verification-failure-title=Upgrade Verification Failed
-upgrade-verification-failure-prompt=The upgraded server returned errors on \
-  startup.  Would you like to cancel the upgrade?  If you cancel, any changes \
-  made to the server by this upgrade will be backed out.
-upgrade-verification-failure-cancel=Cancel Upgrade
-upgrade-verification-failure-view-details=View Error Details
-upgrade-file-prompt=Enter the name and path of the OpenDS install file (.zip):
-
-reversion-canceled=Reversion canceled.
-
-#
-# Upgrader Panels
-#
-#
-# Welcome Panel specific labels
-#
-upgrade-welcome-panel-title=Welcome
-# The following line contains some HTML tags.  translators should respect them.
-# Concerning the URL, depending on how works the product page translators
-# have to modify it or not: if the server uses the locale of the browser to display
-# a language there is no translation to be done but if we have specific URL for
-# each language the URL must be localized.
-upgrade-welcome-panel-webstart-instructions=The OpenDS QuickUpgrade tool will upgrade \
-  an existing build in place.<br><br>This instance of QuickUpgrade will upgrade the \
-  server you specify below to the following OpenDS build: {0} (Build ID: {1}) .<br><br> \
-  Additional information on this tool is available on the <a href="https://www.opends.org/wiki/"> \
-  OpenDS documentation wiki</a>.<br><br>\
-  <b>Note:</b> The upgrade tool will need to stop and start the OpenDS server
-upgrade-location-label=Server to Upgrade:
-upgrade-location-tooltip=File system location of the build that will be upgraded
-upgrade-build-id-label=Build Version:
-upgrade-build-id-tooltip=The ID of the build version installed in the above location
-upgrade-build-id-unknown=Unknown
-
-#
-# Upgrader Choose Version Panel
-#
-upgrade-choose-version-panel-title=Choose New Version
-upgrade-choose-version-panel-instructions=Choose a new version or reference \
-  build to use for the upgrading.
-upgrade-choose-version-remote-label=Choose New Version from opends.dev.java.net
-upgrade-choose-version-remote-tooltip=Download and upgrade to a build publicly \
-  available on the OpenDS website.
-upgrade-choose-version-remote-weekly=Weekly Builds
-upgrade-choose-version-remote-nightly=Nightly Builds
-upgrade-choose-version-local-label=Upgrade Based on Downloaded Weekly Build (.zip)
-upgrade-choose-version-local-tooltip=Upgrade to a build whose .zip file you have \
-  already downloaded.
-upgrade-choose-version-local-path=Path:
-upgrade-choose-version-build-list-error=<b>Error Accessing Build Information.</b>\
-  <br>Unable to retrieve the list of builds from {0} due to: {1}.<br>\
-  Possible Causes:<br>\
-  <ul><li>Need to specify a proxy.<br><table><tr><td>\
-  <input value="Specify Proxy" type="submit"></input></td><td>Current Proxy: {2}<td>\
-  </tr></table><br></li><li>{0} \
-  is down or experiencing difficulty.</li></ul><br>You can still continue with \
-  upgrade but will need to download a build separately and then point to it in \
-  the wizard.
-upgrade-choose-version-unable-to-access-build-info=Unable to access remote build information.
-upgrade-choose-version-loading-build-info=Loading remote build information...
-upgrade-choose-version-reading-build-info=Reading remote build information...
-
-upgrade-review-panel-title=Review
-upgrade-review-panel-instructions=Review your settings and click Finish if they \
-are correct.
-upgrade-review-panel-server-label=Server to Upgrade:
-upgrade-review-panel-server-tooltip=File system location of the build that will be upgraded
-upgrade-review-panel-old-version-label=Current Version:
-upgrade-review-panel-old-version-tooltip=The current version of the server
-upgrade-review-panel-new-version-label=New Version:
-upgrade-review-panel-new-version-tooltip=The target version of the server
-upgrade-review-panel-start-server=Start Server when the Upgrade has Completed
-upgrade-review-panel-start-server-tooltip=Check this check box if you want to \
-  start the server once the upgrade has completed
-
-build-manager-downloading-build-progress=Downloading Build: {0}% Completed
-build-manager-downloading-build=Downloading Build...
-build-manager-downloading-build-done=Finished Downloading Build
-
-# Build extractor
-build-extractor-error=Failed to extract build: {0}
-build-extractor-error-file-no-exist=File {0} does not exist.
-build-extractor-error-file-not-zip=File {0} is not a .zip file.
-build-extractor-file-invalid=Could not extract a valid OpenDS installation from \
-  {0} because: {1}
-
-# Web Proxy dialog strings
-web-proxy-dlg-title=Web Proxy Configuration
-web-proxy-dlg-user-label=User:
-web-proxy-dlg-password-label=Password:
-web-proxy-dlg-host-label=Host:
-web-proxy-dlg-port-label=Port:
-web-proxy-dlg-auth-label=Authentication:
-web-proxy-dlg-auth-req-label=Required by proxy
-
-# Upgrade log
-upgrade-log-field-op=Operation:
-upgrade-log-field-time=Time:
-upgrade-log-field-from=From:
-upgrade-log-field-to=To:
-upgrade-log-field-status=Status:
-upgrade-log-field-note=Note:
-upgrade-log-status-started=Started
-upgrade-log-status-success=Success
-upgrade-log-status-failure=Failure
-upgrade-log-status-cancel=Canceled
-
-#
-# Install and Upgrade merged welcome panel.
-#
-installandupgrade-welcome-panel-title=Welcome
-installandupgrade-welcome-panel-instructions=The OpenDS QuickSetup tool can \
-either install and configure a new server instance or upgrade an existing \
-server instance. In either case, QuickSetup will use the latest weekly build, \
-which in this case is: {0} (Build ID: {1}) <br><br> \
-You can also use QuickSetup to set up a weekly build you have downloaded \
-manually. To run QuickSetup in this case, use the setup command at the top \
-level of the OpenDS directory.<br><br> \
-OpenDS requires a Java SE 5.0 or higher runtime.<br><br> \
-Additional information on QuickSetup is available on the <a \
-href="https://www.opends.org/wiki/page/OverviewOfTheQuickSetupTool"> \
-OpenDS documentation wiki</a>.
-installandupgrader-rbinstall-label=Install New Server Instance
-installandupgrader-rbinstall-tooltip=Select to install a new server instance.
-installandupgrader-rbupgrade-label=Upgrade Existing Server Instance
-installandupgrader-rbupgrade-tooltip=Select to upgrade an existing server \
-instance.
-
-
-#
-# Progress Dialog
-#
-progress-dialog-title=Progress
-summary-starting=Starting Server...
-summary-stopping=Stopping Server...
-summary-start-error=An error occurred Starting Server.  Check 'Details' text \
-area for more information.
-summary-stop-error=An error occurred Stopping Server.  Check 'Details' text \
-area for more information.
-error-starting-server-code=Error Starting Directory Server.  Error code: {0}.
-summary-start-success=OpenDS Started Successfully.
-summary-stop-success=OpenDS Stopped Successfully.
-
-
-general-action-required=Action Required
-general-warning=Warning
-general-info=Information
-general-unsupported=Unsupported
-general-checking-data=Checking Data...
-general-loading=Loading...
-general-see-for-details=See {0} for a detailed log of this operation.
-general-see-for-history=See {0} for a history installation history.
-not-available-label=<not available>
-general-build-id=Build ID
-general-unset=Unset
-general-none=None
-general-unspecified=Unspecified
-general-server-started=started
-general-server-stopped=stopped
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java
index f8d117c..0a31493 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.ButtonName;
 import org.opends.quicksetup.WizardStep;
 import org.opends.quicksetup.event.ButtonActionListener;
@@ -164,35 +167,31 @@
    */
   private void createButtons()
   {
-    nextButton =
-        createButton(getMsg("next-button-label"), getMsg("next-button-tooltip"),
+    GuiApplication application = getApplication();
+    nextButton = createButton(
+            INFO_NEXT_BUTTON_LABEL.get(),
+            INFO_NEXT_BUTTON_TOOLTIP.get(),
             ButtonName.NEXT);
 
-    previousButton =
-        createButton(getMsg("previous-button-label"),
-            getMsg("previous-button-tooltip"),
+    previousButton = createButton(
+            INFO_PREVIOUS_BUTTON_LABEL.get(),
+            INFO_PREVIOUS_BUTTON_TOOLTIP.get(),
             ButtonName.PREVIOUS);
 
-    String tooltip;
+    quitButton = createButton(
+            INFO_QUIT_BUTTON_LABEL.get(),
+            application.getQuitButtonToolTip(),
+            ButtonName.QUIT);
 
-    GuiApplication application = getApplication();
-    tooltip =
-      application.getI18n().getMsg(application.getQuitButtonToolTipKey());
-    quitButton =
-        createButton(getMsg("quit-button-label"), tooltip, ButtonName.QUIT);
+    closeButton = createButton(
+            INFO_CLOSE_BUTTON_LABEL.get(),
+            application.getCloseButtonToolTip(),
+            ButtonName.CLOSE);
 
-
-
-    tooltip =
-      application.getI18n().getMsg(application.getCloseButtonToolTipKey());
-    closeButton = createButton(getMsg("close-button-label"),
-        tooltip, ButtonName.CLOSE);
-
-    String label =
-      application.getI18n().getMsg(application.getFinishButtonLabelKey());
-    tooltip =
-      application.getI18n().getMsg(application.getFinishButtonToolTipKey());
-    finishButton = createButton(label, tooltip, ButtonName.FINISH);
+    finishButton = createButton(
+            application.getFinishButtonLabel(),
+            application.getFinishButtonToolTip(),
+            ButtonName.FINISH);
 
   }
 
@@ -282,7 +281,7 @@
    * @param buttonName the ButtonName.
    * @return a new button with the specified parameters.
    */
-  private JButton createButton(String label, String tooltip,
+  private JButton createButton(Message label, Message tooltip,
       ButtonName buttonName)
   {
     JButton b = UIFactory.makeJButton(label, tooltip);
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CertificateDialog.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CertificateDialog.java
index ec4ba16..c047b01 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CertificateDialog.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CertificateDialog.java
@@ -62,7 +62,10 @@
 
 import org.opends.quicksetup.UserDataCertificateException;
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This class is used to present the user a certificate to the user in order
@@ -95,7 +98,7 @@
   {
     super(parent);
     this.ce = ce;
-    setTitle(getMsg("certificate-dialog-title"));
+    setTitle(INFO_CERTIFICATE_DIALOG_TITLE.get().toString());
     getContentPane().add(createPanel());
     setModal(true);
     pack();
@@ -156,23 +159,6 @@
     }
   }
 
-  /* The following three methods are just commodity methods to retrieve
-   * localized messages */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private String getMsg(String key, String... args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
   /**
    * Creates and returns the panel of the dialog.
    * @return the panel of the dialog.
@@ -244,7 +230,7 @@
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.RELATIVE;
 
-    String title = getMsg("certificate-title");
+    Message title = INFO_CERTIFICATE_TITLE.get();
     JLabel l =
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, title,
             UIFactory.TextStyle.TITLE);
@@ -269,16 +255,16 @@
    */
   private Component createTextPane()
   {
-    String text;
+    Message text;
     if (ce.getType() == UserDataCertificateException.Type.NOT_TRUSTED)
     {
-      text = getMsg("certificate-not-trusted-text", ce.getHost(),
+      text = INFO_CERTIFICATE_NOT_TRUSTED_TEXT.get(ce.getHost(),
           String.valueOf(ce.getPort()));
     }
     else
     {
-      text = getMsg("certificate-name-mismatch-text",
-          ce.getHost(), String.valueOf(ce.getPort()));
+      text = INFO_CERTIFICATE_NAME_MISMATCH_TEXT.get(
+              ce.getHost(), String.valueOf(ce.getPort()));
     }
     JPanel p = UIFactory.makeJPanel();
     p.setLayout(new GridBagLayout());
@@ -299,16 +285,22 @@
     p.add(explanationPane, gbc);
     if ((ce.getChain() != null) && (ce.getChain().length > 0))
     {
-      explanationWithShowDetails = UIFactory.applyFontToHtml(text +
-          getMsg("certificate-show-details-text"), UIFactory.INSTRUCTIONS_FONT);
-      explanationWithHideDetails = UIFactory.applyFontToHtml(text +
-          getMsg("certificate-hide-details-text"), UIFactory.INSTRUCTIONS_FONT);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(text);
+      mb.append(INFO_CERTIFICATE_SHOW_DETAILS_TEXT.get());
+      explanationWithShowDetails = UIFactory.applyFontToHtml(
+              mb.toString(), UIFactory.INSTRUCTIONS_FONT);
+      MessageBuilder mb2 = new MessageBuilder();
+      mb2.append(text);
+      mb2.append(INFO_CERTIFICATE_SHOW_DETAILS_TEXT.get());
+      explanationWithHideDetails = UIFactory.applyFontToHtml(
+              mb2.toString(), UIFactory.INSTRUCTIONS_FONT);
 
       explanationPane.setText(explanationWithShowDetails);
     }
     else
     {
-      explanationPane.setText(text);
+      explanationPane.setText(text.toString());
     }
     return p;
   }
@@ -336,8 +328,8 @@
     gbc.fill = GridBagConstraints.NONE;
     gbc.weightx = 0.0;
     okButton =
-      UIFactory.makeJButton(getMsg("ok-button-label"),
-          getMsg("certificate-dialog-ok-button-tooltip"));
+      UIFactory.makeJButton(INFO_OK_BUTTON_LABEL.get(),
+          INFO_CERTIFICATE_DIALOG_OK_BUTTON_TOOLTIP.get());
     buttonsPanel.add(okButton, gbc);
     okButton.addActionListener(new ActionListener()
     {
@@ -350,8 +342,8 @@
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = UIFactory.HORIZONTAL_INSET_BETWEEN_BUTTONS;
     cancelButton =
-      UIFactory.makeJButton(getMsg("cancel-button-label"),
-          getMsg("certificate-dialog-cancel-button-tooltip"));
+      UIFactory.makeJButton(INFO_CANCEL_BUTTON_LABEL.get(),
+          INFO_CERTIFICATE_DIALOG_CANCEL_BUTTON_TOOLTIP.get());
     buttonsPanel.add(cancelButton, gbc);
     cancelButton.addActionListener(new ActionListener()
     {
@@ -375,23 +367,24 @@
     if ((ce.getChain() != null) && (ce.getChain().length > 0))
     {
       final JComboBox combo = new JComboBox();
-      combo.setToolTipText(getMsg("certificate-chain-combo-tooltip"));
+      combo.setToolTipText(
+              INFO_CERTIFICATE_CHAIN_COMBO_TOOLTIP.get().toString());
       final CardLayout cl = new CardLayout();
       final JPanel cardPanel = new JPanel(cl);
       final Map<String, JPanel> hmPanels = new HashMap<String, JPanel>();
 
-      String[] labels =
+      Message[] labels =
       {
-          getMsg("certificate-subject-label"),
-          getMsg("certificate-issued-by-label"),
-          getMsg("certificate-valid-from-label"),
-          getMsg("certificate-expires-on-label"),
-          getMsg("certificate-type-label"),
-          getMsg("certificate-serial-number-label"),
-          getMsg("certificate-signature-label"),
-          getMsg("certificate-signature-algorithm-label"),
-          getMsg("certificate-version-label"),
-          getMsg("certificate-public-key-label")
+          INFO_CERTIFICATE_SUBJECT_LABEL.get(),
+          INFO_CERTIFICATE_ISSUED_BY_LABEL.get(),
+          INFO_CERTIFICATE_VALID_FROM_LABEL.get(),
+          INFO_CERTIFICATE_EXPIRES_ON_LABEL.get(),
+          INFO_CERTIFICATE_TYPE_LABEL.get(),
+          INFO_CERTIFICATE_SERIAL_NUMBER_LABEL.get(),
+          INFO_CERTIFICATE_SIGNATURE_LABEL.get(),
+          INFO_CERTIFICATE_SIGNATURE_ALGORITHM_LABEL.get(),
+          INFO_CERTIFICATE_VERSION_LABEL.get(),
+          INFO_CERTIFICATE_PUBLIC_KEY_LABEL.get()
       };
 
       for (int i=0; i<ce.getChain().length; i++)
@@ -459,7 +452,7 @@
         JPanel auxPanel = UIFactory.makeJPanel();
         auxPanel.setLayout(new GridBagLayout());
         JLabel l = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-            getMsg("certificate-chain-label"),
+            INFO_CERTIFICATE_CHAIN_LABEL.get(),
             UIFactory.TextStyle.PRIMARY_FIELD_VALID);
         auxPanel.add(l, gbc);
         gbc.gridwidth = GridBagConstraints.RELATIVE;
@@ -501,13 +494,13 @@
 
   private JComponent createSubjectComponent(X509Certificate cert)
   {
-    String dn = cert.getSubjectX500Principal().getName();
+    Message dn = Message.raw(cert.getSubjectX500Principal().getName());
     return makeValueLabel(dn);
   }
 
   private JComponent createIssuedByComponent(X509Certificate cert)
   {
-    String dn = cert.getIssuerX500Principal().getName();
+    Message dn = Message.raw(cert.getIssuerX500Principal().getName());
     return makeValueLabel(dn);
   }
 
@@ -518,7 +511,7 @@
     Date date = cert.getNotBefore();
     DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT,
     DateFormat.SHORT);
-    String value = df.format(date);
+    Message value = Message.raw(df.format(date));
     boolean isNotValidYet = false;
     long t1 = System.currentTimeMillis();
     long t2 = date.getTime();
@@ -527,7 +520,7 @@
     if (isNotValidYet)
     {
       c = UIFactory.makeJLabel(UIFactory.IconType.ERROR,
-          getMsg("certificate-not-valid-yet", value),
+          INFO_CERTIFICATE_NOT_VALID_YET.get(value),
           UIFactory.TextStyle.SECONDARY_FIELD_INVALID);
     }
     else
@@ -544,7 +537,7 @@
     Date date = cert.getNotAfter();
     DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT,
     DateFormat.SHORT);
-    String value = df.format(date);
+    Message value = Message.raw(df.format(date));
     boolean isExpired = false;
     long t1 = System.currentTimeMillis();
     long t2 = date.getTime();
@@ -553,7 +546,7 @@
     if (isExpired)
     {
       c = UIFactory.makeJLabel(UIFactory.IconType.ERROR,
-          getMsg("certificate-expired", value),
+          INFO_CERTIFICATE_EXPIRED.get(value),
           UIFactory.TextStyle.SECONDARY_FIELD_INVALID);
     }
     else
@@ -565,20 +558,20 @@
 
   private JComponent createTypeComponent(X509Certificate cert)
   {
-    String type = cert.getType();
+    Message type = Message.raw(cert.getType());
     return makeValueLabel(type);
   }
 
   private JComponent createSerialNumberComponent(X509Certificate cert)
   {
-    String serialNumber = String.valueOf(cert.getSerialNumber());
+    Message serialNumber = Message.raw(String.valueOf(cert.getSerialNumber()));
     return makeValueLabel(serialNumber);
   }
 
   private JComponent createSignatureComponent(X509Certificate cert)
   {
     byte[] sig = cert.getSignature();
-    StringBuffer sb = new StringBuffer();
+    MessageBuilder sb = new MessageBuilder();
     for (int i = 0; i < sig.length; i++)
     {
       if (i > 0)
@@ -587,33 +580,33 @@
       }
       sb.append(Integer.toHexString(((int) sig[i]) & 0xFF));
     }
-    return UIFactory.makeTextPane(sb.toString(),
+    return UIFactory.makeTextPane(sb.toMessage(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
   }
 
   private JComponent createSignatureAlgorithmComponent(X509Certificate cert)
   {
-    String signature = String.valueOf(cert.getSigAlgName());
+    Message signature = Message.raw(String.valueOf(cert.getSigAlgName()));
     return makeValueLabel(signature);
   }
 
   private JComponent createVersionComponent(X509Certificate cert)
   {
-    String version = String.valueOf(cert.getVersion());
+    Message version = Message.raw(String.valueOf(cert.getVersion()));
     return makeValueLabel(version);
   }
 
   private JComponent createPublicKeyComponent(X509Certificate cert)
   {
-    return UIFactory.makeTextPane(cert.getPublicKey().toString(),
+    return UIFactory.makeTextPane(Message.raw(cert.getPublicKey().toString()),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
   }
 
-  private JLabel makeValueLabel(String value)
+  private JLabel makeValueLabel(Message value)
   {
     if (value == null)
     {
-      value = getMsg("not-available-label");
+      value = INFO_NOT_AVAILABLE_LABEL.get();
     }
     return UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, value,
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java
index cc01adb..a5da789 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/CurrentStepPanel.java
@@ -27,6 +27,8 @@
 
 package org.opends.quicksetup.ui;
 
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.awt.*;
 
 import java.util.HashMap;
@@ -149,7 +151,8 @@
     JPanel loadingPanel = UIFactory.makeJPanel();
     loadingPanel.setLayout(new GridBagLayout());
     loadingPanel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-            getMsg("general-loading"), UIFactory.TextStyle.PRIMARY_FIELD_VALID),
+            INFO_GENERAL_LOADING.get(),
+            UIFactory.TextStyle.PRIMARY_FIELD_VALID),
             new GridBagConstraints());
     add(loadingPanel, LOADING_PANEL);
 
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/DirectoryManagerAuthenticationDialog.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/DirectoryManagerAuthenticationDialog.java
index 7028453..fcd3306 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/DirectoryManagerAuthenticationDialog.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/DirectoryManagerAuthenticationDialog.java
@@ -53,9 +53,13 @@
 
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.quicksetup.util.BackgroundTask;
-import org.opends.quicksetup.util.Utils;
+import static org.opends.quicksetup.util.Utils.*;
+import static org.opends.quicksetup.ui.Utilities.*;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 
 /**
  * This class is a dialog that appears when the user must provide authentication
@@ -93,7 +97,7 @@
   public DirectoryManagerAuthenticationDialog(JFrame parent)
   {
     super(parent);
-    setTitle(getMsg("shutdown-directory-manager-dialog-title"));
+    setTitle(INFO_SHUTDOWN_DIRECTORY_MANAGER_DIALOG_TITLE.get().toString());
     this.parent = parent;
     getContentPane().add(createPanel());
   }
@@ -157,23 +161,6 @@
     return tfPwd.getText();
   }
 
-  /* The following three methods are just commodity methods to retrieve
-   * localized messages */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private String getMsg(String key, String[] args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
   /**
    * Creates and returns the panel of the dialog.
    * @return the panel of the dialog.
@@ -193,7 +180,7 @@
     gbc.fill = GridBagConstraints.BOTH;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = 0;
-    String msg = getMsg("shutdown-directory-manager-dialog-msg");
+    Message msg = INFO_SHUTDOWN_DIRECTORY_MANAGER_DIALOG_MSG.get();
     JTextComponent textPane =
       UIFactory.makeHtmlPane(msg, UIFactory.INSTRUCTIONS_FONT);
     textPane.setOpaque(false);
@@ -209,15 +196,16 @@
     gbc.anchor = GridBagConstraints.WEST;
     gbc.fill = GridBagConstraints.HORIZONTAL;
     lDn = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("shutdown-directory-manager-dn-label"),
+        INFO_SHUTDOWN_DIRECTORY_MANAGER_DN_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     p2.add(lDn, gbc);
     gbc.weightx = 1.0;
     gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
-    tfDn = UIFactory.makeJTextField(getProposedDirectoryManagerDn(),
-        getMsg("shutdown-directory-manager-dn-tooltip"),
-        UIFactory.DN_FIELD_SIZE, UIFactory.TextStyle.TEXTFIELD);
+    tfDn = UIFactory.makeJTextField(
+            Message.raw(getProposedDirectoryManagerDn()),
+            INFO_SHUTDOWN_DIRECTORY_MANAGER_DN_TOOLTIP.get(),
+            UIFactory.DN_FIELD_SIZE, UIFactory.TextStyle.TEXTFIELD);
     p2.add(tfDn, gbc);
 
     gbc.insets.top = 0;
@@ -225,7 +213,7 @@
     gbc.weightx = 0.0;
     gbc.insets.left = 0;
     lPwd = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        getMsg("shutdown-directory-manager-pwd-label"),
+        INFO_SHUTDOWN_DIRECTORY_MANAGER_PWD_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     p2.add(lPwd, gbc);
     gbc.weightx = 1.0;
@@ -235,7 +223,7 @@
     JPanel p3 = new JPanel(new GridBagLayout());
     p3.setOpaque(false);
     tfPwd = UIFactory.makeJPasswordField(null,
-        getMsg("shutdown-directory-manager-pwd-tooltip"),
+        INFO_SHUTDOWN_DIRECTORY_MANAGER_PWD_TOOLTIP.get(),
         UIFactory.PASSWORD_FIELD_SIZE, UIFactory.TextStyle.PASSWORD_FIELD);
     p2.add(tfPwd, gbc);
     p2.add(p3, gbc);
@@ -271,8 +259,8 @@
     gbc.fill = GridBagConstraints.NONE;
     gbc.weightx = 0.0;
     shutDownButton =
-      UIFactory.makeJButton(getMsg("shutdown-button-label"),
-          getMsg("shutdown-directory-manager-shutdown-button-tooltip"));
+      UIFactory.makeJButton(INFO_SHUTDOWN_BUTTON_LABEL.get(),
+          INFO_SHUTDOWN_DIRECTORY_MANAGER_SHUTDOWN_BUTTON_TOOLTIP.get());
     buttonPanel.add(shutDownButton, gbc);
     shutDownButton.addActionListener(new ActionListener()
     {
@@ -285,8 +273,8 @@
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = UIFactory.HORIZONTAL_INSET_BETWEEN_BUTTONS;
     cancelButton =
-      UIFactory.makeJButton(getMsg("cancel-button-label"),
-          getMsg("shutdown-directory-manager-cancel-button-tooltip"));
+      UIFactory.makeJButton(INFO_CANCEL_BUTTON_LABEL.get(),
+          INFO_SHUTDOWN_DIRECTORY_MANAGER_CANCEL_BUTTON_TOOLTIP.get());
     buttonPanel.add(cancelButton, gbc);
     cancelButton.addActionListener(new ActionListener()
     {
@@ -348,13 +336,13 @@
         Boolean isServerRunning = Boolean.TRUE;
         try
         {
-          String installPath = Utils.getInstallPathFromClasspath();
+          String installPath = getInstallPathFromClasspath();
           Installation installation = new Installation(installPath);
           int port = installation.getCurrentConfiguration().getPort();
           String ldapUrl = "ldap://localhost:"+port;
           InitialLdapContext ctx =
-            Utils.createLdapContext(ldapUrl, tfDn.getText(),
-              tfPwd.getText(), Utils.getDefaultLDAPTimeout(), null);
+            createLdapContext(ldapUrl, tfDn.getText(),
+              tfPwd.getText(), getDefaultLDAPTimeout(), null);
 
           /*
            * Search for the config to check that it is the directory manager.
@@ -392,16 +380,16 @@
             boolean pwdInvalid = false;
 
             String dn = tfDn.getText();
-            ArrayList<String> possibleCauses = new ArrayList<String>();
+            ArrayList<Message> possibleCauses = new ArrayList<Message>();
             if ("".equals(dn.trim()))
             {
               dnInvalid = true;
-              possibleCauses.add(getMsg("empty-directory-manager-dn"));
+              possibleCauses.add(INFO_EMPTY_DIRECTORY_MANAGER_DN.get());
             }
-            else if (!Utils.isDn(dn))
+            else if (!isDn(dn))
             {
               dnInvalid = true;
-              possibleCauses.add(getMsg("not-a-directory-manager-dn"));
+              possibleCauses.add(INFO_NOT_A_DIRECTORY_MANAGER_DN.get());
             }
             else
             {
@@ -413,7 +401,7 @@
                 Iterator<String> it = dns.iterator();
                 while (it.hasNext() && !found)
                 {
-                  found = Utils.areDnsEqual(dn, it.next());
+                  found = areDnsEqual(dn, it.next());
                 }
               } catch (IOException ioe) {
                 LOG.log(Level.INFO, "error obtaining dirmanager DNs", ioe);
@@ -421,14 +409,15 @@
               if (!found)
               {
                 dnInvalid = true;
-                possibleCauses.add(getMsg("not-a-directory-manager-in-config"));
+                possibleCauses.add(
+                        INFO_NOT_A_DIRECTORY_MANAGER_IN_CONFIG.get());
               }
             }
 
             if ("".equals(tfPwd.getText()))
             {
               pwdInvalid = true;
-              possibleCauses.add(getMsg("empty-pwd"));
+              possibleCauses.add(INFO_EMPTY_PWD.get());
             }
 
             if (dnInvalid)
@@ -455,29 +444,26 @@
 
             if (possibleCauses.size() > 0)
             {
-              // Message with causes
-              String[] arg = {
-                  Utils.getStringFromCollection(possibleCauses, "\n")
-              };
-              displayError(
-                  getMsg("cannot-connect-to-shutdown-with-cause", arg),
-                  getMsg("error-title"));
+              displayError(parent,
+                  INFO_CANNOT_CONNECT_TO_SHUTDOWN_WITH_CAUSE.get(
+                          getMessageFromCollection(possibleCauses, "\n")),
+                  INFO_ERROR_TITLE.get());
             }
             else
             {
               // Generic message
-              displayError(
-                  getMsg("cannot-connect-to-shutdown-without-cause"),
-                  getMsg("error-title"));
+              displayError(parent,
+                  INFO_CANNOT_CONNECT_TO_SHUTDOWN_WITHOUT_CAUSE.get(),
+                  INFO_ERROR_TITLE.get());
             }
           }
           else
           {
             // This is a bug
             throwable.printStackTrace();
-            displayError(
-                Utils.getThrowableMsg(getI18n(), "bug-msg", null, throwable),
-                getMsg("error-title"));
+            displayError(parent,
+                getThrowableMsg(INFO_BUG_MSG.get(), throwable),
+                INFO_ERROR_TITLE.get());
           }
           cancelButton.setEnabled(true);
           shutDownButton.setEnabled(true);
@@ -486,8 +472,8 @@
           isServerRunning = Boolean.TRUE.equals(returnValue);
           if (!isServerRunning)
           {
-            displayInformationMessage(getMsg("server-not-running-msg"),
-                getMsg("server-not-running-title"));
+            displayInformationMessage(parent, INFO_SERVER_NOT_RUNNING_MSG.get(),
+                INFO_SERVER_NOT_RUNNING_TITLE.get());
           }
           isCancelled = false;
           dispose();
@@ -500,32 +486,6 @@
   }
 
   /**
-   * Displays an error message dialog.
-   *
-   * @param msg
-   *          the error message.
-   * @param title
-   *          the title for the dialog.
-   */
-  private void displayError(String msg, String title)
-  {
-    Utilities.displayError(parent, msg, title);
-  }
-
-  /**
-   * Displays an information message dialog.
-   *
-   * @param msg
-   *          the information message.
-   * @param title
-   *          the title for the dialog.
-   */
-  private void displayInformationMessage(String msg, String title)
-  {
-    Utilities.displayInformationMessage(parent, msg, title);
-  }
-
-  /**
    * Method written for testing purposes.
    * @param args the arguments to be passed to the test program.
    */
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/FinishedPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/FinishedPanel.java
index e736b63..90c2b2a 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/FinishedPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/FinishedPanel.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 /**
  * This panel is used to show the application is finished.
  *
@@ -47,8 +50,8 @@
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("finished-panel-title");
+    return INFO_FINISHED_PANEL_TITLE.get();
   }
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
index f899157..4384806 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
@@ -33,6 +33,8 @@
 import org.opends.quicksetup.util.Utils;
 import org.opends.quicksetup.UserInteraction;
 import org.opends.quicksetup.webstart.WebStartDownloader;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 
 import javax.swing.*;
 import java.awt.event.WindowEvent;
@@ -74,7 +76,7 @@
    * in some operating systems.
    * @return internationalized String representing the frame title
    */
-  abstract public String getFrameTitle();
+  abstract public Message getFrameTitle();
 
   /**
    * Returns the initial wizard step.
@@ -117,7 +119,7 @@
    * Returns the tab formatted.
    * @return the tab formatted.
    */
-  protected String getTab()
+  protected Message getTab()
   {
     return formatter.getTab();
   }
@@ -152,8 +154,8 @@
    */
   public boolean confirmCancel(QuickSetup qs) {
     return qs.displayConfirmation(
-          getMsg("confirm-cancel-prompt"),
-          getMsg("confirm-cancel-title"));
+          INFO_CONFIRM_CANCEL_PROMPT.get(),
+          INFO_CONFIRM_CANCEL_TITLE.get());
   }
 
   /**
@@ -388,32 +390,32 @@
    * Gets the key for the close button's tool tip text.
    * @return String key of the text in the resource bundle
    */
-  public String getCloseButtonToolTipKey() {
-    return "close-button-tooltip";
+  public Message getCloseButtonToolTip() {
+    return INFO_CLOSE_BUTTON_TOOLTIP.get();
   }
 
   /**
    * Gets the key for the quit button's tool tip text.
    * @return String key of the text in the resource bundle
    */
-  public String getQuitButtonToolTipKey() {
-    return "quit-button-install-tooltip";
+  public Message getQuitButtonToolTip() {
+    return INFO_QUIT_BUTTON_INSTALL_TOOLTIP.get();
   }
 
   /**
    * Gets the key for the finish button's tool tip text.
    * @return String key of the text in the resource bundle
    */
-  public String getFinishButtonToolTipKey() {
-    return "finish-button-tooltip";
+  public Message getFinishButtonToolTip() {
+    return INFO_FINISH_BUTTON_TOOLTIP.get();
   }
 
   /**
    * Gets the key for the finish button's label.
    * @return String key of the text in the resource bundle
    */
-  public String getFinishButtonLabelKey() {
-    return "finish-button-label";
+  public Message getFinishButtonLabel() {
+    return INFO_FINISH_BUTTON_LABEL.get();
   }
 
   /**
@@ -501,27 +503,21 @@
       {
         lastPercentage = perc;
         int ratio = (perc * maxRatio) / 100;
-        String summary;
+        Message summary;
         switch (downloadStatus)
         {
         case VALIDATING:
-          String[] argsValidating =
-            { String.valueOf(perc),
-              String.valueOf(loader.getCurrentValidatingPercentage())};
-
-          summary = getMsg("validating-ratio", argsValidating);
+          summary = INFO_VALIDATING_RATIO.get(
+                  String.valueOf(perc),
+                  String.valueOf(loader.getCurrentValidatingPercentage()));
           break;
         case UPGRADING:
-          String[] argsUpgrading =
-            { String.valueOf(perc),
-              String.valueOf(loader.getCurrentUpgradingPercentage())};
-          summary = getMsg("upgrading-ratio", argsUpgrading);
+          summary = INFO_UPGRADING_RATIO.get(
+                  String.valueOf(perc),
+                  String.valueOf(loader.getCurrentUpgradingPercentage()));
           break;
         default:
-          String[] arg =
-            { String.valueOf(perc) };
-
-          summary = getMsg("downloading-ratio", arg);
+          summary = INFO_DOWNLOADING_RATIO.get(String.valueOf(perc));
         }
         loader.setSummary(summary);
         notifyListeners(ratio, summary, null);
@@ -569,9 +565,9 @@
       InProcessServerController.disableConnectionHandlers(true);
       ipsc.startServer();
     } catch (Throwable t) {
-      String msg = getMsg("error-starting-server-with-no-connection-handlers",
-          (t.getMessage() == null) ? t.toString() : t.getMessage());
-      LOG.log(Level.INFO, msg, t);
+      Message msg = INFO_ERROR_STARTING_SERVER_WITH_NO_CONNECTION_HANDLERS.get(
+              (t.getMessage() == null) ? t.toString() : t.getMessage());
+      LOG.log(Level.INFO, msg.toString(), t);
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.IMPORT_ERROR, msg, t);
     }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiUserInteraction.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiUserInteraction.java
index 431f5ff..67a9c5f 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiUserInteraction.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiUserInteraction.java
@@ -27,9 +27,12 @@
 
 package org.opends.quicksetup.ui;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.UserInteraction;
 import org.opends.quicksetup.Constants;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.util.Utils;
 
 import javax.swing.*;
@@ -60,18 +63,18 @@
   /**
    * {@inheritDoc}
    */
-  public Object confirm(String summary, String details,
-                        String title, MessageType type, String[] options,
-                        String def) {
+  public Object confirm(Message summary, Message details,
+                        Message title, MessageType type, Message[] options,
+                        Message def) {
     return confirm(summary, details, null, title, type, options, def, null);
   }
 
   /**
    * {@inheritDoc}
    */
-  public Object confirm(String summary, String details, String fineDetails,
-                        String title, MessageType type, String[] options,
-                        String def, String viewDetailsOption) {
+  public Object confirm(Message summary, Message details, Message fineDetails,
+                        Message title, MessageType type, Message[] options,
+                        Message def, Message viewDetailsOption) {
     int optionType;
     if (options != null) {
       if (options.length == 2) {
@@ -105,14 +108,16 @@
     // characters per line functionality of the extends options
     // pane does not affect message that are components so we
     // have to format this ourselves.
-    StringBuilder sb = new StringBuilder(Constants.HTML_BOLD_OPEN);
+    MessageBuilder sb = new MessageBuilder();
+    sb.append(Constants.HTML_BOLD_OPEN);
     sb.append(Utils.breakHtmlString(summary, MAX_CHARS_PER_LINE));
     sb.append(Constants.HTML_BOLD_CLOSE);
     sb.append(Constants.HTML_LINE_BREAK);
     sb.append(Constants.HTML_LINE_BREAK);
+
     sb.append(Utils.breakHtmlString(details, MAX_CHARS_PER_LINE));
     JEditorPane ep = UIFactory.makeHtmlPane(
-            sb.toString(),
+            sb.toMessage(),
             UIFactory.INSTRUCTIONS_FONT);
     ep.setBorder(BorderFactory.createEmptyBorder(0, 0, 20, 0));
     op.setMessage(ep);
@@ -120,7 +125,7 @@
     op.setMessageType(msgType);
     op.setOptions(options);
     op.setInitialValue(def);
-    JDialog dlg = op.createDialog(parent, title);
+    JDialog dlg = op.createDialog(parent, String.valueOf(title));
     dlg.setVisible(true);
     return op.getValue();
   }
@@ -195,7 +200,7 @@
      *        dialog.
      */
     public DetailsOptionPane(int maxCharactersPerLine,
-                                         String details) {
+                                         Message details) {
       super(maxCharactersPerLine);
       detailsComponent = createDetailsComponent(details);
     }
@@ -209,9 +214,9 @@
         detailsButtonsPanel.setLayout(
                 new BoxLayout(detailsButtonsPanel,
                               BoxLayout.LINE_AXIS));
-        final String showDetailsLabel = getMsg("show-details-button-label");
-        final String hideDetailsLabel = getMsg("hide-details-button-label");
-        final JButton btnDetails = new JButton(showDetailsLabel);
+        final Message showDetailsLabel = INFO_SHOW_DETAILS_BUTTON_LABEL.get();
+        final Message hideDetailsLabel = INFO_HIDE_DETAILS_BUTTON_LABEL.get();
+        final JButton btnDetails = new JButton(showDetailsLabel.toString());
         btnDetails.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
             Dimension current = dialog.getSize();
@@ -219,12 +224,12 @@
               // detailsComponent.setVisible(true);
               dialog.setSize(current.width,
                       current.height + getExpansionHeight());
-              btnDetails.setText(hideDetailsLabel);
+              btnDetails.setText(hideDetailsLabel.toString());
             } else {
               // detailsComponent.setVisible(false);
               dialog.setSize(current.width,
                       current.height - getExpansionHeight());
-              btnDetails.setText(showDetailsLabel);
+              btnDetails.setText(showDetailsLabel.toString());
             }
             detailsShowing = !detailsShowing;
           }
@@ -264,7 +269,7 @@
       return dialog;
     }
 
-    private Component createDetailsComponent(String details) {
+    private Component createDetailsComponent(Message details) {
       JPanel detailsPanel = new JPanel();
       detailsPanel.setLayout(new GridBagLayout());
       GridBagConstraints gbc = new GridBagConstraints();
@@ -272,7 +277,7 @@
       gbc.insets = new Insets(15, 0, 0, 0);
       gbc.fill = GridBagConstraints.HORIZONTAL;
       detailsPanel.add(UIFactory.makeJLabel(null,
-              getMsg("details-label"),
+              INFO_DETAILS_LABEL.get(),
               UIFactory.TextStyle.PRIMARY_FIELD_VALID), gbc);
 
       gbc.insets.top = UIFactory.TOP_INSET_PRIMARY_FIELD;
@@ -282,7 +287,7 @@
       gbc.fill = GridBagConstraints.BOTH;
 
       JEditorPane ep;
-      if (Utils.containsHtml(details)) {
+      if (Utils.containsHtml(String.valueOf(details))) {
         ep = UIFactory.makeHtmlPane(details, UIFactory.INSTRUCTIONS_FONT);
       } else {
         ep = UIFactory.makeTextPane(details, UIFactory.TextStyle.INSTRUCTIONS);
@@ -300,10 +305,6 @@
 
   }
 
-  private static String getMsg(String key) {
-    return ResourceProvider.getInstance().getMsg(key);
-  }
-
 //  public static void main(String[] args) {
 //    new GuiUserInteraction(null).confirm(
 //            "Summary",
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/LabelFieldDescriptor.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/LabelFieldDescriptor.java
index 22077a9..ea06752 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/LabelFieldDescriptor.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/LabelFieldDescriptor.java
@@ -27,6 +27,8 @@
 
 package org.opends.quicksetup.ui;
 
+import org.opends.messages.Message;
+
 /**
  * This is a commodity class used to couple a label and a text component with
  * a FieldName.  It is mainly used by the QuickSetupStepPanel classes to
@@ -38,9 +40,9 @@
 
 public class LabelFieldDescriptor
 {
-  private String label;
+  private Message label;
 
-  private String tooltip;
+  private Message tooltip;
 
   private FieldType type;
 
@@ -94,7 +96,7 @@
    * @param labelType the type of label.
    * @param size the size of the field.
    */
-  public LabelFieldDescriptor(String label, String tooltip, FieldType type,
+  public LabelFieldDescriptor(Message label, Message tooltip, FieldType type,
       LabelType labelType, int size)
   {
     this.label = label;
@@ -108,7 +110,7 @@
    * Returns the String displayed by the label.
    * @return the String displayed by the label.
    */
-  public String getLabel()
+  public Message getLabel()
   {
     return label;
   }
@@ -126,7 +128,7 @@
    * Returns the tooltip used in the field.
    * @return the tooltip used in the field.
    */
-  public String getTooltip()
+  public Message getTooltip()
   {
     return tooltip;
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ProgressDialog.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ProgressDialog.java
index f38ce4a..3004e03 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ProgressDialog.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ProgressDialog.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.awt.Dimension;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -46,7 +49,6 @@
 import javax.swing.event.HyperlinkListener;
 
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.util.HtmlProgressMessageFormatter;
 import org.opends.quicksetup.util.ProgressMessageFormatter;
 
@@ -66,13 +68,13 @@
 
   private JScrollPane scroll;
 
-  private String lastText;
+  private Message lastText;
 
   private JFrame parent;
 
   private JButton closeButton;
 
-  private String panelTitle = getMsg("progress-title");
+  private Message panelTitle = INFO_PROGRESS_TITLE.get();
 
   private ProgressMessageFormatter formatter =
     new HtmlProgressMessageFormatter();
@@ -85,7 +87,7 @@
   {
     super(frame);
     this.parent = frame;
-    setTitle(getMsg("progress-dialog-title"));
+    setTitle(INFO_PROGRESS_DIALOG_TITLE.get().toString());
     createLayout();
   }
 
@@ -118,7 +120,7 @@
    * Sets the title of the panel.
    * @param title the title of the panel.
    */
-  public void setPanelTitle(String title)
+  public void setPanelTitle(Message title)
   {
     this.panelTitle = title;
   }
@@ -127,7 +129,7 @@
    * Returns the title of the panel.
    * @return the title of the panel
    */
-  public String getPanelTitle()
+  public Message getPanelTitle()
   {
     return panelTitle;
   }
@@ -145,18 +147,26 @@
    * Sets the text in the summary label.  The text can be in HTML format.
    * @param text the text to be set.
    */
-  public void setSummary(String text)
+  public void setSummary(Message text)
   {
-    progressBarLabel.setText(text);
+    if (text != null) {
+      progressBarLabel.setText(text.toString());
+    } else {
+      progressBarLabel.setText(null);
+    }
   }
 
   /**
    * 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(String text)
+  public void setDetails(Message text)
   {
-    detailsTextArea.setText(text);
+    if (text != null) {
+      detailsTextArea.setText(text.toString());
+    } else {
+      detailsTextArea.setText(null);
+    }
   }
 
   /**
@@ -189,7 +199,7 @@
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.RELATIVE;
 
-    String title = getPanelTitle();
+    Message title = getPanelTitle();
 
     JLabel l =
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, title,
@@ -213,7 +223,7 @@
 
     gbc.insets.top = UIFactory.TOP_INSET_INSTRUCTIONS_SUBPANEL;
     progressBarLabel =
-        UIFactory.makeHtmlPane(getMsg("progressbar-initial-label"),
+        UIFactory.makeHtmlPane(INFO_PROGRESSBAR_INITIAL_LABEL.get(),
             UIFactory.PROGRESS_FONT);
     progressBarLabel.setOpaque(false);
     progressBarLabel.setEditable(false);
@@ -222,11 +232,11 @@
     gbc.insets.top = UIFactory.TOP_INSET_PROGRESS_BAR;
     gbc.insets.bottom = UIFactory.BOTTOM_INSET_PROGRESS_BAR;
     mainPanel.add(createProgressBarPanel(), gbc);
-    progressBar.setToolTipText(getMsg("progressbar-tooltip"));
+    progressBar.setToolTipText(INFO_PROGRESSBAR_TOOLTIP.get().toString());
 
     l =
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-            getMsg("progress-details-label"),
+            INFO_PROGRESS_DETAILS_LABEL.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
     gbc.insets = UIFactory.getEmptyInsets();
@@ -243,10 +253,10 @@
         if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
         {
           String url = e.getURL().toString();
-          String newText = getFormatter().getFormattedAfterUrlClick(url,
+          Message newText = getFormatter().getFormattedAfterUrlClick(url,
               lastText);
           lastText = newText;
-          detailsTextArea.setText(lastText);
+          setDetails(lastText);
         }
       }
     });
@@ -270,8 +280,8 @@
     gbc.gridwidth = GridBagConstraints.RELATIVE;
     buttonsPanel.add(Box.createHorizontalGlue(), gbc);
     closeButton =
-        UIFactory.makeJButton(getMsg("close-button-label"),
-            getMsg("close-progress-button-tooltip"));
+        UIFactory.makeJButton(INFO_CLOSE_BUTTON_LABEL.get(),
+            INFO_CLOSE_PROGRESS_BUTTON_TOOLTIP.get());
     gbc.fill = GridBagConstraints.NONE;
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
@@ -341,20 +351,6 @@
   }
 
   /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
-  /**
    * Method written for testing purposes.
    * @param args the arguments to be passed to the test program.
    */
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.java
index f401aa4..c51aaa4 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.java
@@ -43,6 +43,8 @@
 import org.opends.quicksetup.ProgressStep;
 import org.opends.quicksetup.event.ButtonEvent;
 import org.opends.quicksetup.ProgressDescriptor;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This panel is used to show the progress of the application.
@@ -60,7 +62,7 @@
 
   private JEditorPane detailsTextArea;
 
-  private String lastText;
+  private Message lastText;
 
   private Component lastFocusComponent;
 
@@ -90,7 +92,8 @@
     gbc.fill = GridBagConstraints.HORIZONTAL;
 
     progressBarLabel = UIFactory.makeHtmlPane(
-        getMsg("progressbar-initial-label"), UIFactory.PROGRESS_FONT);
+            INFO_PROGRESSBAR_INITIAL_LABEL.get(),
+            UIFactory.PROGRESS_FONT);
     progressBarLabel.setOpaque(false);
     progressBarLabel.setEditable(false);
     progressBarLabel.setFocusable(false);
@@ -113,11 +116,11 @@
     gbc.insets.top = UIFactory.TOP_INSET_PROGRESS_BAR;
     gbc.insets.bottom = UIFactory.BOTTOM_INSET_PROGRESS_BAR;
     panel.add(createProgressBarPanel(), gbc);
-    progressBar.setToolTipText(getMsg("progressbar-tooltip"));
+    progressBar.setToolTipText(INFO_PROGRESSBAR_TOOLTIP.get().toString());
 
     JLabel l =
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-            getMsg("progress-details-label"),
+            INFO_PROGRESS_DETAILS_LABEL.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
     gbc.insets = UIFactory.getEmptyInsets();
@@ -136,7 +139,7 @@
           String url = e.getURL().toString();
           lastText = getFormatter().getFormattedAfterUrlClick(url,
               lastText);
-          detailsTextArea.setText(lastText);
+          detailsTextArea.setText(lastText.toString());
         }
       }
     });
@@ -159,7 +162,7 @@
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions()
+  protected Message getInstructions()
   {
     return null;
   }
@@ -167,9 +170,9 @@
   /**
    * {@inheritDoc}
    */
-  protected String getTitle()
+  protected Message getTitle()
   {
-    return getMsg("progress-panel-title");
+    return INFO_PROGRESS_PANEL_TITLE.get();
   }
 
   /**
@@ -189,8 +192,9 @@
   public void displayProgress(ProgressDescriptor descriptor)
   {
     ProgressStep status = descriptor.getProgressStep();
-    String summaryText = UIFactory.applyFontToHtml(descriptor
-        .getProgressBarMsg(), UIFactory.PROGRESS_FONT);
+    String summaryText = UIFactory.applyFontToHtml(
+            String.valueOf(descriptor.getProgressBarMsg()),
+            UIFactory.PROGRESS_FONT);
 
     if (status.isLast()) {
       progressBar.setVisible(false);
@@ -209,7 +213,7 @@
       progressBar.setValue(v);
     }
     lastText = descriptor.getDetailsMsg();
-    detailsTextArea.setText(lastText);
+    detailsTextArea.setText(lastText.toString());
   }
 
   /**
@@ -225,8 +229,8 @@
     gbc.fill = GridBagConstraints.HORIZONTAL;
 
     btnCancel = UIFactory.makeJButton(
-                    getMsg("cancel-button-label"),
-                    getMsg("cancel-button-tooltip"));
+                    INFO_CANCEL_BUTTON_LABEL.get(),
+                    INFO_CANCEL_BUTTON_TOOLTIP.get());
     btnCancel.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {
         GuiApplication app = getApplication();
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.java
index d119114..8a09038 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.java
@@ -32,11 +32,13 @@
 import org.opends.quicksetup.event.ButtonEvent;
 import org.opends.quicksetup.event.ProgressUpdateEvent;
 import org.opends.quicksetup.*;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.util.ProgressMessageFormatter;
 import org.opends.quicksetup.util.HtmlProgressMessageFormatter;
 import org.opends.quicksetup.util.BackgroundTask;
-import org.opends.quicksetup.util.Utils;
+import static org.opends.quicksetup.util.Utils.*;
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 
 import javax.swing.*;
 
@@ -80,7 +82,7 @@
 
   private QuickSetupDialog dialog;
 
-  private StringBuffer progressDetails = new StringBuffer();
+  private MessageBuilder progressDetails = new MessageBuilder();
 
   private ProgressDescriptor lastDescriptor;
 
@@ -275,7 +277,7 @@
         }
         catch (Throwable t) {
           throw new UserDataException(cStep,
-                  getThrowableMsg("bug-msg", t));
+                  getThrowableMsg(INFO_BUG_MSG.get(), t));
         }
         return null;
       }
@@ -288,8 +290,8 @@
           UserDataException ude = (UserDataException) throwable;
           if (ude instanceof UserDataConfirmationException)
           {
-            if (displayConfirmation(ude.getLocalizedMessage(),
-                getMsg("confirmation-title")))
+            if (displayConfirmation(ude.getMessageObject(),
+                INFO_CONFIRMATION_TITLE.get()))
             {
               try
               {
@@ -303,7 +305,7 @@
           }
           else
           {
-            displayError(ude.getLocalizedMessage(), getMsg("error-title"));
+            displayError(ude.getMessageObject(), INFO_ERROR_TITLE.get());
           }
         } else {
           setCurrentStep(application.getNextWizardStep(cStep));
@@ -383,10 +385,10 @@
           if (isWebStart()) {
             rootDirectory = application.getUserData().getServerLocation();
           } else {
-            rootDirectory = Utils.getInstallPathFromClasspath();
+            rootDirectory = getInstallPathFromClasspath();
           }
           Installation installation = new Installation(rootDirectory);
-          String cmd = Utils.getPath(installation.getStatusPanelCommandFile());
+          String cmd = getPath(installation.getStatusPanelCommandFile());
           ProcessBuilder pb = new ProcessBuilder(cmd);
           Map<String, String> env = pb.environment();
           env.put("JAVA_HOME", System.getProperty("java.home"));
@@ -419,14 +421,16 @@
 
           if (returnValue != 0)
           {
-            throw new Error(getMsg("could-not-launch-status-panel-msg"));
+            throw new Error(
+                    INFO_COULD_NOT_LAUNCH_STATUS_PANEL_MSG.get().toString());
           }
         }
         catch (Throwable t)
         {
           // This looks like a bug
           t.printStackTrace();
-          throw new Error(getMsg("could-not-launch-status-panel-msg"));
+          throw new Error(
+                  INFO_COULD_NOT_LAUNCH_STATUS_PANEL_MSG.get().toString());
         }
         return null;
       }
@@ -439,7 +443,8 @@
 
         if (throwable != null)
         {
-          displayError(throwable.getMessage(), getMsg("error-title"));
+          displayError(Message.raw(throwable.getMessage()),
+                  INFO_ERROR_TITLE.get());
         }
       }
     };
@@ -501,34 +506,6 @@
   }
 
   /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   * @param key String key
-   * @return String message
-   */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  /**
-   * The following three methods are just commodity methods to get localized
-   * messages.
-   * @param key String key
-   * @param t Throwable throwable
-   * @return String message
-   */
-  private String getThrowableMsg(String key, Throwable t)
-  {
-    return Utils.getThrowableMsg(getI18n(), key, null, t);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
-  /**
    * Get the current step.
    *
    * @return the currently displayed Step of the wizard.
@@ -581,9 +558,9 @@
    * @param title
    *          the title for the dialog.
    */
-  public void displayError(String msg, String title)
+  public void displayError(Message msg, Message title)
   {
-    if (Utils.isCli()) {
+    if (isCli()) {
       System.err.println(msg);
     } else {
       getDialog().displayError(msg, title);
@@ -600,7 +577,7 @@
    * @return <CODE>true</CODE> if the user confirms the message, or
    * <CODE>false</CODE> if not.
    */
-  public boolean displayConfirmation(String msg, String title)
+  public boolean displayConfirmation(Message msg, Message title)
   {
     return getDialog().displayConfirmation(msg, title);
   }
@@ -610,8 +587,6 @@
    *
    * @param ce
    *          the certificate exception that occurred.
-   * @param title
-   *          the title of the dialog.
    * @return <CODE>true</CODE> if the user confirms the message, or
    * <CODE>false</CODE> if not.
    */
@@ -703,8 +678,8 @@
       ProgressUpdateEvent ev)
   {
     ProgressStep status = ev.getProgressStep();
-    String newProgressLabel = ev.getCurrentPhaseSummary();
-    String additionalDetails = ev.getNewLogs();
+    Message newProgressLabel = ev.getCurrentPhaseSummary();
+    Message additionalDetails = ev.getNewLogs();
     Integer ratio = ev.getProgressRatio();
 
     if (additionalDetails != null)
@@ -713,7 +688,7 @@
     }
 
     return new ProgressDescriptor(status, ratio, newProgressLabel,
-        progressDetails.toString());
+        progressDetails.toMessage());
   }
 
   /**
@@ -724,7 +699,7 @@
    */
   private boolean isWebStart()
   {
-    return Utils.isWebStart();
+    return isWebStart();
   }
 
   /**
@@ -748,7 +723,7 @@
       }
       catch (Throwable t) {
         throw new UserDataException(cStep,
-                getThrowableMsg("bug-msg", t));
+                getThrowableMsg(INFO_BUG_MSG.get(), t));
       }
       return null;
     }
@@ -768,8 +743,8 @@
           UserDataException ude = (UserDataException) throwable;
           if (ude instanceof UserDataConfirmationException)
           {
-            if (displayConfirmation(ude.getLocalizedMessage(),
-                getMsg("confirmation-title")))
+            if (displayConfirmation(ude.getMessageObject(),
+                INFO_CONFIRMATION_TITLE.get()))
             {
               setCurrentStep(application.getNextWizardStep(cStep));
             }
@@ -792,7 +767,7 @@
           }
           else
           {
-            displayError(ude.getLocalizedMessage(), getMsg("error-title"));
+            displayError(ude.getMessageObject(), INFO_ERROR_TITLE.get());
           }
         }
       } else {
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.java
index ae3285b..8d10cd0 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.java
@@ -46,7 +46,7 @@
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
 import org.opends.quicksetup.ProgressDescriptor;
 import org.opends.quicksetup.util.ProgressMessageFormatter;
-
+import org.opends.messages.Message;
 /**
  * This class represents the dialog used by quicksetup applications.
  *
@@ -104,7 +104,7 @@
     this.application = app;
     this.installStatus = installStatus;
     this.quickSetup = qs;
-    frame = new JFrame(application.getFrameTitle());
+    frame = new JFrame(String.valueOf(application.getFrameTitle()));
     frame.getContentPane().add(getFramePanel());
     frame.addWindowListener(new WindowAdapter() {
       public void windowClosing(WindowEvent e) {
@@ -207,7 +207,7 @@
    * @param title
    *          the title for the dialog.
    */
-  public void displayError(String msg, String title)
+  public void displayError(Message msg, Message title)
   {
     Utilities.displayError(getFrame(), msg, title);
   }
@@ -222,7 +222,7 @@
    * @return <CODE>true</CODE> if the user confirms the message, or
    * <CODE>false</CODE> if not.
    */
-  public boolean displayConfirmation(String msg, String title)
+  public boolean displayConfirmation(Message msg, Message title)
   {
     return Utilities.displayConfirmation(getFrame(), msg, title);
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupErrorPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupErrorPanel.java
index 7599a61..842814b 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupErrorPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupErrorPanel.java
@@ -42,6 +42,7 @@
 import org.opends.quicksetup.CurrentInstallStatus;
 import org.opends.quicksetup.event.ButtonActionListener;
 import org.opends.quicksetup.event.ButtonEvent;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This class is a panel that contains an error message and a quit button.
@@ -82,8 +83,9 @@
     gbc.fill = GridBagConstraints.BOTH;
     gbc.insets.left = 0;
     JTextComponent tf =
-        UIFactory.makeHtmlPane(installStatus.getInstallationMsg(),
-            UIFactory.INSTRUCTIONS_FONT);
+            UIFactory.makeHtmlPane(
+                    installStatus.getInstallationMsg(),
+                    UIFactory.INSTRUCTIONS_FONT);
     tf.setOpaque(false);
     tf.setEditable(false);
     p1.add(tf, gbc);
@@ -100,8 +102,8 @@
     gbc.gridwidth = 3;
     p2.add(Box.createHorizontalGlue(), gbc);
     quitButton =
-        UIFactory.makeJButton(getMsg("quit-button-label"),
-            getMsg("quit-button-install-tooltip"));
+        UIFactory.makeJButton(INFO_QUIT_BUTTON_LABEL.get(),
+            INFO_QUIT_BUTTON_INSTALL_TOOLTIP.get());
 
     final ButtonName fQuitButtonName = ButtonName.QUIT;
 
@@ -119,8 +121,8 @@
     quitButton.addActionListener(quitListener);
 
     continueButton =
-      UIFactory.makeJButton(getMsg("continue-button-label"),
-          getMsg("continue-button-install-tooltip"));
+      UIFactory.makeJButton(INFO_CONTINUE_BUTTON_LABEL.get(),
+          INFO_CONTINUE_BUTTON_INSTALL_TOOLTIP.get());
     final ButtonName fContinueButtonName = ButtonName.CONTINUE_INSTALL;
 
     ActionListener continueListener = new ActionListener()
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java
index c63745a..bfae3b0 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupPanel.java
@@ -33,7 +33,6 @@
 
 import javax.swing.JPanel;
 
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.UserData;
 
 /**
@@ -118,47 +117,4 @@
     return application.getUserData();
   }
 
-  /**
-   * Returns a localized message for a key value.  In  the properties file we
-   * have something of type:
-   * key=value
-   *
-   * @see ResourceProvider#getMsg(String)
-   * @param key the key in the properties file.
-   * @return the value associated to the key in the properties file.
-   * properties file.
-   */
-  public String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  /**
-   * Returns a localized message for a key value.  In  the properties file we
-   * have something of type:
-   * key=value
-   *
-   * For instance if we pass as key "mykey" and as arguments {"value1"} and
-   * in the properties file we have:
-   * mykey=value with argument {0}.
-   *
-   * This method will return "value with argument value1".
-   * @see ResourceProvider#getMsg(String, String[])
-   * @param key the key in the properties file.
-   * @param args the arguments to be passed to generate the resulting value.
-   * @return the value associated to the key in the properties file.
-   */
-  public String getMsg(String key, String[] args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  /**
-   * Returns a ResourceProvider instance.
-   * @return a ResourceProvider instance.
-   */
-  public ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupStepPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupStepPanel.java
index 7c6475f..a38f174 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupStepPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/QuickSetupStepPanel.java
@@ -51,6 +51,8 @@
 import org.opends.quicksetup.util.ProgressMessageFormatter;
 import org.opends.quicksetup.util.URLWorker;
 import org.opends.quicksetup.util.Utils;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This is an abstract class that is extended by all the classes that are in
@@ -241,7 +243,7 @@
   public void setIcon(UIFactory.IconType iconType)
   {
     checkingLabel.setIcon(UIFactory.getImageIcon(iconType));
-    checkingLabel.setText(getTextForIcon(iconType));
+    checkingLabel.setText(String.valueOf(getTextForIcon(iconType)));
   }
 
   /**
@@ -251,16 +253,16 @@
    * @return the text to be displayed in the progress label for a give icon
    * type.
    */
-  protected String getTextForIcon(UIFactory.IconType iconType)
+  protected Message getTextForIcon(UIFactory.IconType iconType)
   {
-    String text;
+    Message text;
     if (iconType == UIFactory.IconType.WAIT)
     {
-      text = getMsg("general-checking-data");
+      text = INFO_GENERAL_CHECKING_DATA.get();
     }
     else
     {
-      text = "";
+      text = Message.EMPTY;
     }
     return text;
   }
@@ -347,8 +349,8 @@
       addVerticalGlue(this);
     }
 
-    checkingLabel = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, "",
-        UIFactory.TextStyle.PROGRESS);
+    checkingLabel = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
+            Message.EMPTY, UIFactory.TextStyle.PROGRESS);
     if (hasCheckingLabel())
     {
       gbc.insets.top = UIFactory.TOP_INSET_SECONDARY_FIELD;
@@ -373,13 +375,13 @@
    * Returns the title of this panel.
    * @return the title of this panel.
    */
-  protected abstract String getTitle();
+  protected abstract Message getTitle();
 
   /**
    * Returns the instruction of this panel.
    * @return the instruction of this panel.
    */
-  protected abstract String getInstructions();
+  protected abstract Message getInstructions();
 
   /**
    * Commodity method that adds a vertical glue at the bottom of a given panel.
@@ -455,13 +457,13 @@
     if (ops.getCertificateType() ==
       SecurityOptions.CertificateType.NO_CERTIFICATE)
     {
-      buf.append(getMsg("no-security"));
+      buf.append(INFO_NO_SECURITY.get());
     }
     else
     {
       if (ops.getEnableStartTLS())
       {
-        buf.append(getMsg("enable-starttls"));
+        buf.append(INFO_ENABLE_STARTTLS.get());
       }
       if (ops.getEnableSSL())
       {
@@ -476,8 +478,7 @@
             buf.append("\n");
           }
         }
-        String[] arg = new String[] {String.valueOf(ops.getSslPort())};
-        buf.append(getMsg("enable-ssl", arg));
+        buf.append(INFO_ENABLE_SSL.get(String.valueOf(ops.getSslPort())));
       }
       if (html)
       {
@@ -487,23 +488,23 @@
       {
         buf.append("\n");
       }
-      String certMsg;
+      Message certMsg;
       switch (ops.getCertificateType())
       {
       case SELF_SIGNED_CERTIFICATE:
-        certMsg = getMsg("self-signed-certificate");
+        certMsg = INFO_SELF_SIGNED_CERTIFICATE.get();
         break;
 
       case JKS:
-        certMsg = getMsg("jks-certificate");
+        certMsg = INFO_JKS_CERTIFICATE.get();
         break;
 
       case PKCS11:
-        certMsg = getMsg("pkcs11-certificate");
+        certMsg = INFO_PKCS11_CERTIFICATE.get();
         break;
 
       case PKCS12:
-        certMsg = getMsg("pkcs12-certificate");
+        certMsg = INFO_PKCS12_CERTIFICATE.get();
         break;
 
       default:
@@ -531,7 +532,7 @@
   private Component createTitlePanel()
   {
     Component titlePanel = null;
-    String title = getTitle();
+    Message title = getTitle();
     if (title != null)
     {
       JPanel p = new JPanel(new GridBagLayout());
@@ -563,7 +564,7 @@
   private Component createInstructionsPanel()
   {
     Component instructionsPanel = null;
-    String instructions = getInstructions();
+    Message instructions = getInstructions();
     if (instructions != null)
     {
       JEditorPane p =
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/StepsPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/StepsPanel.java
index ac6c8d1..f9902d9 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/StepsPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/StepsPanel.java
@@ -39,6 +39,7 @@
 
 import org.opends.quicksetup.UserData;
 import org.opends.quicksetup.WizardStep;
+import org.opends.messages.Message;
 
 /**
  * This class displays the different steps of the wizard.  It appears on the
@@ -132,12 +133,12 @@
     gbc.fill = GridBagConstraints.HORIZONTAL;
     gbc.anchor = GridBagConstraints.WEST;
 
-    HashMap<WizardStep, String> hmText = new HashMap<WizardStep, String>();
+    HashMap<WizardStep, Message> hmText = new HashMap<WizardStep, Message>();
     LinkedHashSet<WizardStep> orderedSteps = app.getOrderedSteps();
     boolean first = true;
     for (WizardStep s : orderedSteps)
     {
-      hmText.put(s, app.getI18n().getMsg(s.getMessageKey()));
+      hmText.put(s, s.getDisplayMessage());
 
       JPanel subPanel = new JPanel(new GridBagLayout());
       subPanel.setOpaque(false);
@@ -172,8 +173,9 @@
       subPanel.add(auxPanel, gbc);
 
       JLabel stepLabel =
-          UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, hmText.get(s),
-              UIFactory.TextStyle.CURRENT_STEP);
+              UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
+                      hmText.get(s),
+                      UIFactory.TextStyle.CURRENT_STEP);
       hmLabels.put(s, stepLabel);
       gbc.insets.left = UIFactory.LEFT_INSET_STEP;
       gbc.gridwidth = GridBagConstraints.RELATIVE;
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
index 367dd56..0d7391e 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.Font;
@@ -50,7 +53,6 @@
 import javax.swing.table.TableColumn;
 import javax.swing.table.TableColumnModel;
 
-import org.opends.quicksetup.i18n.ResourceProvider;
 
 /**
  * This class provides constants an methods to create Swing objects and to
@@ -264,79 +266,86 @@
    * Specifies the default background color.
    */
   public static final Color DEFAULT_BACKGROUND =
-    getColor("default-background-color");
+          getColor(INFO_DEFAULT_BACKGROUND_COLOR.get());
 
   /**
    * Specifies the current step background color.
    */
   public static final Color CURRENT_STEP_PANEL_BACKGROUND =
-    getColor("current-step-panel-background-color");
+          getColor(INFO_CURRENT_STEP_PANEL_BACKGROUND_COLOR.get());
 
   /**
    * Specifies the default label color.
    */
   public static final Color DEFAULT_LABEL_COLOR =
-    getColor("default-label-color");
+          getColor(INFO_DEFAULT_LABEL_COLOR.get());
 
   /**
    * Specifies the valid field color.
    */
-  public static final Color FIELD_VALID_COLOR = getColor("field-valid-color");
+  public static final Color FIELD_VALID_COLOR =
+          getColor(INFO_FIELD_VALID_COLOR.get());
 
   /**
    * Specifies the invalid field color.
    */
   public static final Color FIELD_INVALID_COLOR =
-    getColor("field-invalid-color");
+          getColor(INFO_FIELD_VALID_COLOR.get());
 
   /**
    * Specifies the read only text color.
    */
-  public static final Color READ_ONLY_COLOR = getColor("read-only-color");
+  public static final Color READ_ONLY_COLOR =
+          getColor(INFO_READ_ONLY_COLOR.get());
 
   /**
    * Specifies the check box text color.
    */
-  public static final Color CHECKBOX_COLOR = getColor("checkbox-color");
+  public static final Color CHECKBOX_COLOR =
+          getColor(INFO_CHECKBOX_COLOR.get());
 
   /**
    * Specifies the progress text color.
    */
-  public static final Color PROGRESS_COLOR = getColor("progress-color");
+  public static final Color PROGRESS_COLOR =
+          getColor(INFO_PROGRESS_COLOR.get());
 
   /**
    * Specifies the instructions text color.
    */
-  public static final Color INSTRUCTIONS_COLOR = getColor("instructions-color");
+  public static final Color INSTRUCTIONS_COLOR =
+          getColor(INFO_INSTRUCTIONS_COLOR.get());
 
   /**
    * Specifies the text field text color.
    */
-  public static final Color TEXTFIELD_COLOR = getColor("textfield-color");
+  public static final Color TEXTFIELD_COLOR =
+          getColor(INFO_TEXTFIELD_COLOR.get());
 
   /**
    * Specifies the password field text color.
    */
   public static final Color PASSWORDFIELD_COLOR =
-    getColor("passwordfield-color");
+          getColor(INFO_PASSWORDFIELD_COLOR.get());
 
   /**
    * Specifies the panel border color.
    */
-  public static final Color PANEL_BORDER_COLOR = getColor("panel-border-color");
+  public static final Color PANEL_BORDER_COLOR =
+          getColor(INFO_PANEL_BORDER_COLOR.get());
 
   /**
    * Specifies the current step panel border.
    */
   public static final Border CURRENT_STEP_PANEL_BORDER =
-    BorderFactory.createMatteBorder(0, 2, 2, 0, PANEL_BORDER_COLOR);
+          BorderFactory.createMatteBorder(0, 2, 2, 0, PANEL_BORDER_COLOR);
 
   /**
    * Specifies the text area border.
    */
   public static final Border TEXT_AREA_BORDER =
-    BorderFactory.createMatteBorder(1, 1, 1, 1,
-        getColor("text-area-border-color"));
+          BorderFactory.createMatteBorder(1, 1, 1, 1,
+                  getColor(INFO_TEXT_AREA_BORDER_COLOR.get()));
 
   /**
    * Specifies the dialog border.
@@ -484,12 +493,12 @@
 
   private static final String DIV_OPEN_ERROR_BACKGROUND =
     "<div style=\"color:#"+
-    getMsg("div-open-error-background-1-color")+
+    INFO_DIV_OPEN_ERROR_BACKGROUND_1_COLOR.get()+
     ";background-color:#"+
-    getMsg("div-open-error-background-2-color")+
+    INFO_DIV_OPEN_ERROR_BACKGROUND_2_COLOR.get()+
     ";padding:10px 10px 10px 10px;"+
     "border-style:solid;border-width:3px;border-color:#"+
-    getMsg("div-open-error-background-3-color")+
+    INFO_DIV_OPEN_ERROR_BACKGROUND_3_COLOR.get()+
     ";vertical-align:middle;text-align:left\">";
 
   private static final String DIV_OPEN_WARNING_BACKGROUND =
@@ -497,12 +506,12 @@
 
   private static final String DIV_OPEN_SUCCESSFUL_BACKGROUND =
     "<div style=\"color:#"+
-    getMsg("div-open-successful-background-1-color")+
+    INFO_DIV_OPEN_SUCCESSFUL_BACKGROUND_1_COLOR.get()+
     ";background-color:#"+
-    getMsg("div-open-successful-background-2-color")+
+    INFO_DIV_OPEN_SUCCESSFUL_BACKGROUND_2_COLOR.get()+
     ";padding:10px 10px 10px 10px;"+
     "border-style:solid;border-width:3px;border-color:#"+
-    getMsg("div-open-successful-background-3-color")+
+    INFO_DIV_OPEN_SUCCESSFUL_BACKGROUND_3_COLOR.get()+
     ";vertical-align:middle;text-align:left\">";
 
   /**
@@ -510,7 +519,7 @@
    */
   public static final String HTML_SEPARATOR =
     "<div style=\"font-size:1px;background-color:#"+
-    getMsg("html-separator-color")+
+    INFO_HTML_SEPARATOR_COLOR.get()+
     ";margin:10px 5px 10px 5px;\"></div>";
 
   private static final HashMap<IconType, ImageIcon> hmIcons =
@@ -518,9 +527,11 @@
 
   static {
     UIManager.put("OptionPane.background",
-        getColor("optionpane-background-color"));
-    UIManager.put("Panel.background", getColor("panel-background-color"));
-    UIManager.put("ComboBox.background", getColor("combobox-background-color"));
+            getColor(INFO_OPTIONPANE_BACKGROUND_COLOR.get()));
+    UIManager.put("Panel.background",
+            getColor(INFO_PANEL_BACKGROUND_COLOR.get()));
+    UIManager.put("ComboBox.background",
+            getColor(INFO_COMBOBOX_BACKGROUND_COLOR.get()));
   }
 
   /**
@@ -728,18 +739,18 @@
    * @param tooltip the tooltip of the button.
    * @return a JButton with the given label and tooltip.
    */
-  public static JButton makeJButton(String label, String tooltip)
+  public static JButton makeJButton(Message label, Message tooltip)
   {
     JButton b = new JButton();
 
     if (label != null)
     {
-      b.setText(label);
+      b.setText(label.toString());
     }
 
     if (tooltip != null)
     {
-      b.setToolTipText(tooltip);
+      b.setToolTipText(tooltip.toString());
     }
 
     b.setOpaque(false);
@@ -772,23 +783,23 @@
    * @param style the text style.
    * @return a JLabel with the given icon, text and text style.
    */
-  public static JLabel makeJLabel(IconType iconName, String text,
+  public static JLabel makeJLabel(IconType iconName, Message text,
       TextStyle style)
   {
     JLabel l = new JLabel();
 
     if (text != null)
     {
-      l.setText(text);
+      l.setText(text.toString());
     }
 
     ImageIcon icon = getImageIcon(iconName);
     l.setIcon(icon);
-    String tooltip = getIconTooltip(iconName);
+    Message tooltip = getIconTooltip(iconName);
 
     if (tooltip != null)
     {
-      l.setToolTipText(tooltip);
+      l.setToolTipText(tooltip.toString());
     }
 
     setTextStyle(l, style);
@@ -813,21 +824,21 @@
     case TEXTFIELD:
 
       field =
-          makeJTextField(defaultValue, desc.getTooltip(), desc
+          makeJTextField(Message.raw(defaultValue), desc.getTooltip(), desc
               .getSize(), TextStyle.TEXTFIELD);
       break;
 
     case PASSWORD:
 
       field =
-          makeJPasswordField(defaultValue, desc.getTooltip(), desc
+          makeJPasswordField(Message.raw(defaultValue), desc.getTooltip(), desc
               .getSize(), TextStyle.PASSWORD_FIELD);
       break;
 
     case READ_ONLY:
 
       field =
-          makeTextPane(defaultValue, TextStyle.READ_ONLY);
+          makeTextPane(Message.raw(defaultValue), TextStyle.READ_ONLY);
       break;
 
     default:
@@ -846,7 +857,7 @@
    * @return a JTextField with the given icon, tooltip text, size and text
    * style.
    */
-  public static JTextField makeJTextField(String text, String tooltip,
+  public static JTextField makeJTextField(Message text, Message tooltip,
       int size, TextStyle style)
   {
     JTextField f = new JTextField();
@@ -865,7 +876,7 @@
    * @return a JPasswordField with the given icon, tooltip text, size and text
    * style.
    */
-  public static JPasswordField makeJPasswordField(String text, String tooltip,
+  public static JPasswordField makeJPasswordField(Message text, Message tooltip,
       int size, TextStyle style)
   {
     JPasswordField f = new JPasswordField();
@@ -883,19 +894,19 @@
    * @return a JRadioButton with the given text, tooltip text and text
    * style.
    */
-  public static JRadioButton makeJRadioButton(String text, String tooltip,
+  public static JRadioButton makeJRadioButton(Message text, Message tooltip,
       TextStyle style)
   {
     JRadioButton rb = new JRadioButton();
     rb.setOpaque(false);
     if (text != null)
     {
-      rb.setText(text);
+      rb.setText(text.toString());
     }
 
     if (tooltip != null)
     {
-      rb.setToolTipText(tooltip);
+      rb.setToolTipText(tooltip.toString());
     }
 
     setTextStyle(rb, style);
@@ -911,19 +922,19 @@
    * @return a JCheckBox with the given text, tooltip text and text
    * style.
    */
-  public static JCheckBox makeJCheckBox(String text, String tooltip,
+  public static JCheckBox makeJCheckBox(Message text, Message tooltip,
       TextStyle style)
   {
     JCheckBox cb = new JCheckBox();
     cb.setOpaque(false);
     if (text != null)
     {
-      cb.setText(text);
+      cb.setText(text.toString());
     }
 
     if (tooltip != null)
     {
-      cb.setToolTipText(tooltip);
+      cb.setToolTipText(tooltip.toString());
     }
 
     setTextStyle(cb, style);
@@ -1041,8 +1052,8 @@
     String url =
         String.valueOf(UIFactory.class.getClassLoader().getResource(
             getIconPath(iconType)));
-    String description = getIconDescription(iconType);
-    String title = getIconTooltip(iconType);
+    Message description = getIconDescription(iconType);
+    Message title = getIconTooltip(iconType);
     return "<img src=\"" + url + "\" alt=\"" + description +
     "\" align=\"middle\" title=\"" + title + "\" >";
   }
@@ -1061,14 +1072,15 @@
     if ((icon == null) && (iconType != IconType.NO_ICON))
     {
       String path = getIconPath(iconType);
-      String description = getIconDescription(iconType);
+      Message description = getIconDescription(iconType);
       try
       {
         Image im =
             Toolkit.getDefaultToolkit().createImage(
                 UIFactory.class.getClassLoader().getResource(path));
         icon = new ImageIcon(im);
-        icon.setDescription(description);
+        String ds = description != null ? description.toString() : null;
+        icon.setDescription(ds);
 
         hmIcons.put(iconType, icon);
 
@@ -1102,7 +1114,7 @@
    * @return a read only JEditorPane containing the provided text with the
    * provided font.
    */
-  public static JEditorPane makeHtmlPane(String text, Font font)
+  public static JEditorPane makeHtmlPane(Message text, Font font)
   {
     return makeHtmlPane(text, null, font);
   }
@@ -1116,13 +1128,14 @@
    * @return a read only JEditorPane containing the provided text with the
    * provided font.
    */
-  public static JEditorPane makeHtmlPane(String text, HTMLEditorKit ek,
+  public static JEditorPane makeHtmlPane(Message text, HTMLEditorKit ek,
                                          Font font)
   {
     JEditorPane pane = new JEditorPane();
     if (ek != null) pane.setEditorKit(ek);
     pane.setContentType("text/html");
-    pane.setText(applyFontToHtmlWithDiv(text, font));
+    String s = text != null ? String.valueOf(text) : null;
+    pane.setText(applyFontToHtmlWithDiv(s, font));
     pane.setEditable(false);
     pane.setBorder(new EmptyBorder(0, 0, 0, 0));
     return pane;
@@ -1137,9 +1150,10 @@
    * @return a read only JEditorPane containing the provided text with the
    * provided TextStyle.
    */
-  public static JEditorPane makeTextPane(String text, TextStyle style)
+  public static JEditorPane makeTextPane(Message text, TextStyle style)
   {
-    JEditorPane pane = new JEditorPane("text/plain", text);
+    String s = text != null ? String.valueOf(text) : null;
+    JEditorPane pane = new JEditorPane("text/plain", s);
     setTextStyle(pane, style);
     pane.setEditable(false);
     pane.setBorder(new EmptyBorder(0, 0, 0, 0));
@@ -1363,17 +1377,17 @@
    * @param size the new size of the field.
    * @param textStyle the new TextStyle of the field.
    */
-  private static void updateTextFieldComponent(JTextField field, String text,
-      String tooltip, int size, TextStyle textStyle)
+  private static void updateTextFieldComponent(JTextField field, Message text,
+      Message tooltip, int size, TextStyle textStyle)
   {
     field.setColumns(size);
     if (text != null)
     {
-      field.setText(text);
+      field.setText(text.toString());
     }
     if (tooltip != null)
     {
-      field.setToolTipText(tooltip);
+      field.setToolTipText(tooltip.toString());
     }
     if (textStyle != null)
     {
@@ -1381,27 +1395,13 @@
     }
   }
 
-  /* Some commodity methods to retrieve localized messages */
-  private static ResourceProvider getI18n()
+  private static Color getColor(Message l)
   {
-    return ResourceProvider.getInstance();
-  }
-
-  private static String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private static Color getColor(String l)
-  {
-    String s = getMsg(l);
-    int r = 0;
-    int g = 0;
-    int b = 0;
+    String s = String.valueOf(l);
     String[] colors = s.split(",");
-    r = Integer.parseInt(colors[0].trim());
-    g = Integer.parseInt(colors[1].trim());
-    b = Integer.parseInt(colors[2].trim());
+    int r = Integer.parseInt(colors[0].trim());
+    int g = Integer.parseInt(colors[1].trim());
+    int b = Integer.parseInt(colors[2].trim());
 
     return new Color(r, g, b);
   }
@@ -1430,81 +1430,81 @@
    */
   private static String getIconPath(IconType iconType)
   {
-    String key = null;
+    Message key = null;
     switch (iconType)
     {
     case CURRENT_STEP:
-      key = "current-step-icon";
+      key = INFO_CURRENT_STEP_ICON.get();
       break;
 
     case SPLASH:
-      key = "splash-icon";
+      key = INFO_SPLASH_ICON.get();
       break;
 
     case BACKGROUND:
-      key = "background-icon";
+      key = INFO_BACKGROUND_ICON.get();
       break;
 
     case MINIMIZED:
-      key = "minimized-icon";
+      key = INFO_MINIMIZED_ICON.get();
       break;
 
     case MINIMIZED_MAC:
-      key = "minimized-mac-icon";
+      key = INFO_MINIMIZED_MAC_ICON.get();
       break;
 
     case WARNING:
-      key = "warning-icon";
+      key = INFO_WARNING_ICON.get();
       break;
 
     case WARNING_LARGE:
-      key = "warning-large-icon";
+      key = INFO_WARNING_LARGE_ICON.get();
       break;
 
     case INFORMATION:
-      key = "information-icon";
+      key = INFO_INFORMATION_ICON.get();
       break;
 
     case INFORMATION_LARGE:
-      key = "information-large-icon";
+      key = INFO_INFORMATION_LARGE_ICON.get();
       break;
 
     case OPENDS_SMALL:
-      key = "opends-small-icon";
+      key = INFO_OPENDS_SMALL_ICON.get();
       break;
 
     case SUBSECTION_LEFT:
-      key = "subsection-left-icon";
+      key = INFO_SUBSECTION_LEFT_ICON.get();
       break;
 
     case SUBSECTION_RIGHT:
-      key = "subsection-right-icon";
+      key = INFO_SUBSECTION_RIGHT_ICON.get();
       break;
 
     case HELP_SMALL:
-      key = "help-small-icon";
+      key = INFO_HELP_SMALL_ICON.get();
       break;
 
     case ERROR:
-      key = "error-icon";
+      key = INFO_ERROR_ICON.get();
       break;
 
     case ERROR_LARGE:
-      key = "error-large-icon";
+      key = INFO_ERROR_LARGE_ICON.get();
       break;
 
     case WAIT_TINY:
-      key = "wait-tiny";
+      key = INFO_WAIT_TINY.get();
       break;
 
     case WAIT:
-      key = "wait";
+      key = INFO_WAIT.get();
       break;
 
     default:
       throw new IllegalArgumentException("Unknown iconName: " + iconType);
     }
-    return getParentPackagePath() + "/" + getMsg(key);
+    return getParentPackagePath() + "/" + key.toString();
   }
 
   /**
@@ -1512,77 +1512,77 @@
    * @param iconType the IconType for which we want to get the description.
    * @return the icon description for the given IconType.
    */
-  private static String getIconDescription(IconType iconType)
+  private static Message getIconDescription(IconType iconType)
   {
-    String description = null;
+    Message description = null;
     switch (iconType)
     {
     case CURRENT_STEP:
-      description = getMsg("current-step-icon-description");
+      description = INFO_CURRENT_STEP_ICON_DESCRIPTION.get();
       break;
 
     case SPLASH:
-      description = getMsg("splash-icon-description");
+      description = INFO_SPLASH_ICON_DESCRIPTION.get();
       break;
 
     case BACKGROUND:
-      description = getMsg("background-icon-description");
+      description = INFO_BACKGROUND_ICON_DESCRIPTION.get();
       break;
 
     case MINIMIZED:
-      description = getMsg("minimized-icon-description");
+      description = INFO_MINIMIZED_ICON_DESCRIPTION.get();
       break;
 
     case MINIMIZED_MAC:
-      description = getMsg("minimized-icon-description");
+      description = INFO_MINIMIZED_ICON_DESCRIPTION.get();
       break;
 
     case WARNING:
-      description = getMsg("warning-icon-description");
+      description = INFO_WARNING_ICON_DESCRIPTION.get();
       break;
 
     case WARNING_LARGE:
-      description = getMsg("warning-icon-description");
+      description = INFO_WARNING_ICON_DESCRIPTION.get();
       break;
 
     case ERROR:
-      description = getMsg("error-icon-description");
+      description = INFO_ERROR_ICON_DESCRIPTION.get();
       break;
 
     case ERROR_LARGE:
-      description = getMsg("error-icon-description");
+      description = INFO_ERROR_ICON_DESCRIPTION.get();
       break;
 
     case INFORMATION:
-      description = getMsg("information-icon-description");
+      description = INFO_INFORMATION_ICON_DESCRIPTION.get();
       break;
 
     case INFORMATION_LARGE:
-      description = getMsg("information-icon-description");
+      description = INFO_INFORMATION_ICON_DESCRIPTION.get();
       break;
 
     case OPENDS_SMALL:
-      description = getMsg("opends-small-icon-description");
+      description = INFO_OPENDS_SMALL_ICON_DESCRIPTION.get();
       break;
 
     case SUBSECTION_LEFT:
-      description = getMsg("subsection-left-icon-description");
+      description = INFO_SUBSECTION_LEFT_ICON_DESCRIPTION.get();
       break;
 
     case SUBSECTION_RIGHT:
-      description = getMsg("subsection-right-icon-description");
+      description = INFO_SUBSECTION_RIGHT_ICON_DESCRIPTION.get();
       break;
 
     case HELP_SMALL:
-      description = getMsg("help-small-icon-description");
+      description = INFO_HELP_SMALL_ICON_DESCRIPTION.get();
       break;
 
     case WAIT_TINY:
-      description = getMsg("help-wait-description");
+      description = INFO_HELP_WAIT_DESCRIPTION.get();
       break;
 
     case WAIT:
-      description = getMsg("help-wait-description");
+      description = INFO_HELP_WAIT_DESCRIPTION.get();
       break;
 
     case NO_ICON:
@@ -1601,56 +1601,56 @@
    * @param iconType the IconType for which we want to get the tooltip text.
    * @return the icon tooltip text for the given IconType.
    */
-  private static String getIconTooltip(IconType iconType)
+  private static Message getIconTooltip(IconType iconType)
   {
     if (iconType == null) {
       iconType = IconType.NO_ICON;
     }
-    String tooltip;
+    Message tooltip;
     switch (iconType)
     {
     case CURRENT_STEP:
-      tooltip = getMsg("current-step-icon-tooltip");
+      tooltip = INFO_CURRENT_STEP_ICON_TOOLTIP.get();
       break;
 
     case SPLASH:
-      tooltip = getMsg("splash-icon-tooltip");
+      tooltip = INFO_SPLASH_ICON_TOOLTIP.get();
       break;
 
     case BACKGROUND:
-      tooltip = getMsg("background-icon-tooltip");
+      tooltip = INFO_BACKGROUND_ICON_TOOLTIP.get();
       break;
 
     case MINIMIZED:
-      tooltip = getMsg("minimized-icon-tooltip");
+      tooltip = INFO_MINIMIZED_ICON_TOOLTIP.get();
       break;
 
     case MINIMIZED_MAC:
-      tooltip = getMsg("minimized-mac-icon-tooltip");
+      tooltip = INFO_MINIMIZED_ICON_TOOLTIP.get();
       break;
 
     case WARNING:
-      tooltip = getMsg("warning-icon-tooltip");
+      tooltip = INFO_WARNING_ICON_TOOLTIP.get();
       break;
 
     case WARNING_LARGE:
-      tooltip = getMsg("warning-icon-tooltip");
+      tooltip = INFO_WARNING_ICON_TOOLTIP.get();
       break;
 
     case ERROR:
-      tooltip = getMsg("error-icon-tooltip");
+      tooltip = INFO_ERROR_ICON_TOOLTIP.get();
       break;
 
     case ERROR_LARGE:
-      tooltip = getMsg("error-icon-tooltip");
+      tooltip = INFO_ERROR_ICON_TOOLTIP.get();
       break;
 
     case INFORMATION:
-      tooltip = getMsg("information-icon-tooltip");
+      tooltip = INFO_INFORMATION_ICON_TOOLTIP.get();
       break;
 
     case INFORMATION_LARGE:
-      tooltip = getMsg("information-icon-tooltip");
+      tooltip = INFO_INFORMATION_ICON_TOOLTIP.get();
       break;
 
     case OPENDS_SMALL:
@@ -1694,7 +1694,7 @@
           boolean isSelected,
           boolean cellHasFocus)
       {
-        JLabel l = makeJLabel(IconType.NO_ICON, (String)value, textStyle);
+        JLabel l = makeJLabel(IconType.NO_ICON, Message.raw(value), textStyle);
         l.setBorder(new EmptyBorder(TOP_INSET_SECONDARY_FIELD, 0, 0, 0));
         return l;
       }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/Utilities.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/Utilities.java
index 954f9a5..4d1b306 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/Utilities.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/Utilities.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.quicksetup.ui;
+import org.opends.messages.Message;
 
 import org.opends.quicksetup.util.Utils;
 
@@ -144,15 +145,16 @@
   * @return <CODE>true</CODE> if the user confirms the message, or
   * <CODE>false</CODE> if not.
   */
- public static boolean displayConfirmation(JFrame parent, String msg,
-     String title)
+ public static boolean displayConfirmation(JFrame parent, Message msg,
+     Message title)
  {
    return JOptionPane.YES_OPTION == JOptionPane.showOptionDialog(
-       parent, wrapMsg(msg, 100), title, JOptionPane.YES_NO_OPTION,
-       JOptionPane.QUESTION_MESSAGE, null, // don't use a custom
-       // Icon
-       null, // the titles of buttons
-       null); // default button title
+           parent, wrapMsg(String.valueOf(msg), 100), String.valueOf(title),
+           JOptionPane.YES_NO_OPTION,
+           JOptionPane.QUESTION_MESSAGE,
+           null, // don't use a custom Icon
+           null, // the titles of buttons
+           null); // default button title
  }
 
   /**
@@ -161,14 +163,15 @@
    * @param parent
    *          the parent component of the error dialog.
    * @param msg
-   *          the error message.
+ *          the error message.
    * @param title
    *          the title for the dialog.
    */
-  public static void displayError(Component parent, String msg, String title)
+  public static void displayError(Component parent, Message msg, Message title)
   {
-    JOptionPane.showMessageDialog(parent, wrapMsg(msg, 100), title,
-        JOptionPane.ERROR_MESSAGE);
+    JOptionPane.showMessageDialog(parent,
+            wrapMsg(String.valueOf(msg), 100),
+            String.valueOf(title), JOptionPane.ERROR_MESSAGE);
   }
 
   /**
@@ -177,15 +180,16 @@
    * @param parent
    *          the parent frame of the information dialog.
    * @param msg
-   *          the error message.
+ *          the error message.
    * @param title
    *          the title for the dialog.
    */
-  public static void displayInformationMessage(JFrame parent, String msg,
-      String title)
+  public static void displayInformationMessage(JFrame parent, Message msg,
+      Message title)
   {
-    JOptionPane.showMessageDialog(parent, wrapMsg(msg, 100), title,
-        JOptionPane.INFORMATION_MESSAGE);
+    JOptionPane.showMessageDialog(parent,
+            wrapMsg(String.valueOf(msg), 100), String.valueOf(title),
+            JOptionPane.INFORMATION_MESSAGE);
   }
 
   /**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/WebBrowserErrorDialog.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/WebBrowserErrorDialog.java
index cf16de6..ab42ee7 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/WebBrowserErrorDialog.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/WebBrowserErrorDialog.java
@@ -42,8 +42,9 @@
 import javax.swing.text.JTextComponent;
 
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.util.WebBrowserException;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This class is a dialog that appears when we could not launch the user web
@@ -71,7 +72,7 @@
   public WebBrowserErrorDialog(JFrame parent, WebBrowserException ex)
   {
     super(parent);
-    setTitle(getMsg("error-browser-display-title"));
+    setTitle(INFO_ERROR_BROWSER_DISPLAY_TITLE.get().toString());
     this.parent = parent;
     this.url = ex.getUrl();
     getContentPane().add(createPanel());
@@ -92,23 +93,6 @@
     setVisible(true);
   }
 
-  /* The following three methods are just commodity methods to retrieve
-   * localized messages */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  private String getMsg(String key, String[] args)
-  {
-    return getI18n().getMsg(key, args);
-  }
-
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
   /**
    * Creates and returns the panel of the dialog.
    * @return the panel of the dialog.
@@ -129,8 +113,7 @@
     Insets pInsets = UIFactory.getCurrentStepPanelInsets();
     gbc.insets.left = 0;
     gbc.fill = GridBagConstraints.BOTH;
-    String msg = getMsg("error-browser-display-msg", new String[]
-      { url });
+    Message msg = INFO_ERROR_BROWSER_DISPLAY_MSG.get(url);
     JTextComponent tf =
         UIFactory.makeHtmlPane(msg,
             UIFactory.ERROR_DIALOG_FONT);
@@ -141,8 +124,8 @@
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     JButton copyButton =
-        UIFactory.makeJButton(getMsg("error-browser-copy-button-label"),
-            getMsg("error-browser-copy-button-tooltip"));
+        UIFactory.makeJButton(INFO_ERROR_BROWSER_COPY_BUTTON_LABEL.get(),
+            INFO_ERROR_BROWSER_COPY_BUTTON_TOOLTIP.get());
     copyButton.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent ev)
@@ -167,8 +150,8 @@
     gbc.gridwidth = GridBagConstraints.RELATIVE;
     p2.add(Box.createHorizontalGlue(), gbc);
     JButton closeButton =
-        UIFactory.makeJButton(getMsg("close-button-label"),
-            getMsg("error-browser-close-button-tooltip"));
+        UIFactory.makeJButton(INFO_CLOSE_BUTTON_LABEL.get(),
+            INFO_ERROR_BROWSER_CLOSE_BUTTON_TOOLTIP.get());
     gbc.fill = GridBagConstraints.NONE;
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
@@ -206,7 +189,8 @@
       // UIFactory.initialize();
       WebBrowserErrorDialog dlg =
           new WebBrowserErrorDialog(new JFrame(),
-              new WebBrowserException("http://www.yahoo.com", "toto", null));
+              new WebBrowserException("http://www.yahoo.com",
+                      Message.raw("toto"), null));
       dlg.packAndShow();
     } catch (Exception ex)
     {
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/WebProxyDialog.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/WebProxyDialog.java
index bbb246d..befbc68 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/WebProxyDialog.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/WebProxyDialog.java
@@ -27,7 +27,8 @@
 
 package org.opends.quicksetup.ui;
 
-import org.opends.quicksetup.i18n.ResourceProvider;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
 
 import javax.swing.*;
 import java.awt.*;
@@ -105,7 +106,7 @@
   }
 
   private void init(String host, Integer port, String user, char[] pw) {
-    setTitle(getMsg("web-proxy-dlg-title"));
+    setTitle(INFO_WEB_PROXY_DLG_TITLE.get().toString());
     optionPane = createContentPane(host, port, user, pw);
     optionPane.addPropertyChangeListener(this);
     setContentPane(optionPane);
@@ -269,18 +270,18 @@
     GridBagConstraints gbc = new GridBagConstraints();
 
     final JLabel lblUser = UIFactory.makeJLabel(null,
-            getMsg("web-proxy-dlg-user-label"),
+            INFO_WEB_PROXY_DLG_USER_LABEL.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
     final JLabel lblPassword = UIFactory.makeJLabel(null,
-            getMsg("web-proxy-dlg-password-label"),
+            INFO_WEB_PROXY_DLG_PASSWORD_LABEL.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
     gbc.gridx = 0;
     gbc.gridy = 0;
     gbc.anchor = GridBagConstraints.FIRST_LINE_START;
     gbc.fill = GridBagConstraints.NONE;
-    p.add(new JLabel(getMsg("web-proxy-dlg-host-label")), gbc);
+    p.add(new JLabel(INFO_WEB_PROXY_DLG_HOST_LABEL.get().toString()), gbc);
 
     gbc.gridx = 1;
     gbc.gridy = 0;
@@ -292,7 +293,7 @@
     gbc.gridy = 1;
     gbc.weightx = 0;
     gbc.fill = GridBagConstraints.NONE;
-    p.add(new JLabel(getMsg("web-proxy-dlg-port-label")), gbc);
+    p.add(new JLabel(INFO_WEB_PROXY_DLG_PORT_LABEL.get().toString()), gbc);
 
     gbc.gridx = 1;
     gbc.gridy = 1;
@@ -304,15 +305,16 @@
     gbc.weightx = 0;
     gbc.fill = GridBagConstraints.NONE;
     gbc.insets.top = 7; // I don't understand why this is necesary
-    p.add(new JLabel(getMsg("web-proxy-dlg-auth-label")), gbc);
+    p.add(new JLabel(INFO_WEB_PROXY_DLG_AUTH_LABEL.get().toString()), gbc);
 
     gbc.gridx = 1;
     gbc.gridy = 2;
     gbc.fill = GridBagConstraints.HORIZONTAL;
     gbc.insets.top = 0;
     p.add(chkRequiresAuth =
-            UIFactory.makeJCheckBox(getMsg("web-proxy-dlg-auth-req-label"),
-                    "",
+            UIFactory.makeJCheckBox(
+                    INFO_WEB_PROXY_DLG_AUTH_REQ_LABEL.get(),
+                    Message.EMPTY,
                     UIFactory.TextStyle.SECONDARY_FIELD_VALID
             ), gbc);
     chkRequiresAuth.addActionListener(new ActionListener() {
@@ -368,16 +370,20 @@
   }
 
   private boolean validateUserData() {
-    String errorMsg = null;
+    Message errorMsg = null;
     String portString = tfPort.getText();
 
     try {
       Integer port = Integer.parseInt(portString);
       if (!(port >= 1 && port <= 65535)) {
-        errorMsg = getMsg("invalid-port-value-range", portString);
+        errorMsg = INFO_INVALID_PORT_VALUE_RANGE.get(
+                String.valueOf(1),
+                String.valueOf(65535));
       }
     } catch (NumberFormatException e) {
-      errorMsg = getMsg("invalid-port-value-range", portString);
+      errorMsg = INFO_INVALID_PORT_VALUE_RANGE.get(
+              String.valueOf(1),
+              String.valueOf(65535));
     }
 
     if (errorMsg != null) {
@@ -386,14 +392,6 @@
     return (errorMsg == null);
   }
 
-  private String getMsg(String key) {
-    return ResourceProvider.getInstance().getMsg(key);
-  }
-
-  private String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
 //  /**
 //   * For testing.
 //   * @param args cl args
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java
index f11e1e1..d0200ee 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractor.java
@@ -27,9 +27,12 @@
 
 package org.opends.quicksetup.upgrader;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.*;
 import org.opends.quicksetup.event.ProgressUpdateListener;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.quicksetup.util.Utils;
 import org.opends.quicksetup.util.ZipExtractor;
 import org.opends.quicksetup.util.FileManager;
@@ -69,7 +72,7 @@
                       QuickSetupLog.LOG_FILE_SUFFIX));
     } catch (Throwable t) {
       System.err.println(
-              ResourceProvider.getInstance().getMsg("error-initializing-log"));
+              INFO_ERROR_INITIALIZING_LOG.get());
       t.printStackTrace();
     }
     new BuildExtractor(args).launch();
@@ -111,7 +114,7 @@
         if (!installation.isValid()) {
           LOG.log(Level.INFO, "extraction produed an invalid OpenDS" +
                   "installation: " + installation.getInvalidityReason());
-          String invalidMsg = getMsg("build-extractor-file-invalid",
+          Message invalidMsg = INFO_BUILD_EXTRACTOR_FILE_INVALID.get(
                   Utils.getPath(buildFile),
                   installation.getInvalidityReason());
           error = new ApplicationException(
@@ -124,8 +127,8 @@
       LOG.log(Level.INFO, "unexpected error extracting build", t);
       String reason = t.getLocalizedMessage();
       error = new ApplicationException(
-          ApplicationReturnCode.ReturnCode.APPLICATION_ERROR, getMsg(
-              "build-extractor-error", reason), t);
+              ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
+              INFO_BUILD_EXTRACTOR_ERROR.get(reason), t);
       System.err.println(reason);
     } finally   {
       finished = true;
@@ -141,7 +144,7 @@
       fm.deleteRecursively(stageDir);
     }
     if (!stageDir.mkdirs()) {
-      String msg = getMsg("error-failed-to-create-stage-directory",
+      Message msg = INFO_ERROR_FAILED_TO_CREATE_STAGE_DIRECTORY.get(
               Utils.getPath(stageDir));
       throw ApplicationException.createFileSystemException(msg, null);
     }
@@ -227,8 +230,8 @@
   /**
    * {@inheritDoc}
    */
-  public void notifyListeners(Integer ratio, String currentPhaseSummary,
-                              String newLogDetail) {
+  public void notifyListeners(Integer ratio, Message currentPhaseSummary,
+                              Message newLogDetail) {
     // ignored;  no progress messages
   }
 
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractorCliHelper.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractorCliHelper.java
index b8c651e..56e2874 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractorCliHelper.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/BuildExtractorCliHelper.java
@@ -27,6 +27,8 @@
 
 package org.opends.quicksetup.upgrader;
 
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.UserDataException;
 
 import java.util.logging.Logger;
@@ -67,7 +69,7 @@
       LOG.log(Level.INFO, "obtaining file information interactively");
       while(true) {
         String fileName = promptForString(
-                getMsg("upgrade-file-prompt"), null);
+                INFO_UPGRADE_FILE_PROMPT.get(), null);
         try {
           uud.setInstallPackage(validateInstallPackFile(fileName));
           LOG.log(Level.INFO, "file specified interactively: " +
@@ -79,8 +81,8 @@
       }
     } else {
       throw new UserDataException(null,
-              getMsg("error-option-required-or-interactive",
-                      "-" + UpgradeLauncher.FILE_OPTION_SHORT + "/--" +
+              INFO_ERROR_OPTION_REQUIRED_OR_INTERACTIVE.get("-" +
+                      UpgradeLauncher.FILE_OPTION_SHORT + "/--" +
                               UpgradeLauncher.FILE_OPTION_LONG));
     }
     return uud;
@@ -92,11 +94,10 @@
     File f = new File(fileName);
     if (!f.exists()) {
         throw new UserDataException(null,
-                getMsg("build-extractor-error-file-no-exist",
-                        fileName));
+                INFO_BUILD_EXTRACTOR_ERROR_FILE_NO_EXIST.get(fileName));
     } else if (f.isDirectory() || !f.getName().toLowerCase().endsWith(".zip")) {
       throw new UserDataException(null,
-              getMsg("build-extractor-error-file-not-zip", fileName));
+              INFO_BUILD_EXTRACTOR_ERROR_FILE_NOT_ZIP.get(fileName));
     }
     return f;
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/MigrationManager.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/MigrationManager.java
index c99b1df..7b02e34 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/MigrationManager.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/MigrationManager.java
@@ -27,12 +27,16 @@
 
 package org.opends.quicksetup.upgrader;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.ApplicationException;
 import org.opends.quicksetup.ApplicationReturnCode;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.UserInteraction;
 import org.opends.quicksetup.Constants;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.quicksetup.util.ExternalTools;
 import org.opends.quicksetup.util.Utils;
 import org.opends.quicksetup.util.OperationOutput;
@@ -117,7 +121,7 @@
         throw ae;
       } catch (Exception e) {
         throw ApplicationException.createFileSystemException(
-                getMsg("error-determining-custom-schema"), e);
+                INFO_ERROR_DETERMINING_CUSTOM_SCHEMA.get(), e);
       }
     } else {
       LOG.log(Level.INFO, "No schema customizations to migrate");
@@ -146,14 +150,14 @@
           throw ae;
         } catch (Exception e) {
           throw ApplicationException.createFileSystemException(
-                  getMsg("error-determining-custom-config"), e);
+                  INFO_ERROR_DETERMINING_CUSTOM_CONFIG.get(), e);
         }
       } else {
         LOG.log(Level.INFO, "No configuration customizations to migrate");
       }
     } catch (IOException e) {
       throw ApplicationException.createFileSystemException(
-              getMsg("error-determining-custom-config"), e);
+              INFO_ERROR_DETERMINING_CUSTOM_CONFIG.get(), e);
     }
   }
 
@@ -172,8 +176,8 @@
     } catch (ApplicationException ae) {
       throw ae;
     } catch (Exception e) {
-      String msg = getMsg("error-applying-custom-config");
-      LOG.log(Level.INFO, msg, e);
+      Message msg = INFO_ERROR_APPLYING_CUSTOM_CONFIG.get();
+      LOG.log(Level.INFO, msg.toString(), e);
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.IMPORT_ERROR, msg, e);
     }
@@ -194,8 +198,8 @@
     } catch (ApplicationException ae) {
       throw ae;
     } catch (Exception e) {
-      String msg = getMsg("error-applying-custom-schema");
-      LOG.log(Level.INFO, msg, e);
+      Message msg = INFO_ERROR_APPLYING_CUSTOM_SCHEMA.get();
+      LOG.log(Level.INFO, msg.toString(), e);
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.IMPORT_ERROR, msg, e);
     }
@@ -253,16 +257,16 @@
         cre = ldifReader.readChangeRecord(false);
       } catch (Exception e) {
         if (ui != null) {
-          String cancel = getMsg("cancel-button-label");
-          String cont = getMsg("continue-button-label");
-          String retry = getMsg("retry-button-label");
+          Message cancel = INFO_CANCEL_BUTTON_LABEL.get();
+          Message cont = INFO_CONTINUE_BUTTON_LABEL.get();
+          Message retry = INFO_RETRY_BUTTON_LABEL.get();
           Object r = ui.confirm(
                   getModificationErrorSummary(component),
                   getModificationErrorMessage(cre),
-                  e.getLocalizedMessage(),
-                  getMsg("error-upgrade-migration"),
+                  Message.raw(e.getLocalizedMessage()),
+                  INFO_ERROR_UPGRADE_MIGRATION.get(),
                   UserInteraction.MessageType.ERROR,
-                  new String[]{cancel, cont, retry},
+                  new Message[]{cancel, cont, retry},
                   cancel, null);
           if (cont.equals(r)) {
             cre = ldifReader.readChangeRecord(false);
@@ -271,7 +275,7 @@
           } else {
             throw new ApplicationException(
                 ApplicationReturnCode.ReturnCode.CANCELLED,
-                getMsg("upgrade-canceled"), e);
+                INFO_UPGRADE_CANCELED.get(), e);
           }
         } else {
           throw e;
@@ -280,51 +284,50 @@
     }
   }
 
-  private String getModificationErrorSummary(Component c) {
-    String summary;
+  private Message getModificationErrorSummary(Component c) {
+    Message summary;
     switch(c) {
       case SCHEMA:
-        summary = getMsg("error-upgrade-migration-schema");
+        summary = INFO_ERROR_UPGRADE_MIGRATION_SCHEMA.get();
         break;
       case CONFIGURATION:
-        summary = getMsg("error-upgrade-migration-config");
+        summary = INFO_ERROR_UPGRADE_MIGRATION_CONFIG.get();
         break;
       default:
-        summary = "";
+        summary = Message.EMPTY;
     }
     return summary;
   }
 
-  private String getModificationErrorMessage(ChangeRecordEntry cre) {
-    StringBuilder msg = new StringBuilder();
+  private Message getModificationErrorMessage(ChangeRecordEntry cre) {
+    MessageBuilder msg = new MessageBuilder();
     msg.append(Constants.HTML_LINE_BREAK);
     if (cre != null) {
       switch (cre.getChangeOperationType()) {
         case MODIFY:
-          msg.append(getMsg("error-upgrade-migration-modify",
+          msg.append(INFO_ERROR_UPGRADE_MIGRATION_MODIFY.get(
                   cre.getDN().toNormalizedString()));
           break;
         case ADD:
-          msg.append(getMsg("error-upgrade-migration-add",
+          msg.append(INFO_ERROR_UPGRADE_MIGRATION_ADD.get(
                   cre.getDN().toNormalizedString()));
           break;
         case DELETE:
-          msg.append(getMsg("error-upgrade-migration-delete",
+          msg.append(INFO_ERROR_UPGRADE_MIGRATION_DELETE.get(
                   cre.getDN().toNormalizedString()));
           break;
         default:
           LOG.log(Level.INFO, "Unexpected change operation type " +
                 cre.getChangeOperationType());
-          msg.append(getMsg("error-upgrade-migration-unexpected",
+          msg.append(INFO_ERROR_UPGRADE_MIGRATION_UNEXPECTED.get(
                   cre.getDN().toNormalizedString()));
           break;
       }
     }
     msg.append(Constants.HTML_LINE_BREAK);
     msg.append(Constants.HTML_LINE_BREAK);
-    msg.append(getMsg("error-upgrade-migration-note",
-            Utils.getPath(backupDir)));
-    return msg.toString();
+    msg.append(INFO_ERROR_UPGRADE_MIGRATION_NOTE.get(Utils.getPath(backupDir)));
+    return msg.toMessage();
   }
 
   private void ldifDiff(File source, File target, File output)
@@ -339,8 +342,7 @@
     if (ret != 0) {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.TOOL_ERROR,
-              getMsg("error-ldif-diff-tool-return-code",
-                      Integer.toString(ret)),
+              INFO_ERROR_LDIF_DIFF_TOOL_RETURN_CODE.get(Integer.toString(ret)),
               null);
     }
   }
@@ -353,8 +355,4 @@
     return new File(backupDir, "schema.custom.diff");
   }
 
-  static private String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java
index 693c10f..b97621a 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java
@@ -26,9 +26,10 @@
  */
 
 package org.opends.quicksetup.upgrader;
+import static org.opends.messages.QuickSetupMessages.*;
 
 import org.opends.quicksetup.Application;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.quicksetup.util.Utils;
 
 import javax.swing.*;
@@ -194,7 +195,7 @@
       int bytesRead = 0;
       byte[] buf = new byte[1024];
       app.notifyListeners(0,
-              getMsg("build-manager-downloading-build"),
+              INFO_BUILD_MANAGER_DOWNLOADING_BUILD.get(),
               null);
       while ((i = is.read(buf)) != -1) {
         fos.write(buf, 0, i);
@@ -203,14 +204,14 @@
           if (length > 0) {
             int progress = (bytesRead * 100) / length;
             app.notifyListeners(0,
-                    getMsg("build-manager-downloading-build-progress",
+                    INFO_BUILD_MANAGER_DOWNLOADING_BUILD_PROGRESS.get(
                             String.valueOf(progress)),
                     null);
           }
         }
       }
       app.notifyListeners(0,
-              getMsg("build-manager-downloading-build-done"),
+              INFO_BUILD_MANAGER_DOWNLOADING_BUILD_DONE.get(),
               null);
     } finally {
       if (is != null) {
@@ -399,14 +400,6 @@
     }
   }
 
-  private String getMsg(String key) {
-    return ResourceProvider.getInstance().getMsg(key);
-  }
-
-  private String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
   /**
    * For testing only.
    * @param args command line arguments
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionLauncher.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionLauncher.java
index a08b8c3..f5cd2f2 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionLauncher.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionLauncher.java
@@ -27,17 +27,20 @@
 
 package org.opends.quicksetup.upgrader;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.Launcher;
 import org.opends.quicksetup.CliApplication;
 import org.opends.quicksetup.QuickSetupLog;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.util.Utils;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.server.util.args.ArgumentParser;
 import org.opends.server.util.args.BooleanArgument;
 import org.opends.server.util.args.FileBasedArgument;
 import org.opends.server.util.ServerConstants;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.OPTION_SHORT_HELP;
 import static org.opends.server.tools.ToolConstants.OPTION_LONG_HELP;
 
@@ -72,8 +75,7 @@
               File.createTempFile(LOG_FILE_PREFIX,
                       QuickSetupLog.LOG_FILE_SUFFIX));
     } catch (Throwable t) {
-      System.err.println(
-              ResourceProvider.getInstance().getMsg("error-initializing-log"));
+      System.err.println(INFO_ERROR_INITIALIZING_LOG.get());
       t.printStackTrace();
     }
     new ReversionLauncher(args).launch();
@@ -120,7 +122,7 @@
   /**
    * {@inheritDoc}
    */
-  protected String getFrameTitle() {
+  protected Message getFrameTitle() {
     return null;
   }
 
@@ -168,7 +170,7 @@
     System.setProperty(ServerConstants.PROPERTY_SCRIPT_NAME, scriptName);
 
     argParser = new ArgumentParser(getClass().getName(),
-        getI18n().getMsg("revert-launcher-usage-description"), false);
+        INFO_REVERT_LAUNCHER_USAGE_DESCRIPTION.get(), false);
     try
     {
       dir = new FileBasedArgument("directory",
@@ -176,26 +178,26 @@
               DIRECTORY_OPTION_LONG,
               false, false,
               "{directory}",
-              null, null, MSGID_REVERT_DESCRIPTION_DIRECTORY);
+              null, null, INFO_REVERT_DESCRIPTION_DIRECTORY.get());
       argParser.addArgument(dir);
 
       mostRecent = new BooleanArgument("mostRecent",
               MOST_RECENT_OPTION_SHORT,
               MOST_RECENT_OPTION_LONG,
-              MSGID_REVERT_DESCRIPTION_RECENT);
+              INFO_REVERT_DESCRIPTION_RECENT.get());
       argParser.addArgument(mostRecent);
 
       interactive = new BooleanArgument("interactive", 'i', "interactive",
-          MSGID_REVERT_DESCRIPTION_INTERACTIVE);
+          INFO_REVERT_DESCRIPTION_INTERACTIVE.get());
       argParser.addArgument(interactive);
 
       silent = new BooleanArgument("silent", 's', "silent",
-          MSGID_REVERT_DESCRIPTION_SILENT);
+          INFO_REVERT_DESCRIPTION_SILENT.get());
       argParser.addArgument(silent);
 
       showUsage = new BooleanArgument("showusage", OPTION_SHORT_HELP,
         OPTION_LONG_HELP,
-        MSGID_DESCRIPTION_USAGE);
+        INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
 
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionProgressStep.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionProgressStep.java
index 6883aec..ab4a4cd 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionProgressStep.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ReversionProgressStep.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.upgrader;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.ProgressStep;
 
 /**
@@ -34,35 +37,36 @@
  */
 enum ReversionProgressStep implements ProgressStep {
 
-  NOT_STARTED("summary-revert-not-started", 0),
+  NOT_STARTED(INFO_SUMMARY_REVERT_NOT_STARTED.get(), 0),
 
-  INITIALIZING("summary-revert-initializing", 20),
+  INITIALIZING(INFO_SUMMARY_REVERT_INITIALIZING.get(), 20),
 
-  STOPPING_SERVER("summary-stopping", 40),
+  STOPPING_SERVER(INFO_SUMMARY_STOPPING.get(), 40),
 
-  REVERTING_FILESYSTEM("summary-revert-reverting-components", 60),
+  REVERTING_FILESYSTEM(INFO_SUMMARY_REVERT_REVERTING_COMPONENTS.get(), 60),
 
-  VERIFYING("summary-revert-verifying", 80),
+  VERIFYING(INFO_SUMMARY_REVERT_VERIFYING.get(), 80),
 
-  RECORDING_HISTORY("summary-revert-history", 90),
+  RECORDING_HISTORY(INFO_SUMMARY_REVERT_HISTORY.get(), 90),
 
-  CLEANUP("summary-revert-cleanup", 95),
+  CLEANUP(INFO_SUMMARY_REVERT_CLEANUP.get(), 95),
 
-  ABORT("summary-revert-abort", 99),
+  ABORT(INFO_SUMMARY_REVERT_ABORT.get(), 99),
 
-  FINISHED_WITH_ERRORS("summary-revert-finished-with-errors-cli", 100),
+  FINISHED_WITH_ERRORS(INFO_SUMMARY_REVERT_FINISHED_WITH_ERRORS_CLI.get(), 100),
 
-  FINISHED_WITH_WARNINGS("summary-revert-finished-with-warnings-cli", 100),
+  FINISHED_WITH_WARNINGS(
+          INFO_SUMMARY_REVERT_FINISHED_WITH_WARNINGS_CLI.get(), 100),
 
-  FINISHED_CANCELED("summary-revert-finished-canceled-cli", 100),
+  FINISHED_CANCELED(INFO_SUMMARY_REVERT_FINISHED_CANCELED_CLI.get(), 100),
 
-  FINISHED("summary-revert-finished-successfully-cli", 100);
+  FINISHED(INFO_SUMMARY_REVERT_FINISHED_SUCCESSFULLY_CLI.get("",""), 100);
 
-  private String summaryMsgKey;
+  private Message summaryMsg;
   private int progress;
 
-  private ReversionProgressStep(String summaryMsgKey, int progress) {
-    this.summaryMsgKey = summaryMsgKey;
+  private ReversionProgressStep(Message summaryMsgKey, int progress) {
+    this.summaryMsg = summaryMsg;
     this.progress = progress;
   }
 
@@ -71,8 +75,8 @@
    *
    * @return String representing key for access summary in resource bundle
    */
-  public String getSummaryMesssageKey() {
-    return summaryMsgKey;
+  public Message getSummaryMesssage() {
+    return summaryMsg;
   }
 
   /**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java
index ab37a2f..f935991 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Reverter.java
@@ -27,6 +27,10 @@
 
 package org.opends.quicksetup.upgrader;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.ApplicationReturnCode;
 import org.opends.quicksetup.CliApplication;
 import org.opends.quicksetup.UserData;
@@ -119,11 +123,11 @@
 
           } else {
             throw new UserDataException(null,
-                    getMsg("revert-error-empty-history-dir"));
+                    INFO_REVERT_ERROR_EMPTY_HISTORY_DIR.get());
           }
         } else {
           throw new UserDataException(null,
-                  getMsg("revert-error-no-history-dir"));
+                  INFO_REVERT_ERROR_NO_HISTORY_DIR.get());
         }
       } else {
         filesDir = rl.getFilesDirectory();
@@ -146,7 +150,7 @@
                   .append("/--")
                   .append(ReversionLauncher.MOST_RECENT_OPTION_LONG);
           throw new UserDataException(null,
-                  getMsg("revert-error-no-dir", sb.toString()));
+                  INFO_REVERT_ERROR_NO_DIR.get(sb.toString()));
         }
       }
       if (validateFilesDirectory(filesDir)) {
@@ -205,8 +209,8 @@
    * {@inheritDoc}
    */
   public void notifyListeners(Integer ratio,
-                              String currentPhaseSummary,
-                              String newLogDetail) {
+                              Message currentPhaseSummary,
+                              Message newLogDetail) {
     listenerDelegate.notifyListeners(null,
             ratio,
             currentPhaseSummary,
@@ -254,8 +258,8 @@
   /**
    * {@inheritDoc}
    */
-  public String getSummary(ProgressStep step) {
-    String txt;
+  public Message getSummary(ProgressStep step) {
+    Message txt;
     if (step == ReversionProgressStep.FINISHED) {
       txt = getFinalSuccessMessage();
 //    } else if (step == ReversionProgressStep.FINISHED_CANCELED) {
@@ -266,7 +270,7 @@
 //      txt = getFinalWarningMessage();
     }
     else {
-      txt = getMsg(((ReversionProgressStep) step).getSummaryMesssageKey());
+      txt = (((ReversionProgressStep) step).getSummaryMesssage());
     }
     return txt;
   }
@@ -324,27 +328,28 @@
 
       UserInteraction ui = userInteraction();
       if (ui != null) {
-        String cont = "Continue";
-        String cancel = "Cancel";
+        Message cont = INFO_CONTINUE_BUTTON_LABEL.get();
+        Message cancel = INFO_CANCEL_BUTTON_LABEL.get();
 
         String toBuildString = null;
         BuildInformation toBi = getToBuildInformation();
         if (toBi != null) {
           toBuildString = toBi.toString();
         } else {
-          toBuildString = getMsg("upgrade-build-id-unknown");
+          toBuildString = INFO_UPGRADE_BUILD_ID_UNKNOWN.get().toString();
         }
-        if (cancel.equals(ui.confirm("Confirm Reversion",
-                "This installation will be reverted to version " +
+        if (cancel.equals(ui.confirm( // TODO: i18n
+                Message.raw("Confirm Reversion"),
+                Message.raw("This installation will be reverted to version " +
                         toBuildString +
-                        " using the files in " + getFilesDirectory() + ".",
-                "Confirm",
+                        " using the files in " + getFilesDirectory() + "."),
+                Message.raw("Confirm"),
                 UserInteraction.MessageType.WARNING,
-                new String[] { cont, cancel },
+                new Message[] { cont, cancel },
                 cont))) {
           throw new ApplicationException(
               ApplicationReturnCode.ReturnCode.CANCELLED,
-              getMsg("reversion-canceled"), null);
+              INFO_REVERSION_CANCELED.get(), null);
         }
       }
 
@@ -354,7 +359,7 @@
       if (!(e instanceof ApplicationException)) {
         runError = new ApplicationException(
             ApplicationReturnCode.ReturnCode.BUG,
-                e.getLocalizedMessage(), e);
+                Message.raw(e.getLocalizedMessage()), e);
       } else {
         runError = (ApplicationException)e;
       }
@@ -366,7 +371,7 @@
   private void setCurrentProgressStep(ReversionProgressStep step) {
     this.currentProgressStep = step;
     int progress = step.getProgress();
-    String msg = getSummary(step);
+    Message msg = getSummary(step);
     notifyListeners(progress, msg, formatter.getFormattedProgress(msg));
   }
 
@@ -408,7 +413,7 @@
     } catch (Exception e) {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
-              getMsg("error-backup-filesystem"),
+              INFO_ERROR_BACKUP_FILESYSTEM.get(),
               e);
     }
   }
@@ -434,7 +439,7 @@
 
     } catch (IOException e) {
       throw ApplicationException.createFileSystemException(
-              getMsg("error-upgrading-components"), e);
+              INFO_ERROR_UPGRADING_COMPONENTS.get(), e);
     }
   }
 
@@ -448,13 +453,13 @@
   {
     if (filesDir == null) {
       throw new UserDataException(null,
-              getMsg("revert-error-null-files-dir"));
+              INFO_REVERT_ERROR_NULL_FILES_DIR.get());
     } else if (!filesDir.isDirectory()) {
       throw new UserDataException(null,
-              getMsg("revert-error-not-dir-files-dir"));
+              INFO_REVERT_ERROR_NOT_DIR_FILES_DIR.get());
     } else if (!isFilesDirectory(filesDir)) {
       throw new UserDataException(null,
-              getMsg("revert-error-not-dir-files-dir"));
+              INFO_REVERT_ERROR_NOT_DIR_FILES_DIR.get());
     }
     return true;
   }
@@ -491,16 +496,14 @@
         ProgressStep lastProgressStep = currentProgressStep;
         setCurrentProgressStep(ReversionProgressStep.ABORT);
         abort(lastProgressStep);
-        notifyListeners(formatter.getFormattedDone() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedDoneWithLineBreak());
         LOG.log(Level.INFO, "cancelation complete");
       }
 
       LOG.log(Level.INFO, "cleaning up after reversion");
       setCurrentProgressStep(ReversionProgressStep.CLEANUP);
       cleanup();
-      notifyListeners(formatter.getFormattedDone() +
-              formatter.getLineBreak());
+      notifyListeners(getFormattedDoneWithLineBreak());
       LOG.log(Level.INFO, "clean up complete");
 
 
@@ -513,15 +516,15 @@
               status,
               note);
 
-      notifyListeners(formatter.getFormattedDone() +
-              formatter.getLineBreak());
+      notifyListeners(getFormattedDoneWithLineBreak());
       LOG.log(Level.INFO, "history recorded");
-      notifyListeners(getMsg("general-see-for-history",
-              Utils.getPath(getInstallation().getHistoryLogFile())) +
-              formatter.getLineBreak());
+      notifyListeners(
+              new MessageBuilder(
+                INFO_GENERAL_SEE_FOR_HISTORY.get(
+                     Utils.getPath(getInstallation().getHistoryLogFile())))
+              .append(getLineBreak()).toMessage());
     } catch (ApplicationException e) {
-      notifyListeners(formatter.getFormattedError() +
-              formatter.getLineBreak());
+      notifyListeners(getFormattedDoneWithLineBreak());
       LOG.log(Level.INFO, "Error cleaning up after upgrade.", e);
     }
 
@@ -539,21 +542,19 @@
       setCurrentProgressStep(ReversionProgressStep.FINISHED_CANCELED);
     } else if (runError != null) {
       LOG.log(Level.INFO, "upgrade completed with errors", runError);
-      notifyListeners(formatter.getFormattedError(runError, true) +
-                      formatter.getLineBreak());
-      notifyListeners(formatter.getLineBreak());
+      notifyListeners(getFormattedErrorWithLineBreak(runError,true));
+      notifyListeners(getLineBreak());
       setCurrentProgressStep(ReversionProgressStep.FINISHED_WITH_ERRORS);
-      notifyListeners(formatter.getLineBreak());
+      notifyListeners(getLineBreak());
     } else if (runWarning != null) {
       LOG.log(Level.INFO, "upgrade completed with warnings");
-      String warningText = runWarning.getLocalizedMessage();
+      Message warningText = runWarning.getMessageObject();
 
       // By design, the warnings are written as errors to the details section
       // as errors.  Warning markup is used surrounding the main message
       // at the end of progress.
-      notifyListeners(formatter.getFormattedError(warningText, true) +
-                      formatter.getLineBreak());
-      notifyListeners(formatter.getLineBreak());
+      notifyListeners(getFormattedErrorWithLineBreak(warningText, true));
+      notifyListeners(getLineBreak());
       setCurrentProgressStep(ReversionProgressStep.FINISHED_WITH_WARNINGS);
       notifyListeners(formatter.getLineBreak());
 
@@ -606,8 +607,7 @@
             fm.move(f, root, null);
           } catch (Throwable t) {
             restoreError = true;
-            notifyListeners(getMsg("error-restoring-file",
-                    Utils.getPath(f),
+            notifyListeners(INFO_ERROR_RESTORING_FILE.get(Utils.getPath(f),
                     Utils.getPath(root)));
           }
         }
@@ -686,8 +686,8 @@
     return toBuildInfo;
   }
 
-  private String getFinalSuccessMessage() {
-    String txt;
+  private Message getFinalSuccessMessage() {
+    Message txt;
     String installPath = Utils.getPath(getInstallation().getRootDirectory());
     String newVersion;
     try {
@@ -695,15 +695,14 @@
       if (bi != null) {
         newVersion = bi.toString();
       } else {
-        newVersion = getMsg("reversion-build-id-unknown");
+        newVersion = INFO_UPGRADE_BUILD_ID_UNKNOWN.get().toString();
       }
     } catch (ApplicationException e) {
-      newVersion = getMsg("reversion-build-id-unknown");
+      newVersion = INFO_UPGRADE_BUILD_ID_UNKNOWN.get().toString();
     }
-    String[] args = {
-            formatter.getFormattedText(installPath),
-            newVersion};
-    txt = getMsg("summary-revert-finished-successfully-cli", args);
+    txt = INFO_SUMMARY_REVERT_FINISHED_SUCCESSFULLY_CLI.get(
+            formatter.getFormattedText(Message.raw(installPath)),
+            newVersion);
     return txt;
   }
 
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java
index bcc7434..a9b61d6 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeIssueNotifier.java
@@ -27,12 +27,16 @@
 
 package org.opends.quicksetup.upgrader;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+
 import org.opends.quicksetup.ApplicationReturnCode;
 import org.opends.quicksetup.BuildInformation;
 import org.opends.quicksetup.UserInteraction;
 import org.opends.quicksetup.ApplicationException;
 import org.opends.quicksetup.Constants;
 import org.opends.server.util.VersionCompatibilityIssue;
+import static org.opends.messages.QuickSetupMessages.*;
 import static org.opends.server.util.VersionCompatibilityIssue.*;
 
 import java.util.Set;
@@ -67,8 +71,8 @@
    */
   public void notifyUser() throws ApplicationException {
     String[] args = { currentBuildInfo.toString(), newBuildInfo.toString() };
-    String cont = getMsg("oracle-action-prompt-continue");
-    String cancel = getMsg("oracle-action-prompt-cancel");
+    Message cont = INFO_ORACLE_ACTION_PROMPT_CONTINUE.get();
+    Message cancel = INFO_ORACLE_ACTION_PROMPT_CANCEL.get();
     if (hasIssues()) {
       List<Directive> issues = getIssues();
       if (!isSupported()) {
@@ -79,52 +83,58 @@
           }
         }
         throw new ApplicationException(
-            ApplicationReturnCode.ReturnCode.APPLICATION_ERROR, getMsg(
-                "upgrade-oracle-unsupported", args), null);
+            ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
+                INFO_UPGRADE_ORACLE_UNSUPPORTED.get(
+                        currentBuildInfo.toString(),
+                        newBuildInfo.toString()),
+                null);
       } else {
         if (ui != null) {
           for (VersionIssueNotifier.Directive directive : issues) {
-            String title;
-            String summary;
-            String details;
-            String defaultAction;
+            Message title;
+            Message summary;
+            Message details;
+            Message defaultAction;
             UserInteraction.MessageType msgType;
             switch (directive.getType()) {
               case ACTION:
-                title = getMsg("general-action-required");
-                summary = getMsg("upgrade-oracle-action", args);
-                details = directive.getMessage() +
-                        Constants.HTML_LINE_BREAK +
-                        Constants.HTML_LINE_BREAK +
-                        getMsg("oracle-action-prompt");
+                title = INFO_GENERAL_ACTION_REQUIRED.get();
+                summary = INFO_UPGRADE_ORACLE_ACTION.get();
+                details = new MessageBuilder(directive.getMessage())
+                        .append(Constants.HTML_LINE_BREAK)
+                        .append(Constants.HTML_LINE_BREAK)
+                        .append(INFO_ORACLE_ACTION_PROMPT.get())
+                        .toMessage();
                 msgType = UserInteraction.MessageType.WARNING;
                 defaultAction = cancel;
                 break;
               case INFO:
-                title = getMsg("general-info");
-                summary = getMsg("upgrade-oracle-info");
-                details = directive.getMessage() +
-                        Constants.HTML_LINE_BREAK +
-                        Constants.HTML_LINE_BREAK +
-                        getMsg("oracle-info-prompt");
+                title = INFO_GENERAL_INFO.get();
+                summary = INFO_UPGRADE_ORACLE_INFO.get();
+                details = new MessageBuilder(directive.getMessage())
+                        .append(Constants.HTML_LINE_BREAK)
+                        .append(Constants.HTML_LINE_BREAK)
+                        .append(INFO_ORACLE_INFO_PROMPT.get())
+                        .toMessage();
                 msgType = UserInteraction.MessageType.INFORMATION;
                 defaultAction = cont;
                 break;
               case WARNING:
-                title = getMsg("general-warning");
-                summary = getMsg("upgrade-oracle-warning");
-                details = directive.getMessage() +
-                        Constants.HTML_LINE_BREAK +
-                        Constants.HTML_LINE_BREAK +
-                        getMsg("oracle-info-prompt");
+                title = INFO_GENERAL_WARNING.get();
+                summary = INFO_UPGRADE_ORACLE_WARNING.get();
+                details = new MessageBuilder(directive.getMessage())
+                        .append(Constants.HTML_LINE_BREAK)
+                        .append(Constants.HTML_LINE_BREAK)
+                        .append(INFO_ORACLE_INFO_PROMPT.get())
+                        .toMessage();
                 msgType = UserInteraction.MessageType.WARNING;
                 defaultAction = cont;
                 break;
               default:
                 LOG.log(Level.INFO, "Unexpected issue type " +
                         directive.getType());
-                title = "";
-                summary = "";
+                title = Message.EMPTY;
+                summary = Message.EMPTY;
                 details = directive.getMessage();
                 msgType = UserInteraction.MessageType.WARNING;
                 defaultAction = cont;
@@ -134,17 +144,17 @@
                     details,
                     title,
                     msgType,
-                    new String[]{cont, cancel},
+                    new Message[]{cont, cancel},
                     defaultAction))) {
               throw new ApplicationException(
                   ApplicationReturnCode.ReturnCode.CANCELLED,
-                      getMsg("upgrade-canceled"), null);
+                      INFO_UPGRADE_CANCELED.get(), null);
             }
           }
         } else {
           throw new ApplicationException(
               ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
-              getMsg("oracle-no-silent"), null);
+              INFO_ORACLE_NO_SILENT.get(), null);
         }
       }
     }
@@ -153,10 +163,10 @@
   /**
    * {@inheritDoc}
    */
-  protected String getLocalizedDetailMessage(
+  protected Message getLocalizedDetailMessage(
           VersionCompatibilityIssue.Cause cause)
   {
-    String msg = cause.getLocalizedUpgradeMessage();
+    Message msg = cause.getLocalizedUpgradeMessage();
 
     // See if we need to supply a generic message
     Set<VersionCompatibilityIssue.Effect> effects = cause.getEffects();
@@ -164,9 +174,10 @@
     // If the import/export effect is present, append the detailed
     // instructions.
     if (effects.contains(Effect.UPGRADE_DATA_EXPORT_AND_REIMPORT_REQUIRED)) {
-      if (msg == null) msg = "";
-      msg = msg + Constants.HTML_LINE_BREAK +
-              ui.createUnorderedList(getExportImportInstructions());
+      msg = new MessageBuilder(msg)
+              .append(Constants.HTML_LINE_BREAK)
+              .append(ui.createUnorderedList(getExportImportInstructions()))
+              .toMessage();
     }
     return msg;
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeLauncher.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeLauncher.java
index ee3a6f4..794b054 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeLauncher.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeLauncher.java
@@ -27,7 +27,10 @@
 
 package org.opends.quicksetup.upgrader;
 
-import static org.opends.server.messages.ToolMessages.*;
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 
 import org.opends.quicksetup.CliApplicationHelper;
@@ -35,7 +38,7 @@
 import org.opends.quicksetup.CliApplication;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.QuickSetupLog;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.util.ServerConstants;
 import org.opends.server.util.args.ArgumentParser;
@@ -74,8 +77,7 @@
               File.createTempFile(LOG_FILE_PREFIX,
                       QuickSetupLog.LOG_FILE_SUFFIX));
     } catch (Throwable t) {
-      System.err.println(
-              ResourceProvider.getInstance().getMsg("error-initializing-log"));
+      System.err.println(INFO_ERROR_INITIALIZING_LOG.get());
       t.printStackTrace();
     }
     new UpgradeLauncher(args).launch();
@@ -86,8 +88,8 @@
   /**
    * {@inheritDoc}
    */
-  protected String getFrameTitle() {
-    return getI18n().getMsg("frame-upgrade-title");
+  protected Message getFrameTitle() {
+    return INFO_FRAME_UPGRADE_TITLE.get();
   }
 
   /**
@@ -128,7 +130,7 @@
    * {@inheritDoc}
    */
   protected void willLaunchGui() {
-    System.out.println(getMsg("upgrade-launcher-launching-gui"));
+    System.out.println(INFO_UPGRADE_LAUNCHER_LAUNCHING_GUI.get());
     System.setProperty("org.opends.quicksetup.Application.class",
             "org.opends.quicksetup.upgrader.Upgrader");
   }
@@ -139,12 +141,13 @@
   protected void guiLaunchFailed(String logFilePath) {
     if (logFilePath != null)
     {
-      System.err.println(getMsg("upgrade-launcher-gui-launched-failed-details",
-          logFilePath));
+      System.err.println(
+              INFO_UPGRADE_LAUNCHER_GUI_LAUNCHED_FAILED_DETAILS.get(
+                      logFilePath));
     }
     else
     {
-      System.err.println(getMsg("upgrade-launcher-gui-launched-failed"));
+      System.err.println(INFO_UPGRADE_LAUNCHER_GUI_LAUNCHED_FAILED.get());
     }
   }
 
@@ -172,7 +175,7 @@
     System.setProperty(ServerConstants.PROPERTY_SCRIPT_NAME, scriptName);
 
     argParser = new ArgumentParser(getClass().getName(),
-        getI18n().getMsg("upgrade-launcher-usage-description"), false);
+        INFO_UPGRADE_LAUNCHER_USAGE_DESCRIPTION.get(), false);
     BooleanArgument showUsage;
     FileBasedArgument file;
     BooleanArgument silent;
@@ -185,23 +188,23 @@
               FILE_OPTION_LONG,
               false, false,
               "{file}",
-              null, null, MSGID_UPGRADE_DESCRIPTION_FILE);
+              null, null, INFO_UPGRADE_DESCRIPTION_FILE.get());
       argParser.addArgument(file);
       interactive = new BooleanArgument(
           CliApplicationHelper.INTERACTIVE_OPTION_LONG,
           CliApplicationHelper.INTERACTIVE_OPTION_SHORT,
           CliApplicationHelper.INTERACTIVE_OPTION_LONG,
-          MSGID_UPGRADE_DESCRIPTION_INTERACTIVE);
+          INFO_UPGRADE_DESCRIPTION_INTERACTIVE.get());
       argParser.addArgument(interactive);
       silent = new BooleanArgument(
           CliApplicationHelper.SILENT_OPTION_LONG,
           CliApplicationHelper.SILENT_OPTION_SHORT,
           CliApplicationHelper.SILENT_OPTION_LONG,
-          MSGID_UPGRADE_DESCRIPTION_SILENT);
+          INFO_UPGRADE_DESCRIPTION_SILENT.get());
       argParser.addArgument(silent);
       showUsage = new BooleanArgument("showusage", OPTION_SHORT_HELP,
         OPTION_LONG_HELP,
-        MSGID_DESCRIPTION_USAGE);
+        INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeProgressStep.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeProgressStep.java
index dead65a..a944688 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeProgressStep.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeProgressStep.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.upgrader;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.ProgressStep;
 
 /**
@@ -34,61 +37,63 @@
  */
 enum UpgradeProgressStep implements ProgressStep {
 
-  NOT_STARTED("summary-upgrade-not-started", 0),
+  NOT_STARTED(INFO_SUMMARY_UPGRADE_NOT_STARTED.get(), 0),
 
-  DOWNLOADING("summary-upgrade-downloading", 10),
+  DOWNLOADING(INFO_SUMMARY_UPGRADE_DOWNLOADING.get(), 10),
 
-  EXTRACTING("summary-upgrade-extracting", 20),
+  EXTRACTING(INFO_SUMMARY_UPGRADE_EXTRACTING.get(), 20),
 
-  INITIALIZING("summary-upgrade-initializing", 30),
+  INITIALIZING(INFO_SUMMARY_UPGRADE_INITIALIZING.get(), 30),
 
-  CHECK_SERVER_HEALTH("summary-upgrade-check-server-health", 35),
+  CHECK_SERVER_HEALTH(INFO_SUMMARY_UPGRADE_CHECK_SERVER_HEALTH.get(), 35),
 
   CALCULATING_SCHEMA_CUSTOMIZATIONS(
-          "summary-upgrade-calculating-schema-customization", 40),
+          INFO_SUMMARY_UPGRADE_CALCULATING_SCHEMA_CUSTOMIZATION.get(), 40),
 
   CALCULATING_CONFIGURATION_CUSTOMIZATIONS(
-          "summary-upgrade-calculating-config-customization", 48),
+          INFO_SUMMARY_UPGRADE_CALCULATING_CONFIG_CUSTOMIZATION.get(), 48),
 
-  BACKING_UP_DATABASES("summary-upgrade-backing-up-db", 50),
+  BACKING_UP_DATABASES(INFO_SUMMARY_UPGRADE_BACKING_UP_DB.get(), 50),
 
-  BACKING_UP_FILESYSTEM("summary-upgrade-backing-up-files",52),
+  BACKING_UP_FILESYSTEM(INFO_SUMMARY_UPGRADE_BACKING_UP_FILES.get(), 52),
 
-  UPGRADING_COMPONENTS("summary-upgrade-upgrading-components", 60),
+  UPGRADING_COMPONENTS(INFO_SUMMARY_UPGRADE_UPGRADING_COMPONENTS.get(), 60),
 
-  PREPARING_CUSTOMIZATIONS("summary-upgrade-preparing-customizations", 65),
+  PREPARING_CUSTOMIZATIONS(
+          INFO_SUMMARY_UPGRADE_PREPARING_CUSTOMIZATIONS.get(), 65),
 
   APPLYING_SCHEMA_CUSTOMIZATIONS(
-          "summary-upgrade-applying-schema-customization", 70),
+          INFO_SUMMARY_UPGRADE_APPLYING_SCHEMA_CUSTOMIZATION.get(), 70),
 
   APPLYING_CONFIGURATION_CUSTOMIZATIONS(
-          "summary-upgrade-applying-config-customization", 75),
+          INFO_SUMMARY_UPGRADE_APPLYING_CONFIG_CUSTOMIZATION.get(), 75),
 
-  VERIFYING("summary-upgrade-verifying", 80),
+  VERIFYING(INFO_SUMMARY_UPGRADE_VERIFYING.get(), 80),
 
-  STARTING_SERVER("summary-starting", 90),
+  STARTING_SERVER(INFO_SUMMARY_STARTING.get(), 90),
 
-  STOPPING_SERVER("summary-stopping", 90),
+  STOPPING_SERVER(INFO_SUMMARY_STOPPING.get(), 90),
 
-  RECORDING_HISTORY("summary-upgrade-history", 97),
+  RECORDING_HISTORY(INFO_SUMMARY_UPGRADE_HISTORY.get(), 97),
 
-  CLEANUP("summary-upgrade-cleanup", 99),
+  CLEANUP(INFO_SUMMARY_UPGRADE_CLEANUP.get(), 99),
 
-  ABORT("summary-upgrade-abort", 99),
+  ABORT(INFO_SUMMARY_UPGRADE_ABORT.get(), 99),
 
-  FINISHED_WITH_ERRORS("summary-upgrade-finished-with-errors", 100),
+  FINISHED_WITH_ERRORS(INFO_SUMMARY_UPGRADE_FINISHED_WITH_ERRORS.get(), 100),
 
-  FINISHED_WITH_WARNINGS("summary-upgrade-finished-with-warnings", 100),
+  FINISHED_WITH_WARNINGS(
+          INFO_SUMMARY_UPGRADE_FINISHED_WITH_WARNINGS.get(), 100),
 
-  FINISHED_CANCELED("summary-upgrade-finished-canceled", 100),
+  FINISHED_CANCELED(INFO_SUMMARY_UPGRADE_FINISHED_CANCELED.get(), 100),
 
-  FINISHED("summary-upgrade-finished-successfully", 100);
+  FINISHED(INFO_SUMMARY_UPGRADE_FINISHED_SUCCESSFULLY.get("",""), 100);
 
-  private String summaryMsgKey;
+  private Message summaryMsg;
   private int progress;
 
-  private UpgradeProgressStep(String summaryMsgKey, int progress) {
-    this.summaryMsgKey = summaryMsgKey;
+  private UpgradeProgressStep(Message summaryMsg, int progress) {
+    this.summaryMsg = summaryMsg;
     this.progress = progress;
   }
 
@@ -97,8 +102,8 @@
    *
    * @return String representing key for access summary in resource bundle
    */
-  public String getSummaryMesssageKey() {
-    return summaryMsgKey;
+  public Message getSummaryMesssage() {
+    return summaryMsg;
   }
 
   /**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeWizardStep.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeWizardStep.java
index b29db64..94dcff5 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeWizardStep.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgradeWizardStep.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.upgrader;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.WizardStep;
 
 /**
@@ -37,31 +40,31 @@
   /**
    * The welcome step.
    */
-  WELCOME("welcome-step"),
+  WELCOME(INFO_WELCOME_STEP.get()),
   /**
    * The welcome step.
    */
-  REVIEW("review-step"),
+  REVIEW(INFO_REVIEW_STEP.get()),
   /**
    * The progress step.
    */
-  PROGRESS("progress-step"),
+  PROGRESS(INFO_PROGRESS_STEP.get()),
   /**
    * The finished step.
    */
-  FINISHED("finished-step");
+  FINISHED(INFO_FINISHED_STEP.get());
 
-  private String msgKey;
+  private Message msg;
 
-  private UpgradeWizardStep(String msgKey) {
-    this.msgKey = msgKey;
+  private UpgradeWizardStep(Message msg) {
+    this.msg = msg;
   }
 
   /**
    * {@inheritDoc}
    */
-  public String getMessageKey() {
-    return msgKey;
+  public Message getDisplayMessage() {
+    return msg;
   }
 
   /**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
index 9f69adb..549819d 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
@@ -29,6 +29,9 @@
 
 import org.opends.quicksetup.CliApplication;
 import static org.opends.quicksetup.Installation.*;
+import static org.opends.messages.QuickSetupMessages.*;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 import org.opends.quicksetup.ApplicationReturnCode;
 import org.opends.quicksetup.WizardStep;
@@ -44,7 +47,7 @@
 import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.Launcher;
 import org.opends.quicksetup.HistoricalRecord;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.quicksetup.webstart.WebStartDownloader;
 import org.opends.quicksetup.util.Utils;
 import org.opends.quicksetup.util.ZipExtractor;
@@ -193,8 +196,7 @@
                         UpgradeLauncher.LOG_FILE_PREFIX,
                         QuickSetupLog.LOG_FILE_SUFFIX));
     } catch (IOException e) {
-      System.err.println(
-              ResourceProvider.getInstance().getMsg("error-initializing-log"));
+      System.err.println(INFO_ERROR_INITIALIZING_LOG.get());
       e.printStackTrace();
     }
 
@@ -214,8 +216,8 @@
   /**
    * {@inheritDoc}
    */
-  public String getFrameTitle() {
-    return getMsg("frame-upgrade-title");
+  public Message getFrameTitle() {
+    return INFO_FRAME_UPGRADE_TITLE.get();
   }
 
   /**
@@ -334,8 +336,8 @@
   /**
    * {@inheritDoc}
    */
-  public String getSummary(ProgressStep step) {
-    String txt;
+  public Message getSummary(ProgressStep step) {
+    Message txt;
     if (step == UpgradeProgressStep.FINISHED) {
       txt = getFinalSuccessMessage();
     } else if (step == UpgradeProgressStep.FINISHED_CANCELED) {
@@ -346,7 +348,7 @@
       txt = getFinalWarningMessage();
     }
     else {
-      txt = getMsg(((UpgradeProgressStep) step).getSummaryMesssageKey());
+      txt = (((UpgradeProgressStep) step).getSummaryMesssage());
     }
     return txt;
   }
@@ -445,15 +447,15 @@
   /**
    * {@inheritDoc}
    */
-  public String getFinishButtonToolTipKey() {
-    return "finish-button-upgrade-tooltip";
+  public Message getFinishButtonToolTip() {
+    return INFO_FINISH_BUTTON_UPGRADE_TOOLTIP.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  public String getQuitButtonToolTipKey() {
-    return "quit-button-upgrade-tooltip";
+  public Message getQuitButtonToolTip() {
+    return INFO_QUIT_BUTTON_UPGRADE_TOOLTIP.get();
   }
 
   /**
@@ -474,8 +476,8 @@
    */
   public boolean confirmCancel(QuickSetup qs) {
     return qs.displayConfirmation(
-            getMsg("confirm-cancel-upgrade-msg"),
-            getMsg("confirm-cancel-upgrade-title"));
+            INFO_CONFIRM_CANCEL_UPGRADE_MSG.get(),
+            INFO_CONFIRM_CANCEL_UPGRADE_TITLE.get());
   }
 
   /**
@@ -508,8 +510,9 @@
               "Cannot click on quit from progress step");
     } else if (isFinished()) {
       qs.quit();
-    } else if (qs.displayConfirmation(getMsg("confirm-quit-upgrade-msg"),
-            getMsg("confirm-quit-upgrade-title"))) {
+    } else if (qs.displayConfirmation(
+            INFO_CONFIRM_QUIT_UPGRADE_MSG.get(),
+            INFO_CONFIRM_QUIT_UPGRADE_TITLE.get())) {
       qs.quit();
     }
   }
@@ -519,7 +522,7 @@
    */
   public void updateUserData(WizardStep cStep, QuickSetup qs)
           throws UserDataException {
-    List<String> errorMsgs = new ArrayList<String>();
+    List<Message> errorMsgs = new ArrayList<Message>();
     UpgradeUserData uud = getUpgradeUserData();
     if (cStep == UpgradeWizardStep.WELCOME) {
 
@@ -531,7 +534,7 @@
                 qs.getFieldStringValue(FieldName.SERVER_TO_UPGRADE_LOCATION);
         if ((serverLocationString == null) ||
                 ("".equals(serverLocationString.trim()))) {
-          errorMsgs.add(getMsg("empty-server-location"));
+          errorMsgs.add(INFO_EMPTY_SERVER_LOCATION.get());
           qs.displayFieldInvalid(FieldName.SERVER_TO_UPGRADE_LOCATION, true);
         } else {
           try {
@@ -558,7 +561,7 @@
           } catch (IllegalArgumentException iae) {
             LOG.log(Level.INFO,
                     "illegal OpenDS installation directory selected", iae);
-            errorMsgs.add(getMsg("error-invalid-server-location",
+            errorMsgs.add(INFO_ERROR_INVALID_SERVER_LOCATION.get(
                     serverLocationString));
             qs.displayFieldInvalid(FieldName.SERVER_TO_UPGRADE_LOCATION, true);
           }
@@ -575,7 +578,7 @@
 
     if (errorMsgs.size() > 0) {
       throw new UserDataException(UpgradeWizardStep.WELCOME,
-              Utils.getStringFromCollection(errorMsgs, "\n"));
+              Utils.getMessageFromCollection(errorMsgs, "\n"));
     }
 
   }
@@ -645,12 +648,10 @@
         try {
           setCurrentProgressStep(UpgradeProgressStep.EXTRACTING);
           extractor.extract(getStageDirectory());
-          notifyListeners(formatter.getFormattedDone() +
-                  formatter.getLineBreak());
+          notifyListeners(getFormattedDoneWithLineBreak());
           LOG.log(Level.INFO, "extraction finished");
         } catch (ApplicationException e) {
-          notifyListeners(formatter.getFormattedError() +
-                  formatter.getLineBreak());
+          notifyListeners(getFormattedErrorWithLineBreak());
           LOG.log(Level.INFO, "Error extracting build file", e);
           throw e;
         }
@@ -663,12 +664,10 @@
         LOG.log(Level.INFO, "initializing upgrade");
         setCurrentProgressStep(UpgradeProgressStep.INITIALIZING);
         initialize();
-        notifyListeners(formatter.getFormattedDone() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedDoneWithLineBreak());
         LOG.log(Level.INFO, "initialization finished");
       } catch (ApplicationException e) {
-        notifyListeners(formatter.getFormattedError() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedErrorWithLineBreak());
         LOG.log(Level.INFO, "Error initializing upgrader", e);
         throw e;
       }
@@ -684,12 +683,10 @@
         setCurrentProgressStep(
                 UpgradeProgressStep.CALCULATING_SCHEMA_CUSTOMIZATIONS);
         migration.calculateSchemaCustomizations();
-        notifyListeners(formatter.getFormattedDone() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedDoneWithLineBreak());
         LOG.log(Level.INFO, "check for schema customizations finished");
       } catch (ApplicationException e) {
-        notifyListeners(formatter.getFormattedError() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedErrorWithLineBreak());
         LOG.log(Level.INFO, "Error calculating schema customizations", e);
         throw e;
       }
@@ -701,12 +698,10 @@
         setCurrentProgressStep(
                 UpgradeProgressStep.CALCULATING_CONFIGURATION_CUSTOMIZATIONS);
         migration.calculateConfigCustomizations();
-        notifyListeners(formatter.getFormattedDone() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedDoneWithLineBreak());
         LOG.log(Level.INFO, "check for config customizations finished");
       } catch (ApplicationException e) {
-        notifyListeners(formatter.getFormattedError() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedErrorWithLineBreak());
         LOG.log(Level.INFO,
                 "Error calculating config customizations", e);
         throw e;
@@ -719,12 +714,10 @@
           LOG.log(Level.INFO, "backing up databases");
           setCurrentProgressStep(UpgradeProgressStep.BACKING_UP_DATABASES);
           backupDatabases();
-          notifyListeners(formatter.getFormattedDone() +
-                  formatter.getLineBreak());
+          notifyListeners(getFormattedDoneWithLineBreak());
           LOG.log(Level.INFO, "database backup finished");
         } catch (ApplicationException e) {
-          notifyListeners(formatter.getFormattedError() +
-                  formatter.getLineBreak());
+          notifyListeners(getFormattedErrorWithLineBreak());
           LOG.log(Level.INFO, "Error backing up databases", e);
           throw e;
         }
@@ -736,12 +729,10 @@
         LOG.log(Level.INFO, "backing up filesystem");
         setCurrentProgressStep(UpgradeProgressStep.BACKING_UP_FILESYSTEM);
         backupFilesytem();
-        notifyListeners(formatter.getFormattedDone() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedDoneWithLineBreak());
         LOG.log(Level.INFO, "filesystem backup finished");
       } catch (ApplicationException e) {
-        notifyListeners(formatter.getFormattedError() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedErrorWithLineBreak());
         LOG.log(Level.INFO, "Error backing up files", e);
         throw e;
       }
@@ -754,12 +745,10 @@
                 UpgradeProgressStep.UPGRADING_COMPONENTS);
         upgradeComponents();
         updateConfigDirectory();
-        notifyListeners(formatter.getFormattedDone() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedDoneWithLineBreak());
         LOG.log(Level.INFO, "component upgrade finished");
       } catch (ApplicationException e) {
-        notifyListeners(formatter.getFormattedError() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedErrorWithLineBreak());
         LOG.log(Level.INFO,
                 "Error upgrading components", e);
         throw e;
@@ -786,17 +775,15 @@
           InProcessServerController.disableConnectionHandlers(true);
           ipsc.startServer();
           LOG.log(Level.INFO, "start server finished");
-          notifyListeners(formatter.getFormattedDone() +
-                  formatter.getLineBreak());
+          notifyListeners(getFormattedDoneWithLineBreak());
         } catch (Exception e) {
-          notifyListeners(formatter.getFormattedError() +
-                  formatter.getLineBreak());
+          notifyListeners(getFormattedErrorWithLineBreak());
           LOG.log(Level.INFO,
                   "Error starting server in order to apply custom" +
                           "schema and/or configuration", e);
           throw new ApplicationException(
               ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
-              getMsg("error-starting-server"), e);
+              INFO_ERROR_STARTING_SERVER.get(), e);
         }
 
         checkAbort();
@@ -807,12 +794,10 @@
             setCurrentProgressStep(
                     UpgradeProgressStep.APPLYING_SCHEMA_CUSTOMIZATIONS);
             migration.migrateSchema();
-            notifyListeners(formatter.getFormattedDone() +
-                    formatter.getLineBreak());
+            notifyListeners(getFormattedDoneWithLineBreak());
             LOG.log(Level.INFO, "custom schema application finished");
           } catch (ApplicationException e) {
-            notifyListeners(formatter.getFormattedError() +
-                    formatter.getLineBreak());
+            notifyListeners(getFormattedErrorWithLineBreak());
             LOG.log(Level.INFO,
                     "Error applying schema customizations", e);
             throw e;
@@ -827,12 +812,10 @@
             setCurrentProgressStep(
                     UpgradeProgressStep.APPLYING_CONFIGURATION_CUSTOMIZATIONS);
             migration.migrateConfiguration();
-            notifyListeners(formatter.getFormattedDone() +
-                    formatter.getLineBreak());
+            notifyListeners(getFormattedDoneWithLineBreak());
             LOG.log(Level.INFO, "custom config application finished");
           } catch (ApplicationException e) {
-            notifyListeners(formatter.getFormattedError() +
-                    formatter.getLineBreak());
+            notifyListeners(getFormattedErrorWithLineBreak());
             LOG.log(Level.INFO,
                     "Error applying configuration customizations", e);
             throw e;
@@ -851,7 +834,7 @@
         } catch (Throwable t) {
           LOG.log(Level.INFO, "Error stopping server", t);
           throw new ApplicationException(ApplicationReturnCode.ReturnCode.BUG,
-                  getMsg("error-stopping-server"), t);
+                  INFO_ERROR_STOPPING_SERVER.get(), t);
         }
       }
 
@@ -864,7 +847,7 @@
               System.getProperty(SYS_PROP_CREATE_ERROR))) {
         LOG.log(Level.WARNING, "creating artificial error");
         throw new ApplicationException(
-                null, getMsg("error-artificial"), null);
+                null, INFO_ERROR_ARTIFICIAL.get(), null);
       }
 
       LOG.log(Level.INFO, "verifying upgrade");
@@ -872,27 +855,26 @@
       Installation installation = getInstallation();
       ServerHealthChecker healthChecker = new ServerHealthChecker(installation);
       healthChecker.checkServer();
-      List<String> errors = healthChecker.getProblemMessages();
+      List<Message> errors = healthChecker.getProblemMessages();
 
       // For testing
       if ("true".equals(
               System.getProperty(SYS_PROP_CREATE_VERIFY_ERROR))) {
         LOG.log(Level.WARNING, "creating artificial verification error");
         if (errors == null || errors.size() == 0) {
-          errors = new ArrayList<String>();
-          errors.add("Artificial verification error for testing");
+          errors = new ArrayList<Message>();
+          errors.add(Message.raw("Artificial verification error for testing"));
         }
       }
 
       if (errors != null && errors.size() > 0) {
-        notifyListeners(formatter.getFormattedError() +
-                formatter.getLineBreak());
-        String formattedDetails =
-                Utils.listToString(errors,
+        notifyListeners(getFormattedErrorWithLineBreak());
+        Message formattedDetails =
+                Utils.listToMessage(errors,
                         Constants.LINE_SEPARATOR, /*bullet=*/"\u2022 ", "");
         ApplicationException ae = new ApplicationException(
                 ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
-                getMsg("error-upgraded-server-starts-with-errors",
+                INFO_ERROR_UPGRADED_SERVER_STARTS_WITH_ERRORS.get(
                         Constants.LINE_SEPARATOR + formattedDetails), null);
         UserInteraction ui = userInteraction();
         if (ui != null) {
@@ -904,16 +886,16 @@
           runWarning = ae;
 
           // Ask the user if they would like to continue.
-          String cancel = getMsg("upgrade-verification-failure-cancel");
+          Message cancel = INFO_UPGRADE_VERIFICATION_FAILURE_CANCEL.get();
           if (cancel.equals(ui.confirm(
-                  getMsg("upgrade-verification-failure-title"),
-                  getMsg("upgrade-verification-failure-prompt"),
+                  INFO_UPGRADE_VERIFICATION_FAILURE_TITLE.get(),
+                  INFO_UPGRADE_VERIFICATION_FAILURE_PROMPT.get(),
                   formattedDetails,
-                  getMsg("upgrade-verification-failure-title"),
+                  INFO_UPGRADE_VERIFICATION_FAILURE_TITLE.get(),
                   UserInteraction.MessageType.ERROR,
-                  new String[]{getMsg("continue-button-label"), cancel},
+                  new Message[]{INFO_CONTINUE_BUTTON_LABEL.get(), cancel},
                   cancel,
-                  getMsg("upgrade-verification-failure-view-details")))) {
+                  INFO_UPGRADE_VERIFICATION_FAILURE_VIEW_DETAILS.get()))) {
             // User indicated cancel
             cancel();
             checkAbort();
@@ -927,8 +909,7 @@
           throw ae;
         }
       } else {
-        notifyListeners(formatter.getFormattedDone() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedDoneWithLineBreak());
       }
       LOG.log(Level.INFO, "upgrade verification complete");
 
@@ -948,15 +929,13 @@
             if (port != -1 && !Utils.canUseAsPort(port)) {
               throw new ApplicationException(
                   ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
-                      getMsg("error-port-in-use", Integer.toString(port)),
+                      INFO_ERROR_PORT_IN_USE.get(Integer.toString(port)),
                       null);
             }
             control.startServer(true);
-            notifyListeners(formatter.getFormattedDone() +
-                    formatter.getLineBreak());
+            notifyListeners(getFormattedDoneWithLineBreak());
           } catch (ApplicationException e) {
-            notifyListeners(formatter.getFormattedError() +
-                    formatter.getLineBreak());
+            notifyListeners(getFormattedErrorWithLineBreak());
             LOG.log(Level.INFO, "error starting server");
             this.runWarning = e;
           }
@@ -965,11 +944,9 @@
             LOG.log(Level.INFO, "stopping server");
             setCurrentProgressStep(UpgradeProgressStep.STOPPING_SERVER);
             control.stopServer(true);
-            notifyListeners(formatter.getFormattedDone() +
-                    formatter.getLineBreak());
+            notifyListeners(getFormattedDoneWithLineBreak());
           } catch (ApplicationException e) {
-            notifyListeners(formatter.getFormattedError() +
-                    formatter.getLineBreak());
+            notifyListeners(getFormattedErrorWithLineBreak());
             LOG.log(Level.INFO, "error stopping server");
             this.runWarning = e;
           }
@@ -978,7 +955,7 @@
         LOG.log(Level.INFO, "error determining if server running");
         this.runWarning = new ApplicationException(
             ApplicationReturnCode.ReturnCode.TOOL_ERROR,
-                getMsg("error-server-status"), ioe);
+                INFO_ERROR_SERVER_STATUS.get(), ioe);
       }
 
     } catch (ApplicationException ae) {
@@ -994,7 +971,7 @@
     } catch (Throwable t) {
       this.runError =
               new ApplicationException(ApplicationReturnCode.ReturnCode.BUG,
-                      getMsg("bug-msg"), t);
+                      INFO_BUG_MSG.get(), t);
     } finally {
       try {
         HistoricalRecord.Status status;
@@ -1014,16 +991,14 @@
           ProgressStep lastProgressStep = getCurrentProgressStep();
           setCurrentProgressStep(UpgradeProgressStep.ABORT);
           abort(lastProgressStep);
-          notifyListeners(formatter.getFormattedDone() +
-                  formatter.getLineBreak());
+          notifyListeners(getFormattedDoneWithLineBreak());
           LOG.log(Level.INFO, "cancelation complete");
         }
 
         LOG.log(Level.INFO, "cleaning up after upgrade");
         setCurrentProgressStep(UpgradeProgressStep.CLEANUP);
         cleanup();
-        notifyListeners(formatter.getFormattedDone() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedDoneWithLineBreak());
         LOG.log(Level.INFO, "clean up complete");
 
 
@@ -1035,15 +1010,16 @@
                 getStagedBuildInformation(),
                 status,
                 note);
-        notifyListeners(formatter.getFormattedDone() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedDoneWithLineBreak());
         LOG.log(Level.INFO, "history recorded");
-        notifyListeners(getMsg("general-see-for-history",
-                Utils.getPath(getInstallation().getHistoryLogFile())) +
-                formatter.getLineBreak());
+        notifyListeners(
+                new MessageBuilder().append(
+                  INFO_GENERAL_SEE_FOR_HISTORY.get(
+                    Utils.getPath(getInstallation().getHistoryLogFile())))
+                .append(formatter.getLineBreak())
+                .toMessage());
       } catch (ApplicationException e) {
-        notifyListeners(formatter.getFormattedError() +
-                formatter.getLineBreak());
+        notifyListeners(getFormattedErrorWithLineBreak());
         LOG.log(Level.INFO, "Error cleaning up after upgrade.", e);
       }
 
@@ -1072,15 +1048,14 @@
           this.currentProgressStep = UpgradeProgressStep.FINISHED_WITH_ERRORS;
           notifyListeners(formatter.getFormattedError(runError, true));
         } else {
-          notifyListeners(formatter.getFormattedError(runError, true) +
-                          formatter.getLineBreak());
-          notifyListeners(formatter.getLineBreak());
+          notifyListeners(getFormattedErrorWithLineBreak(runError, true));
+          notifyListeners(getLineBreak());
           setCurrentProgressStep(UpgradeProgressStep.FINISHED_WITH_ERRORS);
-          notifyListeners(formatter.getLineBreak());
+          notifyListeners(getLineBreak());
         }
       } else if (runWarning != null) {
         LOG.log(Level.INFO, "upgrade completed with warnings");
-        String warningText = runWarning.getLocalizedMessage();
+        Message warningText = runWarning.getMessageObject();
 
         // By design, the warnings are written as errors to the details section
         // as errors.  Warning markup is used surrounding the main message
@@ -1088,13 +1063,12 @@
         if (!Utils.isCli()) {
           notifyListenersOfLog();
           this.currentProgressStep = UpgradeProgressStep.FINISHED_WITH_WARNINGS;
-          notifyListeners(formatter.getFormattedError(warningText, true));
+          notifyListeners(getFormattedError(warningText, true));
         } else {
-          notifyListeners(formatter.getFormattedError(warningText, true) +
-                          formatter.getLineBreak());
-          notifyListeners(formatter.getLineBreak());
+          notifyListeners(getFormattedErrorWithLineBreak(warningText, true));
+          notifyListeners(getLineBreak());
           setCurrentProgressStep(UpgradeProgressStep.FINISHED_WITH_WARNINGS);
-          notifyListeners(formatter.getLineBreak());
+          notifyListeners(getLineBreak());
         }
 
       } else {
@@ -1114,7 +1088,7 @@
   private void checkAbort() throws ApplicationException {
     if (abort) throw new ApplicationException(
         ApplicationReturnCode.ReturnCode.CANCELLED,
-            getMsg("upgrade-canceled"), null);
+            INFO_UPGRADE_CANCELED.get(), null);
   }
 
   /**
@@ -1160,8 +1134,7 @@
             fm.move(f, root, null);
           } catch (Throwable t) {
             restoreError = true;
-            notifyListeners(getMsg("error-restoring-file",
-                    Utils.getPath(f),
+            notifyListeners(INFO_ERROR_RESTORING_FILE.get(Utils.getPath(f),
                     Utils.getPath(root)));
           }
         }
@@ -1204,7 +1177,7 @@
 
     } catch (IOException e) {
       throw ApplicationException.createFileSystemException(
-              getMsg("error-upgrading-components"), e);
+              INFO_ERROR_UPGRADING_COMPONENTS.get(), e);
     }
   }
 
@@ -1250,7 +1223,7 @@
     } catch (Exception e) {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
-              getMsg("error-backup-filesystem"),
+              INFO_ERROR_BACKUP_FILESYSTEM.get(),
               e);
     }
   }
@@ -1263,7 +1236,7 @@
       if (ret != 0) {
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.TOOL_ERROR,
-                getMsg("error-backup-db-tool-return-code",
+                INFO_ERROR_BACKUP_DB_TOOL_RETURN_CODE.get(
                         Integer.toString(ret)),
                 null);
 
@@ -1273,7 +1246,7 @@
     } catch (Exception e) {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.TOOL_ERROR,
-              getMsg("error-backup-db"), e);
+              INFO_ERROR_BACKUP_DB.get(), e);
     }
   }
 
@@ -1298,7 +1271,7 @@
 
     } catch (IOException e) {
       throw ApplicationException.createFileSystemException(
-              getMsg("error-deleting-stage-directory",
+              INFO_ERROR_DELETING_STAGE_DIRECTORY.get(
                       Utils.getPath(stagingDir)), e);
     }
   }
@@ -1320,7 +1293,7 @@
     } catch (Exception e) {
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
-              getMsg("error-initializing-upgrade"), e);
+              INFO_ERROR_INITIALIZING_UPGRADE.get(), e);
     }
   }
 
@@ -1341,7 +1314,7 @@
       LOG.log(Level.INFO, "error getting build information for " +
               "current installation", e);
       throw ApplicationException.createFileSystemException(
-              getMsg("error-determining-current-build"), e);
+              INFO_ERROR_DETERMINING_CURRENT_BUILD.get(), e);
     }
 
     try {
@@ -1352,7 +1325,7 @@
       LOG.log(Level.INFO, "error getting build information for " +
               "staged installation", e);
       throw ApplicationException.createFileSystemException(
-              getMsg("error-determining-upgrade-build"), e);
+              INFO_ERROR_DETERMINING_UPGRADE_BUILD.get(), e);
     }
 
     UpgradeIssueNotifier uo = new UpgradeIssueNotifier(
@@ -1375,7 +1348,7 @@
         Installation.validateRootDirectory(stageDir);
         stagedInstallation = new Installation(getStageDirectory());
       } catch (IllegalArgumentException e) {
-        String msg = getMsg("error-bad-stage-directory",
+        Message msg = INFO_ERROR_BAD_STAGE_DIRECTORY.get(
                 Utils.getPath(getStageDirectory()));
         throw ApplicationException.createFileSystemException(msg, e);
       }
@@ -1414,7 +1387,7 @@
   private void setCurrentProgressStep(UpgradeProgressStep step) {
     this.currentProgressStep = step;
     int progress = step.getProgress();
-    String msg = getSummary(step);
+    Message msg = getSummary(step);
     notifyListeners(progress, msg, getFormattedProgress(msg));
   }
 
@@ -1425,8 +1398,8 @@
     return cliHelper;
   }
 
-  private String getFinalSuccessMessage() {
-    String txt;
+  private Message getFinalSuccessMessage() {
+    Message txt;
     String installPath = Utils.getPath(getInstallation().getRootDirectory());
     String newVersion;
     try {
@@ -1434,53 +1407,53 @@
       if (bi != null) {
         newVersion = bi.toString();
       } else {
-        newVersion = getMsg("upgrade-build-id-unknown");
+        newVersion = INFO_UPGRADE_BUILD_ID_UNKNOWN.get().toString();
       }
     } catch (ApplicationException e) {
-      newVersion = getMsg("upgrade-build-id-unknown");
+      newVersion = INFO_UPGRADE_BUILD_ID_UNKNOWN.get().toString();
     }
-    String[] args = {
-            formatter.getFormattedText(installPath),
-            newVersion};
     if (Utils.isCli()) {
-      txt = getMsg("summary-upgrade-finished-successfully-cli", args);
+      txt = INFO_SUMMARY_UPGRADE_FINISHED_SUCCESSFULLY_CLI.get(
+              formatter.getFormattedText(Message.raw(installPath)),
+              newVersion);
     } else {
       txt = getFormattedSuccess(
-              getMsg("summary-upgrade-finished-successfully",
-                      args));
+              INFO_SUMMARY_UPGRADE_FINISHED_SUCCESSFULLY.get(
+                      formatter.getFormattedText(Message.raw(installPath)),
+                      newVersion));
     }
     return txt;
   }
 
-  private String getFinalCanceledMessage() {
-    String txt;
+  private Message getFinalCanceledMessage() {
+    Message txt;
     if (Utils.isCli()) {
-      txt = getMsg("summary-upgrade-finished-canceled-cli");
+      txt = INFO_SUMMARY_UPGRADE_FINISHED_CANCELED_CLI.get();
     } else {
       txt = getFormattedSuccess(
-              getMsg("summary-upgrade-finished-canceled"));
+              INFO_SUMMARY_UPGRADE_FINISHED_CANCELED.get());
     }
     return txt;
   }
 
-  private String getFinalErrorMessage() {
-    String txt;
+  private Message getFinalErrorMessage() {
+    Message txt;
     if (Utils.isCli()) {
-      txt = getMsg("summary-upgrade-finished-with-errors-cli");
+      txt = INFO_SUMMARY_UPGRADE_FINISHED_WITH_ERRORS_CLI.get();
     } else {
       txt = getFormattedError(
-              getMsg("summary-upgrade-finished-with-errors"));
+              INFO_SUMMARY_UPGRADE_FINISHED_WITH_ERRORS.get());
     }
     return txt;
   }
 
-  private String getFinalWarningMessage() {
-    String txt;
+  private Message getFinalWarningMessage() {
+    Message txt;
     if (Utils.isCli()) {
-      txt = getMsg("summary-upgrade-finished-with-warnings-cli");
+      txt = INFO_SUMMARY_UPGRADE_FINISHED_WITH_WARNINGS_CLI.get();
     } else {
       txt = getFormattedWarning(
-              getMsg("summary-upgrade-finished-with-warnings"));
+              INFO_SUMMARY_UPGRADE_FINISHED_WITH_WARNINGS.get());
     }
     return txt;
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgraderCliHelper.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgraderCliHelper.java
index 73fc68f..f853be2 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgraderCliHelper.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/UpgraderCliHelper.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.upgrader;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.CliApplicationHelper;
 import org.opends.quicksetup.UserDataException;
 import org.opends.server.util.args.ArgumentParser;
@@ -66,7 +69,7 @@
       // since this is done by the BuildExtractor
 
     } catch (ArgumentException e) {
-      throw new UserDataException(null, getMsg("error-parsing-options"));
+      throw new UserDataException(null, INFO_ERROR_PARSING_OPTIONS.get());
     }
     return uud;
   }
@@ -75,7 +78,7 @@
 
     // TODO: get rid of this method and user launcher.getArgumentParser
 
-    String toolDescription = getMsg("upgrade-launcher-description");
+    Message toolDescription = INFO_UPGRADE_LAUNCHER_DESCRIPTION.get();
     ArgumentParser argParser = createArgumentParser(
             "org.opends.quicksetup.upgrader.Upgrader",
             toolDescription,
@@ -88,7 +91,7 @@
               new StringArgument("install package file",
                       UpgradeLauncher.FILE_OPTION_SHORT,
                       UpgradeLauncher.FILE_OPTION_LONG,
-                      false, true, "{install package file}", 0);
+                      false, true, "{install package file}", null);
       argParser.addArgument(localInstallPackFileNameArg);
     } catch (ArgumentException e) {
       LOG.log(Level.INFO, "error", e);
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java
index 850ed79..02d32df 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/VersionIssueNotifier.java
@@ -26,13 +26,15 @@
  */
 
 package org.opends.quicksetup.upgrader;
+import org.opends.messages.Message;
 
 import org.opends.quicksetup.BuildInformation;
 import org.opends.quicksetup.ApplicationException;
 import org.opends.quicksetup.UserInteraction;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.server.util.VersionCompatibilityIssue;
 import org.opends.server.util.BuildVersion;
+import static org.opends.messages.QuickSetupMessages.*;
 import static org.opends.server.util.VersionCompatibilityIssue.*;
 
 import java.util.List;
@@ -78,7 +80,7 @@
   protected class Directive {
 
     DirectiveType type;
-    String msg;
+    Message msg;
 
     /**
      * Creates a parameterized instance.
@@ -86,7 +88,7 @@
      * @param type of directive
      * @param localizedMsg for displaying to the user
      */
-    public Directive(DirectiveType type, String localizedMsg) {
+    public Directive(DirectiveType type, Message localizedMsg) {
       this.type = type;
       this.msg = localizedMsg;
     }
@@ -104,7 +106,7 @@
      * @return string message
      */
 
-    public String getMessage() {
+    public Message getMessage() {
       return this.msg;
     }
 
@@ -230,7 +232,7 @@
    * @param cause of issue
    * @return message for presenting to the user
    */
-  protected abstract String getLocalizedDetailMessage(
+  protected abstract Message getLocalizedDetailMessage(
           VersionCompatibilityIssue.Cause cause);
 
   /**
@@ -276,7 +278,7 @@
   protected boolean isNotification(Cause cause) {
     boolean isNotification = false;
     if (cause != null) {
-      String msg = getLocalizedDetailMessage(cause);
+      Message msg = getLocalizedDetailMessage(cause);
       if (msg != null && !isWarning(cause) && !isActionRequired(cause)) {
         isNotification = true;
       }
@@ -290,49 +292,16 @@
    *
    * @return List containing strings representing intruction steps
    */
-  protected List<String> getExportImportInstructions() {
-
-    // Creates the steps by accessing messages starting with
-    // 'oracle-ei-action-step' starting with 'oracle-ei-action-step1'
-    // until there are no more message having
-
-    List<String> instructions = new ArrayList<String>();
-    try {
-      int i = 1;
-      while (true) {
-        String m = getMsg("oracle-ei-action-step" + i++);
-        if (m != null) {
-          instructions.add(m);
-        } else {
-          break;
-        }
-      }
-    } catch (Exception e) {
-      // ignore
-    }
+  protected List<Message> getExportImportInstructions() {
+    List<Message> instructions = new ArrayList<Message>();
+    instructions.add(INFO_ORACLE_EI_ACTION_STEP1.get());
+    instructions.add(INFO_ORACLE_EI_ACTION_STEP2.get());
+    instructions.add(INFO_ORACLE_EI_ACTION_STEP3.get());
+    instructions.add(INFO_ORACLE_EI_ACTION_STEP4.get());
     return instructions;
   }
 
   /**
-   * Returns a localized message for a key value.  In  the properties file we
-   * have something of type:
-   * key=value
-   *
-   * For instance if we pass as key "mykey" and as arguments {"value1"} and
-   * in the properties file we have:
-   * mykey=value with argument {0}.
-   *
-   * This method will return "value with argument value1".
-   * @see org.opends.quicksetup.i18n.ResourceProvider#getMsg(String, String[])
-   * @param key the key in the properties file.
-   * @param args the arguments to be passed to generate the resulting value.
-   * @return the value associated to the key in the properties file.
-   */
-  protected String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
-  /**
    * Converts a set of compatibility issues into a set of set of
    * action oriented issues for directing tool behavior.
    *
@@ -347,7 +316,7 @@
       for (VersionCompatibilityIssue evt : compatibilityIssues) {
         VersionCompatibilityIssue.Cause cause = evt.getCause();
         Set<Effect> effects = cause.getEffects();
-        String msg = getLocalizedDetailMessage(cause);
+        Message msg = getLocalizedDetailMessage(cause);
         if (isUnsupported(cause)) {
           isSupported = false;
           directives.add(new Directive(DirectiveType.NOT_SUPPORTED, msg));
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/BuildListDownloadErrorPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/BuildListDownloadErrorPanel.java
index 96786fb..3d1f387 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/BuildListDownloadErrorPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/BuildListDownloadErrorPanel.java
@@ -27,11 +27,13 @@
 
 package org.opends.quicksetup.upgrader.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.upgrader.RemoteBuildManager;
 import org.opends.quicksetup.ui.CustomHTMLEditorKit;
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.ui.WebProxyDialog;
-import org.opends.quicksetup.i18n.ResourceProvider;
 
 import javax.swing.*;
 import java.awt.*;
@@ -71,22 +73,21 @@
   private void layoutPanel() {
     setLayout(new GridBagLayout());
 
-    String proxyString = getMsg("general-none");
+    String proxyString = INFO_GENERAL_NONE.get().toString();
     Proxy proxy = rbm.getProxy();
     if (proxy != null) {
       SocketAddress addr = proxy.address();
       proxyString = addr.toString();
     }
 
-    String baseContext = getMsg("general-unspecified");
+    String baseContext = INFO_GENERAL_UNSPECIFIED.get().toString();
     URL url = rbm.getBaseContext();
     if (url != null) {
       baseContext = url.toString();
     }
 
-    String html =
-            getMsg("upgrade-choose-version-build-list-error",
-                    baseContext,
+    Message html =
+            INFO_UPGRADE_CHOOSE_VERSION_BUILD_LIST_ERROR.get(baseContext,
                     reason.getLocalizedMessage(),
                     proxyString);
 
@@ -123,14 +124,6 @@
     add(UIFactory.makeHtmlPane(html, ek, UIFactory.INSTRUCTIONS_FONT));
   }
 
-  private String getMsg(String key) {
-    return ResourceProvider.getInstance().getMsg(key);
-  }
-
-  private String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
   /**
    * Displays a dialog prompting the user for proxy information
    * after which applys the new proxy information to the available
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java
index a698a29..b2207b3 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/ChooseVersionPanel.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.upgrader.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.UserData;
 import org.opends.quicksetup.event.BrowseActionListener;
 import org.opends.quicksetup.ui.*;
@@ -150,8 +153,8 @@
     JPanel p = UIFactory.makeJPanel();
 
     LabelFieldDescriptor currentVersionDescriptor = new LabelFieldDescriptor(
-      getMsg("upgrade-review-panel-old-version-label"),
-      getMsg("upgrade-review-panel-old-version-tooltip"),
+      INFO_UPGRADE_REVIEW_PANEL_OLD_VERSION_LABEL.get(),
+      INFO_UPGRADE_REVIEW_PANEL_OLD_VERSION_TOOLTIP.get(),
       LabelFieldDescriptor.FieldType.READ_ONLY,
       LabelFieldDescriptor.LabelType.PRIMARY,
       0
@@ -159,16 +162,16 @@
 
     lblCurrentVersion = UIFactory.makeJLabel(
             UIFactory.IconType.NO_ICON,
-            "", UIFactory.TextStyle.SECONDARY_FIELD_VALID);
+            Message.EMPTY, UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
     rbRemote = UIFactory.makeJRadioButton(
-            getMsg("upgrade-choose-version-remote-label"),
-            getMsg("upgrade-choose-version-remote-tooltip"),
+            INFO_UPGRADE_CHOOSE_VERSION_REMOTE_LABEL.get(),
+            INFO_UPGRADE_CHOOSE_VERSION_REMOTE_TOOLTIP.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
     rbLocal = UIFactory.makeJRadioButton(
-            getMsg("upgrade-choose-version-local-label"),
-            getMsg("upgrade-choose-version-local-tooltip"),
+            INFO_UPGRADE_CHOOSE_VERSION_LOCAL_LABEL.get(),
+            INFO_UPGRADE_CHOOSE_VERSION_LOCAL_TOOLTIP.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
     ButtonGroup grpRemoteLocal = new ButtonGroup();
@@ -184,8 +187,8 @@
     tfFile.setColumns(20);
 
     butBrowse =
-            UIFactory.makeJButton(getMsg("browse-button-label"),
-            getMsg("browse-button-tooltip"));
+            UIFactory.makeJButton(INFO_BROWSE_BUTTON_LABEL.get(),
+              INFO_BROWSE_BUTTON_TOOLTIP.get());
 
     BrowseActionListener l =
             new BrowseActionListener(tfFile,
@@ -194,7 +197,7 @@
     butBrowse.addActionListener(l);
 
     lblFile = UIFactory.makeJLabel(null,
-                    getMsg("upgrade-choose-version-local-path"),
+                    INFO_UPGRADE_CHOOSE_VERSION_LOCAL_PATH.get(),
                     UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
     JPanel pnlBrowse = Utilities.createBrowseButtonPanel(
@@ -295,15 +298,15 @@
   /**
    * {@inheritDoc}
    */
-  protected String getTitle() {
-    return getMsg("upgrade-choose-version-panel-title");
+  protected Message getTitle() {
+    return INFO_UPGRADE_CHOOSE_VERSION_PANEL_TITLE.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions() {
-    return getMsg("upgrade-choose-version-panel-instructions");
+  protected Message getInstructions() {
+    return INFO_UPGRADE_CHOOSE_VERSION_PANEL_INSTRUCTIONS.get();
   }
 
   private RemoteBuildListComboBoxModelCreator getBuildLoader() {
@@ -343,7 +346,8 @@
      * Creates a default instance.
      */
     public BuildListErrorComboBoxRenderer() {
-      super(getMsg("upgrade-choose-version-unable-to-access-build-info"),
+      super(INFO_UPGRADE_CHOOSE_VERSION_UNABLE_TO_ACCESS_BUILD_INFO.get()
+              .toString(),
               UIFactory.getImageIcon(UIFactory.IconType.WARNING),
               SwingConstants.LEFT);
       UIFactory.setTextStyle(this, UIFactory.TextStyle.SECONDARY_STATUS);
@@ -382,7 +386,7 @@
      * Creates a default instance.
      */
     public BuildListLoadingComboBoxRenderer() {
-      super(getMsg("upgrade-choose-version-loading-build-info"),
+      super(INFO_UPGRADE_CHOOSE_VERSION_LOADING_BUILD_INFO.get().toString(),
               UIFactory.getImageIcon(UIFactory.IconType.WAIT_TINY),
               SwingConstants.LEFT);
       UIFactory.setTextStyle(this, UIFactory.TextStyle.SECONDARY_STATUS);
@@ -450,13 +454,13 @@
       } else {
         try {
         String[] options = {
-                getMsg("retry-button-label"),
-                getMsg("close-button-label")
+                INFO_RETRY_BUTTON_LABEL.get().toString(),
+                INFO_CLOSE_BUTTON_LABEL.get().toString()
         };
         int i = JOptionPane.showOptionDialog(getMainWindow(),
                 new BuildListDownloadErrorPanel(rbm,
                         throwable),
-                getMsg("network-error-title"),
+                INFO_NETWORK_ERROR_TITLE.get().toString(),
                 JOptionPane.YES_NO_OPTION,
                 JOptionPane.ERROR_MESSAGE,
                 null,
@@ -504,7 +508,7 @@
     private InputStream getInputStream() throws IOException {
       if (this.in == null) {
         this.in = rbm.getDailyBuildsInputStream(getMainWindow(),
-                getMsg("upgrade-choose-version-reading-build-info"));
+                INFO_UPGRADE_CHOOSE_VERSION_READING_BUILD_INFO.get());
       }
       return this.in;
     }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/UpgraderReviewPanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/UpgraderReviewPanel.java
index 9156deb..454894d 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/UpgraderReviewPanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/UpgraderReviewPanel.java
@@ -27,10 +27,12 @@
 
 package org.opends.quicksetup.upgrader.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.UserData;
 import org.opends.quicksetup.BuildInformation;
 import org.opends.quicksetup.ApplicationException;
-import org.opends.quicksetup.i18n.ResourceProvider;
 import org.opends.quicksetup.ui.FieldName;
 import org.opends.quicksetup.ui.LabelFieldDescriptor;
 import org.opends.quicksetup.ui.ReviewPanel;
@@ -103,15 +105,15 @@
   /**
    * {@inheritDoc}
    */
-  protected String getTitle() {
-    return getMsg("upgrade-review-panel-title");
+  protected Message getTitle() {
+    return INFO_UPGRADE_REVIEW_PANEL_TITLE.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions() {
-    return getMsg("upgrade-review-panel-instructions");
+  protected Message getInstructions() {
+    return INFO_UPGRADE_REVIEW_PANEL_INSTRUCTIONS.get();
   }
 
   /**
@@ -121,24 +123,24 @@
     JPanel p = UIFactory.makeJPanel();
 
     LabelFieldDescriptor serverDescriptor = new LabelFieldDescriptor(
-      getMsg("upgrade-review-panel-server-label"),
-      getMsg("upgrade-review-panel-server-tooltip"),
+      INFO_UPGRADE_REVIEW_PANEL_SERVER_LABEL.get(),
+      INFO_UPGRADE_REVIEW_PANEL_SERVER_TOOLTIP.get(),
       LabelFieldDescriptor.FieldType.READ_ONLY,
       LabelFieldDescriptor.LabelType.PRIMARY,
       0
     );
 
     LabelFieldDescriptor oldVersionDescriptor = new LabelFieldDescriptor(
-      getMsg("upgrade-review-panel-old-version-label"),
-      getMsg("upgrade-review-panel-old-version-tooltip"),
+      INFO_UPGRADE_REVIEW_PANEL_OLD_VERSION_LABEL.get(),
+      INFO_UPGRADE_REVIEW_PANEL_OLD_VERSION_TOOLTIP.get(),
       LabelFieldDescriptor.FieldType.READ_ONLY,
       LabelFieldDescriptor.LabelType.PRIMARY,
       0
     );
 
     LabelFieldDescriptor newVersionDescriptor = new LabelFieldDescriptor(
-      getMsg("upgrade-review-panel-new-version-label"),
-      getMsg("upgrade-review-panel-new-version-tooltip"),
+      INFO_UPGRADE_REVIEW_PANEL_NEW_VERSION_LABEL.get(),
+      INFO_UPGRADE_REVIEW_PANEL_NEW_VERSION_TOOLTIP.get(),
       LabelFieldDescriptor.FieldType.READ_ONLY,
       LabelFieldDescriptor.LabelType.PRIMARY,
       0
@@ -213,8 +215,7 @@
       LOG.log(Level.INFO, "error trying to determine new build string", e);
     }
     if (b == null) {
-      b = ResourceProvider.getInstance().
-              getMsg("upgrade-build-id-unknown");
+      b = INFO_UPGRADE_BUILD_ID_UNKNOWN.get().toString();
     }
     return b;
   }
@@ -227,8 +228,8 @@
     if (checkBox == null)
     {
       checkBox =
-          UIFactory.makeJCheckBox(getMsg("upgrade-review-panel-start-server"),
-              getMsg("start-server-tooltip"), UIFactory.TextStyle.CHECKBOX);
+          UIFactory.makeJCheckBox(INFO_UPGRADE_REVIEW_PANEL_START_SERVER.get(),
+              INFO_START_SERVER_TOOLTIP.get(), UIFactory.TextStyle.CHECKBOX);
       checkBox.setSelected(getApplication().getUserData().getStartServer());
     }
     return checkBox;
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/WelcomePanel.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/WelcomePanel.java
index 1922af2..1d3a3e7 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/WelcomePanel.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/ui/WelcomePanel.java
@@ -27,6 +27,9 @@
 
 package org.opends.quicksetup.upgrader.ui;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.ui.*;
 import org.opends.quicksetup.util.Utils;
 import org.opends.quicksetup.Installation;
@@ -99,22 +102,21 @@
   /**
    * {@inheritDoc}
    */
-  protected String getTitle() {
-    return getMsg("upgrade-welcome-panel-title");
+  protected Message getTitle() {
+    return INFO_UPGRADE_WELCOME_PANEL_TITLE.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  protected String getInstructions() {
+  protected Message getInstructions() {
     /*
      * We can use org.opends.server.util.DynamicConstants without problems as it
      * has been added to quicksetup.jar during build time.
      */
-    return getMsg("upgrade-welcome-panel-webstart-instructions",
-            new String[] {
+    return INFO_UPGRADE_WELCOME_PANEL_WEBSTART_INSTRUCTIONS.get(
                     DynamicConstants.COMPACT_VERSION_STRING,
-                    DynamicConstants.BUILD_ID});
+                    DynamicConstants.BUILD_ID);
   }
 
   /**
@@ -124,22 +126,22 @@
     Component c;
 
     LabelFieldDescriptor serverLocationDescriptor =
-            new LabelFieldDescriptor(getMsg("upgrade-location-label"),
-                    getMsg("upgrade-location-tooltip"),
+            new LabelFieldDescriptor(INFO_UPGRADE_LOCATION_LABEL.get(),
+                    INFO_UPGRADE_LOCATION_TOOLTIP.get(),
                     LabelFieldDescriptor.FieldType.TEXTFIELD,
                     LabelFieldDescriptor.LabelType.PRIMARY,
                     UIFactory.PATH_FIELD_SIZE);
 
     LabelFieldDescriptor serverLocationDescriptorRO =
-            new LabelFieldDescriptor(getMsg("upgrade-location-label"),
-                    getMsg("upgrade-location-tooltip"),
+            new LabelFieldDescriptor(INFO_UPGRADE_LOCATION_LABEL.get(),
+                    INFO_UPGRADE_LOCATION_TOOLTIP.get(),
                     LabelFieldDescriptor.FieldType.READ_ONLY,
                     LabelFieldDescriptor.LabelType.PRIMARY,
                     UIFactory.PATH_FIELD_SIZE);
 
     LabelFieldDescriptor serverBuildDescriptorRO =
-            new LabelFieldDescriptor(getMsg("upgrade-build-id-label"),
-                    getMsg("upgrade-build-id-tooltip"),
+            new LabelFieldDescriptor(INFO_UPGRADE_BUILD_ID_LABEL.get(),
+                    INFO_UPGRADE_BUILD_ID_TOOLTIP.get(),
                     LabelFieldDescriptor.FieldType.READ_ONLY,
                     LabelFieldDescriptor.LabelType.PRIMARY,
                     UIFactory.PATH_FIELD_SIZE);
@@ -162,8 +164,8 @@
                       userData.getServerLocation());
 
       JButton butBrowse =
-              UIFactory.makeJButton(getMsg("browse-button-label"),
-                      getMsg("browse-button-tooltip"));
+              UIFactory.makeJButton(INFO_BROWSE_BUTTON_LABEL.get(),
+                      INFO_BROWSE_BUTTON_TOOLTIP.get());
 
       BrowseActionListener l =
               new BrowseActionListener(tcServerLocation,
@@ -205,7 +207,7 @@
       try {
         buildId = installation.getBuildInformation().getBuildId();
       } catch (Exception e) {
-        buildId = getMsg("upgrade-build-id-unknown");
+        buildId = INFO_UPGRADE_BUILD_ID_UNKNOWN.get().toString();
       }
 
       tcCurrentServerBuildNumber = UIFactory.makeJTextComponent(
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ExternalTools.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ExternalTools.java
index 25e828d..1eb0f7d 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ExternalTools.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ExternalTools.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.quicksetup.util;
+import org.opends.messages.Message;
 
 import org.opends.quicksetup.Installation;
 
@@ -123,7 +124,7 @@
             new BufferedReader(new InputStreamReader(p.getErrorStream()));
     new OutputReader(out) {
       public void processLine(String line) {
-        oo.addErrorMessage(line);
+        oo.addErrorMessage(Message.raw(line));
         LOG.log(Level.INFO, toolName + ": " + line);
       }
     };
@@ -132,7 +133,7 @@
             new BufferedReader(new InputStreamReader(p.getInputStream()));
     new OutputReader(err) {
       public void processLine(String line) {
-        oo.addOutputMessage(line);
+        oo.addOutputMessage(Message.raw(line));
         LOG.log(Level.INFO, toolName + ": " + line);
       }
     };
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/FileManager.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/FileManager.java
index 4a9dfba..ffdd099 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/FileManager.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/FileManager.java
@@ -27,8 +27,12 @@
 
 package org.opends.quicksetup.util;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.*;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 
 import java.io.*;
 import java.util.logging.Logger;
@@ -158,17 +162,15 @@
         if (target.exists()) {
           if (!target.delete()) {
             throw new ApplicationException(
-                ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
-                    getMsg("error-deleting-file",
-                            Utils.getPath(target)), null);
+                    ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
+                    INFO_ERROR_DELETING_FILE.get(Utils.getPath(target)), null);
           }
         }
       }
       if (!fileToRename.renameTo(target)) {
         throw new ApplicationException(
-            ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
-                getMsg("error-renaming-file",
-                        Utils.getPath(fileToRename),
+                ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
+                INFO_ERROR_RENAMING_FILE.get(Utils.getPath(fileToRename),
                         Utils.getPath(target)), null);
       }
     }
@@ -295,8 +297,8 @@
    *
    * @param objectFile   the file to be copied.
    * @param destDir      the directory to copy the file to
-   * @return File representing the destination
    * @param overwrite    overwrite destination files.
+   * @return File representing the destination
    * @throws ApplicationException if something goes wrong.
    */
   public File copy(File objectFile, File destDir, boolean overwrite)
@@ -381,12 +383,9 @@
       }
     } else {
       // Just tell that the file/directory does not exist.
-      String[] arg = {file.toString()};
-
-
       if (application != null) {
         application.notifyListeners(application.getFormattedWarning(
-                getMsg("file-does-not-exist", arg)));
+                INFO_FILE_DOES_NOT_EXIST.get(String.valueOf(file))));
       }
       LOG.log(Level.INFO, "file '" + file.toString() + "' does not exist");
     }
@@ -472,12 +471,9 @@
      */
     public void apply() throws ApplicationException {
       File objectFile = getObjectFile();
-      String[] args = {objectFile.getAbsolutePath(),
-              destination.getAbsolutePath()};
-
       if (objectFile.isDirectory()) {
         if (!destination.exists()) {
-            destination.mkdirs();
+          destination.mkdirs();
         }
       } else {
 
@@ -490,7 +486,9 @@
           if (Utils.insureParentsExist(destination)) {
             if (application != null) {
               application.notifyListeners(application.getFormattedWithPoints(
-                      getMsg("progress-copying-file", args)));
+                      INFO_PROGRESS_COPYING_FILE.get(
+                              objectFile.getAbsolutePath(),
+                              destination.getAbsolutePath())));
             }
             LOG.log(Level.INFO, "copying file '" +
                     objectFile.getAbsolutePath() + "' to '" +
@@ -518,14 +516,16 @@
               }
 
               if (application != null) {
-                application.notifyListeners(application.getFormattedDone() +
-                        application.getLineBreak());
+                application.notifyListeners(
+                        application.getFormattedDoneWithLineBreak());
               }
 
             } catch (Exception e) {
-              String errMsg = getMsg("error-copying-file", args);
+              Message errMsg = INFO_ERROR_COPYING_FILE.get(
+                      objectFile.getAbsolutePath(),
+                      destination.getAbsolutePath());
               throw new ApplicationException(
-                  ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
+                      ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
                       errMsg, null);
             } finally {
               if (fis != null) {
@@ -544,18 +544,25 @@
               }
             }
           } else {
-            String errMsg = getMsg("error-copying-file", args);
+            Message errMsg = INFO_ERROR_COPYING_FILE.get(
+                    objectFile.getAbsolutePath(),
+                    destination.getAbsolutePath());
             throw new ApplicationException(
-                ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
-                errMsg, null);
+                    ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
+                    errMsg, null);
           }
         } else {
           LOG.log(Level.INFO, "Ignoring file '" +
                   objectFile.getAbsolutePath() + "' since '" +
                   destination.getAbsolutePath() + "' already exists");
           if (application != null) {
-            application.notifyListeners(getMsg("info-ignoring-file", args) +
-                    application.getLineBreak());
+            application.notifyListeners(
+                    new MessageBuilder(
+                            INFO_INFO_IGNORING_FILE.get(
+                                    objectFile.getAbsolutePath(),
+                                    destination.getAbsolutePath()))
+                            .append(application.getLineBreak())
+                            .toMessage());
           }
         }
       }
@@ -594,16 +601,16 @@
      */
     public void apply() throws ApplicationException {
       File file = getObjectFile();
-      String[] arg = {file.getAbsolutePath()};
       boolean isFile = file.isFile();
 
       if (application != null) {
         if (isFile) {
           application.notifyListeners(application.getFormattedWithPoints(
-                  getMsg("progress-deleting-file", arg)));
+                  INFO_PROGRESS_DELETING_FILE.get(file.getAbsolutePath())));
         } else {
           application.notifyListeners(application.getFormattedWithPoints(
-                  getMsg("progress-deleting-directory", arg)));
+                  INFO_PROGRESS_DELETING_DIRECTORY.get(
+                          file.getAbsolutePath())));
         }
       }
       LOG.log(Level.INFO, "deleting " +
@@ -640,20 +647,20 @@
       }
 
       if (!delete) {
-        String errMsg;
+        Message errMsg;
         if (isFile) {
-          errMsg = getMsg("error-deleting-file", arg);
+          errMsg = INFO_ERROR_DELETING_FILE.get(file.getAbsolutePath());
         } else {
-          errMsg = getMsg("error-deleting-directory", arg);
+          errMsg = INFO_ERROR_DELETING_DIRECTORY.get(file.getAbsolutePath());
         }
         throw new ApplicationException(
-            ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
-            errMsg, null);
+                ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
+                errMsg, null);
       }
 
       if (application != null) {
-        application.notifyListeners(application.getFormattedDone() +
-                application.getLineBreak());
+        application.notifyListeners(
+                application.getFormattedDoneWithLineBreak());
       }
     }
   }
@@ -692,20 +699,11 @@
       }
       if (!objectFile.renameTo(destination)) {
         throw ApplicationException.createFileSystemException(
-                getMsg("error-failed-moving-file",
-                        Utils.getPath(objectFile),
+                INFO_ERROR_FAILED_MOVING_FILE.get(Utils.getPath(objectFile),
                         Utils.getPath(destination)),
                 null);
       }
     }
   }
 
-  private String getMsg(String key) {
-    return ResourceProvider.getInstance().getMsg(key);
-  }
-
-  private String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/HtmlProgressMessageFormatter.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/HtmlProgressMessageFormatter.java
index 433623d..3dfd4a5 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/HtmlProgressMessageFormatter.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/HtmlProgressMessageFormatter.java
@@ -33,10 +33,14 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.Constants;
 
+import static org.opends.messages.QuickSetupMessages.*;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+
 /**
  * This is an implementation of the ProgressMessageFormatter class that
  * provides format in HTML.
@@ -47,8 +51,8 @@
   static private final Logger LOG =
           Logger.getLogger(HtmlProgressMessageFormatter.class.getName());
 
-  private String doneHtml;
-  private String errorHtml;
+  private Message doneHtml;
+  private Message errorHtml;
 
   /**
    * The constant used to separate parameters in an URL.
@@ -58,7 +62,7 @@
   /**
    * The space in HTML.
    */
-  private static String SPACE = "&nbsp;";
+  private static Message SPACE = Message.raw("&nbsp;");
 
   /**
    * Returns the HTML representation of the text without providing any style.
@@ -66,9 +70,9 @@
    * representation
    * @return the HTML representation for the given text.
    */
-  public String getFormattedText(String text)
+  public Message getFormattedText(Message text)
   {
-    return getHtml(text);
+    return Message.raw(getHtml(String.valueOf(text)));
   }
 
   /**
@@ -79,9 +83,12 @@
    * representation
    * @return the HTML representation of the summary for the given text.
    */
-  public String getFormattedSummary(String text)
+  public Message getFormattedSummary(Message text)
   {
-    return "<html>"+UIFactory.applyFontToHtml(text, UIFactory.PROGRESS_FONT);
+    return new MessageBuilder("<html>")
+            .append(UIFactory.applyFontToHtml(
+                    String.valueOf(text), UIFactory.PROGRESS_FONT))
+            .toMessage();
   }
 
   /**
@@ -92,19 +99,20 @@
    * resulting HTML.
    * @return the HTML representation of an error for the given text.
    */
-  public String getFormattedError(String text, boolean applyMargin)
+  public Message getFormattedError(Message text, boolean applyMargin)
   {
     String html;
-    if (!Utils.containsHtml(text)) {
+    if (!Utils.containsHtml(String.valueOf(text))) {
       html = UIFactory.getIconHtml(UIFactory.IconType.ERROR_LARGE)
           + SPACE
           + SPACE
-          + UIFactory.applyFontToHtml(getHtml(text),
+          + UIFactory.applyFontToHtml(getHtml(String.valueOf(text)),
               UIFactory.PROGRESS_ERROR_FONT);
     } else {
       html =
           UIFactory.getIconHtml(UIFactory.IconType.ERROR_LARGE) + SPACE
-          + SPACE + UIFactory.applyFontToHtml(text, UIFactory.PROGRESS_FONT);
+          + SPACE + UIFactory.applyFontToHtml(
+                  String.valueOf(text), UIFactory.PROGRESS_FONT);
     }
 
     String result = UIFactory.applyErrorBackgroundToHtml(html);
@@ -114,7 +122,7 @@
           UIFactory.applyMargin(result,
               UIFactory.TOP_INSET_ERROR_MESSAGE, 0, 0, 0);
     }
-    return result;
+    return Message.raw(result);
   }
 
   /**
@@ -125,20 +133,21 @@
    * resulting HTML.
    * @return the HTML representation of a warning for the given text.
    */
-  public String getFormattedWarning(String text, boolean applyMargin)
+  public Message getFormattedWarning(Message text, boolean applyMargin)
   {
     String html;
-    if (!Utils.containsHtml(text)) {
+    if (!Utils.containsHtml(String.valueOf(text))) {
       html =
         UIFactory.getIconHtml(UIFactory.IconType.WARNING_LARGE)
             + SPACE
             + SPACE
-            + UIFactory.applyFontToHtml(getHtml(text),
+            + UIFactory.applyFontToHtml(getHtml(String.valueOf(text)),
                 UIFactory.PROGRESS_WARNING_FONT);
     } else {
       html =
           UIFactory.getIconHtml(UIFactory.IconType.WARNING_LARGE) + SPACE
-          + SPACE + UIFactory.applyFontToHtml(text, UIFactory.PROGRESS_FONT);
+          + SPACE + UIFactory.applyFontToHtml(
+                  String.valueOf(text), UIFactory.PROGRESS_FONT);
     }
 
     String result = UIFactory.applyWarningBackgroundToHtml(html);
@@ -148,7 +157,7 @@
           UIFactory.applyMargin(result,
               UIFactory.TOP_INSET_ERROR_MESSAGE, 0, 0, 0);
     }
-    return result;
+    return Message.raw(result);
   }
 
   /**
@@ -157,14 +166,15 @@
    * representation
    * @return the HTML representation of a success message for the given text.
    */
-  public String getFormattedSuccess(String text)
+  public Message getFormattedSuccess(Message text)
   {
     // Note: the text we get already is in HTML form
     String html =
         UIFactory.getIconHtml(UIFactory.IconType.INFORMATION_LARGE) + SPACE
-        + SPACE + UIFactory.applyFontToHtml(text, UIFactory.PROGRESS_FONT);
+        + SPACE + UIFactory.applyFontToHtml(String.valueOf(text),
+                UIFactory.PROGRESS_FONT);
 
-    return UIFactory.applySuccessfulBackgroundToHtml(html);
+    return Message.raw(UIFactory.applySuccessfulBackgroundToHtml(html));
   }
 
   /**
@@ -175,11 +185,11 @@
    * @return the HTML representation of a log error message for the given
    * text.
    */
-  public String getFormattedLogError(String text)
+  public Message getFormattedLogError(Message text)
   {
-    String html = getHtml(text);
-    return UIFactory.applyFontToHtml(html,
-        UIFactory.PROGRESS_LOG_ERROR_FONT);
+    String html = getHtml(String.valueOf(text));
+    return Message.raw(UIFactory.applyFontToHtml(html,
+        UIFactory.PROGRESS_LOG_ERROR_FONT));
   }
 
 
@@ -189,39 +199,40 @@
    * representation
    * @return the HTML representation of a log message for the given text.
    */
-  public String getFormattedLog(String text)
+  public Message getFormattedLog(Message text)
   {
-    String html = getHtml(text);
-    return UIFactory.applyFontToHtml(html, UIFactory.PROGRESS_LOG_FONT);
+    String html = getHtml(String.valueOf(text));
+    return Message.raw(UIFactory.applyFontToHtml(html,
+            UIFactory.PROGRESS_LOG_FONT));
   }
 
   /**
    * Returns the HTML representation of the 'Done' text string.
    * @return the HTML representation of the 'Done' text string.
    */
-  public String getFormattedDone()
+  public Message getFormattedDone()
   {
     if (doneHtml == null)
     {
-      String html = getHtml(getMsg("progress-done"));
-      doneHtml = UIFactory.applyFontToHtml(html,
-          UIFactory.PROGRESS_DONE_FONT);
+      String html = getHtml(INFO_PROGRESS_DONE.get().toString());
+      doneHtml = Message.raw(UIFactory.applyFontToHtml(html,
+          UIFactory.PROGRESS_DONE_FONT));
     }
-    return doneHtml;
+    return Message.raw(doneHtml);
   }
 
   /**
    * Returns the HTML representation of the 'Error' text string.
    * @return the HTML representation of the 'Error' text string.
    */
-  public String getFormattedError() {
+  public Message getFormattedError() {
     if (errorHtml == null)
     {
-      String html = getHtml(getMsg("progress-error"));
-      errorHtml = UIFactory.applyFontToHtml(html,
-          UIFactory.PROGRESS_ERROR_FONT);
+      String html = getHtml(INFO_PROGRESS_ERROR.get().toString());
+      errorHtml = Message.raw(UIFactory.applyFontToHtml(html,
+          UIFactory.PROGRESS_ERROR_FONT));
     }
-    return errorHtml;
+    return Message.raw(errorHtml);
   }
 
   /**
@@ -231,17 +242,18 @@
    * @param text the String to which add points.
    * @return the HTML representation of the '.....' text string.
    */
-  public String getFormattedWithPoints(String text)
+  public Message getFormattedWithPoints(Message text)
   {
-    String html = getHtml(text);
-    String points = SPACE + getHtml(getMsg("progress-points")) + SPACE;
+    String html = getHtml(String.valueOf(text));
+    String points = SPACE +
+            getHtml(INFO_PROGRESS_POINTS.get().toString()) + SPACE;
 
-    StringBuilder buf = new StringBuilder();
+    MessageBuilder buf = new MessageBuilder();
     buf.append(UIFactory.applyFontToHtml(html, UIFactory.PROGRESS_FONT))
         .append(
             UIFactory.applyFontToHtml(points, UIFactory.PROGRESS_POINTS_FONT));
 
-    return buf.toString();
+    return buf.toMessage();
   }
 
   /**
@@ -252,10 +264,10 @@
    * @return the formatted representation of a progress message for the given
    * text.
    */
-  public String getFormattedProgress(String text)
+  public Message getFormattedProgress(Message text)
   {
-    return UIFactory.applyFontToHtml(getHtml(text),
-        UIFactory.PROGRESS_FONT);
+    return Message.raw(UIFactory.applyFontToHtml(getHtml(String.valueOf(text)),
+        UIFactory.PROGRESS_FONT));
   }
 
   /**
@@ -268,14 +280,14 @@
    * @return the HTML representation of an error message for the given
    * exception.
    */
-  public String getFormattedError(Throwable t, boolean applyMargin)
+  public Message getFormattedError(Throwable t, boolean applyMargin)
   {
     String openDiv = "<div style=\"margin-left:5px; margin-top:10px\">";
     String hideText =
-        UIFactory.applyFontToHtml(getMsg("hide-exception-details"),
+        UIFactory.applyFontToHtml(INFO_HIDE_EXCEPTION_DETAILS.get().toString(),
             UIFactory.PROGRESS_FONT);
     String showText =
-        UIFactory.applyFontToHtml(getMsg("show-exception-details"),
+        UIFactory.applyFontToHtml(INFO_SHOW_EXCEPTION_DETAILS.get().toString(),
             UIFactory.PROGRESS_FONT);
     String closeDiv = "</div>";
 
@@ -284,7 +296,7 @@
     Throwable root = t.getCause();
     while (root != null)
     {
-      stackBuf.append(getHtml(getMsg("exception-root-cause")))
+      stackBuf.append(getHtml(INFO_EXCEPTION_ROOT_CAUSE.get().toString()))
               .append(Constants.HTML_LINE_BREAK);
       stackBuf.append(getHtmlStack(root));
       root = root.getCause();
@@ -320,34 +332,39 @@
     {
       result = UIFactory.applyErrorBackgroundToHtml(html);
     }
-    return result;
+    return Message.raw(result);
   }
 
   /**
    * Returns the line break in HTML.
    * @return the line break in HTML.
    */
-  public String getLineBreak()
+  public Message getLineBreak()
   {
-    return Constants.HTML_LINE_BREAK;
+    return Message.raw(Constants.HTML_LINE_BREAK);
   }
 
   /**
    * Returns the tab in HTML.
    * @return the tab in HTML.
    */
-  public String getTab()
+  public Message getTab()
   {
-    return SPACE+SPACE+SPACE+SPACE+SPACE;
+    return new MessageBuilder(SPACE)
+            .append(SPACE)
+            .append(SPACE)
+            .append(SPACE)
+            .append(SPACE)
+            .toMessage();
   }
 
   /**
    * Returns the task separator in HTML.
    * @return the task separator in HTML.
    */
-  public String getTaskSeparator()
+  public Message getTaskSeparator()
   {
-    return UIFactory.HTML_SEPARATOR;
+    return Message.raw(UIFactory.HTML_SEPARATOR);
   }
 
   /**
@@ -359,23 +376,24 @@
    * url.
    * @return the log HTML representation after the user has clicked on a url.
    */
-  public String getFormattedAfterUrlClick(String url, String lastText)
+  public Message getFormattedAfterUrlClick(String url, Message lastText)
   {
     String urlText = getErrorWithStackHtml(url, false);
     String newUrlText = getErrorWithStackHtml(url, true);
+    String lastTextStr = String.valueOf(lastText);
 
-    int index = lastText.indexOf(urlText);
+    int index = lastTextStr.indexOf(urlText);
     if (index == -1)
     {
       LOG.log(Level.FINE, "lastText: " + lastText +
               "does not contain: " + urlText);
     } else
     {
-      lastText =
-          lastText.substring(0, index) + newUrlText
-              + lastText.substring(index + urlText.length());
+      lastTextStr =
+          lastTextStr.substring(0, index) + newUrlText
+              + lastTextStr.substring(index + urlText.length());
     }
-    return lastText;
+    return Message.raw(lastText);
   }
 
   /**
@@ -448,30 +466,6 @@
   }
 
   /**
-   * Returns a localized message for a key value.  In  the properties file we
-   * have something of type:
-   * key=value
-   *
-   * @see ResourceProvider#getMsg(String)
-   * @param key the key in the properties file.
-   * @return the value associated to the key in the properties file.
-   * properties file.
-   */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  /**
-   * Returns a ResourceProvider instance.
-   * @return a ResourceProvider instance.
-   */
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
-
-  /**
    * Returns a HTML representation of the stack trace of a Throwable object.
    * @param ex the throwable object from which we want to obtain the stack
    * trace HTML representation.
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/InProcessServerController.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/InProcessServerController.java
index 8ccbf70..b6337be 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/InProcessServerController.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/InProcessServerController.java
@@ -27,8 +27,12 @@
 
 package org.opends.quicksetup.util;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.*;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.server.loggers.debug.TextDebugLogPublisher;
 import org.opends.server.loggers.debug.DebugLogger;
 import org.opends.server.loggers.TextErrorLogPublisher;
@@ -137,7 +141,7 @@
                      OperationOutput output) {
       LOG.log(Level.INFO, "server start (debug log): " +
               record);
-      output.addDebugMessage(record);
+      output.addDebugMessage(Message.raw(record));
     }};
 
   static private ServerControllerTextWriter errorWriter =
@@ -146,7 +150,7 @@
                      OperationOutput output) {
       LOG.log(Level.INFO, "server start (error log): " +
               record);
-      output.addErrorMessage(record);
+      output.addErrorMessage(Message.raw(record));
     }
   };
 
@@ -156,7 +160,7 @@
                      OperationOutput output) {
       LOG.log(Level.INFO, "server start (access log): " +
               record);
-      output.addAccessMessage(record);
+      output.addAccessMessage(Message.raw(record));
     }
   };
 
@@ -255,7 +259,7 @@
     StandardOutputSuppressor.suppress();
     try {
       DirectoryServer.shutDown(getClass().getName(),
-              "quicksetup requests shutdown");
+              Message.raw("quicksetup requests shutdown")); // TODO: i18n
 
       // Note:  this should not be necessary in the future when a
       // the shutdown method will not return until everything is
@@ -399,10 +403,10 @@
                   modListToString(op.getModifications()));
         } else {
           // report the error to the user
-          StringBuilder error = op.getErrorMessage();
+          MessageBuilder error = op.getErrorMessage();
           throw new ApplicationException(
               ApplicationReturnCode.ReturnCode.IMPORT_ERROR,
-                  getMsg("error-apply-ldif-modify", dnByteString.toString(),
+                  INFO_ERROR_APPLY_LDIF_MODIFY.get(dnByteString.toString(),
                           error != null ? error.toString() : ""),
                   null);
         }
@@ -422,10 +426,10 @@
           LOG.log(Level.INFO, "processed server add " + addOp.getEntryDN());
         } else {
           // report the error to the user
-          StringBuilder error = addOp.getErrorMessage();
+          MessageBuilder error = addOp.getErrorMessage();
           throw new ApplicationException(
               ApplicationReturnCode.ReturnCode.IMPORT_ERROR,
-                  getMsg("error-apply-ldif-add", dnByteString.toString(),
+                  INFO_ERROR_APPLY_LDIF_ADD.get(dnByteString.toString(),
                           error != null ? error.toString() : ""),
                   null);
         }
@@ -439,10 +443,10 @@
                   delOp.getEntryDN());
         } else {
           // report the error to the user
-          StringBuilder error = delOp.getErrorMessage();
+          MessageBuilder error = delOp.getErrorMessage();
           throw new ApplicationException(
               ApplicationReturnCode.ReturnCode.IMPORT_ERROR,
-                  getMsg("error-apply-ldif-delete", dnByteString.toString(),
+                  INFO_ERROR_APPLY_LDIF_DELETE.get(dnByteString.toString(),
                           error != null ? error.toString() : ""),
                   null);
         }
@@ -450,7 +454,7 @@
       default:
         LOG.log(Level.SEVERE, "Unexpected record type " + cre.getClass());
         throw new ApplicationException(ApplicationReturnCode.ReturnCode.BUG,
-                getMsg("bug-msg"),
+                INFO_BUG_MSG.get(),
                 null);
     }
   }
@@ -500,8 +504,4 @@
     AccessLogger.removeAccessLogPublisher(startupAccessPublisher);
   }
 
-  static private String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/OperationOutput.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/OperationOutput.java
index c1d6e47..028869f 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/OperationOutput.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/OperationOutput.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.quicksetup.util;
+import org.opends.messages.Message;
 
 import java.util.List;
 import java.util.ArrayList;
@@ -40,10 +41,10 @@
 
   private Exception exception = null;
 
-  private List<String> outputMessages = new ArrayList<String>();
-  private List<String> errorMessages = new ArrayList<String>();
-  private List<String> debugMessages = new ArrayList<String>();
-  private List<String> accessMessages = new ArrayList<String>();
+  private List<Message> outputMessages = new ArrayList<Message>();
+  private List<Message> errorMessages = new ArrayList<Message>();
+  private List<Message> debugMessages = new ArrayList<Message>();
+  private List<Message> accessMessages = new ArrayList<Message>();
 
   /**
    * Gets a list of strings representing error messages obtained
@@ -52,10 +53,10 @@
    * @return List of Strings representing errorMessages that contain
    * the provided <code>regex</code> string.
    */
-  public List<String> getErrorMessages(String regex) {
-    List<String> errorMessagesSubset = new ArrayList<String>();
-    for (String msg : errorMessages) {
-      if (msg.matches(regex)) {
+  public List<Message> getErrorMessages(String regex) {
+    List<Message> errorMessagesSubset = new ArrayList<Message>();
+    for (Message msg : errorMessages) {
+      if (msg.toString().matches(regex)) {
         errorMessagesSubset.add(msg);
       }
     }
@@ -67,7 +68,7 @@
    * by invoking the operation.
    * @return List of Strings representing errorMessages
    */
-  public List<String> getErrorMessages() {
+  public List<Message> getErrorMessages() {
     return Collections.unmodifiableList(errorMessages);
   }
 
@@ -76,7 +77,7 @@
    * by invoking the operation.
    * @return List of Strings representing errorMessages
    */
-  public List<String> getOutputMessages() {
+  public List<Message> getOutputMessages() {
     return Collections.unmodifiableList(outputMessages);
   }
 
@@ -85,7 +86,7 @@
    * by invoking the operation.
    * @return List of Strings representing errorMessages
    */
-  public List<String> getDebugMessages() {
+  public List<Message> getDebugMessages() {
     return Collections.unmodifiableList(debugMessages);
   }
 
@@ -94,7 +95,7 @@
    * by invoking the operation.
    * @return List of Strings representing errorMessages
    */
-  public List<String> getAccessMessages() {
+  public List<Message> getAccessMessages() {
     return Collections.unmodifiableList(accessMessages);
   }
 
@@ -129,7 +130,7 @@
    * Adds an error message.
    * @param errorMessage an error message
    */
-  void addErrorMessage(String errorMessage) {
+  void addErrorMessage(Message errorMessage) {
     this.errorMessages.add(errorMessage);
   }
 
@@ -137,7 +138,7 @@
    * Adds an output message.
    * @param outputMessage an error message
    */
-  void addOutputMessage(String outputMessage) {
+  void addOutputMessage(Message outputMessage) {
     this.outputMessages.add(outputMessage);
   }
 
@@ -145,7 +146,7 @@
    * Adds an access message.
    * @param accessMessage an error message
    */
-  void addAccessMessage(String accessMessage) {
+  void addAccessMessage(Message accessMessage) {
     this.accessMessages.add(accessMessage);
   }
 
@@ -153,7 +154,7 @@
    * Adds an error message.
    * @param debugMessage an error message
    */
-  void addDebugMessage(String debugMessage) {
+  void addDebugMessage(Message debugMessage) {
     this.debugMessages.add(debugMessage);
   }
 
@@ -162,7 +163,7 @@
    * Sets the list of error messages that occurred during execution.
    * @param accessMessages List of Strings representing error messages
    */
-  void setAccessMessages(List<String> accessMessages) {
+  void setAccessMessages(List<Message> accessMessages) {
     this.accessMessages = accessMessages;
   }
 
@@ -170,7 +171,7 @@
    * Sets the list of error messages that occurred during execution.
    * @param debugMessages List of Strings representing error messages
    */
-  void setDebugMessages(List<String> debugMessages) {
+  void setDebugMessages(List<Message> debugMessages) {
     this.debugMessages = debugMessages;
   }
 
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/PlainTextProgressMessageFormatter.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/PlainTextProgressMessageFormatter.java
index 22ff05b..a85723d 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/PlainTextProgressMessageFormatter.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/PlainTextProgressMessageFormatter.java
@@ -26,10 +26,14 @@
  */
 
 package org.opends.quicksetup.util;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.quicksetup.Constants;
 
+import static org.opends.messages.QuickSetupMessages.*;
+
 /**
  * This is an implementation of the ProgressMessageFormatter class that
  * provides format in plain text.
@@ -38,8 +42,8 @@
 public class PlainTextProgressMessageFormatter
 implements ProgressMessageFormatter
 {
-  private String doneText;
-  private String errorText;
+  private Message doneText;
+  private Message errorText;
 
   /**
    * The space in plain text.
@@ -52,7 +56,7 @@
    * representation
    * @return the text representation for the given text.
    */
-  public String getFormattedText(String text)
+  public Message getFormattedText(Message text)
   {
     return text;
   }
@@ -65,7 +69,7 @@
    * representation
    * @return the text representation of the summary for the given text.
    */
-  public String getFormattedSummary(String text)
+  public Message getFormattedSummary(Message text)
   {
     return text;
   }
@@ -78,12 +82,13 @@
    * resulting formatted text.
    * @return the plain text representation of an error for the given text.
    */
-  public String getFormattedError(String text, boolean applyMargin)
+  public Message getFormattedError(Message text, boolean applyMargin)
   {
-    String result;
+    Message result;
     if (applyMargin)
     {
-      result = Constants.LINE_SEPARATOR+text;
+      result = new MessageBuilder().append(Constants.LINE_SEPARATOR)
+              .append(text).toMessage();
     } else
     {
       result = text;
@@ -99,12 +104,13 @@
    * resulting formatted text.
    * @return the plain text representation of a warning for the given text.
    */
-  public String getFormattedWarning(String text, boolean applyMargin)
+  public Message getFormattedWarning(Message text, boolean applyMargin)
   {
-    String result;
+    Message result;
     if (applyMargin)
     {
-      result = Constants.LINE_SEPARATOR+text;
+      result = new MessageBuilder(Constants.LINE_SEPARATOR)
+              .append(text).toMessage();
     } else
     {
       result = text;
@@ -120,7 +126,7 @@
    * @return the plain text representation of a success message for the given
    * text.
    */
-  public String getFormattedSuccess(String text)
+  public Message getFormattedSuccess(Message text)
   {
     return text;
   }
@@ -133,7 +139,7 @@
    * @return the plain text representation of a log error message for the given
    * text.
    */
-  public String getFormattedLogError(String text)
+  public Message getFormattedLogError(Message text)
   {
     return text;
   }
@@ -145,7 +151,7 @@
    * representation
    * @return the plain text representation of a log message for the given text.
    */
-  public String getFormattedLog(String text)
+  public Message getFormattedLog(Message text)
   {
     return text;
   }
@@ -154,11 +160,11 @@
    * Returns the plain text representation of the 'Done' text string.
    * @return the plain text representation of the 'Done' text string.
    */
-  public String getFormattedDone()
+  public Message getFormattedDone()
   {
     if (doneText == null)
     {
-      doneText = getMsg("progress-done");
+      doneText = INFO_PROGRESS_DONE.get();
     }
     return doneText;
   }
@@ -167,11 +173,11 @@
    * Returns the plain text representation of the 'Error' text string.
    * @return the plain text representation of the 'Error' text string.
    */
-  public String getFormattedError()
+  public Message getFormattedError()
   {
     if (errorText == null)
     {
-      errorText = getMsg("progress-error");
+      errorText = INFO_PROGRESS_ERROR.get();
     }
     return errorText;
   }
@@ -183,9 +189,10 @@
    * @param text the String to which add points.
    * @return the plain text representation of the '.....' text string.
    */
-  public String getFormattedWithPoints(String text)
+  public Message getFormattedWithPoints(Message text)
   {
-    return text + SPACE + getMsg("progress-points");
+    return new MessageBuilder(text).append(SPACE)
+            .append(INFO_PROGRESS_POINTS.get()).toMessage();
   }
 
   /**
@@ -196,7 +203,7 @@
    * @return the formatted representation of a progress message for the given
    * text.
    */
-  public String getFormattedProgress(String text)
+  public Message getFormattedProgress(Message text)
   {
     return text;
   }
@@ -212,7 +219,7 @@
    * @return the plain text representation of an error message for the given
    * exception.
    */
-  public String getFormattedError(Throwable t, boolean applyMargin)
+  public Message getFormattedError(Throwable t, boolean applyMargin)
   {
     String msg = t.getMessage();
     if (msg == null)
@@ -227,68 +234,46 @@
     {
       result = msg;
     }
-    return result;
+    return Message.raw(result);
   }
 
   /**
    * Returns the line break in plain text.
    * @return the line break in plain text.
    */
-  public String getLineBreak()
+  public Message getLineBreak()
   {
-    return Constants.LINE_SEPARATOR;
+    return Message.raw(Constants.LINE_SEPARATOR);
   }
 
   /**
    * Returns the tab in plain text.
    * @return the tab in plain text.
    */
-  public String getTab()
+  public Message getTab()
   {
-    return "     ";
+    return Message.raw("     ");
   }
 
   /**
    * Returns the task separator in plain text.
    * @return the task separator in plain text.
    */
-  public String getTaskSeparator()
+  public Message getTaskSeparator()
   {
-    return
-    "\n\n-----------------------------------------------------------------\n\n";
+    return Message.raw(
+    "\n\n-----------------------------------------------------------------\n\n"
+            );
   }
 
   /**
    * {@inheritDoc}
    */
-  public String getFormattedAfterUrlClick(String url, String lastText)
+  public Message getFormattedAfterUrlClick(String url, Message lastText)
   {
     throw new IllegalStateException(
         "PlainTextProgressMessageFormatter.getFormattedAfterUrlClick must not "+
         "be called");
   }
 
-  /**
-   * Returns a localized message for a key value.  In  the properties file we
-   * have something of type:
-   * key=value
-   *
-   * @see ResourceProvider#getMsg(String key)
-   * @param key the key in the properties file.
-   * @return the value associated to the key in the properties file.
-   * properties file.
-   */
-  private String getMsg(String key)
-  {
-    return getI18n().getMsg(key);
-  }
-
-  /**
-   * Returns a ResourceProvider instance.
-   * @return a ResourceProvider instance.
-   */
-  private ResourceProvider getI18n()
-  {
-    return ResourceProvider.getInstance();
-  }
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ProgressMessageFormatter.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ProgressMessageFormatter.java
index 1df5bf9..7c150eb 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ProgressMessageFormatter.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ProgressMessageFormatter.java
@@ -27,6 +27,8 @@
 
 package org.opends.quicksetup.util;
 
+import org.opends.messages.Message;
+
 /**
  * This interface has been created in order to share the same formatting code
  * for both the Installer and the Uninstaller classes.   This way we have the
@@ -46,7 +48,7 @@
    * representation
    * @return the formatted representation for the given text.
    */
-  public String getFormattedText(String text);
+  public Message getFormattedText(Message text);
 
   /**
    * Returns the formatted representation of the text that is the summary of the
@@ -56,7 +58,7 @@
    * representation
    * @return the formatted representation of a summary for the given text.
    */
-  public String getFormattedSummary(String text);
+  public Message getFormattedSummary(Message text);
 
   /**
    * Returns the formatted representation of an error for a given text.
@@ -66,7 +68,7 @@
    * resulting formatted text.
    * @return the formatted representation of an error for the given text.
    */
-  public String getFormattedError(String text, boolean applyMargin);
+  public Message getFormattedError(Message text, boolean applyMargin);
 
   /**
    * Returns the formatted representation of a warning for a given text.
@@ -76,7 +78,7 @@
    * resulting formatted text.
    * @return the formatted representation of a warning for the given text.
    */
-  public String getFormattedWarning(String text, boolean applyMargin);
+  public Message getFormattedWarning(Message text, boolean applyMargin);
 
   /**
    * Returns the formatted representation of a success message for a given text.
@@ -85,7 +87,7 @@
    * @return the formatted representation of a success message for the given
    * text.
    */
-  public String getFormattedSuccess(String text);
+  public Message getFormattedSuccess(Message text);
 
   /**
    * Returns the formatted representation of a log error message for a given
@@ -95,7 +97,7 @@
    * @return the formatted representation of a log error message for the given
    * text.
    */
-  public String getFormattedLogError(String text);
+  public Message getFormattedLogError(Message text);
 
   /**
    * Returns the formatted representation of a log message for a given text.
@@ -103,19 +105,19 @@
    * representation
    * @return the formatted representation of a log message for the given text.
    */
-  public String getFormattedLog(String text);
+  public Message getFormattedLog(Message text);
 
   /**
    * Returns the formatted representation of the 'Done' text string.
    * @return the formatted representation of the 'Done' text string.
    */
-  public String getFormattedDone();
+  public Message getFormattedDone();
 
   /**
    * Returns the formatted representation of the 'Error' text string.
    * @return the formatted representation of the 'Error' text string.
    */
-  public String getFormattedError();
+  public Message getFormattedError();
 
   /**
    * Returns the formatted representation of the argument text to which we add
@@ -124,7 +126,7 @@
    * @param text the String to which add points.
    * @return the formatted representation of the '.....' text string.
    */
-  public String getFormattedWithPoints(String text);
+  public Message getFormattedWithPoints(Message text);
 
   /**
    * Returns the formatted representation of a progress message for a given
@@ -134,7 +136,7 @@
    * @return the formatted representation of a progress message for the given
    * text.
    */
-  public String getFormattedProgress(String text);
+  public Message getFormattedProgress(Message text);
 
   /**
    * Returns the formatted representation of an error message for a given
@@ -147,25 +149,25 @@
    * @return the formatted representation of an error message for the given
    * exception.
    */
-  public String getFormattedError(Throwable t, boolean applyMargin);
+  public Message getFormattedError(Throwable t, boolean applyMargin);
 
   /**
    * Returns the line break formatted.
    * @return the line break formatted.
    */
-  public String getLineBreak();
+  public Message getLineBreak();
 
   /**
    * Returns the tab formatted.
    * @return the tab formatted.
    */
-  public String getTab();
+  public Message getTab();
 
   /**
    * Returns the task separator formatted.
    * @return the task separator formatted.
    */
-  public String getTaskSeparator();
+  public Message getTaskSeparator();
 
   /**
    * Returns the log formatted representation after the user has clicked on a
@@ -177,5 +179,5 @@
    * @return the formatted progress log representation after the user has
    * clicked on a url.
    */
-  public String getFormattedAfterUrlClick(String url, String lastText);
+  public Message getFormattedAfterUrlClick(String url, Message lastText);
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
index 7b71e2a..1c80095 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
@@ -27,8 +27,12 @@
 
 package org.opends.quicksetup.util;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.*;
-import org.opends.quicksetup.i18n.ResourceProvider;
+import static org.opends.quicksetup.util.Utils.*;
 import org.opends.quicksetup.installer.InstallerHelper;
 
 import javax.naming.NamingException;
@@ -110,10 +114,11 @@
 
     try {
       if (application != null) {
-        application.notifyListeners(
-                application.getFormattedProgress(
-                        application.getMsg("progress-stopping")) +
-                        application.getLineBreak());
+        MessageBuilder mb = new MessageBuilder();
+        mb.append(application.getFormattedProgress(
+                        INFO_PROGRESS_STOPPING.get()));
+        mb.append(application.getLineBreak());
+        application.notifyListeners(mb.toMessage());
       }
       LOG.log(Level.INFO, "stopping server");
 
@@ -164,12 +169,11 @@
               stopped = !installation.getStatus().isServerRunning();
               if (!stopped) {
                 if (application != null) {
-                  String msg =
-                          application.getFormattedLog(
-                                  application.getMsg(
-                                          "progress-server-waiting-to-stop")) +
-                                  application.getLineBreak();
-                  application.notifyListeners(msg);
+                  MessageBuilder mb = new MessageBuilder();
+                  mb.append(application.getFormattedLog(
+                          INFO_PROGRESS_SERVER_WAITING_TO_STOP.get()));
+                  mb.append(application.getLineBreak());
+                  application.notifyListeners(mb.toMessage());
                 }
                 LOG.log(Level.FINE, "waiting for server to stop");
                 try {
@@ -190,12 +194,12 @@
 
         if (returnValue == clientSideError) {
           if (application != null) {
-            String msg = application.getLineBreak() +
-                    application.getFormattedLog(
-                            application.getMsg(
-                                    "progress-server-already-stopped")) +
-                    application.getLineBreak();
-            application.notifyListeners(msg);
+            MessageBuilder mb = new MessageBuilder();
+            mb.append(application.getLineBreak());
+            mb.append(application.getFormattedLog(
+                            INFO_PROGRESS_SERVER_ALREADY_STOPPED.get()));
+            mb.append(application.getLineBreak());
+            application.notifyListeners(mb.toMessage());
           }
           LOG.log(Level.INFO, "server already stopped");
 
@@ -205,15 +209,14 @@
           * not be stopped.
           */
           throw new ApplicationException(
-              ApplicationReturnCode.ReturnCode.STOP_ERROR, ResourceProvider
-                  .getInstance().getMsg("error-stopping-server-code",
-                      String.valueOf(returnValue)),
+              ApplicationReturnCode.ReturnCode.STOP_ERROR,
+                  INFO_ERROR_STOPPING_SERVER_CODE.get(
+                          String.valueOf(returnValue)),
                   null);
         } else {
           if (application != null) {
-            String msg = application.getFormattedLog(
-                    application.getMsg("progress-server-stopped"));
-            application.notifyListeners(msg);
+            application.notifyListeners(application.getFormattedLog(
+                    INFO_PROGRESS_SERVER_STOPPED.get()));
           }
           LOG.log(Level.INFO, "server stopped");
         }
@@ -221,7 +224,7 @@
       } catch (Exception e) {
         throw new ApplicationException(
             ApplicationReturnCode.ReturnCode.STOP_ERROR, getThrowableMsg(
-                "error-stopping-server", e), e);
+                INFO_ERROR_STOPPING_SERVER.get(), e), e);
       }
     } finally {
       if (suppressOutput && StandardOutputSuppressor.isSuppressed()) {
@@ -276,10 +279,11 @@
 
     try {
     if (application != null) {
-      application.notifyListeners(
-              application.getFormattedProgress(
-                      application.getMsg("progress-starting")) +
-          application.getLineBreak());
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(application.getFormattedProgress(
+                      INFO_PROGRESS_STARTING.get()));
+      mb.append(application.getLineBreak());
+      application.notifyListeners(mb.toMessage());
     }
     LOG.log(Level.INFO, "starting server");
 
@@ -346,15 +350,15 @@
       }
 
       // Collect any messages found in the output
-      List<String> errors = errReader.getMessages();
+      List<Message> errors = errReader.getMessages();
       if (errors != null) {
-        for(String error : errors) {
+        for(Message error : errors) {
           output.addErrorMessage(error);
         }
       }
-      List<String> messages = outputReader.getMessages();
+      List<Message> messages = outputReader.getMessages();
       if (messages != null) {
-        for (String msg : messages) {
+        for (Message msg : messages) {
 
           // NOTE:  this may not be the best place to drop these.
           // However upon startup the server seems to log all messages,
@@ -439,7 +443,7 @@
           {
             throw new ApplicationException(
                 ApplicationReturnCode.ReturnCode.START_ERROR,
-                    getMsg("error-starting-server-in-windows",
+                    INFO_ERROR_STARTING_SERVER_IN_WINDOWS.get(
                             String.valueOf(port)),
                     null);
           }
@@ -447,7 +451,7 @@
           {
             throw new ApplicationException(
                 ApplicationReturnCode.ReturnCode.START_ERROR,
-                    getMsg("error-starting-server-in-unix",
+                    INFO_ERROR_STARTING_SERVER_IN_UNIX.get(
                             String.valueOf(port)),
                     null);
           }
@@ -457,8 +461,8 @@
     } catch (IOException ioe)
     {
       throw new ApplicationException(
-            ApplicationReturnCode.ReturnCode.START_ERROR, getThrowableMsg(
-                "error-starting-server", ioe), ioe);
+            ApplicationReturnCode.ReturnCode.START_ERROR,
+              getThrowableMsg(INFO_ERROR_STARTING_SERVER.get(), ioe), ioe);
     }
   } finally {
       if (suppressOuput && StandardOutputSuppressor.isSuppressed()) {
@@ -488,8 +492,10 @@
      */
     public StopReader(final BufferedReader reader,
                                       final boolean isError) {
-      final String errorTag =
-              isError ? "error-reading-erroroutput" : "error-reading-output";
+      final Message errorTag =
+              isError ?
+                      INFO_ERROR_READING_ERROROUTPUT.get() :
+                      INFO_ERROR_READING_OUTPUT.get();
 
       isFirstLine = true;
       Thread t = new Thread(new Runnable() {
@@ -498,17 +504,19 @@
             String line = reader.readLine();
             while (line != null) {
               if (application != null) {
-                StringBuilder buf = new StringBuilder();
+                MessageBuilder buf = new MessageBuilder();
                 if (!isFirstLine) {
                   buf.append(application.getProgressMessageFormatter().
                           getLineBreak());
                 }
                 if (isError) {
-                  buf.append(application.getFormattedLogError(line));
+                  buf.append(application.getFormattedLogError(
+                          Message.raw(line)));
                 } else {
-                  buf.append(application.getFormattedLog(line));
+                  buf.append(application.getFormattedLog(
+                          Message.raw(line)));
                 }
-                application.notifyListeners(buf.toString());
+                application.notifyListeners(buf.toMessage());
                 isFirstLine = false;
               }
               LOG.log(Level.INFO, "server: " + line);
@@ -516,7 +524,7 @@
             }
           } catch (Throwable t) {
             if (application != null) {
-              String errorMsg = application.getThrowableMsg(errorTag, t);
+              Message errorMsg = getThrowableMsg(errorTag, t);
               application.notifyListeners(errorMsg);
             }
             LOG.log(Level.INFO, "error reading server messages",t);
@@ -549,7 +557,7 @@
   {
     private ApplicationException ex;
 
-    private List<String> messages = new ArrayList<String>();
+    private List<Message> messages = new ArrayList<Message>();
 
     private boolean isFinished;
 
@@ -568,8 +576,10 @@
     public StartReader(final BufferedReader reader, final String startedId,
         final boolean isError)
     {
-      final String errorTag =
-          isError ? "error-reading-erroroutput" : "error-reading-output";
+      final Message errorTag =
+              isError ?
+                      INFO_ERROR_READING_ERROROUTPUT.get() :
+                      INFO_ERROR_READING_OUTPUT.get();
 
       isFirstLine = true;
 
@@ -583,7 +593,7 @@
             while (line != null)
             {
               if (application != null) {
-                StringBuffer buf = new StringBuffer();
+                MessageBuilder buf = new MessageBuilder();
                 if (!isFirstLine)
                 {
                   buf.append(application.getProgressMessageFormatter().
@@ -591,12 +601,14 @@
                 }
                 if (isError)
                 {
-                  buf.append(application.getFormattedLogError(line));
+                  buf.append(application.getFormattedLogError(
+                          Message.raw(line)));
                 } else
                 {
-                  buf.append(application.getFormattedLog(line));
+                  buf.append(application.getFormattedLog(
+                          Message.raw(line)));
                 }
-                application.notifyListeners(buf.toString());
+                application.notifyListeners(buf.toMessage());
                 isFirstLine = false;
               }
               LOG.log(Level.INFO, "server: " + line);
@@ -606,7 +618,7 @@
                 startedIdFound = true;
               }
 
-              messages.add(line);
+              messages.add(Message.raw(line));
 
               line = reader.readLine();
             }
@@ -634,7 +646,7 @@
       return ex;
     }
 
-    public List<String> getMessages() {
+    public List<Message> getMessages() {
       return messages;
     }
 
@@ -661,13 +673,4 @@
     }
   }
 
-  private String getMsg(String key, String... args) {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
-  private String getThrowableMsg(String key, Throwable t) {
-    return Utils.getThrowableMsg(ResourceProvider.getInstance(),
-            key, null, t);
-  }
-
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerHealthChecker.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerHealthChecker.java
index 0e61774..82bb817 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerHealthChecker.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerHealthChecker.java
@@ -27,11 +27,14 @@
 
 package org.opends.quicksetup.util;
 
+import org.opends.messages.Message;
+
 import org.opends.quicksetup.ApplicationReturnCode;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.ApplicationException;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.server.util.ServerConstants;
+import static org.opends.messages.QuickSetupMessages.*;
 
 import java.util.List;
 
@@ -43,7 +46,7 @@
 
   private Installation installation = null;
 
-  private List<String> errors = null;
+  private List<Message> errors = null;
 
   /**
    * Regular expression used to determine whether or not a server
@@ -87,8 +90,8 @@
         throw (ApplicationException)e;
       } else {
         throw new ApplicationException(
-            ApplicationReturnCode.ReturnCode.APPLICATION_ERROR, ResourceProvider
-                .getInstance().getMsg("error-server-health-check-failure"), e);
+            ApplicationReturnCode.ReturnCode.APPLICATION_ERROR,
+                INFO_ERROR_SERVER_HEALTH_CHECK_FAILURE.get(), e);
       }
     } finally {
       if (control != null) {
@@ -103,7 +106,7 @@
    * has not been called.
    * @return List of strings containing error messages
    */
-  public List<String> getProblemMessages() {
+  public List<Message> getProblemMessages() {
     return errors;
   }
 
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/URLWorker.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/URLWorker.java
index da4fc4c..4607b86 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/URLWorker.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/URLWorker.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.quicksetup.util;
+import org.opends.messages.Message;
 
 import javax.swing.JFrame;
 
@@ -73,7 +74,8 @@
       WebBrowserLauncher.openURL(url);
     } catch (Throwable t)
     {
-      throw new WebBrowserException(url, "Bug: throwable", t);
+      // TODO: i18n
+      throw new WebBrowserException(url, Message.raw("Bug: throwable"), t);
     }
     return null;
   }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
index 0dd79b6..b08513a 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
@@ -26,6 +26,9 @@
  */
 package org.opends.quicksetup.util;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
@@ -48,8 +51,10 @@
 import org.opends.admin.ads.util.ConnectionUtils;
 import org.opends.quicksetup.*;
 import org.opends.quicksetup.webstart.JnlpProperties;
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.server.util.SetupUtils;
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.MessageDescriptor;
 
 
 /**
@@ -527,6 +532,36 @@
   }
 
   /**
+   * This is a helper method that gets a Message representation of the elements
+   * in the Collection of Messages. The Message will display the different
+   * elements separated by the separator String.
+   *
+   * @param col
+   *          the collection containing the messages.
+   * @param separator
+   *          the separator String to be used.
+   * @return the message representation for the collection;
+   *          null if <code>col</code> is null
+   */
+  public static Message getMessageFromCollection(Collection<Message> col,
+                                                 String separator) {
+    Message message = null;
+    if (col != null) {
+      MessageBuilder mb = null;
+      for (Message m : col) {
+        if (mb == null) {
+          mb = new MessageBuilder(m);
+        } else {
+          mb.append(separator).append(m);
+        }
+      }
+      if (mb == null) mb = new MessageBuilder();
+      message = mb.toMessage();
+    }
+    return message;
+  }
+
+  /**
    * Returns the default server location that will be proposed to the user
    * in the installation.
    * @return the default server location that will be proposed to the user
@@ -604,42 +639,29 @@
 
   /**
    * Returns a localized message for a given properties key an throwable.
-   * @param key the key of the message in the properties file.
-   * @param i18n the ResourceProvider to be used.
-   * @param args the arguments of the message in the properties file.
+   * @param message prefix
    * @param t the throwable for which we want to get a message.
    *
    * @return a localized message for a given properties key and throwable.
    */
-  public static String getThrowableMsg(ResourceProvider i18n, String key,
-      String[] args, Throwable t)
+  public static Message getThrowableMsg(Message message, Throwable t)
   {
-    String msg;
-    if (args != null)
-    {
-      msg = i18n.getMsg(key, args);
-    } else
-    {
-      msg = i18n.getMsg(key);
-    }
-
-    String tag;
+    MessageBuilder mb = new MessageBuilder(message);
+    MessageDescriptor.Arg1<CharSequence> tag;
     if (isOutOfMemory(t))
     {
-      tag = "exception-out-of-memory-details";
+      tag = INFO_EXCEPTION_OUT_OF_MEMORY_DETAILS;
     }
     else
     {
-      tag = "exception-details";
+      tag = INFO_EXCEPTION_DETAILS;
     }
     String detail = t.toString();
     if (detail != null)
     {
-      String[] arg =
-      { detail };
-      msg = msg + "  " + i18n.getMsg(tag, arg);
+      mb.append("  ").append(tag.get(detail));
     }
-    return msg;
+    return mb.toMessage();
   }
 
   /**
@@ -971,11 +993,11 @@
    * @param appName
    *          application name to display in the menu bar and the dock.
    */
-  public static void setMacOSXMenuBar(String appName)
+  public static void setMacOSXMenuBar(Message appName)
   {
     System.setProperty("apple.laf.useScreenMenuBar", "true");
     System.setProperty("com.apple.mrj.application.apple.menu.about.name",
-                       appName);
+                       String.valueOf(appName));
   }
 
   /**
@@ -1048,6 +1070,35 @@
   }
 
   /**
+   * Creates a message consisting of the string representation of the
+   * elements in the <code>list</code> separated by <code>separator</code>.
+   * @param list the list to print
+   * @param separator to use in separating elements
+   * @param prefix prepended to each individual element in the list before
+   *        adding to the returned string.
+   * @param suffix appended to each individual element in the list before
+   *        adding to the returned string.
+   * @return String representing the list
+   */
+  static public Message listToMessage(List<Message> list, String separator,
+                                      String prefix, String suffix) {
+    MessageBuilder sb = new MessageBuilder();
+    for (int i = 0; i < list.size(); i++) {
+      if (prefix != null) {
+        sb.append(prefix);
+      }
+      sb.append(list.get(i));
+      if (suffix != null) {
+        sb.append(suffix);
+      }
+      if (i < list.size() - 1) {
+        sb.append(separator);
+      }
+    }
+    return sb.toMessage();
+  }
+
+  /**
    * Creates a string consisting of the string representation of the
    * elements in the <code>list</code> separated by <code>separator</code>.
    * @param list the list to print
@@ -1160,8 +1211,7 @@
       LOG.log(Level.INFO, "error trying to determine current build string", e);
     }
     if (b == null) {
-      b = ResourceProvider.getInstance().
-              getMsg("upgrade-build-id-unknown");
+      b = INFO_UPGRADE_BUILD_ID_UNKNOWN.get().toString();
     }
     return b;
   }
@@ -1190,48 +1240,53 @@
    * respected by this method when calculating where to place
    * new breaks to control the maximum line length.
    *
-   * @param d String to break
+   * @param cs String to break
    * @param maxll int maximum line length
    * @return String representing <code>d</code> with HTML break
    *         tags inserted
    */
-  static public String breakHtmlString(String d, int maxll) {
-    int len = d.length();
-    if (len <= 0)
-      return d;
-    if (len > maxll) {
+  static public String breakHtmlString(CharSequence cs, int maxll) {
+    if (cs != null) {
+      String d = cs.toString();
+      int len = d.length();
+      if (len <= 0)
+        return d;
+      if (len > maxll) {
 
-      // First see if there are any tags that would cause a
-      // natural break in the line.  If so start line break
-      // point evaluation from that point.
-      for (String tag : Constants.BREAKING_TAGS) {
-        int p = d.lastIndexOf(tag, maxll);
-        if (p > 0 && p < len) {
-          return d.substring(0, p + tag.length()) +
-                 breakHtmlString(
-                         d.substring(p + tag.length()),
-                         maxll);
+        // First see if there are any tags that would cause a
+        // natural break in the line.  If so start line break
+        // point evaluation from that point.
+        for (String tag : Constants.BREAKING_TAGS) {
+          int p = d.lastIndexOf(tag, maxll);
+          if (p > 0 && p < len) {
+            return d.substring(0, p + tag.length()) +
+                   breakHtmlString(
+                           d.substring(p + tag.length()),
+                           maxll);
+          }
         }
-      }
 
-      // Now look for spaces in which to insert a break.
-      // First see if there are any spaces counting backward
-      // from the max line length.  If there aren't any, then
-      // use the first space encountered after the max line
-      // lenght.
-      int p = d.lastIndexOf(' ', maxll);
-      if (p <= 0) {
-        p = d.indexOf(' ', maxll);
-      }
-      if (p > 0 && p < len) {
-        return d.substring(0, p) +
-                Constants.HTML_LINE_BREAK +
-               breakHtmlString(d.substring(p + 1), maxll);
+        // Now look for spaces in which to insert a break.
+        // First see if there are any spaces counting backward
+        // from the max line length.  If there aren't any, then
+        // use the first space encountered after the max line
+        // lenght.
+        int p = d.lastIndexOf(' ', maxll);
+        if (p <= 0) {
+          p = d.indexOf(' ', maxll);
+        }
+        if (p > 0 && p < len) {
+          return d.substring(0, p) +
+                  Constants.HTML_LINE_BREAK +
+                 breakHtmlString(d.substring(p + 1), maxll);
+        } else {
+          return d;
+        }
       } else {
         return d;
       }
     } else {
-      return d;
+      return null;
     }
   }
 
@@ -1277,4 +1332,17 @@
             text.indexOf('>') != -1);
   }
 
+  /**
+   * Wraps a message accoring to client tool console width.
+   * @param text to wrap
+   * @return raw message representing wrapped string
+   */
+  static public Message wrap(Message text)
+  {
+    return Message.raw(
+            org.opends.server.util.StaticUtils.wrapText(text,
+                    getCommandLineMaxLineWidth()));
+  }
+
+
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/WebBrowserException.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/WebBrowserException.java
index 0cb620a..21de5bc 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/WebBrowserException.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/WebBrowserException.java
@@ -27,13 +27,16 @@
 
 package org.opends.quicksetup.util;
 
+import org.opends.server.types.OpenDsException;
+import org.opends.messages.Message;
+
 /**
  * This class is the exception that we get when we try to launch the user web
  * browser and we fail.  The exception is generated in WebBrowserLauncher.
  *
  */
-public class WebBrowserException extends Exception
-{
+public class WebBrowserException extends OpenDsException {
+
   private static final long serialVersionUID = 4283835325192567244L;
 
   private String url;
@@ -44,7 +47,7 @@
    * @param msg the error message.
    * @param rootCause the root cause.
    */
-  public WebBrowserException(String url, String msg, Throwable rootCause)
+  public WebBrowserException(String url, Message msg, Throwable rootCause)
   {
     super(msg, rootCause);
     this.url = url;
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/WebBrowserLauncher.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/WebBrowserLauncher.java
index 73e14e7..14f7e59 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/WebBrowserLauncher.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/WebBrowserLauncher.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.quicksetup.util;
+import org.opends.messages.Message;
 
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
@@ -78,8 +79,9 @@
 
         if (browser == null)
         {
-          throw new WebBrowserException(url, "Could not find web browser",
-              null);
+          throw new WebBrowserException(url, // TODO: i18n
+                  Message.raw("Could not find web browser"),
+                  null);
         } else
         {
           Runtime.getRuntime().exec(new String[]
@@ -88,22 +90,28 @@
       }
     } catch (ClassNotFoundException cnfe)
     {
-      throw new WebBrowserException(url, "Class Not Found Exception", cnfe);
+      throw new WebBrowserException(url, // TODO: i18n
+              Message.raw("Class Not Found Exception"), cnfe);
     } catch (IOException ioe)
     {
-      throw new WebBrowserException(url, "IO Exception", ioe);
+      throw new WebBrowserException(url, // TODO: i18n
+              Message.raw("IO Exception"), ioe);
     } catch (InterruptedException ie)
     {
-      throw new WebBrowserException(url, "Interrupted Exception", ie);
+      throw new WebBrowserException(url, // TODO: i18n
+              Message.raw("Interrupted Exception"), ie);
     } catch (NoSuchMethodException nsme)
     {
-      throw new WebBrowserException(url, "No Such Method Exception", nsme);
+      throw new WebBrowserException(url, // TODO: i18n
+              Message.raw("No Such Method Exception"), nsme);
     } catch (InvocationTargetException ite)
     {
-      throw new WebBrowserException(url, "Invocation Target Exception", ite);
+      throw new WebBrowserException(url, // TODO: i18n
+              Message.raw("Invocation Target Exception"), ite);
     } catch (IllegalAccessException iae)
     {
-      throw new WebBrowserException(url, "Illegal Access Exception", iae);
+      throw new WebBrowserException(url, // TODO: i18n
+              Message.raw("Illegal Access Exception"), iae);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java
index 81d0865..e13be3b 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java
@@ -27,10 +27,12 @@
 
 package org.opends.quicksetup.util;
 
+import org.opends.messages.Message;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import org.opends.quicksetup.ApplicationException;
 import org.opends.quicksetup.Application;
 import org.opends.quicksetup.ApplicationReturnCode;
-import org.opends.quicksetup.i18n.ResourceProvider;
 
 import java.io.*;
 import java.util.zip.ZipInputStream;
@@ -203,11 +205,9 @@
                     ratioBeforeCompleted, ratioWhenCompleted, permissions);
 
           } catch (IOException ioe) {
-            String[] arg =
-                    {entry.getName()};
-            String errorMsg =
-                    Utils.getThrowableMsg(ResourceProvider.getInstance(),
-                            "error-copying", arg, ioe);
+            Message errorMsg =
+                    Utils.getThrowableMsg(
+                            INFO_ERROR_COPYING.get(entry.getName()), ioe);
 
             throw new ApplicationException(
                 ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
@@ -242,11 +242,9 @@
       }
 
     } catch (IOException ioe) {
-      String[] arg =
-              {zipFileName};
-      String errorMsg =
-              Utils.getThrowableMsg(ResourceProvider.getInstance(),
-                      "error-zip-stream", arg, ioe);
+      Message errorMsg =
+              Utils.getThrowableMsg(
+                      INFO_ERROR_ZIP_STREAM.get(zipFileName), ioe);
       throw new ApplicationException(
           ApplicationReturnCode.ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
           errorMsg, ioe);
@@ -272,9 +270,8 @@
       throws IOException
   {
     if (application != null) {
-      String progressSummary =
-              ResourceProvider.getInstance().getMsg("progress-extracting",
-                      new String[]{ Utils.getPath(destination) });
+      Message progressSummary =
+              INFO_PROGRESS_EXTRACTING.get(Utils.getPath(destination));
       application.notifyListeners(ratioBeforeCompleted, progressSummary);
     }
     LOG.log(Level.INFO, "extracting " + Utils.getPath(destination));
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java
index 27cbe84..0e2f1c3 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.quicksetup.webstart;
+import org.opends.messages.Message;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -36,10 +37,11 @@
 import javax.jnlp.ServiceManager;
 import javax.jnlp.UnavailableServiceException;
 
-import org.opends.quicksetup.i18n.ResourceProvider;
+
 import org.opends.quicksetup.ApplicationException;
 import org.opends.quicksetup.ApplicationReturnCode;
-import org.opends.quicksetup.util.Utils;
+import static org.opends.quicksetup.util.Utils.*;
+import static org.opends.messages.QuickSetupMessages.*;
 
 /**
  * This class is used to download the files that have been marked as lazy
@@ -82,7 +84,7 @@
 
   private Status status = Status.DOWNLOADING;
 
-  private String summary = null;
+  private Message summary = null;
 
   /**
    * This enumeration contains the different Status on which
@@ -109,7 +111,7 @@
    * Creates a default instance.
    */
   public WebStartDownloader() {
-    this.summary = getMsg("downloading");
+    this.summary = INFO_DOWNLOADING.get();
   }
 
   /**
@@ -136,8 +138,7 @@
           // This is a bug
           ex =
               new ApplicationException(ApplicationReturnCode.ReturnCode.BUG,
-                      getExceptionMsg(
-                  "bug-msg", mfe), mfe);
+                      getThrowableMsg(INFO_BUG_MSG.get(),mfe), mfe);
         } catch (IOException ioe)
         {
           StringBuilder buf = new StringBuilder();
@@ -150,19 +151,17 @@
             }
             buf.append(jars[i]);
           }
-          String[] arg =
-            { buf.toString() };
           ex =
               new ApplicationException(
               ApplicationReturnCode.ReturnCode.DOWNLOAD_ERROR,
-              getExceptionMsg("downloading-error", arg, ioe), ioe);
+              getThrowableMsg(
+                      INFO_DOWNLOADING_ERROR.get(buf.toString()), ioe), ioe);
         } catch (Throwable t)
         {
           // This is a bug
           ex =
               new ApplicationException(ApplicationReturnCode.ReturnCode.BUG,
-                      getExceptionMsg(
-                  "bug-msg", t), t);
+                      getThrowableMsg(INFO_BUG_MSG.get(), t), t);
         }
       }
     });
@@ -173,7 +172,7 @@
    * Gets a summary message of the downloader's current progress.
    * @return String for showing the user progress
    */
-  public String getSummary() {
+  public Message getSummary() {
     return this.summary;
   }
 
@@ -181,7 +180,7 @@
    * Sets a summary message of the downloader's current progress.
    * @param summary String for showing the user progress
    */
-  public void setSummary(String summary) {
+  public void setSummary(Message summary) {
     this.summary = summary;
   }
 
@@ -366,8 +365,8 @@
   {
     ex =
         new ApplicationException(
-        ApplicationReturnCode.ReturnCode.DOWNLOAD_ERROR, getMsg(
-            "downloading-error", new String[] { url.toString() }), null);
+        ApplicationReturnCode.ReturnCode.DOWNLOAD_ERROR,
+                INFO_DOWNLOADING_ERROR.get(url.toString()), null);
   }
 
   /**
@@ -445,25 +444,4 @@
     return new String[getJarUrls().length];
   }
 
-  /* Some commodity methods to get localized messages */
-  private String getExceptionMsg(String key, Throwable t)
-  {
-    return getExceptionMsg(key, null, t);
-  }
-
-  private String getExceptionMsg(String key, String[] args, Throwable t)
-  {
-    return Utils.getThrowableMsg(ResourceProvider.getInstance(), key, args, t);
-  }
-
-  private String getMsg(String key, String[] args)
-  {
-    return ResourceProvider.getInstance().getMsg(key, args);
-  }
-
-  private String getMsg(String key)
-  {
-    return ResourceProvider.getInstance().getMsg(key);
-  }
-
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java b/opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
index a1295cd..2c7769f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -269,7 +270,7 @@
    *         in the default locale, or <code>null</code> if there is
    *         no description.
    */
-  public final String getDescription() {
+  public final Message getDescription() {
     return getDescription(Locale.getDefault());
   }
 
@@ -285,7 +286,7 @@
    *         in the specified locale, or <code>null</code> if there
    *         is no description.
    */
-  public final String getDescription(Locale locale) {
+  public final Message getDescription(Locale locale) {
     try {
       return ManagedObjectDefinitionI18NResource.getInstance()
           .getMessage(this, "description", locale);
@@ -419,7 +420,7 @@
    * @return Returns the synopsis of this managed object definition in
    *         the default locale.
    */
-  public final String getSynopsis() {
+  public final Message getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -434,7 +435,7 @@
    * @return Returns the synopsis of this managed object definition in
    *         the specified locale.
    */
-  public final String getSynopsis(Locale locale) {
+  public final Message getSynopsis(Locale locale) {
     return ManagedObjectDefinitionI18NResource.getInstance()
         .getMessage(this, "synopsis", locale);
   }
@@ -448,7 +449,7 @@
    * @return Returns the user friendly name of this managed object
    *         definition in the default locale.
    */
-  public final String getUserFriendlyName() {
+  public final Message getUserFriendlyName() {
     return getUserFriendlyName(Locale.getDefault());
   }
 
@@ -463,9 +464,10 @@
    * @return Returns the user friendly name of this managed object
    *         definition in the specified locale.
    */
-  public final String getUserFriendlyName(Locale locale) {
-    return ManagedObjectDefinitionI18NResource.getInstance()
-        .getMessage(this, "user-friendly-name", locale);
+  public final Message getUserFriendlyName(Locale locale) {
+    // TODO: have admin framework getMessage return a Message
+    return Message.raw(ManagedObjectDefinitionI18NResource.getInstance()
+        .getMessage(this, "user-friendly-name", locale));
   }
 
 
@@ -477,7 +479,7 @@
    * @return Returns the user friendly plural name of this managed
    *         object definition in the default locale.
    */
-  public final String getUserFriendlyPluralName() {
+  public final Message getUserFriendlyPluralName() {
     return getUserFriendlyPluralName(Locale.getDefault());
   }
 
@@ -492,7 +494,7 @@
    * @return Returns the user friendly plural name of this managed
    *         object definition in the specified locale.
    */
-  public final String getUserFriendlyPluralName(Locale locale) {
+  public final Message getUserFriendlyPluralName(Locale locale) {
     return ManagedObjectDefinitionI18NResource.getInstance()
         .getMessage(this, "user-friendly-plural-name", locale);
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/AdminException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/AdminException.java
index a22de72..20937f1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/AdminException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/AdminException.java
@@ -26,13 +26,15 @@
  */
 
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
+import org.opends.server.types.OpenDsException;
 
 
 /**
  * Exceptions thrown when interacting with administration framework.
  */
-public abstract class AdminException extends Exception {
+public abstract class AdminException extends OpenDsException {
 
   /**
    * Create an admin exception.
@@ -63,7 +65,7 @@
    * @param cause
    *          The cause.
    */
-  protected AdminException(String message, Throwable cause) {
+  protected AdminException(Message message, Throwable cause) {
     super(message, cause);
   }
 
@@ -75,7 +77,7 @@
    * @param message
    *          The message.
    */
-  protected AdminException(String message) {
+  protected AdminException(Message message) {
     super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/AdminRuntimeException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/AdminRuntimeException.java
index ed0dfc5..15a2be7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/AdminRuntimeException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/AdminRuntimeException.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -64,8 +65,8 @@
    * @param cause
    *          The cause.
    */
-  protected AdminRuntimeException(String message, Throwable cause) {
-    super(message, cause);
+  protected AdminRuntimeException(Message message, Throwable cause) {
+    super(message.toString(), cause);
   }
 
 
@@ -76,7 +77,7 @@
    * @param message
    *          The message.
    */
-  protected AdminRuntimeException(String message) {
-    super(message);
+  protected AdminRuntimeException(Message message) {
+    super(message.toString());
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/AdministratorAction.java b/opendj-sdk/opends/src/server/org/opends/server/admin/AdministratorAction.java
index 891b38d..a2068d5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/AdministratorAction.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/AdministratorAction.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -149,7 +150,7 @@
    *         default locale, or <code>null</code> if there is no
    *         synopsis defined.
    */
-  public final String getSynopsis() {
+  public final Message getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -165,7 +166,7 @@
    *         specified locale, or <code>null</code> if there is no
    *         synopsis defined.
    */
-  public final String getSynopsis(Locale locale) {
+  public final Message getSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + propertyName
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/AliasDefaultBehaviorProvider.java b/opendj-sdk/opends/src/server/org/opends/server/admin/AliasDefaultBehaviorProvider.java
index d9c376d..03bfd3a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/AliasDefaultBehaviorProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/AliasDefaultBehaviorProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 import java.util.Locale;
 
@@ -88,7 +89,7 @@
    * @return Returns the synopsis of this alias default behavior in
    *         the default locale.
    */
-  public final String getSynopsis() {
+  public final Message getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -103,7 +104,7 @@
    * @return Returns the synopsis of this alias default behavior in
    *         the specified locale.
    */
-  public final String getSynopsis(Locale locale) {
+  public final Message getSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + propertyName
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/ClassLoaderProvider.java b/opendj-sdk/opends/src/server/org/opends/server/admin/ClassLoaderProvider.java
index 21b56a4..2de3b1d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/ClassLoaderProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/ClassLoaderProvider.java
@@ -25,14 +25,14 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.AdminMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AdminMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.io.BufferedReader;
@@ -55,8 +55,6 @@
 import org.opends.server.admin.std.meta.RootCfgDefn;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.util.Validator;
 
@@ -369,11 +367,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_ADMIN_CANNOT_OPEN_JAR_FILE;
-        String message = getMessage(msgID, extension.getName(),
-            extension.getParent(), stackTraceToSingleLineString(e));
-
-        throw new InitializationException(msgID, message);
+        Message message = ERR_ADMIN_CANNOT_OPEN_JAR_FILE.
+            get(extension.getName(), extension.getParent(),
+                stackTraceToSingleLineString(e));
+        throw new InitializationException(message);
       }
       jarFiles.add(extension);
     }
@@ -405,21 +402,19 @@
       if (!extensionsPath.exists()) {
         // The extensions directory does not exist. This is not a
         // critical problem.
-        int msgID = MSGID_ADMIN_NO_EXTENSIONS_DIR;
-        String message = getMessage(msgID, extensionsPath);
-
-        logError(ErrorLogCategory.EXTENSIONS,
-            ErrorLogSeverity.MILD_ERROR, message, msgID);
+        Message message = ERR_ADMIN_NO_EXTENSIONS_DIR.get(
+                String.valueOf(extensionsPath));
+        logError(message);
         return;
       }
 
       if (!extensionsPath.isDirectory()) {
         // The extensions directory is not a directory. This is more
         // critical.
-        int msgID = MSGID_ADMIN_EXTENSIONS_DIR_NOT_DIRECTORY;
-        String message = getMessage(msgID, extensionsPath);
-
-        throw new InitializationException(msgID, message);
+        Message message =
+            ERR_ADMIN_EXTENSIONS_DIR_NOT_DIRECTORY.get(
+                    String.valueOf(extensionsPath));
+        throw new InitializationException(message);
       }
 
       // Get each extension file name.
@@ -451,10 +446,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ADMIN_EXTENSIONS_CANNOT_LIST_FILES;
-      String message = getMessage(msgID, extensionsPath,
-          stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_ADMIN_EXTENSIONS_CANNOT_LIST_FILES.get(
+          String.valueOf(extensionsPath), stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 
@@ -474,9 +468,8 @@
         + CORE_MANIFEST);
 
     if (is == null) {
-      int msgID = MSGID_ADMIN_CANNOT_FIND_CORE_MANIFEST;
-      String message = getMessage(msgID, CORE_MANIFEST);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ADMIN_CANNOT_FIND_CORE_MANIFEST.get(CORE_MANIFEST);
+      throw new InitializationException(message);
     }
 
     try {
@@ -486,19 +479,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ADMIN_CANNOT_READ_CORE_MANIFEST;
-      String message = getMessage(msgID, CORE_MANIFEST,
-          stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ADMIN_CANNOT_READ_CORE_MANIFEST.get(
+          CORE_MANIFEST, stackTraceToSingleLineString(e));
+      throw new InitializationException(message);
     } catch (Exception e) {
       if (debugEnabled()) {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ADMIN_CANNOT_LOAD_CLASS_FROM_CORE_MANIFEST;
-      String message = getMessage(msgID, CORE_MANIFEST,
-          stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ADMIN_CANNOT_LOAD_CLASS_FROM_CORE_MANIFEST.get(
+          CORE_MANIFEST, stackTraceToSingleLineString(e));
+      throw new InitializationException(message);
     }
   }
 
@@ -528,10 +519,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_ADMIN_CANNOT_READ_EXTENSION_MANIFEST;
-        String message = getMessage(msgID, EXTENSION_MANIFEST,
-            jarFile.getName(), stackTraceToSingleLineString(e));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_ADMIN_CANNOT_READ_EXTENSION_MANIFEST.
+            get(EXTENSION_MANIFEST, jarFile.getName(),
+                stackTraceToSingleLineString(e));
+        throw new InitializationException(message);
       }
 
       try {
@@ -541,19 +532,19 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_ADMIN_CANNOT_READ_EXTENSION_MANIFEST;
-        String message = getMessage(msgID, EXTENSION_MANIFEST,
-            jarFile.getName(), stackTraceToSingleLineString(e));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_ADMIN_CANNOT_READ_EXTENSION_MANIFEST.
+            get(EXTENSION_MANIFEST, jarFile.getName(),
+                stackTraceToSingleLineString(e));
+        throw new InitializationException(message);
       } catch (Exception e) {
         if (debugEnabled()) {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_ADMIN_CANNOT_LOAD_CLASS_FROM_EXTENSION_MANIFEST;
-        String message = getMessage(msgID, EXTENSION_MANIFEST,
-            jarFile.getName(), stackTraceToSingleLineString(e));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_ADMIN_CANNOT_LOAD_CLASS_FROM_EXTENSION_MANIFEST.
+            get(EXTENSION_MANIFEST, jarFile.getName(),
+                stackTraceToSingleLineString(e));
+        throw new InitializationException(message);
       }
     }
   }
@@ -631,11 +622,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ADMIN_CANNOT_OPEN_JAR_FILE;
-      String message = getMessage(msgID, jar.getName(), jar
-          .getParent(), stackTraceToSingleLineString(e));
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ADMIN_CANNOT_OPEN_JAR_FILE.get(
+          jar.getName(), jar.getParent(), stackTraceToSingleLineString(e));
+      throw new InitializationException(message);
     }
     return jarFile;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/DecodingException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/DecodingException.java
index f6cfe85..1fcd1e7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/DecodingException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/DecodingException.java
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.admin;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -47,6 +47,6 @@
    * {@inheritDoc}
    */
   @Override
-  public abstract String getMessage();
+  public abstract Message getMessageObject();
 
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/DefinitionDecodingException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/DefinitionDecodingException.java
index d5f49ae..7644f99 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/DefinitionDecodingException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/DefinitionDecodingException.java
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.admin;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -51,34 +51,34 @@
      * The managed object could be found but did not contain any type
      * information (eg missing object classes in LDAP).
      */
-    NO_TYPE_INFORMATION(
+    NO_TYPE_INFORMATION(Message.raw( // TODO: i18n?
         "The managed object could be found but did not contain any"
-            + " type information (e.g. missing object classes in LDAP)."),
+            + " type information (e.g. missing object classes in LDAP).")),
 
     /**
      * The managed object could be found but did not contain the expected type
      * information (eg incorrect object classes in LDAP).
      */
-    WRONG_TYPE_INFORMATION(
+    WRONG_TYPE_INFORMATION(Message.raw( // TODO: i18n?
         "The managed object could be found but did not contain the"
             + " expected type information (e.g. incorrect object"
-            + " classes in LDAP)."),
+            + " classes in LDAP).")),
 
     /**
      * The managed object could be found but its type resolved to an abstract
      * managed object definition.
      */
-    ABSTRACT_TYPE_INFORMATION(
+    ABSTRACT_TYPE_INFORMATION(Message.raw( // TODO: i18n?
         "The managed object could be found but its type resolved to an"
-            + " abstract managed object definition.");
+            + " abstract managed object definition."));
 
     // Simple description of this reason for debugging.
-    private String msg;
+    private Message msg;
 
 
 
     // Private constructor.
-    private Reason(String msg) {
+    private Reason(Message msg) {
       this.msg = msg;
     }
 
@@ -118,7 +118,7 @@
    * {@inheritDoc}
    */
   @Override
-  public String getMessage() {
+  public Message getMessageObject() {
     return reason.msg;
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/EnumPropertyDefinition.java b/opendj-sdk/opends/src/server/org/opends/server/admin/EnumPropertyDefinition.java
index 5a22bcf..aa75b06 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/EnumPropertyDefinition.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/EnumPropertyDefinition.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -214,7 +215,7 @@
    *         of this enumeration property definition in the default
    *         locale.
    */
-  public final String getValueSynopsis(E value) {
+  public final Message getValueSynopsis(E value) {
     return getValueSynopsis(Locale.getDefault(), value);
   }
 
@@ -232,7 +233,7 @@
    *         of this enumeration property definition in the specified
    *         locale.
    */
-  public final String getValueSynopsis(Locale locale, E value) {
+  public final Message getValueSynopsis(Locale locale, E value) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + getName()
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/InstantiableRelationDefinition.java b/opendj-sdk/opends/src/server/org/opends/server/admin/InstantiableRelationDefinition.java
index 89228f7..229ca16 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/InstantiableRelationDefinition.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/InstantiableRelationDefinition.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -184,7 +185,7 @@
    * @return Returns the user friendly plural name of this relation
    *         definition in the default locale.
    */
-  public final String getUserFriendlyPluralName() {
+  public final Message getUserFriendlyPluralName() {
     return getUserFriendlyPluralName(Locale.getDefault());
   }
 
@@ -199,7 +200,7 @@
    * @return Returns the user friendly plural name of this relation
    *         definition in the specified locale.
    */
-  public final String getUserFriendlyPluralName(Locale locale) {
+  public final Message getUserFriendlyPluralName(Locale locale) {
     String property = "relation." + getName() + ".user-friendly-plural-name";
     return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
         getParentDefinition(), property, locale);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/IntegerPropertyDefinition.java b/opendj-sdk/opends/src/server/org/opends/server/admin/IntegerPropertyDefinition.java
index 4904066..601bf03 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/IntegerPropertyDefinition.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/IntegerPropertyDefinition.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -228,7 +229,7 @@
    *         definition in the default locale, or <code>null</code>
    *         if there is no unit synopsis.
    */
-  public String getUnitSynopsis() {
+  public Message getUnitSynopsis() {
     return getUnitSynopsis(Locale.getDefault());
   }
 
@@ -244,7 +245,7 @@
    *         definition in the specified locale, or <code>null</code>
    *         if there is no unit synopsis.
    */
-  public String getUnitSynopsis(Locale locale) {
+  public Message getUnitSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + getName() + ".syntax.integer.unit-synopsis";
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectAlreadyExistsException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectAlreadyExistsException.java
index f5450b7..9ba2004 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectAlreadyExistsException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectAlreadyExistsException.java
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.admin;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -51,6 +51,6 @@
    * Create a managed object already exists exception.
    */
   public ManagedObjectAlreadyExistsException() {
-    super(MSG);
+    super(Message.raw(MSG));
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java b/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java
index dc36db0..4615588 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -127,7 +128,7 @@
    * @throws MissingResourceException
    *           If the key was not found.
    */
-  public String getMessage(AbstractManagedObjectDefinition<?, ?> d,
+  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
       String key) throws MissingResourceException {
     return getMessage(d, key, Locale.getDefault(), (String[]) null);
   }
@@ -149,7 +150,7 @@
    * @throws MissingResourceException
    *           If the key was not found.
    */
-  public String getMessage(AbstractManagedObjectDefinition<?, ?> d,
+  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
       String key, Locale locale) throws MissingResourceException {
     return getMessage(d, key, locale, (String[]) null);
   }
@@ -174,16 +175,17 @@
    * @throws MissingResourceException
    *           If the key was not found.
    */
-  public String getMessage(AbstractManagedObjectDefinition<?, ?> d,
+  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
       String key, Locale locale, String... args)
       throws MissingResourceException {
     ResourceBundle resource = getResourceBundle(d, locale);
 
+    // TODO: use message framework directly
     if (args == null) {
-      return resource.getString(key);
+      return Message.raw(resource.getString(key));
     } else {
       MessageFormat mf = new MessageFormat(resource.getString(key));
-      return mf.format(args);
+      return Message.raw(mf.format(args));
     }
   }
 
@@ -205,7 +207,7 @@
    * @throws MissingResourceException
    *           If the key was not found.
    */
-  public String getMessage(AbstractManagedObjectDefinition<?, ?> d,
+  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
       String key, String... args) throws MissingResourceException {
     return getMessage(d, key, Locale.getDefault(), args);
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectNotFoundException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectNotFoundException.java
index 23a4730..da465f4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectNotFoundException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/ManagedObjectNotFoundException.java
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.admin;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -40,7 +40,7 @@
   private static final long serialVersionUID = -477551786551892978L;
 
   // Simple description of this exception for debugging.
-  private static final String MSG =
+  private static final String MSG = // TODO: i18n
     "The requested managed object could not be found";
 
 
@@ -49,7 +49,7 @@
    * Create a managed object not found exception.
    */
   public ManagedObjectNotFoundException() {
-    super(MSG);
+    super(Message.raw(MSG));
   }
 
 
@@ -61,6 +61,6 @@
    *          The cause of this exception.
    */
   public ManagedObjectNotFoundException(Throwable cause) {
-    super(MSG, cause);
+    super(Message.raw(MSG), cause);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/OperationsException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/OperationsException.java
index 4d362c7..90710b5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/OperationsException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/OperationsException.java
@@ -27,6 +27,7 @@
 
 package org.opends.server.admin;
 
+import org.opends.messages.Message;
 
 
 /**
@@ -71,7 +72,7 @@
    * @param cause
    *          The cause.
    */
-  public OperationsException(String message, Throwable cause) {
+  public OperationsException(Message message, Throwable cause) {
     super(message, cause);
   }
 
@@ -83,7 +84,7 @@
    * @param message
    *          The message.
    */
-  public OperationsException(String message) {
+  public OperationsException(Message message) {
     super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinition.java b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinition.java
index e26e465..fe7c856 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinition.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinition.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -467,7 +468,7 @@
    *         the default locale, or <code>null</code> if there is no
    *         description.
    */
-  public final String getDescription() {
+  public final Message getDescription() {
     return getDescription(Locale.getDefault());
   }
 
@@ -483,7 +484,7 @@
    *         the specified locale, or <code>null</code> if there is
    *         no description.
    */
-  public final String getDescription(Locale locale) {
+  public final Message getDescription(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + propertyName + ".description";
@@ -528,7 +529,7 @@
    * @return Returns the synopsis of this property definition in the
    *         default locale.
    */
-  public final String getSynopsis() {
+  public final Message getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -543,7 +544,7 @@
    * @return Returns the synopsis of this property definition in the
    *         specified locale.
    */
-  public final String getSynopsis(Locale locale) {
+  public final Message getSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + propertyName + ".synopsis";
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
index b6fda04..f953d1e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import java.text.NumberFormat;
@@ -45,7 +46,7 @@
    * Underlying implementation.
    */
   private class MyPropertyDefinitionVisitor extends
-      PropertyDefinitionVisitor<String, Void> {
+      PropertyDefinitionVisitor<Message, Void> {
 
     // Flag indicating whether detailed syntax information will be
     // generated.
@@ -71,9 +72,9 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitAttributeType(AttributeTypePropertyDefinition d,
+    public Message visitAttributeType(AttributeTypePropertyDefinition d,
         Void p) {
-      return "OID";
+      return Message.raw("OID");
     }
 
 
@@ -82,11 +83,11 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitBoolean(BooleanPropertyDefinition d, Void p) {
+    public Message visitBoolean(BooleanPropertyDefinition d, Void p) {
       if (isDetailed) {
-        return "false | true";
+        return Message.raw("false | true");
       } else {
-        return "BOOLEAN";
+        return Message.raw("BOOLEAN");
       }
     }
 
@@ -96,11 +97,11 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitClass(ClassPropertyDefinition d, Void p) {
+    public Message visitClass(ClassPropertyDefinition d, Void p) {
       if (isDetailed && !d.getInstanceOfInterface().isEmpty()) {
-        return "CLASS <= " + d.getInstanceOfInterface().get(0);
+        return Message.raw("CLASS <= " + d.getInstanceOfInterface().get(0));
       } else {
-        return "CLASS";
+        return Message.raw("CLASS");
       }
     }
 
@@ -110,11 +111,11 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitDN(DNPropertyDefinition d, Void p) {
+    public Message visitDN(DNPropertyDefinition d, Void p) {
       if (isDetailed && d.getBaseDN() != null) {
-        return "DN <= " + d.getBaseDN();
+        return Message.raw("DN <= " + d.getBaseDN());
       } else {
-        return "DN";
+        return Message.raw("DN");
       }
     }
 
@@ -124,8 +125,8 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitDuration(DurationPropertyDefinition d, Void p) {
-      StringBuilder builder = new StringBuilder();
+    public Message visitDuration(DurationPropertyDefinition d, Void p) {
+      MessageBuilder builder = new MessageBuilder();
       DurationUnit unit = d.getBaseUnit();
 
       if (isDetailed && d.getLowerLimit() > 0) {
@@ -135,7 +136,7 @@
 
       builder.append("DURATION (");
       builder.append(unit.getShortName());
-      builder.append(')');
+      builder.append(")");
 
       if (isDetailed) {
         if (d.getUpperLimit() != null) {
@@ -148,7 +149,7 @@
         }
       }
 
-      return builder.toString();
+      return builder.toMessage();
     }
 
 
@@ -157,16 +158,16 @@
      * {@inheritDoc}
      */
     @Override
-    public <E extends Enum<E>> String visitEnum(EnumPropertyDefinition<E> d,
+    public <E extends Enum<E>> Message 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 name.toUpperCase();
+          return Message.raw(name.toUpperCase());
         } else {
-          return name.substring(i + 1).toUpperCase();
+          return Message.raw(name.substring(i + 1).toUpperCase());
         }
       } else {
         Set<String> values = new TreeSet<String>();
@@ -176,7 +177,7 @@
         }
 
         boolean isFirst = true;
-        StringBuilder builder = new StringBuilder();
+        MessageBuilder builder = new MessageBuilder();
         for (String s : values) {
           if (!isFirst) {
             builder.append(" | ");
@@ -185,7 +186,7 @@
           isFirst = false;
         }
 
-        return builder.toString();
+        return builder.toMessage();
       }
     }
 
@@ -195,11 +196,11 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitInteger(IntegerPropertyDefinition d, Void p) {
-      StringBuilder builder = new StringBuilder();
+    public Message visitInteger(IntegerPropertyDefinition d, Void p) {
+      MessageBuilder builder = new MessageBuilder();
 
       if (isDetailed) {
-        builder.append(d.getLowerLimit());
+        builder.append(String.valueOf(d.getLowerLimit()));
         builder.append(" <= ");
       }
 
@@ -208,13 +209,13 @@
       if (isDetailed) {
         if (d.getUpperLimit() != null) {
           builder.append(" <= ");
-          builder.append(d.getUpperLimit());
+          builder.append(String.valueOf(d.getUpperLimit()));
         } else if (d.isAllowUnlimited()) {
           builder.append(" | unlimited");
         }
       }
 
-      return builder.toString();
+      return builder.toMessage();
     }
 
 
@@ -223,8 +224,8 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitIPAddress(IPAddressPropertyDefinition d, Void p) {
-      return "HOST_NAME";
+    public Message visitIPAddress(IPAddressPropertyDefinition d, Void p) {
+      return Message.raw("HOST_NAME");
     }
 
 
@@ -233,9 +234,9 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitIPAddressMask(IPAddressMaskPropertyDefinition d,
+    public Message visitIPAddressMask(IPAddressMaskPropertyDefinition d,
         Void p) {
-      return "IP_ADDRESS_MASK";
+      return Message.raw("IP_ADDRESS_MASK");
     }
 
 
@@ -244,8 +245,8 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitSize(SizePropertyDefinition d, Void p) {
-      StringBuilder builder = new StringBuilder();
+    public Message visitSize(SizePropertyDefinition d, Void p) {
+      MessageBuilder builder = new MessageBuilder();
 
       if (isDetailed && d.getLowerLimit() > 0) {
         SizeUnit unit = SizeUnit.getBestFitUnitExact(d.getLowerLimit());
@@ -288,7 +289,7 @@
         }
       }
 
-      return builder.toString();
+      return builder.toMessage();
     }
 
 
@@ -297,11 +298,11 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitString(StringPropertyDefinition d, Void p) {
+    public Message visitString(StringPropertyDefinition d, Void p) {
       if (d.getPattern() != null) {
-        return d.getPatternUsage();
+        return Message.raw(d.getPatternUsage());
       } else {
-        return "STRING";
+        return Message.raw("STRING");
       }
     }
 
@@ -311,9 +312,9 @@
      * {@inheritDoc}
      */
     @Override
-    public String visitUnknown(PropertyDefinition<?> d, Void p)
+    public Message visitUnknown(PropertyDefinition<?> d, Void p)
         throws UnknownPropertyDefinitionException {
-      return "?";
+      return Message.raw("?");
     }
   }
 
@@ -344,7 +345,7 @@
    * @return Returns the usage information for the provided property
    *         definition.
    */
-  public String getUsage(PropertyDefinition<?> pd) {
+  public Message getUsage(PropertyDefinition<?> pd) {
     return pd.accept(pimpl, null);
   };
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyNotFoundException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyNotFoundException.java
index e0e29a9..0783ee3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyNotFoundException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/PropertyNotFoundException.java
@@ -27,6 +27,7 @@
 
 package org.opends.server.admin;
 
+import org.opends.messages.Message;
 
 
 /**
@@ -55,7 +56,8 @@
    *          The name of the property that could not be found.
    */
   public PropertyNotFoundException(String propertyName) {
-    super("The property \"" + propertyName + "\" was not recognized");
+    super(Message.raw("The property \"" + propertyName +
+            "\" was not recognized")); // TODO: i18n
     this.propertyName = propertyName;
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/RelationDefinition.java b/opendj-sdk/opends/src/server/org/opends/server/admin/RelationDefinition.java
index 05e4332..0b7cfb3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/RelationDefinition.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/RelationDefinition.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -253,7 +254,7 @@
    *         the default locale, or <code>null</code> if there is no
    *         description.
    */
-  public final String getDescription() {
+  public final Message getDescription() {
     return getDescription(Locale.getDefault());
   }
 
@@ -269,7 +270,7 @@
    *         the specified locale, or <code>null</code> if there is
    *         no description.
    */
-  public final String getDescription(Locale locale) {
+  public final Message getDescription(Locale locale) {
     try {
       String property = "relation." + common.name + ".description";
       return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
@@ -310,7 +311,7 @@
    * @return Returns the synopsis of this relation definition in the
    *         default locale.
    */
-  public final String getSynopsis() {
+  public final Message getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -325,7 +326,7 @@
    * @return Returns the synopsis of this relation definition in the
    *         specified locale.
    */
-  public final String getSynopsis(Locale locale) {
+  public final Message getSynopsis(Locale locale) {
     String property = "relation." + common.name + ".synopsis";
     return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
         getParentDefinition(), property, locale);
@@ -340,7 +341,7 @@
    * @return Returns the user friendly name of this relation
    *         definition in the default locale.
    */
-  public final String getUserFriendlyName() {
+  public final Message getUserFriendlyName() {
     return getUserFriendlyName(Locale.getDefault());
   }
 
@@ -355,7 +356,7 @@
    * @return Returns the user friendly name of this relation
    *         definition in the specified locale.
    */
-  public final String getUserFriendlyName(Locale locale) {
+  public final Message getUserFriendlyName(Locale locale) {
     String property = "relation." + common.name + ".user-friendly-name";
     return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
         getParentDefinition(), property, locale);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/StringPropertyDefinition.java b/opendj-sdk/opends/src/server/org/opends/server/admin/StringPropertyDefinition.java
index 62ef6fd..ca0b007 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/StringPropertyDefinition.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/StringPropertyDefinition.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -240,7 +241,7 @@
    *         there is no pattern matching defined for this string
    *         property definition).
    */
-  public String getPatternSynopsis() {
+  public Message getPatternSynopsis() {
     return getPatternSynopsis(Locale.getDefault());
   }
 
@@ -258,7 +259,7 @@
    *         there is no pattern matching defined for this string
    *         property definition).
    */
-  public String getPatternSynopsis(Locale locale) {
+  public Message getPatternSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + getName()
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/Tag.java b/opendj-sdk/opends/src/server/org/opends/server/admin/Tag.java
index 1128ee5..6222062 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/Tag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/Tag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin;
+import org.opends.messages.Message;
 
 
 
@@ -164,7 +165,7 @@
    *
    * @return Returns the synopsis of this tag in the default locale.
    */
-  public final String getSynopsis() {
+  public final Message getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -177,7 +178,7 @@
    *          The locale.
    * @return Returns the synopsis of this tag in the specified locale.
    */
-  public final String getSynopsis(Locale locale) {
+  public final Message getSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "tag." + name + ".synopsis";
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/AdminClientException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/AdminClientException.java
index fd1fb28..7f85bf9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/AdminClientException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/AdminClientException.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
 
 
 
@@ -67,7 +68,7 @@
    *          The cause.
    */
   public AdminClientException(Throwable cause) {
-    super(cause.getMessage(), cause);
+    super(cause);
   }
 
 
@@ -81,7 +82,7 @@
    * @param cause
    *          The cause.
    */
-  public AdminClientException(String message, Throwable cause) {
+  public AdminClientException(Message message, Throwable cause) {
     super(message, cause);
   }
 
@@ -93,7 +94,7 @@
    * @param message
    *          The message.
    */
-  public AdminClientException(String message) {
+  public AdminClientException(Message message) {
     super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/AdminSecurityException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/AdminSecurityException.java
index 138f75e..e372487 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/AdminSecurityException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/AdminSecurityException.java
@@ -26,6 +26,8 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
+
 
 
 
@@ -66,7 +68,7 @@
    * @param cause
    *          The cause.
    */
-  protected AdminSecurityException(String message, Throwable cause) {
+  protected AdminSecurityException(Message message, Throwable cause) {
     super(message, cause);
   }
 
@@ -78,7 +80,7 @@
    * @param message
    *          The message.
    */
-  protected AdminSecurityException(String message) {
+  protected AdminSecurityException(Message message) {
     super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthenticationException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthenticationException.java
index 936d041..3672515 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthenticationException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthenticationException.java
@@ -26,6 +26,8 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
+
 
 
 
@@ -72,7 +74,7 @@
    * @param cause
    *          The cause.
    */
-  public AuthenticationException(String message, Throwable cause) {
+  public AuthenticationException(Message message, Throwable cause) {
     super(message, cause);
   }
 
@@ -84,7 +86,7 @@
    * @param message
    *          The message.
    */
-  public AuthenticationException(String message) {
+  public AuthenticationException(Message message) {
     super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthenticationNotSupportedException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthenticationNotSupportedException.java
index d70c51a..3907ddb 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthenticationNotSupportedException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthenticationNotSupportedException.java
@@ -26,6 +26,8 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
+
 
 
 
@@ -73,7 +75,7 @@
    * @param cause
    *          The cause.
    */
-  public AuthenticationNotSupportedException(String message, Throwable cause) {
+  public AuthenticationNotSupportedException(Message message, Throwable cause) {
     super(message, cause);
   }
 
@@ -85,7 +87,7 @@
    * @param message
    *          The message.
    */
-  public AuthenticationNotSupportedException(String message) {
+  public AuthenticationNotSupportedException(Message message) {
     super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthorizationException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthorizationException.java
index ef16fcd..81e21b7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthorizationException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/AuthorizationException.java
@@ -26,6 +26,8 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
+
 
 
 
@@ -73,7 +75,7 @@
    * @param cause
    *          The cause.
    */
-  public AuthorizationException(String message, Throwable cause) {
+  public AuthorizationException(Message message, Throwable cause) {
     super(message, cause);
   }
 
@@ -85,7 +87,7 @@
    * @param message
    *          The message.
    */
-  public AuthorizationException(String message) {
+  public AuthorizationException(Message message) {
     super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/CommunicationException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/CommunicationException.java
index e13bdce..2bcfaec 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/CommunicationException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/CommunicationException.java
@@ -26,6 +26,8 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
+
 
 
 
@@ -74,7 +76,7 @@
    * @param cause
    *          The cause.
    */
-  public CommunicationException(String message, Throwable cause) {
+  public CommunicationException(Message message, Throwable cause) {
     super(message, cause);
   }
 
@@ -86,7 +88,7 @@
    * @param message
    *          The message.
    */
-  public CommunicationException(String message) {
+  public CommunicationException(Message message) {
     super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/ConcurrentModificationException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/ConcurrentModificationException.java
index 9438989..0c7f95c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/ConcurrentModificationException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/ConcurrentModificationException.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
 
 
 
@@ -77,7 +78,7 @@
    * @param cause
    *          The cause.
    */
-  public ConcurrentModificationException(String message, Throwable cause) {
+  public ConcurrentModificationException(Message message, Throwable cause) {
     super(message, cause);
   }
 
@@ -89,7 +90,7 @@
    * @param message
    *          The message.
    */
-  public ConcurrentModificationException(String message) {
+  public ConcurrentModificationException(Message message) {
     super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/IllegalManagedObjectNameException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/IllegalManagedObjectNameException.java
index 541015e..f9d7066 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/IllegalManagedObjectNameException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/IllegalManagedObjectNameException.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
 
 
 
@@ -117,11 +118,11 @@
    * {@inheritDoc}
    */
   @Override
-  public String getMessage() {
+  public Message getMessageObject() {
     if (illegalName.length() == 0) {
-      return "Empty managed object names are not permitted";
+      return Message.raw("Empty managed object names are not permitted");
     } else if (illegalName.trim().length() == 0) {
-      return "Blank managed object names are not permitted";
+      return Message.raw("Blank managed object names are not permitted");
     } else if (namingPropertyDefinition != null) {
       try {
         namingPropertyDefinition.decodeValue(illegalName);
@@ -131,12 +132,14 @@
             + "syntax: %s";
         PropertyDefinitionUsageBuilder builder =
           new PropertyDefinitionUsageBuilder(true);
-        return String.format(msg, illegalName, namingPropertyDefinition
-            .getName(), builder.getUsage(namingPropertyDefinition));
+        return Message.raw(String.format(msg, illegalName,
+                namingPropertyDefinition.getName(),
+                builder.getUsage(namingPropertyDefinition)));
       }
     }
 
-    return "The managed object name \"" + illegalName + "\" is not permitted";
+    return Message.raw("The managed object name \"" + illegalName +
+            "\" is not permitted");
   }
 
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/ManagedObjectDecodingException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/ManagedObjectDecodingException.java
index a960c48..d4fd0c1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/ManagedObjectDecodingException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/ManagedObjectDecodingException.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
 
 
 
@@ -92,13 +93,13 @@
    * {@inheritDoc}
    */
   @Override
-  public String getMessage() {
+  public Message getMessageObject() {
     StringBuilder builder = new StringBuilder();
     builder.append("The managed object could not be decoded due"
         + " to the following property exceptions: ");
     // FIXME: better formatting.
     builder.append(causes.toString());
-    return builder.toString();
+    return Message.raw(builder.toString()); // TODO: i18n?
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/MissingMandatoryPropertiesException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/MissingMandatoryPropertiesException.java
index 4b9f02a..3ad6c90 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/MissingMandatoryPropertiesException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/MissingMandatoryPropertiesException.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
 
 
 
@@ -103,7 +104,7 @@
    * {@inheritDoc}
    */
   @Override
-  public String getMessage() {
+  public Message getMessageObject() {
     StringBuilder builder = new StringBuilder();
     builder.append("The following properties are mandatory: ");
     boolean isFirst = true;
@@ -114,7 +115,7 @@
       builder.append(e.getPropertyDefinition().getName());
       isFirst = false;
     }
-    return builder.toString();
+    return Message.raw(builder.toString());
   }
 
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/OperationRejectedException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/OperationRejectedException.java
index 0c9a453..45095ee 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/OperationRejectedException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/OperationRejectedException.java
@@ -26,6 +26,8 @@
  */
 
 package org.opends.server.admin.client;
+import org.opends.messages.Message;
+
 
 
 
@@ -76,7 +78,7 @@
    * @param cause
    *          The cause.
    */
-  public OperationRejectedException(String message, Throwable cause) {
+  public OperationRejectedException(Message message, Throwable cause) {
     super(message, cause);
   }
 
@@ -88,7 +90,7 @@
    * @param message
    *          The message.
    */
-  public OperationRejectedException(String message) {
+  public OperationRejectedException(Message message) {
     super(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliAds.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliAds.java
index eecca44..b9650bb 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliAds.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliAds.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.admin.client.cli;
 
-import static org.opends.server.messages.AdminMessages.*;
+import static org.opends.messages.AdminMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 
 import java.io.OutputStream;
@@ -181,26 +181,26 @@
 
     // Create-ads subcommand
     createAdsSubCmd = new SubCommand(argParser, SubCommandNameEnum.CREATE_ADS
-        .toString(), MSGID_ADMIN_SUBCMD_CREATE_ADS_DESCRIPTION);
+        .toString(), INFO_ADMIN_SUBCMD_CREATE_ADS_DESCRIPTION.get());
     createAdsSubCmd.setHidden(true);
     subCommands.add(createAdsSubCmd);
 
     createAdsBackendNameArg = new StringArgument("backendName",
         OPTION_SHORT_BACKENDNAME, OPTION_LONG_BACKENDNAME, true, true,
         OPTION_VALUE_BACKENDNAME,
-        MSGID_ADMIN_ARG_BACKENDNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_BACKENDNAME_DESCRIPTION.get());
     createAdsSubCmd.addArgument(createAdsBackendNameArg);
 
     // delete-ads
     deleteAdsSubCmd = new SubCommand(argParser,SubCommandNameEnum.DELETE_ADS
-        .toString(), MSGID_ADMIN_SUBCMD_DELETE_ADS_DESCRIPTION);
+        .toString(), INFO_ADMIN_SUBCMD_DELETE_ADS_DESCRIPTION.get());
     deleteAdsSubCmd.setHidden(true);
     subCommands.add(deleteAdsSubCmd);
 
     deleteAdsBackendNameArg = new StringArgument("backendName",
         OPTION_SHORT_BACKENDNAME, OPTION_LONG_BACKENDNAME, true, true,
         OPTION_VALUE_BACKENDNAME,
-        MSGID_ADMIN_ARG_BACKENDNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_BACKENDNAME_DESCRIPTION.get());
     deleteAdsSubCmd.addArgument(deleteAdsBackendNameArg);
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliGlobalAdmin.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliGlobalAdmin.java
index 0aca974..98fd8aa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliGlobalAdmin.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliGlobalAdmin.java
@@ -25,10 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.client.cli;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
-import static org.opends.server.messages.AdminMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.AdminMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 
 import java.io.OutputStream;
@@ -64,20 +65,20 @@
 public class DsFrameworkCliGlobalAdmin implements DsFrameworkCliSubCommandGroup
 {
   // Strings used in property help.
-  private final static String DESCRIPTION_OPTIONS_TITLE =
-    getMessage(MSGID_DSCFG_HELP_DESCRIPTION_OPTION);
+  private final static Message DESCRIPTION_OPTIONS_TITLE =
+    INFO_DSCFG_HELP_DESCRIPTION_OPTION.get();
 
-  private final static String DESCRIPTION_OPTIONS_READ =
-    getMessage(MSGID_DSCFG_HELP_DESCRIPTION_READ);
+  private final static Message DESCRIPTION_OPTIONS_READ =
+    INFO_DSCFG_HELP_DESCRIPTION_READ.get();
 
-  private final static String DESCRIPTION_OPTIONS_WRITE =
-    getMessage(MSGID_DSCFG_HELP_DESCRIPTION_WRITE);
+  private final static Message DESCRIPTION_OPTIONS_WRITE =
+    INFO_DSCFG_HELP_DESCRIPTION_WRITE.get();
 
-  private final static String DESCRIPTION_OPTIONS_MANDATORY =
-    getMessage(MSGID_DSCFG_HELP_DESCRIPTION_MANDATORY);
+  private final static Message DESCRIPTION_OPTIONS_MANDATORY =
+    INFO_DSCFG_HELP_DESCRIPTION_MANDATORY.get();
 
-  private final static String DESCRIPTION_OPTIONS_SINGLE =
-    getMessage(MSGID_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED);
+  private final static Message DESCRIPTION_OPTIONS_SINGLE =
+    INFO_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED.get();
 
   /**
    * The subcommand Parser.
@@ -286,68 +287,68 @@
     // create-admin-user subcommand.
     createAdminUserSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.CREATE_ADMIN_USER.toString(),
-        MSGID_ADMIN_SUBCMD_CREATE_ADMIN_USER_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_CREATE_ADMIN_USER_DESCRIPTION.get());
     subCommands.add(createAdminUserSubCmd);
 
     createAdminUserUserIdArg = new StringArgument("userID", null,
         OPTION_LONG_USERID, false, true, OPTION_VALUE_USERID,
-        MSGID_ADMIN_ARG_USERID_DESCRIPTION);
+        INFO_ADMIN_ARG_USERID_DESCRIPTION.get());
     createAdminUserSubCmd.addArgument(createAdminUserUserIdArg);
 
     createAdminUserSetArg = new StringArgument(OPTION_LONG_SET,
         OPTION_SHORT_SET, OPTION_LONG_SET, false, true, true,
-        OPTION_VALUE_SET, null, null, MSGID_DSCFG_DESCRIPTION_PROP_VAL);
+        OPTION_VALUE_SET, null, null, INFO_DSCFG_DESCRIPTION_PROP_VAL.get());
     createAdminUserSubCmd.addArgument(createAdminUserSetArg);
 
     // delete-admin-user subcommand.
     deleteAdminUserSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.DELETE_ADMIN_USER.toString(),
-        MSGID_ADMIN_SUBCMD_DELETE_ADMIN_USER_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_DELETE_ADMIN_USER_DESCRIPTION.get());
     subCommands.add(deleteAdminUserSubCmd);
 
     deleteAdminUserUserIdArg = new StringArgument("userID", null,
         OPTION_LONG_USERID, false, true, OPTION_VALUE_USERID,
-        MSGID_ADMIN_ARG_USERID_DESCRIPTION);
+        INFO_ADMIN_ARG_USERID_DESCRIPTION.get());
     deleteAdminUserSubCmd.addArgument(deleteAdminUserUserIdArg);
 
     // list-admin-user subcommand.
     listAdminUserSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.LIST_ADMIN_USER.toString(),
-        MSGID_ADMIN_SUBCMD_LIST_ADMIN_USER_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_LIST_ADMIN_USER_DESCRIPTION.get());
     subCommands.add(listAdminUserSubCmd);
 
     // get-admin-user-properties subcommand.
     getAdminUserPropertiesSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.GET_ADMIN_USER_PROPERTIES.toString(),
-        MSGID_ADMIN_SUBCMD_GET_ADMIN_USER_PROPERTIES_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_GET_ADMIN_USER_PROPERTIES_DESCRIPTION.get());
     subCommands.add(getAdminUserPropertiesSubCmd);
 
     getAdminUserPropertiesUserIdArg = new StringArgument("userID", null,
         OPTION_LONG_USERID, false, true, OPTION_VALUE_USERID,
-        MSGID_ADMIN_ARG_USERID_DESCRIPTION);
+        INFO_ADMIN_ARG_USERID_DESCRIPTION.get());
     getAdminUserPropertiesUserIdArg.setMultiValued(true);
     getAdminUserPropertiesSubCmd.addArgument(getAdminUserPropertiesUserIdArg);
 
     // set-admin-user-properties subcommand.
     setAdminUserPropertiesSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.SET_ADMIN_USER_PROPERTIES.toString(),
-        MSGID_ADMIN_SUBCMD_SET_ADMIN_USER_PROPERTIES_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_SET_ADMIN_USER_PROPERTIES_DESCRIPTION.get());
     subCommands.add(setAdminUserPropertiesSubCmd);
 
     setAdminUserPropertiesUserIdArg = new StringArgument("userID", null,
         OPTION_LONG_USERID, false, true, OPTION_VALUE_USERID,
-        MSGID_ADMIN_ARG_USERID_DESCRIPTION);
+        INFO_ADMIN_ARG_USERID_DESCRIPTION.get());
     setAdminUserPropertiesSubCmd.addArgument(setAdminUserPropertiesUserIdArg);
 
     setAdminUserPropertiesSetArg = new StringArgument(OPTION_LONG_SET,
         OPTION_SHORT_SET, OPTION_LONG_SET, false, true, true,
-        OPTION_VALUE_SET, null, null, MSGID_DSCFG_DESCRIPTION_PROP_VAL);
+        OPTION_VALUE_SET, null, null, INFO_DSCFG_DESCRIPTION_PROP_VAL.get());
     setAdminUserPropertiesSubCmd.addArgument(setAdminUserPropertiesSetArg);
 
     // list-admin-user-properties subcommand.
     listAdminUserPropertiesSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.LIST_ADMIN_USER_PROPERTIES.toString(),
-        MSGID_ADMIN_SUBCMD_LIST_ADMIN_USER_PROPERTIES_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_LIST_ADMIN_USER_PROPERTIES_DESCRIPTION.get());
     subCommands.add(listAdminUserPropertiesSubCmd);
 
     // Create association between ADSContext enum and server
@@ -363,7 +364,7 @@
       AdministratorProperty prop = AdministratorProperty.UID;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          prop.getAttributeName(), false, false, true, "", null, null, -1);
+          prop.getAttributeName(), false, false, true, "", null, null, null);
       userAdminProperties.put(prop, arg);
     }
 
@@ -375,7 +376,7 @@
       AdministratorProperty prop = AdministratorProperty.PASSWORD;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          prop.getAttributeName(), false, false, true, "", null, null, -1);
+          prop.getAttributeName(), false, false, true, "", null, null, null);
       userAdminProperties.put(prop, arg);
     }
 
@@ -386,7 +387,7 @@
       AdministratorProperty prop = AdministratorProperty.DESCRIPTION;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          prop.getAttributeName(), false, false, true, "", null, null, -1);
+          prop.getAttributeName(), false, false, true, "", null, null, null);
       userAdminProperties.put(prop, arg);
     }
 
@@ -397,7 +398,7 @@
       AdministratorProperty prop = AdministratorProperty.ADMINISTRATOR_DN;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          prop.getAttributeName(), false, false, true, "", null, null, -1);
+          prop.getAttributeName(), false, false, true, "", null, null, null);
       userAdminProperties.put(prop, arg);
       readonlyadminUserProperties.add(prop);
     }
@@ -577,11 +578,10 @@
         out.println();
 
         TableBuilder table = new TableBuilder();
-        table.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_NAME));
-        table.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_OPTIONS));
-        table.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_SYNTAX));
-        table.appendHeading(getMessage(
-            MSGID_CLI_HEADING_PROPERTY_DEFAULT_VALUE));
+        table.appendHeading(INFO_DSCFG_HEADING_PROPERTY_NAME.get());
+        table.appendHeading(INFO_DSCFG_HEADING_PROPERTY_OPTIONS.get());
+        table.appendHeading(INFO_DSCFG_HEADING_PROPERTY_SYNTAX.get());
+        table.appendHeading(INFO_CLI_HEADING_PROPERTY_DEFAULT_VALUE.get());
         for (AdministratorProperty adminUserProp : userAdminProperties.keySet())
         {
           if (userAdminProperties.get(adminUserProp).isHidden())
@@ -693,27 +693,25 @@
           .getAdminUSerPropFromName(propertyName);
       if (adminUserProperty == null)
       {
-        int msgID = MSGID_CLI_ERROR_PROPERTY_UNRECOGNIZED;
-        String message = getMessage(msgID, propertyName);
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
+        throw new ArgumentException(message);
       }
 
       // Check that propName is not hidden.
       if (userAdminProperties.get(adminUserProperty).isHidden())
       {
-        int msgID = MSGID_CLI_ERROR_PROPERTY_UNRECOGNIZED;
-        String message = getMessage(msgID, propertyName);
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
+        throw new ArgumentException(message);
       }
 
       // Check the property Syntax.
-      StringBuilder invalidReason = new StringBuilder();
+      MessageBuilder invalidReason = new MessageBuilder();
       Argument arg = userAdminProperties.get(adminUserProperty) ;
       if ( ! arg.valueIsAcceptable(value, invalidReason))
       {
-        int msgID = MSGID_CLI_ERROR_INVALID_PROPERTY_VALUE;
-        String message = getMessage(msgID, propertyName, value);
-        throw new ArgumentException(msgID, message);
+        Message message =
+            ERR_CLI_ERROR_INVALID_PROPERTY_VALUE.get(propertyName, value);
+        throw new ArgumentException(message);
       }
       userAdminProperties.get(adminUserProperty).addValue(value);
 
@@ -747,9 +745,9 @@
       // but not yet is the map. Check if we have a default value.
       if (arg.getDefaultValue() == null)
       {
-        int msgID = MSGID_CLI_ERROR_MISSING_PROPERTY;
-        String message = getMessage(msgID, s.getAttributeName());
-        throw new ArgumentException(msgID, message);
+        Message message =
+            ERR_CLI_ERROR_MISSING_PROPERTY.get(s.getAttributeName());
+        throw new ArgumentException(message);
       }
       else
       {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliMain.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliMain.java
index 5e87f55..0794fb8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliMain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliMain.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.client.cli;
+import org.opends.messages.Message;
 
 import java.io.OutputStream;
 import java.io.PrintStream;
@@ -37,9 +38,9 @@
 import org.opends.server.util.args.ArgumentException;
 
 import static org.opends.server.admin.client.cli.DsFrameworkCliReturnCode.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.AdminMessages.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.AdminMessages.*;
+import static org.opends.messages.ToolMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -166,15 +167,14 @@
     DsFrameworkCliParser argParser ;
     try
     {
-      String toolDescription = getMessage(MSGID_ADMIN_TOOL_DESCRIPTION);
+      Message toolDescription = INFO_ADMIN_TOOL_DESCRIPTION.get();
       argParser = new DsFrameworkCliParser(CLASS_NAME,
           toolDescription, false);
       argParser.initializeParser(out);
     }
     catch (ArgumentException ae)
     {
-      int msgID = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CANNOT_INITIALIZE_ARGS.getReturnCode();
@@ -187,8 +187,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -203,9 +202,8 @@
 
     if (argParser.getSubCommand() == null)
     {
-      int msgID = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID,
-          getMessage(MSGID_DSCFG_ERROR_MISSING_SUBCOMMAND));
+      Message message = ERR_ERROR_PARSING_ARGS.get(
+              ERR_DSCFG_ERROR_MISSING_SUBCOMMAND.get());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println();
       err.println(argParser.getHelpUsageReference());
@@ -265,30 +263,29 @@
     }
     catch (ArgumentException ae)
     {
-      int msgID = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CANNOT_INITIALIZE_ARGS.getReturnCode();
     }
 
-    int msgID = returnCode.getMessageId();
-    String message = "" ;
+    Message msg = returnCode.getMessage();
     if ( (returnCode == SUCCESSFUL)
          ||
          (returnCode == SUCCESSFUL_NOP))
     {
       if (argParser.isVerbose())
       {
-        out.println(wrapText(getMessage(msgID), MAX_LINE_WIDTH));
+        out.println(wrapText(msg.toString(), MAX_LINE_WIDTH));
       }
     }
     else
-    if (msgID != MSGID_ADMIN_NO_MESSAGE)
+    if (msg != null &&
+            msg.getDescriptor().getId() != ERR_ADMIN_NO_MESSAGE.getId())
     {
-      message = getMessage(MSGID_ADMIN_ERROR);
-      message = message + getMessage(msgID);
-      err.println(wrapText(message, MAX_LINE_WIDTH));
+      MessageBuilder mb = new MessageBuilder(INFO_ADMIN_ERROR.get());
+      mb.append(msg);
+      err.println(wrapText(mb.toString(), MAX_LINE_WIDTH));
       if (argParser.isVerbose() && (adsException != null))
       {
         adsException.printStackTrace();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java
index 35dd23f..61f8957 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java
@@ -27,9 +27,9 @@
 package org.opends.server.admin.client.cli;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.AdminMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.AdminMessages.*;
+import static org.opends.messages.ToolMessages.*;
+import org.opends.messages.Message;
 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;
@@ -93,7 +93,7 @@
    *          Indicates whether subcommand and long argument names
    *          should be treated in a case-sensitive manner.
    */
-  public DsFrameworkCliParser(String mainClassName, String toolDescription,
+  public DsFrameworkCliParser(String mainClassName, Message toolDescription,
       boolean longArgumentsCaseSensitive)
   {
     super(mainClassName, toolDescription, longArgumentsCaseSensitive);
@@ -148,7 +148,7 @@
       String grpName = oneCli.getGroupName();
       String option = OPTION_LONG_HELP + "-" + grpName;
       BooleanArgument arg = new BooleanArgument(option, null, option,
-          MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE, grpName);
+          INFO_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE.get(grpName));
       addGlobalArgument(arg);
       arg.setHidden(oneCli.isHidden());
       TreeSet<SubCommand> subCmds = new TreeSet<SubCommand>(c);
@@ -159,7 +159,7 @@
     // Register the --help-all argument.
     String option = OPTION_LONG_HELP + "-all";
     BooleanArgument arg = new BooleanArgument(option, null, option,
-        MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_ALL);
+        INFO_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_ALL.get());
 
     addGlobalArgument(arg);
     setUsageGroupArgument(arg, allSubCommands);
@@ -235,9 +235,7 @@
       }
       catch (NamingException e)
       {
-        int msgID = MSGID_ADMIN_CANNOT_CONNECT_TO_ADS;
-        String message = getMessage(msgID, host);
-
+        Message message = ERR_ADMIN_CANNOT_CONNECT_TO_ADS.get(host);
         try
         {
           err.write(wrapText(message, MAX_LINE_WIDTH).getBytes());
@@ -260,9 +258,7 @@
       }
       catch (NamingException e)
       {
-        int msgID = MSGID_ADMIN_CANNOT_CONNECT_TO_ADS;
-        String message = getMessage(msgID, host);
-
+        Message message = ERR_ADMIN_CANNOT_CONNECT_TO_ADS.get(host);
         try
         {
           err.write(wrapText(message, MAX_LINE_WIDTH).getBytes());
@@ -284,9 +280,7 @@
       }
       catch (NamingException e)
       {
-        int msgID = MSGID_ADMIN_CANNOT_CONNECT_TO_ADS;
-        String message = getMessage(msgID, host);
-
+        Message message = ERR_ADMIN_CANNOT_CONNECT_TO_ADS.get(host);
         try
         {
           err.write(wrapText(message, MAX_LINE_WIDTH).getBytes());
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliReturnCode.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliReturnCode.java
index bc30759..386ba31 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliReturnCode.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliReturnCode.java
@@ -25,8 +25,10 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.client.cli;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AdminMessages.*;
+import static org.opends.messages.AdminMessages.*;
+
 
 import java.util.HashMap;
 
@@ -42,128 +44,128 @@
     /**
      * successful.
      */
-    SUCCESSFUL(0, MSGID_ADMIN_SUCCESSFUL),
+    SUCCESSFUL(0, INFO_ADMIN_SUCCESSFUL.get()),
 
     /**
      * successful but no operation was performed.
      */
-    SUCCESSFUL_NOP(SUCCESSFUL.getReturnCode(), MSGID_ADMIN_SUCCESSFUL_NOP),
+    SUCCESSFUL_NOP(SUCCESSFUL.getReturnCode(), INFO_ADMIN_SUCCESSFUL_NOP.get()),
 
     /**
      * Unable to initialize arguments.
      */
-    CANNOT_INITIALIZE_ARGS(1, MSGID_ADMIN_NO_MESSAGE),
+    CANNOT_INITIALIZE_ARGS(1, ERR_ADMIN_NO_MESSAGE.get()),
 
     /**
      * Cannot parse argument.
      */
-    ERROR_PARSING_ARGS(2, MSGID_ADMIN_NO_MESSAGE),
+    ERROR_PARSING_ARGS(2, ERR_ADMIN_NO_MESSAGE.get()),
     /**
      * Return code: Cannot get the connection to the ADS.
      */
-    CANNOT_CONNECT_TO_ADS(3, MSGID_ADMIN_NO_MESSAGE),
+    CANNOT_CONNECT_TO_ADS(3, ERR_ADMIN_NO_MESSAGE.get()),
 
     /**
      * The host name is missing.
      */
-    MISSING_HOSTNAME(4, MSGID_ADMIN_MISSING_HOSTNAME),
+    MISSING_HOSTNAME(4, ERR_ADMIN_MISSING_HOSTNAME.get()),
 
     /**
      * The host name is not valid.
      */
-    NOVALID_HOSTNAME(5, MSGID_ADMIN_NOVALID_HOSTNAME),
+    NOVALID_HOSTNAME(5, ERR_ADMIN_NOVALID_HOSTNAME.get()),
 
     /**
      * The installation path is missing.
      */
-    MISSING_IPATH(6, MSGID_ADMIN_MISSING_IPATH),
+    MISSING_IPATH(6, ERR_ADMIN_MISSING_IPATH.get()),
 
     /**
      * The installation path is not valid.
      */
-    NOVALID_IPATH(7, MSGID_ADMIN_NOVALID_IPATH),
+    NOVALID_IPATH(7, ERR_ADMIN_NOVALID_IPATH.get()),
 
     /**
      * An access permission error.
      */
-    ACCESS_PERMISSION(8, MSGID_ADMIN_ACCESS_PERMISSION),
+    ACCESS_PERMISSION(8, ERR_ADMIN_ACCESS_PERMISSION.get()),
 
     /**
      * The entity is already registered.
      */
-    ALREADY_REGISTERED(9, MSGID_ADMIN_ALREADY_REGISTERED),
+    ALREADY_REGISTERED(9, ERR_ADMIN_ALREADY_REGISTERED.get()),
 
     /**
      * The installation is broken.
      */
-    BROKEN_INSTALL(10, MSGID_ADMIN_BROKEN_INSTALL),
+    BROKEN_INSTALL(10, ERR_ADMIN_BROKEN_INSTALL.get()),
 
     /**
      * The entity is not yet registered.
      */
-    NOT_YET_REGISTERED(11, MSGID_ADMIN_NOT_YET_REGISTERED),
+    NOT_YET_REGISTERED(11, ERR_ADMIN_NOT_YET_REGISTERED.get()),
 
     /**
      * The port is missing.
      */
-    MISSING_PORT(12, MSGID_ADMIN_MISSING_PORT),
+    MISSING_PORT(12, ERR_ADMIN_MISSING_PORT.get()),
 
     /**
      * The port is not valid.
      */
-    NOVALID_PORT(13, MSGID_ADMIN_NOVALID_PORT),
+    NOVALID_PORT(13, ERR_ADMIN_NOVALID_PORT.get()),
 
     /**
      * The name is missing.
      */
-    MISSING_NAME(14, MSGID_ADMIN_MISSING_NAME),
+    MISSING_NAME(14, ERR_ADMIN_MISSING_NAME.get()),
 
     /**
      * The administration UID is missing.
      */
-    MISSING_ADMIN_UID(15, MSGID_ADMIN_MISSING_ADMIN_UID),
+    MISSING_ADMIN_UID(15, ERR_ADMIN_MISSING_ADMIN_UID.get()),
 
     /**
      * The administrator password is missing.
      */
-    MISSING_ADMIN_PASSWORD(16, MSGID_ADMIN_MISSING_ADMIN_PASSWORD),
+    MISSING_ADMIN_PASSWORD(16, ERR_ADMIN_MISSING_ADMIN_PASSWORD.get()),
 
     /**
      * Unexpected error (potential bug).
      */
-    ERROR_UNEXPECTED(17, MSGID_ADMIN_ERROR_UNEXPECTED),
+    ERROR_UNEXPECTED(17, ERR_ADMIN_ERROR_UNEXPECTED.get()),
 
     /**
      * Unexpected error (potential bug).
      */
-    CONFLICTING_ARGS(18, MSGID_ADMIN_NO_MESSAGE),
+    CONFLICTING_ARGS(18, ERR_ADMIN_NO_MESSAGE.get()),
 
     /**
      * The server entity is not yet registered.
      */
-    SERVER_NOT_REGISTERED(19, MSGID_ADMIN_SERVER_NOT_REGISTERED);
+    SERVER_NOT_REGISTERED(19, ERR_ADMIN_SERVER_NOT_REGISTERED.get());
 
     // The retunCodevalue of the value.
     private final int returnCode;
 
     // The message id to be used of the value.
-    private final int messageId;
+    private final Message message;
 
     // Private constructor.
-    private DsFrameworkCliReturnCode(int returnCode, int messageId)
+    private DsFrameworkCliReturnCode(int returnCode, Message message)
     {
       this.returnCode = returnCode;
-      this.messageId = messageId;
+      this.message = message;
     }
 
     /**
-     * Get the corresponding message Id.
+     * Get the corresponding message.
      *
-     * @return The corresponding message Id.
+     * @return The corresponding message.
      */
-    public int getMessageId()
+    public Message getMessage()
     {
-      return messageId;
+      return message;
     }
 
     /**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java
index fe734a7..eba4c43 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java
@@ -25,10 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.client.cli;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
-import static org.opends.server.messages.AdminMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.AdminMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 
 import java.io.OutputStream;
@@ -65,20 +66,20 @@
 public class DsFrameworkCliServer implements DsFrameworkCliSubCommandGroup
 {
   // Strings used in property help.
-  private final static String DESCRIPTION_OPTIONS_TITLE =
-    getMessage(MSGID_DSCFG_HELP_DESCRIPTION_OPTION);
+  private final static Message DESCRIPTION_OPTIONS_TITLE =
+    INFO_DSCFG_HELP_DESCRIPTION_OPTION.get();
 
-  private final static String DESCRIPTION_OPTIONS_READ =
-    getMessage(MSGID_DSCFG_HELP_DESCRIPTION_READ);
+  private final static Message DESCRIPTION_OPTIONS_READ =
+    INFO_DSCFG_HELP_DESCRIPTION_READ.get();
 
-  private final static String DESCRIPTION_OPTIONS_WRITE =
-    getMessage(MSGID_DSCFG_HELP_DESCRIPTION_WRITE);
+  private final static Message DESCRIPTION_OPTIONS_WRITE =
+    INFO_DSCFG_HELP_DESCRIPTION_WRITE.get();
 
-  private final static String DESCRIPTION_OPTIONS_MANDATORY =
-    getMessage(MSGID_DSCFG_HELP_DESCRIPTION_MANDATORY);
+  private final static Message DESCRIPTION_OPTIONS_MANDATORY =
+    INFO_DSCFG_HELP_DESCRIPTION_MANDATORY.get();
 
-  private final static String DESCRIPTION_OPTIONS_SINGLE =
-    getMessage(MSGID_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED);
+  private final static Message DESCRIPTION_OPTIONS_SINGLE =
+    INFO_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED.get();
 
   /**
    * The subcommand Parser.
@@ -284,51 +285,51 @@
     // list-server-properties subcommand
     listServerPropertiesSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.LIST_SERVER_PROPERTIES.toString(),
-        MSGID_ADMIN_SUBCMD_LIST_SERVER_PROPS_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_LIST_SERVER_PROPS_DESCRIPTION.get());
     subCommands.add(listServerPropertiesSubCmd);
 
     // register-server subcommand
     registerServerSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.REGISTER_SERVER.toString(),
-        MSGID_ADMIN_SUBCMD_REGISTER_SERVER_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_REGISTER_SERVER_DESCRIPTION.get());
     subCommands.add(registerServerSubCmd);
 
     registerServerServerIdArg = new StringArgument("serverID", null,
         OPTION_LONG_SERVERID, false, true, OPTION_VALUE_SERVERID,
-        MSGID_ADMIN_ARG_SERVERID_DESCRIPTION);
+        INFO_ADMIN_ARG_SERVERID_DESCRIPTION.get());
     registerServerSubCmd.addArgument(registerServerServerIdArg);
 
     registerServerSetArg = new StringArgument(OPTION_LONG_SET,
         OPTION_SHORT_SET, OPTION_LONG_SET, false, true, true,
-        OPTION_VALUE_SET, null, null, MSGID_DSCFG_DESCRIPTION_PROP_VAL);
+        OPTION_VALUE_SET, null, null, INFO_DSCFG_DESCRIPTION_PROP_VAL.get());
     registerServerSubCmd.addArgument(registerServerSetArg);
 
     // unregister-server subcommand
     unregisterServerSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.UNREGISTER_SERVER.toString(),
-        MSGID_ADMIN_SUBCMD_UNREGISTER_SERVER_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_UNREGISTER_SERVER_DESCRIPTION.get());
     subCommands.add(unregisterServerSubCmd);
 
     unregisterServerServerIDArg = new StringArgument("serverID", null,
         OPTION_LONG_SERVERID, false, true, OPTION_VALUE_SERVERID,
-        MSGID_ADMIN_ARG_SERVERID_DESCRIPTION);
+        INFO_ADMIN_ARG_SERVERID_DESCRIPTION.get());
     unregisterServerSubCmd.addArgument(unregisterServerServerIDArg);
 
     // list-servers subcommand
     listServersSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.LIST_SERVERS.toString(),
-        MSGID_ADMIN_SUBCMD_LIST_SERVERS_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_LIST_SERVERS_DESCRIPTION.get());
     subCommands.add(listServersSubCmd);
 
     // get-server-properties subcommand
     getServerPropertiesSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.GET_SERVER_PROPERTIES.toString(),
-        MSGID_ADMIN_SUBCMD_GET_SERVER_PROPERTIES_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_GET_SERVER_PROPERTIES_DESCRIPTION.get());
     subCommands.add(getServerPropertiesSubCmd);
 
     getServerPropertiesServerIdArg = new StringArgument("serverID", null,
         OPTION_LONG_SERVERID, false, true, OPTION_VALUE_SERVERID,
-        MSGID_ADMIN_ARG_SERVERID_DESCRIPTION);
+        INFO_ADMIN_ARG_SERVERID_DESCRIPTION.get());
     getServerPropertiesServerIdArg.setMultiValued(true);
     getServerPropertiesSubCmd.addArgument(getServerPropertiesServerIdArg);
 
@@ -336,17 +337,17 @@
     // set-server-properties subcommand
     setServerPropertiesSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.SET_SERVER_PROPERTIES.toString(),
-        MSGID_ADMIN_SUBCMD_SET_SERVER_PROPERTIES_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_SET_SERVER_PROPERTIES_DESCRIPTION.get());
     subCommands.add(setServerPropertiesSubCmd);
 
     setServerPropertiesServerIdArg = new StringArgument("serverID", null,
         OPTION_LONG_SERVERID, true, true, OPTION_VALUE_SERVERID,
-        MSGID_ADMIN_ARG_SERVERID_DESCRIPTION);
+        INFO_ADMIN_ARG_SERVERID_DESCRIPTION.get());
     setServerPropertiesSubCmd.addArgument(setServerPropertiesServerIdArg);
 
     setServerPropertiesSetArg = new StringArgument(OPTION_LONG_SET,
         OPTION_SHORT_SET, OPTION_LONG_SET, false, true, true,
-        OPTION_VALUE_SET, null, null, MSGID_DSCFG_DESCRIPTION_PROP_VAL);
+        OPTION_VALUE_SET, null, null, INFO_DSCFG_DESCRIPTION_PROP_VAL.get());
     setServerPropertiesSubCmd.addArgument(setServerPropertiesSetArg);
 
 
@@ -363,7 +364,7 @@
       ServerProperty prop = ServerProperty.ID;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          prop.getAttributeName(), false, false, true, "", null, null, -1);
+          prop.getAttributeName(), false, false, true, "", 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, "", "localhost", null, -1);
+          false, true, "", "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, attName, 389, null, -1);
+          true, true, 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, attName, -1);
+          false, true, 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, attName, -1);
+          false, true, 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, attName, -1);
+          false, true, 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, attName, null, null, -1);
+          false, true, 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, attName, null, null, -1);
+          false, true, 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, attName, null, null, -1);
+          false, true, 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, attName, null, null, -1);
+          false, true, attName, null, null, null);
       serverProperties.put(prop, arg);
     }
 
@@ -476,7 +477,7 @@
     {
       ServerProperty prop = ServerProperty.LDAP_ENABLED;
       String attName = prop.getAttributeName();
-      BooleanArgument arg = new BooleanArgument(attName, null, attName, -1);
+      BooleanArgument arg = new BooleanArgument(attName, null, attName, null);
       arg.setDefaultValue("false");
       serverProperties.put(prop, arg);
     }
@@ -487,7 +488,7 @@
     {
       ServerProperty prop = ServerProperty.LDAPS_ENABLED;
       String attName = prop.getAttributeName();
-      BooleanArgument arg = new BooleanArgument(attName, null, attName, -1);
+      BooleanArgument arg = new BooleanArgument(attName, null, attName, null);
       arg.setDefaultValue("false");
       serverProperties.put(prop, arg);
     }
@@ -498,7 +499,7 @@
     {
       ServerProperty prop = ServerProperty.STARTTLS_ENABLED;
       String attName = prop.getAttributeName();
-      BooleanArgument arg = new BooleanArgument(attName, null, attName, -1);
+      BooleanArgument arg = new BooleanArgument(attName, null, attName, null);
       arg.setDefaultValue("false");
       serverProperties.put(prop, arg);
     }
@@ -509,7 +510,7 @@
     {
       ServerProperty prop = ServerProperty.JMX_ENABLED;
       String attName = prop.getAttributeName();
-      BooleanArgument arg = new BooleanArgument(attName, null, attName, -1);
+      BooleanArgument arg = new BooleanArgument(attName, null, attName, null);
       arg.setDefaultValue("false");
       serverProperties.put(prop, arg);
     }
@@ -520,7 +521,7 @@
     {
       ServerProperty prop = ServerProperty.JMXS_ENABLED;
       String attName = prop.getAttributeName();
-      BooleanArgument arg = new BooleanArgument(attName, null, attName, -1);
+      BooleanArgument arg = new BooleanArgument(attName, null, attName, null);
       arg.setDefaultValue("false");
       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, attName, null, null, -1);
+          false, true, 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, attName, null, null, -1);
+          true, true, attName, null, null, null);
       arg.setHidden(true);
       serverProperties.put(prop, arg);
     }
@@ -766,11 +767,10 @@
         out.println();
 
         TableBuilder table = new TableBuilder();
-        table.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_NAME));
-        table.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_OPTIONS));
-        table.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_SYNTAX));
-        table.appendHeading(getMessage(
-            MSGID_CLI_HEADING_PROPERTY_DEFAULT_VALUE));
+        table.appendHeading(INFO_DSCFG_HEADING_PROPERTY_NAME.get());
+        table.appendHeading(INFO_DSCFG_HEADING_PROPERTY_OPTIONS.get());
+        table.appendHeading(INFO_DSCFG_HEADING_PROPERTY_SYNTAX.get());
+        table.appendHeading(INFO_CLI_HEADING_PROPERTY_DEFAULT_VALUE.get());
         for (ServerProperty serverProp : serverProperties.keySet())
         {
           if (serverProperties.get(serverProp).isHidden())
@@ -910,27 +910,25 @@
           .getServerPropFromName(propertyName);
       if (serverProperty == null)
       {
-        int msgID = MSGID_CLI_ERROR_PROPERTY_UNRECOGNIZED;
-        String message = getMessage(msgID, propertyName);
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
+        throw new ArgumentException(message);
       }
 
       // Check that propName is not hidden.
       if (serverProperties.get(serverProperty).isHidden())
       {
-        int msgID = MSGID_CLI_ERROR_PROPERTY_UNRECOGNIZED;
-        String message = getMessage(msgID, propertyName);
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
+        throw new ArgumentException(message);
       }
 
       // Check the property Syntax.
-      StringBuilder invalidReason = new StringBuilder();
+      MessageBuilder invalidReason = new MessageBuilder();
       Argument arg = serverProperties.get(serverProperty) ;
       if ( ! arg.valueIsAcceptable(value, invalidReason))
       {
-        int msgID = MSGID_CLI_ERROR_INVALID_PROPERTY_VALUE;
-        String message = getMessage(msgID, propertyName, value);
-        throw new ArgumentException(msgID, message);
+        Message message =
+            ERR_CLI_ERROR_INVALID_PROPERTY_VALUE.get(propertyName, value);
+        throw new ArgumentException(message);
       }
       serverProperties.get(serverProperty).addValue(value);
 
@@ -959,9 +957,9 @@
       // but not yet is the map. Check if we have a default value.
       if (arg.getDefaultValue() == null)
       {
-        int msgID = MSGID_CLI_ERROR_MISSING_PROPERTY;
-        String message = getMessage(msgID, s.getAttributeName());
-        throw new ArgumentException(msgID, message);
+        Message message =
+            ERR_CLI_ERROR_MISSING_PROPERTY.get(s.getAttributeName());
+        throw new ArgumentException(message);
       }
       else
       {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java
index f35587e..d883c2b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.admin.client.cli;
 
-import static org.opends.server.messages.AdminMessages.*;
+import static org.opends.messages.AdminMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 
 import java.io.IOException;
@@ -326,119 +326,119 @@
     // Create-group subcommand
     createGroupSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.CREATE_GROUP.toString(),
-        MSGID_ADMIN_SUBCMD_CREATE_GROUP_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_CREATE_GROUP_DESCRIPTION.get());
     subCommands.add(createGroupSubCmd);
 
     createGroupDescriptionArg = new StringArgument("description",
         OPTION_SHORT_DESCRIPTION, OPTION_LONG_DESCRIPTION, false, false,
         true, OPTION_VALUE_DESCRIPTION, "", null,
-        MSGID_ADMIN_ARG_DESCRIPTION_DESCRIPTION);
+        INFO_ADMIN_ARG_DESCRIPTION_DESCRIPTION.get());
     createGroupSubCmd.addArgument(createGroupDescriptionArg);
 
     createGroupGroupNameArg = new StringArgument("groupName",
         OPTION_SHORT_GROUPNAME, OPTION_LONG_GROUPNAME, true, true,
         OPTION_VALUE_GROUPNAME,
-        MSGID_ADMIN_ARG_CREATE_GROUP_GROUPNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_CREATE_GROUP_GROUPNAME_DESCRIPTION.get());
     createGroupSubCmd.addArgument(createGroupGroupNameArg);
 
     // modify-group
     modifyGroupSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.MODIFY_GROUP.toString(),
-        MSGID_ADMIN_SUBCMD_MODIFY_GROUP_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_MODIFY_GROUP_DESCRIPTION.get());
     subCommands.add(modifyGroupSubCmd);
 
     modifyGroupDescriptionArg = new StringArgument("new-description",
         OPTION_SHORT_DESCRIPTION, OPTION_LONG_DESCRIPTION, false, false,
         true, OPTION_VALUE_DESCRIPTION, "", null,
-        MSGID_ADMIN_ARG_NEW_DESCRIPTION_DESCRIPTION);
+        INFO_ADMIN_ARG_NEW_DESCRIPTION_DESCRIPTION.get());
     modifyGroupSubCmd.addArgument(modifyGroupDescriptionArg);
 
     modifyGroupGroupIdArg = new StringArgument("new-groupName",
         OPTION_SHORT_NEWGROUPNAME, OPTION_LONG_NEWGROUPNAME, false, false, true,
         OPTION_VALUE_GROUPNAME, "", null,
-        MSGID_ADMIN_ARG_NEW_GROUPNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_NEW_GROUPNAME_DESCRIPTION.get());
     modifyGroupSubCmd.addArgument(modifyGroupGroupIdArg);
 
     modifyGroupGroupNameArg = new StringArgument("groupName",
         OPTION_SHORT_GROUPNAME, OPTION_LONG_GROUPNAME, true, true,
         OPTION_VALUE_GROUPNAME,
-        MSGID_ADMIN_ARG_GROUPNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_GROUPNAME_DESCRIPTION.get());
     modifyGroupSubCmd.addArgument(modifyGroupGroupNameArg);
 
     // delete-group
     deleteGroupSubCmd = new SubCommand(argParser,SubCommandNameEnum.DELETE_GROUP
-        .toString(), MSGID_ADMIN_SUBCMD_DELETE_GROUP_DESCRIPTION);
+        .toString(), INFO_ADMIN_SUBCMD_DELETE_GROUP_DESCRIPTION.get());
     subCommands.add(deleteGroupSubCmd);
 
     deleteGroupGroupNameArg = new StringArgument("groupName",
         OPTION_SHORT_GROUPNAME, OPTION_LONG_GROUPNAME, true, true,
         OPTION_VALUE_GROUPNAME,
-        MSGID_ADMIN_ARG_GROUPNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_GROUPNAME_DESCRIPTION.get());
     deleteGroupSubCmd.addArgument(deleteGroupGroupNameArg);
 
     // list-groups
     listGroupSubCmd = new SubCommand(argParser, "list-groups",
-        MSGID_ADMIN_SUBCMD_LIST_GROUPS_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_LIST_GROUPS_DESCRIPTION.get());
     subCommands.add(listGroupSubCmd);
 
     // add-to-group
     addToGroupSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.ADD_TO_GROUP.toString(),
-        MSGID_ADMIN_SUBCMD_ADD_TO_GROUP_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_ADD_TO_GROUP_DESCRIPTION.get());
     subCommands.add(addToGroupSubCmd);
 
     addToGoupMemberNameArg = new StringArgument("memberName",
         OPTION_SHORT_MEMBERNAME, OPTION_LONG_MEMBERNAME, true, true,
         OPTION_VALUE_MEMBERNAME,
-        MSGID_ADMIN_ARG_ADD_MEMBERNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_ADD_MEMBERNAME_DESCRIPTION.get());
     addToGroupSubCmd.addArgument(addToGoupMemberNameArg);
 
     addToGroupGroupNameArg = new StringArgument("groupName",
         OPTION_SHORT_GROUPNAME, OPTION_LONG_GROUPNAME, true, true,
         OPTION_VALUE_GROUPNAME,
-        MSGID_ADMIN_ARG_GROUPNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_GROUPNAME_DESCRIPTION.get());
     addToGroupSubCmd.addArgument(addToGroupGroupNameArg);
 
     // remove-from-group
     removeFromGroupSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.REMOVE_FROM_GROUP.toString(),
-        MSGID_ADMIN_SUBCMD_REMOVE_FROM_GROUP_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_REMOVE_FROM_GROUP_DESCRIPTION.get());
     subCommands.add(removeFromGroupSubCmd);
 
     removeFromGoupMemberNameArg = new StringArgument("memberName",
         OPTION_SHORT_MEMBERNAME, OPTION_LONG_MEMBERNAME, true, true,
         OPTION_VALUE_MEMBERNAME,
-        MSGID_ADMIN_ARG_REMOVE_MEMBERNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_REMOVE_MEMBERNAME_DESCRIPTION.get());
     removeFromGroupSubCmd.addArgument(removeFromGoupMemberNameArg);
 
     removeFromGroupGroupNameArg = new StringArgument("groupName",
         OPTION_SHORT_GROUPNAME, OPTION_LONG_GROUPNAME, true, true,
         OPTION_VALUE_GROUPNAME,
-        MSGID_ADMIN_ARG_GROUPNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_GROUPNAME_DESCRIPTION.get());
     removeFromGroupSubCmd.addArgument(removeFromGroupGroupNameArg);
 
 
     // list-members
     listMembersSubCmd = new SubCommand(argParser,SubCommandNameEnum.LIST_MEMBERS
-        .toString(), MSGID_ADMIN_SUBCMD_LIST_MEMBERS_DESCRIPTION);
+        .toString(), INFO_ADMIN_SUBCMD_LIST_MEMBERS_DESCRIPTION.get());
     subCommands.add(listMembersSubCmd);
 
     listMembersGroupNameArg = new StringArgument("groupName",
         OPTION_SHORT_GROUPNAME, OPTION_LONG_GROUPNAME, true, true,
         OPTION_VALUE_GROUPNAME,
-        MSGID_ADMIN_ARG_GROUPNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_GROUPNAME_DESCRIPTION.get());
     listMembersSubCmd.addArgument(listMembersGroupNameArg);
 
     // list-membership
     listMembershipSubCmd = new SubCommand(argParser,
         SubCommandNameEnum.LIST_MEMBERSHIP.toString(),
-        MSGID_ADMIN_SUBCMD_LIST_MEMBERSHIP_DESCRIPTION);
+        INFO_ADMIN_SUBCMD_LIST_MEMBERSHIP_DESCRIPTION.get());
     subCommands.add(listMembershipSubCmd);
 
     listMembershipMemberNameArg = new StringArgument("memberName",
         OPTION_SHORT_MEMBERNAME, OPTION_LONG_MEMBERNAME, true, true,
         OPTION_VALUE_MEMBERNAME,
-        MSGID_ADMIN_ARG_MEMBERNAME_DESCRIPTION);
+        INFO_ADMIN_ARG_MEMBERNAME_DESCRIPTION.get());
     listMembershipSubCmd.addArgument(listMembershipMemberNameArg);
 
     // Create association between ADSContext enum and display field
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/SecureConnectionCliParser.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/SecureConnectionCliParser.java
index 871340f..cb99e31 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/SecureConnectionCliParser.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/cli/SecureConnectionCliParser.java
@@ -30,8 +30,9 @@
 import static org.opends.server.admin.client.cli.DsFrameworkCliReturnCode.*;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 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;
@@ -189,7 +190,7 @@
    *          should be treated in a case-sensitive manner.
    */
   protected SecureConnectionCliParser(String mainClassName,
-      String toolDescription, boolean longArgumentsCaseSensitive)
+      Message toolDescription, boolean longArgumentsCaseSensitive)
   {
     super(mainClassName, toolDescription, longArgumentsCaseSensitive);
   }
@@ -237,7 +238,7 @@
         // read the password from the stdin.
         try
         {
-          out.write(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, dn).getBytes());
+          out.write(INFO_LDAPAUTH_PASSWORD_PROMPT.get(dn).getBytes());
           char[] pwChars = PasswordReader.readPassword();
           bindPasswordValue = new String(pwChars);
         } catch(Exception ex)
@@ -269,7 +270,8 @@
       // read the password from the stdin.
       try
       {
-        out.write(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, dn).getBytes());
+        out.write(INFO_LDAPAUTH_PASSWORD_PROMPT.get(dn).toString()
+                .getBytes());
         char[] pwChars = PasswordReader.readPassword();
         return new String(pwChars);
       }
@@ -305,92 +307,92 @@
   throws ArgumentException
   {
     showUsageArg = new BooleanArgument("showUsage", OPTION_SHORT_HELP,
-        OPTION_LONG_HELP, MSGID_DESCRIPTION_SHOWUSAGE);
+        OPTION_LONG_HELP, INFO_DESCRIPTION_SHOWUSAGE.get());
     addGlobalArgument(showUsageArg);
     setUsageArgument(showUsageArg, outStream);
 
     useSSLArg = new BooleanArgument("useSSL", OPTION_SHORT_USE_SSL,
-        OPTION_LONG_USE_SSL, MSGID_DESCRIPTION_USE_SSL);
+        OPTION_LONG_USE_SSL, INFO_DESCRIPTION_USE_SSL.get());
     addGlobalArgument(useSSLArg);
 
     startTLSArg = new BooleanArgument("startTLS", OPTION_SHORT_START_TLS,
         OPTION_LONG_START_TLS,
-        MSGID_DESCRIPTION_START_TLS);
+        INFO_DESCRIPTION_START_TLS.get());
     addGlobalArgument(startTLSArg);
 
     hostNameArg = new StringArgument("host", OPTION_SHORT_HOST,
         OPTION_LONG_HOST, false, false, true, OPTION_VALUE_HOST, "localhost",
-        null, MSGID_DESCRIPTION_HOST);
+        null, INFO_DESCRIPTION_HOST.get());
     addGlobalArgument(hostNameArg);
 
     portArg = new IntegerArgument("port", OPTION_SHORT_PORT, OPTION_LONG_PORT,
         false, false, true, OPTION_VALUE_PORT, 389, null,
-        MSGID_DESCRIPTION_PORT);
+        INFO_DESCRIPTION_PORT.get());
     addGlobalArgument(portArg);
 
     bindDnArg = new StringArgument("bindDN", OPTION_SHORT_BINDDN,
         OPTION_LONG_BINDDN, false, false, true, OPTION_VALUE_BINDDN,
-        "cn=Directory Manager", null, MSGID_DESCRIPTION_BINDDN);
+        "cn=Directory Manager", null, INFO_DESCRIPTION_BINDDN.get());
     addGlobalArgument(bindDnArg);
 
     bindPasswordArg = new StringArgument("bindPassword",
         OPTION_SHORT_BINDPWD, OPTION_LONG_BINDPWD, false, false, true,
-        OPTION_VALUE_BINDPWD, null, null, MSGID_DESCRIPTION_BINDPASSWORD);
+        OPTION_VALUE_BINDPWD, null, null, INFO_DESCRIPTION_BINDPASSWORD.get());
     addGlobalArgument(bindPasswordArg);
 
     bindPasswordFileArg = new FileBasedArgument("bindPasswordFile",
         OPTION_SHORT_BINDPWD_FILE, OPTION_LONG_BINDPWD_FILE, false, false,
         OPTION_VALUE_BINDPWD_FILE, null, null,
-        MSGID_DESCRIPTION_BINDPASSWORDFILE);
+        INFO_DESCRIPTION_BINDPASSWORDFILE.get());
     addGlobalArgument(bindPasswordFileArg);
 
     trustAllArg = new BooleanArgument("trustAll", 'X', "trustAll",
-        MSGID_DESCRIPTION_TRUSTALL);
+        INFO_DESCRIPTION_TRUSTALL.get());
     addGlobalArgument(trustAllArg);
 
     trustStorePathArg = new StringArgument("trustStorePath",
         OPTION_SHORT_TRUSTSTOREPATH, OPTION_LONG_TRUSTSTOREPATH, false,
         false, true, OPTION_VALUE_TRUSTSTOREPATH, null, null,
-        MSGID_DESCRIPTION_TRUSTSTOREPATH);
+        INFO_DESCRIPTION_TRUSTSTOREPATH.get());
     addGlobalArgument(trustStorePathArg);
 
     trustStorePasswordArg = new StringArgument("trustStorePassword", null,
         OPTION_LONG_TRUSTSTORE_PWD, false, false, true,
         OPTION_VALUE_TRUSTSTORE_PWD, null, null,
-        MSGID_DESCRIPTION_TRUSTSTOREPASSWORD);
+        INFO_DESCRIPTION_TRUSTSTOREPASSWORD.get());
     addGlobalArgument(trustStorePasswordArg);
 
     trustStorePasswordFileArg = new FileBasedArgument("truststorepasswordfile",
         OPTION_SHORT_TRUSTSTORE_PWD_FILE, OPTION_LONG_TRUSTSTORE_PWD_FILE,
         false, false, OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
-        MSGID_DESCRIPTION_TRUSTSTOREPASSWORD_FILE);
+        INFO_DESCRIPTION_TRUSTSTOREPASSWORD_FILE.get());
     addGlobalArgument(trustStorePasswordFileArg);
 
     keyStorePathArg = new StringArgument("keyStorePath",
         OPTION_SHORT_KEYSTOREPATH, OPTION_LONG_KEYSTOREPATH, false, false,
         true, OPTION_VALUE_KEYSTOREPATH, null, null,
-        MSGID_DESCRIPTION_KEYSTOREPATH);
+        INFO_DESCRIPTION_KEYSTOREPATH.get());
     addGlobalArgument(keyStorePathArg);
 
     keyStorePasswordArg = new StringArgument("keyStorePassword", null,
         OPTION_LONG_KEYSTORE_PWD, false, false, true,
         OPTION_VALUE_KEYSTORE_PWD, null, null,
-        MSGID_DESCRIPTION_KEYSTOREPASSWORD);
+        INFO_DESCRIPTION_KEYSTOREPASSWORD.get());
     addGlobalArgument(keyStorePasswordArg);
 
     keyStorePasswordFileArg = new FileBasedArgument("keystorepasswordfile",
         OPTION_SHORT_KEYSTORE_PWD_FILE, OPTION_LONG_KEYSTORE_PWD_FILE, false,
         false, OPTION_VALUE_KEYSTORE_PWD_FILE, null, null,
-        MSGID_DESCRIPTION_KEYSTOREPASSWORD_FILE);
+        INFO_DESCRIPTION_KEYSTOREPASSWORD_FILE.get());
     addGlobalArgument(keyStorePasswordFileArg);
 
     certNicknameArg = new StringArgument("certnickname", 'N', "certNickname",
         false, false, true, "{nickname}", null, null,
-        MSGID_DESCRIPTION_CERT_NICKNAME);
+        INFO_DESCRIPTION_CERT_NICKNAME.get());
     addGlobalArgument(certNicknameArg);
 
     verboseArg = new BooleanArgument("verbose", 'v', "verbose",
-        MSGID_DESCRIPTION_VERBOSE);
+        INFO_DESCRIPTION_VERBOSE.get());
     addGlobalArgument(verboseArg);
   }
 
@@ -436,68 +438,61 @@
    * @param err the stream to be used to print error message.
    * @return return code.
    */
-  public int validateGlobalOption(PrintStream err)
-  {
-    ArrayList<String> errors = new ArrayList<String>();
+  public int validateGlobalOption(PrintStream err) {
+    ArrayList<Message> errors = new ArrayList<Message>();
     // Couldn't have at the same time bindPassword and bindPasswordFile
-    if(bindPasswordArg.isPresent() && bindPasswordFileArg.isPresent())
-    {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, bindPasswordArg.getLongIdentifier(),
-                                  bindPasswordFileArg.getLongIdentifier());
+    if (bindPasswordArg.isPresent() && bindPasswordFileArg.isPresent()) {
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              bindPasswordArg.getLongIdentifier(),
+              bindPasswordFileArg.getLongIdentifier());
       errors.add(message);
     }
 
     // Couldn't have at the same time trustAll and
     // trustStore related arg
-    if (trustAllArg.isPresent() && trustStorePathArg.isPresent())
-    {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, trustAllArg.getLongIdentifier(),
-          trustStorePathArg.getLongIdentifier());
+    if (trustAllArg.isPresent() && trustStorePathArg.isPresent()) {
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              trustAllArg.getLongIdentifier(),
+              trustStorePathArg.getLongIdentifier());
       errors.add(message);
     }
-    if (trustAllArg.isPresent() && trustStorePasswordArg.isPresent())
-    {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, trustAllArg.getLongIdentifier(),
-          trustStorePasswordArg.getLongIdentifier());
+    if (trustAllArg.isPresent() && trustStorePasswordArg.isPresent()) {
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              trustAllArg.getLongIdentifier(),
+              trustStorePasswordArg.getLongIdentifier());
       errors.add(message);
     }
-    if (trustAllArg.isPresent() && trustStorePasswordFileArg.isPresent())
-    {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, trustAllArg.getLongIdentifier(),
-          trustStorePasswordFileArg.getLongIdentifier());
+    if (trustAllArg.isPresent() && trustStorePasswordFileArg.isPresent()) {
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              trustAllArg.getLongIdentifier(),
+              trustStorePasswordFileArg.getLongIdentifier());
       errors.add(message);
     }
 
     // Couldn't have at the same time trustStorePasswordArg and
     // trustStorePasswordFileArg
     if (trustStorePasswordArg.isPresent()
-        && trustStorePasswordFileArg.isPresent())
-    {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, trustStorePasswordArg
-          .getLongIdentifier(), trustStorePasswordFileArg.getLongIdentifier());
+            && trustStorePasswordFileArg.isPresent()) {
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              trustStorePasswordArg.getLongIdentifier(),
+              trustStorePasswordFileArg.getLongIdentifier());
       errors.add(message);
     }
 
     // Couldn't have at the same time startTLSArg and
     // useSSLArg
     if (startTLSArg.isPresent()
-        && useSSLArg.isPresent())
-    {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, startTLSArg
-          .getLongIdentifier(), useSSLArg.getLongIdentifier());
+            && useSSLArg.isPresent()) {
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              startTLSArg
+                      .getLongIdentifier(), useSSLArg.getLongIdentifier());
       errors.add(message);
     }
 
     if (errors.size() > 0)
     {
-      StringBuffer buf = new StringBuffer();
-      for (String error : errors)
+      MessageBuilder buf = new MessageBuilder();
+      for (Message error : errors)
       {
         if (buf.length() > 0)
         {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/client/ldap/LDAPConnection.java b/opendj-sdk/opends/src/server/org/opends/server/admin/client/ldap/LDAPConnection.java
index 35cd644..0fc5487 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/client/ldap/LDAPConnection.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/client/ldap/LDAPConnection.java
@@ -27,7 +27,6 @@
 package org.opends.server.admin.client.ldap;
 
 
-
 import java.util.Collection;
 
 import javax.naming.NamingException;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/AbstractConfigListenerAdaptor.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/AbstractConfigListenerAdaptor.java
index 8d53775..3f6e405 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/AbstractConfigListenerAdaptor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/AbstractConfigListenerAdaptor.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
@@ -32,6 +33,7 @@
 
 import org.opends.server.admin.DecodingException;
 
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -57,7 +59,7 @@
    *          The builder to which messages should be appended.
    */
   protected final void generateUnacceptableReason(
-      DecodingException e, StringBuilder unacceptableReason) {
+      DecodingException e, MessageBuilder unacceptableReason) {
     // FIXME: generate a property OpenDS style message.
     unacceptableReason.append(e.getLocalizedMessage());
   }
@@ -73,9 +75,9 @@
    *          The single message to which messages should be appended.
    */
   protected final void generateUnacceptableReason(
-      List<String> reasons, StringBuilder unacceptableReason) {
+      List<Message> reasons, MessageBuilder unacceptableReason) {
     boolean isFirst = true;
-    for (String reason : reasons) {
+    for (Message reason : reasons) {
       if (isFirst) {
         isFirst = false;
       } else {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/AbstractOptionalConfigurationManager.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/AbstractOptionalConfigurationManager.java
index 6e9bcea..93e86e0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/AbstractOptionalConfigurationManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/AbstractOptionalConfigurationManager.java
@@ -25,10 +25,10 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.getMessage;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.lang.reflect.Method;
@@ -39,7 +39,8 @@
 import org.opends.server.admin.Configuration;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.messages.AdminMessages;
+import org.opends.messages.AdminMessages;
+
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
@@ -94,7 +95,7 @@
       // Default result code.
       ResultCode resultCode = ResultCode.SUCCESS;
       boolean adminActionRequired = false;
-      ArrayList<String> messages = new ArrayList<String>();
+      ArrayList<Message> messages = new ArrayList<Message>();
 
       // We have committed to this change so always update the
       // configuration.
@@ -106,10 +107,10 @@
           // Notify that a new instance has been added.
           doRegisterInstance(getImplementation(config));
         } catch (ConfigException e) {
-          messages.add(e.getMessage());
+          messages.add(e.getMessageObject());
           resultCode = DirectoryServer.getServerErrorResultCode();
         } catch (InitializationException e) {
-          messages.add(e.getMessage());
+          messages.add(e.getMessageObject());
           resultCode = DirectoryServer.getServerErrorResultCode();
         }
       } else {
@@ -134,7 +135,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationAddAcceptable(C config,
-        List<String> unacceptableReasons) {
+        List<Message> unacceptableReasons) {
       if (isEnabled(config)) {
         // It's enabled so always validate the class.
         return isJavaClassAcceptable(config, unacceptableReasons);
@@ -167,7 +168,7 @@
       // Default result code.
       ResultCode resultCode = ResultCode.SUCCESS;
       boolean adminActionRequired = false;
-      ArrayList<String> messages = new ArrayList<String>();
+      ArrayList<Message> messages = new ArrayList<Message>();
 
       // We have committed to this change so always update the
       // configuration.
@@ -182,10 +183,10 @@
             // Notify that a new instance has been added.
             doRegisterInstance(getImplementation(config));
           } catch (ConfigException e) {
-            messages.add(e.getMessage());
+            messages.add(e.getMessageObject());
             resultCode = DirectoryServer.getServerErrorResultCode();
           } catch (InitializationException e) {
-            messages.add(e.getMessage());
+            messages.add(e.getMessageObject());
             resultCode = DirectoryServer.getServerErrorResultCode();
           }
         } else {
@@ -223,7 +224,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationChangeAcceptable(C config,
-        List<String> unacceptableReasons) {
+        List<Message> unacceptableReasons) {
       if (isEnabled(config)) {
         // It's enabled so always validate the class.
         return isJavaClassAcceptable(config, unacceptableReasons);
@@ -279,7 +280,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationDeleteAcceptable(C config,
-        List<String> unacceptableReasons) {
+        List<Message> unacceptableReasons) {
       if (isEnabled(getConfiguration())) {
         return isDisableInstanceAcceptable(config,
             unacceptableReasons);
@@ -502,7 +503,7 @@
    *         disabled or deleted.
    */
   protected abstract boolean isDisableInstanceAcceptable(C config,
-      List<String> unacceptableReasons);
+      List<Message> unacceptableReasons);
 
 
 
@@ -629,11 +630,10 @@
       implClass = propertyDefinition.loadClass(className, theClass);
       instance = implClass.newInstance();
     } catch (Exception e) {
-      int msgID = AdminMessages.MSGID_ADMIN_CANNOT_INSTANTIATE_CLASS;
-      String message = getMessage(msgID, String.valueOf(className),
-          String.valueOf(config.dn()),
-          stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = AdminMessages.ERR_ADMIN_CANNOT_INSTANTIATE_CLASS.
+          get(String.valueOf(className), String.valueOf(config.dn()),
+              stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     }
 
     // Perform the necessary initialization for the instance.
@@ -647,11 +647,10 @@
 
       method.invoke(instance, config);
     } catch (Exception e) {
-      int msgID = AdminMessages.MSGID_ADMIN_CANNOT_INITIALIZE_COMPONENT;
-      String message = getMessage(msgID, String.valueOf(className),
-          String.valueOf(config.dn()),
-          stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = AdminMessages.ERR_ADMIN_CANNOT_INITIALIZE_COMPONENT.
+          get(String.valueOf(className), String.valueOf(config.dn()),
+              stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     }
 
     // The instance has been successfully initialized.
@@ -671,7 +670,7 @@
   // Determines whether or not the new configuration's implementation
   // class is acceptable.
   private boolean isJavaClassAcceptable(C config,
-      List<String> unacceptableReasons) {
+      List<Message> unacceptableReasons) {
     String className = getJavaImplementationClass(config);
 
     // Load the class and cast it to a T.
@@ -681,10 +680,11 @@
       implClass = propertyDefinition.loadClass(className, theClass);
       implClass.newInstance();
     } catch (Exception e) {
-      int msgID = AdminMessages.MSGID_ADMIN_CANNOT_INSTANTIATE_CLASS;
-      unacceptableReasons.add(getMessage(msgID, String
-          .valueOf(className), String.valueOf(config.dn()),
-          stackTraceToSingleLineString(e)));
+      unacceptableReasons.add(
+              AdminMessages.ERR_ADMIN_CANNOT_INSTANTIATE_CLASS.get(
+                      String.valueOf(className),
+                      String.valueOf(config.dn()),
+                      stackTraceToSingleLineString(e)));
       return false;
     }
 
@@ -697,10 +697,10 @@
       implClass.getMethod(name, config.definition()
           .getServerConfigurationClass());
     } catch (Exception e) {
-      int msgID = AdminMessages.MSGID_ADMIN_CANNOT_INITIALIZE_COMPONENT;
-      unacceptableReasons.add(getMessage(msgID, String
-          .valueOf(className), String.valueOf(config.dn()),
-          stackTraceToSingleLineString(e)));
+      unacceptableReasons.add(
+              AdminMessages.ERR_ADMIN_CANNOT_INITIALIZE_COMPONENT.get(
+                      String.valueOf(className), String.valueOf(config.dn()),
+                      stackTraceToSingleLineString(e)));
       return false;
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/CleanerConfigDeleteListener.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/CleanerConfigDeleteListener.java
index dd5c7b3..5fe1092 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/CleanerConfigDeleteListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/CleanerConfigDeleteListener.java
@@ -25,13 +25,12 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-
+import static org.opends.server.loggers.ErrorLogger.*;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -41,12 +40,11 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.messages.AdminMessages;
+import org.opends.messages.AdminMessages;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.StaticUtils;
 
@@ -134,7 +132,7 @@
    * {@inheritDoc}
    */
   public boolean configDeleteIsAcceptable(ConfigEntry configEntry,
-      StringBuilder unacceptableReason) {
+      MessageBuilder unacceptableReason) {
     // Always acceptable.
     return true;
   }
@@ -149,10 +147,9 @@
       if (configEntry != null) {
         return configEntry;
       } else {
-        int msgID = AdminMessages.MSGID_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST;
-        String message = getMessage(msgID, String.valueOf(dn));
-        logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-            message, msgID);
+        Message message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST.
+            get(String.valueOf(dn));
+        logError(message);
       }
     } catch (ConfigException e) {
       // The dependent entry could not be retrieved.
@@ -160,11 +157,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = AdminMessages.MSGID_ADMIN_CANNOT_GET_MANAGED_OBJECT;
-      String message = getMessage(msgID, String.valueOf(dn), StaticUtils
-          .getExceptionMessage(e));
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-          message, msgID);
+      Message message = AdminMessages.ERR_ADMIN_CANNOT_GET_MANAGED_OBJECT.get(
+          String.valueOf(dn), StaticUtils.getExceptionMessage(e));
+      logError(message);
     }
 
     return null;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java
index b762abe..08c9c1d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
@@ -43,7 +44,7 @@
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
 import org.opends.server.types.ResultCode;
-
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -148,7 +149,7 @@
    * {@inheritDoc}
    */
   public boolean configAddIsAcceptable(ConfigEntry configEntry,
-      StringBuilder unacceptableReason) {
+      MessageBuilder unacceptableReason) {
     DN dn = configEntry.getDN();
     AttributeValue av = dn.getRDN().getAttributeValue(0);
     String name = av.getStringValue().trim();
@@ -182,9 +183,8 @@
     }
 
     cachedConfiguration = mo.getConfiguration();
-    List<String> reasons = new LinkedList<String>();
-    if (listener.isConfigurationAddAcceptable(cachedConfiguration,
-        reasons)) {
+    List<Message> reasons = new LinkedList<Message>();
+    if (listener.isConfigurationAddAcceptable(cachedConfiguration, reasons)) {
       return true;
     } else {
       generateUnacceptableReason(reasons, unacceptableReason);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java
index 71047d6..f1aa32c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java
@@ -25,13 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -55,12 +53,13 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.messages.AdminMessages;
+import org.opends.server.loggers.ErrorLogger;
+import org.opends.messages.AdminMessages;
+
+import org.opends.messages.MessageBuilder;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.util.StaticUtils;
 
 
@@ -322,7 +321,7 @@
    * {@inheritDoc}
    */
   public boolean configChangeIsAcceptable(ConfigEntry configEntry,
-      StringBuilder unacceptableReason) {
+      MessageBuilder unacceptableReason) {
     return configChangeIsAcceptable(configEntry, unacceptableReason,
         configEntry);
   }
@@ -349,7 +348,7 @@
    *         does not.
    */
   public boolean configChangeIsAcceptable(ConfigEntry configEntry,
-      StringBuilder unacceptableReason, ConfigEntry newConfigEntry) {
+      MessageBuilder unacceptableReason, ConfigEntry newConfigEntry) {
     try {
       cachedManagedObject = ServerManagedObject.decode(path, d, configEntry,
           newConfigEntry);
@@ -358,7 +357,7 @@
       return false;
     }
 
-    List<String> reasons = new LinkedList<String>();
+    List<Message> reasons = new LinkedList<Message>();
     if (listener.isConfigurationChangeAcceptable(cachedManagedObject
         .getConfiguration(), reasons)) {
       return true;
@@ -391,10 +390,9 @@
       if (configEntry != null) {
         return configEntry;
       } else {
-        int msgID = AdminMessages.MSGID_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST;
-        String message = getMessage(msgID, String.valueOf(dn));
-        logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-            message, msgID);
+        Message message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST.
+            get(String.valueOf(dn));
+        ErrorLogger.logError(message);
       }
     } catch (ConfigException e) {
       // The dependent entry could not be retrieved.
@@ -402,11 +400,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = AdminMessages.MSGID_ADMIN_CANNOT_GET_MANAGED_OBJECT;
-      String message = getMessage(msgID, String.valueOf(dn), StaticUtils
-          .getExceptionMessage(e));
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
+      Message message = AdminMessages.ERR_ADMIN_CANNOT_GET_MANAGED_OBJECT.get(
+          String.valueOf(dn), StaticUtils.getExceptionMessage(e));
+      ErrorLogger.logError(message);
     }
 
     return null;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java
index 04c2646..962599a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
@@ -43,7 +44,7 @@
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
 import org.opends.server.types.ResultCode;
-
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -150,7 +151,7 @@
    * {@inheritDoc}
    */
   public boolean configDeleteIsAcceptable(ConfigEntry configEntry,
-      StringBuilder unacceptableReason) {
+      MessageBuilder unacceptableReason) {
     DN dn = configEntry.getDN();
     AttributeValue av = dn.getRDN().getAttributeValue(0);
     String name = av.getStringValue().trim();
@@ -184,7 +185,7 @@
     }
 
     cachedConfiguration = mo.getConfiguration();
-    List<String> reasons = new LinkedList<String>();
+    List<Message> reasons = new LinkedList<Message>();
     if (listener.isConfigurationDeleteAcceptable(cachedConfiguration,
         reasons)) {
       return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigExceptionFactory.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigExceptionFactory.java
index c8ab7ed..4faf5d7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigExceptionFactory.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigExceptionFactory.java
@@ -25,15 +25,15 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.getMessage;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import org.opends.server.admin.DefinitionDecodingException;
 import org.opends.server.config.ConfigException;
-import org.opends.server.messages.AdminMessages;
+import org.opends.messages.AdminMessages;
 import org.opends.server.types.DN;
 
 
@@ -78,10 +78,9 @@
    */
   public ConfigException createDecodingExceptionAdaptor(DN dn,
       DefinitionDecodingException e) {
-    int msgID = AdminMessages.MSGID_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM;
-    String message = getMessage(msgID, String.valueOf(dn),
-        stackTraceToSingleLineString(e));
-    return new ConfigException(msgID, message, e);
+    Message message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM.
+        get(String.valueOf(dn), stackTraceToSingleLineString(e));
+    return new ConfigException(message, e);
   }
 
 
@@ -97,11 +96,13 @@
 
   public ConfigException createDecodingExceptionAdaptor(
       ServerManagedObjectDecodingException e) {
-    int msgID = AdminMessages.MSGID_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM;
+
     DN dn = e.getPartialManagedObject().getDN();
-    String message = getMessage(msgID, String.valueOf(dn),
+    Message message =
+            AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM.get(
+                    String.valueOf(dn),
         stackTraceToSingleLineString(e));
-    return new ConfigException(msgID, message, e);
+    return new ConfigException(message, e);
   }
 
 
@@ -121,9 +122,9 @@
 
   public ConfigException createClassLoadingExceptionAdaptor(DN dn,
       String className, Exception e) {
-    int msgID = AdminMessages.MSGID_ADMIN_CANNOT_INSTANTIATE_CLASS;
-    String message = getMessage(msgID, String.valueOf(className), String
-        .valueOf(dn), stackTraceToSingleLineString(e));
-    return new ConfigException(msgID, message, e);
+    Message message = AdminMessages.ERR_ADMIN_CANNOT_INSTANTIATE_CLASS.
+        get(String.valueOf(className), String.valueOf(dn),
+            stackTraceToSingleLineString(e));
+    return new ConfigException(message, e);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationAddListener.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationAddListener.java
index 52b2f67..967df87 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationAddListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationAddListener.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
@@ -58,7 +59,7 @@
    *         acceptable, or <code>false</code> if it is not.
    */
   public boolean isConfigurationAddAcceptable(T configuration,
-      List<String> unacceptableReasons);
+      List<Message> unacceptableReasons);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationChangeListener.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationChangeListener.java
index b6cddce..0b40da8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationChangeListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationChangeListener.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
@@ -59,7 +60,7 @@
    *         acceptable, or <code>false</code> if it is not.
    */
   public boolean isConfigurationChangeAcceptable(T configuration,
-      List<String> unacceptableReasons);
+      List<Message> unacceptableReasons);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationDeleteListener.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationDeleteListener.java
index 0457fee..5c0000d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationDeleteListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ConfigurationDeleteListener.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
@@ -58,7 +59,7 @@
    *         acceptable, or <code>false</code> if it is not.
    */
   public boolean isConfigurationDeleteAcceptable(T configuration,
-      List<String> unacceptableReasons);
+      List<Message> unacceptableReasons);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/DelayedConfigAddListener.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/DelayedConfigAddListener.java
index cbfd450..f1bb4b1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/DelayedConfigAddListener.java
+++ b/opendj-sdk/opends/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;
 
 
 /**
@@ -155,7 +155,7 @@
    * {@inheritDoc}
    */
   public boolean configAddIsAcceptable(ConfigEntry configEntry,
-      StringBuilder unacceptableReason) {
+      MessageBuilder unacceptableReason) {
     // Always acceptable.
     return true;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/DependencyConfigChangeListener.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/DependencyConfigChangeListener.java
index c3ed339..588193e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/DependencyConfigChangeListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/DependencyConfigChangeListener.java
@@ -28,21 +28,20 @@
 
 
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-
+import static org.opends.server.loggers.ErrorLogger.*;
 import org.opends.server.api.ConfigChangeListener;
 import org.opends.server.config.ConfigEntry;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.messages.AdminMessages;
+import org.opends.messages.AdminMessages;
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.Message;
+
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.StaticUtils;
 
@@ -107,7 +106,7 @@
    * {@inheritDoc}
    */
   public boolean configChangeIsAcceptable(ConfigEntry configEntry,
-      StringBuilder unacceptableReason) {
+      MessageBuilder unacceptableReason) {
     ConfigEntry dependentConfigEntry = getConfigEntry(dependentDN);
     if (dependentConfigEntry != null) {
       return dependentListener.configChangeIsAcceptable(dependentConfigEntry,
@@ -129,10 +128,9 @@
       if (configEntry != null) {
         return configEntry;
       } else {
-        int msgID = AdminMessages.MSGID_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST;
-        String message = getMessage(msgID, String.valueOf(dn));
-        logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-            message, msgID);
+        Message message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST.
+            get(String.valueOf(dn));
+        logError(message);
       }
     } catch (ConfigException e) {
       // The dependent entry could not be retrieved.
@@ -140,11 +138,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = AdminMessages.MSGID_ADMIN_CANNOT_GET_MANAGED_OBJECT;
-      String message = getMessage(msgID, String.valueOf(dn), StaticUtils
-          .getExceptionMessage(e));
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-          message, msgID);
+      Message message = AdminMessages.ERR_ADMIN_CANNOT_GET_MANAGED_OBJECT.get(
+          String.valueOf(dn), StaticUtils.getExceptionMessage(e));
+      logError(message);
     }
 
     return null;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagedObject.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagedObject.java
index ff01987..abe58cc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagedObject.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagedObject.java
@@ -26,11 +26,11 @@
  */
 
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
 import static org.opends.server.util.StaticUtils.*;
 
 import java.util.ArrayList;
@@ -82,7 +82,7 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.messages.AdminMessages;
+import org.opends.messages.AdminMessages;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.DN;
@@ -579,18 +579,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = AdminMessages.MSGID_ADMIN_CANNOT_GET_MANAGED_OBJECT;
-      String message = getMessage(msgID, String.valueOf(dn),
-          stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = AdminMessages.ERR_ADMIN_CANNOT_GET_MANAGED_OBJECT.get(
+          String.valueOf(dn), stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     }
 
     // The configuration handler is free to return null indicating
     // that the entry does not exist.
     if (configEntry == null) {
-      int msgID = AdminMessages.MSGID_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST;
-      String message = getMessage(msgID, String.valueOf(dn));
-      throw new ConfigException(msgID, message);
+      Message message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST.
+          get(String.valueOf(dn));
+      throw new ConfigException(message);
     }
 
     return configEntry;
@@ -1238,10 +1237,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = AdminMessages.MSGID_ADMIN_CANNOT_GET_LISTENER_BASE;
-      String message = getMessage(msgID, String.valueOf(dn),
-          stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = AdminMessages.ERR_ADMIN_CANNOT_GET_LISTENER_BASE.get(
+          String.valueOf(dn), stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     }
 
     return configEntry;
@@ -1285,9 +1283,9 @@
     }
 
     // No parent entry could be found.
-    int msgID = AdminMessages.MSGID_ADMIN_UNABLE_TO_REGISTER_LISTENER;
-    String message = getMessage(msgID, String.valueOf(baseDN));
-    throw new ConfigException(msgID, message);
+    Message message = AdminMessages.ERR_ADMIN_UNABLE_TO_REGISTER_LISTENER.get(
+        String.valueOf(baseDN));
+    throw new ConfigException(message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagedObjectDecodingException.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagedObjectDecodingException.java
index e477dee..7736f60 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagedObjectDecodingException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagedObjectDecodingException.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.admin.server;
+import org.opends.messages.Message;
 
 
 
@@ -93,13 +94,13 @@
    * {@inheritDoc}
    */
   @Override
-  public String getMessage() {
+  public Message getMessageObject() {
     StringBuilder builder = new StringBuilder();
     builder.append("The managed object could not be decoded due"
         + " to the following property exceptions: ");
     // FIXME: better formatting.
     builder.append(causes.toString());
-    return builder.toString();
+    return Message.raw(builder.toString());  // TODO: i18n?
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagementContext.java b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagementContext.java
index 2741bb9..fa303aa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagementContext.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/server/ServerManagementContext.java
@@ -29,6 +29,7 @@
 
 
 
+
 import org.opends.server.admin.std.server.RootCfg;
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/AccessControlHandler.java b/opendj-sdk/opends/src/server/org/opends/server/api/AccessControlHandler.java
index a15238b..8e4cdfc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/AccessControlHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/AccessControlHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -37,7 +38,6 @@
 import org.opends.server.workflowelement.localbackend.*;
 
 
-
 /**
  * This class defines the set of methods and structures that must be
  * implemented by a Directory Server access control handler.  All
@@ -98,7 +98,7 @@
    */
   public boolean isConfigurationAcceptable(
                       AccessControlHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by access control handler
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/AccessLogPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/api/AccessLogPublisher.java
index 126ba97..e336902 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/AccessLogPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/AccessLogPublisher.java
@@ -34,6 +34,7 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.*;
 import org.opends.server.types.*;
+import org.opends.messages.Message;
 
 
 /**
@@ -106,7 +107,7 @@
    */
   public boolean isConfigurationAcceptable(
                       AccessLogPublisherCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by access log publisher
@@ -150,7 +151,7 @@
   public abstract void logDisconnect(
                             ClientConnection clientConnection,
                             DisconnectReason disconnectReason,
-                            String message);
+                            Message message);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/AccountStatusNotificationHandler.java b/opendj-sdk/opends/src/server/org/opends/server/api/AccountStatusNotificationHandler.java
index 1bc94be..b331d2c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/AccountStatusNotificationHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/AccountStatusNotificationHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -103,7 +104,7 @@
   public boolean isConfigurationAcceptable(
                       AccountStatusNotificationHandlerCfg
                            configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by account status
@@ -133,14 +134,13 @@
    *                           notification.
    * @param  userDN            The DN of the user entry to which this
    *                           notification applies.
-   * @param  messageID         The unique ID for this notification.
    * @param  message           The human-readable message for this
    *                           notification.
    */
   public abstract void
        handleStatusNotification(
-            AccountStatusNotificationType notificationType,
-            DN userDN, int messageID, String message);
+          AccountStatusNotificationType notificationType,
+          DN userDN, Message message);
 
 
 
@@ -156,7 +156,6 @@
   {
     handleStatusNotification(notification.getNotificationType(),
                              notification.getUserDN(),
-                             notification.getMessageID(),
                              notification.getMessage());
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/AlertHandler.java b/opendj-sdk/opends/src/server/org/opends/server/api/AlertHandler.java
index a8186c9..40a8bea 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/AlertHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/AlertHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -35,7 +36,6 @@
 import org.opends.server.types.InitializationException;
 
 
-
 /**
  * This interface defines the set of methods that must be implemented
  * for a Directory Server alert handler.  Alert handlers are used to
@@ -92,7 +92,7 @@
    */
   public boolean isConfigurationAcceptable(
                       AlertHandlerCfg configuration,
-                      List<String> unacceptableReasons);
+                      List<Message> unacceptableReasons);
 
 
 
@@ -109,14 +109,12 @@
    *
    * @param  generator     The alert generator that created the alert.
    * @param  alertType     The alert type name for this alert.
-   * @param  alertID       The alert ID that uniquely identifies the
-   *                       type of alert.
    * @param  alertMessage  A message (possibly <CODE>null</CODE>) that
    *                       can provide more information about this
    *                       alert.
    */
   public void sendAlertNotification(AlertGenerator generator,
-                                    String alertType, int alertID,
-                                    String alertMessage);
+                                    String alertType,
+                                    Message alertMessage);
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/AttributeSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/api/AttributeSyntax.java
index 6007c40..d0626e0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/AttributeSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/AttributeSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -35,6 +36,7 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.InitializationException;
 
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -90,7 +92,7 @@
    */
   public boolean isConfigurationAcceptable(
                       AttributeSyntaxCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by attribute syntax
@@ -205,7 +207,7 @@
    *          for use with this syntax, or <CODE>false</CODE> if not.
    */
   public abstract boolean valueIsAcceptable(ByteString value,
-                               StringBuilder invalidReason);
+                               MessageBuilder invalidReason);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/Backend.java b/opendj-sdk/opends/src/server/org/opends/server/api/Backend.java
index 202406e..16848e6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/Backend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/Backend.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -57,8 +58,8 @@
 import org.opends.server.types.RestoreConfig;
 import org.opends.server.types.WritabilityMode;
 
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.BackendMessages.*;
+
 
 
 /**
@@ -142,7 +143,7 @@
    */
   public boolean isConfigurationAcceptable(
                       Configuration configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by backend implementations
@@ -262,11 +263,11 @@
 
     if (lock == null)
     {
-      int    msgID   = MSGID_BACKEND_CANNOT_LOCK_ENTRY;
-      String message = getMessage(msgID, String.valueOf(entryDN));
+      Message message =
+          ERR_BACKEND_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN));
       throw new DirectoryException(
                      DirectoryServer.getServerErrorResultCode(),
-                     message, msgID);
+                     message);
     }
 
     try
@@ -879,11 +880,11 @@
           {
             if (subBaseDNs.length > 1)
             {
-              int msgID =
-                   MSGID_BACKEND_CANNOT_REMOVE_MULTIBASE_SUB_SUFFIX;
-              String message = getMessage(msgID,
-                                    String.valueOf(subSuffixDN));
-              throw new ConfigException(msgID, message);
+              Message message =
+                      ERR_BACKEND_CANNOT_REMOVE_MULTIBASE_SUB_SUFFIX.
+                              get(String.valueOf(subSuffixDN),
+                                      String.valueOf(parentDN));
+              throw new ConfigException(message);
             }
 
             thisMatches = true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/CertificateMapper.java b/opendj-sdk/opends/src/server/org/opends/server/api/CertificateMapper.java
index 07c1f9d..f356b33 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/CertificateMapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/CertificateMapper.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -38,7 +39,6 @@
 import org.opends.server.types.InitializationException;
 
 
-
 /**
  * This class defines the set of methods and structures that must be
  * implemented by a Directory Server module that implements the
@@ -94,7 +94,7 @@
    */
   public boolean isConfigurationAcceptable(
                       CertificateMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by certificate mapper
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/ClientConnection.java b/opendj-sdk/opends/src/server/org/opends/server/api/ClientConnection.java
index 8c0fc8e..64760a1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/ClientConnection.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/ClientConnection.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -64,8 +65,8 @@
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -514,44 +515,6 @@
    * Closes the connection to the client, optionally sending it a
    * message indicating the reason for the closure.  Note that the
    * ability to send a notice of disconnection may not be available
-   * for all protocols or under all circumstances.
-   *
-   * @param  disconnectReason  The disconnect reason that provides the
-   *                           generic cause for the disconnect.
-   * @param  sendNotification  Indicates whether to try to provide
-   *                           notification to the client that the
-   *                           connection will be closed.
-   * @param  messageID         The unique identifier associated with
-   *                           the message to send to the client.  It
-   *                           may be -1 if no notification is to be
-   *                           sent.
-   * @param  arguments         An optional set of arguments that may
-   *                           be used to customize the format string
-   *                           associated with the provided message
-   *                           ID.
-   */
-  public final void disconnect(DisconnectReason disconnectReason,
-                               boolean sendNotification,
-                               int messageID, Object... arguments)
-  {
-    if (messageID <= 0)
-    {
-      disconnect(disconnectReason, sendNotification, null, -1);
-    }
-    else
-    {
-      String message = getMessage(messageID, arguments);
-      disconnect(disconnectReason, sendNotification, message,
-                 messageID);
-    }
-  }
-
-
-
-  /**
-   * Closes the connection to the client, optionally sending it a
-   * message indicating the reason for the closure.  Note that the
-   * ability to send a notice of disconnection may not be available
    * for all protocols or under all circumstances.  Also note that
    * when attempting to disconnect a client connection as a part of
    * operation processing (e.g., within a plugin or other extension),
@@ -569,14 +532,10 @@
    * @param  message           The message to send to the client.  It
    *                           may be <CODE>null</CODE> if no
    *                           notification is to be sent.
-   * @param  messageID         The unique identifier associated with
-   *                           the message to send to the client.  It
-   *                           may be -1 if no notification is to be
-   *                           sent.
    */
   public abstract void disconnect(DisconnectReason disconnectReason,
                                   boolean sendNotification,
-                                  String message, int messageID);
+                                  Message message);
 
 
 
@@ -984,11 +943,11 @@
       {
         DN authDN = authenticationInfo.getAuthenticationDN();
 
-        int    msgID   = MSGID_CLIENTCONNECTION_AUDIT_HASPRIVILEGE;
-        String message = getMessage(msgID, getConnectionID(), -1L,
-                                    String.valueOf(authDN),
-                                    privilege.getName(), result);
-        TRACER.debugMessage(DebugLogLevel.INFO, message);
+        Message message = INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGE
+                .get(getConnectionID(), -1L,
+                     String.valueOf(authDN),
+                     privilege.getName(), result);
+        TRACER.debugMessage(DebugLogLevel.INFO, message.toString());
       }
     }
     else
@@ -1002,12 +961,13 @@
         {
           DN authDN = authenticationInfo.getAuthenticationDN();
 
-          int    msgID   = MSGID_CLIENTCONNECTION_AUDIT_HASPRIVILEGE;
-          String message = getMessage(msgID, getConnectionID(),
-                                      operation.getOperationID(),
-                                      String.valueOf(authDN),
-                                      privilege.getName(), result);
-          TRACER.debugMessage(DebugLogLevel.INFO, message);
+          Message message =
+                  INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGE.get(
+                    getConnectionID(),
+                    operation.getOperationID(),
+                    String.valueOf(authDN),
+                    privilege.getName(), result);
+          TRACER.debugMessage(DebugLogLevel.INFO, message.toString());
         }
       }
       else
@@ -1091,22 +1051,25 @@
       {
         DN authDN = authenticationInfo.getAuthenticationDN();
 
-        int    msgID   = MSGID_CLIENTCONNECTION_AUDIT_HASPRIVILEGES;
-        String message = getMessage(msgID, getConnectionID(), -1L,
-                                    String.valueOf(authDN),
-                                    buffer.toString(), result);
-        TRACER.debugMessage(DebugLogLevel.INFO, message);
+        Message message =
+                INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGES.get(
+                  getConnectionID(), -1L,
+                  String.valueOf(authDN),
+                  buffer.toString(), result);
+        TRACER.debugMessage(DebugLogLevel.INFO,
+                message.toString());
       }
       else
       {
         DN authDN = authenticationInfo.getAuthenticationDN();
 
-        int    msgID   = MSGID_CLIENTCONNECTION_AUDIT_HASPRIVILEGES;
-        String message = getMessage(msgID, getConnectionID(),
-                                    operation.getOperationID(),
-                                    String.valueOf(authDN),
-                                    buffer.toString(), result);
-        TRACER.debugMessage(DebugLogLevel.INFO, message);
+        Message message = INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGES
+                .get(
+                  getConnectionID(),
+                  operation.getOperationID(),
+                  String.valueOf(authDN),
+                  buffer.toString(), result);
+        TRACER.debugMessage(DebugLogLevel.INFO, message.toString());
       }
 
       return result;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/ConfigAddListener.java b/opendj-sdk/opends/src/server/org/opends/server/api/ConfigAddListener.java
index 4a86d65..697836a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/ConfigAddListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/ConfigAddListener.java
@@ -30,7 +30,7 @@
 
 import org.opends.server.config.ConfigEntry;
 import org.opends.server.types.ConfigChangeResult;
-
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -56,7 +56,7 @@
    *          does not.
    */
   public boolean configAddIsAcceptable(ConfigEntry configEntry,
-                      StringBuilder unacceptableReason);
+                      MessageBuilder unacceptableReason);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/ConfigChangeListener.java b/opendj-sdk/opends/src/server/org/opends/server/api/ConfigChangeListener.java
index b303281..b89bedc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/ConfigChangeListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/ConfigChangeListener.java
@@ -30,7 +30,7 @@
 
 import org.opends.server.config.ConfigEntry;
 import org.opends.server.types.ConfigChangeResult;
-
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -56,7 +56,7 @@
    *          does not.
    */
   public boolean configChangeIsAcceptable(ConfigEntry configEntry,
-                      StringBuilder unacceptableReason);
+                      MessageBuilder unacceptableReason);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/ConfigDeleteListener.java b/opendj-sdk/opends/src/server/org/opends/server/api/ConfigDeleteListener.java
index 335f994..5d63652 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/ConfigDeleteListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/ConfigDeleteListener.java
@@ -30,7 +30,7 @@
 
 import org.opends.server.config.ConfigEntry;
 import org.opends.server.types.ConfigChangeResult;
-
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -55,7 +55,7 @@
    *          from the configuration, or <CODE>false</CODE> if not.
    */
   public boolean configDeleteIsAcceptable(ConfigEntry configEntry,
-                      StringBuilder unacceptableReason);
+                      MessageBuilder unacceptableReason);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/ConnectionHandler.java b/opendj-sdk/opends/src/server/org/opends/server/api/ConnectionHandler.java
index 288c428..f534f38 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/ConnectionHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/ConnectionHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -91,7 +92,7 @@
    *          closed.
    */
   public abstract void finalizeConnectionHandler(
-      String finalizeReason, boolean closeConnections);
+      Message finalizeReason, boolean closeConnections);
 
 
 
@@ -187,7 +188,7 @@
    */
   public boolean isConfigurationAcceptable(
                       ConnectionHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by connection handler
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/DebugLogPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/api/DebugLogPublisher.java
index ec12b5f..a8b2e1c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/DebugLogPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/DebugLogPublisher.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -47,6 +48,7 @@
 import org.opends.server.types.DN;
 
 
+
 /**
  * This class defines the set of methods and structures that must be
  * implemented for a Directory Server debug log publisher.
@@ -129,7 +131,7 @@
    */
   public boolean isConfigurationAcceptable(
                       DebugLogPublisherCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by debug log publisher
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/EntryCache.java b/opendj-sdk/opends/src/server/org/opends/server/api/EntryCache.java
index cddfc66..d96431e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/EntryCache.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/EntryCache.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -164,7 +165,7 @@
    */
   public boolean isConfigurationAcceptable(
                       EntryCacheCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by entry cache
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/ErrorLogPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/api/ErrorLogPublisher.java
index c03a398..45bca6a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/ErrorLogPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/ErrorLogPublisher.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -34,10 +35,12 @@
 
 import org.opends.server.admin.std.server.ErrorLogPublisherCfg;
 import org.opends.server.config.ConfigException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.DN;
+import org.opends.messages.Severity;
+import org.opends.messages.Category;
 
 
 /**
@@ -54,9 +57,9 @@
    * The hash map that will be used to define specific log severities
    * for the various categories.
    */
-  protected HashMap<ErrorLogCategory,HashSet<ErrorLogSeverity>>
+  protected HashMap<Category,HashSet<Severity>>
       definedSeverities =
-           new HashMap<ErrorLogCategory, HashSet<ErrorLogSeverity>>();
+           new HashMap<Category, HashSet<Severity>>();
 
 
 
@@ -64,8 +67,8 @@
    * The set of default log severities that will be used if no custom
    * severities have been defined for the associated category.
    */
-  protected HashSet<ErrorLogSeverity>
-       defaultSeverities = new HashSet<ErrorLogSeverity>();
+  protected HashSet<Severity>
+       defaultSeverities = new HashSet<Severity>();
 
 
 
@@ -115,7 +118,7 @@
    */
   public boolean isConfigurationAcceptable(
                       ErrorLogPublisherCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by error log publisher
@@ -134,19 +137,12 @@
 
   /**
    * 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  category  The category that may be used to determine
-   *                   whether to actually log this message.
-   * @param  severity  The severity that may be used to determine
-   *                   whether to actually log this message.
    * @param  message   The message to be logged.
-   * @param  errorID   The error ID that uniquely identifies the
-   *                   format string used to generate the provided
-   *                   message.
    */
-  public abstract void logError(ErrorLogCategory category,
-                                ErrorLogSeverity severity,
-                                String message, int errorID);
+  public abstract void logError(Message message);
 
   /**
    * Gets the DN of the configuration entry for this error log
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/ExtendedOperationHandler.java b/opendj-sdk/opends/src/server/org/opends/server/api/ExtendedOperationHandler.java
index ad98b77..a102344 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/ExtendedOperationHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/ExtendedOperationHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -39,6 +40,7 @@
 import org.opends.server.admin.std.server.ExtendedOperationHandlerCfg;
 
 
+
 /**
  * This class defines the set of methods and structures that must be
  * implemented by a Directory Server module that implements the
@@ -115,7 +117,7 @@
    */
   public boolean isConfigurationAcceptable(
                       ExtendedOperationHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by extended operation
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/Group.java b/opendj-sdk/opends/src/server/org/opends/server/api/Group.java
index f3101b4..b04219a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/Group.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/Group.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -112,7 +113,7 @@
    */
   public boolean isConfigurationAcceptable(
                       GroupImplementationCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by group implementations
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/IdentityMapper.java b/opendj-sdk/opends/src/server/org/opends/server/api/IdentityMapper.java
index 83ec61f..1252ea9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/IdentityMapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/IdentityMapper.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -95,7 +96,7 @@
    */
   public boolean isConfigurationAcceptable(
                       IdentityMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by identity mapper
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/KeyManagerProvider.java b/opendj-sdk/opends/src/server/org/opends/server/api/KeyManagerProvider.java
index 680dc50..379d073 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/KeyManagerProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/KeyManagerProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -94,7 +95,7 @@
    */
   public boolean isConfigurationAcceptable(
                       KeyManagerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by key manager provider
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/MatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/api/MatchingRule.java
index a3860d1..cbe6002 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/MatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/MatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -91,7 +92,7 @@
    */
   public boolean isConfigurationAcceptable(
                       MatchingRuleCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by matching rule
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/MonitorProvider.java b/opendj-sdk/opends/src/server/org/opends/server/api/MonitorProvider.java
index e7c647c..78812a0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/MonitorProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/MonitorProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -131,7 +132,7 @@
    */
   public boolean isConfigurationAcceptable(
                       MonitorProviderCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by monitor provider
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/PasswordGenerator.java b/opendj-sdk/opends/src/server/org/opends/server/api/PasswordGenerator.java
index 5a03b43..47bac96 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/PasswordGenerator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/PasswordGenerator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -96,7 +97,7 @@
    */
   public boolean isConfigurationAcceptable(
                       PasswordGeneratorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by password generator
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/PasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/api/PasswordStorageScheme.java
index fb36947..bf5caae 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/PasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/PasswordStorageScheme.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -99,7 +100,7 @@
    */
   public boolean isConfigurationAcceptable(
                       PasswordStorageSchemeCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by password storage scheme
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/PasswordValidator.java b/opendj-sdk/opends/src/server/org/opends/server/api/PasswordValidator.java
index 62b9b0f..9a48650 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/PasswordValidator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/PasswordValidator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -38,6 +39,7 @@
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.Operation;
 
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -94,7 +96,7 @@
    */
   public boolean isConfigurationAcceptable(
                       PasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by password validator
@@ -147,6 +149,6 @@
                                Set<ByteString> currentPasswords,
                                Operation operation,
                                Entry userEntry,
-                               StringBuilder invalidReason);
+                               MessageBuilder invalidReason);
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/SASLMechanismHandler.java b/opendj-sdk/opends/src/server/org/opends/server/api/SASLMechanismHandler.java
index 997470f..04cf7de 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/SASLMechanismHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/SASLMechanismHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -95,7 +96,7 @@
    */
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by SASL mechanism handler
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/ServerShutdownListener.java b/opendj-sdk/opends/src/server/org/opends/server/api/ServerShutdownListener.java
index 9495283..72eea78 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/ServerShutdownListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/ServerShutdownListener.java
@@ -25,6 +25,8 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
+
 
 
 
@@ -50,6 +52,6 @@
    *
    * @param  reason  The human-readable reason for the shutdown.
    */
-  public void processServerShutdown(String reason);
+  public void processServerShutdown(Message reason);
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/SynchronizationProvider.java b/opendj-sdk/opends/src/server/org/opends/server/api/SynchronizationProvider.java
index b8275e8..235b233 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/SynchronizationProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/SynchronizationProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -99,7 +100,7 @@
    */
   public boolean isConfigurationAcceptable(
                       SynchronizationProviderCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by synchronization
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/TrustManagerProvider.java b/opendj-sdk/opends/src/server/org/opends/server/api/TrustManagerProvider.java
index e54baa4..3672baf 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/TrustManagerProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/TrustManagerProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -95,7 +96,7 @@
    */
   public boolean isConfigurationAcceptable(
                       TrustManagerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by trust manager provider
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/VirtualAttributeProvider.java b/opendj-sdk/opends/src/server/org/opends/server/api/VirtualAttributeProvider.java
index 5005093..cbc363d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/VirtualAttributeProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/VirtualAttributeProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -107,7 +108,7 @@
    */
   public boolean isConfigurationAcceptable(
                       VirtualAttributeCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by virtual attribute
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/WorkQueue.java b/opendj-sdk/opends/src/server/org/opends/server/api/WorkQueue.java
index 7375b5c..fb1410d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/WorkQueue.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/WorkQueue.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api;
+import org.opends.messages.Message;
 
 
 
@@ -80,7 +81,7 @@
    * @param  reason  The human-readable reason that the work queue is
    *                 being shut down.
    */
-  public abstract void finalizeWorkQueue(String reason);
+  public abstract void finalizeWorkQueue(Message reason);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/plugin/DirectoryServerPlugin.java b/opendj-sdk/opends/src/server/org/opends/server/api/plugin/DirectoryServerPlugin.java
index c71331d..ce796e0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/plugin/DirectoryServerPlugin.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/plugin/DirectoryServerPlugin.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api.plugin;
+import org.opends.messages.Message;
 
 
 
@@ -46,9 +47,7 @@
 import org.opends.server.types.SearchResultReference;
 import org.opends.server.types.operation.*;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.PluginMessages.*;
-
+import static org.opends.messages.PluginMessages.*;
 
 
 /**
@@ -100,7 +99,7 @@
    *          for this plugin, or {@code false} if not.
    */
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by plugin implementations
@@ -198,10 +197,9 @@
    */
   public StartupPluginResult doStartup()
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                                PluginType.STARTUP.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+        String.valueOf(pluginDN), PluginType.STARTUP.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -215,12 +213,11 @@
    *
    * @param  reason  The human-readable reason for the shutdown.
    */
-  public void doShutdown(String reason)
+  public void doShutdown(Message reason)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                                PluginType.SHUTDOWN.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+        String.valueOf(pluginDN), PluginType.SHUTDOWN.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -239,10 +236,9 @@
   public PostConnectPluginResult doPostConnect(ClientConnection
                                                     clientConnection)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                                PluginType.POST_CONNECT.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+        String.valueOf(pluginDN), PluginType.POST_CONNECT.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -255,9 +251,6 @@
    * @param  clientConnection  The client connection that has been
    *                           closed.
    * @param  disconnectReason  The disconnect reason for the closure.
-   * @param  messageID         The message ID for an additional
-   *                           message for the closure, or a negative
-   *                           value if there was no closure message.
    * @param  message           A message providing additional
    *                           information about the closure, or
    *                           <CODE>null</CODE> if there is none.
@@ -267,12 +260,12 @@
   public PostDisconnectPluginResult
               doPostDisconnect(ClientConnection clientConnection,
                                DisconnectReason disconnectReason,
-                               int messageID, String message)
+                               Message message)
   {
-    int    msgID = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String msg   = getMessage(msgID, String.valueOf(pluginDN),
-                              PluginType.POST_DISCONNECT.getName());
-    throw new UnsupportedOperationException(msg);
+    Message msg = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_DISCONNECT.getName());
+    throw new UnsupportedOperationException(msg.toString());
   }
 
 
@@ -292,10 +285,9 @@
   public LDIFPluginResult doLDIFImport(LDIFImportConfig importConfig,
                                        Entry entry)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                                PluginType.LDIF_IMPORT.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+        String.valueOf(pluginDN), PluginType.LDIF_IMPORT.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -313,10 +305,9 @@
   public LDIFPluginResult doLDIFExport(LDIFExportConfig exportConfig,
                                        Entry entry)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                                PluginType.LDIF_EXPORT.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+        String.valueOf(pluginDN), PluginType.LDIF_EXPORT.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -333,10 +324,10 @@
   public PreParsePluginResult
        doPreParse(PreParseAbandonOperation abandonOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_PARSE_ABANDON.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_PARSE_ABANDON.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -354,11 +345,10 @@
   public PostOperationPluginResult
        doPostOperation(PostOperationAbandonOperation abandonOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message =
-         getMessage(msgID, String.valueOf(pluginDN),
-                    PluginType.POST_OPERATION_ABANDON.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_OPERATION_ABANDON.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -374,10 +364,9 @@
   public PreParsePluginResult
        doPreParse(PreParseAddOperation addOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                                PluginType.PRE_PARSE_ADD.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+        String.valueOf(pluginDN), PluginType.PRE_PARSE_ADD.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -396,10 +385,10 @@
   public PreOperationPluginResult
        doPreOperation(PreOperationAddOperation addOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_OPERATION_ADD.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_OPERATION_ADD.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -418,10 +407,10 @@
   public PostOperationPluginResult
        doPostOperation(PostOperationAddOperation addOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_OPERATION_ADD.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_OPERATION_ADD.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -440,10 +429,10 @@
   public PostResponsePluginResult
        doPostResponse(PostResponseAddOperation addOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_RESPONSE_ADD.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_RESPONSE_ADD.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -460,10 +449,10 @@
   public PreParsePluginResult
        doPreParse(PreParseBindOperation bindOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                                PluginType.PRE_PARSE_BIND.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_PARSE_BIND.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -480,10 +469,10 @@
   public PreOperationPluginResult
        doPreOperation(PreOperationBindOperation bindOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_OPERATION_BIND.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_OPERATION_BIND.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -502,10 +491,10 @@
   public PostOperationPluginResult
        doPostOperation(PostOperationBindOperation bindOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_OPERATION_BIND.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_OPERATION_BIND.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -524,10 +513,10 @@
   public PostResponsePluginResult
        doPostResponse(PostResponseBindOperation bindOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_RESPONSE_BIND.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_RESPONSE_BIND.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -544,10 +533,10 @@
   public PreParsePluginResult
        doPreParse(PreParseCompareOperation compareOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_PARSE_COMPARE.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_PARSE_COMPARE.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -564,10 +553,10 @@
   public PreOperationPluginResult
        doPreOperation(PreOperationCompareOperation compareOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_OPERATION_COMPARE.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_OPERATION_COMPARE.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -586,11 +575,10 @@
   public PostOperationPluginResult
        doPostOperation(PostOperationCompareOperation compareOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message =
-         getMessage(msgID, String.valueOf(pluginDN),
-                    PluginType.POST_OPERATION_COMPARE.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_OPERATION_COMPARE.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -609,10 +597,10 @@
   public PostResponsePluginResult
        doPostResponse(PostResponseCompareOperation compareOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_RESPONSE_COMPARE.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_RESPONSE_COMPARE.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -629,10 +617,10 @@
   public PreParsePluginResult
        doPreParse(PreParseDeleteOperation deleteOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_PARSE_DELETE.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_PARSE_DELETE.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -651,10 +639,10 @@
   public PreOperationPluginResult
        doPreOperation(PreOperationDeleteOperation deleteOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_OPERATION_DELETE.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_OPERATION_DELETE.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -673,10 +661,10 @@
   public PostOperationPluginResult
        doPostOperation(PostOperationDeleteOperation deleteOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_OPERATION_DELETE.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_OPERATION_DELETE.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -695,10 +683,10 @@
   public PostResponsePluginResult
        doPostResponse(PostResponseDeleteOperation deleteOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_RESPONSE_DELETE.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_RESPONSE_DELETE.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -715,10 +703,10 @@
   public PreParsePluginResult
        doPreParse(PreParseExtendedOperation extendedOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_PARSE_EXTENDED.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_PARSE_EXTENDED.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -736,11 +724,10 @@
   public PreOperationPluginResult
        doPreOperation(PreOperationExtendedOperation extendedOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message =
-         getMessage(msgID, String.valueOf(pluginDN),
-                    PluginType.PRE_OPERATION_EXTENDED.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_OPERATION_EXTENDED.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -761,11 +748,10 @@
        doPostOperation(PostOperationExtendedOperation
                             extendedOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message =
-         getMessage(msgID, String.valueOf(pluginDN),
-                    PluginType.POST_OPERATION_EXTENDED.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_OPERATION_EXTENDED.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -784,11 +770,10 @@
   public PostResponsePluginResult
        doPostResponse(PostResponseExtendedOperation extendedOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message =
-         getMessage(msgID, String.valueOf(pluginDN),
-                    PluginType.POST_RESPONSE_EXTENDED.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_RESPONSE_EXTENDED.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -805,10 +790,10 @@
   public PreParsePluginResult
        doPreParse(PreParseModifyOperation modifyOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_PARSE_MODIFY.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_PARSE_MODIFY.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -827,10 +812,10 @@
   public PreOperationPluginResult
        doPreOperation(PreOperationModifyOperation modifyOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_OPERATION_MODIFY.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_OPERATION_MODIFY.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -849,10 +834,10 @@
   public PostOperationPluginResult
        doPostOperation(PostOperationModifyOperation modifyOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_OPERATION_MODIFY.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_OPERATION_MODIFY.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -871,10 +856,10 @@
   public PostResponsePluginResult
        doPostResponse(PostResponseModifyOperation modifyOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_RESPONSE_MODIFY.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_RESPONSE_MODIFY.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -891,10 +876,10 @@
   public PreParsePluginResult
        doPreParse(PreParseModifyDNOperation modifyDNOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_PARSE_MODIFY_DN.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_PARSE_MODIFY_DN.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -914,11 +899,10 @@
   public PreOperationPluginResult
        doPreOperation(PreOperationModifyDNOperation modifyDNOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message =
-         getMessage(msgID, String.valueOf(pluginDN),
-                    PluginType.PRE_OPERATION_MODIFY_DN.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_OPERATION_MODIFY_DN.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -955,11 +939,10 @@
                                   Entry oldEntry, Entry newEntry,
                                   List<Modification> modifications)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message =
-         getMessage(msgID, String.valueOf(pluginDN),
-                    PluginType.SUBORDINATE_MODIFY_DN.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+            String.valueOf(pluginDN),
+            PluginType.SUBORDINATE_MODIFY_DN.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -979,11 +962,10 @@
        doPostOperation(PostOperationModifyDNOperation
                             modifyDNOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message =
-         getMessage(msgID, String.valueOf(pluginDN),
-                    PluginType.POST_OPERATION_MODIFY_DN.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_OPERATION_MODIFY_DN.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -1002,11 +984,10 @@
   public PostResponsePluginResult
        doPostResponse(PostResponseModifyDNOperation modifyDNOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message =
-         getMessage(msgID, String.valueOf(pluginDN),
-                    PluginType.POST_RESPONSE_MODIFY_DN.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_RESPONSE_MODIFY_DN.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -1023,10 +1004,10 @@
   public PreParsePluginResult
        doPreParse(PreParseSearchOperation searchOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_PARSE_SEARCH.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_PARSE_SEARCH.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -1043,10 +1024,10 @@
   public PreOperationPluginResult
        doPreOperation(PreOperationSearchOperation searchOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_OPERATION_SEARCH.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_OPERATION_SEARCH.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -1071,10 +1052,10 @@
        processSearchEntry(SearchEntrySearchOperation searchOperation,
                           SearchResultEntry searchEntry)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.SEARCH_RESULT_ENTRY.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.SEARCH_RESULT_ENTRY.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -1096,11 +1077,10 @@
                                    searchOperation,
                               SearchResultReference searchReference)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message =
-         getMessage(msgID, String.valueOf(pluginDN),
-                    PluginType.SEARCH_RESULT_REFERENCE.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.SEARCH_RESULT_REFERENCE.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -1119,10 +1099,10 @@
   public PostOperationPluginResult
        doPostOperation(PostOperationSearchOperation searchOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_OPERATION_SEARCH.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_OPERATION_SEARCH.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -1141,10 +1121,10 @@
   public PostResponsePluginResult
        doPostResponse(PostResponseSearchOperation searchOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_RESPONSE_SEARCH.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_RESPONSE_SEARCH.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -1161,10 +1141,10 @@
   public PreParsePluginResult
        doPreParse(PreParseUnbindOperation unbindOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.PRE_PARSE_UNBIND.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.PRE_PARSE_UNBIND.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -1182,10 +1162,10 @@
   public PostOperationPluginResult
        doPostOperation(PostOperationUnbindOperation unbindOperation)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.POST_OPERATION_UNBIND.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.POST_OPERATION_UNBIND.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -1203,10 +1183,10 @@
               processIntermediateResponse(
                    IntermediateResponse intermediateResponse)
   {
-    int    msgID   = MSGID_PLUGIN_TYPE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(pluginDN),
-                          PluginType.INTERMEDIATE_RESPONSE.getName());
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+        get(String.valueOf(pluginDN),
+            PluginType.INTERMEDIATE_RESPONSE.getName());
+    throw new UnsupportedOperationException(message.toString());
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/api/plugin/StartupPluginResult.java b/opendj-sdk/opends/src/server/org/opends/server/api/plugin/StartupPluginResult.java
index 842be70..0a715bf 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/api/plugin/StartupPluginResult.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/api/plugin/StartupPluginResult.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.api.plugin;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageDescriptor;
 
 
 /**
@@ -51,13 +52,9 @@
   // process.
   private final boolean continueStartup;
 
-  // The unique identifier for any error message generated by the
-  // startup plugin.
-  private final int errorID;
-
-  // A human-readable message that explains any error that might have
+  // A message that explains any error that might have
   // occurred.
-  private final String errorMessage;
+  private final Message errorMessage;
 
 
 
@@ -69,7 +66,7 @@
    */
   private StartupPluginResult()
   {
-    this(true, true, 0, null);
+    this(true, true, null);
   }
 
 
@@ -84,20 +81,15 @@
    * @param  continueStartup        Indicates whether the Directory
    *                                Server should continue with its
    *                                startup process.
-   * @param  errorID                The unique ID assigned to any
-   *                                error message that might have been
-   *                                generated by the startup plugin.
-   * @param  errorMessage           A human-readable error message
-   *                                that explains any error that might
-   *                                have occurred.
+   * @param  errorMessage           An error message that explains any
+   *                                error that might have occurred.
    */
   public StartupPluginResult(boolean completedSuccessfully,
-                             boolean continueStartup, int errorID,
-                             String errorMessage)
+                             boolean continueStartup,
+                             Message errorMessage)
   {
     this.completedSuccessfully = completedSuccessfully;
     this.continueStartup       = continueStartup;
-    this.errorID               = errorID;
     this.errorMessage          = errorMessage;
   }
 
@@ -132,20 +124,6 @@
 
 
   /**
-   * Retrieves the unique ID for the error message generated by the
-   * startup plugin.
-   *
-   * @return  The unique ID for the error message generated by the
-   *          startup plugin, or 0 if there is no error message.
-   */
-  public int getErrorID()
-  {
-    return errorID;
-  }
-
-
-
-  /**
    * Retrieves the human-readable error message generated by the
    * startup plugin.
    *
@@ -153,7 +131,7 @@
    *          startup plugin, or {@code null} if there is no error
    *          message.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -188,7 +166,11 @@
     buffer.append(", continueStartup=");
     buffer.append(continueStartup);
     buffer.append(", errorID=");
-    buffer.append(errorID);
+    if (errorMessage != null) {
+      buffer.append(errorMessage.getDescriptor().getId());
+    } else {
+      buffer.append(MessageDescriptor.NULL_ID);
+    }
     buffer.append(", errorMessage=\"");
     buffer.append(errorMessage);
     buffer.append("\")");
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Aci.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Aci.java
index 4af0b45..2970731 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Aci.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Aci.java
@@ -26,11 +26,11 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DN;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.util.StaticUtils.isDigit;
 
 import java.util.regex.Pattern;
@@ -368,9 +368,8 @@
         //Perform a quick pattern check against the string to catch any
         //obvious syntax errors.
         if (!Pattern.matches(aciRegex, input)) {
-            int msgID = MSGID_ACI_SYNTAX_GENERAL_PARSE_FAILED;
-            String message = getMessage(msgID, input);
-            throw new AciException(msgID, message);
+            Message message = WARN_ACI_SYNTAX_GENERAL_PARSE_FAILED.get(input);
+            throw new AciException(message);
         }
         //Decode the body first.
         AciBody body=AciBody.decode(input);
@@ -529,7 +528,7 @@
    *  Decode an OIDs expression string.
    *
    * @param expr A string representing the OID expression.
-   * @param msgID A message ID to be used if there is an exception.
+   * @param msg  A message to be used if there is an exception.
    *
    * @return  Return a hash set of verfied OID strings parsed from the OID
    *          expression.
@@ -537,7 +536,7 @@
    * @throws AciException If the specified expression string is invalid.
    */
 
-    public static HashSet<String> decodeOID(String expr, int msgID)
+    public static HashSet<String> decodeOID(String expr, Message msg)
     throws AciException {
       HashSet<String> OIDs = new HashSet<String>();
       //Quick check to see if the expression is valid.
@@ -556,8 +555,7 @@
           OIDs.add(oid);
         }
       } else {
-        String message = getMessage(msgID, expr);
-        throw new AciException(msgID, message);
+        throw new AciException(msg);
       }
       return OIDs;
     }
@@ -578,15 +576,15 @@
       while ((pos < length) && ((c = oidStr.charAt(pos++)) != ' ')) {
         if (c == '.') {
           if (lastWasPeriod) {
-            int msgID = MSGID_ACI_SYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, oidStr, c, pos-1);
-            throw new AciException(msgID, message);
+            Message message = WARN_ACI_SYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID.get(
+                oidStr, pos-1);
+            throw new AciException(message);
           }  else
             lastWasPeriod = true;
         }  else if (! isDigit(c)) {
-          int msgID = MSGID_ACI_SYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, oidStr, c, pos-1);
-          throw new AciException(msgID, message);
+          Message message =
+              WARN_ACI_SYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID.get(oidStr, c, pos-1);
+          throw new AciException(message);
         }  else
           lastWasPeriod = false;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciBody.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciBody.java
index 6022132..c205979 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciBody.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciBody.java
@@ -26,10 +26,10 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -187,9 +187,8 @@
             startPos=bodyMatcher.start();
             version  = bodyMatcher.group(VERSION);
             if (!version.equalsIgnoreCase(supportedVersion)) {
-                int msgID = MSGID_ACI_SYNTAX_INVAILD_VERSION;
-                String message = getMessage(msgID, version);
-                throw new AciException(msgID, message);
+                Message message = WARN_ACI_SYNTAX_INVAILD_VERSION.get(version);
+                throw new AciException(message);
             }
             name = bodyMatcher.group(NAME);
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciException.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciException.java
index da74266..0eea819 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciException.java
@@ -25,9 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
 import org.opends.server.types.IdentifiedException;
 
+
 /**
  * The AciException class defines an exception that may be thrown
  * either during ACI syntax verification of an "aci" attribute type value
@@ -44,11 +46,6 @@
    */
   private static final long serialVersionUID = -2763328522960628853L;
 
-    /*
-     * The unique message ID for the associated message.
-     */
-    private int messageID;
-
     /**
      * Constructs a new exception with <code>null</code> as its detail message.
      * The cause is not initialized. Used to break out of a recursive bind rule
@@ -61,36 +58,22 @@
     /**
      * Creates a new ACI exception with the provided message.
      *
-     * @param  messageID  The unique message ID for the provided message.
      * @param  message    The message to use for this ACI exception.
      */
-    public AciException(int messageID, String message) {
+    public AciException(Message message) {
       super(message);
-      this.messageID = messageID;
     }
 
     /**
      * Creates a new ACI exception with the provided message and root
      * cause.
      *
-     * @param  messageID  The unique identifier for the associated message.
      * @param  message    The message that explains the problem that occurred.
      * @param  cause      The exception that was caught to trigger this
      *                    exception.
      */
-    public AciException(int messageID, String message, Throwable cause) {
+    public AciException(Message message, Throwable cause) {
       super(message, cause);
-
-
-      this.messageID = messageID;
     }
 
-  /**
-   * Retrieves the message ID for this exception.
-   *
-   * @return  The message ID for this exception.
-   */
-  public int getMessageID() {
-    return messageID;
-  }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
index fa824cd..306fa63 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
 
 
@@ -34,11 +35,9 @@
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.schema.SchemaConstants.SYNTAX_DN_OID;
 import static org.opends.server.util.ServerConstants.*;
-import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 import static org.opends.server.util.StaticUtils.toLowerCase;
 
 import java.util.*;
@@ -224,8 +223,7 @@
     private void processGlobalAcis(
         DseeCompatAccessControlHandlerCfg configuration)
     throws InitializationException {
-        int msgID;
-        LinkedList<String>failedACIMsgs=new LinkedList<String>();
+        LinkedList<Message>failedACIMsgs=new LinkedList<Message>();
         SortedSet<String> globalAci = configuration.getGlobalACI();
         try {
             if (globalAci != null)   {
@@ -243,26 +241,20 @@
                 int aciCount =  aciList.addAci(e, false, true, failedACIMsgs);
                 if(!failedACIMsgs.isEmpty())
                     aciListenerMgr.logMsgsSetLockDownMode(failedACIMsgs);
-                msgID  = MSGID_ACI_ADD_LIST_GLOBAL_ACIS;
-                String message = getMessage(msgID, Integer.toString(aciCount));
-                logError(ErrorLogCategory.ACCESS_CONTROL,
-                        ErrorLogSeverity.INFORMATIONAL,
-                        message, msgID);
+                Message message = INFO_ACI_ADD_LIST_GLOBAL_ACIS.get(
+                    Integer.toString(aciCount));
+                logError(message);
             }  else {
-                msgID  = MSGID_ACI_ADD_LIST_NO_GLOBAL_ACIS;
-                String message = getMessage(msgID);
-                logError(ErrorLogCategory.ACCESS_CONTROL,
-                        ErrorLogSeverity.INFORMATIONAL, message, msgID);
+                Message message = INFO_ACI_ADD_LIST_NO_GLOBAL_ACIS.get();
+                logError(message);
 
             }
         }  catch (Exception e) {
             if (debugEnabled())
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
-            msgID = MSGID_ACI_HANDLER_FAIL_PROCESS_GLOBAL_ACI;
-            String message =
-                    getMessage(msgID, String.valueOf(configuration.dn()),
-                    stackTraceToSingleLineString(e));
-            throw new InitializationException(msgID, message, e);
+            Message message = INFO_ACI_HANDLER_FAIL_PROCESS_GLOBAL_ACI.
+                get(String.valueOf(configuration.dn()));
+            throw new InitializationException(message, e);
         }
     }
 
@@ -281,7 +273,7 @@
             DN configDN=DN.decode("cn=config");
             LinkedHashSet<String> attrs = new LinkedHashSet<String>(1);
             attrs.add("aci");
-            LinkedList<String>failedACIMsgs=new LinkedList<String>();
+            LinkedList<Message>failedACIMsgs=new LinkedList<Message>();
             InternalClientConnection conn =
                     InternalClientConnection.getRootConnection();
             InternalSearchOperation op = conn.processSearch(configDN,
@@ -289,26 +281,21 @@
                     DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
                     SearchFilter.createFilterFromString("aci=*"), attrs);
             if(op.getSearchEntries().isEmpty()) {
-                int    msgID  = MSGID_ACI_ADD_LIST_NO_ACIS;
-                String message = getMessage(msgID, String.valueOf(configDN));
-                logError(ErrorLogCategory.ACCESS_CONTROL,
-                        ErrorLogSeverity.INFORMATIONAL, message, msgID);
+                Message message =
+                    INFO_ACI_ADD_LIST_NO_ACIS.get(String.valueOf(configDN));
+                logError(message);
             } else {
                 int validAcis =
                            aciList.addAci(op.getSearchEntries(), failedACIMsgs);
                 if(!failedACIMsgs.isEmpty())
                     aciListenerMgr.logMsgsSetLockDownMode(failedACIMsgs);
-                int    msgID  = MSGID_ACI_ADD_LIST_ACIS;
-                String message = getMessage(msgID, Integer.toString(validAcis),
-                        String.valueOf(configDN));
-                logError(ErrorLogCategory.ACCESS_CONTROL,
-                        ErrorLogSeverity.INFORMATIONAL,
-                        message, msgID);
+                Message message = INFO_ACI_ADD_LIST_ACIS.get(
+                    Integer.toString(validAcis), String.valueOf(configDN));
+                logError(message);
             }
         } catch (DirectoryException e) {
-            int  msgID = MSGID_ACI_HANDLER_FAIL_PROCESS_ACI;
-            String message = getMessage(msgID, stackTraceToSingleLineString(e));
-            throw new InitializationException(msgID, message, e);
+            Message message = INFO_ACI_HANDLER_FAIL_PROCESS_ACI.get();
+            throw new InitializationException(message, e);
         }
     }
 
@@ -339,14 +326,10 @@
                */
               if (!operation.getClientConnection().
                    hasPrivilege(Privilege.MODIFY_ACL, operation)) {
-                int  msgID  = MSGID_ACI_MODIFY_FAILED_PRIVILEGE;
-                String message =
-                     getMessage(msgID,
-                                String.valueOf(container.getResourceDN()),
-                                String.valueOf(container.getClientDN()));
-                logError(ErrorLogCategory.ACCESS_CONTROL,
-                         ErrorLogSeverity.INFORMATIONAL,
-                         message, msgID);
+                Message message = INFO_ACI_MODIFY_FAILED_PRIVILEGE.
+                    get(String.valueOf(container.getResourceDN()),
+                        String.valueOf(container.getClientDN()));
+                logError(message);
                 return false;
               }
             }
@@ -430,13 +413,9 @@
                                dn=DN.nullDN();
                            Aci.decode(v.getValue(),dn);
                        } catch (AciException ex) {
-                           int    msgID  = MSGID_ACI_MODIFY_FAILED_DECODE;
-                           String message = getMessage(msgID,
-                                   String.valueOf(dn),
-                                   ex.getMessage());
-                           logError(ErrorLogCategory.ACCESS_CONTROL,
-                                   ErrorLogSeverity.INFORMATIONAL,
-                                   message, msgID);
+                           Message message = WARN_ACI_MODIFY_FAILED_DECODE.get(
+                               String.valueOf(dn), ex.getMessage());
+                           logError(message);
                            return false;
                        }
                    }
@@ -598,10 +577,8 @@
             }
           } catch (DirectoryException ex) {
              //Log a message and keep going.
-             int  msgID  = MSGID_ACI_NOT_VALID_DN;
-             String message = getMessage(msgID, DNString);
-             logError(ErrorLogCategory.ACCESS_CONTROL,
-                     ErrorLogSeverity.INFORMATIONAL, message, msgID);
+             Message message = WARN_ACI_NOT_VALID_DN.get(DNString);
+             logError(message);
           }
         }
 
@@ -864,13 +841,9 @@
          */
         if (!operation.getClientConnection().
              hasPrivilege(Privilege.MODIFY_ACL, operation))  {
-          int    msgID  = MSGID_ACI_ADD_FAILED_PRIVILEGE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      String.valueOf(clientDN));
-          logError(ErrorLogCategory.ACCESS_CONTROL,
-                   ErrorLogSeverity.INFORMATIONAL,
-                   message, msgID);
+          Message message = INFO_ACI_ADD_FAILED_PRIVILEGE.get(
+              String.valueOf(entry.getDN()), String.valueOf(clientDN));
+          logError(message);
           return false;
         }
         List<Attribute> attributeList =
@@ -883,13 +856,9 @@
               DN dn=entry.getDN();
               Aci.decode(value.getValue(),dn);
             } catch (AciException ex) {
-              int    msgID  = MSGID_ACI_ADD_FAILED_DECODE;
-              String message = getMessage(msgID,
-                                          String.valueOf(entry.getDN()),
-                                          ex.getMessage());
-              logError(ErrorLogCategory.ACCESS_CONTROL,
-                       ErrorLogSeverity.INFORMATIONAL,
-                       message, msgID);
+              Message message = WARN_ACI_ADD_FAILED_DECODE.get(
+                  String.valueOf(entry.getDN()), ex.getMessage());
+              logError(message);
               return false;
             }
           }
@@ -1136,10 +1105,9 @@
         break;
     }
     if (entryLock == null) {
-      int    msgID   = MSGID_ACI_HANDLER_CANNOT_LOCK_NEW_SUPERIOR_USER;
-      String message = getMessage(msgID, String.valueOf(superiorDN));
-       logError(ErrorLogCategory.ACCESS_CONTROL, ErrorLogSeverity.INFORMATIONAL,
-                message, msgID);
+      Message message = WARN_ACI_HANDLER_CANNOT_LOCK_NEW_SUPERIOR_USER.get(
+          String.valueOf(superiorDN));
+      logError(message);
       return false;
     }
     try {
@@ -1222,11 +1190,9 @@
                 GetEffectiveRights.decodeControl(control);
         op.setAttachment(OID_GET_EFFECTIVE_RIGHTS, getEffectiveRightsControl);
       } catch  (LDAPException le)  {
-        int msgID=MSGID_ACI_SYNTAX_DECODE_EFFECTIVERIGHTS_FAIL;
-        String message = getMessage(msgID, le.getMessage());
-        logError(ErrorLogCategory.ACCESS_CONTROL,
-                 ErrorLogSeverity.INFORMATIONAL,
-                 message, msgID);
+        Message message =
+            WARN_ACI_SYNTAX_DECODE_EFFECTIVERIGHTS_FAIL.get(le.getMessage());
+        logError(message);
         ret=false;
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciList.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciList.java
index 563c3e4..11caf90 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciList.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciList.java
@@ -26,12 +26,12 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
 import org.opends.server.api.Backend;
 import static org.opends.server.authorization.dseecompat.AciHandler.*;
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AccessControlMessages.*;
 import org.opends.server.types.*;
 
 import java.util.*;
@@ -139,7 +139,7 @@
    * @return The number of valid ACI attribute values added to the ACI list.
    */
   public synchronized int addAci(List<? extends Entry> entries,
-                                 LinkedList<String> failedACIMsgs)
+                                 LinkedList<Message> failedACIMsgs)
   {
     // Copy the ACI list.
     LinkedHashMap<DN,List<Aci>> aciCopy = copyList();
@@ -171,7 +171,7 @@
    */
   public synchronized int addAci(Entry entry,  boolean hasAci,
                                  boolean hasGlobalAci,
-                                 LinkedList<String> failedACIMsgs) {
+                                 LinkedList<Message> failedACIMsgs) {
     int validAcis=0;
 
     // Copy the ACI list.
@@ -213,7 +213,7 @@
   private static int addAciAttributeList(LinkedHashMap<DN,List<Aci>> aciList,
                                          DN dn, DN configDN,
                                          List<Attribute> attributeList,
-                                         LinkedList<String> failedACIMsgs) {
+                                         LinkedList<Message> failedACIMsgs) {
 
     if (attributeList == null) {
       return 0;
@@ -228,14 +228,14 @@
           acis.add(aci);
           validAcis++;
         } catch (AciException ex) {
-          int    msgID  = MSGID_ACI_ADD_LIST_FAILED_DECODE;
           DN msgDN=dn;
           if(dn == DN.nullDN()) {
             msgDN=configDN;
           }
-          String message = getMessage(msgID, value.getValue().toString(),
-                                            String.valueOf(msgDN),
-                                            ex.getMessage());
+          Message message = WARN_ACI_ADD_LIST_FAILED_DECODE.get(
+                  value.getValue().toString(),
+                  String.valueOf(msgDN),
+                  ex.getMessage());
           failedACIMsgs.add(message);
         }
       }
@@ -264,7 +264,7 @@
 
       // Copy the ACI list.
       LinkedHashMap<DN,List<Aci>> aciCopy = copyList();
-      LinkedList<String>failedACIMsgs=new LinkedList<String>();
+      LinkedList<Message>failedACIMsgs=new LinkedList<Message>();
       //Process "aci" attribute types.
       if(hasAci) {
           aciCopy.remove(oldEntry.getDN());
@@ -387,13 +387,9 @@
             //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.
-            int    msgID  = MSGID_ACI_ADD_LIST_FAILED_DECODE;
-            String message = getMessage(msgID, aci.toString(),
-                                        String.valueOf(relocateDN),
-                                        ex.getMessage());
-            logError(ErrorLogCategory.ACCESS_CONTROL,
-                    ErrorLogSeverity.INFORMATIONAL,
-                    message, msgID);
+            Message message = WARN_ACI_ADD_LIST_FAILED_DECODE.get(
+                aci.toString(), String.valueOf(relocateDN), ex.getMessage());
+            logError(message);
           }
         }
         newCopyList.put(relocateDN, acis);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciListenerManager.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciListenerManager.java
index fc0b121..5280a9b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciListenerManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciListenerManager.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
 import org.opends.server.workflowelement.localbackend.*;
 import org.opends.server.api.ChangeNotificationListener;
@@ -42,8 +43,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.*;
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AccessControlMessages.*;
 import org.opends.server.core.DirectoryServer;
 import static org.opends.server.util.ServerConstants.*;
 
@@ -154,7 +154,7 @@
         boolean hasAci, hasGlobalAci=false;
         //Ignore this list, the ACI syntax has already passed and it should be
         //empty.
-        LinkedList<String>failedACIMsgs=new LinkedList<String>();
+        LinkedList<Message>failedACIMsgs=new LinkedList<Message>();
         //This entry might have both global and aci attribute types.
         if((hasAci=entry.hasOperationalAttribute(AciHandler.aciType)) ||
                 (hasGlobalAci=entry.hasAttribute(AciHandler.globalAciType)))
@@ -213,7 +213,7 @@
     public void performBackendInitializationProcessing(Backend backend) {
       InternalClientConnection conn =
            InternalClientConnection.getRootConnection();
-      LinkedList<String>failedACIMsgs=new LinkedList<String>();
+      LinkedList<Message>failedACIMsgs=new LinkedList<Message>();
       //Add manageDsaIT control so any ACIs in referral entries will be
       //picked up.
       ArrayList<Control> controls = new ArrayList<Control>(1);
@@ -250,21 +250,17 @@
             continue;
         }
         if(internalSearch.getSearchEntries().isEmpty()) {
-          int    msgID  = MSGID_ACI_ADD_LIST_NO_ACIS;
-          String message = getMessage(msgID, String.valueOf(baseDN));
-          logError(ErrorLogCategory.ACCESS_CONTROL,
-                   ErrorLogSeverity.INFORMATIONAL, message, msgID);
+          Message message =
+              INFO_ACI_ADD_LIST_NO_ACIS.get(String.valueOf(baseDN));
+          logError(message);
         } else {
           int validAcis = aciList.addAci(
                internalSearch.getSearchEntries(), failedACIMsgs);
           if(!failedACIMsgs.isEmpty())
                     logMsgsSetLockDownMode(failedACIMsgs);
-          int    msgID  = MSGID_ACI_ADD_LIST_ACIS;
-          String message = getMessage(msgID, Integer.toString(validAcis),
-                                      String.valueOf(baseDN));
-          logError(ErrorLogCategory.ACCESS_CONTROL,
-                   ErrorLogSeverity.INFORMATIONAL,
-                   message, msgID);
+          Message message = INFO_ACI_ADD_LIST_ACIS.get(
+              Integer.toString(validAcis), String.valueOf(baseDN));
+          logError(message);
         }
       }
     }
@@ -331,13 +327,11 @@
      *
      * @param failedACIMsgs  List of exception messages from failed ACI decodes.
      */
-    public  void logMsgsSetLockDownMode(LinkedList<String> failedACIMsgs) {
-        int msgID=MSGID_ACI_SERVER_DECODE_FAILED;
-        for(String msg : failedACIMsgs) {
-            String message=getMessage(msgID, msg);
-            logError(ErrorLogCategory.ACCESS_CONTROL,
-                    ErrorLogSeverity.SEVERE_ERROR,
-                    message, msgID);
+    public  void logMsgsSetLockDownMode(LinkedList<Message> failedACIMsgs) {
+
+        for(Message msg : failedACIMsgs) {
+            Message message=WARN_ACI_SERVER_DECODE_FAILED.get(msg);
+            logError(message);
         }
         if(!inLockDownMode)
             setLockDownMode();
@@ -345,7 +339,7 @@
 
 
     /**
-     * Send an MSGID_ACI_ENTER_LOCKDOWN_MODE alert notification and put the
+     * Send an WARN_ACI_ENTER_LOCKDOWN_MODE alert notification and put the
      * server in lockdown mode.
      *
      */
@@ -354,11 +348,10 @@
             inLockDownMode=true;
             //Send ALERT_TYPE_ACCESS_CONTROL_PARSE_FAILED alert that
             //lockdown is about to be entered.
-            int lockDownID=MSGID_ACI_ENTER_LOCKDOWN_MODE;
-            String lockDownMsg=getMessage(lockDownID);
+            Message lockDownMsg=WARN_ACI_ENTER_LOCKDOWN_MODE.get();
             DirectoryServer.sendAlertNotification(this,
                     ALERT_TYPE_ACCESS_CONTROL_PARSE_FAILED,
-                    lockDownID, lockDownMsg );
+                    lockDownMsg );
             //Enter lockdown mode.
             DirectoryServer.setLockdownMode(true);
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciTargets.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciTargets.java
index 94eb6d4..c56afde 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciTargets.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciTargets.java
@@ -26,10 +26,10 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.DN;
 import org.opends.server.types.SearchScope;
@@ -252,26 +252,26 @@
         while (targetMatcher.find())
         {
             if (targetMatcher.groupCount() != targetElementCount) {
-                int msgID = MSGID_ACI_SYNTAX_INVALID_TARGET_SYNTAX;
-                String message = getMessage(msgID, input);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_TARGET_SYNTAX.get(input);
+                throw new AciException(message);
             }
             String keyword = targetMatcher.group(targetKeywordPos);
             EnumTargetKeyword targetKeyword  =
                 EnumTargetKeyword.createKeyword(keyword);
             if (targetKeyword == null) {
-                int msgID = MSGID_ACI_SYNTAX_INVALID_TARGET_KEYWORD;
-                String message = getMessage(msgID, keyword  );
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_TARGET_KEYWORD.get(keyword);
+                throw new AciException(message);
             }
             String operator =
                 targetMatcher.group(targetOperatorPos);
             EnumTargetOperator targetOperator =
                 EnumTargetOperator.createOperator(operator);
             if (targetOperator == null) {
-                int msgID = MSGID_ACI_SYNTAX_INVALID_TARGETS_OPERATOR;
-                String message = getMessage(msgID, operator);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_TARGETS_OPERATOR.get(operator);
+                throw new AciException(message);
             }
             String expression = targetMatcher.group(targetExpressionPos);
             switch(targetKeyword)
@@ -283,11 +283,10 @@
                 }
                 else
                 {
-                    int msgID =
-                        MSGID_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS;
-                    String message =
-                        getMessage(msgID, "target", input);
-                    throw new AciException(msgID, message);
+                  Message message =
+                          WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
+                                  get("target", input);
+                  throw new AciException(message);
                 }
                 break;
             }
@@ -299,11 +298,10 @@
               }
               else
               {
-                int msgID =
-                        MSGID_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS;
-                String message =
-                        getMessage(msgID, "targetcontrol", input);
-                throw new AciException(msgID, message);
+                Message message =
+                        WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
+                                get("targetcontrol", input);
+                throw new AciException(message);
               }
               break;
             }
@@ -314,11 +312,10 @@
               }
               else
               {
-                int msgID =
-                        MSGID_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS;
-                String message =
-                        getMessage(msgID, "extop", input);
-                throw new AciException(msgID, message);
+                Message message =
+                        WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
+                                get("extop", input);
+                throw new AciException(message);
               }
               break;
             }
@@ -329,11 +326,10 @@
                             expression);
                 }
                 else {
-                    int msgID =
-                        MSGID_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS;
-                    String message =
-                        getMessage(msgID, "targetattr", input);
-                    throw new AciException(msgID, message);
+                  Message message =
+                          WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
+                                  get("targetattr", input);
+                  throw new AciException(message);
                 }
                 break;
             }
@@ -341,9 +337,10 @@
             {
                 // Check the operator for the targetscope is EQUALITY
                 if (targetOperator == EnumTargetOperator.NOT_EQUALITY) {
-                    int msgID = MSGID_ACI_SYNTAX_INVALID_TARGET_NOT_OPERATOR;
-                    String message = getMessage(msgID, operator);
-                    throw new AciException(msgID, message);
+                    Message message =
+                            WARN_ACI_SYNTAX_INVALID_TARGET_NOT_OPERATOR.
+                              get(operator, targetKeyword.name());
+                    throw new AciException(message);
                 }
                 targetScope=createScope(expression);
                 break;
@@ -355,11 +352,10 @@
                             expression);
                 }
                 else {
-                    int msgID =
-                            MSGID_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS;
-                    String message =
-                            getMessage(msgID, "targetfilter", input);
-                    throw new AciException(msgID, message);
+                  Message message =
+                          WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
+                                  get("targetfilter", input);
+                  throw new AciException(message);
                 }
                 break;
             }
@@ -368,20 +364,19 @@
                 if (targAttrFilters == null){
                     // Check the operator for the targattrfilters is EQUALITY
                     if (targetOperator == EnumTargetOperator.NOT_EQUALITY) {
-                        int msgID =
-                                MSGID_ACI_SYNTAX_INVALID_TARGET_NOT_OPERATOR;
-                        String message = getMessage(msgID, operator);
-                        throw new AciException(msgID, message);
+                      Message message =
+                              WARN_ACI_SYNTAX_INVALID_TARGET_NOT_OPERATOR.
+                                      get(operator, targetKeyword.name());
+                      throw new AciException(message);
                     }
                     targAttrFilters = TargAttrFilters.decode(targetOperator,
                             expression);
                 }
                 else {
-                    int msgID =
-                            MSGID_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS;
-                    String message =
-                            getMessage(msgID, "targattrfilters", input);
-                    throw new AciException(msgID, message);
+                  Message message =
+                          WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
+                                  get("targattrfilters", input);
+                  throw new AciException(message);
                 }
                 break;
             }
@@ -411,10 +406,9 @@
         else if(expression.equalsIgnoreCase("subordinate"))
             return SearchScope.SUBORDINATE_SUBTREE;
         else {
-            int msgID =
-                MSGID_ACI_SYNTAX_INVALID_TARGETSCOPE_EXPRESSION;
-            String message = getMessage(msgID, expression);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_TARGETSCOPE_EXPRESSION.get(expression);
+            throw new AciException(message);
         }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AuthMethod.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AuthMethod.java
index 6909aa6..73beb1f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AuthMethod.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AuthMethod.java
@@ -26,13 +26,13 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AccessControlMessages.*;
 import org.opends.server.core.DirectoryServer;
 import static org.opends.server.loggers.ErrorLogger.logError;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 /**
  * The AuthMethod class represents an authmethod bind rule keyword expression.
@@ -95,16 +95,14 @@
       {
         String saslMech = expr.substring(5);
         if (DirectoryServer.getSASLMechanismHandler(saslMech) == null) {
-          int msgID = MSGID_ACI_SYNTAX_DUBIOUS_AUTHMETHOD_SASL_MECHANISM;
-          logError(ErrorLogCategory.ACCESS_CONTROL,
-                   ErrorLogSeverity.NOTICE, msgID, saslMech);
+          logError(NOTE_ACI_SYNTAX_DUBIOUS_AUTHMETHOD_SASL_MECHANISM.
+                    get(saslMech));
         }
         return new AuthMethod(EnumAuthMethod.AUTHMETHOD_SASL, saslMech, type);
       }
 
-      int msgID = MSGID_ACI_SYNTAX_INVALID_AUTHMETHOD_EXPRESSION;
-      String message = getMessage(msgID, expr);
-      throw new AciException(msgID, message);
+      Message message = WARN_ACI_SYNTAX_INVALID_AUTHMETHOD_EXPRESSION.get(expr);
+      throw new AciException(message);
     }
 
     /**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/BindRule.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/BindRule.java
index 27b9e4c..b9477d0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/BindRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/BindRule.java
@@ -26,10 +26,10 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 import java.util.HashMap;
@@ -234,9 +234,9 @@
            * Raise an exception otherwise.
            */
           if (numOpen > numClose) {
-              int msgID = MSGID_ACI_SYNTAX_BIND_RULE_MISSING_CLOSE_PAREN;
-              String message = getMessage(msgID, input);
-              throw new AciException(msgID, message);
+              Message message =
+                  ERR_ACI_SYNTAX_BIND_RULE_MISSING_CLOSE_PAREN.get(input);
+              throw new AciException(message);
           }
           /*
            * If there are remaining chars => there MUST be an
@@ -285,9 +285,9 @@
             }
           }
           else {
-              int msgID = MSGID_ACI_SYNTAX_INVALID_BIND_RULE_SYNTAX;
-              String message = getMessage(msgID, input);
-              throw new AciException(msgID, message);
+              Message message =
+                  ERR_ACI_SYNTAX_INVALID_BIND_RULE_SYNTAX.get(input);
+              throw new AciException(message);
           }
         }
     }
@@ -312,24 +312,24 @@
         keyword = EnumBindRuleKeyword.createBindRuleKeyword(keywordStr);
         if (keyword == null)
         {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD;
-            String message = getMessage(msgID, keywordStr);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD.get(keywordStr);
+            throw new AciException(message);
         }
 
         // Get the operator
         operator = EnumBindRuleType.createBindruleOperand(operatorStr);
         if (operator == null) {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_BIND_RULE_OPERATOR;
-            String message = getMessage(msgID, operatorStr);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_BIND_RULE_OPERATOR.get(operatorStr);
+            throw new AciException(message);
         }
 
         //expression can't be null
         if (expression == null) {
-            int msgID = MSGID_ACI_SYNTAX_MISSING_BIND_RULE_EXPRESSION;
-            String message = getMessage(msgID, operatorStr);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_MISSING_BIND_RULE_EXPRESSION.get(operatorStr);
+            throw new AciException(message);
         }
         validateOperation(keyword, operator);
         KeywordBindRule rule = decode(expression, keyword, operator);
@@ -363,10 +363,10 @@
             if ((operand == null)
                     || ((operand != EnumBooleanTypes.AND_BOOLEAN_TYPE) &&
                             (operand != EnumBooleanTypes.OR_BOOLEAN_TYPE))) {
-                int msgID =
-                    MSGID_ACI_SYNTAX_INVALID_BIND_RULE_BOOLEAN_OPERATOR;
-                String message = getMessage(msgID, remainingOperand);
-                throw new AciException(msgID, message);
+                Message message =
+                        WARN_ACI_SYNTAX_INVALID_BIND_RULE_BOOLEAN_OPERATOR
+                                .get(remainingOperand);
+                throw new AciException(message);
             }
             StringBuilder ruleExpr=new StringBuilder(remainingBindrule);
             /* TODO write a unit test to verify.
@@ -382,9 +382,9 @@
             bindrule_2.setNegate(negate);
             return new BindRule(bindrule, bindrule_2, operand);
         } else {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_BIND_RULE_SYNTAX;
-            String message = getMessage(msgID, remainingBindruleStr);
-            throw new AciException(msgID, message);
+            Message message = ERR_ACI_SYNTAX_INVALID_BIND_RULE_SYNTAX.get(
+                remainingBindruleStr);
+            throw new AciException(message);
         }
     }
 
@@ -451,12 +451,10 @@
         case DAYOFWEEK:
             if ((op != EnumBindRuleType.EQUAL_BINDRULE_TYPE)
                     && (op != EnumBindRuleType.NOT_EQUAL_BINDRULE_TYPE)) {
-                int msgID =
-                    MSGID_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD_OPERATOR_COMBO;
-                String message = getMessage(msgID,
-                                            keyword.toString(),
-                                            op.toString());
-                throw new AciException(msgID, message);
+                Message message =
+                  WARN_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD_OPERATOR_COMBO
+                          .get(keyword.toString(), op.toString());
+                throw new AciException(message);
             }
         }
     }
@@ -497,9 +495,9 @@
             {
                 //The roledn keyword is not supported. Throw an exception with
                 //a message if it is seen in the ACI.
-                int msgID=MSGID_ACI_SYNTAX_ROLEDN_NOT_SUPPORTED;
-                String message = getMessage(msgID, expr);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_ROLEDN_NOT_SUPPORTED.get(expr);
+                throw new AciException(message);
             }
             case GROUPDN:
             {
@@ -537,9 +535,9 @@
                 break;
             }
             default:  {
-                int msgID = MSGID_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD;
-                String message = getMessage(msgID, keyword.toString());
-                throw new AciException(msgID, message);
+                Message message = WARN_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD.get(
+                    keyword.toString());
+                throw new AciException(message);
             }
         }
         return rule;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/DNS.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/DNS.java
index 278216b..d6ba3df 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/DNS.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/DNS.java
@@ -27,20 +27,21 @@
 
 package org.opends.server.authorization.dseecompat;
 
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.authorization.dseecompat.Aci.*;
+import org.opends.messages.Message;
+
 import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.messages.AccessControlMessages.*;
+import static org.opends.server.authorization.dseecompat.Aci.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import static org.opends.server.util.StaticUtils.*;
+
+import org.opends.server.loggers.debug.DebugTracer;
+
 import java.net.InetAddress;
 import java.util.LinkedList;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 
 /**
  * This class implements the dns bind rule keyword.
@@ -96,9 +97,8 @@
     throws AciException
     {
         if (!Pattern.matches(valuesRegExGroup, expr)) {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_DNS_EXPRESSION;
-            String message = getMessage(msgID, expr);
-            throw new AciException(msgID, message);
+            Message message = WARN_ACI_SYNTAX_INVALID_DNS_EXPRESSION.get(expr);
+            throw new AciException(message);
         }
         LinkedList<String>dns=new LinkedList<String>();
         int valuePos = 1;
@@ -109,9 +109,9 @@
             String[] hnArray=hn.split("\\.", -1);
             for(int i=1, n=hnArray.length; i < n; i++) {
                 if(hnArray[i].equals("*")) {
-                    int msgID = MSGID_ACI_SYNTAX_INVALID_DNS_WILDCARD;
-                    String message = getMessage(msgID, expr);
-                    throw new AciException(msgID, message);
+                    Message message =
+                        WARN_ACI_SYNTAX_INVALID_DNS_WILDCARD.get(expr);
+                    throw new AciException(message);
                 }
             }
 
@@ -141,22 +141,18 @@
                     {
                       dns.add(canonicalName);
 
-                      int msgID =
-                           MSGID_ACI_LOCALHOST_DOESNT_MATCH_CANONICAL_VALUE;
-                      String message = getMessage(msgID, expr, hn,
-                                                  canonicalName);
-                      logError(ErrorLogCategory.ACCESS_CONTROL,
-                               ErrorLogSeverity.INFORMATIONAL, message, msgID);
+                      Message message =
+                        WARN_ACI_LOCALHOST_DOESNT_MATCH_CANONICAL_VALUE.
+                            get(expr, hn, canonicalName);
+                      logError(message);
                     }
                     else
                     {
-                      int msgID =
-                           MSGID_ACI_HOSTNAME_DOESNT_MATCH_CANONICAL_VALUE;
-                      String message = getMessage(msgID, expr,
-                                                  hn, addr.getHostAddress(),
-                                                  addr.getCanonicalHostName());
-                      logError(ErrorLogCategory.ACCESS_CONTROL,
-                               ErrorLogSeverity.INFORMATIONAL, message, msgID);
+                      Message message =
+                        WARN_ACI_HOSTNAME_DOESNT_MATCH_CANONICAL_VALUE.
+                            get(expr, hn, addr.getHostAddress(),
+                                addr.getCanonicalHostName());
+                      logError(message);
                     }
                   }
                 }
@@ -168,11 +164,9 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, e);
                 }
 
-                int msgID = MSGID_ACI_ERROR_CHECKING_CANONICAL_HOSTNAME;
-                String message = getMessage(msgID, hn, expr,
-                                            getExceptionMessage(e));
-                logError(ErrorLogCategory.ACCESS_CONTROL,
-                         ErrorLogSeverity.INFORMATIONAL, message, msgID);
+                Message message = WARN_ACI_ERROR_CHECKING_CANONICAL_HOSTNAME.
+                    get(hn, expr, getExceptionMessage(e));
+                logError(message);
               }
             }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/DayOfWeek.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/DayOfWeek.java
index 7e3d2aa..76df894 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/DayOfWeek.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/DayOfWeek.java
@@ -26,9 +26,9 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AccessControlMessages.*;
 import java.util.Calendar;
 import java.util.GregorianCalendar;
 import java.util.LinkedList;
@@ -76,9 +76,8 @@
           EnumDayOfWeek day=EnumDayOfWeek.createDayOfWeek(dayArray[i]);
           if (day == null)
           {
-              int msgID = MSGID_ACI_SYNTAX_INVALID_DAYOFWEEK;
-              String message = getMessage(msgID, expr);
-              throw new AciException(msgID, message);
+              Message message = WARN_ACI_SYNTAX_INVALID_DAYOFWEEK.get(expr);
+              throw new AciException(message);
           }
           days.add(day);
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/ExtOp.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/ExtOp.java
index a1c4498..a4a2678 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/ExtOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/ExtOp.java
@@ -27,7 +27,7 @@
 
 package org.opends.server.authorization.dseecompat;
 
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 
 import java.util.HashSet;
 
@@ -76,7 +76,8 @@
   public static ExtOp decode(EnumTargetOperator operator, String expr)
           throws AciException {
     HashSet<String> extOpOIDs =
-          Aci.decodeOID(expr,MSGID_ACI_SYNTAX_INVALID_TARGEXTOP_EXPRESSION);
+          Aci.decodeOID(expr,
+                  WARN_ACI_SYNTAX_INVALID_TARGEXTOP_EXPRESSION.get(expr));
     return new ExtOp(operator, extOpOIDs);
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/GroupDN.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/GroupDN.java
index 7ffe140..a94bad2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/GroupDN.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/GroupDN.java
@@ -26,10 +26,10 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import org.opends.server.types.*;
 import org.opends.server.api.Group;
 import org.opends.server.core.GroupManager;
@@ -91,9 +91,9 @@
     public static KeywordBindRule decode(String expr, EnumBindRuleType type)
     throws AciException  {
         if (!Pattern.matches(LDAP_URLS, expr)) {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_GROUPDN_EXPRESSION;
-            String message = getMessage(msgID, expr);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_GROUPDN_EXPRESSION.get(expr);
+            throw new AciException(message);
         }
         LinkedList<DN>groupDNs=new LinkedList<DN>();
         int ldapURLPos = 1;
@@ -105,9 +105,9 @@
                DN dn=LDAPURL.decode(value, true).getBaseDN();
                groupDNs.add(dn);
             } catch (DirectoryException ex) {
-                int msgID = MSGID_ACI_SYNTAX_INVALID_GROUPDN_URL;
-                String message = getMessage(msgID, ex.getErrorMessage());
-                throw new AciException(msgID, message);
+                Message message = WARN_ACI_SYNTAX_INVALID_GROUPDN_URL.get(
+                    ex.getMessageObject());
+                throw new AciException(message);
             }
         }
         return new GroupDN(type, groupDNs);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/IP.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/IP.java
index 10ed65f..cacc9a2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/IP.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/IP.java
@@ -26,9 +26,9 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AccessControlMessages.*;
 import java.util.regex.Pattern;
 import java.util.*;
 import java.net.InetAddress;
@@ -88,9 +88,9 @@
         List<PatternIP> patternIPList= new LinkedList<PatternIP>();
         for (String ipStr : ipStrs) {
             if (!Pattern.matches(ipRegEx, ipStr)) {
-                int msgID = MSGID_ACI_SYNTAX_INVALID_IP_EXPRESSION;
-                String message = getMessage(msgID, expr);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_IP_EXPRESSION.get(expr);
+                throw new AciException(message);
             }
             PatternIP ipPattern = PatternIP.decode(ipStr);
             patternIPList.add(ipPattern);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java
index c084ce1..d8d61a5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java
@@ -26,10 +26,10 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import java.util.StringTokenizer;
 import java.util.LinkedHashSet;
 import java.util.regex.Pattern;
@@ -103,20 +103,19 @@
         if (skipParse) {
             //The "parent[" pattern is invalid for ROLEDN user attr keyword.
             if(pattern.startsWith(parentPat)) {
-                int msgID =
-                   MSGID_ACI_SYNTAX_INVALID_USERATTR_ROLEDN_INHERITANCE_PATTERN;
-                String message = getMessage(msgID, pattern);
-                throw new AciException(msgID, message);
+                Message message =
+                  WARN_ACI_SYNTAX_INVALID_USERATTR_ROLEDN_INHERITANCE_PATTERN
+                          .get(pattern);
+                throw new AciException(message);
             }  else {
                 pattern=pattern.trim();
                 Pattern pattern1=Pattern.compile(ATTR_NAME);
                 Matcher matcher=pattern1.matcher(pattern);
                //Check if valid attribute type name.
                if(!matcher.find() || matcher.groupCount() != 1) {
-                int msgID =
-                        MSGID_ACI_SYNTAX_INVALID_ATTRIBUTE_TYPE_NAME;
-                String message = getMessage(msgID, pattern);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_ATTRIBUTE_TYPE_NAME.get(pattern);
+                throw new AciException(message);
                }
                if((this.attributeType =
                     DirectoryServer.getAttributeType(pattern)) == null)
@@ -149,19 +148,18 @@
              */
             String[] toks=p.split("\\.");
             if(toks.length != 2) {
-                int msgID =
-                    MSGID_ACI_SYNTAX_INVALID_USERATTR_INHERITANCE_PATTERN;
-                String message = getMessage(msgID, pattern);
-                throw new AciException(msgID, message);
+                Message message =
+                  WARN_ACI_SYNTAX_INVALID_USERATTR_INHERITANCE_PATTERN
+                          .get(pattern);
+                throw new AciException(message);
             }
             Pattern pattern1=Pattern.compile(ATTR_NAME);
             Matcher matcher=pattern1.matcher(toks[1]);
             //Check if valid attribute type name.
             if(!matcher.find() || matcher.groupCount() != 1) {
-                int msgID =
-                    MSGID_ACI_SYNTAX_INVALID_ATTRIBUTE_TYPE_NAME;
-                String message = getMessage(msgID, toks[1]);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_ATTRIBUTE_TYPE_NAME.get(toks[1]);
+                throw new AciException(message);
             }
             if((this.attributeType =
                 DirectoryServer.getAttributeType(toks[1])) == null)
@@ -179,16 +177,15 @@
                     if(numLevels < MAX_LEVELS) {
                         levels[numLevels++]=Integer.decode(v);
                     } else {
-                        int msgID =
-                      MSGID_ACI_SYNTAX_MAX_USERATTR_INHERITANCE_LEVEL_EXCEEDED;
-                        String message = getMessage(msgID, pattern,
-                                               Integer.toString(MAX_LEVELS));
-                        throw new AciException(msgID, message);
+                        Message message =
+                        WARN_ACI_SYNTAX_MAX_USERATTR_INHERITANCE_LEVEL_EXCEEDED.
+                              get(pattern, Integer.toString(MAX_LEVELS));
+                        throw new AciException(message);
                     }
                 } catch (NumberFormatException ex) {
-                    int msgID = MSGID_ACI_SYNTAX_INVALID_INHERITANCE_VALUE;
-                    String message = getMessage(msgID, pattern);
-                    throw new AciException(msgID, message);
+                    Message message =
+                        WARN_ACI_SYNTAX_INVALID_INHERITANCE_VALUE.get(pattern);
+                    throw new AciException(message);
                 }
             }
         } else {
@@ -198,21 +195,21 @@
               LDAPURL url=LDAPURL.decode(pattern, true);
               LinkedHashSet<String>attrs=url.getAttributes();
               if(attrs.size() != 1) {
-                int msgID = MSGID_ACI_SYNTAX_INVALID_USERATTR_ATTR_URL;
-                String message = getMessage(msgID, pattern);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_USERATTR_ATTR_URL.get(pattern);
+                throw new AciException(message);
               }
               baseDN=url.getBaseDN();
               if(baseDN.isNullDN()){
-                int msgID = MSGID_ACI_SYNTAX_INVALID_USERATTR_BASEDN_URL;
-                String message = getMessage(msgID, pattern);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_USERATTR_BASEDN_URL.get(pattern);
+                throw new AciException(message);
               }
               attrTypeStr=attrs.iterator().next();
             } catch (DirectoryException ex) {
-              int msgID = MSGID_ACI_SYNTAX_INVALID_USERATTR_URL;
-              String message = getMessage(msgID, ex.getErrorMessage());
-              throw new AciException(msgID, message);
+              Message message = WARN_ACI_SYNTAX_INVALID_USERATTR_URL.get(
+                  ex.getMessageObject());
+              throw new AciException(message);
             }
           }
           if((this.attributeType =
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternDN.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternDN.java
index c0af4c3..b91d5aa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternDN.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternDN.java
@@ -26,11 +26,11 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
 import org.opends.server.types.*;
-import static org.opends.server.messages.SchemaMessages.*;
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.SchemaMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import static org.opends.server.util.StaticUtils.isDigit;
 import static org.opends.server.util.StaticUtils.isHexDigit;
@@ -427,11 +427,10 @@
       }
       else
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_NO_EQUAL;
-        String message = getMessage(msgID, dnString,
-                                    attributeName.toString(), c);
+        Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(
+            dnString, attributeName.toString(), c);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
       // Skip over any spaces after the equal sign.
@@ -494,10 +493,9 @@
       {
         // This should not happen.  At any rate, it's an illegal
         // character, so throw an exception.
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_CHAR;
-        String message = getMessage(msgID, dnString, c, pos);
+        Message message = ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(dnString, c, pos);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -524,11 +522,10 @@
         // because that would be invalid.
         if (pos >= length)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME;
-          String message = getMessage(msgID, dnString,
-                                      attributeName.toString());
+          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+              dnString, attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -545,10 +542,10 @@
             // This means that we hit the end of the value before
             // finding a '='.  This is illegal because there is no
             // attribute-value separator.
-            int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME;
-            String message = getMessage(msgID, dnString, name);
+            Message message =
+                ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(dnString, name);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -565,10 +562,9 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_NO_EQUAL;
-          String message = getMessage(msgID, dnString, name, c);
+          Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(dnString, name, c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -634,10 +630,10 @@
         {
           // This should not happen.  At any rate, it's an illegal
           // character, so throw an exception.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_CHAR;
-          String message = getMessage(msgID, dnString, c, pos);
+          Message message =
+              ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
@@ -729,10 +725,9 @@
           // 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.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_COMMA;
-          String message = getMessage(msgID, dnString);
+          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_COMMA.get(dnString);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
@@ -765,10 +760,10 @@
         case ')':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          String message = getMessage(msgID, dnString, c, pos);
+          Message message =
+              ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case '*':
@@ -779,10 +774,10 @@
         case '+':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message =
+              ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case ',':
@@ -799,10 +794,10 @@
           }
           else
           {
-            msgID = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DASH;
-            message = getMessage(msgID, dnString, c);
+            message =
+                ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DASH.get(dnString);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           break;
 
@@ -819,10 +814,10 @@
         case '/':
           // This is not allowed in an attribute name or any character
           // immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message =
+              ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case '0':
@@ -847,10 +842,10 @@
         case ':':
           // Not allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message =
+              ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case ';': // NOTE:  attribute options are not allowed in a DN.
@@ -861,10 +856,10 @@
         case '<':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message =
+              ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case '=':
@@ -878,10 +873,10 @@
         case '@':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message =
+              ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case 'A':
@@ -921,10 +916,10 @@
         case '^':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message =
+              ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case '_':
@@ -935,10 +930,10 @@
         case '`':
           // This is not allowed in an attribute name or any character
           // immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message =
+              ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case 'a':
@@ -975,10 +970,10 @@
         default:
           // This is not allowed in an attribute name or any character
           // immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message =
+              ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
       }
 
 
@@ -997,10 +992,9 @@
     // have at least one character.
     if (attributeName.length() == 0)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_NO_NAME;
-      String message = getMessage(msgID, dnString);
+      Message message = ERR_ATTR_SYNTAX_DN_ATTR_NO_NAME.get(dnString);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
     else if (checkForOID)
     {
@@ -1073,11 +1067,10 @@
 
       if (! validOID)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD;
-        String message = getMessage(msgID, dnString,
-                                    attributeName.toString());
+        Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD.get(
+            dnString, attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -1128,10 +1121,9 @@
       StringBuilder hexString = new StringBuilder();
       if ((pos+2) > length)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT;
-        String message = getMessage(msgID, dnString);
+        Message message = ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(dnString);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
       for (int i=0; i < 2; i++)
@@ -1143,10 +1135,10 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT;
-          String message = getMessage(msgID, dnString, c);
+          Message message =
+              ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(dnString, c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
 
@@ -1170,19 +1162,18 @@
             }
             else
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT;
-              String message = getMessage(msgID, dnString, c);
+              Message message =
+                  ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(dnString, c);
               throw new DirectoryException(
-                             ResultCode.INVALID_DN_SYNTAX, message,
-                             msgID);
+                             ResultCode.INVALID_DN_SYNTAX, message);
             }
           }
           else
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT;
-            String message = getMessage(msgID, dnString);
+            Message message =
+                ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(dnString);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
         }
         else if ((c == ' ') || (c == ',') || (c == ';'))
@@ -1193,10 +1184,10 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT;
-          String message = getMessage(msgID, dnString, c);
+          Message message =
+              ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(dnString, c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
 
@@ -1217,11 +1208,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE;
-        String message = getMessage(msgID, dnString,
-                                    String.valueOf(e));
+        Message message = ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.get(
+            dnString, String.valueOf(e));
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -1240,10 +1230,9 @@
         {
           // We hit the end of the DN before the closing quote.
           // That's an error.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_UNMATCHED_QUOTE;
-          String message = getMessage(msgID, dnString);
+          Message message = ERR_ATTR_SYNTAX_DN_UNMATCHED_QUOTE.get(dnString);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         c = dnString.charAt(pos++);
@@ -1334,12 +1323,10 @@
             // value.
             if (pos >= length)
             {
-              int    msgID   =
-                   MSGID_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID;
-              String message = getMessage(msgID, dnString);
+              Message message =
+                  ERR_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID.get(dnString);
               throw new DirectoryException(
-                             ResultCode.INVALID_DN_SYNTAX, message,
-                             msgID);
+                             ResultCode.INVALID_DN_SYNTAX, message);
             }
             else
             {
@@ -1351,12 +1338,10 @@
               }
               else
               {
-                int    msgID   =
-                     MSGID_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID;
-                String message = getMessage(msgID, dnString);
+                Message message =
+                    ERR_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID.get(dnString);
                 throw new DirectoryException(
-                               ResultCode.INVALID_DN_SYNTAX, message,
-                               msgID);
+                               ResultCode.INVALID_DN_SYNTAX, message);
               }
             }
           }
@@ -1389,10 +1374,10 @@
           appendHexChars(dnString, valueString, hexChars);
           if (valueString.length() == 0)
           {
-            int    msgID   = MSGID_PATTERN_DN_CONSECUTIVE_WILDCARDS_IN_VALUE;
-            String message = getMessage(msgID, dnString);
+            Message message =
+                WARN_PATTERN_DN_CONSECUTIVE_WILDCARDS_IN_VALUE.get(dnString);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           attributeValues.add(new ASN1OctetString(valueString.toString()));
           valueString = new StringBuilder();
@@ -1467,10 +1452,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE;
-      String message = getMessage(msgID, dnString, String.valueOf(e));
+      Message message = ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.get(
+          dnString, String.valueOf(e));
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternIP.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternIP.java
index 031b5f0..6df6f6a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternIP.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternIP.java
@@ -27,9 +27,9 @@
 
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AccessControlMessages.*;
 import java.util.BitSet;
 import java.util.HashMap;
 import java.net.InetAddress;
@@ -240,22 +240,21 @@
         try {
             //Can only have one prefix value and one address string.
             if((numParts  < 1) || (numParts > 2) ) {
-                int msgID = MSGID_ACI_SYNTAX_INVALID_PREFIX_FORMAT;
-                String message = getMessage(msgID, expr);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_PREFIX_FORMAT.get(expr);
+                throw new AciException(message);
             }
             if(prefixStr != null)
                 prefix = Integer.parseInt(prefixStr);
             //Must be between 0 to maxprefix.
             if((prefix < 0) || (prefix > maxPrefix)) {
-                int msgID=MSGID_ACI_SYNTAX_INVALID_PREFIX_VALUE;
-                String message = getMessage(msgID, expr);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_PREFIX_VALUE.get(expr);
+                throw new AciException(message);
             }
         } catch(NumberFormatException nfex) {
-            int msgID=MSGID_ACI_SYNTAX_PREFIX_NOT_NUMERIC;
-            String msg = getMessage(msgID, expr);
-            throw new AciException(msgID,msg);
+            Message msg = WARN_ACI_SYNTAX_PREFIX_NOT_NUMERIC.get(expr);
+            throw new AciException(msg);
         }
         return prefix;
     }
@@ -305,15 +304,13 @@
         //Look up the string in the valid netmask hash table. If it isn't
         //there it is an error.
         if(!validNetMasks.containsKey(netmaskStr)) {
-            int id=MSGID_ACI_SYNTAX_INVALID_NETMASK;
-            String message = getMessage(id, expr);
-            throw new AciException(id, message);
+            Message 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) ) {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_NETMASK_FORMAT;
-            String message = getMessage(msgID, expr);
-            throw new AciException(msgID, message);
+            Message message = WARN_ACI_SYNTAX_INVALID_NETMASK_FORMAT.get(expr);
+            throw new AciException(message);
         }
         String[] s = netmaskStr.split("\\.", -1);
         try {
@@ -323,9 +320,8 @@
                 netmaskBytes[i] = (byte) (val & 0xff);
             }
         } catch (NumberFormatException nfex) {
-            int id=MSGID_ACI_SYNTAX_IPV4_NOT_NUMERIC;
-            String message = getMessage(id, expr);
-            throw new AciException(id, message);
+            Message message = WARN_ACI_SYNTAX_IPV4_NOT_NUMERIC.get(expr);
+            throw new AciException(message);
         }
         return netmaskBytes;
     }
@@ -352,9 +348,8 @@
         String[] s = addrStr.split("\\.", -1);
         try {
             if(s.length != IN4ADDRSZ) {
-                int id=MSGID_ACI_SYNTAX_INVALID_IPV4_FORMAT;
-                String message = getMessage(id, expr);
-                throw new AciException(id, message);
+                Message message = WARN_ACI_SYNTAX_INVALID_IPV4_FORMAT.get(expr);
+                throw new AciException(message);
             }
             for(int i=0; i < IN4ADDRSZ; i++) {
                 String quad=s[i].trim();
@@ -364,17 +359,16 @@
                     long val=Integer.parseInt(quad);
                     //must be between 0-255
                     if((val < 0) ||  (val > 0xff)) {
-                        int id=MSGID_ACI_SYNTAX_INVALID_IPV4_VALUE;
-                        String message = getMessage(id, expr);
-                        throw new AciException(id, message);
+                        Message message =
+                            WARN_ACI_SYNTAX_INVALID_IPV4_VALUE.get(expr);
+                        throw new AciException(message);
                     }
                     addrBytes[i] = (byte) (val & 0xff);
                 }
             }
         } catch (NumberFormatException nfex) {
-            int id=MSGID_ACI_SYNTAX_IPV4_NOT_NUMERIC;
-            String message = getMessage(id, expr);
-            throw new AciException(id, message);
+            Message message = WARN_ACI_SYNTAX_IPV4_NOT_NUMERIC.get(expr);
+            throw new AciException(message);
         }
         return addrBytes;
     }
@@ -394,17 +388,16 @@
     private static byte[]
     procIPv6Addr(String addrStr, String expr) throws AciException {
         if(addrStr.indexOf('*') > -1) {
-            int msgID=MSGID_ACI_SYNTAX_IPV6_WILDCARD_INVALID;
-            String message = getMessage(msgID, expr);
-            throw new AciException(msgID, message);
+            Message message = WARN_ACI_SYNTAX_IPV6_WILDCARD_INVALID.get(expr);
+            throw new AciException(message);
         }
         byte[] addrBytes;
         try {
             addrBytes=InetAddress.getByName(addrStr).getAddress();
         } catch (UnknownHostException ex) {
-            int id=MSGID_ACI_SYNTAX_INVALID_IPV6_FORMAT;
-            String message = getMessage(id, expr, ex.getMessage());
-            throw new AciException(id, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_IPV6_FORMAT.get(expr, ex.getMessage());
+            throw new AciException(message);
         }
         return addrBytes;
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternRDN.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternRDN.java
index d7805e1..887ebb4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternRDN.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/PatternRDN.java
@@ -26,16 +26,15 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
 import org.opends.server.types.*;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.api.EqualityMatchingRule;
-import static org.opends.server.messages.AciMessages.
-     MSGID_PATTERN_DN_TYPE_CONTAINS_SUBSTRINGS;
-import static org.opends.server.messages.AciMessages.
-     MSGID_PATTERN_DN_TYPE_WILDCARD_IN_MULTIVALUED_RDN;
-import static org.opends.server.messages.MessageHandler.getMessage;
-
+import static org.opends.messages.AccessControlMessages.
+     WARN_PATTERN_DN_TYPE_CONTAINS_SUBSTRINGS;
+import static org.opends.messages.AccessControlMessages.
+     WARN_PATTERN_DN_TYPE_WILDCARD_IN_MULTIVALUED_RDN;
 import java.util.List;
 import java.util.LinkedHashSet;
 import java.util.ArrayList;
@@ -96,10 +95,10 @@
     {
       if (!type.equals("*"))
       {
-        int    msgID   = MSGID_PATTERN_DN_TYPE_CONTAINS_SUBSTRINGS;
-        String message = getMessage(msgID, dnString);
+        Message message =
+            WARN_PATTERN_DN_TYPE_CONTAINS_SUBSTRINGS.get(dnString);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
       hasTypeWildcard = true;
     }
@@ -128,10 +127,10 @@
     // No type wildcards permitted in multi-valued patterns.
     if (hasTypeWildcard || type.contains("*"))
     {
-      int    msgID   = MSGID_PATTERN_DN_TYPE_WILDCARD_IN_MULTIVALUED_RDN;
-      String message = getMessage(msgID, dnString);
+      Message message =
+          WARN_PATTERN_DN_TYPE_WILDCARD_IN_MULTIVALUED_RDN.get(dnString);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
 
     numValues++;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Permission.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Permission.java
index 6cf9313..854ece7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Permission.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Permission.java
@@ -26,9 +26,9 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
 import java.util.regex.Pattern;
 
@@ -74,14 +74,13 @@
     throws AciException {
         if ((this.accessType =
             EnumAccessType.decode(accessType)) == null){
-            int msgID = MSGID_ACI_SYNTAX_INVALID_ACCESS_TYPE_VERSION;
-            String message = getMessage(msgID, accessType);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_ACCESS_TYPE_VERSION.get(accessType);
+            throw new AciException(message);
         }
         if (!Pattern.matches(rightsRegex, rights)){
-            int msgID = MSGID_ACI_SYNTAX_INVALID_RIGHTS_SYNTAX;
-            String message = getMessage(msgID, rights);
-            throw new AciException(msgID, message);
+            Message message = WARN_ACI_SYNTAX_INVALID_RIGHTS_SYNTAX.get(rights);
+            throw new AciException(message);
         }
         else {
             Pattern separatorPattern = Pattern.compile(separatorToken);
@@ -92,9 +91,9 @@
                 if (right != null)
                     this.rights|= EnumRight.getMask(right);
                 else {
-                    int msgID = MSGID_ACI_SYNTAX_INVALID_RIGHTS_KEYWORD;
-                    String message = getMessage(msgID, rights);
-                    throw new AciException(msgID, message);
+                    Message message =
+                        WARN_ACI_SYNTAX_INVALID_RIGHTS_KEYWORD.get(rights);
+                    throw new AciException(message);
                 }
             }
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilterList.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilterList.java
index 6a7d5e4..fd3006a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilterList.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilterList.java
@@ -26,15 +26,14 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.SearchFilter;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.core.DirectoryServer;
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
 import java.util.LinkedHashMap;
@@ -119,10 +118,10 @@
             Matcher matcher=pattern.matcher(subs);
             //Match the attribute:filter pair part of the expression
             if(!matcher.find() || matcher.groupCount() != expectedGroupCount) {
-                int msgID =
-                    MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LIST_FORMAT;
-                String message = getMessage(msgID, expression);
-                throw new AciException(msgID, message);
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LIST_FORMAT.
+                      get(expression);
+                throw new AciException(message);
             }
             String attributeName=matcher.group(attributePos).toLowerCase();
             //Strip off any options, so it will match the filter option
@@ -142,11 +141,11 @@
                filter = SearchFilter.createFilterFromString(filterString);
                attrFilterList.put(attributeType, filter);
             } catch (DirectoryException ex) {
-                String er=ex.getErrorMessage();
-                int msgID =
-                   MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_FILTER;
-                String message = getMessage(msgID, filterString, er);
-                throw new AciException(msgID, message);
+                Message er=ex.getMessageObject();
+                Message message =
+                    WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_FILTER.
+                      get(filterString, er);
+                throw new AciException(message);
             }
             //Verify the filter components. This check assures that each
             //attribute type in the filter matches the provided attribute
@@ -183,10 +182,10 @@
             default: {
                 AttributeType attrType=filter.getAttributeType();
                 if(!attrType.equals(type)) {
-                    int msgID =
-              MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_ATTR_FILTER;
-                    String message = getMessage(msgID, filter.toString());
-                    throw new AciException(msgID, message);
+                    Message message =
+               WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_ATTR_FILTER.
+                          get(filter.toString());
+                    throw new AciException(message);
                 }
             }
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java
index b2f02c6..d9d5d81 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java
@@ -26,10 +26,10 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import org.opends.server.types.*;
 import java.util.regex.Pattern;
 import java.util.regex.Matcher;
@@ -148,9 +148,10 @@
         Matcher matcher = fullPattern.matcher(expression);
         //First match for overall correctness and to get the first operation.
         if(!matcher.find()) {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION;
-            String message = getMessage(msgID, expression);
-            throw new AciException(msgID, message);
+            Message message =
+              WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION.
+                  get(expression);
+            throw new AciException(message);
         }
         String firstOp=matcher.group(firstOpPos);
         String subExpression=matcher.group(restOfExpressionPos);
@@ -171,10 +172,9 @@
          * This is invalid.
          */
         if(temp.length > 1) {
-            int msgID =
-                    MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_OPS_MATCH;
-            String message = getMessage(msgID, expression);
-            throw new AciException(msgID, message);
+            Message message = WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_OPS_MATCH.
+                get(expression);
+            throw new AciException(message);
         }
         /**
          * Check that there are not too many filter lists. There can only
@@ -183,18 +183,19 @@
         String[] filterLists=
                 subExpression.split(secondOp, -1);
         if(filterLists.length > 2) {
-          int msgID =
-                  MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_MAX_FILTER_LISTS;
-          String message = getMessage(msgID, expression);
-          throw new AciException(msgID, message);
+          Message message =
+              WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_MAX_FILTER_LISTS.
+                get(expression);
+          throw new AciException(message);
         } else if (filterLists.length == 1) {
           //Check if the there is something like ") , deel=". A bad token
           //that the regular expression didn't pick up.
           String [] filterList2=subExpression.split(secondOpSeparator);
           if(filterList2.length == 2) {
-              int msgID = MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION;
-              String message = getMessage(msgID, expression);
-              throw new AciException(msgID, message);
+              Message message =
+                  WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION.
+                    get(expression);
+              throw new AciException(message);
           }
           String sOp="del";
           if(getMask(firstOp) == TARGATTRFILTERS_DELETE)
@@ -203,17 +204,19 @@
           //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) {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION;
-            String message = getMessage(msgID, expression);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION.
+                  get(expression);
+            throw new AciException(message);
           }
         }
         filterLists[0]=filterLists[0].trim();
         //First filter list must end in an ')' character.
         if(!filterLists[0].endsWith(")")) {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION;
-            String message = getMessage(msgID, expression);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION.
+                  get(expression);
+            throw new AciException(message);
         }
         TargAttrFilterList firstFilterList =
                 TargAttrFilterList.decode(getMask(firstOp), filterLists[0]);
@@ -223,9 +226,10 @@
             String filterList=filterLists[1].trim();
             //Second filter list must start with a '='.
             if(!filterList.startsWith("=")) {
-              int msgID = MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION;
-              String message = getMessage(msgID, expression);
-              throw new AciException(msgID, message);
+              Message message =
+                  WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION.
+                    get(expression);
+              throw new AciException(message);
             }
             String temp2= filterList.substring(1,filterList.length());
             //Assume the first op is an "add" so this has to be a "del".
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Target.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Target.java
index 660d26a..58de5bb 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Target.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/Target.java
@@ -26,10 +26,10 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import java.util.regex.Pattern;
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
@@ -84,9 +84,9 @@
           //The NULL_LDAP_URL corresponds to the root DSE.
           if((!target.equals(NULL_LDAP_URL)) &&
              (!Pattern.matches(LDAP_URL, target))) {
-              int msgID = MSGID_ACI_SYNTAX_INVALID_TARGETKEYWORD_EXPRESSION;
-              String message = getMessage(msgID, target);
-              throw new AciException(msgID, message);
+              Message message =
+                  WARN_ACI_SYNTAX_INVALID_TARGETKEYWORD_EXPRESSION.get(target);
+              throw new AciException(message);
           }
           LDAPURL targetURL =  LDAPURL.decode(target, false);
           if(targetURL.getRawBaseDN().indexOf("*") != -1) {
@@ -95,18 +95,17 @@
           } else {
               urlDN=targetURL.getBaseDN();
               if(!urlDN.isDescendantOf(aciDN)) {
-                  int msgID = MSGID_ACI_SYNTAX_TARGET_DN_NOT_DESCENDENTOF;
-                  String message = getMessage(msgID,
-                                              urlDN.toNormalizedString(),
-                                              aciDN.toNormalizedString());
-                  throw new AciException(msgID, message);
+                  Message message = WARN_ACI_SYNTAX_TARGET_DN_NOT_DESCENDENTOF.
+                      get(urlDN.toNormalizedString(),
+                          aciDN.toNormalizedString());
+                  throw new AciException(message);
               }
           }
         }
         catch (DirectoryException e){
-            int msgID = MSGID_ACI_SYNTAX_INVALID_TARGETKEYWORD_EXPRESSION;
-            String message = getMessage(msgID, target);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_TARGETKEYWORD_EXPRESSION.get(target);
+            throw new AciException(message);
         }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetAttr.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetAttr.java
index 81f2634..54c1dad 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetAttr.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetAttr.java
@@ -26,10 +26,10 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import java.util.HashSet;
 import java.util.regex.Pattern;
 import org.opends.server.core.DirectoryServer;
@@ -107,10 +107,10 @@
                         //after conversion to AttributeType.
                         arrayToAttributeTypes(attributeArray, attrString);
                     } else {
-                      int msgID =
-                         MSGID_ACI_SYNTAX_INVALID_TARGETATTRKEYWORD_EXPRESSION;
-                      String message = getMessage(msgID, attrString);
-                      throw new AciException(msgID, message);
+                      Message message =
+                          WARN_ACI_SYNTAX_INVALID_TARGETATTRKEYWORD_EXPRESSION.
+                            get(attrString);
+                      throw new AciException(message);
                     }
                 }
             }
@@ -137,17 +137,17 @@
                 if(!allUserAttributes)
                     allUserAttributes=true;
                 else {
-                    int msgID = MSGID_ACI_TARGETATTR_INVALID_ATTR_TOKEN;
-                    String message = getMessage(msgID, attrStr);
-                    throw new AciException(msgID, message);
+                    Message message =
+                        WARN_ACI_TARGETATTR_INVALID_ATTR_TOKEN.get(attrStr);
+                    throw new AciException(message);
                 }
             } else if(attribute.equals("+")) {
                 if(!allOpAttributes)
                     allOpAttributes=true;
                 else {
-                    int msgID = MSGID_ACI_TARGETATTR_INVALID_ATTR_TOKEN;
-                    String message = getMessage(msgID, attrStr);
-                    throw new AciException(msgID, message);
+                    Message message =
+                        WARN_ACI_TARGETATTR_INVALID_ATTR_TOKEN.get(attrStr);
+                    throw new AciException(message);
                 }
             } else {
                 AttributeType attributeType;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetControl.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetControl.java
index dbda4cd..066c51b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetControl.java
@@ -28,7 +28,7 @@
 
 package org.opends.server.authorization.dseecompat;
 
-import static org.opends.server.messages.AciMessages.*;
+import static org.opends.messages.AccessControlMessages.*;
 import java.util.HashSet;
 
 /**
@@ -73,7 +73,8 @@
   public static TargetControl decode(EnumTargetOperator operator, String expr)
           throws AciException {
     HashSet<String> controlOIDs =
-          Aci.decodeOID(expr,MSGID_ACI_SYNTAX_INVALID_TARGETCONTROL_EXPRESSION);
+          Aci.decodeOID(expr,
+                  WARN_ACI_SYNTAX_INVALID_TARGETCONTROL_EXPRESSION.get(expr));
     return new TargetControl(operator, controlOIDs);
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetFilter.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetFilter.java
index bfba484..c875d9f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetFilter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TargetFilter.java
@@ -26,9 +26,9 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AccessControlMessages.*;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.Entry;
 import org.opends.server.types.SearchFilter;
@@ -72,10 +72,10 @@
         try {
             filter = SearchFilter.createFilterFromString(expr);
         } catch (DirectoryException ex) {
-            int msgID =
-                MSGID_ACI_SYNTAX_INVALID_TARGETFILTERKEYWORD_EXPRESSION;
-            String message = getMessage(msgID, expr);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_TARGETFILTERKEYWORD_EXPRESSION.
+                  get(expr);
+            throw new AciException(message);
         }
         return new TargetFilter(op, filter);
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TimeOfDay.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TimeOfDay.java
index cc91b57..254c1bd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TimeOfDay.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/TimeOfDay.java
@@ -26,9 +26,9 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AccessControlMessages.*;
 import org.opends.server.util.TimeThread;
 import java.util.regex.Pattern;
 
@@ -73,16 +73,14 @@
     throws AciException  {
         if (!Pattern.matches(timeofdayRegex, expr))
         {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_TIMEOFDAY;
-            String message = getMessage(msgID,expr);
-            throw new AciException(msgID, message);
+            Message message = WARN_ACI_SYNTAX_INVALID_TIMEOFDAY.get(expr);
+            throw new AciException(message);
          }
         int valueAsInt = Integer.parseInt(expr);
         if ((valueAsInt < 0) || (valueAsInt > 2359))
         {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_TIMEOFDAY_RANGE;
-            String message = getMessage(msgID,expr);
-            throw new AciException(msgID, message);
+            Message message = WARN_ACI_SYNTAX_INVALID_TIMEOFDAY_RANGE.get(expr);
+            throw new AciException(message);
         }
 
         return new TimeOfDay(valueAsInt, type);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/UserAttr.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/UserAttr.java
index 5a10f8b..c4558bc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/UserAttr.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/UserAttr.java
@@ -26,9 +26,9 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.AccessControlMessages.*;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -144,9 +144,9 @@
     throws AciException {
         String[] vals=expression.split("#");
         if(vals.length != 2) {
-            int msgID = MSGID_ACI_SYNTAX_INVALID_USERATTR_EXPRESSION;
-            String message = getMessage(msgID, expression);
-            throw new AciException(msgID, message);
+            Message message =
+                WARN_ACI_SYNTAX_INVALID_USERATTR_EXPRESSION.get(expression);
+            throw new AciException(message);
         }
         UserAttrType userAttrType=getType(vals[1]);
         switch (userAttrType) {
@@ -159,9 +159,9 @@
                 case ROLEDN: {
                   //The roledn keyword is not supported. Throw an exception with
                   //a message if it is seen in the expression.
-                  int msgID=MSGID_ACI_SYNTAX_ROLEDN_NOT_SUPPORTED;
-                  String message = getMessage(msgID, expression);
-                  throw new AciException(msgID, message);
+                  Message message =
+                      WARN_ACI_SYNTAX_ROLEDN_NOT_SUPPORTED.get(expression);
+                  throw new AciException(message);
                 }
          }
          return new UserAttr(vals[0], vals[1], userAttrType, type);
@@ -247,18 +247,18 @@
         else if(expr.equalsIgnoreCase("groupdn")) {
              userAttrType=UserAttrType.GROUPDN;
       /*
-            int msgID = MSGID_ACI_SYNTAX_INVALID_USERATTR_KEYWORD;
-            String message = getMessage(msgID, "The groupdn userattr" +
+            Message message = WARN_ACI_SYNTAX_INVALID_USERATTR_KEYWORD.get(
+                "The groupdn userattr" +
                     "keyword is not supported.");
-            throw new AciException(msgID, message);
+            throw new AciException(message);
         */
         } else if(expr.equalsIgnoreCase("roledn")) {
             userAttrType=UserAttrType.ROLEDN;
             /*
-            int msgID = MSGID_ACI_SYNTAX_INVALID_USERATTR_KEYWORD;
-            String message = getMessage(msgID, "The roledn userattr" +
+            Message message = WARN_ACI_SYNTAX_INVALID_USERATTR_KEYWORD.get(
+                "The roledn userattr" +
                     "keyword is not supported.");
-            throw new AciException(msgID, message);
+            throw new AciException(message);
             */
         } else if(expr.equalsIgnoreCase("ldapurl"))
             userAttrType=UserAttrType.URL;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/UserDN.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/UserDN.java
index fd1161e..938d6c7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/UserDN.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/UserDN.java
@@ -26,10 +26,9 @@
  */
 
 package org.opends.server.authorization.dseecompat;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.AciMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-
+import static org.opends.messages.AccessControlMessages.*;
 import java.util.*;
 import org.opends.server.types.*;
 import org.opends.server.core.DirectoryServer;
@@ -99,9 +98,9 @@
             try {
                url=LDAPURL.decode(value.toString(), true);
             } catch (DirectoryException de) {
-                int msgID = MSGID_ACI_SYNTAX_INVALID_USERDN_URL;
-                String message = getMessage(msgID, de.getErrorMessage());
-                throw new AciException(msgID, message);
+                Message message = WARN_ACI_SYNTAX_INVALID_USERDN_URL.get(
+                    de.getMessageObject());
+                throw new AciException(message);
             }
             UserDNTypeURL dnTypeURL=new UserDNTypeURL(userDNType, url);
             urlList.add(dnTypeURL);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/BackupBackend.java b/opendj-sdk/opends/src/server/org/opends/server/backends/BackupBackend.java
index ba3b655..3993128 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/BackupBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/BackupBackend.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends;
+import org.opends.messages.Message;
 
 
 
@@ -67,8 +68,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.BackendMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.util.Validator;
@@ -139,9 +140,8 @@
     // not be able to complete initialization.
     if (config == null)
     {
-      int    msgID   = MSGID_BACKUP_CONFIG_ENTRY_NULL;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_BACKUP_CONFIG_ENTRY_NULL.get();
+      throw new ConfigException(message);
     }
 
 
@@ -169,9 +169,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN.get(getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
     // FIXME -- Deal with this more correctly.
@@ -242,10 +242,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_BACKEND_CANNOT_REGISTER_BASEDN;
-      String message = getMessage(msgID, backupBaseDN.toString(),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+          backupBaseDN.toString(), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
   }
 
@@ -361,10 +360,9 @@
     // If the requested entry was null, then throw an exception.
     if (entryDN == null)
     {
-      int    msgID   = MSGID_BACKUP_GET_ENTRY_NULL;
-      String message = getMessage(msgID);
+      Message message = ERR_BACKUP_GET_ENTRY_NULL.get();
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -382,9 +380,8 @@
     DN parentDN = entryDN.getParentDNInSuffix();
     if (parentDN == null)
     {
-      int    msgID   = MSGID_BACKUP_INVALID_BASE;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+      Message message = ERR_BACKUP_INVALID_BASE.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
     else if (parentDN.equals(backupBaseDN))
     {
@@ -396,10 +393,9 @@
     }
     else
     {
-      int    msgID   = MSGID_BACKUP_INVALID_BASE;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
-                                   backupBaseDN, null);
+      Message message = ERR_BACKUP_INVALID_BASE.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
+              message, backupBaseDN, null);
     }
   }
 
@@ -427,10 +423,10 @@
     AttributeValue v = entryDN.getRDN().getAttributeValue(t);
     if (v == null)
     {
-      int    msgID   = MSGID_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY;
-      String message = getMessage(msgID, String.valueOf(entryDN));
+      Message message =
+          ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY.get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID, backupBaseDN, null);
+                                   backupBaseDN, null);
     }
 
 
@@ -449,11 +445,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
 
-      int msgID = MSGID_BACKUP_INVALID_BACKUP_DIRECTORY;
-      String message = getMessage(msgID, String.valueOf(entryDN),
-                                  ce.getMessage());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_BACKUP_INVALID_BACKUP_DIRECTORY.get(
+          String.valueOf(entryDN), ce.getMessage());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
     catch (Exception e)
     {
@@ -462,10 +456,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_BACKUP_ERROR_GETTING_BACKUP_DIRECTORY;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message =
+          ERR_BACKUP_ERROR_GETTING_BACKUP_DIRECTORY.get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -529,10 +523,9 @@
     AttributeValue idValue = entryDN.getRDN().getAttributeValue(idType);
     if (idValue == null)
     {
-      int    msgID   = MSGID_BACKUP_NO_BACKUP_ID_IN_DN;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message =
+          ERR_BACKUP_NO_BACKUP_ID_IN_DN.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
     String backupID = idValue.getStringValue();
 
@@ -541,10 +534,9 @@
     DN parentDN = entryDN.getParentDNInSuffix();
     if (parentDN == null)
     {
-      int    msgID   = MSGID_BACKUP_NO_BACKUP_PARENT_DN;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message =
+          ERR_BACKUP_NO_BACKUP_PARENT_DN.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     AttributeType t =
@@ -552,10 +544,9 @@
     AttributeValue v = parentDN.getRDN().getAttributeValue(t);
     if (v == null)
     {
-      int    msgID   = MSGID_BACKUP_NO_BACKUP_DIR_IN_DN;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message =
+          ERR_BACKUP_NO_BACKUP_DIR_IN_DN.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
 
@@ -572,10 +563,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
 
-      int msgID = MSGID_BACKUP_INVALID_BACKUP_DIRECTORY;
-      String message = getMessage(msgID, ce.getMessage());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message =
+          ERR_BACKUP_INVALID_BACKUP_DIRECTORY.get(
+                  String.valueOf(entryDN), ce.getMessageObject());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
     catch (Exception e)
     {
@@ -584,19 +575,19 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_BACKUP_ERROR_GETTING_BACKUP_DIRECTORY;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message =
+          ERR_BACKUP_ERROR_GETTING_BACKUP_DIRECTORY.get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
     BackupInfo backupInfo = backupDirectory.getBackupInfo(backupID);
     if (backupInfo == null)
     {
-      int    msgID   = MSGID_BACKUP_NO_SUCH_BACKUP;
-      String message = getMessage(msgID, backupID, backupDirectory.getPath());
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
-                                   parentDN, null);
+      Message message =
+          ERR_BACKUP_NO_SUCH_BACKUP.get(backupID, backupDirectory.getPath());
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
+              message, parentDN, null);
     }
 
 
@@ -747,10 +738,8 @@
   public void addEntry(Entry entry, AddOperation addOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_BACKUP_ADD_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_BACKUP_ADD_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -772,10 +761,8 @@
   public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_BACKUP_DELETE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_BACKUP_DELETE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -797,10 +784,8 @@
   public void replaceEntry(Entry entry, ModifyOperation modifyOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_BACKUP_MODIFY_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_BACKUP_MODIFY_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -824,10 +809,8 @@
                                    ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_BACKUP_MODIFY_DN_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1007,9 +990,10 @@
       if ((parentDN == null)
           || (! backupBaseDN.equals(parentDN.getParentDNInSuffix())))
       {
-        int    msgID   = MSGID_BACKUP_NO_SUCH_ENTRY;
-        String message = getMessage(msgID);
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+        Message message = ERR_BACKUP_NO_SUCH_ENTRY.get(
+                String.valueOf(backupBaseDN)
+        );
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
 
       if ((scope == SearchScope.BASE_OBJECT) ||
@@ -1018,10 +1002,9 @@
         Entry backupEntry = getBackupEntry(baseDN);
         if (backupEntry == null)
         {
-          int    msgID   = MSGID_BACKUP_NO_SUCH_ENTRY;
-          String message = getMessage(msgID);
-          throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
-                                       msgID);
+          Message message = ERR_BACKUP_NO_SUCH_ENTRY.get(
+                  String.valueOf(backupBaseDN));
+          throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
         }
 
         if (filter.matchesEntry(backupEntry))
@@ -1079,10 +1062,8 @@
   public void exportLDIF(LDIFExportConfig exportConfig)
          throws DirectoryException
   {
-    int    msgID   = MSGID_BACKUP_EXPORT_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_BACKUP_EXPORT_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1109,10 +1090,8 @@
          throws DirectoryException
   {
     // This backend does not support LDIF imports.
-    int    msgID   = MSGID_BACKUP_IMPORT_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_BACKUP_IMPORT_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1167,10 +1146,8 @@
   throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    int    msgID   = MSGID_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1192,10 +1169,8 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    int    msgID   = MSGID_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1221,10 +1196,8 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    int    msgID   = MSGID_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1233,7 +1206,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-       BackupBackendCfg cfg, List<String> unacceptableReasons)
+       BackupBackendCfg cfg, List<Message> unacceptableReasons)
   {
     // We'll accept anything here.  The only configurable attribute is the
     // default set of backup directories, but that doesn't require any
@@ -1247,9 +1220,9 @@
    */
   public ConfigChangeResult applyConfigurationChange(BackupBackendCfg cfg)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     Set<String> values = cfg.getBackupDirectory();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/MemoryBackend.java b/opendj-sdk/opends/src/server/org/opends/server/backends/MemoryBackend.java
index 0b7aacb..3c3b4d6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/MemoryBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/MemoryBackend.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends;
+import org.opends.messages.Message;
 
 
 
@@ -63,8 +64,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.BackendMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.admin.std.server.BackendCfg;
@@ -181,9 +181,8 @@
     // map.
     if ((baseDNs == null) || (baseDNs.length != 1))
     {
-      int    msgID   = MSGID_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE.get();
+      throw new ConfigException(message);
     }
 
     baseDNSet = new HashSet<DN>();
@@ -213,10 +212,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_BACKEND_CANNOT_REGISTER_BASEDN;
-        String message = getMessage(msgID, dn.toString(),
-                                    getExceptionMessage(e));
-        throw new InitializationException(msgID, message, e);
+        Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+            dn.toString(), getExceptionMessage(e));
+        throw new InitializationException(message, e);
       }
     }
   }
@@ -333,10 +331,9 @@
     DN entryDN = e.getDN();
     if (entryMap.containsKey(entryDN))
     {
-      int    msgID   = MSGID_MEMORYBACKEND_ENTRY_ALREADY_EXISTS;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message,
-                                   msgID);
+      Message message =
+          ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message);
     }
 
 
@@ -352,16 +349,15 @@
     DN parentDN = entryDN.getParentDNInSuffix();
     if (parentDN == null)
     {
-      int    msgID   = MSGID_MEMORYBACKEND_ENTRY_DOESNT_BELONG;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+      Message message =
+          ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
     else if (! entryMap.containsKey(parentDN))
     {
-      int    msgID   = MSGID_MEMORYBACKEND_PARENT_DOESNT_EXIST;
-      String message = getMessage(msgID, String.valueOf(entryDN),
-                                  String.valueOf(parentDN));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+      Message message = ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST.get(
+          String.valueOf(entryDN), String.valueOf(parentDN));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
 
     entryMap.put(entryDN, e);
@@ -387,9 +383,9 @@
     // Make sure the entry exists.  If not, then throw an exception.
     if (! entryMap.containsKey(entryDN))
     {
-      int    msgID   = MSGID_MEMORYBACKEND_ENTRY_DOESNT_EXIST;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+      Message message =
+          ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
 
 
@@ -436,10 +432,10 @@
       // an exception.
       if ((children != null) && (! children.isEmpty()))
       {
-        int    msgID   = MSGID_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF, message,
-                                     msgID);
+        Message message = ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN.
+            get(String.valueOf(entryDN));
+        throw new DirectoryException(
+                ResultCode.NOT_ALLOWED_ON_NONLEAF, message);
       }
     }
 
@@ -479,9 +475,9 @@
     DN entryDN = e.getDN();
     if (! entryMap.containsKey(entryDN))
     {
-      int    msgID   = MSGID_MEMORYBACKEND_ENTRY_DOESNT_EXIST;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+      Message message =
+          ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
 
 
@@ -503,9 +499,9 @@
     // Make sure that the target entry exists.
     if (! entryMap.containsKey(currentDN))
     {
-      int    msgID   = MSGID_MEMORYBACKEND_ENTRY_DOESNT_EXIST;
-      String message = getMessage(msgID, String.valueOf(currentDN));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+      Message message =
+          ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String.valueOf(currentDN));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
 
 
@@ -519,10 +515,10 @@
       }
       else
       {
-        int    msgID   = MSGID_MEMORYBACKEND_CANNOT_RENAME_ENRY_WITH_CHILDREN;
-        String message = getMessage(msgID, String.valueOf(currentDN));
-        throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF, message,
-                                     msgID);
+        Message message = ERR_MEMORYBACKEND_CANNOT_RENAME_ENRY_WITH_CHILDREN.
+            get(String.valueOf(currentDN));
+        throw new DirectoryException(
+                ResultCode.NOT_ALLOWED_ON_NONLEAF, message);
       }
     }
 
@@ -530,9 +526,9 @@
     // Make sure that no entry exists with the new DN.
     if (entryMap.containsKey(e.getDN()))
     {
-      int    msgID   = MSGID_MEMORYBACKEND_ENTRY_ALREADY_EXISTS;
-      String message = getMessage(msgID, String.valueOf(e.getDN()));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+      Message message =
+          ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS.get(String.valueOf(e.getDN()));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
 
 
@@ -549,10 +545,9 @@
 
     if (! matchFound)
     {
-      int    msgID   = MSGID_MEMORYBACKEND_CANNOT_RENAME_TO_ANOTHER_BACKEND;
-      String message = getMessage(msgID, String.valueOf(currentDN));
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_MEMORYBACKEND_CANNOT_RENAME_TO_ANOTHER_BACKEND.get(
+          String.valueOf(currentDN));
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -560,11 +555,9 @@
     DN parentDN = e.getDN().getParentDNInSuffix();
     if ((parentDN == null) || (! entryMap.containsKey(parentDN)))
     {
-      int    msgID   = MSGID_MEMORYBACKEND_RENAME_PARENT_DOESNT_EXIST;
-      String message = getMessage(msgID, String.valueOf(currentDN),
-                                  String.valueOf(parentDN));
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_MEMORYBACKEND_RENAME_PARENT_DOESNT_EXIST.get(
+          String.valueOf(currentDN), String.valueOf(parentDN));
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -602,10 +595,10 @@
         matchedDN = matchedDN.getParentDNInSuffix();
       }
 
-      int    msgID   = MSGID_MEMORYBACKEND_ENTRY_DOESNT_EXIST;
-      String message = getMessage(msgID, String.valueOf(baseDN));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
-                                   matchedDN, null);
+      Message message =
+          ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String.valueOf(baseDN));
+      throw new DirectoryException(
+              ResultCode.NO_SUCH_OBJECT, message, matchedDN, null);
     }
 
     if (baseEntry != null)
@@ -688,10 +681,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message =
+          ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -707,11 +700,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF;
-      String message = getMessage(msgID, String.valueOf(entryDN),
-                                  String.valueOf(e));
+      Message message = ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF.get(
+          String.valueOf(entryDN), String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -756,10 +748,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MEMORYBACKEND_CANNOT_CREATE_LDIF_READER;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message =
+          ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_READER.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -780,11 +772,11 @@
         {
           if (! le.canContinueReading())
           {
-            int    msgID   = MSGID_MEMORYBACKEND_ERROR_READING_LDIF;
-            String message = getMessage(msgID, String.valueOf(e));
+            Message message =
+                ERR_MEMORYBACKEND_ERROR_READING_LDIF.get(String.valueOf(e));
             throw new DirectoryException(
                            DirectoryServer.getServerErrorResultCode(),
-                           message, msgID, le);
+                           message, le);
           }
           else
           {
@@ -798,7 +790,7 @@
         }
         catch (DirectoryException de)
         {
-          reader.rejectLastEntry(de.getErrorMessage());
+          reader.rejectLastEntry(de.getMessageObject());
         }
       }
 
@@ -812,10 +804,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MEMORYBACKEND_ERROR_DURING_IMPORT;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message =
+          ERR_MEMORYBACKEND_ERROR_DURING_IMPORT.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -854,10 +846,8 @@
   public void createBackup(BackupConfig backupConfig)
          throws DirectoryException
   {
-    int    msgID   = MSGID_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -869,10 +859,8 @@
                            String backupID)
          throws DirectoryException
   {
-    int    msgID   = MSGID_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -894,10 +882,8 @@
   public void restoreBackup(RestoreConfig restoreConfig)
          throws DirectoryException
   {
-    int    msgID   = MSGID_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/MonitorBackend.java b/opendj-sdk/opends/src/server/org/opends/server/backends/MonitorBackend.java
index 983d215..5d00097 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/MonitorBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/MonitorBackend.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends;
+import org.opends.messages.Message;
 
 
 
@@ -75,9 +76,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ConfigMessages.*;
+import static org.opends.messages.BackendMessages.*;
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -157,9 +157,8 @@
     // not be able to complete initialization.
     if (configEntry == null)
     {
-      int    msgID   = MSGID_MONITOR_CONFIG_ENTRY_NULL;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_MONITOR_CONFIG_ENTRY_NULL.get();
+      throw new ConfigException(message);
     }
 
     configEntryDN = configEntry.getDN();
@@ -220,9 +219,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ConfigException(msgID, message, e);
+      Message message =
+          ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN.get(getExceptionMessage(e));
+      throw new ConfigException(message, e);
     }
 
     // FIXME -- Deal with this more correctly.
@@ -254,10 +253,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_BACKEND_CANNOT_REGISTER_BASEDN;
-      String message = getMessage(msgID, baseMonitorDN.toString(),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+          baseMonitorDN.toString(), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
   }
 
@@ -376,10 +374,9 @@
     // If the requested entry was null, then throw an exception.
     if (entryDN == null)
     {
-      int    msgID   = MSGID_MONITOR_GET_ENTRY_NULL;
-      String message = getMessage(msgID);
+      Message message = ERR_MONITOR_GET_ENTRY_NULL.get();
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -397,18 +394,16 @@
     {
       if (baseMonitorDN.isAncestorOf(entryDN))
       {
-        int    msgID   = MSGID_MONITOR_BASE_TOO_DEEP;
-        String message = getMessage(msgID, String.valueOf(entryDN),
-                                    String.valueOf(baseMonitorDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
-                                     baseMonitorDN, null);
+        Message message = ERR_MONITOR_BASE_TOO_DEEP.get(
+            String.valueOf(entryDN), String.valueOf(baseMonitorDN));
+        throw new DirectoryException(
+                ResultCode.NO_SUCH_OBJECT, message, baseMonitorDN, null);
       }
       else
       {
-        int    msgID   = MSGID_MONITOR_INVALID_BASE;
-        String message = getMessage(msgID, String.valueOf(entryDN),
-                                    String.valueOf(baseMonitorDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+        Message message = ERR_MONITOR_INVALID_BASE.get(
+            String.valueOf(entryDN), String.valueOf(baseMonitorDN));
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
     }
 
@@ -417,10 +412,10 @@
     RDN entryRDN = entryDN.getRDN();
     if (entryRDN.isMultiValued())
     {
-      int msgID = MSGID_MONITOR_MULTIVALUED_RDN;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
-                                   baseMonitorDN, null);
+      Message message =
+          ERR_MONITOR_MULTIVALUED_RDN.get(String.valueOf(entryDN));
+      throw new DirectoryException(
+              ResultCode.NO_SUCH_OBJECT, message, baseMonitorDN, null);
     }
 
 
@@ -431,10 +426,10 @@
          DirectoryServer.getMonitorProvider(rdnValue.toLowerCase());
     if (monitorProvider == null)
     {
-      int    msgID   = MSGID_MONITOR_NO_SUCH_PROVIDER;
-      String message = getMessage(msgID, String.valueOf(rdnValue));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
-                                   baseMonitorDN, null);
+      Message message =
+          ERR_MONITOR_NO_SUCH_PROVIDER.get(String.valueOf(rdnValue));
+      throw new DirectoryException(
+              ResultCode.NO_SUCH_OBJECT, message, baseMonitorDN, null);
     }
 
 
@@ -571,10 +566,10 @@
     upSeconds %= 3600;
     long upMinutes = (upSeconds / 60);
     upSeconds %= 60;
-    String upTimeStr = getMessage(MSGID_MONITOR_UPTIME, upDays, upHours,
-                                  upMinutes, upSeconds);
+    Message upTimeStr =
+        INFO_MONITOR_UPTIME.get(upDays, upHours, upMinutes, upSeconds);
     Attribute upTimeAttr = createAttribute(ATTR_UP_TIME, ATTR_UP_TIME_LC,
-                                           upTimeStr);
+                                           upTimeStr.toString());
     ArrayList<Attribute> upTimeList = new ArrayList<Attribute>(1);
     upTimeList.add(upTimeAttr);
     monitorUserAttrs.put(upTimeAttr.getAttributeType(), upTimeList);
@@ -769,10 +764,9 @@
   public void addEntry(Entry entry, AddOperation addOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_MONITOR_ADD_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(entry.getDN()));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_MONITOR_ADD_NOT_SUPPORTED.get(String.valueOf(entry.getDN()));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -794,10 +788,9 @@
   public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_MONITOR_DELETE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(entryDN));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_MONITOR_DELETE_NOT_SUPPORTED.get(String.valueOf(entryDN));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -819,11 +812,9 @@
   public void replaceEntry(Entry entry, ModifyOperation modifyOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_MONITOR_MODIFY_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(entry.getDN()),
-                                String.valueOf(configEntryDN));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_MONITOR_MODIFY_NOT_SUPPORTED.get(
+        String.valueOf(entry.getDN()), String.valueOf(configEntryDN));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -847,10 +838,9 @@
                                    ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_MONITOR_MODIFY_DN_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(currentDN));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED.get(String.valueOf(currentDN));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -991,10 +981,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
+      Message message = ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER.get(
+          stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -1022,10 +1012,10 @@
         }
       }
 
-      int    msgID   = MSGID_MONITOR_UNABLE_TO_EXPORT_BASE;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
+      Message message = ERR_MONITOR_UNABLE_TO_EXPORT_BASE.get(
+          stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -1057,12 +1047,11 @@
           }
         }
 
-        int    msgID   = MSGID_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY;
-        String message = getMessage(msgID,
-                                    monitorProvider.getMonitorInstanceName(),
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY.
+            get(monitorProvider.getMonitorInstanceName(),
+                stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -1105,10 +1094,8 @@
          throws DirectoryException
   {
     // This backend does not support LDIF imports.
-    int    msgID   = MSGID_MONITOR_IMPORT_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_MONITOR_IMPORT_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1163,10 +1150,8 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    int    msgID   = MSGID_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1188,10 +1173,8 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    int    msgID   = MSGID_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1217,10 +1200,8 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    int    msgID   = MSGID_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1241,7 +1222,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
        BackendCfg backendCfg,
-       List<String> unacceptableReasons)
+       List<Message> unacceptableReasons)
   {
     // We'll pretty much accept anything here as long as it isn't one of our
     // private attributes.
@@ -1257,7 +1238,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Check to see if there is a new set of user-defined attributes.
@@ -1295,17 +1276,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY;
-      messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                              stackTraceToSingleLineString(e)));
+
+      messages.add(ERR_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY.get(
+              String.valueOf(configEntryDN),
+              stackTraceToSingleLineString(e)));
       resultCode = DirectoryServer.getServerErrorResultCode();
     }
 
 
     userDefinedAttributes = userAttrs;
 
-    int    msgID   = MSGID_MONITOR_USING_NEW_USER_ATTRS;
-    String message = getMessage(msgID);
+    Message message = INFO_MONITOR_USING_NEW_USER_ATTRS.get();
     messages.add(message);
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/RootDSEBackend.java b/opendj-sdk/opends/src/server/org/opends/server/backends/RootDSEBackend.java
index 73f50dc..8ee8b94 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/RootDSEBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/RootDSEBackend.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends;
+import org.opends.messages.Message;
 
 
 
@@ -65,8 +66,6 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LDIFExportConfig;
 import org.opends.server.types.LDIFImportConfig;
@@ -79,12 +78,12 @@
 import org.opends.server.util.Validator;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ConfigMessages.
-     MSGID_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY;
+import static org.opends.messages.BackendMessages.*;
+import static org.opends.messages.ConfigMessages.
+     ERR_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY;
+
+import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -187,9 +186,8 @@
     // not be able to complete initialization.
     if (configEntry == null)
     {
-      int    msgID   = MSGID_ROOTDSE_CONFIG_ENTRY_NULL;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_ROOTDSE_CONFIG_ENTRY_NULL.get();
+      throw new ConfigException(message);
     }
 
     // Get the set of user-defined attributes for the configuration entry.  Any
@@ -245,10 +243,9 @@
           Backend backend = DirectoryServer.getBackend(baseDN);
           if (backend == null)
           {
-            int msgID = MSGID_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE;
-            String message = getMessage(msgID, String.valueOf(baseDN));
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            Message message = WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE.get(
+                String.valueOf(baseDN));
+            logError(message);
           }
           else
           {
@@ -264,9 +261,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ROOTDSE_SUBORDINATE_BASE_EXCEPTION;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION.get(
+          stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -429,10 +426,9 @@
 
     // 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.
-    int    msgID   = MSGID_ROOTDSE_GET_ENTRY_NONROOT;
-    String message = getMessage(msgID, String.valueOf(entryDN));
-    logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.MILD_WARNING,
-             message, msgID);
+    Message message =
+        WARN_ROOTDSE_GET_ENTRY_NONROOT.get(String.valueOf(entryDN));
+    logError(message);
 
 
     // Go ahead and check the subordinate backends to see if we can find the
@@ -855,10 +851,9 @@
   public void addEntry(Entry entry, AddOperation addOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_ROOTDSE_ADD_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(entry.getDN()));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_ROOTDSE_ADD_NOT_SUPPORTED.get(String.valueOf(entry.getDN()));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -880,10 +875,9 @@
   public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_ROOTDSE_DELETE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(entryDN));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_ROOTDSE_DELETE_NOT_SUPPORTED.get(String.valueOf(entryDN));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -905,11 +899,9 @@
   public void replaceEntry(Entry entry, ModifyOperation modifyOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_ROOTDSE_MODIFY_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(entry.getDN()),
-                                String.valueOf(configEntryDN));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_ROOTDSE_MODIFY_NOT_SUPPORTED.get(
+        String.valueOf(entry.getDN()), String.valueOf(configEntryDN));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -933,10 +925,9 @@
                                    ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_ROOTDSE_MODIFY_DN_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(currentDN));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED.get(String.valueOf(currentDN));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -961,12 +952,10 @@
     DN baseDN = searchOperation.getBaseDN();
     if (! baseDN.isNullDN())
     {
-      int    msgID   = MSGID_ROOTDSE_INVALID_SEARCH_BASE;
-      String message = getMessage(msgID, searchOperation.getConnectionID(),
-                                  searchOperation.getOperationID(),
-                                  String.valueOf(baseDN));
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_ROOTDSE_INVALID_SEARCH_BASE.
+          get(searchOperation.getConnectionID(),
+              searchOperation.getOperationID(), String.valueOf(baseDN));
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -1067,13 +1056,13 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_ROOTDSE_UNEXPECTED_SEARCH_FAILURE;
-          String message = getMessage(msgID, searchOperation.getConnectionID(),
-                                      searchOperation.getOperationID(),
-                                      stackTraceToSingleLineString(e));
+          Message message = ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE.
+              get(searchOperation.getConnectionID(),
+                  searchOperation.getOperationID(),
+                  stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
-                         msgID, e);
+                         e);
         }
         finally
         {
@@ -1082,11 +1071,11 @@
         break;
 
       default:
-        int    msgID   = MSGID_ROOTDSE_INVALID_SEARCH_SCOPE;
-        String message = getMessage(msgID, searchOperation.getConnectionID(),
-                                    searchOperation.getOperationID(),
-                                    String.valueOf(searchOperation.getScope()));
-        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, msgID);
+        Message message = ERR_ROOTDSE_INVALID_SEARCH_SCOPE.
+            get(searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                String.valueOf(searchOperation.getScope()));
+        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
     }
   }
 
@@ -1150,10 +1139,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
+      Message message = ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER.get(
+          stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -1170,10 +1159,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_ROOTDSE_UNABLE_TO_EXPORT_DSE;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
+      Message message =
+          ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE.get(stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     finally
     {
@@ -1215,10 +1204,8 @@
          throws DirectoryException
   {
     // This backend does not support LDIF imports.
-    int    msgID   = MSGID_ROOTDSE_IMPORT_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_ROOTDSE_IMPORT_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1273,10 +1260,8 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    int    msgID   = MSGID_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1298,10 +1283,8 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    int    msgID   = MSGID_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1327,10 +1310,8 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    int    msgID   = MSGID_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1340,7 +1321,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(Configuration configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     RootDSEBackendCfg config = (RootDSEBackendCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -1353,7 +1334,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
        RootDSEBackendCfg cfg,
-       List<String> unacceptableReasons)
+       List<Message> unacceptableReasons)
   {
     boolean configIsAcceptable = true;
 
@@ -1372,8 +1353,8 @@
           Backend backend = DirectoryServer.getBackend(baseDN);
           if (backend == null)
           {
-            int    msgID   = MSGID_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE;
-            String message = getMessage(msgID, String.valueOf(baseDN));
+            Message message = WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE.get(
+                    String.valueOf(baseDN));
             unacceptableReasons.add(message);
             configIsAcceptable = false;
           }
@@ -1387,8 +1368,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ROOTDSE_SUBORDINATE_BASE_EXCEPTION;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
+      Message message = WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION.get(
+              stackTraceToSingleLineString(e));
       unacceptableReasons.add(message);
       configIsAcceptable = false;
     }
@@ -1404,9 +1385,9 @@
    */
   public ConfigChangeResult applyConfigurationChange(RootDSEBackendCfg cfg)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Check to see if we should apply a new set of base DNs.
@@ -1428,8 +1409,8 @@
           if (backend == null)
           {
             // This is not fine.  We can't use a suffix that doesn't exist.
-            int msgID = MSGID_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE;
-            String message = getMessage(msgID, String.valueOf(baseDN));
+            Message message = WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE.get(
+                    String.valueOf(baseDN));
             messages.add(message);
 
             if (resultCode == ResultCode.SUCCESS)
@@ -1451,8 +1432,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ROOTDSE_SUBORDINATE_BASE_EXCEPTION;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
+      Message message = WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION.get(
+              stackTraceToSingleLineString(e));
       messages.add(message);
 
       if (resultCode == ResultCode.SUCCESS)
@@ -1503,9 +1484,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY;
-      messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                              stackTraceToSingleLineString(e)));
+      messages.add(ERR_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY.get(
+              String.valueOf(configEntryDN),
+              stackTraceToSingleLineString(e)));
       resultCode = DirectoryServer.getServerErrorResultCode();
     }
 
@@ -1516,8 +1497,7 @@
 
       if (subordinateBaseDNs == null)
       {
-        int msgID = MSGID_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS;
-        String message = getMessage(msgID);
+        Message message = INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS.get();
         messages.add(message);
       }
       else
@@ -1539,8 +1519,8 @@
 
         basesStr.append(" }");
 
-        int msgID = MSGID_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS;
-        String message = getMessage(msgID, basesStr.toString());
+        Message message = INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS.get(
+                basesStr.toString());
         messages.add(message);
       }
 
@@ -1548,16 +1528,15 @@
       if (showAllAttributes != newShowAll)
       {
         showAllAttributes = newShowAll;
-        int    msgID   = MSGID_ROOTDSE_UPDATED_SHOW_ALL_ATTRS;
-        String message = getMessage(msgID, ATTR_ROOTDSE_SHOW_ALL_ATTRIBUTES,
-                                    showAllAttributes);
+        Message message = INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS.get(
+                ATTR_ROOTDSE_SHOW_ALL_ATTRIBUTES,
+                String.valueOf(showAllAttributes));
         messages.add(message);
       }
 
 
       userDefinedAttributes = userAttrs;
-      int    msgID   = MSGID_ROOTDSE_USING_NEW_USER_ATTRS;
-      String message = getMessage(msgID);
+      Message message = INFO_ROOTDSE_USING_NEW_USER_ATTRS.get();
       messages.add(message);
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/SchemaBackend.java b/opendj-sdk/opends/src/server/org/opends/server/backends/SchemaBackend.java
index 768c5ae..6f63b3e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/SchemaBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/SchemaBackend.java
@@ -89,8 +89,6 @@
 import org.opends.server.types.DITStructureRule;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ExistingFileBehavior;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LDIFExportConfig;
@@ -116,17 +114,19 @@
 import org.opends.server.types.DebugLogLevel;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.BackendMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.admin.std.server.SchemaBackendCfg;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.Configuration;
-import static org.opends.server.messages.ConfigMessages.*;
+import static org.opends.messages.ConfigMessages.*;
+import org.opends.messages.Message;
+
 import org.opends.server.protocols.asn1.ASN1OctetString;
 
 
@@ -267,9 +267,8 @@
     // not be able to complete initialization.
     if (config == null)
     {
-      int    msgID   = MSGID_SCHEMA_CONFIG_ENTRY_NULL;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_SCHEMA_CONFIG_ENTRY_NULL.get();
+      throw new ConfigException(message);
     }
 
     Validator.ensureTrue(config instanceof SchemaBackendCfg);
@@ -403,10 +402,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_BACKEND_CANNOT_REGISTER_BASEDN;
-        String message = getMessage(msgID, baseDNs[i].toString(),
-                                    getExceptionMessage(e));
-        throw new InitializationException(msgID, message, e);
+        Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+            baseDNs[i].toString(), getExceptionMessage(e));
+        throw new InitializationException(message, e);
       }
     }
 
@@ -462,12 +460,10 @@
           }
           else
           {
-            int msgID = MSGID_SCHEMA_CANNOT_FIND_CONCAT_FILE;
-            String message = getMessage(msgID,
-                                        upgradeDirectory.getAbsolutePath(),
-                                        SCHEMA_CONCAT_FILE_NAME,
-                                        concatFile.getName());
-            throw new InitializationException(msgID, message);
+            Message message = ERR_SCHEMA_CANNOT_FIND_CONCAT_FILE.
+                get(upgradeDirectory.getAbsolutePath(), SCHEMA_CONCAT_FILE_NAME,
+                    concatFile.getName());
+            throw new InitializationException(message);
           }
         }
       }
@@ -514,10 +510,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_SCHEMA_ERROR_DETERMINING_SCHEMA_CHANGES;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_SCHEMA_ERROR_DETERMINING_SCHEMA_CHANGES.get(
+          getExceptionMessage(e));
+      ErrorLogger.logError(message);
     }
 
 
@@ -1000,10 +995,9 @@
   public void addEntry(Entry entry, AddOperation addOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_SCHEMA_ADD_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(entry.getDN()));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_SCHEMA_ADD_NOT_SUPPORTED.get(String.valueOf(entry.getDN()));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1025,10 +1019,9 @@
   public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_SCHEMA_DELETE_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(entryDN));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_SCHEMA_DELETE_NOT_SUPPORTED.get(String.valueOf(entryDN));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1056,10 +1049,9 @@
     if (! clientConnection.hasPrivilege(Privilege.UPDATE_SCHEMA,
                                         modifyOperation))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
+      Message message = ERR_SCHEMA_MODIFY_INSUFFICIENT_PRIVILEGES.get();
       throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -1122,12 +1114,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE.get(
+                    v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               addAttributeType(type, newSchema, modifiedSchemaFiles);
@@ -1150,12 +1141,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.
+                    get(v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               addObjectClass(oc, newSchema, modifiedSchemaFiles);
@@ -1178,12 +1168,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM.get(
+                    v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               addNameForm(nf, newSchema, modifiedSchemaFiles);
@@ -1206,12 +1195,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_DCR;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DCR.get(
+                    v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               addDITContentRule(dcr, newSchema, modifiedSchemaFiles);
@@ -1234,12 +1222,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_DSR;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DSR.get(
+                    v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               addDITStructureRule(dsr, newSchema, modifiedSchemaFiles);
@@ -1262,12 +1249,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE.get(
+                    v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               addMatchingRuleUse(mru, newSchema, modifiedSchemaFiles);
@@ -1275,10 +1261,10 @@
           }
           else
           {
-            int    msgID   = MSGID_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE;
-            String message = getMessage(msgID, a.getName());
+            Message message =
+                ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE.get(a.getName());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
 
           break;
@@ -1288,10 +1274,10 @@
           values = a.getValues();
           if (values.isEmpty())
           {
-            int    msgID   = MSGID_SCHEMA_MODIFY_DELETE_NO_VALUES;
-            String message = getMessage(msgID, a.getName());
+            Message message =
+                ERR_SCHEMA_MODIFY_DELETE_NO_VALUES.get(a.getName());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
 
           if (at.equals(attributeTypesType))
@@ -1311,12 +1297,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE.get(
+                    v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               removeAttributeType(type, newSchema, mods, pos,
@@ -1340,12 +1325,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.
+                    get(v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               removeObjectClass(oc, newSchema, mods, pos, modifiedSchemaFiles);
@@ -1368,12 +1352,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM.get(
+                    v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               removeNameForm(nf, newSchema, mods, pos, modifiedSchemaFiles);
@@ -1396,12 +1379,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_DCR;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DCR.get(
+                    v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               removeDITContentRule(dcr, newSchema, mods, pos,
@@ -1425,12 +1407,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_DSR;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DSR.get(
+                    v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               removeDITStructureRule(dsr, newSchema, mods, pos,
@@ -1454,12 +1435,11 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            de.getErrorMessage());
+                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE.get(
+                    v.getStringValue(), de.getMessageObject());
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID, de);
+                               de);
               }
 
               removeMatchingRuleUse(mru, newSchema, mods, pos,
@@ -1468,10 +1448,10 @@
           }
           else
           {
-            int    msgID   = MSGID_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE;
-            String message = getMessage(msgID, a.getName());
+            Message message =
+                ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE.get(a.getName());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
 
           break;
@@ -1480,10 +1460,10 @@
         default:
           if (!modifyOperation.isSynchronizationOperation())
           {
-            int    msgID   = MSGID_SCHEMA_INVALID_MODIFICATION_TYPE;
-            String message = getMessage(msgID, m.getModificationType());
+            Message message = ERR_SCHEMA_INVALID_MODIFICATION_TYPE.get(
+                String.valueOf(m.getModificationType()));
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -1527,10 +1507,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SCHEMA_MODIFY_CANNOT_WRITE_NEW_SCHEMA;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message =
+          ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_SCHEMA.get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -1600,12 +1580,10 @@
         // 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.
-        int msgID = MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_ATTRTYPE;
-        String message = getMessage(msgID, attributeType.getNameOrOID(),
-                                    existingType.getNameOrOID(),
-                                    t.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_ATTRTYPE.
+            get(attributeType.getNameOrOID(), existingType.getNameOrOID(),
+                t.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -1617,19 +1595,15 @@
     {
       if (! schema.hasAttributeType(superiorType.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_ATTRIBUTE_TYPE;
-        String message = getMessage(msgID, attributeType.getNameOrOID(),
-                                    superiorType.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message 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())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_ATTRIBUTE_TYPE;
-        String message = getMessage(msgID, attributeType.getNameOrOID(),
-                                    superiorType.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_ATTRIBUTE_TYPE.
+            get(attributeType.getNameOrOID(), superiorType.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -1638,41 +1612,33 @@
     MatchingRule mr = attributeType.getEqualityMatchingRule();
     if ((mr != null) && mr.isObsolete())
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR;
-      String message = getMessage(msgID, attributeType.getNameOrOID(),
-                                  mr.getNameOrOID());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
+          attributeType.getNameOrOID(), mr.getNameOrOID());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     mr = attributeType.getOrderingMatchingRule();
     if ((mr != null) && mr.isObsolete())
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR;
-      String message = getMessage(msgID, attributeType.getNameOrOID(),
-                                  mr.getNameOrOID());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
+          attributeType.getNameOrOID(), mr.getNameOrOID());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     mr = attributeType.getSubstringMatchingRule();
     if ((mr != null) && mr.isObsolete())
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR;
-      String message = getMessage(msgID, attributeType.getNameOrOID(),
-                                  mr.getNameOrOID());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
+          attributeType.getNameOrOID(), mr.getNameOrOID());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     mr = attributeType.getApproximateMatchingRule();
     if ((mr != null) && mr.isObsolete())
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR;
-      String message = getMessage(msgID, attributeType.getNameOrOID(),
-                                  mr.getNameOrOID());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
+          attributeType.getNameOrOID(), mr.getNameOrOID());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
 
@@ -1765,10 +1731,9 @@
     AttributeType removeType = schema.getAttributeType(attributeType.getOID());
     if ((removeType == null) || (! removeType.equals(attributeType)))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_ATTRIBUTE_TYPE;
-      String message = getMessage(msgID, attributeType.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_ATTRIBUTE_TYPE.get(
+          attributeType.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -1801,12 +1766,11 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE;
-          String message = getMessage(msgID, v.getStringValue(),
-                                      de.getErrorMessage());
+          Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE.get(
+              v.getStringValue(), de.getMessageObject());
           throw new DirectoryException(
                          ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                         msgID, de);
+                         de);
         }
 
         if (attributeType.getOID().equals(at.getOID()))
@@ -1826,11 +1790,9 @@
       AttributeType superiorType = at.getSuperiorType();
       if ((superiorType != null) && superiorType.equals(removeType))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_AT_SUPERIOR_TYPE;
-        String message = getMessage(msgID, removeType.getNameOrOID(),
-                                    superiorType.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_REMOVE_AT_SUPERIOR_TYPE.get(
+            removeType.getNameOrOID(), superiorType.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -1842,11 +1804,9 @@
       if (oc.getRequiredAttributes().contains(removeType) ||
           oc.getOptionalAttributes().contains(removeType))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_OC;
-        String message = getMessage(msgID, removeType.getNameOrOID(),
-                                    oc.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_OC.get(
+            removeType.getNameOrOID(), oc.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -1858,11 +1818,9 @@
       if (nf.getRequiredAttributes().contains(removeType) ||
           nf.getOptionalAttributes().contains(removeType))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_NF;
-        String message = getMessage(msgID, removeType.getNameOrOID(),
-                                    nf.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_NF.get(
+            removeType.getNameOrOID(), nf.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -1875,11 +1833,9 @@
           dcr.getOptionalAttributes().contains(removeType) ||
           dcr.getProhibitedAttributes().contains(removeType))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_DCR;
-        String message = getMessage(msgID, removeType.getNameOrOID(),
-                                    dcr.getName());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_DCR.get(
+            removeType.getNameOrOID(), dcr.getName());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -1890,11 +1846,9 @@
     {
       if (mru.getAttributes().contains(removeType))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_MR_USE;
-        String message = getMessage(msgID, removeType.getNameOrOID(),
-                                    mru.getName());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_MR_USE.get(
+            removeType.getNameOrOID(), mru.getName());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -1953,12 +1907,12 @@
         // 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.
-        int msgID = MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_OBJECTCLASS;
-        String message = getMessage(msgID, objectClass.getNameOrOID(),
-                                    existingClass.getNameOrOID(),
-                                    oc.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message =
+                ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_OBJECTCLASS
+                        .get(objectClass.getNameOrOID(),
+                                existingClass.getNameOrOID(),
+                                oc.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -1971,19 +1925,15 @@
     {
       if (! schema.hasObjectClass(superiorClass.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_OBJECTCLASS;
-        String message = getMessage(msgID, objectClass.getNameOrOID(),
-                                    superiorClass.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_OBJECTCLASS.get(
+            objectClass.getNameOrOID(), superiorClass.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (superiorClass.isObsolete())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_OBJECTCLASS;
-        String message = getMessage(msgID, objectClass.getNameOrOID(),
-                                    superiorClass.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_OBJECTCLASS.get(
+            objectClass.getNameOrOID(), superiorClass.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -1991,19 +1941,15 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_OC_UNDEFINED_REQUIRED_ATTR;
-        String message = getMessage(msgID, objectClass.getNameOrOID(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message 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())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_OC_OBSOLETE_REQUIRED_ATTR;
-        String message = getMessage(msgID, objectClass.getNameOrOID(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_OC_OBSOLETE_REQUIRED_ATTR.get(
+            objectClass.getNameOrOID(), at.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -2011,19 +1957,15 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_OC_UNDEFINED_OPTIONAL_ATTR;
-        String message = getMessage(msgID, objectClass.getNameOrOID(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message 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())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_OC_OBSOLETE_OPTIONAL_ATTR;
-        String message = getMessage(msgID, objectClass.getNameOrOID(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_OC_OBSOLETE_OPTIONAL_ATTR.get(
+            objectClass.getNameOrOID(), at.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -2116,10 +2058,9 @@
     ObjectClass removeClass = schema.getObjectClass(objectClass.getOID());
     if ((removeClass == null) || (! removeClass.equals(objectClass)))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_OBJECTCLASS;
-      String message = getMessage(msgID, objectClass.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_OBJECTCLASS.get(
+          objectClass.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -2151,12 +2092,11 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS;
-          String message = getMessage(msgID, v.getStringValue(),
-                                      de.getErrorMessage());
+          Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.get(
+              v.getStringValue(), de.getMessageObject());
           throw new DirectoryException(
                          ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                         msgID, de);
+                         de);
         }
 
         if (objectClass.getOID().equals(oc.getOID()))
@@ -2176,11 +2116,9 @@
       ObjectClass superiorClass = oc.getSuperiorClass();
       if ((superiorClass != null) && superiorClass.equals(removeClass))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_OC_SUPERIOR_CLASS;
-        String message = getMessage(msgID, removeClass.getNameOrOID(),
-                                    superiorClass.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_REMOVE_OC_SUPERIOR_CLASS.get(
+            removeClass.getNameOrOID(), superiorClass.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -2190,11 +2128,9 @@
     NameForm nf = schema.getNameForm(removeClass);
     if (nf != null)
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_OC_IN_NF;
-      String message = getMessage(msgID, removeClass.getNameOrOID(),
-                                  nf.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_REMOVE_OC_IN_NF.get(
+          removeClass.getNameOrOID(), nf.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -2205,11 +2141,9 @@
       if (dcr.getStructuralClass().equals(removeClass) ||
           dcr.getAuxiliaryClasses().contains(removeClass))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_OC_IN_DCR;
-        String message = getMessage(msgID, removeClass.getNameOrOID(),
-                                    dcr.getName());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_REMOVE_OC_IN_DCR.get(
+            removeClass.getNameOrOID(), dcr.getName());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -2268,12 +2202,11 @@
         // 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.
-        int msgID = MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_NAME_FORM;
-        String message = getMessage(msgID, nameForm.getNameOrOID(),
-                                    existingNF.getNameOrOID(),
-                                    nf.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message =
+                ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_NAME_FORM
+                        .get(nameForm.getNameOrOID(), existingNF.getNameOrOID(),
+                  nf.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -2284,57 +2217,45 @@
     ObjectClass structuralClass = nameForm.getStructuralClass();
     if (! schema.hasObjectClass(structuralClass.getOID()))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_NF_UNDEFINED_STRUCTURAL_OC;
-      String message = getMessage(msgID, nameForm.getNameOrOID(),
-                                  structuralClass.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message 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)
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_NF_OC_NOT_STRUCTURAL;
-      String message = getMessage(msgID, nameForm.getNameOrOID(),
-                                  structuralClass.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_NF_OC_NOT_STRUCTURAL.get(
+          nameForm.getNameOrOID(), structuralClass.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
     if (structuralClass.isObsolete())
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_NF_OC_OBSOLETE;
-      String message = getMessage(msgID, nameForm.getNameOrOID(),
-                                  structuralClass.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_NF_OC_OBSOLETE.get(
+          nameForm.getNameOrOID(), structuralClass.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
     NameForm existingNFForClass = schema.getNameForm(structuralClass);
     if ((existingNFForClass != null) && (existingNFForClass != existingNF))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_NF;
-      String message = getMessage(msgID, nameForm.getNameOrOID(),
-                                  structuralClass.getNameOrOID(),
-                                  existingNFForClass.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_NF.
+          get(nameForm.getNameOrOID(), structuralClass.getNameOrOID(),
+              existingNFForClass.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
     for (AttributeType at : nameForm.getRequiredAttributes())
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_NF_UNDEFINED_REQUIRED_ATTR;
-        String message = getMessage(msgID, nameForm.getNameOrOID(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message 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())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_NF_OBSOLETE_REQUIRED_ATTR;
-        String message = getMessage(msgID, nameForm.getNameOrOID(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_NF_OBSOLETE_REQUIRED_ATTR.get(
+            nameForm.getNameOrOID(), at.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -2342,19 +2263,15 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_NF_UNDEFINED_OPTIONAL_ATTR;
-        String message = getMessage(msgID, nameForm.getNameOrOID(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message 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())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_NF_OBSOLETE_OPTIONAL_ATTR;
-        String message = getMessage(msgID, nameForm.getNameOrOID(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_NF_OBSOLETE_OPTIONAL_ATTR.get(
+            nameForm.getNameOrOID(), at.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -2446,10 +2363,9 @@
     NameForm removeNF = schema.getNameForm(nameForm.getOID());
     if ((removeNF == null) || (! removeNF.equals(nameForm)))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_NAME_FORM;
-      String message = getMessage(msgID, nameForm.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_NAME_FORM.get(
+          nameForm.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -2481,12 +2397,11 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM;
-          String message = getMessage(msgID, v.getStringValue(),
-                                      de.getErrorMessage());
+          Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM.get(
+              v.getStringValue(), de.getMessageObject());
           throw new DirectoryException(
                          ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                         msgID, de);
+                         de);
         }
 
         if (nameForm.getOID().equals(nf.getOID()))
@@ -2504,11 +2419,9 @@
     DITStructureRule dsr = schema.getDITStructureRule(removeNF);
     if (dsr != null)
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_NF_IN_DSR;
-      String message = getMessage(msgID, removeNF.getNameOrOID(),
-                                  dsr.getNameOrRuleID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_REMOVE_NF_IN_DSR.get(
+          removeNF.getNameOrOID(), dsr.getNameOrRuleID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -2562,12 +2475,11 @@
           }
           else
           {
-            int    msgID   = MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DCR;
-            String message = getMessage(msgID, ditContentRule.getName(),
-                                        existingDCR.getName(),
-                                        dcr.getName());
+            Message message = ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DCR.
+                get(ditContentRule.getName(), existingDCR.getName(),
+                    dcr.getName());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
         }
       }
@@ -2583,12 +2495,10 @@
          schema.getDITContentRule(structuralClass);
     if ((existingRuleForClass != null) && (existingRuleForClass != existingDCR))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_DCR;
-      String message = getMessage(msgID, ditContentRule.getName(),
-                                  structuralClass.getNameOrOID(),
-                                  existingRuleForClass.getName());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message 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);
     }
 
 
@@ -2597,56 +2507,44 @@
     // prohibited attribute type.
     if (! schema.hasObjectClass(structuralClass.getOID()))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_STRUCTURAL_OC;
-      String message = getMessage(msgID, ditContentRule.getName(),
-                                  structuralClass.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message 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)
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_DCR_OC_NOT_STRUCTURAL;
-      String message = getMessage(msgID, ditContentRule.getName(),
-                                  structuralClass.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_DCR_OC_NOT_STRUCTURAL.get(
+          ditContentRule.getName(), structuralClass.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
     if (structuralClass.isObsolete())
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_DCR_STRUCTURAL_OC_OBSOLETE;
-      String message = getMessage(msgID, ditContentRule.getName(),
-                                  structuralClass.getNameOrOID());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_DCR_STRUCTURAL_OC_OBSOLETE.get(
+          ditContentRule.getName(), structuralClass.getNameOrOID());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     for (ObjectClass oc : ditContentRule.getAuxiliaryClasses())
     {
       if (! schema.hasObjectClass(oc.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_AUXILIARY_OC;
-        String message = getMessage(msgID, ditContentRule.getName(),
-                                    oc.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message 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)
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_DCR_OC_NOT_AUXILIARY;
-        String message = getMessage(msgID, ditContentRule.getName(),
-                                    oc.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_DCR_OC_NOT_AUXILIARY.get(
+            ditContentRule.getName(), oc.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       if (oc.isObsolete())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_AUXILIARY_OC;
-        String message = getMessage(msgID, ditContentRule.getName(),
-                                    oc.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_AUXILIARY_OC.get(
+            ditContentRule.getName(), oc.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -2654,19 +2552,15 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_REQUIRED_ATTR;
-        String message = getMessage(msgID, ditContentRule.getName(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message 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())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_REQUIRED_ATTR;
-        String message = getMessage(msgID, ditContentRule.getName(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_REQUIRED_ATTR.get(
+            ditContentRule.getName(), at.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -2674,19 +2568,15 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_OPTIONAL_ATTR;
-        String message = getMessage(msgID, ditContentRule.getName(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message 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())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_OPTIONAL_ATTR;
-        String message = getMessage(msgID, ditContentRule.getName(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_OPTIONAL_ATTR.get(
+            ditContentRule.getName(), at.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -2694,19 +2584,15 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_PROHIBITED_ATTR;
-        String message = getMessage(msgID, ditContentRule.getName(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message 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())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_PROHIBITED_ATTR;
-        String message = getMessage(msgID, ditContentRule.getName(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_PROHIBITED_ATTR.get(
+            ditContentRule.getName(), at.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -2801,10 +2687,9 @@
          schema.getDITContentRule(ditContentRule.getStructuralClass());
     if ((removeDCR == null) || (! removeDCR.equals(ditContentRule)))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_DCR;
-      String message = getMessage(msgID, ditContentRule.getName());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message =
+          ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_DCR.get(ditContentRule.getName());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -2860,13 +2745,11 @@
           // acceptable if we find match for the same object instance.
           if ((existingDSR != null) && (existingDSR != dsr))
           {
-            int    msgID   = MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DSR;
-            String message = getMessage(msgID,
-                                        ditStructureRule.getNameOrRuleID(),
-                                        existingDSR.getNameOrRuleID(),
-                                        dsr.getNameOrRuleID());
+            Message message = ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DSR.
+                get(ditStructureRule.getNameOrRuleID(),
+                    existingDSR.getNameOrRuleID(), dsr.getNameOrRuleID());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
         }
       }
@@ -2884,12 +2767,10 @@
     if ((existingRuleForNameForm != null) &&
         (existingRuleForNameForm != existingDSR))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_NAME_FORM_CONFLICT_FOR_ADD_DSR;
-      String message = getMessage(msgID, ditStructureRule.getNameOrRuleID(),
-                                  nameForm.getNameOrOID(),
-                                  existingRuleForNameForm.getNameOrRuleID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message 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);
     }
 
 
@@ -2897,19 +2778,15 @@
     // name form or superior DIT structure rule.
     if (! schema.hasNameForm(nameForm.getOID()))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_DSR_UNDEFINED_NAME_FORM;
-      String message = getMessage(msgID, ditStructureRule.getNameOrRuleID(),
-                                  nameForm.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_DSR_UNDEFINED_NAME_FORM.get(
+          ditStructureRule.getNameOrRuleID(), nameForm.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
     if (nameForm.isObsolete())
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_DSR_OBSOLETE_NAME_FORM;
-      String message = getMessage(msgID, ditStructureRule.getNameOrRuleID(),
-                                  nameForm.getNameOrOID());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_DSR_OBSOLETE_NAME_FORM.get(
+          ditStructureRule.getNameOrRuleID(), nameForm.getNameOrOID());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
 
@@ -2919,11 +2796,9 @@
     {
       if (dsr.isObsolete())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_DSR_OBSOLETE_SUPERIOR_RULE;
-        String message = getMessage(msgID, ditStructureRule.getNameOrRuleID(),
-                                    dsr.getNameOrRuleID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_DSR_OBSOLETE_SUPERIOR_RULE.get(
+            ditStructureRule.getNameOrRuleID(), dsr.getNameOrRuleID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -3018,10 +2893,9 @@
          schema.getDITStructureRule(ditStructureRule.getRuleID());
     if ((removeDSR == null) || (! removeDSR.equals(ditStructureRule)))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_DSR;
-      String message = getMessage(msgID, ditStructureRule.getNameOrRuleID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_DSR.get(
+          ditStructureRule.getNameOrRuleID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -3054,12 +2928,11 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          int msgID = MSGID_SCHEMA_MODIFY_CANNOT_DECODE_DSR;
-          String message = getMessage(msgID, v.getStringValue(),
-                                      de.getErrorMessage());
+          Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DSR.get(
+              v.getStringValue(), de.getMessageObject());
           throw new DirectoryException(
                          ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                         msgID, de);
+                         de);
         }
 
         if (ditStructureRule.getRuleID() == dsr.getRuleID())
@@ -3078,11 +2951,9 @@
     {
       if (dsr.getSuperiorRules().contains(removeDSR))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_DSR_SUPERIOR_RULE;
-        String message = getMessage(msgID, removeDSR.getNameOrRuleID(),
-                                    dsr.getNameOrRuleID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_REMOVE_DSR_SUPERIOR_RULE.get(
+            removeDSR.getNameOrRuleID(), dsr.getNameOrRuleID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -3139,11 +3010,13 @@
           }
           else
           {
-            int msgID = MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_MR_USE;
-            String message = getMessage(msgID, matchingRuleUse.getName(),
-                                        existingMRU.getName(), mru.getName());
+            Message message =
+                    ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_MR_USE.get(
+                            matchingRuleUse.getName(),
+                            existingMRU.getName(),
+                            mru.getName());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
         }
       }
@@ -3160,21 +3033,17 @@
          schema.getMatchingRuleUse(matchingRule);
     if ((existingMRUForRule != null) && (existingMRUForRule != existingMRU))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_MR_CONFLICT_FOR_ADD_MR_USE;
-      String message = getMessage(msgID, matchingRuleUse.getName(),
-                                  matchingRule.getNameOrOID(),
-                                  existingMRUForRule.getName());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message 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);
     }
 
     if (matchingRule.isObsolete())
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_MRU_OBSOLETE_MR;
-      String message = getMessage(msgID, matchingRuleUse.getName(),
-                                  matchingRule.getNameOrOID());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_MRU_OBSOLETE_MR.get(
+          matchingRuleUse.getName(), matchingRule.getNameOrOID());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
 
@@ -3184,19 +3053,15 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_MRU_UNDEFINED_ATTR;
-        String message = getMessage(msgID, matchingRuleUse.getName(),
-                                    at.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_MRU_UNDEFINED_ATTR.get(
+            matchingRuleUse.getName(), at.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (at.isObsolete())
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_MRU_OBSOLETE_ATTR;
-        String message = getMessage(msgID, matchingRuleUse.getName(),
-                                    matchingRule.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_SCHEMA_MODIFY_MRU_OBSOLETE_ATTR.get(
+            matchingRuleUse.getName(), matchingRule.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -3292,10 +3157,9 @@
          schema.getMatchingRuleUse(matchingRuleUse.getMatchingRule());
     if ((removeMRU == null) || (! removeMRU.equals(matchingRuleUse)))
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_MR_USE;
-      String message = getMessage(msgID, matchingRuleUse.getName());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_MR_USE.get(
+          matchingRuleUse.getName());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -3574,10 +3438,9 @@
   {
     if (depth > 20)
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_CIRCULAR_REFERENCE_AT;
-      String message = getMessage(msgID, attributeType.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_AT.get(
+          attributeType.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
     if (addedTypes.contains(attributeType))
@@ -3626,10 +3489,9 @@
   {
     if (depth > 20)
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_CIRCULAR_REFERENCE_OC;
-      String message = getMessage(msgID, objectClass.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_OC.get(
+          objectClass.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
     if (addedClasses.contains(objectClass))
@@ -3678,10 +3540,9 @@
   {
     if (depth > 20)
     {
-      int    msgID   = MSGID_SCHEMA_MODIFY_CIRCULAR_REFERENCE_DSR;
-      String message = getMessage(msgID, ditStructureRule.getNameOrRuleID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_DSR.get(
+          ditStructureRule.getNameOrRuleID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
     if (addedDSRs.contains(ditStructureRule))
@@ -3794,22 +3655,23 @@
 
       if (allCleaned)
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_CLEANED;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_CLEANED.get(
+            getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
       else
       {
-        int msgID = MSGID_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_NOT_CLEANED;
-        String message = getMessage(msgID, getExceptionMessage(e));
+
+        Message message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_NOT_CLEANED
+                .get(getExceptionMessage(e));
 
         DirectoryServer.sendAlertNotification(this,
-                             ALERT_TYPE_CANNOT_COPY_SCHEMA_FILES, msgID,
+                             ALERT_TYPE_CANNOT_COPY_SCHEMA_FILES,
                              message);
 
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -3879,22 +3741,22 @@
 
       if (allRestored)
       {
-        int    msgID   = MSGID_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_RESTORED;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_RESTORED.get(
+            getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
       else
       {
-        int msgID = MSGID_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_NOT_RESTORED;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_NOT_RESTORED
+                .get(getExceptionMessage(e));
 
         DirectoryServer.sendAlertNotification(this,
-                             ALERT_TYPE_CANNOT_WRITE_NEW_SCHEMA_FILES, msgID,
+                             ALERT_TYPE_CANNOT_WRITE_NEW_SCHEMA_FILES,
                              message);
 
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -4047,10 +3909,9 @@
                                    ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_SCHEMA_MODIFY_DN_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(currentDN));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED.get(String.valueOf(currentDN));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -4089,12 +3950,9 @@
 
     if (! found)
     {
-      int    msgID   = MSGID_SCHEMA_INVALID_BASE;
-      String message = getMessage(msgID, searchOperation.getConnectionID(),
-                                  searchOperation.getOperationID(),
-                                  String.valueOf(baseDN));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
-                                   matchedDN, null);
+      Message message = ERR_SCHEMA_INVALID_BASE.get(String.valueOf(baseDN));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
+              matchedDN, null);
     }
 
 
@@ -4178,10 +4036,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
+      Message message = ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER.get(
+          stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -4198,10 +4056,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SCHEMA_UNABLE_TO_EXPORT_BASE;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
+      Message message =
+          ERR_SCHEMA_UNABLE_TO_EXPORT_BASE.get(stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     finally
     {
@@ -4244,10 +4102,8 @@
          throws DirectoryException
   {
     // This backend does not support LDIF imports.
-    int    msgID   = MSGID_SCHEMA_IMPORT_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_SCHEMA_IMPORT_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -4345,12 +4201,11 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_SCHEMA_BACKUP_CANNOT_GET_MAC;
-          String message = getMessage(msgID, macAlgorithm,
-                                      stackTraceToSingleLineString(e));
+          Message message = ERR_SCHEMA_BACKUP_CANNOT_GET_MAC.get(
+              macAlgorithm, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
-                         msgID, e);
+                         e);
         }
       }
       else
@@ -4369,12 +4224,11 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_SCHEMA_BACKUP_CANNOT_GET_DIGEST;
-          String message = getMessage(msgID, digestAlgorithm,
-                                      stackTraceToSingleLineString(e));
+          Message message = ERR_SCHEMA_BACKUP_CANNOT_GET_DIGEST.get(
+              digestAlgorithm, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
-                         msgID, e);
+                         e);
         }
       }
     }
@@ -4422,12 +4276,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SCHEMA_BACKUP_CANNOT_CREATE_ARCHIVE_FILE;
-      String message = getMessage(msgID, String.valueOf(filename),
-                                  backupDirectory.getPath(),
-                                  getExceptionMessage(e));
+      Message message = ERR_SCHEMA_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
+          get(String.valueOf(filename), backupDirectory.getPath(),
+              getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -4450,11 +4303,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_SCHEMA_BACKUP_CANNOT_GET_CIPHER;
-        String message = getMessage(msgID, cipherAlgorithm,
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_SCHEMA_BACKUP_CANNOT_GET_CIPHER.get(
+            cipherAlgorithm, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
       outputStream = new CipherOutputStream(outputStream, cipher);
@@ -4464,10 +4316,10 @@
     // Wrap the file output stream in a zip output stream.
     ZipOutputStream zipStream = new ZipOutputStream(outputStream);
 
-    int    msgID   = MSGID_SCHEMA_BACKUP_ZIP_COMMENT;
-    String message = getMessage(msgID, DynamicConstants.PRODUCT_NAME,
-                                backupID);
-    zipStream.setComment(message);
+    Message message = ERR_SCHEMA_BACKUP_ZIP_COMMENT.get(
+            DynamicConstants.PRODUCT_NAME,
+            backupID);
+    zipStream.setComment(String.valueOf(message));
 
     if (compress)
     {
@@ -4495,10 +4347,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID   = MSGID_SCHEMA_BACKUP_CANNOT_LIST_SCHEMA_FILES;
-      message = getMessage(msgID, schemaDirPath, getExceptionMessage(e));
+      message = ERR_SCHEMA_BACKUP_CANNOT_LIST_SCHEMA_FILES.get(
+          schemaDirPath, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -4580,10 +4432,10 @@
           zipStream.close();
         } catch (Exception e2) {}
 
-        msgID   = MSGID_SCHEMA_BACKUP_CANNOT_BACKUP_SCHEMA_FILE;
-        message = getMessage(msgID, baseName, stackTraceToSingleLineString(e));
+        message = ERR_SCHEMA_BACKUP_CANNOT_BACKUP_SCHEMA_FILE.get(
+            baseName, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -4601,11 +4453,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID   = MSGID_SCHEMA_BACKUP_CANNOT_CLOSE_ZIP_STREAM;
-      message = getMessage(msgID, filename, backupDirectory.getPath(),
-                           stackTraceToSingleLineString(e));
+      message = ERR_SCHEMA_BACKUP_CANNOT_CLOSE_ZIP_STREAM.get(
+          filename, backupDirectory.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -4645,11 +4496,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_SCHEMA_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR;
-      message = getMessage(msgID, backupDirectory.getDescriptorPath(),
-                           stackTraceToSingleLineString(e));
+      message = ERR_SCHEMA_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get(
+          backupDirectory.getDescriptorPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
   }
 
@@ -4672,10 +4522,8 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    int    msgID   = MSGID_SCHEMA_BACKUP_AND_RESTORE_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_SCHEMA_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -4707,10 +4555,10 @@
     BackupInfo      backupInfo      = backupDirectory.getBackupInfo(backupID);
     if (backupInfo == null)
     {
-      int    msgID   = MSGID_SCHEMA_RESTORE_NO_SUCH_BACKUP;
-      String message = getMessage(msgID, backupID, backupPath);
+      Message message =
+          ERR_SCHEMA_RESTORE_NO_SUCH_BACKUP.get(backupID, backupPath);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -4720,10 +4568,10 @@
          backupInfo.getBackupProperty(BACKUP_PROPERTY_ARCHIVE_FILENAME);
     if (backupFilename == null)
     {
-      int    msgID   = MSGID_SCHEMA_RESTORE_NO_BACKUP_FILE;
-      String message = getMessage(msgID, backupID, backupPath);
+      Message message =
+          ERR_SCHEMA_RESTORE_NO_BACKUP_FILE.get(backupID, backupPath);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
     File backupFile = new File(backupPath + File.separator + backupFilename);
@@ -4731,10 +4579,10 @@
     {
       if (! backupFile.exists())
       {
-        int    msgID   = MSGID_SCHEMA_RESTORE_NO_SUCH_FILE;
-        String message = getMessage(msgID, backupID, backupFile.getPath());
+        Message message =
+            ERR_SCHEMA_RESTORE_NO_SUCH_FILE.get(backupID, backupFile.getPath());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
     }
     catch (DirectoryException de)
@@ -4743,11 +4591,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_SCHEMA_RESTORE_CANNOT_CHECK_FOR_ARCHIVE;
-      String message = getMessage(msgID, backupID, backupFile.getPath(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_SCHEMA_RESTORE_CANNOT_CHECK_FOR_ARCHIVE.get(
+          backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -4761,10 +4608,9 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_DIGEST_ALGORITHM);
       if (digestAlgorithm == null)
       {
-        int    msgID   = MSGID_SCHEMA_RESTORE_UNKNOWN_DIGEST;
-        String message = getMessage(msgID, backupID);
+        Message message = ERR_SCHEMA_RESTORE_UNKNOWN_DIGEST.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
 
       try
@@ -4774,10 +4620,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SCHEMA_RESTORE_CANNOT_GET_DIGEST;
-        String message = getMessage(msgID, backupID, digestAlgorithm);
+        Message message =
+            ERR_SCHEMA_RESTORE_CANNOT_GET_DIGEST.get(backupID, digestAlgorithm);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -4791,10 +4637,9 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_MAC_ALGORITHM);
       if (macAlgorithm == null)
       {
-        int    msgID   = MSGID_SCHEMA_RESTORE_UNKNOWN_MAC;
-        String message = getMessage(msgID, backupID);
+        Message message = ERR_SCHEMA_RESTORE_UNKNOWN_MAC.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
 
       try
@@ -4803,11 +4648,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SCHEMA_RESTORE_CANNOT_GET_MAC;
-        String message = getMessage(msgID, backupID, macAlgorithm,
-                                    backupFile.getPath());
+        Message message = ERR_SCHEMA_RESTORE_CANNOT_GET_MAC.get(
+            backupID, macAlgorithm);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -4821,11 +4665,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_SCHEMA_RESTORE_CANNOT_OPEN_BACKUP_FILE;
-      String message = getMessage(msgID, backupID, backupFile.getPath(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_SCHEMA_RESTORE_CANNOT_OPEN_BACKUP_FILE.get(
+          backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
     // If the backup is encrypted, then we need to wrap the file input stream
@@ -4836,10 +4679,9 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_CIPHER_ALGORITHM);
       if (cipherAlgorithm == null)
       {
-        int    msgID   = MSGID_SCHEMA_RESTORE_UNKNOWN_CIPHER;
-        String message = getMessage(msgID, backupID);
+        Message message = ERR_SCHEMA_RESTORE_UNKNOWN_CIPHER.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
 
       Cipher cipher;
@@ -4850,12 +4692,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SCHEMA_RESTORE_CANNOT_GET_CIPHER;
-        String message = getMessage(msgID, cipherAlgorithm,
-                                    backupFile.getPath(),
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_SCHEMA_RESTORE_CANNOT_GET_CIPHER.
+            get(cipherAlgorithm, backupFile.getPath());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
       inputStream = new CipherInputStream(inputStream, cipher);
@@ -4909,12 +4749,11 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY;
-        String message = getMessage(msgID, backupID, schemaDirPath,
-                                    String.valueOf(backupDirPath),
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY.
+            get(backupID, schemaDirPath, String.valueOf(backupDirPath),
+                stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
 
@@ -4932,26 +4771,23 @@
           try
           {
             schemaBackupDir.renameTo(schemaDir);
-            int    msgID   = MSGID_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA;
-            String message = getMessage(msgID, schemaDirPath);
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                     msgID);
+            Message message =
+                NOTE_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA.get(schemaDirPath);
+            logError(message);
           }
           catch (Exception e2)
           {
-            int msgID = MSGID_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA;
-            String message = getMessage(msgID, schemaBackupDir.getPath());
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message = ERR_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA.get(
+                schemaBackupDir.getPath());
+            logError(message);
           }
         }
 
 
-        int    msgID   = MSGID_SCHEMA_RESTORE_CANNOT_CREATE_SCHEMA_DIRECTORY;
-        String message = getMessage(msgID, backupID, schemaDirPath,
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_SCHEMA_RESTORE_CANNOT_CREATE_SCHEMA_DIRECTORY.get(
+            backupID, schemaDirPath, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -4972,17 +4808,15 @@
         // Tell the user where the previous schema was archived.
         if (schemaBackupDir != null)
         {
-          int    msgID   = MSGID_SCHEMA_RESTORE_OLD_SCHEMA_SAVED;
-          String message = getMessage(msgID, schemaBackupDir.getPath());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                   msgID);
+          Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+              schemaBackupDir.getPath());
+          logError(message);
         }
 
-        int    msgID   = MSGID_SCHEMA_RESTORE_CANNOT_GET_ZIP_ENTRY;
-        String message = getMessage(msgID, backupID, backupFile.getPath(),
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_SCHEMA_RESTORE_CANNOT_GET_ZIP_ENTRY.get(
+            backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
       if (zipEntry == null)
@@ -5019,18 +4853,16 @@
           // Tell the user where the previous schema was archived.
           if (schemaBackupDir != null)
           {
-            int    msgID   = MSGID_SCHEMA_RESTORE_OLD_SCHEMA_SAVED;
-            String message = getMessage(msgID, schemaBackupDir.getPath());
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                     msgID);
+            Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+                schemaBackupDir.getPath());
+            logError(message);
           }
 
-          int    msgID   = MSGID_SCHEMA_RESTORE_CANNOT_CREATE_FILE;
-          String message = getMessage(msgID, backupID, filePath,
-                                      stackTraceToSingleLineString(e));
+          Message message = ERR_SCHEMA_RESTORE_CANNOT_CREATE_FILE.get(
+              backupID, filePath, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
-                         msgID, e);
+                         e);
         }
       }
 
@@ -5082,17 +4914,15 @@
         // Tell the user where the previous schema was archived.
         if (schemaBackupDir != null)
         {
-          int    msgID   = MSGID_SCHEMA_RESTORE_OLD_SCHEMA_SAVED;
-          String message = getMessage(msgID, schemaBackupDir.getPath());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                   msgID);
+          Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+              schemaBackupDir.getPath());
+          logError(message);
         }
 
-        int msgID = MSGID_SCHEMA_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE;
-        String message = getMessage(msgID, backupID, fileName,
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_SCHEMA_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE.get(
+            backupID, fileName, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -5104,11 +4934,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_SCHEMA_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE;
-      String message = getMessage(msgID, backupID, backupFile.getPath(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_SCHEMA_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE.get(
+          backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -5120,26 +4949,23 @@
       byte[] calculatedHash = digest.digest();
       if (Arrays.equals(calculatedHash, unsignedHash))
       {
-        int    msgID = MSGID_SCHEMA_RESTORE_UNSIGNED_HASH_VALID;
-        String message = getMessage(msgID);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                 msgID);
+        Message message = NOTE_SCHEMA_RESTORE_UNSIGNED_HASH_VALID.get();
+        logError(message);
       }
       else
       {
         // Tell the user where the previous schema was archived.
         if (schemaBackupDir != null)
         {
-          int    msgID   = MSGID_SCHEMA_RESTORE_OLD_SCHEMA_SAVED;
-          String message = getMessage(msgID, schemaBackupDir.getPath());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                   msgID);
+          Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+              schemaBackupDir.getPath());
+          logError(message);
         }
 
-        int    msgID = MSGID_SCHEMA_RESTORE_UNSIGNED_HASH_INVALID;
-        String message = getMessage(msgID, backupID);
+        Message message =
+            ERR_SCHEMA_RESTORE_UNSIGNED_HASH_INVALID.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -5148,26 +4974,23 @@
       byte[] calculatedSignature = mac.doFinal();
       if (Arrays.equals(calculatedSignature, signedHash))
       {
-        int    msgID = MSGID_SCHEMA_RESTORE_SIGNED_HASH_VALID;
-        String message = getMessage(msgID);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                 msgID);
+        Message message = NOTE_SCHEMA_RESTORE_SIGNED_HASH_VALID.get();
+        logError(message);
       }
       else
       {
         // Tell the user where the previous schema was archived.
         if (schemaBackupDir != null)
         {
-          int    msgID   = MSGID_SCHEMA_RESTORE_OLD_SCHEMA_SAVED;
-          String message = getMessage(msgID, schemaBackupDir.getPath());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                   msgID);
+          Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+              schemaBackupDir.getPath());
+          logError(message);
         }
 
-        int    msgID = MSGID_SCHEMA_RESTORE_SIGNED_HASH_INVALID;
-        String message = getMessage(msgID);
+        Message message = ERR_SCHEMA_RESTORE_SIGNED_HASH_INVALID.get(
+              schemaBackupDir.getPath());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -5175,10 +4998,9 @@
     // If we are just verifying the archive, then we're done.
     if (verifyOnly)
     {
-      int    msgID   = MSGID_SCHEMA_RESTORE_VERIFY_SUCCESSFUL;
-      String message = getMessage(msgID, backupID, backupPath);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-               msgID);
+      Message message =
+          NOTE_SCHEMA_RESTORE_VERIFY_SUCCESSFUL.get(backupID, backupPath);
+      logError(message);
       return;
     }
 
@@ -5191,10 +5013,8 @@
       recursiveDelete(schemaBackupDir);
     }
 
-    int    msgID   = MSGID_SCHEMA_RESTORE_SUCCESSFUL;
-    String message = getMessage(msgID, backupID, backupPath);
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-             msgID);
+    Message message = NOTE_SCHEMA_RESTORE_SUCCESSFUL.get(backupID, backupPath);
+    logError(message);
   }
 
 
@@ -5204,7 +5024,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
        SchemaBackendCfg configEntry,
-       List<String> unacceptableReasons)
+       List<Message> unacceptableReasons)
   {
     return true;
   }
@@ -5219,7 +5039,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Check to see if we should apply a new set of base DNs.
@@ -5239,9 +5059,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_SCHEMA_CANNOT_DETERMINE_BASE_DN;
-      messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                              getExceptionMessage(e)));
+
+      messages.add(ERR_SCHEMA_CANNOT_DETERMINE_BASE_DN.get(
+              String.valueOf(configEntryDN),
+              getExceptionMessage(e)));
       resultCode = DirectoryServer.getServerErrorResultCode();
       newBaseDNs = null;
     }
@@ -5287,9 +5108,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY;
-      messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                              stackTraceToSingleLineString(e)));
+      messages.add(ERR_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY.get(
+              String.valueOf(configEntryDN),
+              stackTraceToSingleLineString(e)));
       resultCode = DirectoryServer.getServerErrorResultCode();
     }
 
@@ -5319,8 +5140,8 @@
         try
         {
           DirectoryServer.deregisterBaseDN(dn, false);
-          int msgID = MSGID_SCHEMA_DEREGISTERED_BASE_DN;
-          messages.add(getMessage(msgID, String.valueOf(dn)));
+          messages.add(INFO_SCHEMA_DEREGISTERED_BASE_DN.get(
+                  String.valueOf(dn)));
         }
         catch (Exception e)
         {
@@ -5329,9 +5150,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_SCHEMA_CANNOT_DEREGISTER_BASE_DN;
-          messages.add(getMessage(msgID, String.valueOf(dn),
-                                  getExceptionMessage(e)));
+          messages.add(ERR_SCHEMA_CANNOT_DEREGISTER_BASE_DN.get(
+                  String.valueOf(dn),
+                  getExceptionMessage(e)));
           resultCode = DirectoryServer.getServerErrorResultCode();
         }
       }
@@ -5342,8 +5163,7 @@
         try
         {
           DirectoryServer.registerBaseDN(dn, this, true, false);
-          int msgID = MSGID_SCHEMA_REGISTERED_BASE_DN;
-          messages.add(getMessage(msgID, String.valueOf(dn)));
+          messages.add(INFO_SCHEMA_REGISTERED_BASE_DN.get(String.valueOf(dn)));
         }
         catch (Exception e)
         {
@@ -5352,9 +5172,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_SCHEMA_CANNOT_REGISTER_BASE_DN;
-          messages.add(getMessage(msgID, String.valueOf(dn),
-                                  getExceptionMessage(e)));
+          messages.add(ERR_SCHEMA_CANNOT_REGISTER_BASE_DN.get(
+                  String.valueOf(dn),
+                  getExceptionMessage(e)));
           resultCode = DirectoryServer.getServerErrorResultCode();
         }
       }
@@ -5364,8 +5184,7 @@
 
 
       userDefinedAttributes = newUserAttrs;
-      int msgID = MSGID_SCHEMA_USING_NEW_USER_ATTRS;
-      String message = getMessage(msgID);
+      Message message = INFO_SCHEMA_USING_NEW_USER_ATTRS.get();
       messages.add(message);
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java
index b0b0571..f6511fe 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndex.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -46,8 +47,8 @@
 import org.opends.server.admin.std.meta.JEIndexCfgDefn;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.config.ConfigException;
-import static org.opends.server.messages.JebMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.JebMessages.*;
+
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.util.StaticUtils;
 
@@ -147,9 +148,9 @@
     {
       if (attrType.getEqualityMatchingRule() == null)
       {
-        int messageID = MSGID_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE;
-        String message = getMessage(messageID, attrType, "equality");
-        throw new ConfigException(messageID, message);
+        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+            String.valueOf(attrType), "equality");
+        throw new ConfigException(message);
       }
 
       Indexer equalityIndexer = new EqualityIndexer(attrType);
@@ -178,9 +179,9 @@
     {
       if (attrType.getSubstringMatchingRule() == null)
       {
-        int messageID = MSGID_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE;
-        String message = getMessage(messageID, attrType, "substring");
-        throw new ConfigException(messageID, message);
+        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+            String.valueOf(attrType), "substring");
+        throw new ConfigException(message);
       }
 
       Indexer substringIndexer = new SubstringIndexer(attrType,
@@ -198,9 +199,9 @@
     {
       if (attrType.getOrderingMatchingRule() == null)
       {
-        int messageID = MSGID_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE;
-        String message = getMessage(messageID, attrType, "ordering");
-        throw new ConfigException(messageID, message);
+        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+            String.valueOf(attrType), "ordering");
+        throw new ConfigException(message);
       }
 
       Indexer orderingIndexer = new OrderingIndexer(attrType);
@@ -217,9 +218,9 @@
     {
       if (attrType.getApproximateMatchingRule() == null)
       {
-        int messageID = MSGID_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE;
-        String message = getMessage(messageID, attrType, "approximate");
-        throw new ConfigException(messageID, message);
+        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+            String.valueOf(attrType), "approximate");
+        throw new ConfigException(message);
       }
 
       Indexer approximateIndexer = new ApproximateIndexer(attrType);
@@ -1153,7 +1154,7 @@
    */
   public synchronized boolean isConfigurationChangeAcceptable(
       JEIndexCfg cfg,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     AttributeType attrType = cfg.getIndexAttribute();
 
@@ -1161,8 +1162,8 @@
     {
       if (equalityIndex == null && attrType.getEqualityMatchingRule() == null)
       {
-        int messageID = MSGID_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE;
-        String message = getMessage(messageID, attrType, "equality");
+        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+                String.valueOf(String.valueOf(attrType)), "equality");
         unacceptableReasons.add(message);
         return false;
       }
@@ -1172,8 +1173,8 @@
     {
       if (substringIndex == null && attrType.getSubstringMatchingRule() == null)
       {
-        int messageID = MSGID_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE;
-        String message = getMessage(messageID, attrType, "substring");
+        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+                String.valueOf(attrType), "substring");
         unacceptableReasons.add(message);
         return false;
       }
@@ -1184,8 +1185,8 @@
     {
       if (orderingIndex == null && attrType.getOrderingMatchingRule() == null)
       {
-        int messageID = MSGID_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE;
-        String message = getMessage(messageID, attrType, "ordering");
+        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+                String.valueOf(attrType), "ordering");
         unacceptableReasons.add(message);
         return false;
       }
@@ -1195,8 +1196,8 @@
       if (approximateIndex == null &&
           attrType.getApproximateMatchingRule() == null)
       {
-        int messageID = MSGID_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE;
-        String message = getMessage(messageID, attrType, "approximate");
+        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+                String.valueOf(attrType), "approximate");
         unacceptableReasons.add(message);
         return false;
       }
@@ -1213,7 +1214,7 @@
   {
     ConfigChangeResult ccr;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
     try
     {
       AttributeType attrType = cfg.getIndexAttribute();
@@ -1237,8 +1238,8 @@
           equalityIndex.open();
 
           adminActionRequired = true;
-          int msgID = MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-          messages.add(getMessage(msgID, name + ".equality"));
+          messages.add(NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(
+                  name + ".equality"));
 
         }
         else
@@ -1248,8 +1249,9 @@
           {
 
             adminActionRequired = true;
-            int msgID = MSGID_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD;
-            String message = getMessage(msgID, name + ".equality");
+            Message message =
+                    NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
+                            name + ".equality");
             messages.add(message);
             this.equalityIndex.setIndexEntryLimit(indexEntryLimit);
           }
@@ -1267,7 +1269,8 @@
           }
           catch(DatabaseException de)
           {
-            messages.add(StaticUtils.stackTraceToSingleLineString(de));
+            messages.add(Message.raw(
+                    StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
                 DirectoryServer.getServerErrorResultCode(), false, messages);
             return ccr;
@@ -1294,8 +1297,9 @@
           presenceIndex.open();
 
           adminActionRequired = true;
-          int msgID = MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-          messages.add(getMessage(msgID, name + ".presence"));
+
+          messages.add(NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(
+                  name + ".presence"));
         }
         else
         {
@@ -1303,8 +1307,10 @@
           if(this.presenceIndex.setIndexEntryLimit(indexEntryLimit))
           {
             adminActionRequired = true;
-            int msgID = MSGID_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD;
-            String message = getMessage(msgID, name + ".presence");
+
+            Message message =
+                    NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
+                            name + ".presence");
             messages.add(message);
           }
         }
@@ -1321,7 +1327,8 @@
           }
           catch(DatabaseException de)
           {
-            messages.add(StaticUtils.stackTraceToSingleLineString(de));
+            messages.add(Message.raw(
+                    StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
                 DirectoryServer.getServerErrorResultCode(), false, messages);
             return ccr;
@@ -1349,8 +1356,8 @@
           substringIndex.open();
 
           adminActionRequired = true;
-          int msgID = MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-          messages.add(getMessage(msgID, name + ".substring"));
+          messages.add(NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(
+                  name + ".substring"));
         }
         else
         {
@@ -1358,8 +1365,9 @@
           if(this.substringIndex.setIndexEntryLimit(indexEntryLimit))
           {
             adminActionRequired = true;
-            int msgID = MSGID_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD;
-            String message = getMessage(msgID, name + ".substring");
+            Message message =
+                    NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
+                            name + ".substring");
             messages.add(message);
           }
 
@@ -1384,7 +1392,8 @@
           }
           catch(DatabaseException de)
           {
-            messages.add(StaticUtils.stackTraceToSingleLineString(de));
+            messages.add(Message.raw(
+                    StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
                 DirectoryServer.getServerErrorResultCode(), false, messages);
             return ccr;
@@ -1411,8 +1420,8 @@
           orderingIndex.open();
 
           adminActionRequired = true;
-          int msgID = MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-          messages.add(getMessage(msgID, name + ".ordering"));
+          messages.add(NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(
+                  name + ".ordering"));
         }
         else
         {
@@ -1420,8 +1429,10 @@
           if(this.orderingIndex.setIndexEntryLimit(indexEntryLimit))
           {
             adminActionRequired = true;
-            int msgID = MSGID_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD;
-            String message = getMessage(msgID, name + ".ordering");
+
+            Message message =
+                    NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
+                            name + ".ordering");
             messages.add(message);
           }
         }
@@ -1438,7 +1449,8 @@
           }
           catch(DatabaseException de)
           {
-            messages.add(StaticUtils.stackTraceToSingleLineString(de));
+            messages.add(Message.raw(
+                    StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
                 DirectoryServer.getServerErrorResultCode(), false, messages);
             return ccr;
@@ -1465,8 +1477,9 @@
           approximateIndex.open();
 
           adminActionRequired = true;
-          int msgID = MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-          messages.add(getMessage(msgID, name + ".approximate"));
+
+          messages.add(NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(
+                  name + ".approximate"));
         }
         else
         {
@@ -1474,8 +1487,10 @@
           if(this.approximateIndex.setIndexEntryLimit(indexEntryLimit))
           {
             adminActionRequired = true;
-            int msgID = MSGID_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD;
-            String message = getMessage(msgID, name + ".approximate");
+
+            Message message =
+                    NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
+                            name + ".approximate");
             messages.add(message);
           }
         }
@@ -1492,7 +1507,8 @@
           }
           catch(DatabaseException de)
           {
-            messages.add(StaticUtils.stackTraceToSingleLineString(de));
+            messages.add(
+                    Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
                 DirectoryServer.getServerErrorResultCode(), false, messages);
             return ccr;
@@ -1511,7 +1527,7 @@
     }
     catch(Exception e)
     {
-      messages.add(StaticUtils.stackTraceToSingleLineString(e));
+      messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(e)));
       ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                    adminActionRequired,
                                    messages);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
index 007f66e..eb0cd46 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import java.io.IOException;
 import java.io.File;
@@ -55,9 +56,8 @@
 import org.opends.server.util.Validator;
 import static org.opends.server.util.StaticUtils.*;
 
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.JebMessages.*;
+import static org.opends.messages.BackendMessages.*;
+import static org.opends.messages.JebMessages.*;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -320,11 +320,9 @@
     try
     {
       // Log an informational message about the number of entries.
-      int msgID = MSGID_JEB_BACKEND_STARTED;
-      String message = getMessage(msgID, cfg.getBackendId(),
-                                  rootContainer.getEntryCount());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-               msgID);
+      Message message = NOTE_JEB_BACKEND_STARTED.get(
+          cfg.getBackendId(), rootContainer.getEntryCount());
+      logError(message);
     }
     catch(DatabaseException databaseException)
     {
@@ -332,9 +330,9 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, databaseException);
       }
-      String message = getMessage(MSGID_JEB_GET_ENTRY_COUNT_FAILED,
-                                  databaseException.getMessage());
-      throw new InitializationException(MSGID_JEB_GET_ENTRY_COUNT_FAILED,
+      Message message =
+          WARN_JEB_GET_ENTRY_COUNT_FAILED.get(databaseException.getMessage());
+      throw new InitializationException(
                                         message, databaseException);
     }
 
@@ -351,10 +349,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_BACKEND_CANNOT_REGISTER_BASEDN;
-        String message = getMessage(msgID, String.valueOf(dn),
-                                    String.valueOf(e));
-        throw new InitializationException(msgID, message, e);
+        Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+            String.valueOf(dn), String.valueOf(e));
+        throw new InitializationException(message, e);
       }
     }
 
@@ -425,10 +422,8 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int msgID = MSGID_JEB_DATABASE_EXCEPTION;
-      String message = getMessage(msgID, e.getMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_JEB_DATABASE_EXCEPTION.get(e.getMessage());
+      logError(message);
     }
 
     // Checksum this db environment and register its offline state id/checksum.
@@ -640,8 +635,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(),
-                                   e.getMessageID());
+                                   e.getMessageObject());
     }
     finally
     {
@@ -692,8 +686,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(),
-                                   e.getMessageID());
+                                   e.getMessageObject());
     }
     finally
     {
@@ -743,8 +736,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(),
-                                   e.getMessageID());
+                                   e.getMessageObject());
     }
     finally
     {
@@ -796,8 +788,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(),
-                                   e.getMessageID());
+                                   e.getMessageObject());
     }
     finally
     {
@@ -839,10 +830,9 @@
     {
       // FIXME: No reason why we cannot implement a move between containers
       // since the containers share the same database environment.
-      int msgID = MSGID_JEB_FUNCTION_NOT_SUPPORTED;
-      String msg = getMessage(MSGID_JEB_FUNCTION_NOT_SUPPORTED);
+      Message msg = WARN_JEB_FUNCTION_NOT_SUPPORTED.get();
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                   msg, msgID);
+                                   msg);
     }
     try
     {
@@ -865,8 +855,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(),
-                                   e.getMessageID());
+                                   e.getMessageObject());
     }
     finally
     {
@@ -912,9 +901,9 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      String message = getMessage(MSGID_JEB_DATABASE_EXCEPTION, e.getMessage());
+      Message message = ERR_JEB_DATABASE_EXCEPTION.get(e.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, MSGID_JEB_DATABASE_EXCEPTION);
+                                   message);
     }
     finally
     {
@@ -962,10 +951,9 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
       }
-      int msgID = MSGID_JEB_IO_ERROR;
-      String message = getMessage(msgID, ioe.getMessage());
+      Message message = ERR_JEB_IO_ERROR.get(ioe.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     catch (JebException je)
     {
@@ -974,8 +962,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, je);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   je.getMessage(),
-                                   je.getMessageID());
+                                   je.getMessageObject());
     }
     catch (DatabaseException de)
     {
@@ -992,8 +979,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(),
-                                   e.getMessageID());
+                                   e.getMessageObject());
     }
     catch (InitializationException ie)
     {
@@ -1002,8 +988,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   ie.getMessage(),
-                                   ie.getMessageID());
+                                   ie.getMessageObject());
     }
     catch (ConfigException ce)
     {
@@ -1012,8 +997,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   ce.getMessage(),
-                                   ce.getMessageID());
+                                   ce.getMessageObject());
     }
     finally
     {
@@ -1054,9 +1038,9 @@
     // We can't do import while the backend is online.
     if(!openRootContainer)
     {
-      String message = getMessage(MSGID_JEB_IMPORT_BACKEND_ONLINE);
+      Message message = ERR_JEB_IMPORT_BACKEND_ONLINE.get();
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, MSGID_JEB_IMPORT_BACKEND_ONLINE);
+                                   message);
     }
 
     try
@@ -1108,10 +1092,9 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
       }
-      int msgID = MSGID_JEB_IO_ERROR;
-      String message = getMessage(msgID, ioe.getMessage());
+      Message message = ERR_JEB_IO_ERROR.get(ioe.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     catch (JebException je)
     {
@@ -1120,8 +1103,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, je);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   je.getMessage(),
-                                   je.getMessageID());
+                                   je.getMessageObject());
     }
     catch (DatabaseException de)
     {
@@ -1138,8 +1120,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   ie.getMessage(),
-                                   ie.getMessageID());
+                                   ie.getMessageObject());
     }
     catch (ConfigException ce)
     {
@@ -1148,8 +1129,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   ce.getMessage(),
-                                   ce.getMessageID());
+                                   ce.getMessageObject());
     }
     finally
     {
@@ -1162,9 +1142,8 @@
         // Sync the environment to disk.
         if (debugEnabled())
         {
-          int msgID = MSGID_JEB_IMPORT_CLOSING_DATABASE;
-          String message = getMessage(msgID);
-          TRACER.debugInfo(message);
+          Message message = INFO_JEB_IMPORT_CLOSING_DATABASE.get();
+          TRACER.debugInfo(message.toString());
         }
       }
       catch (DatabaseException de)
@@ -1234,8 +1213,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(),
-                                   e.getMessageID());
+                                   e.getMessageObject());
     }
     finally
     {
@@ -1285,9 +1263,9 @@
     // backend. Throw error. TODO: Need to make baseDNs disablable.
     if(!openRootContainer && rebuildConfig.includesSystemIndex())
     {
-      String message = getMessage(MSGID_JEB_REBUILD_BACKEND_ONLINE);
+      Message message = ERR_JEB_REBUILD_BACKEND_ONLINE.get();
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, MSGID_JEB_REBUILD_BACKEND_ONLINE);
+                                   message);
     }
 
     try
@@ -1318,8 +1296,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(),
-                                   e.getMessageID());
+                                   e.getMessageObject());
     }
     finally
     {
@@ -1389,7 +1366,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(Configuration configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     JEBackendCfg config = (JEBackendCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -1402,24 +1379,24 @@
    */
   public boolean isConfigurationChangeAcceptable(
       JEBackendCfg cfg,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     // Make sure that the logging level value is acceptable.
     String loggingLevel = cfg.getDatabaseLoggingLevel();
     if (! (loggingLevel.equals("OFF") ||
            loggingLevel.equals("SEVERE") ||
            loggingLevel.equals("WARNING") ||
-           loggingLevel.equals("INFO") ||
+           loggingLevel.equals("INFORMATION") ||
            loggingLevel.equals("CONFIG") ||
            loggingLevel.equals("FINE") ||
            loggingLevel.equals("FINER") ||
            loggingLevel.equals("FINEST") ||
            loggingLevel.equals("OFF")))
     {
-      int    msgID   = MSGID_JEB_INVALID_LOGGING_LEVEL;
-      String message = getMessage(msgID,
-                                  String.valueOf(cfg.getDatabaseLoggingLevel()),
-                                  String.valueOf(cfg.dn()));
+
+      Message message = ERR_JEB_INVALID_LOGGING_LEVEL.get(
+              String.valueOf(cfg.getDatabaseLoggingLevel()),
+              String.valueOf(cfg.dn()));
       unacceptableReasons.add(message);
       return false;
     }
@@ -1436,7 +1413,7 @@
   {
     ConfigChangeResult ccr;
     ResultCode resultCode = ResultCode.SUCCESS;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
 
     try
@@ -1488,9 +1465,10 @@
 
               resultCode = DirectoryServer.getServerErrorResultCode();
 
-              int msgID   = MSGID_BACKEND_CANNOT_REGISTER_BASEDN;
-              messages.add(getMessage(msgID, String.valueOf(baseDN),
-                                      String.valueOf(e)));
+
+              messages.add(ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+                      String.valueOf(baseDN),
+                      String.valueOf(e)));
               ccr = new ConfigChangeResult(resultCode, false, messages);
               return ccr;
             }
@@ -1502,7 +1480,7 @@
     }
     catch (Exception e)
     {
-      messages.add(stackTraceToSingleLineString(e));
+      messages.add(Message.raw(stackTraceToSingleLineString(e)));
       ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                    false, messages);
       return ccr;
@@ -1550,25 +1528,22 @@
   DirectoryException createDirectoryException(DatabaseException e)
   {
     ResultCode resultCode = DirectoryServer.getServerErrorResultCode();
-    String message = null;
+    Message message = null;
     if(e instanceof RunRecoveryException)
     {
-      int msgID   = MSGID_BACKEND_ENVIRONMENT_UNUSABLE;
-      message = getMessage(msgID,getBackendID());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-              message,msgID);
+      message = NOTE_BACKEND_ENVIRONMENT_UNUSABLE.get(getBackendID());
+      logError(message);
       DirectoryServer.sendAlertNotification(DirectoryServer.getInstance(),
-              ALERT_TYPE_BACKEND_ENVIRONMENT_UNUSABLE, msgID, message);
+              ALERT_TYPE_BACKEND_ENVIRONMENT_UNUSABLE, message);
     }
 
-    int msgID = MSGID_JEB_DATABASE_EXCEPTION;
     String jeMessage = e.getMessage();
     if (jeMessage == null)
     {
       jeMessage = stackTraceToSingleLineString(e);
     }
-    message = getMessage(msgID, jeMessage);
-    return new DirectoryException(resultCode, message, msgID, e);
+    message = ERR_JEB_DATABASE_EXCEPTION.get(jeMessage);
+    return new DirectoryException(resultCode, message, e);
   }
 
    /**
@@ -1629,9 +1604,8 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      String message = getMessage(MSGID_JEB_OPEN_ENV_FAIL,
-                                  e.getMessage());
-      throw new InitializationException(MSGID_JEB_OPEN_ENV_FAIL, message, e);
+      Message message = ERR_JEB_OPEN_ENV_FAIL.get(e.getMessage());
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackupManager.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
index 7567e94..6456125 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
@@ -34,8 +35,6 @@
 import org.opends.server.types.BackupInfo;
 import org.opends.server.types.CryptoManager;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.RestoreConfig;
 
 import javax.crypto.Cipher;
@@ -72,8 +71,7 @@
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.JebMessages.*;
+import static org.opends.messages.JebMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.admin.std.server.JEBackendCfg;
@@ -193,11 +191,10 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_JEB_BACKUP_CANNOT_GET_MAC;
-          String message = getMessage(msgID, macAlgorithm,
-                                      stackTraceToSingleLineString(e));
+          Message message = ERR_JEB_BACKUP_CANNOT_GET_MAC.get(
+              macAlgorithm, stackTraceToSingleLineString(e));
           throw new DirectoryException(
-               DirectoryServer.getServerErrorResultCode(), message, msgID, e);
+               DirectoryServer.getServerErrorResultCode(), message, e);
         }
       }
       else
@@ -216,11 +213,10 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_JEB_BACKUP_CANNOT_GET_DIGEST;
-          String message = getMessage(msgID, digestAlgorithm,
-                                      stackTraceToSingleLineString(e));
+          Message message = ERR_JEB_BACKUP_CANNOT_GET_DIGEST.get(
+              digestAlgorithm, stackTraceToSingleLineString(e));
           throw new DirectoryException(
-               DirectoryServer.getServerErrorResultCode(), message, msgID, e);
+               DirectoryServer.getServerErrorResultCode(), message, e);
         }
       }
     }
@@ -259,10 +255,9 @@
       if (files == null || files.length == 0)
       {
         // Incremental not allowed until after a full.
-        int msgID = MSGID_JEB_INCR_BACKUP_REQUIRES_FULL;
-        String msg = getMessage(msgID);
+        Message msg = ERR_JEB_INCR_BACKUP_REQUIRES_FULL.get();
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     msg, msgID);
+                                     msg);
       }
       HashSet<String> backups = new HashSet<String>();
       int prefixLen = BackupInfo.PROPERTY_BACKUP_ID.length()+1;
@@ -275,10 +270,10 @@
       // Check that it makes sense to do this incremental.
       if (incrBaseID == null || !backups.contains(incrBaseID))
       {
-        int msgID = MSGID_JEB_INCR_BACKUP_FROM_WRONG_BASE;
-        String msg = getMessage(msgID, backups.toString());
+        Message msg =
+            ERR_JEB_INCR_BACKUP_FROM_WRONG_BASE.get(backups.toString());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     msg, msgID);
+                                     msg);
       }
 */
 
@@ -338,12 +333,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_JEB_BACKUP_CANNOT_CREATE_ARCHIVE_FILE;
-      String message = getMessage(msgID, String.valueOf(archiveFilename),
-                                  backupDir.getPath(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_JEB_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
+          get(String.valueOf(archiveFilename), backupDir.getPath(),
+              stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -366,11 +360,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_JEB_BACKUP_CANNOT_GET_CIPHER;
-        String message = getMessage(msgID, cipherAlgorithm,
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
+            cipherAlgorithm, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
       outputStream = new CipherOutputStream(outputStream, cipher);
@@ -380,10 +373,10 @@
     // Wrap the file output stream in a zip output stream.
     ZipOutputStream zipStream = new ZipOutputStream(outputStream);
 
-    int    msgID   = MSGID_JEB_BACKUP_ZIP_COMMENT;
-    String message = getMessage(msgID, DynamicConstants.PRODUCT_NAME,
-                                backupID, backendID);
-    zipStream.setComment(message);
+    Message message = ERR_JEB_BACKUP_ZIP_COMMENT.get(
+            DynamicConstants.PRODUCT_NAME,
+            backupID, backendID);
+    zipStream.setComment(message.toString());
 
     if (compress)
     {
@@ -405,10 +398,10 @@
     catch (IOException e)
     {
       assert debugException(CLASS_NAME, "createBackup", e);
-      msgID = MSGID_JEB_CANNOT_CREATE_BACKUP_TAG_FILE;
-      String msg = getMessage(msgID, backupTag, backendDir.getPath());
+      Message msg = ERR_JEB_CANNOT_CREATE_BACKUP_TAG_FILE.get(
+          backupTag, backendDir.getPath());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   msg, msgID);
+                                   msg);
     }
 */
 
@@ -433,11 +426,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID   = MSGID_JEB_BACKUP_CANNOT_LIST_LOG_FILES;
-      message = getMessage(msgID, backendDir.getAbsolutePath(),
-                           stackTraceToSingleLineString(e));
+      message = ERR_JEB_BACKUP_CANNOT_LIST_LOG_FILES.get(
+          backendDir.getAbsolutePath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-          message, msgID, e);
+          message, e);
     }
 
     // Check to see if backend is empty. If so, insert placeholder entry into
@@ -455,11 +447,10 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        msgID   = MSGID_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE;
-        message = getMessage(msgID, ZIPENTRY_EMPTY_PLACEHOLDER,
-            stackTraceToSingleLineString(e));
+        message = ERR_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE.get(
+            ZIPENTRY_EMPTY_PLACEHOLDER, stackTraceToSingleLineString(e));
         throw new DirectoryException(
-            DirectoryServer.getServerErrorResultCode(), message, msgID, e);
+            DirectoryServer.getServerErrorResultCode(), message, e);
       }
     }
 
@@ -484,11 +475,10 @@
           catch (IOException e)
           {
             assert debugException(CLASS_NAME, "createBackup", e);
-            msgID   = MSGID_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE;
-            message = getMessage(msgID, backupTag,
-                                 stackTraceToSingleLineString(e));
+            Message message = ERR_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE.get(
+                backupTag, stackTraceToSingleLineString(e));
             throw new DirectoryException(
-                 DirectoryServer.getServerErrorResultCode(), message, msgID, e);
+                 DirectoryServer.getServerErrorResultCode(), message, e);
           }
         }
       }
@@ -513,10 +503,8 @@
             break;
           }
 
-          msgID = MSGID_JEB_BACKUP_FILE_UNCHANGED;
-          message = getMessage(msgID, logFileName);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                   message, msgID);
+          message = INFO_JEB_BACKUP_FILE_UNCHANGED.get(logFileName);
+          logError(message);
 
           unchangedList.add(logFileName);
 
@@ -537,11 +525,10 @@
             {
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
-            msgID   = MSGID_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE;
-            message = getMessage(msgID, zipEntryName,
-                                 stackTraceToSingleLineString(e));
+            message = ERR_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE.get(
+                zipEntryName, stackTraceToSingleLineString(e));
             throw new DirectoryException(
-                 DirectoryServer.getServerErrorResultCode(), message, msgID, e);
+                 DirectoryServer.getServerErrorResultCode(), message, e);
           }
 
           // Set the dependency.
@@ -579,11 +566,10 @@
             {
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
-            msgID   = MSGID_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE;
-            message = getMessage(msgID, logFile.getName(),
-                                 stackTraceToSingleLineString(e));
+            message = ERR_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE.get(
+                logFile.getName(), stackTraceToSingleLineString(e));
             throw new DirectoryException(
-                 DirectoryServer.getServerErrorResultCode(), message, msgID, e);
+                 DirectoryServer.getServerErrorResultCode(), message, e);
           }
 
           indexCurrent++;
@@ -620,11 +606,10 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            msgID   = MSGID_JEB_BACKUP_CANNOT_LIST_LOG_FILES;
-            message = getMessage(msgID, backendDir.getAbsolutePath(),
-                                 stackTraceToSingleLineString(e));
+            message = ERR_JEB_BACKUP_CANNOT_LIST_LOG_FILES.get(
+                backendDir.getAbsolutePath(), stackTraceToSingleLineString(e));
             throw new DirectoryException(
-                 DirectoryServer.getServerErrorResultCode(), message, msgID, e);
+                 DirectoryServer.getServerErrorResultCode(), message, e);
           }
 
           if (logFiles == null)
@@ -634,10 +619,9 @@
 
           Arrays.sort(logFiles);
 
-          msgID = MSGID_JEB_BACKUP_CLEANER_ACTIVITY;
-          message = getMessage(msgID, logFiles.length);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                   message, msgID);
+          message = INFO_JEB_BACKUP_CLEANER_ACTIVITY.get(
+                  String.valueOf(logFiles.length));
+          logError(message);
         }
         else
         {
@@ -674,11 +658,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID   = MSGID_JEB_BACKUP_CANNOT_CLOSE_ZIP_STREAM;
-      message = getMessage(msgID, archiveFilename, backupDir.getPath(),
-                           stackTraceToSingleLineString(e));
+      message = ERR_JEB_BACKUP_CANNOT_CLOSE_ZIP_STREAM.
+          get(archiveFilename, backupDir.getPath(),
+              stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -719,11 +703,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR;
-      message = getMessage(msgID, backupDir.getDescriptorPath(),
-                           stackTraceToSingleLineString(e));
+      message = ERR_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get(
+          backupDir.getDescriptorPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
   }
 
@@ -776,11 +759,10 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int msgID = MSGID_JEB_BACKUP_CANNOT_RESTORE;
-      String message = getMessage(msgID, backupInfo.getBackupID(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_JEB_BACKUP_CANNOT_RESTORE.get(
+          backupInfo.getBackupID(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
     // Restore any dependencies.
@@ -797,11 +779,10 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        int msgID = MSGID_JEB_BACKUP_CANNOT_RESTORE;
-        String message = getMessage(msgID, dependent.getBackupID(),
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_JEB_BACKUP_CANNOT_RESTORE.get(
+            dependent.getBackupID(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -816,11 +797,10 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int msgID = MSGID_JEB_BACKUP_CANNOT_RESTORE;
-      String message = getMessage(msgID, backupInfo.getBackupID(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_JEB_BACKUP_CANNOT_RESTORE.get(
+          backupInfo.getBackupID(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
     // Delete the current backend directory and rename the restore directory.
@@ -837,11 +817,10 @@
       currentDir.delete();
       if (!restoreDir.renameTo(currentDir))
       {
-        int msgID = MSGID_JEB_CANNOT_RENAME_RESTORE_DIRECTORY;
-        String msg = getMessage(msgID, restoreDir.getPath(),
-                                currentDir.getPath());
+        Message msg = ERR_JEB_CANNOT_RENAME_RESTORE_DIRECTORY.get(
+            restoreDir.getPath(), currentDir.getPath());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     msg, msgID);
+                                     msg);
       }
     }
   }
@@ -880,8 +859,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(),
-                                   e.getMessageID());
+                                   e.getMessageObject());
     }
 
     try
@@ -895,11 +873,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR;
-      String message = getMessage(msgID, backupDir.getDescriptorPath(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get(
+          backupDir.getDescriptorPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
     // Remove the archive file.
@@ -969,11 +946,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_JEB_BACKUP_CANNOT_GET_MAC;
-        String message = getMessage(msgID, macAlgorithm,
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_JEB_BACKUP_CANNOT_GET_MAC.get(
+            macAlgorithm, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -992,11 +968,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_JEB_BACKUP_CANNOT_GET_DIGEST;
-        String message = getMessage(msgID, digestAlgorithm,
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_JEB_BACKUP_CANNOT_GET_DIGEST.get(
+            digestAlgorithm, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -1020,11 +995,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_JEB_BACKUP_CANNOT_GET_CIPHER;
-        String message = getMessage(msgID, cipherAlgorithm,
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
+            cipherAlgorithm, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
       inputStream = new CipherInputStream(inputStream, cipher);
@@ -1104,10 +1078,8 @@
       {
         if (verifyOnly)
         {
-          int msgID = MSGID_JEB_BACKUP_VERIFY_FILE;
-          String message = getMessage(msgID, zipEntry.getName());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                   message, msgID);
+          Message message = INFO_JEB_BACKUP_VERIFY_FILE.get(zipEntry.getName());
+          logError(message);
         }
 
         // The file name is part of the hash.
@@ -1151,11 +1123,9 @@
         {
           outputStream.close();
 
-          int msgID = MSGID_JEB_BACKUP_RESTORED_FILE;
-          String message = getMessage(msgID, zipEntry.getName(),
-                                      totalBytesRead);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                   message, msgID);
+          Message message = INFO_JEB_BACKUP_RESTORED_FILE.get(
+              zipEntry.getName(), totalBytesRead);
+          logError(message);
         }
       }
 
@@ -1169,10 +1139,9 @@
     {
       if (!Arrays.equals(digest.digest(), hash))
       {
-        int    msgID   = MSGID_JEB_BACKUP_UNSIGNED_HASH_ERROR;
-        String message = getMessage(msgID, backupID);
+        Message message = ERR_JEB_BACKUP_UNSIGNED_HASH_ERROR.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -1182,10 +1151,9 @@
 
       if (!Arrays.equals(computedSignHash, signHash))
       {
-        int    msgID   = MSGID_JEB_BACKUP_SIGNED_HASH_ERROR;
-        String message = getMessage(msgID, backupID);
+        Message message = ERR_JEB_BACKUP_SIGNED_HASH_ERROR.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
     }
   }
@@ -1251,10 +1219,8 @@
     // Finish the zip entry.
     zipStream.closeEntry();
 
-    int msgID = MSGID_JEB_BACKUP_ARCHIVED_FILE;
-    String message = getMessage(msgID, zipEntry.getName());
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-             message, msgID);
+    Message message = INFO_JEB_BACKUP_ARCHIVED_FILE.get(zipEntry.getName());
+    logError(message);
 
     return totalBytesRead;
   }
@@ -1364,11 +1330,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_JEB_BACKUP_CANNOT_GET_CIPHER;
-        String message = getMessage(msgID, cipherAlgorithm,
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
+            cipherAlgorithm, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
       inputStream = new CipherInputStream(inputStream, cipher);
@@ -1442,10 +1407,10 @@
     BackupInfo backupInfo = backupDir.getBackupInfo(backupID);
     if (backupInfo == null)
     {
-      int    msgID   = MSGID_JEB_BACKUP_MISSING_BACKUPID;
-      String message = getMessage(msgID, backupDir.getPath(), backupID);
+      Message message =
+          ERR_JEB_BACKUP_MISSING_BACKUPID.get(backupDir.getPath(), backupID);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     return backupInfo;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/DN2URI.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/DN2URI.java
index cb2a7ca..1c06e12 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/DN2URI.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/DN2URI.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 
 import com.sleepycat.je.*;
@@ -56,10 +57,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.JebMessages.
-     MSGID_JEB_REFERRAL_RESULT_MESSAGE;
-import static org.opends.server.messages.MessageHandler.getMessage;
-
+import static org.opends.messages.JebMessages.
+     INFO_JEB_REFERRAL_RESULT_MESSAGE;
 /**
  * This class represents the referral database which contains URIs from referral
  * entries.  The key is the DN of the referral entry and the value is that of a
@@ -460,10 +459,10 @@
     }
 
     // Throw a directory referral exception containing the URIs.
-    int msgID = MSGID_JEB_REFERRAL_RESULT_MESSAGE;
-    String msg = getMessage(msgID, referralDN);
-    throw new DirectoryException(ResultCode.REFERRAL, msg, msgID,
-                                 referralDN, URIList, null);
+    Message msg =
+        INFO_JEB_REFERRAL_RESULT_MESSAGE.get(String.valueOf(referralDN));
+    throw new DirectoryException(
+            ResultCode.REFERRAL, msg, referralDN, URIList, null);
   }
 
   /**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
index f66a598..c6fe728 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import com.sleepycat.je.*;
 
@@ -54,8 +55,9 @@
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.JebMessages.*;
+import static org.opends.messages.JebMessages.*;
+
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.util.ServerConstants.*;
@@ -214,8 +216,9 @@
     /**
      * {@inheritDoc}
      */
-    public boolean isConfigurationAddAcceptable(JEIndexCfg cfg,
-                                               List<String> unacceptableReasons)
+    public boolean isConfigurationAddAcceptable(
+            JEIndexCfg cfg,
+            List<Message> unacceptableReasons)
     {
       // TODO: validate more before returning true?
       return true;
@@ -228,7 +231,7 @@
     {
       ConfigChangeResult ccr;
       boolean adminActionRequired = false;
-      ArrayList<String> messages = new ArrayList<String>();
+      List<Message> messages = new ArrayList<Message>();
 
       try
       {
@@ -239,7 +242,7 @@
       }
       catch(Exception e)
       {
-        messages.add(StaticUtils.stackTraceToSingleLineString(e));
+        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(e)));
         ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                      adminActionRequired,
                                      messages);
@@ -247,8 +250,8 @@
       }
 
       adminActionRequired = true;
-      int msgID = MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-      messages.add(getMessage(msgID, cfg.getIndexAttribute().getNameOrOID()));
+      messages.add(NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(
+              cfg.getIndexAttribute().getNameOrOID()));
       return new ConfigChangeResult(ResultCode.SUCCESS, adminActionRequired,
                                     messages);
     }
@@ -257,7 +260,7 @@
      * {@inheritDoc}
      */
     public synchronized boolean isConfigurationDeleteAcceptable(
-        JEIndexCfg cfg, List<String> unacceptableReasons)
+        JEIndexCfg cfg, List<Message> unacceptableReasons)
     {
       // TODO: validate more before returning true?
       return true;
@@ -270,7 +273,7 @@
     {
       ConfigChangeResult ccr;
       boolean adminActionRequired = false;
-      ArrayList<String> messages = new ArrayList<String>();
+      ArrayList<Message> messages = new ArrayList<Message>();
 
       exclusiveLock.lock();
       try
@@ -281,7 +284,7 @@
       }
       catch(DatabaseException de)
       {
-        messages.add(StaticUtils.stackTraceToSingleLineString(de));
+        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
         ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                      adminActionRequired,
                                      messages);
@@ -309,7 +312,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationAddAcceptable(
-        VLVJEIndexCfg cfg, List<String> unacceptableReasons)
+        VLVJEIndexCfg cfg, List<Message> unacceptableReasons)
     {
       // TODO: validate more before returning true?
       return true;
@@ -322,7 +325,7 @@
     {
       ConfigChangeResult ccr;
       boolean adminActionRequired = false;
-      ArrayList<String> messages = new ArrayList<String>();
+      ArrayList<Message> messages = new ArrayList<Message>();
 
       try
       {
@@ -332,7 +335,7 @@
       }
       catch(Exception e)
       {
-        messages.add(StaticUtils.stackTraceToSingleLineString(e));
+        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(e)));
         ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                      adminActionRequired,
                                      messages);
@@ -340,8 +343,9 @@
       }
 
       adminActionRequired = true;
-      int msgID = MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-      messages.add(getMessage(msgID, cfg.getVLVIndexName()));
+
+      messages.add(NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(
+              cfg.getVLVIndexName()));
       return new ConfigChangeResult(ResultCode.SUCCESS, adminActionRequired,
                                     messages);
     }
@@ -349,8 +353,9 @@
     /**
      * {@inheritDoc}
      */
-    public boolean isConfigurationDeleteAcceptable(VLVJEIndexCfg cfg,
-                                               List<String> unacceptableReasons)
+    public boolean isConfigurationDeleteAcceptable(
+            VLVJEIndexCfg cfg,
+            List<Message> unacceptableReasons)
     {
       // TODO: validate more before returning true?
       return true;
@@ -363,7 +368,7 @@
     {
       ConfigChangeResult ccr;
       boolean adminActionRequired = false;
-      ArrayList<String> messages = new ArrayList<String>();
+      List<Message> messages = new ArrayList<Message>();
 
       exclusiveLock.lock();
       try
@@ -376,7 +381,7 @@
       }
       catch(DatabaseException de)
       {
-        messages.add(StaticUtils.stackTraceToSingleLineString(de));
+        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
         ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                      adminActionRequired,
                                      messages);
@@ -740,15 +745,15 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                           e.getMessage(), e.getMessageID(), e);
+                                           e.getMessageObject(), e);
             }
 
             if (vlvRequest != null)
             {
-              int    msgID   = MSGID_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV;
-              String message = getMessage(msgID);
+              Message message =
+                  ERR_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV.get();
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -768,7 +773,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                           e.getMessage(), e.getMessageID(), e);
+                                           e.getMessageObject(), e);
             }
           }
         }
@@ -788,15 +793,15 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                           e.getMessage(), e.getMessageID(), e);
+                                           e.getMessageObject(), e);
             }
 
             if (pageRequest != null)
             {
-              int    msgID   = MSGID_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV;
-              String message = getMessage(msgID);
+              Message message =
+                  ERR_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV.get();
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -840,11 +845,10 @@
         dn2uri.targetEntryReferrals(searchOperation.getBaseDN(),
                                     searchOperation.getScope());
 
-        int messageID = MSGID_JEB_SEARCH_NO_SUCH_OBJECT;
-        String message = getMessage(messageID, baseDN.toString());
+        Message message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString());
         DN matchedDN = getMatchedDN(baseDN);
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-            message, messageID, matchedDN, null);
+            message, matchedDN, null);
       }
 
       if (!isManageDsaITOperation(searchOperation))
@@ -928,11 +932,11 @@
         EntryID baseID = dn2id.get(null, baseDN);
         if (baseID == null)
         {
-          int messageID = MSGID_JEB_SEARCH_NO_SUCH_OBJECT;
-          String message = getMessage(messageID, baseDN.toString());
+          Message message =
+                  ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString());
           DN matchedDN = getMatchedDN(baseDN);
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-              message, messageID, matchedDN, null);
+              message, matchedDN, null);
         }
         DatabaseEntry baseIDData = baseID.getDatabaseEntry();
 
@@ -1038,10 +1042,10 @@
       if(! clientConnection.hasPrivilege(Privilege.UNINDEXED_SEARCH,
                                          searchOperation))
       {
-        int msgID = MSGID_JEB_SEARCH_UNINDEXED_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message =
+            ERR_JEB_SEARCH_UNINDEXED_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
 
       if (sortRequest != null)
@@ -1054,11 +1058,9 @@
 
         if (sortRequest.isCritical())
         {
-          int msgID = MSGID_JEB_SEARCH_CANNOT_SORT_UNINDEXED;
-          String message = getMessage(msgID);
+          Message message = ERR_JEB_SEARCH_CANNOT_SORT_UNINDEXED.get();
           throw new DirectoryException(
-                         ResultCode.UNAVAILABLE_CRITICAL_EXTENSION, message,
-                         msgID);
+                         ResultCode.UNAVAILABLE_CRITICAL_EXTENSION, message);
         }
       }
 
@@ -1119,11 +1121,10 @@
         dn2uri.targetEntryReferrals(searchOperation.getBaseDN(),
                                     searchOperation.getScope());
 
-        int messageID = MSGID_JEB_SEARCH_NO_SUCH_OBJECT;
-        String message = getMessage(messageID, baseDN.toString());
+        Message message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString());
         DN matchedDN = getMatchedDN(baseDN);
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-            message, messageID, matchedDN, null);
+            message, matchedDN, null);
       }
 
       if (!manageDsaIT)
@@ -1194,11 +1195,10 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        int msgID = MSGID_JEB_INVALID_PAGED_RESULTS_COOKIE;
         String str = StaticUtils.bytesToHex(pageRequest.getCookie().value());
-        String msg = getMessage(msgID, str);
+        Message msg = ERR_JEB_INVALID_PAGED_RESULTS_COOKIE.get(str);
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                     msg, msgID, e);
+                                     msg, e);
       }
     }
     else
@@ -1233,8 +1233,7 @@
             //Lookthrough limit exceeded
             searchOperation.setResultCode(ResultCode.ADMIN_LIMIT_EXCEEDED);
             searchOperation.appendErrorMessage(
-              getMessage(MSGID_JEB_LOOKTHROUGH_LIMIT_EXCEEDED,
-              lookthroughLimit));
+              INFO_JEB_LOOKTHROUGH_LIMIT_EXCEEDED.get(lookthroughLimit));
             return;
           }
           int cmp = dn2id.getComparator().compare(key.getData(), end);
@@ -1404,11 +1403,10 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        int msgID = MSGID_JEB_INVALID_PAGED_RESULTS_COOKIE;
         String str = StaticUtils.bytesToHex(pageRequest.getCookie().value());
-        String msg = getMessage(msgID, str);
+        Message msg = ERR_JEB_INVALID_PAGED_RESULTS_COOKIE.get(str);
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                     msg, msgID, e);
+                                     msg, e);
       }
     }
     else
@@ -1428,7 +1426,7 @@
       //Lookthrough limit exceeded
       searchOperation.setResultCode(ResultCode.ADMIN_LIMIT_EXCEEDED);
       searchOperation.appendErrorMessage(
-          getMessage(MSGID_JEB_LOOKTHROUGH_LIMIT_EXCEEDED, lookthroughLimit));
+          INFO_JEB_LOOKTHROUGH_LIMIT_EXCEEDED.get(lookthroughLimit));
       continueSearch = false;
     }
 
@@ -1580,11 +1578,10 @@
 
       if (!entryExists(baseDN))
       {
-        int messageID = MSGID_JEB_SEARCH_NO_SUCH_OBJECT;
-        String message = getMessage(messageID, baseDN.toString());
+        Message message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString());
         DN matchedDN = getMatchedDN(baseDN);
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-            message, messageID, matchedDN, null);
+            message, matchedDN, null);
       }
     }
 
@@ -1685,9 +1682,8 @@
       {
         EntryContainer.transactionAbort(txn);
 
-        int messageID = MSGID_JEB_UNCHECKED_EXCEPTION;
-        String message = getMessage(messageID);
-        throw new JebException(messageID, message, e);
+        Message message = ERR_JEB_UNCHECKED_EXCEPTION.get();
+        throw new JebException(message, e);
       }
     }
 
@@ -1790,10 +1786,10 @@
       // Check whether the entry already exists.
       if (dn2id.get(txn, entry.getDN()) != null)
       {
-        int msgID = MSGID_JEB_ADD_ENTRY_ALREADY_EXISTS;
-        String message = getMessage(msgID, entry.getDN().toString());
+        Message message =
+            ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getDN().toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
-                                     message, msgID);
+                                     message);
       }
 
       // Check that the parent entry exists.
@@ -1807,11 +1803,11 @@
         parentID = dn2id.get(txn, parentDN);
         if (parentID == null)
         {
-          int msgID = MSGID_JEB_ADD_NO_SUCH_OBJECT;
-          String message = getMessage(msgID, entry.getDN().toString());
+          Message message = ERR_JEB_ADD_NO_SUCH_OBJECT.get(
+                  entry.getDN().toString());
           DN matchedDN = getMatchedDN(baseDN);
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-              message, msgID, matchedDN, null);
+              message, matchedDN, null);
         }
       }
 
@@ -1825,30 +1821,30 @@
       if (!dn2id.insert(txn, entry.getDN(), entryID))
       {
         // Do not ever expect to come through here.
-        int msgID = MSGID_JEB_ADD_ENTRY_ALREADY_EXISTS;
-        String message = getMessage(msgID, entry.getDN().toString());
+        Message message =
+            ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getDN().toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
-                                     message, msgID);
+                                     message);
       }
 
       // Update the referral database for referral entries.
       if (!dn2uri.addEntry(txn, entry))
       {
         // Do not ever expect to come through here.
-        int msgID = MSGID_JEB_ADD_ENTRY_ALREADY_EXISTS;
-        String message = getMessage(msgID, entry.getDN().toString());
+        Message message =
+            ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getDN().toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
-                                     message, msgID);
+                                     message);
       }
 
       // Insert into id2entry.
       if (!id2entry.insert(txn, entryID, entry))
       {
         // Do not ever expect to come through here.
-        int msgID = MSGID_JEB_ADD_ENTRY_ALREADY_EXISTS;
-        String message = getMessage(msgID, entry.getDN().toString());
+        Message message =
+            ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getDN().toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
-                                     message, msgID);
+                                     message);
       }
 
       // Insert into the indexes, in index configuration order.
@@ -1874,9 +1870,9 @@
           EntryID nodeID = dn2id.get(txn, dn);
           if (nodeID == null)
           {
-            int msgID = MSGID_JEB_MISSING_DN2ID_RECORD;
-            String msg = getMessage(msgID, dn.toNormalizedString());
-            throw new JebException(msgID, msg);
+            Message msg =
+                ERR_JEB_MISSING_DN2ID_RECORD.get(dn.toNormalizedString());
+            throw new JebException(msg);
           }
 
           // Insert into id2subtree for this node.
@@ -1929,13 +1925,11 @@
 
       if (operation.adminSizeLimitExceeded())
       {
-        String message = getMessage(
-                MSGID_JEB_SUBTREE_DELETE_SIZE_LIMIT_EXCEEDED,
-                                  operation.getDeletedEntryCount());
+        Message message = NOTE_JEB_SUBTREE_DELETE_SIZE_LIMIT_EXCEEDED.get(
+                operation.getDeletedEntryCount());
         throw new DirectoryException(
           ResultCode.ADMIN_LIMIT_EXCEEDED,
-          message,
-          MSGID_JEB_SUBTREE_DELETE_SIZE_LIMIT_EXCEEDED);
+          message);
       }
       if(operation.batchSizeExceeded())
       {
@@ -1943,9 +1937,9 @@
         continue;
       }
       isComplete = true;
-      String message = getMessage(MSGID_JEB_DELETED_ENTRY_COUNT,
-                                operation.getDeletedEntryCount());
-      StringBuilder errorMessage = new StringBuilder();
+      Message message =
+          NOTE_JEB_DELETED_ENTRY_COUNT.get(operation.getDeletedEntryCount());
+      MessageBuilder errorMessage = new MessageBuilder();
       errorMessage.append(message);
       deleteOperation.setErrorMessage(errorMessage);
     }
@@ -1978,20 +1972,18 @@
     Entry entry = id2entry.get(txn, leafID);
     if (entry == null)
     {
-      int msgID = MSGID_JEB_MISSING_ID2ENTRY_RECORD;
-      String msg = getMessage(msgID, leafID.toString());
-      throw new JebException(msgID, msg);
+      Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString());
+      throw new JebException(msg);
     }
 
     // Remove from dn2id.
     if (!dn2id.remove(txn, leafDN))
     {
       // Do not expect to ever come through here.
-      int msgID = MSGID_JEB_DELETE_NO_SUCH_OBJECT;
-      String message = getMessage(msgID, leafDN.toString());
+      Message message = ERR_JEB_DELETE_NO_SUCH_OBJECT.get(leafDN.toString());
       DN matchedDN = getMatchedDN(baseDN);
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-          message, msgID, matchedDN, null);
+          message, matchedDN, null);
     }
 
     // Update the referral database.
@@ -2000,9 +1992,8 @@
     // Remove from id2entry.
     if (!id2entry.remove(txn, leafID))
     {
-      int msgID = MSGID_JEB_MISSING_ID2ENTRY_RECORD;
-      String msg = getMessage(msgID, leafID.toString());
-      throw new JebException(msgID, msg);
+      Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString());
+      throw new JebException(msg);
     }
 
     // Remove from the indexes, in index config order.
@@ -2018,10 +2009,10 @@
     }
     else if (children.size() != 0)
     {
-      int msgID = MSGID_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF;
-      String message = getMessage(msgID, leafDN.toString());
+      Message message =
+          ERR_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF.get(leafDN.toString());
       throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF,
-                                   message, msgID);
+                                   message);
     }
 
     // Make sure this entry either has no subordinates in id2subtree,
@@ -2033,10 +2024,10 @@
     }
     else if (subordinates.size() != 0)
     {
-      int msgID = MSGID_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF;
-      String message = getMessage(msgID, leafDN.toString());
+      Message message =
+          ERR_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF.get(leafDN.toString());
       throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF,
-                                   message, msgID);
+                                   message);
     }
 
     // Iterate up through the superior entries.
@@ -2048,9 +2039,8 @@
       EntryID nodeID = dn2id.get(txn, dn);
       if (nodeID == null)
       {
-        int msgID = MSGID_JEB_MISSING_DN2ID_RECORD;
-        String msg = getMessage(msgID, dn.toNormalizedString());
-        throw new JebException(msgID, msg);
+        Message msg = ERR_JEB_MISSING_DN2ID_RECORD.get(dn.toNormalizedString());
+        throw new JebException(msg);
       }
       DatabaseEntry nodeIDData = nodeID.getDatabaseEntry();
 
@@ -2093,20 +2083,18 @@
     EntryID leafID = dn2id.get(txn, leafDN);
     if (leafID == null)
     {
-      int msgID = MSGID_JEB_DELETE_NO_SUCH_OBJECT;
-      String message = getMessage(msgID, leafDN.toString());
+      Message message = ERR_JEB_DELETE_NO_SUCH_OBJECT.get(leafDN.toString());
       DN matchedDN = getMatchedDN(baseDN);
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-          message, msgID, matchedDN, null);
+          message, matchedDN, null);
     }
 
     // Check that the entry exists in id2entry and read its contents.
     Entry entry = id2entry.get(txn, leafID);
     if (entry == null)
     {
-      int msgID = MSGID_JEB_MISSING_ID2ENTRY_RECORD;
-      String msg = getMessage(msgID, leafID.toString());
-      throw new JebException(msgID, msg);
+      Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString());
+      throw new JebException(msg);
     }
 
     if (!manageDsaIT)
@@ -2118,11 +2106,10 @@
     if (!dn2id.remove(txn, leafDN))
     {
       // Do not expect to ever come through here.
-      int msgID = MSGID_JEB_DELETE_NO_SUCH_OBJECT;
-      String message = getMessage(msgID, leafDN.toString());
+      Message message = ERR_JEB_DELETE_NO_SUCH_OBJECT.get(leafDN.toString());
       DN matchedDN = getMatchedDN(baseDN);
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-          message, msgID, matchedDN, null);
+          message, matchedDN, null);
     }
 
     // Update the referral database.
@@ -2131,9 +2118,8 @@
     // Remove from id2entry.
     if (!id2entry.remove(txn, leafID))
     {
-      int msgID = MSGID_JEB_MISSING_ID2ENTRY_RECORD;
-      String msg = getMessage(msgID, leafID.toString());
-      throw new JebException(msgID, msg);
+      Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString());
+      throw new JebException(msg);
     }
 
     // Remove from the indexes, in index config order.
@@ -2148,9 +2134,8 @@
       EntryID nodeID = dn2id.get(txn, dn);
       if (nodeID == null)
       {
-        int msgID = MSGID_JEB_MISSING_DN2ID_RECORD;
-        String msg = getMessage(msgID, dn.toNormalizedString());
-        throw new JebException(msgID, msg);
+        Message msg = ERR_JEB_MISSING_DN2ID_RECORD.get(dn.toNormalizedString());
+        throw new JebException(msg);
       }
       DatabaseEntry nodeIDData = nodeID.getDatabaseEntry();
 
@@ -2360,10 +2345,10 @@
           {
             // The subtree delete control was not specified and
             // the target entry is not a leaf.
-            int msgID = MSGID_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF;
-            String message = getMessage(msgID, entryDN.toString());
+            Message message =
+                ERR_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF.get(entryDN.toString());
             throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF,
-                                         message, msgID);
+                                         message);
           }
 
           // Enforce any subtree delete size limit.
@@ -2642,9 +2627,8 @@
       if (entry == null)
       {
         // The entryID does not exist.
-        int msgID = MSGID_JEB_MISSING_ID2ENTRY_RECORD;
-        String msg = getMessage(msgID, entryID.toString());
-        throw new JebException(msgID, msg);
+        Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(entryID.toString());
+        throw new JebException(msg);
       }
 
     }
@@ -2828,11 +2812,11 @@
       if (entryID == null)
       {
         // The entry does not exist.
-        int msgID = MSGID_JEB_MODIFY_NO_SUCH_OBJECT;
-        String message = getMessage(msgID, entry.getDN().toString());
+        Message message =
+                ERR_JEB_MODIFY_NO_SUCH_OBJECT.get(entry.getDN().toString());
         DN matchedDN = getMatchedDN(baseDN);
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-            message, msgID, matchedDN, null);
+            message, matchedDN, null);
       }
 
       // Read id2entry for the original entry.
@@ -2840,9 +2824,8 @@
       if (originalEntry == null)
       {
         // The entry does not exist.
-        int msgID = MSGID_JEB_MISSING_ID2ENTRY_RECORD;
-        String msg = getMessage(msgID, entryID.toString());
-        throw new JebException(msgID, msg);
+        Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(entryID.toString());
+        throw new JebException(msg);
       }
 
       if (!isManageDsaITOperation(modifyOperation))
@@ -3011,10 +2994,10 @@
       // Check whether the renamed entry already exists.
       if (dn2id.get(txn, newApexEntry.getDN()) != null)
       {
-        int msgID = MSGID_JEB_MODIFYDN_ALREADY_EXISTS;
-        String message = getMessage(msgID, newApexEntry.getDN().toString());
+        Message message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get(
+            newApexEntry.getDN().toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
-                                     message, msgID);
+                                     message);
       }
 
       EntryID oldApexID = dn2id.get(txn, oldApexDN);
@@ -3023,19 +3006,18 @@
         // Check for referral entries above the target entry.
         dn2uri.targetEntryReferrals(oldApexDN, null);
 
-        int messageID = MSGID_JEB_MODIFYDN_NO_SUCH_OBJECT;
-        String message = getMessage(messageID, oldApexDN.toString());
+        Message message =
+                ERR_JEB_MODIFYDN_NO_SUCH_OBJECT.get(oldApexDN.toString());
         DN matchedDN = getMatchedDN(baseDN);
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-            message, messageID, matchedDN, null);
+            message, matchedDN, null);
       }
 
       Entry oldApexEntry = id2entry.get(txn, oldApexID);
       if (oldApexEntry == null)
       {
-        int msgID = MSGID_JEB_MISSING_ID2ENTRY_RECORD;
-        String msg = getMessage(msgID, oldApexID.toString());
-        throw new JebException(msgID, msg);
+        Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(oldApexID.toString());
+        throw new JebException(msg);
       }
 
       if (!isManageDsaITOperation(modifyDNOperation))
@@ -3057,11 +3039,12 @@
         EntryID newSuperiorID = dn2id.get(txn, newSuperiorDN);
         if (newSuperiorID == null)
         {
-          int msgID = MSGID_JEB_NEW_SUPERIOR_NO_SUCH_OBJECT;
-          String msg = getMessage(msgID, newSuperiorDN.toString());
+          Message msg =
+                  ERR_JEB_NEW_SUPERIOR_NO_SUCH_OBJECT.get(
+                          newSuperiorDN.toString());
           DN matchedDN = getMatchedDN(baseDN);
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
-              msg, msgID, matchedDN, null);
+              msg, matchedDN, null);
         }
 
         if (newSuperiorID.compareTo(oldApexID) > 0)
@@ -3212,10 +3195,9 @@
       // Insert the new DN in dn2id.
       if (!dn2id.insert(txn, newDN, newID))
       {
-        int msgID = MSGID_JEB_MODIFYDN_ALREADY_EXISTS;
-        String message = getMessage(msgID, newDN.toString());
+        Message message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get(newDN.toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
-                                     message, msgID);
+                                     message);
       }
 
       // Update any referral records.
@@ -3317,10 +3299,9 @@
       // Insert the new DN in dn2id.
       if (!dn2id.insert(txn, newDN, entryID))
       {
-        int msgID = MSGID_JEB_MODIFYDN_ALREADY_EXISTS;
-        String message = getMessage(msgID, newDN.toString());
+        Message message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get(newDN.toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
-                                     message, msgID);
+                                     message);
       }
 
       // Update any referral records.
@@ -3380,10 +3361,9 @@
       // Put the new DN in dn2id.
       if (!dn2id.insert(txn, newDN, newID))
       {
-        int msgID = MSGID_JEB_MODIFYDN_ALREADY_EXISTS;
-        String message = getMessage(msgID, newDN.toString());
+        Message message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get(newDN.toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
-                                     message, msgID);
+                                     message);
       }
 
       // Delete any existing referral records for the old DN.
@@ -3429,29 +3409,27 @@
         if (pluginResult.connectionTerminated() ||
             pluginResult.abortModifyDNOperation())
         {
-          int    msgID   = MSGID_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN;
-          String message = getMessage(msgID, oldDN.toString(),
-                                      newDN.toString());
+          Message message = ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN.get(
+                  oldDN.toString(), newDN.toString());
           throw new DirectoryException(
-                         DirectoryServer.getServerErrorResultCode(), message,
-                         msgID);
+                  DirectoryServer.getServerErrorResultCode(), message);
         }
 
         if (! modifications.isEmpty())
         {
           indexModifications(txn, oldEntry, newEntry, newID, modifications);
 
-          StringBuilder invalidReason = new StringBuilder();
+          MessageBuilder invalidReason = new MessageBuilder();
           if (! newEntry.conformsToSchema(null, false, false, false,
                                           invalidReason))
           {
-            int msgID = MSGID_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_SCHEMA_ERROR;
-            String message = getMessage(msgID, oldDN.toString(),
-                                        newDN.toString(),
-                                        invalidReason.toString());
+            Message message =
+                    ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_SCHEMA_ERROR.get(
+                            oldDN.toString(),
+                            newDN.toString(),
+                            invalidReason.toString());
             throw new DirectoryException(
-                           DirectoryServer.getServerErrorResultCode(), message,
-                           msgID);
+                           DirectoryServer.getServerErrorResultCode(), message);
           }
         }
       }
@@ -3529,10 +3507,9 @@
       // Insert the new DN in dn2id.
       if (!dn2id.insert(txn, newDN, entryID))
       {
-        int msgID = MSGID_JEB_MODIFYDN_ALREADY_EXISTS;
-        String message = getMessage(msgID, newDN.toString());
+        Message message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get(newDN.toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
-                                     message, msgID);
+                                     message);
       }
 
       // Delete any existing referral records for the old DN.
@@ -3563,29 +3540,26 @@
         if (pluginResult.connectionTerminated() ||
             pluginResult.abortModifyDNOperation())
         {
-          int    msgID   = MSGID_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN;
-          String message = getMessage(msgID, oldDN.toString(),
-                                      newDN.toString());
+          Message message = ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN.get(
+                  oldDN.toString(), newDN.toString());
           throw new DirectoryException(
-                  DirectoryServer.getServerErrorResultCode(),
-                                       message, msgID);
+                  DirectoryServer.getServerErrorResultCode(), message);
         }
 
         if (! modifications.isEmpty())
         {
           indexModifications(txn, oldEntry, newEntry, entryID, modifications);
 
-          StringBuilder invalidReason = new StringBuilder();
+          MessageBuilder invalidReason = new MessageBuilder();
           if (! newEntry.conformsToSchema(null, false, false, false,
                                           invalidReason))
           {
-            int msgID = MSGID_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_SCHEMA_ERROR;
-            String message = getMessage(msgID, oldDN.toString(),
-                                        newDN.toString(),
-                                        invalidReason.toString());
+            Message message =
+                    ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_SCHEMA_ERROR.get(
+                            oldDN.toString(), newDN.toString(),
+                            invalidReason.toString());
             throw new DirectoryException(
-                           DirectoryServer.getServerErrorResultCode(), message,
-                           msgID);
+                           DirectoryServer.getServerErrorResultCode(), message);
           }
         }
       }
@@ -4172,9 +4146,8 @@
         {
           transactionAbort(txn);
 
-          int messageID = MSGID_JEB_UNCHECKED_EXCEPTION;
-          String message = getMessage(messageID);
-          throw new JebException(messageID, message, e);
+          Message message = ERR_JEB_UNCHECKED_EXCEPTION.get();
+          throw new JebException(message, e);
         }
       }
       else
@@ -4231,7 +4204,7 @@
    * {@inheritDoc}
    */
   public synchronized boolean isConfigurationChangeAcceptable(
-      JEBackendCfg cfg, List<String> unacceptableReasons)
+      JEBackendCfg cfg, List<Message> unacceptableReasons)
   {
     // This is always true because only all config attributes used
     // by the entry container should be validated by the admin framework.
@@ -4245,23 +4218,25 @@
       JEBackendCfg cfg)
   {
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     if(config.getBackendIndexEntryLimit() != cfg.getBackendIndexEntryLimit())
     {
       if(id2children.setIndexEntryLimit(cfg.getBackendIndexEntryLimit()))
       {
         adminActionRequired = true;
-        int msgID = MSGID_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD;
-        String message = getMessage(msgID, id2children.getName());
+        Message message =
+                NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
+                        id2children.getName());
         messages.add(message);
       }
 
       if(id2subtree.setIndexEntryLimit(cfg.getBackendIndexEntryLimit()))
       {
         adminActionRequired = true;
-        int msgID = MSGID_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD;
-        String message = getMessage(msgID, id2subtree.getName());
+        Message message =
+                NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
+                        id2subtree.getName());
         messages.add(message);
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryIDSetSorter.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryIDSetSorter.java
index fd4b3dc..b518625 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryIDSetSorter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EntryIDSetSorter.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 
 
@@ -47,8 +48,7 @@
 import org.opends.server.types.SearchScope;
 import org.opends.server.types.SortOrder;
 
-import static org.opends.server.messages.JebMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.JebMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -110,11 +110,10 @@
       }
       catch (Exception e)
       {
-        int msgID = MSGID_ENTRYIDSORTER_CANNOT_EXAMINE_ENTRY;
-        String message = getMessage(msgID, String.valueOf(id),
-                                    getExceptionMessage(e));
+        Message message = ERR_ENTRYIDSORTER_CANNOT_EXAMINE_ENTRY.get(
+            String.valueOf(id), getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -139,10 +138,9 @@
                new VLVResponseControl(targetOffset, sortMap.size(),
                                       LDAPResultCode.OFFSET_RANGE_ERROR));
 
-          int    msgID   = MSGID_ENTRYIDSORTER_NEGATIVE_START_POS;
-          String message = getMessage(msgID);
+          Message message = ERR_ENTRYIDSORTER_NEGATIVE_START_POS.get();
           throw new DirectoryException(ResultCode.VIRTUAL_LIST_VIEW_ERROR,
-                                       message, msgID);
+                                       message);
         }
         else if (targetOffset == 0)
         {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EnvManager.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EnvManager.java
index 0aa6128..64aa3af 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EnvManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EnvManager.java
@@ -25,15 +25,15 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.JebMessages.MSGID_JEB_CREATE_FAIL;
-import static org.opends.server.messages.JebMessages.
-     MSGID_JEB_DIRECTORY_INVALID;
-import static org.opends.server.messages.JebMessages.MSGID_JEB_REMOVE_FAIL;
+import static org.opends.messages.JebMessages.ERR_JEB_CREATE_FAIL;
+import static org.opends.messages.JebMessages.
+     ERR_JEB_DIRECTORY_INVALID;
+import static org.opends.messages.JebMessages.ERR_JEB_REMOVE_FAIL;
 
 import java.io.File;
 import java.io.FilenameFilter;
@@ -87,8 +87,8 @@
     {
       if (!dir.isDirectory())
       {
-        String message = getMessage(MSGID_JEB_DIRECTORY_INVALID, homeDir);
-        throw new JebException(MSGID_JEB_DIRECTORY_INVALID, message);
+        Message message = ERR_JEB_DIRECTORY_INVALID.get(homeDir);
+        throw new JebException(message);
       }
       removeFiles(homeDir);
     }
@@ -104,8 +104,8 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        String message = getMessage(MSGID_JEB_CREATE_FAIL, e.getMessage());
-        throw new JebException(MSGID_JEB_CREATE_FAIL, message, e);
+        Message message = ERR_JEB_CREATE_FAIL.get(e.getMessage());
+        throw new JebException(message, e);
       }
     }
   }
@@ -123,8 +123,8 @@
     File dir = new File(homeDir);
     if (!dir.isDirectory())
     {
-      String message = getMessage(MSGID_JEB_DIRECTORY_INVALID, homeDir);
-      throw new JebException(MSGID_JEB_DIRECTORY_INVALID, message);
+      Message message = ERR_JEB_DIRECTORY_INVALID.get(homeDir);
+      throw new JebException(message);
     }
 
     try
@@ -141,8 +141,8 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      String message = getMessage(MSGID_JEB_REMOVE_FAIL, e.getMessage());
-      throw new JebException(MSGID_JEB_REMOVE_FAIL, message, e);
+      Message message = ERR_JEB_REMOVE_FAIL.get(e.getMessage());
+      throw new JebException(message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ExportJob.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ExportJob.java
index c201a5f..ae3c991 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ExportJob.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ExportJob.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import com.sleepycat.je.Cursor;
 import com.sleepycat.je.CursorConfig;
@@ -35,8 +36,6 @@
 
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.LDIFExportConfig;
 import org.opends.server.util.LDIFException;
 import org.opends.server.util.StaticUtils;
@@ -45,11 +44,10 @@
 import java.util.*;
 
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.JebMessages.*;
+import static org.opends.messages.JebMessages.*;
 
 /**
  * Export a JE backend to LDIF.
@@ -171,11 +169,9 @@
       rate = 1000f*exportedCount / totalTime;
     }
 
-    int msgID = MSGID_JEB_EXPORT_FINAL_STATUS;
-    String message = getMessage(msgID, exportedCount, skippedCount,
-                                totalTime/1000, rate);
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-             message, msgID);
+    Message message = INFO_JEB_EXPORT_FINAL_STATUS.get(
+        exportedCount, skippedCount, totalTime/1000, rate);
+    logError(message);
 
   }
 
@@ -305,10 +301,9 @@
 
       float rate = 1000f*deltaCount / deltaTime;
 
-      int msgID = MSGID_JEB_EXPORT_PROGRESS_REPORT;
-      String message = getMessage(msgID, latestCount, skippedCount, rate);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-               message, msgID);
+      Message message =
+          INFO_JEB_EXPORT_PROGRESS_REPORT.get(latestCount, skippedCount, rate);
+      logError(message);
 
       previousCount = latestCount;
       previousTime = latestTime;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ID2Entry.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ID2Entry.java
index 1cd8fd1..237c0f3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ID2Entry.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ID2Entry.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.JebMessages.*;
+import static org.opends.messages.JebMessages.*;
 
 import com.sleepycat.je.*;
 
@@ -246,18 +246,17 @@
         }
         catch (Exception e)
         {
-          int msgID = MSGID_JEB_ENTRY_DATABASE_CORRUPT;
-          String message = getMessage(msgID, id.toString());
-          throw new JebException(msgID, message);
+          Message message = ERR_JEB_ENTRY_DATABASE_CORRUPT.get(id.toString());
+          throw new JebException(message);
         }
         break;
 
       //case 0x00                     :
       //  Call upgrade method? Call 0x00 decode method?
       default   :
-        int msgID = MSGID_JEB_INCOMPATIBLE_ENTRY_VERSION;
-        String message = getMessage(msgID, id.toString(), entryVersion);
-        throw new JebException(msgID, message);
+        Message message =
+            ERR_JEB_INCOMPATIBLE_ENTRY_VERSION.get(id.toString(), entryVersion);
+        throw new JebException(message);
     }
 
     if (entry != null)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ImportJob.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
index f53fdbc..8b0ef2f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
@@ -25,16 +25,15 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import com.sleepycat.je.*;
 
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.messages.JebMessages;
+import org.opends.messages.JebMessages;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.LDIFImportResult;
 import org.opends.server.types.ResultCode;
@@ -50,15 +49,14 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.TimeUnit;
 
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_IMPORT_ENTRY_EXISTS;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_IMPORT_PARENT_NOT_FOUND;
+import static org.opends.messages.JebMessages.
+    WARN_JEB_IMPORT_ENTRY_EXISTS;
+import static org.opends.messages.JebMessages.
+    ERR_JEB_IMPORT_PARENT_NOT_FOUND;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.JebMessages.*;
+import static org.opends.messages.JebMessages.*;
 import org.opends.server.admin.std.server.JEBackendCfg;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.config.ConfigException;
@@ -180,8 +178,7 @@
       importPassSize = Integer.MAX_VALUE;
     }
 
-    int msgID;
-    String message;
+    Message message;
     long startTime;
 
     try
@@ -192,21 +189,17 @@
       long bufferSize = config.getBackendImportBufferSize() /
           (importThreadCount*rootContainer.getBaseDNs().size());
 
-      msgID = MSGID_JEB_IMPORT_THREAD_COUNT;
-      message = getMessage(msgID, importThreadCount);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-               message, msgID);
+      message = INFO_JEB_IMPORT_THREAD_COUNT.get(importThreadCount);
+      logError(message);
 
       if (debugEnabled())
       {
-        msgID = MSGID_JEB_IMPORT_BUFFER_SIZE;
-        message = getMessage(msgID, bufferSize);
-        TRACER.debugInfo(message);
 
-        msgID = MSGID_JEB_IMPORT_ENVIRONMENT_CONFIG;
-        message = getMessage(msgID,
-                             rootContainer.getEnvironmentConfig().toString());
-        TRACER.debugInfo(message);
+        message = INFO_JEB_IMPORT_BUFFER_SIZE.get(bufferSize);
+        TRACER.debugInfo(message.toString());
+        message = INFO_JEB_IMPORT_ENVIRONMENT_CONFIG.get(
+                rootContainer.getEnvironmentConfig().toString());
+        TRACER.debugInfo(message.toString());
       }
 
       for (EntryContainer entryContainer : rootContainer.getEntryContainers())
@@ -227,9 +220,9 @@
       File tempDir = getFileForPath(config.getBackendImportTempDirectory());
       if(!tempDir.exists() && !tempDir.mkdir())
       {
-        msgID = MSGID_JEB_IMPORT_CREATE_TMPDIR_ERROR;
-        String msg = getMessage(msgID, tempDir);
-        throw new IOException(msg);
+        Message msg = ERR_JEB_IMPORT_CREATE_TMPDIR_ERROR.get(
+                String.valueOf(tempDir));
+        throw new IOException(msg.toString());
       }
 
       if (tempDir.listFiles() != null)
@@ -307,19 +300,15 @@
       rate = 1000f*importedCount / importTime;
     }
 
-    msgID = MSGID_JEB_IMPORT_FINAL_STATUS;
-    message = getMessage(msgID, reader.getEntriesRead(),
-                         importedCount - migratedCount,
-                         reader.getEntriesIgnored(),
-                         reader.getEntriesRejected(),
-                         migratedCount, importTime/1000, rate);
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-             message, msgID);
+    message = INFO_JEB_IMPORT_FINAL_STATUS.
+        get(reader.getEntriesRead(), importedCount - migratedCount,
+            reader.getEntriesIgnored(), reader.getEntriesRejected(),
+            migratedCount, importTime/1000, rate);
+    logError(message);
 
-    msgID = MSGID_JEB_IMPORT_ENTRY_LIMIT_EXCEEDED_COUNT;
-    message = getMessage(msgID, getEntryLimitExceededCount());
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-             message, msgID);
+    message = INFO_JEB_IMPORT_ENTRY_LIMIT_EXCEEDED_COUNT.get(
+        getEntryLimitExceededCount());
+    logError(message);
 
     return new LDIFImportResult(reader.getEntriesRead(),
                                 reader.getEntriesRejected(),
@@ -341,17 +330,14 @@
     {
       if (moreData)
       {
-        int msgID = MSGID_JEB_IMPORT_BEGINNING_INTERMEDIATE_MERGE;
-        String message = getMessage(msgID, mergePassNumber++);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        Message message =
+            INFO_JEB_IMPORT_BEGINNING_INTERMEDIATE_MERGE.get(mergePassNumber++);
+        logError(message);
       }
       else
       {
-        int msgID = MSGID_JEB_IMPORT_BEGINNING_FINAL_MERGE;
-        String message = getMessage(msgID);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        Message message = INFO_JEB_IMPORT_BEGINNING_FINAL_MERGE.get();
+        logError(message);
       }
 
 
@@ -495,19 +481,15 @@
 
       if (moreData)
       {
-        int msgID = MSGID_JEB_IMPORT_RESUMING_LDIF_PROCESSING;
-        String message =
-            getMessage(msgID, ((mergeEndTime-mergeStartTime)/1000));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        Message message = INFO_JEB_IMPORT_RESUMING_LDIF_PROCESSING.get(
+            ((mergeEndTime-mergeStartTime)/1000));
+        logError(message);
       }
       else
       {
-        int msgID = MSGID_JEB_IMPORT_FINAL_MERGE_COMPLETED;
-        String message =
-            getMessage(msgID, ((mergeEndTime-mergeStartTime)/1000));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        Message message = INFO_JEB_IMPORT_FINAL_MERGE_COMPLETED.get(
+            ((mergeEndTime-mergeStartTime)/1000));
+        logError(message);
       }
     }
     finally
@@ -603,18 +585,15 @@
   private void processLDIF()
       throws JebException, DatabaseException, IOException
   {
-    int msgID = MSGID_JEB_IMPORT_LDIF_START;
-    String message = getMessage(msgID);
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-             message, msgID);
+    Message message = INFO_JEB_IMPORT_LDIF_START.get();
+    logError(message);
 
     do
     {
       if(threads.size() <= 0)
       {
-        msgID = MSGID_JEB_IMPORT_NO_WORKER_THREADS;
-        message = getMessage(msgID);
-        throw new JebException(msgID, message);
+        message = ERR_JEB_IMPORT_NO_WORKER_THREADS.get();
+        throw new JebException(message);
       }
       try
       {
@@ -624,10 +603,8 @@
         // Check for end of file.
         if (entry == null)
         {
-          msgID = MSGID_JEB_IMPORT_LDIF_END;
-          message = getMessage(msgID);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                   message, msgID);
+          message = INFO_JEB_IMPORT_LDIF_END.get();
+          logError(message);
 
           break;
         }
@@ -675,11 +652,9 @@
         LockMode lockMode = LockMode.DEFAULT;
         OperationStatus status;
 
-        int msgID = MSGID_JEB_IMPORT_MIGRATION_START;
-        String message = getMessage(msgID, "existing",
-                                    importContext.getBaseDN());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        Message message = INFO_JEB_IMPORT_MIGRATION_START.get(
+            "existing", String.valueOf(importContext.getBaseDN()));
+        logError(message);
 
         Cursor cursor =
             srcEntryContainer.getDN2ID().openCursor(null,
@@ -692,9 +667,8 @@
           {
             if(threads.size() <= 0)
             {
-              msgID = MSGID_JEB_IMPORT_NO_WORKER_THREADS;
-              message = getMessage(msgID);
-              throw new JebException(msgID, message);
+              message = ERR_JEB_IMPORT_NO_WORKER_THREADS.get();
+              throw new JebException(message);
             }
 
             DN dn = DN.decode(new ASN1OctetString(key.getData()));
@@ -757,11 +731,9 @@
         LockMode lockMode = LockMode.DEFAULT;
         OperationStatus status;
 
-        int msgID = MSGID_JEB_IMPORT_MIGRATION_START;
-        String message = getMessage(msgID, "excluded",
-                                    importContext.getBaseDN());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        Message message = INFO_JEB_IMPORT_MIGRATION_START.get(
+            "excluded", String.valueOf(importContext.getBaseDN()));
+        logError(message);
 
         Cursor cursor =
             srcEntryContainer.getDN2ID().openCursor(null,
@@ -793,9 +765,8 @@
               {
                 if(threads.size() <= 0)
                 {
-                  msgID = MSGID_JEB_IMPORT_NO_WORKER_THREADS;
-                  message = getMessage(msgID);
-                  throw new JebException(msgID, message);
+                  message = ERR_JEB_IMPORT_NO_WORKER_THREADS.get();
+                  throw new JebException(message);
                 }
 
                 EntryID id = new EntryID(data);
@@ -882,8 +853,8 @@
         else
         {
           // Reject the entry.
-          int msgID = MSGID_JEB_IMPORT_ENTRY_EXISTS;
-          String msg = getMessage(msgID);
+
+          Message msg = WARN_JEB_IMPORT_ENTRY_EXISTS.get();
           importContext.getLDIFReader().rejectLastEntry(msg);
           return;
         }
@@ -900,8 +871,8 @@
           if (parentID == null)
           {
             // Reject the entry.
-            int msgID = MSGID_JEB_IMPORT_PARENT_NOT_FOUND;
-            String msg = getMessage(msgID, parentDN.toString());
+            Message msg =
+                    ERR_JEB_IMPORT_PARENT_NOT_FOUND.get(parentDN.toString());
             importContext.getLDIFReader().rejectLastEntry(msg);
             return;
           }
@@ -1005,11 +976,9 @@
   public void uncaughtException(Thread t, Throwable e)
   {
     threads.remove(t);
-    int msgID = MSGID_JEB_IMPORT_THREAD_EXCEPTION;
-    String msg = getMessage(msgID, t.getName(),
-                        StaticUtils.stackTraceToSingleLineString(e.getCause()));
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, msg,
-             msgID);
+    Message msg = ERR_JEB_IMPORT_THREAD_EXCEPTION.get(
+        t.getName(), StaticUtils.stackTraceToSingleLineString(e.getCause()));
+    logError(msg);
   }
 
   /**
@@ -1037,10 +1006,9 @@
     if (nodeDN == null)
     {
       // The entry should not have been given to this backend.
-      String message = getMessage(JebMessages.MSGID_JEB_INCORRECT_ROUTING,
-                                  String.valueOf(dn));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
-                                   JebMessages.MSGID_JEB_INCORRECT_ROUTING);
+      Message message =
+              JebMessages.ERR_JEB_INCORRECT_ROUTING.get(String.valueOf(dn));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
 
     return importContext;
@@ -1234,11 +1202,9 @@
       long numRejected = reader.getEntriesRejected();
       float rate = 1000f*deltaCount / deltaTime;
 
-      int msgID = MSGID_JEB_IMPORT_PROGRESS_REPORT;
-      String message = getMessage(msgID, numRead, numIgnored, numRejected,
-                                  migratedCount, rate);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-               message, msgID);
+      Message message = INFO_JEB_IMPORT_PROGRESS_REPORT.get(
+          numRead, numIgnored, numRejected, migratedCount, rate);
+      logError(message);
 
       try
       {
@@ -1256,10 +1222,9 @@
           cacheMissRate = nCacheMiss/(float)deltaCount;
         }
 
-        msgID = MSGID_JEB_IMPORT_CACHE_AND_MEMORY_REPORT;
-        message = getMessage(msgID, freeMemory, cacheMissRate);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        message = INFO_JEB_IMPORT_CACHE_AND_MEMORY_REPORT.get(
+            freeMemory, cacheMissRate);
+        logError(message);
 
         prevEnvStats = envStats;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java
index c60ac8c..dee7ea1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java
@@ -28,14 +28,14 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.loggers.ErrorLogger;
+import static org.opends.server.loggers.ErrorLogger.*;
 
 import com.sleepycat.je.*;
 
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.*;
 import org.opends.server.util.StaticUtils;
-import static org.opends.server.messages.JebMessages.*;
+import static org.opends.messages.JebMessages.*;
 
 import java.util.*;
 
@@ -163,9 +163,7 @@
     // Issue warning if this index is not trusted
     if(!trusted)
     {
-      int msgID = MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-      ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                           ErrorLogSeverity.NOTICE, msgID, name);
+      logError(NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(name));
     }
 
   }
@@ -282,10 +280,7 @@
                                 name, builder.toString());
             }
 
-            int msgID = MSGID_JEB_INDEX_CORRUPT_REQUIRES_REBUILD;
-            ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                                 ErrorLogSeverity.SEVERE_ERROR,
-                                 msgID, name);
+            logError(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD.get(name));
           }
         }
         else
@@ -322,10 +317,7 @@
               "index %s.\nKey:%s", name, builder.toString());
         }
 
-        int msgID = MSGID_JEB_INDEX_CORRUPT_REQUIRES_REBUILD;
-        ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                             ErrorLogSeverity.SEVERE_ERROR,
-                             msgID, name);
+        logError(ERR_JEB_INDEX_CORRUPT_REQUIRES_REBUILD.get(name));
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java
index 13148ec..2090df5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.protocols.asn1.ASN1OctetString;
@@ -46,10 +47,9 @@
 import java.util.WeakHashMap;
 
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.JebMessages.*;
+import static org.opends.messages.JebMessages.*;
 import org.opends.server.admin.std.server.JEBackendCfg;
 import static org.opends.server.util.StaticUtils.getFileForPath;
 
@@ -192,9 +192,8 @@
     {
       if (debugEnabled())
       {
-        int msgID = MSGID_JEB_INDEX_MERGE_NO_DATA;
-        String message = getMessage(msgID, index.getName());
-        TRACER.debugInfo(message);
+        Message message = INFO_JEB_INDEX_MERGE_NO_DATA.get(index.getName());
+        TRACER.debugInfo(message.toString());
       }
 
       if(!ldifImportConfig.appendToExistingData())
@@ -207,9 +206,9 @@
 
     if (debugEnabled())
     {
-      int msgID = MSGID_JEB_INDEX_MERGE_START;
-      String message = getMessage(msgID, files.length, index.getName());
-      TRACER.debugInfo(message);
+      Message message = INFO_JEB_INDEX_MERGE_START.get(
+              files.length, index.getName());
+      TRACER.debugInfo(message.toString());
     }
 
     MergeReader[] readers = new MergeReader[files.length];
@@ -352,9 +351,8 @@
 
     if (debugEnabled())
     {
-      int msgID = MSGID_JEB_INDEX_MERGE_COMPLETE;
-      String message = getMessage(msgID, index.getName());
-      TRACER.debugInfo(message);
+      Message message = INFO_JEB_INDEX_MERGE_COMPLETE.get(index.getName());
+      TRACER.debugInfo(message.toString());
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexRebuildThread.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexRebuildThread.java
index 61400bf..6756f92 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexRebuildThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexRebuildThread.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import org.opends.server.api.DirectoryThread;
 
@@ -32,13 +33,12 @@
 
 import org.opends.server.types.*;
 
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_MISSING_DN2ID_RECORD;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_REBUILD_INDEX_FAILED;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_REBUILD_INSERT_ENTRY_FAILED;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.JebMessages.
+    ERR_JEB_MISSING_DN2ID_RECORD;
+import static org.opends.messages.JebMessages.
+    ERR_JEB_REBUILD_INDEX_FAILED;
+import static org.opends.messages.JebMessages.
+    ERR_JEB_REBUILD_INSERT_ENTRY_FAILED;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -343,11 +343,9 @@
     }
     catch(Exception e)
     {
-      int    msgID   = MSGID_JEB_REBUILD_INDEX_FAILED;
-      String message = getMessage(msgID, this.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_JEB_REBUILD_INDEX_FAILED.get(
+          this.getName(), stackTraceToSingleLineString(e));
+      logError(message);
 
       if(debugEnabled())
       {
@@ -420,11 +418,9 @@
           EntryContainer.transactionAbort(txn);
           skippedEntries++;
 
-          int    msgID   = MSGID_JEB_REBUILD_INSERT_ENTRY_FAILED;
-          String message = getMessage(msgID, dn2id.getName(),
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          Message message = ERR_JEB_REBUILD_INSERT_ENTRY_FAILED.get(
+              dn2id.getName(), stackTraceToSingleLineString(e));
+          logError(message);
 
           if (debugEnabled())
           {
@@ -504,11 +500,9 @@
           EntryContainer.transactionAbort(txn);
           skippedEntries++;
 
-          int    msgID   = MSGID_JEB_REBUILD_INSERT_ENTRY_FAILED;
-          String message = getMessage(msgID, dn2uri.getName(),
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          Message message = ERR_JEB_REBUILD_INSERT_ENTRY_FAILED.get(
+              dn2uri.getName(), stackTraceToSingleLineString(e));
+          logError(message);
 
           if (debugEnabled())
           {
@@ -599,9 +593,9 @@
             }
             else
             {
-              int msgID = MSGID_JEB_MISSING_DN2ID_RECORD;
-              String msg = getMessage(msgID, parentDN.toNormalizedString());
-              throw new JebException(msgID, msg);
+              Message msg = ERR_JEB_MISSING_DN2ID_RECORD.get(
+                  parentDN.toNormalizedString());
+              throw new JebException(msg);
             }
           }
           else
@@ -616,11 +610,9 @@
           EntryContainer.transactionAbort(txn);
           skippedEntries++;
 
-          int    msgID   = MSGID_JEB_REBUILD_INSERT_ENTRY_FAILED;
-          String message = getMessage(msgID, id2children.getName(),
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          Message message = ERR_JEB_REBUILD_INSERT_ENTRY_FAILED.get(
+              id2children.getName(), stackTraceToSingleLineString(e));
+          logError(message);
 
           if (debugEnabled())
           {
@@ -716,17 +708,17 @@
                 }
                 else
                 {
-                  int msgID = MSGID_JEB_MISSING_DN2ID_RECORD;
-                  String msg = getMessage(msgID, dn.toNormalizedString());
-                  throw new JebException(msgID, msg);
+                  Message msg =
+                      ERR_JEB_MISSING_DN2ID_RECORD.get(dn.toNormalizedString());
+                  throw new JebException(msg);
                 }
               }
             }
             else
             {
-              int msgID = MSGID_JEB_MISSING_DN2ID_RECORD;
-              String msg = getMessage(msgID, parentDN.toNormalizedString());
-              throw new JebException(msgID, msg);
+              Message msg = ERR_JEB_MISSING_DN2ID_RECORD.get(
+                  parentDN.toNormalizedString());
+              throw new JebException(msg);
             }
 
             if(success)
@@ -760,11 +752,9 @@
           EntryContainer.transactionAbort(txn);
           skippedEntries++;
 
-          int    msgID   = MSGID_JEB_REBUILD_INSERT_ENTRY_FAILED;
-          String message = getMessage(msgID, id2subtree.getName(),
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          Message message = ERR_JEB_REBUILD_INSERT_ENTRY_FAILED.get(
+              id2subtree.getName(), stackTraceToSingleLineString(e));
+          logError(message);
 
           if (debugEnabled())
           {
@@ -845,11 +835,9 @@
           EntryContainer.transactionAbort(txn);
           skippedEntries++;
 
-          int    msgID   = MSGID_JEB_REBUILD_INSERT_ENTRY_FAILED;
-          String message = getMessage(msgID, index.getName(),
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          Message message = ERR_JEB_REBUILD_INSERT_ENTRY_FAILED.get(
+              index.getName(), stackTraceToSingleLineString(e));
+          logError(message);
 
           if (debugEnabled())
           {
@@ -926,11 +914,9 @@
           EntryContainer.transactionAbort(txn);
           skippedEntries++;
 
-          int    msgID   = MSGID_JEB_REBUILD_INSERT_ENTRY_FAILED;
-          String message = getMessage(msgID, index.getName(),
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          Message message = ERR_JEB_REBUILD_INSERT_ENTRY_FAILED.get(
+              index.getName(), stackTraceToSingleLineString(e));
+          logError(message);
 
           if (debugEnabled())
           {
@@ -1011,11 +997,9 @@
           EntryContainer.transactionAbort(txn);
           skippedEntries++;
 
-          int    msgID   = MSGID_JEB_REBUILD_INSERT_ENTRY_FAILED;
-          String message = getMessage(msgID, index.getName(),
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          Message message = ERR_JEB_REBUILD_INSERT_ENTRY_FAILED.get(
+              index.getName(), stackTraceToSingleLineString(e));
+          logError(message);
 
           if (debugEnabled())
           {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JebException.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JebException.java
index c969249..654988c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JebException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JebException.java
@@ -29,7 +29,7 @@
 
 
 import org.opends.server.types.IdentifiedException;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -48,26 +48,16 @@
    */
   static final long serialVersionUID = 3110979454298870834L;
 
-  /**
-   * The message ID for the message associated with this initialization
-   * exception.
-   */
-  private int messageID;
-
 
 
   /**
    * Creates a new JE backend exception with the provided message.
    *
-   * @param  messageID  The unique identifier for the associated message.
    * @param  message    The message that explains the problem that occurred.
    */
-  public JebException(int messageID, String message)
+  public JebException(Message message)
   {
     super(message);
-
-
-    this.messageID = messageID;
   }
 
 
@@ -76,28 +66,15 @@
    * Creates a new JE backend exception with the provided message and root
    * cause.
    *
-   * @param  messageID  The unique identifier for the associated message.
    * @param  message    The message that explains the problem that occurred.
    * @param  cause      The exception that was caught to trigger this exception.
    */
-  public JebException(int messageID, String message, Throwable cause)
+  public JebException(Message message, Throwable cause)
   {
     super(message, cause);
-
-
-    this.messageID = messageID;
   }
 
 
 
-  /**
-   * Retrieves the unique identifier for the associated message.
-   * @return The message identifier.
-   */
-  public int getMessageID()
-  {
-    return messageID;
-  }
-
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RebuildJob.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RebuildJob.java
index 42adfbd..600d727 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RebuildJob.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RebuildJob.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import org.opends.server.types.*;
 
@@ -42,22 +43,20 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.core.DirectoryServer;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_REBUILD_PROGRESS_REPORT;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_REBUILD_FINAL_STATUS;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_REBUILD_CACHE_AND_MEMORY_REPORT;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_REBUILD_INDEX_CONFLICT;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_REBUILD_START;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_VLV_INDEX_NOT_CONFIGURED;
-import static org.opends.server.messages.MessageHandler.getMessage;
-
+import static org.opends.messages.JebMessages.
+    ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED;
+import static org.opends.messages.JebMessages.
+    INFO_JEB_REBUILD_PROGRESS_REPORT;
+import static org.opends.messages.JebMessages.
+    INFO_JEB_REBUILD_FINAL_STATUS;
+import static org.opends.messages.JebMessages.
+    INFO_JEB_REBUILD_CACHE_AND_MEMORY_REPORT;
+import static org.opends.messages.JebMessages.
+    ERR_JEB_REBUILD_INDEX_CONFLICT;
+import static org.opends.messages.JebMessages.
+    INFO_JEB_REBUILD_START;
+import static org.opends.messages.JebMessages.
+    ERR_JEB_VLV_INDEX_NOT_CONFIGURED;
 /**
  * Runs a index rebuild process on the backend. Each index selected for rebuild
  * will be done from scratch by first clearing out the database for that index.
@@ -213,11 +212,9 @@
         completed = 100f*latestProcessed / totalEntries;
       }
 
-      int msgID = MSGID_JEB_REBUILD_PROGRESS_REPORT;
-      String message = getMessage(msgID, completed, latestProcessed,
-                                  totalEntries, rate);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-               message, msgID);
+      Message message = INFO_JEB_REBUILD_PROGRESS_REPORT.get(
+          completed, latestProcessed, totalEntries, rate);
+      logError(message);
 
       try
       {
@@ -235,10 +232,9 @@
           cacheMissRate = nCacheMiss/(float)deltaCount;
         }
 
-        msgID = MSGID_JEB_REBUILD_CACHE_AND_MEMORY_REPORT;
-        message = getMessage(msgID, freeMemory, cacheMissRate);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        message = INFO_JEB_REBUILD_CACHE_AND_MEMORY_REPORT.get(
+            freeMemory, cacheMissRate);
+        logError(message);
 
         prevEnvStats = envStats;
       }
@@ -287,9 +283,8 @@
                               job.rebuildConfig, otherJob.rebuildConfig);
           }
 
-          int msgID = MSGID_JEB_REBUILD_INDEX_CONFLICT;
-          String msg = getMessage(msgID, conflictIndex);
-          throw new JebException(msgID, msg);
+          Message msg = ERR_JEB_REBUILD_INDEX_CONFLICT.get(conflictIndex);
+          throw new JebException(msg);
         }
       }
 
@@ -369,18 +364,17 @@
           {
             if(lowerName.length() < 5)
             {
-              int msgID = MSGID_JEB_VLV_INDEX_NOT_CONFIGURED;
-              String msg = getMessage(msgID, lowerName);
-              throw new JebException(msgID, msg);
+              Message msg = ERR_JEB_VLV_INDEX_NOT_CONFIGURED.get(lowerName);
+              throw new JebException(msg);
             }
 
             VLVIndex vlvIndex =
                 entryContainer.getVLVIndex(lowerName.substring(4));
             if(vlvIndex == null)
             {
-              int msgID = MSGID_JEB_VLV_INDEX_NOT_CONFIGURED;
-              String msg = getMessage(msgID, lowerName.substring(4));
-              throw new JebException(msgID, msg);
+              Message msg =
+                  ERR_JEB_VLV_INDEX_NOT_CONFIGURED.get(lowerName.substring(4));
+              throw new JebException(msg);
             }
 
             rebuildThread = new IndexRebuildThread(entryContainer, vlvIndex);
@@ -390,9 +384,8 @@
             String[] attrIndexParts = lowerName.split("\\.");
             if(attrIndexParts.length <= 0)
             {
-              int msgID = MSGID_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED;
-              String msg = getMessage(msgID, index);
-              throw new JebException(msgID, msg);
+              Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+              throw new JebException(msg);
             }
 
             AttributeType attrType =
@@ -400,17 +393,15 @@
 
             if (attrType == null)
             {
-              int msgID = MSGID_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED;
-              String msg = getMessage(msgID, index);
-              throw new JebException(msgID, msg);
+              Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+              throw new JebException(msg);
             }
             AttributeIndex attrIndex =
                 entryContainer.getAttributeIndex(attrType);
             if (attrIndex == null)
             {
-              int msgID = MSGID_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED;
-              String msg = getMessage(msgID, index);
-              throw new JebException(msgID, msg);
+              Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+              throw new JebException(msg);
             }
 
             if(attrIndexParts.length > 1)
@@ -439,9 +430,8 @@
 
               if(partialAttrIndex == null)
               {
-                int msgID = MSGID_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED;
-                String msg = getMessage(msgID, index);
-                throw new JebException(msgID, msg);
+                Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+                throw new JebException(msg);
               }
 
               rebuildThread =
@@ -480,10 +470,9 @@
           }
           sb.append(index);
         }
-        int msgID = MSGID_JEB_REBUILD_START;
-        String message = getMessage(msgID, sb.toString(), totalToProcess);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        Message message =
+            INFO_JEB_REBUILD_START.get(sb.toString(), totalToProcess);
+        logError(message);
 
         // Make a note of the time we started.
         long startTime = System.currentTimeMillis();
@@ -558,11 +547,9 @@
           rate = 1000f*totalProcessed / totalTime;
         }
 
-        msgID = MSGID_JEB_REBUILD_FINAL_STATUS;
-        message = getMessage(msgID, totalProcessed, totalTime/1000,
-                                    rate);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        message = INFO_JEB_REBUILD_FINAL_STATUS.get(
+            totalProcessed, totalTime/1000, rate);
+        logError(message);
 
         if(debugEnabled())
         {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
index c0c8a6a..4091b40 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import com.sleepycat.je.config.EnvironmentParams;
 import com.sleepycat.je.config.ConfigParam;
@@ -39,20 +40,18 @@
 import org.opends.server.monitors.DatabaseEnvironmentMonitor;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.FilePermission;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.ResultCode;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.JebMessages.*;
-import static org.opends.server.messages.ConfigMessages.
-    MSGID_CONFIG_BACKEND_MODE_INVALID;
-import static org.opends.server.messages.ConfigMessages.
-    MSGID_CONFIG_BACKEND_INSANE_MODE;
+import static org.opends.messages.JebMessages.*;
+import static org.opends.messages.ConfigMessages.
+    ERR_CONFIG_BACKEND_MODE_INVALID;
+import static org.opends.messages.ConfigMessages.
+    WARN_CONFIG_BACKEND_INSANE_MODE;
+
 import org.opends.server.api.Backend;
 import org.opends.server.admin.std.server.JEBackendCfg;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -141,9 +140,9 @@
     //Make sure the directory is valid.
     if (!backendDirectory.isDirectory())
     {
-      int msgID = MSGID_JEB_DIRECTORY_INVALID;
-      String message = getMessage(msgID, backendDirectory.getPath());
-      throw new ConfigException(MSGID_JEB_DIRECTORY_INVALID, message);
+      Message message =
+          ERR_JEB_DIRECTORY_INVALID.get(backendDirectory.getPath());
+      throw new ConfigException(message);
     }
 
     FilePermission backendPermission;
@@ -154,9 +153,9 @@
     }
     catch(Exception e)
     {
-      int msgID = MSGID_CONFIG_BACKEND_MODE_INVALID;
-      String message = getMessage(msgID, config.dn().toString());
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_BACKEND_MODE_INVALID.get(config.dn().toString());
+      throw new ConfigException(message);
     }
 
     //Make sure the mode will allow the server itself access to
@@ -165,9 +164,8 @@
         !backendPermission.isOwnerReadable() ||
         !backendPermission.isOwnerExecutable())
     {
-      int msgID = MSGID_CONFIG_BACKEND_INSANE_MODE;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = WARN_CONFIG_BACKEND_INSANE_MODE.get();
+      throw new ConfigException(message);
     }
 
     // Get the backend database backendDirectory permissions and apply
@@ -177,21 +175,17 @@
       {
         if(!FilePermission.setPermissions(backendDirectory, backendPermission))
         {
-          int msgID = MSGID_JEB_UNABLE_SET_PERMISSIONS;
-          String message = getMessage(msgID, backendPermission.toString(),
-                                      backendDirectory.toString());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.MILD_WARNING,
-                   message, msgID);
+          Message message = WARN_JEB_UNABLE_SET_PERMISSIONS.get(
+              backendPermission.toString(), backendDirectory.toString());
+          logError(message);
         }
       }
       catch(Exception e)
       {
         // Log an warning that the permissions were not set.
-        int msgID = MSGID_JEB_SET_PERMISSIONS_FAILED;
-        String message = getMessage(msgID, backendDirectory.toString(),
-                                    e.toString());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_JEB_SET_PERMISSIONS_FAILED.get(
+            backendDirectory.toString(), e.toString());
+        logError(message);
       }
     }
 
@@ -412,10 +406,9 @@
         EnvironmentStats stats = env.getStats(new StatsConfig());
         long total = stats.getCacheTotalBytes();
 
-        int msgID = MSGID_JEB_CACHE_SIZE_AFTER_PRELOAD;
-        String message = getMessage(msgID, total / (1024 * 1024));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                 msgID);
+        Message message =
+            NOTE_JEB_CACHE_SIZE_AFTER_PRELOAD.get(total / (1024 * 1024));
+        logError(message);
       }
       catch (DatabaseException e)
       {
@@ -437,8 +430,7 @@
   private void cleanDatabase()
        throws DatabaseException
   {
-    int msgID;
-    String message;
+    Message message;
 
     FilenameFilter filenameFilter = new FilenameFilter()
     {
@@ -451,10 +443,9 @@
     File backendDirectory = env.getHome();
     int beforeLogfileCount = backendDirectory.list(filenameFilter).length;
 
-    msgID = MSGID_JEB_CLEAN_DATABASE_START;
-    message = getMessage(msgID, beforeLogfileCount, backendDirectory.getPath());
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-             msgID);
+    message = NOTE_JEB_CLEAN_DATABASE_START.get(
+        beforeLogfileCount, backendDirectory.getPath());
+    logError(message);
 
     int currentCleaned = 0;
     int totalCleaned = 0;
@@ -463,10 +454,8 @@
       totalCleaned += currentCleaned;
     }
 
-    msgID = MSGID_JEB_CLEAN_DATABASE_MARKED;
-    message = getMessage(msgID, totalCleaned);
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-             msgID);
+    message = NOTE_JEB_CLEAN_DATABASE_MARKED.get(totalCleaned);
+    logError(message);
 
     if (totalCleaned > 0)
     {
@@ -477,10 +466,8 @@
 
     int afterLogfileCount = backendDirectory.list(filenameFilter).length;
 
-    msgID = MSGID_JEB_CLEAN_DATABASE_FINISH;
-    message = getMessage(msgID, afterLogfileCount);
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-             msgID);
+    message = NOTE_JEB_CLEAN_DATABASE_FINISH.get(afterLogfileCount);
+    logError(message);
 
   }
 
@@ -690,7 +677,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       JEBackendCfg cfg,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     boolean acceptable = true;
 
@@ -698,8 +685,8 @@
     //Make sure the directory is valid.
     if (!backendDirectory.isDirectory())
     {
-      int msgID = MSGID_JEB_DIRECTORY_INVALID;
-      String message = getMessage(msgID, backendDirectory.getPath());
+      Message message =
+              ERR_JEB_DIRECTORY_INVALID.get(backendDirectory.getPath());
       unacceptableReasons.add(message);
       acceptable = false;
     }
@@ -715,16 +702,15 @@
           !newBackendPermission.isOwnerReadable() ||
           !newBackendPermission.isOwnerExecutable())
       {
-        int msgID = MSGID_CONFIG_BACKEND_INSANE_MODE;
-        String message = getMessage(msgID);
+        Message message = WARN_CONFIG_BACKEND_INSANE_MODE.get();
         unacceptableReasons.add(message);
         acceptable = false;
       }
     }
     catch(Exception e)
     {
-      int msgID = MSGID_CONFIG_BACKEND_MODE_INVALID;
-      String message = getMessage(msgID, cfg.dn().toString());
+      Message message =
+              ERR_CONFIG_BACKEND_MODE_INVALID.get(cfg.dn().toString());
       unacceptableReasons.add(message);
       acceptable = false;
     }
@@ -735,7 +721,7 @@
     }
     catch (Exception e)
     {
-      unacceptableReasons.add(e.getMessage());
+      unacceptableReasons.add(Message.raw(e.getLocalizedMessage()));
       acceptable = false;
     }
 
@@ -751,7 +737,7 @@
   {
     ConfigChangeResult ccr;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     try
     {
@@ -776,8 +762,8 @@
                   getAttributeForProperty(param.getName());
               if (configAttr != null)
               {
-                int msgID = MSGID_JEB_CONFIG_ATTR_REQUIRES_RESTART;
-                messages.add(getMessage(msgID, configAttr));
+                messages.add(INFO_JEB_CONFIG_ATTR_REQUIRES_RESTART.get(
+                        configAttr));
               }
               if(debugEnabled())
               {
@@ -802,7 +788,7 @@
     }
     catch (Exception e)
     {
-      messages.add(StaticUtils.stackTraceToSingleLineString(e));
+      messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(e)));
       ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                    adminActionRequired,
                                    messages);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndex.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndex.java
index 32eb41a..11270e4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndex.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndex.java
@@ -25,26 +25,27 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import com.sleepycat.je.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import org.opends.server.loggers.ErrorLogger;
+import static org.opends.server.loggers.ErrorLogger.*;
 import org.opends.server.types.*;
 import org.opends.server.admin.std.server.VLVJEIndexCfg;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.SearchOperation;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-import static org.opends.server.messages.JebMessages.
-    MSGID_ENTRYIDSORTER_NEGATIVE_START_POS;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_CONFIG_VLV_INDEX_BAD_FILTER;
+import static org.opends.messages.JebMessages.
+    NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD;
+import static org.opends.messages.JebMessages.
+    ERR_ENTRYIDSORTER_NEGATIVE_START_POS;
+import static org.opends.messages.JebMessages.
+    ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR;
+import static org.opends.messages.JebMessages.
+    ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
+
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.util.StaticUtils;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
@@ -160,10 +161,9 @@
     }
     catch(Exception e)
     {
-      int msgID = MSGID_JEB_CONFIG_VLV_INDEX_BAD_FILTER;
-      String msg = getMessage(msgID, config.getVLVIndexFilter(), name,
-                              stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, msg);
+      Message msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
+          config.getVLVIndexFilter(), name, stackTraceToSingleLineString(e));
+      throw new ConfigException(msg);
     }
 
     String[] sortAttrs = config.getVLVIndexSortOrder().split(" ");
@@ -191,18 +191,20 @@
       }
       catch(Exception e)
       {
-        int msgID = MSGID_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR;
-        String msg = getMessage(msgID, sortKeys[i], name);
-        throw new ConfigException(msgID, msg);
+        Message msg =
+            ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
+                    String.valueOf(sortKeys[i]), name);
+        throw new ConfigException(msg);
       }
 
       AttributeType attrType =
           DirectoryServer.getAttributeType(sortAttrs[i].toLowerCase());
       if(attrType == null)
       {
-        int msgID = MSGID_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR;
-        String msg = getMessage(msgID, sortKeys[i], name);
-        throw new ConfigException(msgID, msg);
+        Message msg =
+            ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
+                    String.valueOf(sortKeys[i]), name);
+        throw new ConfigException(msg);
       }
       sortKeys[i] = new SortKey(attrType, ascending[i]);
       orderingRules[i] = attrType.getOrderingMatchingRule();
@@ -248,9 +250,7 @@
     // Issue warning if this vlvIndex is not trusted
     if(!trusted)
     {
-      int msgID = MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-      ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                           ErrorLogSeverity.NOTICE, msgID, name);
+      logError(NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(name));
     }
 
     this.count = new AtomicInteger(0);
@@ -771,10 +771,9 @@
               new VLVResponseControl(targetOffset, currentCount,
                                      LDAPResultCode.OFFSET_RANGE_ERROR));
 
-          int    msgID   = MSGID_ENTRYIDSORTER_NEGATIVE_START_POS;
-          String message = getMessage(msgID);
+          Message message = ERR_ENTRYIDSORTER_NEGATIVE_START_POS.get();
           throw new DirectoryException(ResultCode.VIRTUAL_LIST_VIEW_ERROR,
-                                       message, msgID);
+                                       message);
         }
         else if (targetOffset == 0)
         {
@@ -1235,7 +1234,7 @@
    */
   public synchronized boolean isConfigurationChangeAcceptable(
       VLVJEIndexCfg cfg,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     try
     {
@@ -1244,9 +1243,9 @@
     }
     catch(Exception e)
     {
-      int msgID = MSGID_JEB_CONFIG_VLV_INDEX_BAD_FILTER;
-      String msg = getMessage(msgID, config.getVLVIndexFilter(), name,
-                              stackTraceToSingleLineString(e));
+      Message msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
+              config.getVLVIndexFilter(), name,
+              stackTraceToSingleLineString(e));
       unacceptableReasons.add(msg);
       return false;
     }
@@ -1276,8 +1275,9 @@
       }
       catch(Exception e)
       {
-        int msgID = MSGID_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR;
-        String msg = getMessage(msgID, sortKeys[i], name);
+        Message msg =
+                ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
+                        String.valueOf(sortKeys[i]), name);
         unacceptableReasons.add(msg);
         return false;
       }
@@ -1286,8 +1286,8 @@
           DirectoryServer.getAttributeType(sortAttrs[i].toLowerCase());
       if(attrType == null)
       {
-        int msgID = MSGID_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR;
-        String msg = getMessage(msgID, sortKeys[i], name);
+        Message msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
+                String.valueOf(sortKeys[i]), name);
         unacceptableReasons.add(msg);
         return false;
       }
@@ -1306,7 +1306,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     // Update base DN only if changed..
     if(!config.getVLVIndexBaseDN().equals(cfg.getVLVIndexBaseDN()))
@@ -1348,9 +1348,9 @@
       }
       catch(Exception e)
       {
-        int msgID = MSGID_JEB_CONFIG_VLV_INDEX_BAD_FILTER;
-        String msg = getMessage(msgID, config.getVLVIndexFilter(), name,
-                                stackTraceToSingleLineString(e));
+        Message msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
+                config.getVLVIndexFilter(), name,
+                stackTraceToSingleLineString(e));
         messages.add(msg);
         if(resultCode == ResultCode.SUCCESS)
         {
@@ -1388,8 +1388,8 @@
         }
         catch(Exception e)
         {
-          int msgID = MSGID_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR;
-          String msg = getMessage(msgID, sortKeys[i], name);
+          Message msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
+                  String.valueOf(String.valueOf(sortKeys[i])), name);
           messages.add(msg);
           if(resultCode == ResultCode.SUCCESS)
           {
@@ -1401,8 +1401,8 @@
             DirectoryServer.getAttributeType(sortAttrs[i].toLowerCase());
         if(attrType == null)
         {
-          int msgID = MSGID_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR;
-          String msg = getMessage(msgID, sortKeys[i], name);
+          Message msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
+                  String.valueOf(String.valueOf(sortKeys[i])), name);
           messages.add(msg);
           if(resultCode == ResultCode.SUCCESS)
           {
@@ -1426,7 +1426,7 @@
       }
       catch(DatabaseException de)
       {
-        messages.add(StaticUtils.stackTraceToSingleLineString(de));
+        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
         if(resultCode == ResultCode.SUCCESS)
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
@@ -1444,8 +1444,7 @@
     if(adminActionRequired)
     {
       trusted = false;
-      int msgID = MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD;
-      String message = getMessage(msgID, name);
+      Message message = NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(name);
       messages.add(message);
       try
       {
@@ -1453,7 +1452,7 @@
       }
       catch(DatabaseException de)
       {
-        messages.add(StaticUtils.stackTraceToSingleLineString(de));
+        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
         if(resultCode == ResultCode.SUCCESS)
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexMergeThread.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexMergeThread.java
index fde7ce4..a6b82ec 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexMergeThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexMergeThread.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -35,14 +36,12 @@
 import org.opends.server.types.*;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import static org.opends.server.util.StaticUtils.getFileForPath;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_INDEX_MERGE_NO_DATA;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_INDEX_MERGE_START;
-import static org.opends.server.messages.JebMessages.
-    MSGID_JEB_INDEX_MERGE_COMPLETE;
-import static org.opends.server.messages.MessageHandler.getMessage;
-
+import static org.opends.messages.JebMessages.
+    INFO_JEB_INDEX_MERGE_NO_DATA;
+import static org.opends.messages.JebMessages.
+    INFO_JEB_INDEX_MERGE_START;
+import static org.opends.messages.JebMessages.
+    INFO_JEB_INDEX_MERGE_COMPLETE;
 import java.util.*;
 import java.io.*;
 
@@ -176,18 +175,16 @@
 
     if (files == null || files.length == 0)
     {
-      int msgID = MSGID_JEB_INDEX_MERGE_NO_DATA;
-      String message = getMessage(msgID, vlvIndex.getName());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-               message, msgID);
+      Message message = INFO_JEB_INDEX_MERGE_NO_DATA.get(vlvIndex.getName());
+      logError(message);
       return;
     }
 
     if (debugEnabled())
     {
-      int msgID = MSGID_JEB_INDEX_MERGE_START;
-      String message = getMessage(msgID, files.length, vlvIndex.getName());
-      TRACER.debugInfo(message);
+      Message message = INFO_JEB_INDEX_MERGE_START.get(
+              files.length, vlvIndex.getName());
+      TRACER.debugInfo(message.toString());
     }
 
     Transaction txn = null;
@@ -340,9 +337,8 @@
 
     if (debugEnabled())
     {
-      int msgID = MSGID_JEB_INDEX_MERGE_COMPLETE;
-      String message = getMessage(msgID, vlvIndex.getName());
-      TRACER.debugInfo(message);
+      Message message = INFO_JEB_INDEX_MERGE_COMPLETE.get(vlvIndex.getName());
+      TRACER.debugInfo(message.toString());
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VerifyJob.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VerifyJob.java
index 4ce1c93..4c75dd4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VerifyJob.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VerifyJob.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -48,8 +49,7 @@
 import org.opends.server.util.ServerConstants;
 
 import org.opends.server.types.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.JebMessages.*;
+import static org.opends.messages.JebMessages.*;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -250,18 +250,17 @@
           {
             if(lowerName.length() < 5)
             {
-              int msgID = MSGID_JEB_VLV_INDEX_NOT_CONFIGURED;
-              String msg = getMessage(msgID, lowerName);
-              throw new JebException(msgID, msg);
+              Message msg = ERR_JEB_VLV_INDEX_NOT_CONFIGURED.get(lowerName);
+              throw new JebException(msg);
             }
 
             VLVIndex vlvIndex =
                 entryContainer.getVLVIndex(lowerName.substring(4));
             if(vlvIndex == null)
             {
-              int msgID = MSGID_JEB_VLV_INDEX_NOT_CONFIGURED;
-              String msg = getMessage(msgID, lowerName.substring(4));
-              throw new JebException(msgID, msg);
+              Message msg =
+                  ERR_JEB_VLV_INDEX_NOT_CONFIGURED.get(lowerName.substring(4));
+              throw new JebException(msg);
             }
 
             vlvIndexList.add(vlvIndex);
@@ -272,17 +271,15 @@
                 DirectoryServer.getAttributeType(lowerName);
             if (attrType == null)
             {
-              int msgID = MSGID_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED;
-              String msg = getMessage(msgID, index);
-              throw new JebException(msgID, msg);
+              Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+              throw new JebException(msg);
             }
             AttributeIndex attrIndex =
                 entryContainer.getAttributeIndex(attrType);
             if (attrIndex == null)
             {
-              int msgID = MSGID_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED;
-              String msg = getMessage(msgID, index);
-              throw new JebException(msgID, msg);
+              Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+              throw new JebException(msg);
             }
             attrIndexList.add(attrIndex);
           }
@@ -348,11 +345,9 @@
                    String.valueOf(keyCount));
       if (cleanMode)
       {
-        int msgID = MSGID_JEB_VERIFY_CLEAN_FINAL_STATUS;
-        String message = getMessage(msgID, keyCount, errorCount,
-                                    totalTime/1000, rate);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        Message message = INFO_JEB_VERIFY_CLEAN_FINAL_STATUS.get(
+            keyCount, errorCount, totalTime/1000, rate);
+        logError(message);
 
         if (multiReferenceCount > 0)
         {
@@ -362,49 +357,41 @@
             averageEntryReferences = (float)entryReferencesCount/keyCount;
           }
 
-          msgID = MSGID_JEB_VERIFY_MULTIPLE_REFERENCE_COUNT;
-          message = getMessage(msgID, multiReferenceCount);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                   message, msgID);
+          message =
+              INFO_JEB_VERIFY_MULTIPLE_REFERENCE_COUNT.get(multiReferenceCount);
+          logError(message);
           addStatEntry(statEntry, "verify-multiple-reference-count",
                        String.valueOf(multiReferenceCount));
 
-          msgID = MSGID_JEB_VERIFY_ENTRY_LIMIT_EXCEEDED_COUNT;
-          message = getMessage(msgID, entryLimitExceededCount);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                   message, msgID);
+          message = INFO_JEB_VERIFY_ENTRY_LIMIT_EXCEEDED_COUNT.get(
+              entryLimitExceededCount);
+          logError(message);
           addStatEntry(statEntry, "verify-entry-limit-exceeded-count",
                        String.valueOf(entryLimitExceededCount));
 
-          msgID = MSGID_JEB_VERIFY_AVERAGE_REFERENCE_COUNT;
-          message = getMessage(msgID, averageEntryReferences);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                   message, msgID);
+          message = INFO_JEB_VERIFY_AVERAGE_REFERENCE_COUNT.get(
+              averageEntryReferences);
+          logError(message);
           addStatEntry(statEntry, "verify-average-reference-count",
                        String.valueOf(averageEntryReferences));
 
-          msgID = MSGID_JEB_VERIFY_MAX_REFERENCE_COUNT;
-          message = getMessage(msgID, maxEntryPerValue);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                   message, msgID);
+          message =
+              INFO_JEB_VERIFY_MAX_REFERENCE_COUNT.get(maxEntryPerValue);
+          logError(message);
           addStatEntry(statEntry, "verify-max-reference-count",
                        String.valueOf(maxEntryPerValue));
         }
       }
       else
       {
-        int msgID = MSGID_JEB_VERIFY_FINAL_STATUS;
-        String message = getMessage(msgID, keyCount, errorCount,
-                                    totalTime/1000, rate);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        Message message = INFO_JEB_VERIFY_FINAL_STATUS.get(
+            keyCount, errorCount, totalTime/1000, rate);
+        logError(message);
         //TODO add entry-limit-stats to the statEntry
         if (entryLimitMap.size() > 0)
         {
-          msgID = MSGID_JEB_VERIFY_ENTRY_LIMIT_STATS_HEADER;
-          message = getMessage(msgID);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                   message, msgID);
+          message = INFO_JEB_VERIFY_ENTRY_LIMIT_STATS_HEADER.get();
+          logError(message);
 
           for (Map.Entry<Index,HashMap<ByteString,Long>> mapEntry :
               entryLimitMap.entrySet())
@@ -425,12 +412,10 @@
               medianValue = values[x];
             }
 
-            msgID = MSGID_JEB_VERIFY_ENTRY_LIMIT_STATS_ROW;
-            message = getMessage(msgID, index.toString(), values.length,
-                                 values[0], values[values.length-1],
-                                 medianValue);
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                     message, msgID);
+            message = INFO_JEB_VERIFY_ENTRY_LIMIT_STATS_ROW.
+                get(index.toString(), values.length, values[0],
+                    values[values.length-1], medianValue);
+            logError(message);
           }
         }
       }
@@ -1725,7 +1710,7 @@
               "entry <%s>: %s.%n",
                      attrIndex.getAttributeType().toString(),
                      entry.getDN().toString(),
-                     e.getErrorMessage());
+                     String.valueOf(e.getMessageObject()));
         }
       }
     }
@@ -1759,7 +1744,7 @@
               "base DN for VLV index %s: %s",
                      entry.getDN().toString(),
                      vlvIndex.getName(),
-                     e.getErrorMessage());
+                     String.valueOf(e.getMessageObject()));
         }
         errorCount++;
       }
@@ -2099,10 +2084,9 @@
 
       float rate = 1000f*deltaCount / deltaTime;
 
-      int msgID = MSGID_JEB_VERIFY_PROGRESS_REPORT;
-      String message = getMessage(msgID, latestCount, errorCount, rate);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-               message, msgID);
+      Message message =
+          INFO_JEB_VERIFY_PROGRESS_REPORT.get(latestCount, errorCount, rate);
+      logError(message);
 
       try
       {
@@ -2120,10 +2104,9 @@
           cacheMissRate = nCacheMiss/(float)deltaCount;
         }
 
-        msgID = MSGID_JEB_VERIFY_CACHE_AND_MEMORY_REPORT;
-        message = getMessage(msgID, freeMemory, cacheMissRate);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        message = INFO_JEB_VERIFY_CACHE_AND_MEMORY_REPORT.get(
+            freeMemory, cacheMissRate);
+        logError(message);
 
         prevEnvStats = envStats;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/RecurringTask.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/RecurringTask.java
index 6fbc337..f001b02 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/RecurringTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/task/RecurringTask.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.task;
+import org.opends.messages.Message;
 
 
 
@@ -46,8 +47,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.BackendMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -117,38 +117,33 @@
     List<Attribute> attrList = recurringTaskEntry.getAttribute(attrType);
     if ((attrList == null) || attrList.isEmpty())
     {
-      int    msgID   = MSGID_RECURRINGTASK_NO_ID_ATTRIBUTE;
-      String message = getMessage(msgID, ATTR_RECURRING_TASK_ID);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message =
+          ERR_RECURRINGTASK_NO_ID_ATTRIBUTE.get(ATTR_RECURRING_TASK_ID);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     if (attrList.size() > 1)
     {
-      int    msgID   = MSGID_RECURRINGTASK_MULTIPLE_ID_TYPES;
-      String message = getMessage(msgID, ATTR_RECURRING_TASK_ID);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message =
+          ERR_RECURRINGTASK_MULTIPLE_ID_TYPES.get(ATTR_RECURRING_TASK_ID);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     Attribute attr = attrList.get(0);
     LinkedHashSet<AttributeValue> values = attr.getValues();
     if ((values == null) || values.isEmpty())
     {
-      int    msgID   = MSGID_RECURRINGTASK_NO_ID;
-      String message = getMessage(msgID, ATTR_RECURRING_TASK_ID);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_RECURRINGTASK_NO_ID.get(ATTR_RECURRING_TASK_ID);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     Iterator<AttributeValue> iterator = values.iterator();
     AttributeValue value = iterator.next();
     if (iterator.hasNext())
     {
-      int    msgID   = MSGID_RECURRINGTASK_MULTIPLE_ID_VALUES;
-      String message = getMessage(msgID, ATTR_RECURRING_TASK_ID);
-      throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message,
-                                   msgID);
+      Message message =
+          ERR_RECURRINGTASK_MULTIPLE_ID_VALUES.get(ATTR_RECURRING_TASK_ID);
+      throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
     }
 
     recurringTaskID = value.getStringValue();
@@ -170,38 +165,34 @@
     attrList = recurringTaskEntry.getAttribute(attrType);
     if ((attrList == null) || attrList.isEmpty())
     {
-      int    msgID   = MSGID_RECURRINGTASK_NO_CLASS_ATTRIBUTE;
-      String message = getMessage(msgID, ATTR_RECURRING_TASK_CLASS_NAME);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_RECURRINGTASK_NO_CLASS_ATTRIBUTE.get(
+          ATTR_RECURRING_TASK_CLASS_NAME);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     if (attrList.size() > 0)
     {
-      int    msgID   = MSGID_RECURRINGTASK_MULTIPLE_CLASS_TYPES;
-      String message = getMessage(msgID, ATTR_RECURRING_TASK_CLASS_NAME);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_RECURRINGTASK_MULTIPLE_CLASS_TYPES.get(
+          ATTR_RECURRING_TASK_CLASS_NAME);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     attr = attrList.get(0);
     values = attr.getValues();
     if ((values == null) || values.isEmpty())
     {
-      int    msgID   = MSGID_RECURRINGTASK_NO_CLASS_VALUES;
-      String message = getMessage(msgID, ATTR_RECURRING_TASK_CLASS_NAME);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message =
+          ERR_RECURRINGTASK_NO_CLASS_VALUES.get(ATTR_RECURRING_TASK_CLASS_NAME);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     iterator = values.iterator();
     value = iterator.next();
     if (iterator.hasNext())
     {
-      int    msgID   = MSGID_RECURRINGTASK_MULTIPLE_CLASS_VALUES;
-      String message = getMessage(msgID, ATTR_RECURRING_TASK_CLASS_NAME);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_RECURRINGTASK_MULTIPLE_CLASS_VALUES.get(
+          ATTR_RECURRING_TASK_CLASS_NAME);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     taskClassName = value.getStringValue();
@@ -220,12 +211,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_RECURRINGTASK_CANNOT_LOAD_CLASS;
-      String message = getMessage(msgID, String.valueOf(taskClassName),
-                                  ATTR_RECURRING_TASK_CLASS_NAME,
-                                  getExceptionMessage(e));
+      Message message = ERR_RECURRINGTASK_CANNOT_LOAD_CLASS.
+          get(String.valueOf(taskClassName), ATTR_RECURRING_TASK_CLASS_NAME,
+              getExceptionMessage(e));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID, e);
+                                   e);
     }
 
 
@@ -242,11 +232,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_RECURRINGTASK_CANNOT_INSTANTIATE_CLASS_AS_TASK;
-      String message = getMessage(msgID, String.valueOf(taskClassName),
-                                  Task.class.getName());
+      Message message = ERR_RECURRINGTASK_CANNOT_INSTANTIATE_CLASS_AS_TASK.get(
+          String.valueOf(taskClassName), Task.class.getName());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID, e);
+                                   e);
     }
 
 
@@ -263,11 +252,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
 
-      int    msgID   = MSGID_RECURRINGTASK_CANNOT_INITIALIZE_INTERNAL;
-      String message = getMessage(msgID, String.valueOf(taskClassName),
-                                  ie.getMessage());
+      Message message = ERR_RECURRINGTASK_CANNOT_INITIALIZE_INTERNAL.get(
+          String.valueOf(taskClassName), ie.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, ie);
+                                   message, ie);
     }
 
     task.initializeTask();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/Task.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/Task.java
index 8879aba..6e2b800 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/Task.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/task/Task.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.task;
+import org.opends.messages.Message;
 
 
 
@@ -37,6 +38,7 @@
 import java.util.List;
 import java.util.TimeZone;
 import java.util.UUID;
+import java.util.Collections;
 import java.util.concurrent.locks.Lock;
 import javax.mail.MessagingException;
 
@@ -51,8 +53,8 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.Operation;
 import org.opends.server.util.EMailMessage;
@@ -60,8 +62,8 @@
 
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.BackendMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -98,6 +100,11 @@
   private LinkedList<String> dependencyIDs;
 
   // A set of log messages generated by this task.
+  // TODO: convert from String to Message 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
+  // string value.
   private LinkedList<String> logMessages;
 
   // The set of e-mail addresses of the users to notify when the task is done
@@ -170,10 +177,9 @@
     {
       if (recurringTaskID == null)
       {
-        int    msgID   = MSGID_TASK_MISSING_ATTR;
-        String message = getMessage(msgID, String.valueOf(taskEntry.getDN()),
-                                    ATTR_TASK_ID);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_TASK_MISSING_ATTR.get(
+            String.valueOf(taskEntry.getDN()), ATTR_TASK_ID);
+        throw new InitializationException(message);
       }
       else
       {
@@ -194,9 +200,8 @@
       taskState = TaskState.fromString(stateString);
       if (taskState == null)
       {
-        int    msgID   = MSGID_TASK_INVALID_STATE;
-        String message = getMessage(msgID, taskDN, stateString);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_TASK_INVALID_STATE.get(taskDN, stateString);
+        throw new InitializationException(message);
       }
     }
 
@@ -231,9 +236,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_TASK_CANNOT_PARSE_SCHEDULED_START_TIME;
-        String message = getMessage(msgID, timeString, taskDN);
-        throw new InitializationException(msgID, message, e);
+        Message message =
+            ERR_TASK_CANNOT_PARSE_SCHEDULED_START_TIME.get(timeString, taskDN);
+        throw new InitializationException(message, e);
       }
     }
 
@@ -265,9 +270,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_TASK_CANNOT_PARSE_ACTUAL_START_TIME;
-        String message = getMessage(msgID, timeString, taskDN);
-        throw new InitializationException(msgID, message, e);
+        Message message =
+            ERR_TASK_CANNOT_PARSE_ACTUAL_START_TIME.get(timeString, taskDN);
+        throw new InitializationException(message, e);
       }
     }
 
@@ -299,9 +304,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_TASK_CANNOT_PARSE_COMPLETION_TIME;
-        String message = getMessage(msgID, timeString, taskDN);
-        throw new InitializationException(msgID, message, e);
+        Message message =
+            ERR_TASK_CANNOT_PARSE_COMPLETION_TIME.get(timeString, taskDN);
+        throw new InitializationException(message, e);
       }
     }
 
@@ -361,10 +366,9 @@
     {
       if (isRequired)
       {
-        int    msgID   = MSGID_TASK_MISSING_ATTR;
-        String message = getMessage(msgID, String.valueOf(taskEntry.getDN()),
-                                    attributeName);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_TASK_MISSING_ATTR.get(
+            String.valueOf(taskEntry.getDN()), attributeName);
+        throw new InitializationException(message);
       }
       else
       {
@@ -374,10 +378,9 @@
 
     if (attrList.size() > 1)
     {
-      int    msgID   = MSGID_TASK_MULTIPLE_ATTRS_FOR_TYPE;
-      String message = getMessage(msgID, attributeName,
-                                  String.valueOf(taskEntry.getDN()));
-      throw new InitializationException(msgID, message);
+      Message message = ERR_TASK_MULTIPLE_ATTRS_FOR_TYPE.get(
+          attributeName, String.valueOf(taskEntry.getDN()));
+      throw new InitializationException(message);
     }
 
     Iterator<AttributeValue> iterator = attrList.get(0).getValues().iterator();
@@ -385,10 +388,9 @@
     {
       if (isRequired)
       {
-        int    msgID   = MSGID_TASK_NO_VALUES_FOR_ATTR;
-        String message = getMessage(msgID, attributeName,
-                                    String.valueOf(taskEntry.getDN()));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_TASK_NO_VALUES_FOR_ATTR.get(
+            attributeName, String.valueOf(taskEntry.getDN()));
+        throw new InitializationException(message);
       }
       else
       {
@@ -399,10 +401,9 @@
     AttributeValue value = iterator.next();
     if (iterator.hasNext())
     {
-      int    msgID   = MSGID_TASK_MULTIPLE_VALUES_FOR_ATTR;
-      String message = getMessage(msgID, attributeName,
-                                  String.valueOf(taskEntry.getDN()));
-      throw new InitializationException(msgID, message);
+      Message message = ERR_TASK_MULTIPLE_VALUES_FOR_ATTR.get(
+          attributeName, String.valueOf(taskEntry.getDN()));
+      throw new InitializationException(message);
     }
 
     return value.getStringValue();
@@ -437,9 +438,9 @@
 
     if (attrList.size() > 1)
     {
-      int    msgID   = MSGID_TASK_MULTIPLE_ATTRS_FOR_TYPE;
-      String message = getMessage(msgID, attributeName);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_TASK_MULTIPLE_ATTRS_FOR_TYPE.get(
+          attributeName, String.valueOf(taskEntry.getDN()));
+      throw new InitializationException(message);
     }
 
     Iterator<AttributeValue> iterator = attrList.get(0).getValues().iterator();
@@ -817,9 +818,14 @@
    *
    * @return  The set of messages that were logged by this task.
    */
-  public final LinkedList<String> getLogMessages()
+  public final List<Message> getLogMessages()
   {
-    return logMessages;
+    List<Message> msgList = new ArrayList<Message>();
+    for(String logString : logMessages) {
+      // TODO: a better job or recreating the message
+      msgList.add(Message.raw(logString));
+    }
+    return Collections.unmodifiableList(msgList);
   }
 
 
@@ -830,68 +836,13 @@
    * the one in <code>org.opends.server.loggers.Error</code> to ensure the
    * messages are included in the ds-task-log-message attribute.
    *
-   * @param  category  The category that may be used to determine whether to
-   *                   actually log this message.
-   * @param  severity  The severity that may be used to determine whether to
-   *                   actually log this message.
-   * @param  errorID   The error ID that uniquely identifies the provided format
-   *                   string.
-   */
-  protected void logError(ErrorLogCategory category, ErrorLogSeverity severity,
-                          int errorID)
-  {
-    // Simply pass this on to the server error logger, and it will call back
-    // to the addLogMessage method for this task.
-    ErrorLogger.logError(category, severity, errorID);
-  }
-
-
-
-  /**
-   * Writes a message to the error log using the provided information.
-   * Tasks should use this method to log messages to the error log instead of
-   * the one in <code>org.opends.server.loggers.Error</code> to ensure the
-   * messages are included in the ds-task-log-message attribute.
-   *
-   * @param  category  The category that may be used to determine whether to
-   *                   actually log this message.
-   * @param  severity  The severity that may be used to determine whether to
-   *                   actually log this message.
-   * @param  errorID   The error ID that uniquely identifies the provided format
-   *                   string.
-   * @param  args      The set of arguments to use for the provided format
-   *                   string.
-   */
-  protected void logError(ErrorLogCategory category, ErrorLogSeverity severity,
-                          int errorID, Object... args)
-  {
-    // Simply pass this on to the server error logger, and it will call back
-    // to the addLogMessage method for this task.
-    ErrorLogger.logError(category, severity, errorID, args);
-  }
-
-
-
-  /**
-   * Writes a message to the error log using the provided information.
-   * Tasks should use this method to log messages to the error log instead of
-   * the one in <code>org.opends.server.loggers.Error</code> to ensure the
-   * messages are included in the ds-task-log-message attribute.
-   *
-   * @param  category  The category that may be used to determine whether to
-   *                   actually log this message.
-   * @param  severity  The severity that may be used to determine whether to
-   *                   actually log this message.
    * @param  message   The message to be logged.
-   * @param  errorID   The error ID that uniquely identifies the format string
-   *                   used to generate the provided message.
    */
-  protected void logError(ErrorLogCategory category, ErrorLogSeverity severity,
-                          String message, int errorID)
+  protected void logError(Message message)
   {
     // Simply pass this on to the server error logger, and it will call back
     // to the addLogMessage method for this task.
-    ErrorLogger.logError(category, severity, message, errorID);
+    ErrorLogger.logError(message);
   }
 
 
@@ -902,12 +853,9 @@
    * indirectly through the {@code ErrorLog.logError} methods. It does not
    * automatically persist the updated task information to disk.
    *
-   * @param  severity       The severity level for the log message.
-   * @param  messageID      The ID that uniquely identifies the log message.
-   * @param  messageString  The text of the log message
+   * @param  message  he log message
    */
-  public void addLogMessage(ErrorLogSeverity severity, int messageID,
-                            String messageString)
+  public void addLogMessage(Message message)
   {
     // We only need to grab the entry-level lock if we don't already hold the
     // broader scheduler lock.
@@ -924,17 +872,17 @@
       buffer.append("[");
       buffer.append(TimeThread.getLocalTime());
       buffer.append("] severity=\"");
-      buffer.append(severity.getSeverityName());
+      buffer.append(message.getDescriptor().getSeverity().name());
       buffer.append("\" msgCount=");
       buffer.append(logMessageCounter++);
       buffer.append(" msgID=");
-      buffer.append(messageID);
+      buffer.append(message.getDescriptor().getOrdinal());
       buffer.append(" message=\"");
-      buffer.append(messageString);
+      buffer.append(message.toString());
       buffer.append("\"");
 
-      String message = buffer.toString();
-      logMessages.add(message);
+      String messageString = buffer.toString();
+      logMessages.add(messageString);
 
 
       AttributeType type = DirectoryServer.getAttributeType(
@@ -1109,11 +1057,9 @@
 
       setTaskState(TaskState.STOPPED_BY_ERROR);
 
-      int    msgID   = MSGID_TASK_EXECUTE_FAILED;
-      String message = getMessage(msgID, String.valueOf(taskEntry.getDN()),
-                                  stackTraceToSingleLineString(e));
-      ErrorLogger.logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR,
-                           message, msgID);
+      Message message = ERR_TASK_EXECUTE_FAILED.get(
+          String.valueOf(taskEntry.getDN()), stackTraceToSingleLineString(e));
+      logError(message);
     }
     finally
     {
@@ -1177,7 +1123,7 @@
         String actualStartDate = new Date(actualStartTime).toString();
         String completionDate  = new Date(completionTime).toString();
 
-        message.setBody(getMessage(MSGID_TASK_COMPLETION_BODY, taskID,
+        message.setBody(INFO_TASK_COMPLETION_BODY.get(taskID,
                                    String.valueOf(taskState),
                                    scheduledStartDate, actualStartDate,
                                    completionDate));
@@ -1233,7 +1179,7 @@
    *                          successfully interrupted.
    * @param  interruptReason  A human-readable explanation for the cancellation.
    */
-  public void interruptTask(TaskState interruptState, String interruptReason)
+  public void interruptTask(TaskState interruptState, Message interruptReason)
   {
     // No action is performed by default.
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java
index 305685b..a27f5fa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.task;
+import org.opends.messages.Message;
 
 
 
@@ -68,8 +69,8 @@
 
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.BackendMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -165,15 +166,13 @@
     // We will only allow one base for task entries.
     if ((baseDNs == null) || (baseDNs.length == 0))
     {
-      int    msgID   = MSGID_TASKBE_NO_BASE_DNS;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_TASKBE_NO_BASE_DNS.get();
+      throw new ConfigException(message);
     }
     else if (baseDNs.length > 1)
     {
-      int    msgID   = MSGID_TASKBE_MULTIPLE_BASE_DNS;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_TASKBE_MULTIPLE_BASE_DNS.get();
+      throw new ConfigException(message);
     }
     else
     {
@@ -195,11 +194,9 @@
         }
 
         // This should never happen.
-        int    msgID   = MSGID_TASKBE_CANNOT_DECODE_RECURRING_TASK_BASE_DN;
-        String message = getMessage(msgID,
-                                    String.valueOf(recurringTaskBaseString),
-                                    getExceptionMessage(e));
-        throw new ConfigException(msgID, message, e);
+        Message message = ERR_TASKBE_CANNOT_DECODE_RECURRING_TASK_BASE_DN.get(
+            String.valueOf(recurringTaskBaseString), getExceptionMessage(e));
+        throw new ConfigException(message, e);
       }
 
       String scheduledTaskBaseString = SCHEDULED_TASK_BASE_RDN + "," +
@@ -216,11 +213,9 @@
         }
 
         // This should never happen.
-        int    msgID   = MSGID_TASKBE_CANNOT_DECODE_SCHEDULED_TASK_BASE_DN;
-        String message = getMessage(msgID,
-                                    String.valueOf(scheduledTaskBaseString),
-                                    getExceptionMessage(e));
-        throw new ConfigException(msgID, message, e);
+        Message message = ERR_TASKBE_CANNOT_DECODE_SCHEDULED_TASK_BASE_DN.get(
+            String.valueOf(scheduledTaskBaseString), getExceptionMessage(e));
+        throw new ConfigException(message, e);
       }
     }
 
@@ -283,10 +278,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_BACKEND_CANNOT_REGISTER_BASEDN;
-      String message = getMessage(msgID, taskRootDN.toString(),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+          taskRootDN.toString(), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
   }
 
@@ -322,8 +316,8 @@
 
     try
     {
-      int    msgID   = MSGID_TASKBE_INTERRUPTED_BY_SHUTDOWN;
-      String message = getMessage(msgID);
+
+      Message message = INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN.get();
 
       taskScheduler.interruptRunningTasks(TaskState.STOPPED_BY_SHUTDOWN,
                                           message, true);
@@ -526,11 +520,10 @@
 
     if (parentDN == null)
     {
-      int msgID = MSGID_TASKBE_ADD_DISALLOWED_DN;
-      String message = getMessage(msgID, String.valueOf(scheduledTaskParentDN),
-                                  String.valueOf(recurringTaskParentDN));
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_TASKBE_ADD_DISALLOWED_DN.
+          get(String.valueOf(scheduledTaskParentDN),
+              String.valueOf(recurringTaskParentDN));
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
     // If the parent DN is equal to the parent for scheduled tasks, then try to
@@ -552,11 +545,10 @@
     }
 
     // We won't allow the entry to be added.
-    int msgID = MSGID_TASKBE_ADD_DISALLOWED_DN;
-    String message = getMessage(msgID, String.valueOf(scheduledTaskParentDN),
-                                String.valueOf(recurringTaskParentDN));
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_TASKBE_ADD_DISALLOWED_DN.
+        get(String.valueOf(scheduledTaskParentDN),
+            String.valueOf(recurringTaskParentDN));
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -583,10 +575,9 @@
     DN parentDN = entryDN.getParentDNInSuffix();
     if (parentDN == null)
     {
-      int    msgID   = MSGID_TASKBE_DELETE_INVALID_ENTRY;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message =
+          ERR_TASKBE_DELETE_INVALID_ENTRY.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
     else if (parentDN.equals(scheduledTaskParentDN))
     {
@@ -594,9 +585,9 @@
       Task t = taskScheduler.getScheduledTask(entryDN);
       if (t == null)
       {
-        int    msgID   = MSGID_TASKBE_DELETE_NO_SUCH_TASK;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+        Message message =
+            ERR_TASKBE_DELETE_NO_SUCH_TASK.get(String.valueOf(entryDN));
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
 
 
@@ -613,10 +604,9 @@
       }
       else
       {
-        int    msgID   = MSGID_TASKBE_DELETE_RUNNING;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message =
+            ERR_TASKBE_DELETE_RUNNING.get(String.valueOf(entryDN));
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
     else if (parentDN.equals(recurringTaskParentDN))
@@ -625,9 +615,9 @@
       RecurringTask rt = taskScheduler.getRecurringTask(entryDN);
       if (rt == null)
       {
-        int    msgID   = MSGID_TASKBE_DELETE_NO_SUCH_RECURRING_TASK;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+        Message message = ERR_TASKBE_DELETE_NO_SUCH_RECURRING_TASK.get(
+            String.valueOf(entryDN));
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
 
 
@@ -637,10 +627,9 @@
     }
     else
     {
-      int    msgID   = MSGID_TASKBE_DELETE_INVALID_ENTRY;
-      String message = getMessage(msgID, String.valueOf(entryDN));
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message =
+          ERR_TASKBE_DELETE_INVALID_ENTRY.get(String.valueOf(entryDN));
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
   }
 
@@ -665,8 +654,8 @@
   {
     // FIXME -- We need to support this.
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                 "Modify operations are not yet supported in " +
-                                 "the task backend", 1);
+            Message.raw("Modify operations are not yet supported in " +
+                        "the task backend"));
   }
 
 
@@ -690,10 +679,8 @@
                                    ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    int    msgID   = MSGID_TASKBE_MODIFY_DN_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -796,9 +783,9 @@
       DN parentDN = baseDN.getParentDNInSuffix();
       if (parentDN == null)
       {
-        int    msgID   = MSGID_TASKBE_SEARCH_INVALID_BASE;
-        String message = getMessage(msgID, String.valueOf(baseDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+        Message message =
+            ERR_TASKBE_SEARCH_INVALID_BASE.get(String.valueOf(baseDN));
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
       else if (parentDN.equals(scheduledTaskParentDN))
       {
@@ -809,10 +796,10 @@
           Entry e = taskScheduler.getScheduledTaskEntry(baseDN);
           if (e == null)
           {
-            int    msgID   = MSGID_TASKBE_SEARCH_NO_SUCH_TASK;
-            String message = getMessage(msgID, String.valueOf(baseDN));
+            Message message =
+                ERR_TASKBE_SEARCH_NO_SUCH_TASK.get(String.valueOf(baseDN));
             throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
-                                         msgID, scheduledTaskParentDN, null);
+                                         scheduledTaskParentDN, null);
           }
 
           if (((searchScope == SearchScope.BASE_OBJECT) ||
@@ -838,10 +825,10 @@
           Entry e = taskScheduler.getRecurringTaskEntry(baseDN);
           if (e == null)
           {
-            int    msgID   = MSGID_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK;
-            String message = getMessage(msgID, String.valueOf(baseDN));
+            Message message = ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK.get(
+                String.valueOf(baseDN));
             throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
-                                         msgID, recurringTaskParentDN, null);
+                                         recurringTaskParentDN, null);
           }
 
           if (((searchScope == SearchScope.BASE_OBJECT) ||
@@ -860,9 +847,9 @@
       }
       else
       {
-        int    msgID   = MSGID_TASKBE_SEARCH_INVALID_BASE;
-        String message = getMessage(msgID, String.valueOf(baseDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+        Message message =
+            ERR_TASKBE_SEARCH_INVALID_BASE.get(String.valueOf(baseDN));
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
     }
 
@@ -998,10 +985,8 @@
          throws DirectoryException
   {
     // This backend does not support LDIF imports.
-    int    msgID   = MSGID_TASKBE_IMPORT_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_TASKBE_IMPORT_NOT_SUPPORTED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1111,7 +1096,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(Configuration configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     TaskBackendCfg config = (TaskBackendCfg) configuration;
     return isConfigAcceptable(config, unacceptableReasons, null);
@@ -1123,7 +1108,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(TaskBackendCfg configEntry,
-                                            List<String> unacceptableReasons)
+                                            List<Message> unacceptableReasons)
   {
     return isConfigAcceptable(configEntry, unacceptableReasons,
                               taskBackingFile);
@@ -1147,7 +1132,7 @@
    *          if not.
    */
   private static boolean isConfigAcceptable(TaskBackendCfg config,
-                                            List<String> unacceptableReasons,
+                                            List<Message> unacceptableReasons,
                                             String taskBackingFile)
   {
     boolean configIsAcceptable = true;
@@ -1165,8 +1150,8 @@
           // This is only a problem if it's different from the active one.
           if (taskBackingFile != null)
           {
-            int msgID = MSGID_TASKBE_BACKING_FILE_EXISTS;
-            unacceptableReasons.add(getMessage(msgID, tmpBackingFile));
+            unacceptableReasons.add(
+                    ERR_TASKBE_BACKING_FILE_EXISTS.get(tmpBackingFile));
             configIsAcceptable = false;
           }
         }
@@ -1175,22 +1160,24 @@
           File p = f.getParentFile();
           if (p == null)
           {
-            int msgID = MSGID_TASKBE_INVALID_BACKING_FILE_PATH;
-            unacceptableReasons.add(getMessage(msgID, tmpBackingFile));
+            unacceptableReasons.add(ERR_TASKBE_INVALID_BACKING_FILE_PATH.get(
+                    tmpBackingFile));
             configIsAcceptable = false;
           }
           else if (! p.exists())
           {
-            int msgID = MSGID_TASKBE_BACKING_FILE_MISSING_PARENT;
-            unacceptableReasons.add(getMessage(msgID, p.getPath(),
-                                               tmpBackingFile));
+
+            unacceptableReasons.add(ERR_TASKBE_BACKING_FILE_MISSING_PARENT.get(
+                    p.getPath(),
+                    tmpBackingFile));
             configIsAcceptable = false;
           }
           else if (! p.isDirectory())
           {
-            int msgID = MSGID_TASKBE_BACKING_FILE_PARENT_NOT_DIRECTORY;
-            unacceptableReasons.add(getMessage(msgID, p.getPath(),
-                                               tmpBackingFile));
+            unacceptableReasons.add(
+                    ERR_TASKBE_BACKING_FILE_PARENT_NOT_DIRECTORY.get(
+                            p.getPath(),
+                            tmpBackingFile));
             configIsAcceptable = false;
           }
         }
@@ -1203,9 +1190,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_TASKBE_ERROR_GETTING_BACKING_FILE;
-      unacceptableReasons.add(getMessage(msgID, ATTR_TASK_BACKING_FILE,
-                                         getExceptionMessage(e)));
+      unacceptableReasons.add(ERR_TASKBE_ERROR_GETTING_BACKING_FILE.get(
+              getExceptionMessage(e)));
 
       configIsAcceptable = false;
     }
@@ -1220,9 +1206,9 @@
    */
   public ConfigChangeResult applyConfigurationChange(TaskBackendCfg configEntry)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     String tmpBackingFile = taskBackingFile;
@@ -1235,8 +1221,8 @@
           File f = getFileForPath(tmpBackingFile);
           if (f.exists())
           {
-            int msgID = MSGID_TASKBE_BACKING_FILE_EXISTS;
-            messages.add(getMessage(msgID, tmpBackingFile));
+
+            messages.add(ERR_TASKBE_BACKING_FILE_EXISTS.get(tmpBackingFile));
             resultCode = ResultCode.CONSTRAINT_VIOLATION;
           }
           else
@@ -1244,20 +1230,23 @@
             File p = f.getParentFile();
             if (p == null)
             {
-              int msgID = MSGID_TASKBE_INVALID_BACKING_FILE_PATH;
-              messages.add(getMessage(msgID, tmpBackingFile));
+
+              messages.add(ERR_TASKBE_INVALID_BACKING_FILE_PATH.get(
+                      tmpBackingFile));
               resultCode = ResultCode.CONSTRAINT_VIOLATION;
             }
             else if (! p.exists())
             {
-              int msgID = MSGID_TASKBE_BACKING_FILE_MISSING_PARENT;
-              messages.add(getMessage(msgID, tmpBackingFile));
+
+              messages.add(ERR_TASKBE_BACKING_FILE_MISSING_PARENT.get(
+                      String.valueOf(p), tmpBackingFile));
               resultCode = ResultCode.CONSTRAINT_VIOLATION;
             }
             else if (! p.isDirectory())
             {
-              int msgID = MSGID_TASKBE_BACKING_FILE_PARENT_NOT_DIRECTORY;
-              messages.add(getMessage(msgID, tmpBackingFile));
+
+              messages.add(ERR_TASKBE_BACKING_FILE_PARENT_NOT_DIRECTORY.get(
+                      String.valueOf(p), tmpBackingFile));
               resultCode = ResultCode.CONSTRAINT_VIOLATION;
             }
           }
@@ -1271,9 +1260,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_TASKBE_ERROR_GETTING_BACKING_FILE;
-      messages.add(getMessage(msgID, ATTR_TASK_BACKING_FILE,
-                              getExceptionMessage(e)));
+      messages.add(ERR_TASKBE_ERROR_GETTING_BACKING_FILE.get(
+              getExceptionMessage(e)));
 
       resultCode = DirectoryServer.getServerErrorResultCode();
     }
@@ -1289,8 +1277,7 @@
       {
         retentionTime = tmpRetentionTime;
 
-        int msgID = MSGID_TASKBE_UPDATED_RETENTION_TIME;
-        messages.add(getMessage(msgID, retentionTime));
+        messages.add(INFO_TASKBE_UPDATED_RETENTION_TIME.get(retentionTime));
       }
 
 
@@ -1299,8 +1286,7 @@
         taskBackingFile = tmpBackingFile;
         taskScheduler.writeState();
 
-        int msgID = MSGID_TASKBE_UPDATED_BACKING_FILE;
-        messages.add(getMessage(msgID, taskBackingFile));
+        messages.add(INFO_TASKBE_UPDATED_BACKING_FILE.get(taskBackingFile));
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
index 9160631..d49d73f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.task;
+import org.opends.messages.Message;
 
 
 
@@ -50,8 +51,6 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ExistingFileBehavior;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LDIFImportConfig;
@@ -66,12 +65,11 @@
 import org.opends.server.util.TimeThread;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.loggers.ErrorLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.BackendMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -222,10 +220,9 @@
 
       if (recurringTasks.containsKey(id))
       {
-        int    msgID   = MSGID_TASKSCHED_DUPLICATE_RECURRING_ID;
-        String message = getMessage(msgID, String.valueOf(id));
-        throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message,
-                                     msgID);
+        Message message =
+            ERR_TASKSCHED_DUPLICATE_RECURRING_ID.get(String.valueOf(id));
+        throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message);
       }
 
       recurringTasks.put(id, recurringTask);
@@ -274,11 +271,11 @@
             (t.getRecurringTaskID().equals(recurringTaskID)) &&
             (! TaskState.isDone(t.getTaskState())))
         {
-          int    msgID   = MSGID_TASKSCHED_REMOVE_RECURRING_EXISTING_ITERATION;
-          String message = getMessage(msgID, String.valueOf(recurringTaskID),
-                                      String.valueOf(t.getTaskID()));
-          throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                       msgID);
+          Message message = ERR_TASKSCHED_REMOVE_RECURRING_EXISTING_ITERATION.
+              get(String.valueOf(recurringTaskID),
+                  String.valueOf(t.getTaskID()));
+          throw new DirectoryException(
+                  ResultCode.UNWILLING_TO_PERFORM, message);
         }
       }
 
@@ -323,10 +320,9 @@
 
       if (tasks.containsKey(id))
       {
-        int    msgID   = MSGID_TASKSCHED_DUPLICATE_TASK_ID;
-        String message = getMessage(msgID, String.valueOf(id));
-        throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message,
-                                     msgID);
+        Message message =
+            ERR_TASKSCHED_DUPLICATE_TASK_ID.get(String.valueOf(id));
+        throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message);
       }
 
       tasks.put(id, task);
@@ -432,9 +428,9 @@
       Task t = tasks.get(taskID);
       if (t == null)
       {
-        int    msgID   = MSGID_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK;
-        String message = getMessage(msgID, String.valueOf(taskID));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+        Message message = ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK.get(
+            String.valueOf(taskID));
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
 
       if (TaskState.isPending(t.getTaskState()))
@@ -446,10 +442,9 @@
       }
       else
       {
-        int   msgID    = MSGID_TASKSCHED_REMOVE_PENDING_NOT_PENDING;
-        String message = getMessage(msgID, String.valueOf(taskID));
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_TASKSCHED_REMOVE_PENDING_NOT_PENDING.get(
+            String.valueOf(taskID));
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
     finally
@@ -489,9 +484,9 @@
         }
       }
 
-      int    msgID   = MSGID_TASKSCHED_REMOVE_COMPLETED_NO_SUCH_TASK;
-      String message = getMessage(msgID, String.valueOf(taskID));
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+      Message message = ERR_TASKSCHED_REMOVE_COMPLETED_NO_SUCH_TASK.get(
+          String.valueOf(taskID));
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
     finally
     {
@@ -538,15 +533,13 @@
         if (recurringTask == null)
         {
           // This shouldn't happen, but handle it anyway.
-          int    msgID   = MSGID_TASKSCHED_CANNOT_FIND_RECURRING_TASK;
-          String message = getMessage(msgID, String.valueOf(taskID),
-                                      String.valueOf(recurringTaskID));
-          logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_TASKSCHED_CANNOT_FIND_RECURRING_TASK.get(
+              String.valueOf(taskID), String.valueOf(recurringTaskID));
+          logError(message);
 
           DirectoryServer.sendAlertNotification(this,
-                               ALERT_TYPE_CANNOT_FIND_RECURRING_TASK, msgID,
-                               message);
+                               ALERT_TYPE_CANNOT_FIND_RECURRING_TASK,
+                  message);
         }
         else
         {
@@ -566,15 +559,14 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, de);
               }
 
-              int msgID = MSGID_TASKSCHED_ERROR_SCHEDULING_RECURRING_ITERATION;
-              String message = getMessage(msgID, recurringTaskID,
-                                          de.getErrorMessage());
-              logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR,
-                       message, msgID);
+              Message message =
+                  ERR_TASKSCHED_ERROR_SCHEDULING_RECURRING_ITERATION.
+                    get(recurringTaskID, de.getMessageObject());
+              logError(message);
 
               DirectoryServer.sendAlertNotification(this,
-                   ALERT_TYPE_CANNOT_SCHEDULE_RECURRING_ITERATION, msgID,
-                   message);
+                   ALERT_TYPE_CANNOT_SCHEDULE_RECURRING_ITERATION,
+                      message);
             }
           }
         }
@@ -669,8 +661,7 @@
 
     for (TaskThread thread : idleThreads)
     {
-      int    msgID   = MSGID_TASKBE_INTERRUPTED_BY_SHUTDOWN;
-      String message = getMessage(msgID);
+      Message message = INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN.get();
       thread.interruptTask(TaskState.STOPPED_BY_SHUTDOWN, message, true);
     }
   }
@@ -683,13 +674,14 @@
    *
    * @param  interruptState   The state that should be assigned to the tasks if
    *                          they are successfully interrupted.
-   * @param  interruptReason  A human-readable message indicating the reason
-   *                          that the tasks are to be interrupted.
+   * @param  interruptReason  A message indicating the reason that the tasks
+   *                          are to be interrupted.
    * @param  waitForStop      Indicates whether this method should wait until
    *                          all active tasks have stopped before returning.
    */
   public void interruptRunningTasks(TaskState interruptState,
-                                    String interruptReason, boolean waitForStop)
+                                    Message interruptReason,
+                                    boolean waitForStop)
   {
     // Grab a copy of the running threads so that we can operate on them without
     // holding the lock.
@@ -955,11 +947,9 @@
 
           if (le.canContinueReading())
           {
-            int    msgID   = MSGID_TASKSCHED_CANNOT_PARSE_ENTRY_RECOVERABLE;
-            String message = getMessage(msgID, backingFilePath,
-                                        le.getLineNumber(), le.getMessage());
-            logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message = ERR_TASKSCHED_CANNOT_PARSE_ENTRY_RECOVERABLE.get(
+                backingFilePath, le.getLineNumber(), le.getMessage());
+            logError(message);
 
             continue;
           }
@@ -977,10 +967,9 @@
               }
             }
 
-            int    msgID   = MSGID_TASKSCHED_CANNOT_PARSE_ENTRY_FATAL;
-            String message = getMessage(msgID, backingFilePath,
-                                        le.getLineNumber(), le.getMessage());
-            throw new InitializationException(msgID, message);
+            Message message = ERR_TASKSCHED_CANNOT_PARSE_ENTRY_FATAL.get(
+                backingFilePath, le.getLineNumber(), le.getMessage());
+            throw new InitializationException(message);
           }
         }
 
@@ -1007,11 +996,10 @@
           DN parentDN = entryDN.getParentDNInSuffix();
           if (parentDN == null)
           {
-            int    msgID   = MSGID_TASKSCHED_ENTRY_HAS_NO_PARENT;
-            String message = getMessage(msgID, String.valueOf(entryDN),
-                                  String.valueOf(taskBackend.getTaskRootDN()));
-            logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message = ERR_TASKSCHED_ENTRY_HAS_NO_PARENT.
+                get(String.valueOf(entryDN),
+                    String.valueOf(taskBackend.getTaskRootDN()));
+            logError(message);
           }
           else if (parentDN.equals(taskBackend.getRecurringTasksParentDN()))
           {
@@ -1027,12 +1015,10 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, de);
               }
 
-              int msgID =
-                   MSGID_TASKSCHED_CANNOT_SCHEDULE_RECURRING_TASK_FROM_ENTRY;
-              String message = getMessage(msgID, String.valueOf(entryDN),
-                                          de.getErrorMessage());
-              logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR,
-                       message, msgID);
+              Message message =
+                  ERR_TASKSCHED_CANNOT_SCHEDULE_RECURRING_TASK_FROM_ENTRY.
+                    get(String.valueOf(entryDN), de.getMessageObject());
+              logError(message);
             }
           }
           else if (parentDN.equals(taskBackend.getScheduledTasksParentDN()))
@@ -1056,20 +1042,16 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, de);
               }
 
-              int    msgID   = MSGID_TASKSCHED_CANNOT_SCHEDULE_TASK_FROM_ENTRY;
-              String message = getMessage(msgID, String.valueOf(entryDN),
-                                          de.getErrorMessage());
-              logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR,
-                       message, msgID);
+              Message message = ERR_TASKSCHED_CANNOT_SCHEDULE_TASK_FROM_ENTRY.
+                  get(String.valueOf(entryDN), de.getMessageObject());
+              logError(message);
             }
           }
           else
           {
-            int    msgID   = MSGID_TASKSCHED_INVALID_TASK_ENTRY_DN;
-            String message = getMessage(msgID, String.valueOf(entryDN),
-                                        backingFilePath);
-            logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message = ERR_TASKSCHED_INVALID_TASK_ENTRY_DN.get(
+                String.valueOf(entryDN), backingFilePath);
+            logError(message);
           }
         }
       }
@@ -1083,10 +1065,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
       }
 
-      int msgID = MSGID_TASKSCHED_ERROR_READING_TASK_BACKING_FILE;
-      String message = getMessage(msgID, String.valueOf(backingFilePath),
-                                  stackTraceToSingleLineString(ioe));
-      throw new InitializationException(msgID, message, ioe);
+      Message message = ERR_TASKSCHED_ERROR_READING_TASK_BACKING_FILE.get(
+          String.valueOf(backingFilePath), stackTraceToSingleLineString(ioe));
+      throw new InitializationException(message, ioe);
     }
   }
 
@@ -1113,7 +1094,7 @@
 
       // First, write a header to the top of the file to indicate that it should
       // not be manually edited.
-      writer.writeComment(getMessage(MSGID_TASKBE_BACKING_FILE_HEADER), 80);
+      writer.writeComment(INFO_TASKBE_BACKING_FILE_HEADER.get(), 80);
 
 
       // Next, create the required hierarchical entries and add them to the
@@ -1140,10 +1121,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
       }
 
-      int    msgID   = MSGID_TASKSCHED_CANNOT_CREATE_BACKING_FILE;
-      String message = getMessage(msgID, backingFile,
-                                  stackTraceToSingleLineString(ioe));
-      throw new InitializationException(msgID, message, ioe);
+      Message message = ERR_TASKSCHED_CANNOT_CREATE_BACKING_FILE.get(
+          backingFile, stackTraceToSingleLineString(ioe));
+      throw new InitializationException(message, ioe);
     }
     catch (LDIFException le)
     {
@@ -1153,9 +1133,9 @@
       }
 
 
-      int    msgID   = MSGID_TASKSCHED_CANNOT_CREATE_BACKING_FILE;
-      String message = getMessage(msgID, backingFile, le.getMessage());
-      throw new InitializationException(msgID, message, le);
+      Message message = ERR_TASKSCHED_CANNOT_CREATE_BACKING_FILE.get(
+          backingFile, le.getMessage());
+      throw new InitializationException(message, le);
     }
   }
 
@@ -1180,7 +1160,7 @@
 
       // First, write a header to the top of the file to indicate that it should
       // not be manually edited.
-      writer.writeComment(getMessage(MSGID_TASKBE_BACKING_FILE_HEADER), 80);
+      writer.writeComment(INFO_TASKBE_BACKING_FILE_HEADER.get(), 80);
 
 
       // Next, write the structural entries to the top of the LDIF.
@@ -1241,16 +1221,15 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE;
-        String message = getMessage(msgID, String.valueOf(backingFilePath),
-                                    String.valueOf(saveFile.getAbsolutePath()),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE.
+            get(String.valueOf(backingFilePath),
+                String.valueOf(saveFile.getAbsolutePath()),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         DirectoryServer.sendAlertNotification(this,
-                             ALERT_TYPE_CANNOT_RENAME_CURRENT_TASK_FILE, msgID,
-                             message);
+                             ALERT_TYPE_CANNOT_RENAME_CURRENT_TASK_FILE,
+                message);
       }
 
 
@@ -1267,16 +1246,14 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE;
-        String message = getMessage(msgID, String.valueOf(tmpFilePath),
-                                    String.valueOf(backingFilePath),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR, message,
-                 msgID);
+        Message message = ERR_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE.
+            get(String.valueOf(tmpFilePath), String.valueOf(backingFilePath),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         DirectoryServer.sendAlertNotification(this,
-                             ALERT_TYPE_CANNOT_RENAME_NEW_TASK_FILE, msgID,
-                             message);
+                             ALERT_TYPE_CANNOT_RENAME_NEW_TASK_FILE,
+                message);
       }
     }
     catch (IOException ioe)
@@ -1286,14 +1263,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
       }
 
-      int    msgID   = MSGID_TASKSCHED_CANNOT_WRITE_BACKING_FILE;
-      String message = getMessage(msgID, tmpFilePath,
-                                  stackTraceToSingleLineString(ioe));
-
-      logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE.get(
+          tmpFilePath, stackTraceToSingleLineString(ioe));
+      logError(message);
       DirectoryServer.sendAlertNotification(this,
-                           ALERT_TYPE_CANNOT_WRITE_TASK_FILE, msgID, message);
+                           ALERT_TYPE_CANNOT_WRITE_TASK_FILE, message);
     }
     catch (LDIFException le)
     {
@@ -1303,13 +1277,11 @@
       }
 
 
-      int    msgID   = MSGID_TASKSCHED_CANNOT_WRITE_BACKING_FILE;
-      String message = getMessage(msgID, tmpFilePath, le.getMessage());
-
-      logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE.get(
+          tmpFilePath, le.getMessage());
+      logError(message);
       DirectoryServer.sendAlertNotification(this,
-                           ALERT_TYPE_CANNOT_WRITE_TASK_FILE, msgID, message);
+                           ALERT_TYPE_CANNOT_WRITE_TASK_FILE, message);
     }
     catch (Exception e)
     {
@@ -1318,14 +1290,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_TASKSCHED_CANNOT_WRITE_BACKING_FILE;
-      String message = getMessage(msgID, tmpFilePath,
-                                  stackTraceToSingleLineString(e));
-
-      logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE.get(
+          tmpFilePath, stackTraceToSingleLineString(e));
+      logError(message);
       DirectoryServer.sendAlertNotification(this,
-                           ALERT_TYPE_CANNOT_WRITE_TASK_FILE, msgID, message);
+                           ALERT_TYPE_CANNOT_WRITE_TASK_FILE, message);
     }
     finally
     {
@@ -1522,10 +1491,10 @@
 
     if (lock == null)
     {
-      int    msgID   = MSGID_BACKEND_CANNOT_LOCK_ENTRY;
-      String message = getMessage(msgID, String.valueOf(entryDN));
+      Message message =
+          ERR_BACKEND_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     else
     {
@@ -1819,47 +1788,37 @@
     List<Attribute> attrList = entry.getAttribute(attrType);
     if ((attrList == null) || attrList.isEmpty())
     {
-      int    msgID   = MSGID_TASKSCHED_NO_CLASS_ATTRIBUTE;
-      String message = getMessage(msgID, ATTR_TASK_ID);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_TASKSCHED_NO_CLASS_ATTRIBUTE.get(ATTR_TASK_ID);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     if (attrList.size() > 1)
     {
-      int    msgID   = MSGID_TASKSCHED_MULTIPLE_CLASS_TYPES;
-      String message = getMessage(msgID, ATTR_TASK_ID);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_TASKSCHED_MULTIPLE_CLASS_TYPES.get(ATTR_TASK_ID);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     Attribute attr = attrList.get(0);
     LinkedHashSet<AttributeValue> values = attr.getValues();
     if ((values == null) || values.isEmpty())
     {
-      int    msgID   = MSGID_TASKSCHED_NO_CLASS_VALUES;
-      String message = getMessage(msgID, ATTR_TASK_ID);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_TASKSCHED_NO_CLASS_VALUES.get(ATTR_TASK_ID);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     Iterator<AttributeValue> iterator = values.iterator();
     AttributeValue value = iterator.next();
     if (iterator.hasNext())
     {
-      int    msgID   = MSGID_TASKSCHED_MULTIPLE_CLASS_VALUES;
-      String message = getMessage(msgID, ATTR_TASK_ID);
-      throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_TASKSCHED_MULTIPLE_CLASS_VALUES.get(ATTR_TASK_ID);
+      throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
     }
 
     String taskClassName = value.getStringValue();
     if (! DirectoryServer.getAllowedTasks().contains(taskClassName))
     {
-      int    msgID   = MSGID_TASKSCHED_NOT_ALLOWED_TASK;
-      String message = getMessage(msgID, taskClassName);
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_TASKSCHED_NOT_ALLOWED_TASK.get(taskClassName);
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
 
@@ -1876,12 +1835,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_TASKSCHED_CANNOT_LOAD_CLASS;
-      String message = getMessage(msgID, String.valueOf(taskClassName),
-                                  ATTR_TASK_CLASS,
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_TASKSCHED_CANNOT_LOAD_CLASS.
+          get(String.valueOf(taskClassName), ATTR_TASK_CLASS,
+              stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -1898,10 +1856,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_TASKSCHED_CANNOT_INSTANTIATE_CLASS_AS_TASK;
-      String message = getMessage(msgID, String.valueOf(taskClassName));
+      Message message = ERR_TASKSCHED_CANNOT_INSTANTIATE_CLASS_AS_TASK.get(
+          String.valueOf(taskClassName), Task.class.getName());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -1917,19 +1875,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
 
-      int    msgID   = MSGID_TASKSCHED_CANNOT_INITIALIZE_INTERNAL;
-      String message = getMessage(msgID, String.valueOf(taskClassName),
-                                  ie.getMessage());
+      Message message = ERR_TASKSCHED_CANNOT_INITIALIZE_INTERNAL.get(
+          String.valueOf(taskClassName), ie.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_TASKSCHED_CANNOT_INITIALIZE_INTERNAL;
-      String message = getMessage(msgID, String.valueOf(taskClassName),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_TASKSCHED_CANNOT_INITIALIZE_INTERNAL.get(
+          String.valueOf(taskClassName), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskThread.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskThread.java
index 7f69593..49952be 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskThread.java
@@ -25,19 +25,18 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.task;
+import org.opends.messages.Message;
 
 
 
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.messages.BackendMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 import java.util.Map;
@@ -139,7 +138,7 @@
    * @param  exitThread       Indicates whether this thread should exit when
    *                          processing on the active task has completed.
    */
-  public void interruptTask(TaskState interruptState, String interruptReason,
+  public void interruptTask(TaskState interruptState, Message interruptReason,
                             boolean exitThread)
   {
     if (getAssociatedTask() != null)
@@ -207,13 +206,10 @@
 
         Task task = getAssociatedTask();
 
-        int    msgID   = MSGID_TASK_EXECUTE_FAILED;
-        String message = getMessage(msgID,
-                                    String.valueOf(task.getTaskEntry().getDN()),
-                                    stackTraceToSingleLineString(e));
-
-        logError(ErrorLogCategory.TASK, ErrorLogSeverity.FATAL_ERROR, message,
-                 msgID);
+        Message message = ERR_TASK_EXECUTE_FAILED.
+            get(String.valueOf(task.getTaskEntry().getDN()),
+                stackTraceToSingleLineString(e));
+        logError(message);
         task.setTaskState(TaskState.STOPPED_BY_ERROR);
       }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/BooleanConfigAttribute.java b/opendj-sdk/opends/src/server/org/opends/server/config/BooleanConfigAttribute.java
index 141e088..10e5c64 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/BooleanConfigAttribute.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/BooleanConfigAttribute.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -43,8 +44,7 @@
 import org.opends.server.types.AttributeValue;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -81,7 +81,7 @@
    *                              configuration attribute require administrative
    *                              action before they will take effect.
    */
-  public BooleanConfigAttribute(String name, String description,
+  public BooleanConfigAttribute(String name, Message description,
                                 boolean requiresAdminAction)
   {
     super(name, description, true, false, requiresAdminAction);
@@ -103,7 +103,7 @@
    * @param  value                The value for this Boolean configuration
    *                              attribute.
    */
-  public BooleanConfigAttribute(String name, String description,
+  public BooleanConfigAttribute(String name, Message description,
                                 boolean requiresAdminAction,
                                 boolean value)
   {
@@ -131,7 +131,7 @@
    * @param  pendingValue         The pending value for this Boolean
    *                              configuration attribute.
    */
-  public BooleanConfigAttribute(String name, String description,
+  public BooleanConfigAttribute(String name, Message description,
                                 boolean requiresAdminAction,
                                 boolean activeValue, boolean pendingValue)
   {
@@ -292,8 +292,8 @@
       return true;
     }
 
-    rejectReason.append(getMessage(MSGID_CONFIG_ATTR_INVALID_BOOLEAN_VALUE,
-                                   getName(), stringValue));
+    rejectReason.append(ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(
+            getName(), stringValue));
     return false;
   }
 
@@ -325,9 +325,8 @@
   {
     if ((valueStrings == null) || valueStrings.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -335,9 +334,8 @@
     String valueString = iterator.next().toLowerCase();
     if (iterator.hasNext())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      throw new ConfigException(message);
     }
 
     if (valueString.equals("true") || valueString.equals("yes") ||
@@ -352,9 +350,9 @@
     }
     else
     {
-      int    msgID   = MSGID_CONFIG_ATTR_INVALID_BOOLEAN_VALUE;
-      String message = getMessage(msgID, getName(), valueString);
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(getName(), valueString);
+      throw new ConfigException(message);
     }
   }
 
@@ -447,9 +445,9 @@
           if (pendingValueSet)
           {
             // We cannot have multiple pending values.
-            int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
+            throw new ConfigException(message);
           }
 
 
@@ -457,9 +455,8 @@
           if (values.isEmpty())
           {
             // This is illegal -- it must have a value.
-            int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            throw new ConfigException(message);
           }
           else
           {
@@ -482,17 +479,17 @@
             else
             {
               // This is an illegal value.
-              int msgID = MSGID_CONFIG_ATTR_INVALID_BOOLEAN_VALUE;
-              String message = getMessage(msgID, getName(), valueString);
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(
+                  getName(), valueString);
+              throw new ConfigException(message);
             }
 
             if (iterator.hasNext())
             {
               // This is illegal -- it must be single-valued.
-              int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-              String message = getMessage(msgID, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message =
+                  ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+              throw new ConfigException(message);
             }
           }
         }
@@ -500,9 +497,9 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          int    msgID   = MSGID_CONFIG_ATTR_OPTIONS_NOT_ALLOWED;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName());
+          throw new ConfigException(message);
         }
       }
       else
@@ -511,9 +508,9 @@
         if (activeValueSet)
         {
           // We cannot have multiple active values.
-          int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
+          throw new ConfigException(message);
         }
 
 
@@ -521,9 +518,8 @@
         if (values.isEmpty())
         {
           // This is illegal -- it must have a value.
-          int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+          throw new ConfigException(message);
         }
         else
         {
@@ -546,17 +542,17 @@
           else
           {
             // This is an illegal value.
-            int msgID = MSGID_CONFIG_ATTR_INVALID_BOOLEAN_VALUE;
-            String message = getMessage(msgID, getName(), valueString);
-            throw new ConfigException(msgID, message);
+            Message message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(
+                getName(), valueString);
+            throw new ConfigException(message);
           }
 
           if (iterator.hasNext())
           {
             // This is illegal -- it must be single-valued.
-            int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+            throw new ConfigException(message);
           }
         }
       }
@@ -565,9 +561,8 @@
     if (! activeValueSet)
     {
       // This is not OK.  The value set must contain an active value.
-      int    msgID   = MSGID_CONFIG_ATTR_NO_ACTIVE_VALUE_SET;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingValueSet)
@@ -653,16 +648,18 @@
   {
     attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                  Boolean.class.getName(),
-                                                 getDescription(), true, true,
-                                                 false));
+                                                 String.valueOf(
+                                                         getDescription()),
+                                                 true, true, false));
 
     if (requiresAdminAction())
     {
       String name = getName() + ";" + OPTION_PENDING_VALUES;
       attributeInfoList.add(new MBeanAttributeInfo(name,
                                                    Boolean.class.getName(),
-                                                   getDescription(), true,
-                                                   false, false));
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, false, false));
     }
   }
 
@@ -678,7 +675,7 @@
   public MBeanParameterInfo toJMXParameterInfo()
   {
     return new MBeanParameterInfo(getName(), Boolean.TYPE.getName(),
-                                  getDescription());
+                                  String.valueOf(getDescription()));
   }
 
 
@@ -717,18 +714,17 @@
       }
       else
       {
-        int    msgID   = MSGID_CONFIG_ATTR_INVALID_BOOLEAN_VALUE;
-        String message = getMessage(msgID, getName(), stringValue);
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(getName(), stringValue);
+        throw new ConfigException(message);
       }
     }
     else
     {
-      int    msgID   = MSGID_CONFIG_ATTR_INVALID_BOOLEAN_VALUE;
-      String message = getMessage(msgID, getName(),
-                                  value.getClass().getName() + ":" +
+      Message message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(
+          getName(), value.getClass().getName() + ":" +
                                        String.valueOf(value));
-      throw new ConfigException(msgID, message);
+      throw new ConfigException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/ConfigAttribute.java b/opendj-sdk/opends/src/server/org/opends/server/config/ConfigAttribute.java
index 2bf7dcd..e1f44d1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/ConfigAttribute.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/ConfigAttribute.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -39,11 +40,7 @@
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeValue;
 
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
+import static org.opends.messages.ConfigMessages.*;
 /**
  * This class defines a configuration attribute, which can hold zero or more
  * values associated with a configurable property within the Directory Server.
@@ -77,7 +74,7 @@
   private LinkedHashSet<AttributeValue> pendingValues;
 
   // The description for this configuration attribute.
-  private String description;
+  private Message description;
 
   // The name for this configuration attribute.
   private String name;
@@ -100,8 +97,9 @@
    *                              configuration attribute require administrative
    *                              action before they will take effect.
    */
-  protected ConfigAttribute(String name, String description, boolean isRequired,
-                            boolean isMultiValued, boolean requiresAdminAction)
+  protected ConfigAttribute(String name, Message description,
+                            boolean isRequired, boolean isMultiValued,
+                            boolean requiresAdminAction)
   {
     this.name                = name;
     this.description         = description;
@@ -132,8 +130,9 @@
    * @param  activeValues         The set of values for this attribute that are
    *                              currently active.
    */
-  protected ConfigAttribute(String name, String description, boolean isRequired,
-                            boolean isMultiValued, boolean requiresAdminAction,
+  protected ConfigAttribute(String name, Message description,
+                            boolean isRequired, boolean isMultiValued,
+                            boolean requiresAdminAction,
                             LinkedHashSet<AttributeValue> activeValues)
   {
     this.name                = name;
@@ -181,8 +180,9 @@
    *                              <CODE>null</CODE> if changes will take effect
    *                              immediately.
    */
-  protected ConfigAttribute(String name, String description, boolean isRequired,
-                            boolean isMultiValued, boolean requiresAdminAction,
+  protected ConfigAttribute(String name, Message description,
+                            boolean isRequired, boolean isMultiValued,
+                            boolean requiresAdminAction,
                             LinkedHashSet<AttributeValue> activeValues,
                             boolean hasPendingValues,
                             LinkedHashSet<AttributeValue> pendingValues)
@@ -240,7 +240,7 @@
    * @return  The description for this configuration attribute, or
    *          <CODE>null</CODE> if there is no description.
    */
-  public String getDescription()
+  public Message getDescription()
   {
     return description;
   }
@@ -401,9 +401,8 @@
     {
       if (isRequired)
       {
-        int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-        String message = getMessage(msgID, name);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(name);
+        throw new ConfigException(message);
       }
       else
       {
@@ -447,10 +446,9 @@
 
     if (! valueIsAcceptable(value, rejectReason))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_REJECTED_VALUE;
-      String message = getMessage(msgID, value.getStringValue(), name,
-                                  rejectReason.toString());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_REJECTED_VALUE.get(
+          value.getStringValue(), name, rejectReason.toString());
+      throw new ConfigException(message);
     }
 
 
@@ -458,9 +456,8 @@
     // provided, then reject it.
     if ((! isMultiValued) && iterator.hasNext())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-      String message = getMessage(msgID, name);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(name);
+      throw new ConfigException(message);
     }
 
 
@@ -470,10 +467,9 @@
       value = iterator.next();
       if (! valueIsAcceptable(value, rejectReason))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_REJECTED_VALUE;
-        String message = getMessage(msgID, value.getStringValue(), name,
-                                    rejectReason.toString());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_REJECTED_VALUE.get(
+            value.getStringValue(), name, rejectReason.toString());
+        throw new ConfigException(message);
       }
     }
 
@@ -560,9 +556,8 @@
       if ((numValues > 1) || (hasPendingValues && (pendingValues.size() > 0)) ||
           ((! hasPendingValues) && (activeValues.size() > 0)))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_ADD_VALUES_IS_SINGLE_VALUED;
-        String message = getMessage(msgID, name);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_ADD_VALUES_IS_SINGLE_VALUED.get(name);
+        throw new ConfigException(message);
       }
     }
 
@@ -591,17 +586,16 @@
     {
       if (tempValues.contains(value))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS;
-        String message = getMessage(msgID, name, value.getStringValue());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(
+            name, value.getStringValue());
+        throw new ConfigException(message);
       }
 
       if (! valueIsAcceptable(value, rejectReason))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_REJECTED_VALUE;
-        String message = getMessage(msgID, value.getStringValue(), name,
-                                    rejectReason.toString());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_REJECTED_VALUE.get(
+            value.getStringValue(), name, rejectReason.toString());
+        throw new ConfigException(message);
       }
     }
 
@@ -660,9 +654,9 @@
     {
       if (! tempValues.remove(value))
       {
-        int msgID = MSGID_CONFIG_ATTR_NO_SUCH_VALUE;
-        String message = getMessage(msgID, name, value.getStringValue());
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CONFIG_ATTR_NO_SUCH_VALUE.get(name, value.getStringValue());
+        throw new ConfigException(message);
       }
     }
 
@@ -671,9 +665,8 @@
     // least one value.
     if (isRequired && tempValues.isEmpty())
     {
-      int msgID = MSGID_CONFIG_ATTR_IS_REQUIRED;
-      String message = getMessage(msgID, name);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(name);
+      throw new ConfigException(message);
     }
 
 
@@ -705,9 +698,8 @@
   {
     if (isRequired)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-      String message = getMessage(msgID, name);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(name);
+      throw new ConfigException(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/ConfigEntry.java b/opendj-sdk/opends/src/server/org/opends/server/config/ConfigEntry.java
index b0ae635..3615bc6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/ConfigEntry.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/ConfigEntry.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -49,8 +50,7 @@
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -375,10 +375,9 @@
 
     if (conflictingChild != null)
     {
-      int    msgID   = MSGID_CONFIG_ENTRY_CONFLICTING_CHILD;
-      String message = getMessage(msgID, conflictingChild.getDN().toString(),
-                                  entry.getDN().toString());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ENTRY_CONFLICTING_CHILD.get(
+          conflictingChild.getDN().toString(), entry.getDN().toString());
+      throw new ConfigException(message);
     }
   }
 
@@ -408,18 +407,16 @@
       ConfigEntry childEntry = children.get(childDN);
       if (childEntry == null)
       {
-        int    msgID   = MSGID_CONFIG_ENTRY_NO_SUCH_CHILD;
-        String message = getMessage(msgID, childDN.toString(),
-                                    entry.getDN().toString());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ENTRY_NO_SUCH_CHILD.get(
+            childDN.toString(), entry.getDN().toString());
+        throw new ConfigException(message);
       }
 
       if (childEntry.hasChildren())
       {
-        int    msgID   = MSGID_CONFIG_ENTRY_CANNOT_REMOVE_NONLEAF;
-        String message = getMessage(msgID, childDN.toString(),
-                                    entry.getDN().toString());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ENTRY_CANNOT_REMOVE_NONLEAF.get(
+            childDN.toString(), entry.getDN().toString());
+        throw new ConfigException(message);
       }
 
       children.remove(childDN);
@@ -436,12 +433,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_ENTRY_CANNOT_REMOVE_CHILD;
-      String message = getMessage(msgID, String.valueOf(childDN),
-                                  String.valueOf(entry.getDN()),
-                                  stackTraceToSingleLineString(e));
-
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_ENTRY_CANNOT_REMOVE_CHILD.
+          get(String.valueOf(childDN), String.valueOf(entry.getDN()),
+              stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     }
     finally
     {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/ConfigException.java b/opendj-sdk/opends/src/server/org/opends/server/config/ConfigException.java
index 24e33ad..69d8eec 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/ConfigException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/ConfigException.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -50,23 +51,16 @@
 
 
 
-  // The unique message ID for the associated message.
-  private int messageID;
-
 
 
   /**
    * Creates a new configuration exception with the provided message.
    *
-   * @param  messageID  The unique message ID for the provided message.
    * @param  message    The message to use for this configuration exception.
    */
-  public ConfigException(int messageID, String message)
+  public ConfigException(Message message)
   {
     super(message);
-
-
-    this.messageID = messageID;
   }
 
 
@@ -75,29 +69,16 @@
    * Creates a new configuration exception with the provided message and
    * underlying cause.
    *
-   * @param  messageID  The unique message ID for the provided message.
    * @param  message    The message to use for this configuration exception.
    * @param  cause      The underlying cause that triggered this configuration
    *                    exception.
    */
-  public ConfigException(int messageID, String message, Throwable cause)
+  public ConfigException(Message message, Throwable cause)
   {
     super(message, cause);
-
-
-    this.messageID = messageID;
   }
 
 
 
-  /**
-   * Retrieves the message ID for this exception.
-   *
-   * @return  The message ID for this exception.
-   */
-  public int getMessageID()
-  {
-    return messageID;
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/DNConfigAttribute.java b/opendj-sdk/opends/src/server/org/opends/server/config/DNConfigAttribute.java
index f393d96..2e46a24 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/DNConfigAttribute.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/DNConfigAttribute.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -42,18 +43,13 @@
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.DebugLogLevel;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ConfigMessages.*;
 /**
  * This class defines a DN configuration attribute, which can hold zero or more
  * DN values.
@@ -93,7 +89,7 @@
    *                              configuration attribute require administrative
    *                              action before they will take effect.
    */
-  public DNConfigAttribute(String name, String description, boolean isRequired,
+  public DNConfigAttribute(String name, Message description, boolean isRequired,
                            boolean isMultiValued, boolean requiresAdminAction)
   {
     super(name, description, isRequired, isMultiValued, requiresAdminAction);
@@ -121,7 +117,7 @@
    *                              action before they will take effect.
    * @param  value                The value for this DN configuration attribute.
    */
-  public DNConfigAttribute(String name, String description, boolean isRequired,
+  public DNConfigAttribute(String name, Message description, boolean isRequired,
                            boolean isMultiValued, boolean requiresAdminAction,
                            DN value)
   {
@@ -161,7 +157,7 @@
    * @param  values               The set of values for this configuration
    *                              attribute.
    */
-  public DNConfigAttribute(String name, String description, boolean isRequired,
+  public DNConfigAttribute(String name, Message description, boolean isRequired,
                            boolean isMultiValued, boolean requiresAdminAction,
                            List<DN> values)
   {
@@ -202,7 +198,7 @@
    * @param  pendingValues        The set of pending values for this
    *                              configuration attribute.
    */
-  public DNConfigAttribute(String name, String description, boolean isRequired,
+  public DNConfigAttribute(String name, Message description, boolean isRequired,
                            boolean isMultiValued, boolean requiresAdminAction,
                            List<DN> activeValues, List<DN> pendingValues)
   {
@@ -273,16 +269,14 @@
   {
     if ((activeValues == null) || activeValues.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_STRING_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (activeValues.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_STRING_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     return activeValues.get(0);
@@ -323,16 +317,14 @@
 
     if ((pendingValues == null) || pendingValues.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_STRING_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingValues.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_STRING_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     return pendingValues.get(0);
@@ -371,9 +363,8 @@
   {
     if (value == null)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_DN_NULL;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
+      throw new ConfigException(message);
     }
 
     if (requiresAdminAction())
@@ -409,9 +400,8 @@
     {
       if (isRequired())
       {
-        int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        throw new ConfigException(message);
       }
       else
       {
@@ -433,9 +423,9 @@
     int numValues = values.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -447,9 +437,8 @@
     {
       if (value == null)
       {
-        int    msgID   = MSGID_CONFIG_ATTR_DN_NULL;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
+        throw new ConfigException(message);
       }
 
       AttributeValue attrValue =
@@ -458,9 +447,10 @@
 
       if (valueSet.contains(attrValue))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS;
-        String message = getMessage(msgID, getName(), value);
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(
+                    getName(), String.valueOf(value));
+        throw new ConfigException(message);
       }
 
       valueSet.add(attrValue);
@@ -573,7 +563,7 @@
     // Make sure that the value is not null.
     if (value == null)
     {
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_DN_NULL, getName()));
+      rejectReason.append(ERR_CONFIG_ATTR_DN_NULL.get(getName()));
       return false;
     }
 
@@ -590,9 +580,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_DN_CANNOT_PARSE,
-                                     value.getStringValue(), getName(),
-                                     String.valueOf(e)));
+      rejectReason.append(ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+              value.getStringValue(), getName(),
+              String.valueOf(e)));
       return false;
     }
 
@@ -630,9 +620,8 @@
     {
       if (isRequired())
       {
-        int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        throw new ConfigException(message);
       }
       else
       {
@@ -644,9 +633,9 @@
     int numValues = valueStrings.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -656,18 +645,15 @@
     {
       if (valueString == null)
       {
-        int    msgID   = MSGID_CONFIG_ATTR_DN_NULL;
-        String message = getMessage(msgID, getName());
-
+        Message message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
         if (allowFailures)
         {
-          logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          throw new ConfigException(msgID, message);
+          throw new ConfigException(message);
         }
       }
 
@@ -684,19 +670,18 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_CONFIG_ATTR_DN_CANNOT_PARSE;
-        String message = getMessage(msgID, valueString, getName(),
-                                    String.valueOf(e));
+        Message message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+                valueString, getName(),
+                String.valueOf(e));
 
         if (allowFailures)
         {
-          logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          throw new ConfigException(msgID, message);
+          throw new ConfigException(message);
         }
       }
 
@@ -711,9 +696,8 @@
     // attribute and if so deal with it accordingly.
     if ((isRequired()) && valueSet.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -814,9 +798,9 @@
           if (pendingValues != null)
           {
             // We cannot have multiple pending value sets.
-            int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
+            throw new ConfigException(message);
           }
 
 
@@ -826,9 +810,8 @@
             if (isRequired())
             {
               // This is illegal -- it must have a value.
-              int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-              String message = getMessage(msgID, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+              throw new ConfigException(message);
             }
             else
             {
@@ -842,9 +825,9 @@
             if ((numValues > 1) && (! isMultiValued()))
             {
               // This is illegal -- the attribute is single-valued.
-              int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-              String message = getMessage(msgID, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message =
+                  ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+              throw new ConfigException(message);
             }
 
             pendingValues = new ArrayList<DN>(numValues);
@@ -862,10 +845,9 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, e);
                 }
 
-                int msgID = MSGID_CONFIG_ATTR_DN_CANNOT_PARSE;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            getName(), String.valueOf(e));
-                throw new ConfigException(msgID, message, e);
+                Message message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+                    v.getStringValue(), getName(), String.valueOf(e));
+                throw new ConfigException(message, e);
               }
 
               pendingValues.add(dn);
@@ -876,9 +858,9 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          int    msgID   = MSGID_CONFIG_ATTR_OPTIONS_NOT_ALLOWED;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName());
+          throw new ConfigException(message);
         }
       }
       else
@@ -887,9 +869,9 @@
         if (activeValues!= null)
         {
           // We cannot have multiple active value sets.
-          int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
+          throw new ConfigException(message);
         }
 
 
@@ -899,9 +881,8 @@
           if (isRequired())
           {
             // This is illegal -- it must have a value.
-            int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            throw new ConfigException(message);
           }
           else
           {
@@ -915,9 +896,9 @@
           if ((numValues > 1) && (! isMultiValued()))
           {
             // This is illegal -- the attribute is single-valued.
-            int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+            throw new ConfigException(message);
           }
 
           activeValues = new ArrayList<DN>(numValues);
@@ -935,10 +916,9 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int msgID = MSGID_CONFIG_ATTR_DN_CANNOT_PARSE;
-              String message = getMessage(msgID, v.getStringValue(), getName(),
-                                          String.valueOf(e));
-              throw new ConfigException(msgID, message, e);
+              Message message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+                  v.getStringValue(), getName(), String.valueOf(e));
+              throw new ConfigException(message, e);
             }
 
             activeValues.add(dn);
@@ -950,9 +930,8 @@
     if (activeValues == null)
     {
       // This is not OK.  The value set must contain an active value.
-      int    msgID   = MSGID_CONFIG_ATTR_NO_ACTIVE_VALUE_SET;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingValues == null)
@@ -1130,15 +1109,17 @@
     {
       attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                    JMX_TYPE_STRING_ARRAY,
-                                                   getDescription(), true, true,
-                                                   false));
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, true, false));
     }
     else
     {
       attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                    String.class.getName(),
-                                                   getDescription(), true, true,
-                                                   false));
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, true, false));
     }
 
 
@@ -1150,15 +1131,17 @@
       {
         attributeInfoList.add(new MBeanAttributeInfo(name,
                                                      JMX_TYPE_STRING_ARRAY,
-                                                     getDescription(), true,
-                                                     false, false));
+                                                     String.valueOf(
+                                                             getDescription()),
+                                                     true, false, false));
       }
       else
       {
         attributeInfoList.add(new MBeanAttributeInfo(name,
                                                      String.class.getName(),
-                                                     getDescription(), true,
-                                                     false, false));
+                                                     String.valueOf(
+                                                             getDescription()),
+                                                     true, false, false));
       }
     }
   }
@@ -1177,12 +1160,12 @@
     if (isMultiValued())
     {
       return new MBeanParameterInfo(getName(), JMX_TYPE_STRING_ARRAY,
-                                    getDescription());
+                                    String.valueOf(getDescription()));
     }
     else
     {
       return new MBeanParameterInfo(getName(), String.class.getName(),
-                                    getDescription());
+                                    String.valueOf(getDescription()));
     }
   }
 
@@ -1205,9 +1188,8 @@
     Object value = jmxAttribute.getValue();
     if (value == null)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_DN_NULL;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
+      throw new ConfigException(message);
     }
     else if (value instanceof DN)
     {
@@ -1227,10 +1209,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_CONFIG_ATTR_DN_CANNOT_PARSE;
-        String message = getMessage(msgID, (String) value, getName(),
-                                    String.valueOf(e));
-        throw new ConfigException(msgID, message, e);
+        Message message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+            (String) value, getName(), String.valueOf(e));
+        throw new ConfigException(message, e);
       }
 
       setValue(dn);
@@ -1272,10 +1253,9 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int    msgID   = MSGID_CONFIG_ATTR_DN_CANNOT_PARSE;
-              String message = getMessage(msgID, valueStr, getName(),
-                                          String.valueOf(e));
-              throw new ConfigException(msgID, message, e);
+              Message message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+                  valueStr, getName(), String.valueOf(e));
+              throw new ConfigException(message, e);
             }
 
             values.add(dn);
@@ -1299,25 +1279,25 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_CONFIG_ATTR_INVALID_DN_VALUE;
-          String message = getMessage(msgID, getName(), String.valueOf(value),
-                                      String.valueOf(e));
-          throw new ConfigException(msgID, message, e);
+          Message message = ERR_CONFIG_ATTR_INVALID_DN_VALUE.get(
+              getName(), String.valueOf(value), String.valueOf(e));
+          throw new ConfigException(message, e);
         }
       }
       else
       {
-        int    msgID   = MSGID_CONFIG_ATTR_DN_INVALID_ARRAY_TYPE;
-        String message = getMessage(msgID, componentType);
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CONFIG_ATTR_DN_INVALID_ARRAY_TYPE.get(
+                    String.valueOf(jmxAttribute),
+                    String.valueOf(componentType));
+        throw new ConfigException(message);
       }
     }
     else
     {
-      int    msgID   = MSGID_CONFIG_ATTR_DN_INVALID_TYPE;
-      String message = getMessage(msgID, String.valueOf(value), getName(),
-                                  value.getClass().getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_DN_INVALID_TYPE.get(
+          String.valueOf(value), getName(), value.getClass().getName());
+      throw new ConfigException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/IntegerConfigAttribute.java b/opendj-sdk/opends/src/server/org/opends/server/config/IntegerConfigAttribute.java
index cee978a..800edf4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/IntegerConfigAttribute.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/IntegerConfigAttribute.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -41,18 +42,13 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeValue;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.DebugLogLevel;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ConfigMessages.*;
 /**
  * This class defines an integer configuration attribute, which can hold zero or
  * more integer values.  For scalability, the actual values will be stored as
@@ -114,7 +110,7 @@
    * @param  upperBound           The upper bound that will be enforced for
    *                              values of this attribute.
    */
-  public IntegerConfigAttribute(String name, String description,
+  public IntegerConfigAttribute(String name, Message description,
                                 boolean isRequired, boolean isMultiValued,
                                 boolean requiresAdminAction,
                                 boolean hasLowerBound, long lowerBound,
@@ -159,7 +155,7 @@
    * @param  value                The value for this integer configuration
    *                              attribute.
    */
-  public IntegerConfigAttribute(String name, String description,
+  public IntegerConfigAttribute(String name, Message description,
                                 boolean isRequired, boolean isMultiValued,
                                 boolean requiresAdminAction,
                                 boolean hasLowerBound, long lowerBound,
@@ -208,7 +204,7 @@
    * @param  values               The set of values for this configuration
    *                              attribute.
    */
-  public IntegerConfigAttribute(String name, String description,
+  public IntegerConfigAttribute(String name, Message description,
                                 boolean isRequired, boolean isMultiValued,
                                 boolean requiresAdminAction,
                                 boolean hasLowerBound, long lowerBound,
@@ -265,7 +261,7 @@
    * @param  pendingValues        The set of pending values for this
    *                              configuration attribute.
    */
-  public IntegerConfigAttribute(String name, String description,
+  public IntegerConfigAttribute(String name, Message description,
                                 boolean isRequired, boolean isMultiValued,
                                 boolean requiresAdminAction,
                                 boolean hasLowerBound, long lowerBound,
@@ -345,16 +341,14 @@
   {
     if ((activeValues == null) || activeValues.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_INT_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (activeValues.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_INT_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     return activeValues.get(0);
@@ -379,16 +373,14 @@
   {
     if ((activeValues == null) || activeValues.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_INT_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (activeValues.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_INT_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     long longValue = activeValues.get(0);
@@ -399,9 +391,8 @@
     }
     else
     {
-      int    msgID   = MSGID_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE.get(getName());
+      throw new ConfigException(message);
     }
   }
 
@@ -440,16 +431,14 @@
 
     if ((pendingValues == null) || pendingValues.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_INT_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingValues.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_INT_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     return pendingValues.get(0);
@@ -480,16 +469,14 @@
 
     if ((pendingValues == null) || pendingValues.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_INT_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingValues.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_INT_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     long longValue = pendingValues.get(0);
@@ -500,9 +487,8 @@
     }
     else
     {
-      int    msgID   = MSGID_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE.get(getName());
+      throw new ConfigException(message);
     }
   }
 
@@ -595,16 +581,16 @@
   {
     if (hasLowerBound && (value < lowerBound))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND;
-      String message = getMessage(msgID, getName(), value, lowerBound);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+          getName(), value, lowerBound);
+      throw new ConfigException(message);
     }
 
     if (hasUpperBound && (value > upperBound))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND;
-      String message = getMessage(msgID, getName(), value, upperBound);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+          getName(), value, upperBound);
+      throw new ConfigException(message);
     }
 
     if (requiresAdminAction())
@@ -640,9 +626,8 @@
     {
       if (isRequired())
       {
-        int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        throw new ConfigException(message);
       }
       else
       {
@@ -664,9 +649,9 @@
     int numValues = values.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -678,16 +663,16 @@
     {
       if (hasLowerBound && (value < lowerBound))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND;
-        String message = getMessage(msgID, getName(), value, lowerBound);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+            getName(), value, lowerBound);
+        throw new ConfigException(message);
       }
 
       if (hasUpperBound && (value > upperBound))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND;
-        String message = getMessage(msgID, getName(), value, upperBound);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+            getName(), value, upperBound);
+        throw new ConfigException(message);
       }
 
       String valueString = String.valueOf(value);
@@ -697,9 +682,9 @@
 
       if (valueSet.contains(attrValue))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS;
-        String message = getMessage(msgID, getName(), valueString);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(
+            getName(), valueString);
+        throw new ConfigException(message);
       }
 
       valueSet.add(attrValue);
@@ -819,8 +804,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_INVALID_INT_VALUE,
-                                     stringValue, String.valueOf(e)));
+      rejectReason.append(ERR_CONFIG_ATTR_INVALID_INT_VALUE.get(
+              getName(), stringValue, String.valueOf(e)));
       return false;
     }
 
@@ -828,15 +813,15 @@
     // Perform any necessary bounds checking.
     if (hasLowerBound && (longValue < lowerBound))
     {
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND,
-                                     getName(), longValue, lowerBound));
+      rejectReason.append(ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+              getName(), longValue, lowerBound));
       return false;
     }
 
     if (hasUpperBound && (longValue > upperBound))
     {
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND,
-                                     getName(), longValue, upperBound));
+      rejectReason.append(ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+              getName(), longValue, upperBound));
       return false;
     }
 
@@ -875,9 +860,8 @@
     {
       if (isRequired())
       {
-        int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        throw new ConfigException(message);
       }
       else
       {
@@ -889,9 +873,9 @@
     int numValues = valueStrings.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -911,55 +895,52 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_CONFIG_ATTR_INT_COULD_NOT_PARSE;
-        String message = getMessage(msgID, valueString, getName(),
-                                    String.valueOf(e));
+        Message message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+                valueString, getName(),
+                String.valueOf(e));
 
         if (allowFailures)
         {
-          logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          throw new ConfigException(msgID, message);
+          throw new ConfigException(message);
         }
       }
 
 
       if (hasLowerBound && (longValue < lowerBound))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND;
-        String message = getMessage(msgID, getName(), longValue, lowerBound);
 
+        Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+                getName(), longValue, lowerBound);
         if (allowFailures)
         {
-          logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          throw new ConfigException(msgID, message);
+          throw new ConfigException(message);
         }
       }
 
 
       if (hasUpperBound && (longValue > upperBound))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND;
-        String message = getMessage(msgID, getName(), longValue, upperBound);
+        Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+                getName(), longValue, upperBound);
 
         if (allowFailures)
         {
-          logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          throw new ConfigException(msgID, message);
+          throw new ConfigException(message);
         }
       }
 
@@ -974,9 +955,8 @@
     // attribute and if so deal with it accordingly.
     if ((isRequired()) && valueSet.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -1078,9 +1058,9 @@
           if (pendingValues != null)
           {
             // We cannot have multiple pending value sets.
-            int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
+            throw new ConfigException(message);
           }
 
 
@@ -1090,9 +1070,8 @@
             if (isRequired())
             {
               // This is illegal -- it must have a value.
-              int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-              String message = getMessage(msgID, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+              throw new ConfigException(message);
             }
             else
             {
@@ -1106,9 +1085,9 @@
             if ((numValues > 1) && (! isMultiValued()))
             {
               // This is illegal -- the attribute is single-valued.
-              int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-              String message = getMessage(msgID, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message =
+                  ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+              throw new ConfigException(message);
             }
 
             pendingValues = new ArrayList<Long>(numValues);
@@ -1121,28 +1100,25 @@
               }
               catch (Exception e)
               {
-                int    msgID   = MSGID_CONFIG_ATTR_INT_COULD_NOT_PARSE;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            a.getName(), String.valueOf(e));
-                throw new ConfigException(msgID, message, e);
+                Message message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+                    v.getStringValue(), a.getName(), String.valueOf(e));
+                throw new ConfigException(message, e);
               }
 
 
               // Check the bounds set for this attribute.
               if (hasLowerBound && (longValue < lowerBound))
               {
-                int msgID = MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND;
-                String message = getMessage(msgID, a.getName(), longValue,
-                                            lowerBound);
-                throw new ConfigException(msgID, message);
+                Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+                    a.getName(), longValue, lowerBound);
+                throw new ConfigException(message);
               }
 
               if (hasUpperBound && (longValue > upperBound))
               {
-                int msgID = MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND;
-                String message = getMessage(msgID, a.getName(), longValue,
-                                            upperBound);
-                throw new ConfigException(msgID, message);
+                Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+                    a.getName(), longValue, upperBound);
+                throw new ConfigException(message);
               }
 
               pendingValues.add(longValue);
@@ -1153,9 +1129,10 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          int    msgID   = MSGID_CONFIG_ATTR_OPTIONS_NOT_ALLOWED;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(
+                      a.getName());
+          throw new ConfigException(message);
         }
       }
       else
@@ -1164,9 +1141,9 @@
         if (activeValues!= null)
         {
           // We cannot have multiple active value sets.
-          int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
+          throw new ConfigException(message);
         }
 
 
@@ -1176,9 +1153,8 @@
           if (isRequired())
           {
             // This is illegal -- it must have a value.
-            int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            throw new ConfigException(message);
           }
           else
           {
@@ -1192,9 +1168,9 @@
           if ((numValues > 1) && (! isMultiValued()))
           {
             // This is illegal -- the attribute is single-valued.
-            int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+            throw new ConfigException(message);
           }
 
           activeValues = new ArrayList<Long>(numValues);
@@ -1207,28 +1183,25 @@
             }
             catch (Exception e)
             {
-              int    msgID   = MSGID_CONFIG_ATTR_INT_COULD_NOT_PARSE;
-              String message = getMessage(msgID, v.getStringValue(),
-                                          a.getName(), String.valueOf(e));
-              throw new ConfigException(msgID, message, e);
+              Message message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+                  v.getStringValue(), a.getName(), String.valueOf(e));
+              throw new ConfigException(message, e);
             }
 
 
             // Check the bounds set for this attribute.
             if (hasLowerBound && (longValue < lowerBound))
             {
-              int    msgID   = MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND;
-              String message = getMessage(msgID, a.getName(), longValue,
-                                          lowerBound);
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+                  a.getName(), longValue, lowerBound);
+              throw new ConfigException(message);
             }
 
             if (hasUpperBound && (longValue > upperBound))
             {
-              int    msgID   = MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND;
-              String message = getMessage(msgID, a.getName(), longValue,
-                                          upperBound);
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+                  a.getName(), longValue, upperBound);
+              throw new ConfigException(message);
             }
 
             activeValues.add(longValue);
@@ -1240,9 +1213,8 @@
     if (activeValues == null)
     {
       // This is not OK.  The value set must contain an active value.
-      int    msgID   = MSGID_CONFIG_ATTR_NO_ACTIVE_VALUE_SET;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingValues == null)
@@ -1425,15 +1397,17 @@
     {
       attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                    JMX_TYPE_LONG_ARRAY,
-                                                   getDescription(), true, true,
-                                                   false));
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, true, false));
     }
     else
     {
       attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                    Long.class.getName(),
-                                                   getDescription(), true, true,
-                                                   false));
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, true, false));
     }
 
 
@@ -1444,14 +1418,16 @@
       if (isMultiValued())
       {
         attributeInfoList.add(new MBeanAttributeInfo(name, JMX_TYPE_LONG_ARRAY,
-                                                     getDescription(), true,
-                                                     false, false));
+                                                     String.valueOf(
+                                                             getDescription()),
+                                                     true, false, false));
       }
       else
       {
         attributeInfoList.add(new MBeanAttributeInfo(name, Long.class.getName(),
-                                                     getDescription(), true,
-                                                     false, false));
+                                                     String.valueOf(
+                                                             getDescription()),
+                                                     true, false, false));
       }
     }
   }
@@ -1470,12 +1446,12 @@
     if (isMultiValued())
     {
       return new MBeanParameterInfo(getName(), JMX_TYPE_LONG_ARRAY,
-                                    getDescription());
+                                    String.valueOf(getDescription()));
     }
     else
     {
       return new MBeanParameterInfo(getName(), Long.TYPE.getName(),
-                                    getDescription());
+                                    String.valueOf(getDescription()));
     }
   }
 
@@ -1517,10 +1493,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_CONFIG_ATTR_INT_COULD_NOT_PARSE;
-        String message = getMessage(msgID, String.valueOf(value), getName(),
-                                    String.valueOf(e));
-        throw new ConfigException(msgID, message, e);
+        Message message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+            String.valueOf(value), getName(), String.valueOf(e));
+        throw new ConfigException(message, e);
       }
     }
     else if (value.getClass().isArray())
@@ -1566,9 +1541,10 @@
         }
         else
         {
-          int    msgID   = MSGID_CONFIG_ATTR_INT_INVALID_ARRAY_TYPE;
-          String message = getMessage(msgID, componentType);
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_INT_INVALID_ARRAY_TYPE.get(
+                      jmxAttribute.getName(), componentType);
+          throw new ConfigException(message);
         }
       }
       catch (ConfigException ce)
@@ -1587,18 +1563,16 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_CONFIG_ATTR_INT_COULD_NOT_PARSE;
-        String message = getMessage(msgID, componentType + "[" + length + "]",
-                                    getName(), String.valueOf(e));
-        throw new ConfigException(msgID, message, e);
+        Message message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+            componentType + "[" + length + "]", getName(), String.valueOf(e));
+        throw new ConfigException(message, e);
       }
     }
     else
     {
-      int    msgID   = MSGID_CONFIG_ATTR_INT_INVALID_TYPE;
-      String message = getMessage(msgID, String.valueOf(value), getName(),
-                                  value.getClass().getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_INT_INVALID_TYPE.get(
+          String.valueOf(value), getName(), value.getClass().getName());
+      throw new ConfigException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/IntegerWithUnitConfigAttribute.java b/opendj-sdk/opends/src/server/org/opends/server/config/IntegerWithUnitConfigAttribute.java
index 1b71292..0036bd4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/IntegerWithUnitConfigAttribute.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/IntegerWithUnitConfigAttribute.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -42,18 +43,13 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeValue;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.DebugLogLevel;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ConfigMessages.*;
 /**
  * This class defines a configuration attribute that stores both an integer
  * value and an associated unit.  The unit will contain both a string and a
@@ -136,7 +132,7 @@
    *                              enforced for the calculated value.
    * @param  upperBound           The upper bound for the calculated value.
    */
-  public IntegerWithUnitConfigAttribute(String name, String description,
+  public IntegerWithUnitConfigAttribute(String name, Message description,
                                         boolean requiresAdminAction,
                                         HashMap<String,Double> units,
                                         boolean hasLowerBound, long lowerBound,
@@ -178,7 +174,7 @@
    * @param  selectedUnit         The selected unit for this configuration
    *                              attribute.
    */
-  public IntegerWithUnitConfigAttribute(String name, String description,
+  public IntegerWithUnitConfigAttribute(String name, Message description,
                                         boolean requiresAdminAction,
                                         HashMap<String,Double> units,
                                         boolean hasLowerBound, long lowerBound,
@@ -239,7 +235,7 @@
    * @param  pendingSelectedUnit  The pending selected unit for this
    *                              configuration attribute.
    */
-  public IntegerWithUnitConfigAttribute(String name, String description,
+  public IntegerWithUnitConfigAttribute(String name, Message description,
                                         boolean requiresAdminAction,
                                         HashMap<String,Double> units,
                                         boolean hasLowerBound, long lowerBound,
@@ -509,27 +505,24 @@
   {
     if ((unit == null) || (! units.containsKey(unit)))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_INVALID_UNIT;
-      String message = getMessage(msgID, unit, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_INVALID_UNIT.get(unit, getName());
+      throw new ConfigException(message);
     }
 
 
     long calculatedValue = (long) (intValue * units.get(unit));
     if (hasLowerBound && (calculatedValue < lowerBound))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND;
-      String message = getMessage(msgID, getName(), calculatedValue,
-                                  lowerBound);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+          getName(), calculatedValue, lowerBound);
+      throw new ConfigException(message);
     }
 
     if (hasUpperBound && (calculatedValue > upperBound))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND;
-      String message = getMessage(msgID, getName(), calculatedValue,
-                                  upperBound);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+          getName(), calculatedValue, upperBound);
+      throw new ConfigException(message);
     }
 
 
@@ -565,9 +558,9 @@
     int spacePos = value.indexOf(' ');
     if (spacePos <= 0)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_UNIT_DELIMITER;
-      String message = getMessage(msgID, String.valueOf(value), getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_UNIT_DELIMITER.get(
+          String.valueOf(value), getName());
+      throw new ConfigException(message);
     }
 
 
@@ -583,10 +576,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT;
-      String message = getMessage(msgID, String.valueOf(value), getName(),
-                                  String.valueOf(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.get(
+          String.valueOf(value), getName(), String.valueOf(e));
+      throw new ConfigException(message, e);
     }
 
     setValue(longValue, value.substring(spacePos+1));
@@ -686,8 +678,8 @@
     int spacePos = lowerValue.indexOf(' ');
     if (spacePos < 0)
     {
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_NO_UNIT_DELIMITER,
-                                     lowerValue, getName()));
+      rejectReason.append(ERR_CONFIG_ATTR_NO_UNIT_DELIMITER.get(
+              lowerValue, getName()));
       return false;
     }
 
@@ -705,8 +697,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_INT_COULD_NOT_PARSE,
-                                     lowerValue, getName(), String.valueOf(e)));
+      rejectReason.append(ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+              lowerValue, getName(), String.valueOf(e)));
       return false;
     }
 
@@ -717,7 +709,7 @@
     double multiplier;
     if (! units.containsKey(unit))
     {
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_INVALID_UNIT, unit,
+      rejectReason.append(ERR_CONFIG_ATTR_INVALID_UNIT.get(unit,
                                      getName()));
       return false;
     }
@@ -732,15 +724,15 @@
     long calculatedValue = (long) (longValue * multiplier);
     if (hasLowerBound && (calculatedValue < lowerBound))
     {
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND,
-                                     getName(), calculatedValue, lowerBound));
+      rejectReason.append(ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+              getName(), calculatedValue, lowerBound));
       return false;
     }
 
     if (hasUpperBound && (calculatedValue > upperBound))
     {
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND,
-                                     getName(), calculatedValue, upperBound));
+      rejectReason.append(ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+              getName(), calculatedValue, upperBound));
       return false;
     }
 
@@ -778,9 +770,8 @@
     {
       if (isRequired())
       {
-        int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        throw new ConfigException(message);
       }
       else
       {
@@ -792,9 +783,9 @@
     int numValues = valueStrings.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -804,18 +795,15 @@
     {
       if ((valueString == null) || (valueString.length() == 0))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE;
-        String message = getMessage(msgID, getName());
-
+        Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
         if (allowFailures)
         {
-          logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          throw new ConfigException(msgID, message);
+          throw new ConfigException(message);
         }
       }
 
@@ -823,19 +811,18 @@
       StringBuilder rejectReason = new StringBuilder();
       if (! valueIsAcceptable(valueString.toLowerCase(), rejectReason))
       {
-        int msgID = MSGID_CONFIG_ATTR_INVALID_VALUE_WITH_UNIT;
-        String message = getMessage(msgID, valueString, getName(),
-                                    rejectReason.toString());
+        Message message = ERR_CONFIG_ATTR_INVALID_VALUE_WITH_UNIT.get(
+                valueString, getName(),
+                rejectReason.toString());
 
         if (allowFailures)
         {
-          logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          throw new ConfigException(msgID, message);
+          throw new ConfigException(message);
         }
       }
 
@@ -850,9 +837,8 @@
     // attribute and if so deal with it accordingly.
     if ((isRequired()) && valueSet.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -948,9 +934,9 @@
           if (pendingUnit != null)
           {
             // We cannot have multiple pending value sets.
-            int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
+            throw new ConfigException(message);
           }
 
 
@@ -958,9 +944,8 @@
           if (values.isEmpty())
           {
             // This is illegal -- it must have a value.
-            int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            throw new ConfigException(message);
           }
           else
           {
@@ -971,9 +956,9 @@
             if (iterator.hasNext())
             {
               // This is illegal -- the attribute is single-valued.
-              int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-              String message = getMessage(msgID, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message =
+                  ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+              throw new ConfigException(message);
             }
 
             try
@@ -985,10 +970,9 @@
             }
             catch (Exception e)
             {
-              int    msgID   = MSGID_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT;
-              String message = getMessage(msgID, valueString, a.getName(),
-                                          String.valueOf(e));
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.
+                  get(valueString, a.getName(), String.valueOf(e));
+              throw new ConfigException(message);
             }
 
 
@@ -996,9 +980,9 @@
             // multiplier.
             if (! units.containsKey(pendingUnit))
             {
-              int    msgID   = MSGID_CONFIG_ATTR_INVALID_UNIT;
-              String message = getMessage(msgID, pendingUnit, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message =
+                  ERR_CONFIG_ATTR_INVALID_UNIT.get(pendingUnit, a.getName());
+              throw new ConfigException(message);
             }
 
             double multiplier = units.get(activeUnit);
@@ -1008,18 +992,16 @@
             // Check the bounds set for this attribute.
             if (hasLowerBound && (pendingCalculatedValue < lowerBound))
             {
-              int    msgID   = MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND;
-              String message = getMessage(msgID, a.getName(),
-                                          pendingCalculatedValue, lowerBound);
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+                  a.getName(), pendingCalculatedValue, lowerBound);
+              throw new ConfigException(message);
             }
 
             if (hasUpperBound && (pendingCalculatedValue > upperBound))
             {
-              int    msgID   = MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND;
-              String message = getMessage(msgID, a.getName(),
-                                          pendingCalculatedValue, upperBound);
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+                  a.getName(), pendingCalculatedValue, upperBound);
+              throw new ConfigException(message);
             }
           }
         }
@@ -1027,9 +1009,9 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          int    msgID   = MSGID_CONFIG_ATTR_OPTIONS_NOT_ALLOWED;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName());
+          throw new ConfigException(message);
         }
       }
       else
@@ -1038,9 +1020,9 @@
         if (activeUnit != null)
         {
           // We cannot have multiple active value sets.
-          int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
+          throw new ConfigException(message);
         }
 
 
@@ -1048,9 +1030,8 @@
         if (values.isEmpty())
         {
           // This is illegal -- it must have a value.
-          int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+          throw new ConfigException(message);
         }
         else
         {
@@ -1061,9 +1042,9 @@
           if (iterator.hasNext())
           {
             // This is illegal -- the attribute is single-valued.
-            int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+            throw new ConfigException(message);
           }
 
           try
@@ -1075,19 +1056,18 @@
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT;
-            String message = getMessage(msgID, valueString, a.getName(),
-                                        String.valueOf(e));
-            throw new ConfigException(msgID, message);
+            Message message = ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.get(
+                valueString, a.getName(), String.valueOf(e));
+            throw new ConfigException(message);
           }
 
 
           // Get the unit and use it to determine the corresponding multiplier.
           if (! units.containsKey(activeUnit))
           {
-            int    msgID   = MSGID_CONFIG_ATTR_INVALID_UNIT;
-            String message = getMessage(msgID, activeUnit, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_INVALID_UNIT.get(activeUnit, a.getName());
+            throw new ConfigException(message);
           }
 
           double multiplier = units.get(activeUnit);
@@ -1097,18 +1077,16 @@
           // Check the bounds set for this attribute.
           if (hasLowerBound && (activeCalculatedValue < lowerBound))
           {
-            int    msgID   = MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND;
-            String message = getMessage(msgID, a.getName(),
-                                        activeCalculatedValue, lowerBound);
-            throw new ConfigException(msgID, message);
+            Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+                a.getName(), activeCalculatedValue, lowerBound);
+            throw new ConfigException(message);
           }
 
           if (hasUpperBound && (activeCalculatedValue > upperBound))
           {
-            int    msgID   = MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND;
-            String message = getMessage(msgID, a.getName(),
-                                        activeCalculatedValue, upperBound);
-            throw new ConfigException(msgID, message);
+            Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+                a.getName(), activeCalculatedValue, upperBound);
+            throw new ConfigException(message);
           }
         }
       }
@@ -1117,9 +1095,8 @@
     if (activeUnit == null)
     {
       // This is not OK.  The value set must contain an active value.
-      int    msgID   = MSGID_CONFIG_ATTR_NO_ACTIVE_VALUE_SET;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingUnit == null)
@@ -1214,16 +1191,18 @@
   {
     attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                  String.class.getName(),
-                                                 getDescription(), true, true,
-                                                 false));
+                                                 String.valueOf(
+                                                         getDescription()),
+                                                 true, true, false));
 
     if (requiresAdminAction())
     {
       String name = getName() + ";" + OPTION_PENDING_VALUES;
       attributeInfoList.add(new MBeanAttributeInfo(name,
                                                    String.class.getName(),
-                                                   getDescription(), true,
-                                                   false, false));
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, false, false));
     }
   }
 
@@ -1239,7 +1218,7 @@
   public MBeanParameterInfo toJMXParameterInfo()
   {
     return new MBeanParameterInfo(getName(), String.class.getName(),
-                                  getDescription());
+                                  String.valueOf(getDescription()));
   }
 
 
@@ -1265,10 +1244,9 @@
     }
     else
     {
-      int    msgID   = MSGID_CONFIG_ATTR_INT_WITH_UNIT_INVALID_TYPE;
-      String message = getMessage(msgID, String.valueOf(value), getName(),
-                                  value.getClass().getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_INT_WITH_UNIT_INVALID_TYPE.get(
+          String.valueOf(value), getName(), value.getClass().getName());
+      throw new ConfigException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/JMXMBean.java b/opendj-sdk/opends/src/server/org/opends/server/config/JMXMBean.java
index 239dc9f..d8ed3d4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/JMXMBean.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/JMXMBean.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -60,17 +61,14 @@
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InvokableMethod;
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.SearchScope;
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.loggers.ErrorLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.protocols.jmx.JmxClientConnection;
@@ -174,11 +172,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-          int msgID = MSGID_CONFIG_JMX_CANNOT_REGISTER_MBEAN;
-          String message = getMessage(msgID, configEntryDN.toString(),
-                  String.valueOf(e));
-          logError(ErrorLogCategory.CONFIGURATION,
-                  ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+          Message message = ERR_CONFIG_JMX_CANNOT_REGISTER_MBEAN.get(
+              configEntryDN.toString(), String.valueOf(e));
+          logError(message);
       }
       return nameStr ;
   }
@@ -231,11 +227,9 @@
               }
                 e.printStackTrace();
 
-                int msgID = MSGID_CONFIG_JMX_CANNOT_REGISTER_MBEAN;
-                String message = getMessage(msgID, configEntryDN.toString(),
-                        String.valueOf(e));
-                logError(ErrorLogCategory.CONFIGURATION,
-                        ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+                Message message = ERR_CONFIG_JMX_CANNOT_REGISTER_MBEAN.get(
+                    configEntryDN.toString(), String.valueOf(e));
+                logError(message);
             }
         }
     }
@@ -510,11 +504,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_JMX_CANNOT_GET_ATTRIBUTE;
-      String message = getMessage(msgID, String.valueOf(attributeName),
-                                  String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new AttributeNotFoundException(message);
+      Message message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
+          get(String.valueOf(attributeName), String.valueOf(configEntryDN),
+              getExceptionMessage(e));
+      throw new AttributeNotFoundException(message.toString());
     }
 
     //
@@ -530,11 +523,10 @@
     {
       jmxClientConnection = null ;
 
-      int    msgID   = MSGID_CONFIG_JMX_CANNOT_GET_ATTRIBUTE;
-      String message = getMessage(msgID, String.valueOf(attributeName),
-                                  String.valueOf(configEntryDN),
-                                  String.valueOf(op.getErrorMessage()));
-      throw new AttributeNotFoundException(message);
+      Message message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
+          get(String.valueOf(attributeName), String.valueOf(configEntryDN),
+              String.valueOf(op.getErrorMessage()));
+      throw new AttributeNotFoundException(message.toString());
     }
 
     try
@@ -548,14 +540,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_JMX_ATTR_NO_ATTR;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  attributeName);
-
-      logError(
-          ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-          message, msgID);
-      throw new AttributeNotFoundException(message);
+      Message message = ERR_CONFIG_JMX_ATTR_NO_ATTR.get(
+          String.valueOf(configEntryDN), attributeName);
+      logError(message);
+      throw new AttributeNotFoundException(message.toString());
     }
   }
 
@@ -790,13 +778,11 @@
 
     buffer.append(")");
 
-    int    msgID   = MSGID_CONFIG_JMX_NO_METHOD;
-    String message = getMessage(msgID, buffer.toString(),
-                                configEntryDN.toString());
+    Message message = ERR_CONFIG_JMX_NO_METHOD.get(
+        buffer.toString(), configEntryDN.toString());
     throw new MBeanException(
                    new DirectoryException(ResultCode.NO_SUCH_OPERATION,
-                                          message,
-                                          msgID));
+                                          message));
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/MultiChoiceConfigAttribute.java b/opendj-sdk/opends/src/server/org/opends/server/config/MultiChoiceConfigAttribute.java
index f1bdabb..18c1dfa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/MultiChoiceConfigAttribute.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/MultiChoiceConfigAttribute.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -42,18 +43,13 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeValue;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.DebugLogLevel;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ConfigMessages.*;
 /**
  * This class defines a multi-choice configuration attribute, which can hold
  * zero or more string values.  A user-defined set of allowed values will be
@@ -101,7 +97,7 @@
    *                              All values in this set should be represented
    *                              entirely in lowercase characters.
    */
-  public MultiChoiceConfigAttribute(String name, String description,
+  public MultiChoiceConfigAttribute(String name, Message description,
                                     boolean isRequired, boolean isMultiValued,
                                     boolean requiresAdminAction,
                                     Set<String> allowedValues)
@@ -138,7 +134,7 @@
    * @param  value                The value for this string configuration
    *                              attribute.
    */
-  public MultiChoiceConfigAttribute(String name, String description,
+  public MultiChoiceConfigAttribute(String name, Message description,
                                     boolean isRequired, boolean isMultiValued,
                                     boolean requiresAdminAction,
                                     Set<String> allowedValues, String value)
@@ -185,7 +181,7 @@
    * @param  values               The set of values for this configuration
    *                              attribute.
    */
-  public MultiChoiceConfigAttribute(String name, String description,
+  public MultiChoiceConfigAttribute(String name, Message description,
                                     boolean isRequired, boolean isMultiValued,
                                     boolean requiresAdminAction,
                                     Set<String> allowedValues,
@@ -234,7 +230,7 @@
    * @param  pendingValues        The set of pending values for this
    *                              configuration attribute.
    */
-  public MultiChoiceConfigAttribute(String name, String description,
+  public MultiChoiceConfigAttribute(String name, Message description,
                                     boolean isRequired, boolean isMultiValued,
                                     boolean requiresAdminAction,
                                     Set<String> allowedValues,
@@ -310,16 +306,14 @@
   {
     if ((activeValues == null) || activeValues.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_STRING_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (activeValues.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_STRING_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     return activeValues.get(0);
@@ -360,16 +354,14 @@
 
     if ((pendingValues == null) || pendingValues.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_STRING_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingValues.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_STRING_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     return pendingValues.get(0);
@@ -422,16 +414,14 @@
   {
     if ((value == null) || (value.length() == 0))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (! allowedValues.contains(value.toLowerCase()))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_VALUE_NOT_ALLOWED;
-      String message = getMessage(msgID, value, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(value, getName());
+      throw new ConfigException(message);
     }
 
     if (requiresAdminAction())
@@ -467,9 +457,8 @@
     {
       if (isRequired())
       {
-        int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        throw new ConfigException(message);
       }
       else
       {
@@ -491,9 +480,9 @@
     int numValues = values.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -505,17 +494,16 @@
     {
       if ((value == null) || (value.length() == 0))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+        throw new ConfigException(message);
       }
 
 
       if (! allowedValues.contains(value.toLowerCase()))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_VALUE_NOT_ALLOWED;
-        String message = getMessage(msgID, value, getName());
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(value, getName());
+        throw new ConfigException(message);
       }
 
       AttributeValue attrValue =
@@ -524,9 +512,9 @@
 
       if (valueSet.contains(attrValue))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS;
-        String message = getMessage(msgID, getName(), value);
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(getName(), value);
+        throw new ConfigException(message);
       }
 
       valueSet.add(attrValue);
@@ -635,8 +623,7 @@
     if ((value == null) ||
         ((stringValue = value.getStringValue()).length() == 0))
     {
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE,
-                                     getName()));
+      rejectReason.append(ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName()));
       return false;
     }
 
@@ -644,8 +631,8 @@
     // Make sure that the value is in the allowed value set.
     if (! allowedValues.contains(stringValue.toLowerCase()))
     {
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_VALUE_NOT_ALLOWED,
-                                     stringValue, getName()));
+      rejectReason.append(ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(
+              stringValue, getName()));
       return false;
     }
 
@@ -683,9 +670,8 @@
     {
       if (isRequired())
       {
-        int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        throw new ConfigException(message);
       }
       else
       {
@@ -697,9 +683,9 @@
     int numValues = valueStrings.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -709,35 +695,30 @@
     {
       if ((valueString == null) || (valueString.length() == 0))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE;
-        String message = getMessage(msgID, getName());
-
+        Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
         if (allowFailures)
         {
-          logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          throw new ConfigException(msgID, message);
+          throw new ConfigException(message);
         }
       }
 
       if (! allowedValues.contains(valueString.toLowerCase()))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_VALUE_NOT_ALLOWED;
-        String message = getMessage(msgID, valueString, getName());
-
+        Message message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(
+                valueString, getName());
         if (allowFailures)
         {
-          logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          throw new ConfigException(msgID, message);
+          throw new ConfigException(message);
         }
       }
 
@@ -751,9 +732,8 @@
     // attribute and if so deal with it accordingly.
     if ((isRequired()) && valueSet.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -841,9 +821,9 @@
           if (pendingValues != null)
           {
             // We cannot have multiple pending value sets.
-            int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
+            throw new ConfigException(message);
           }
 
 
@@ -853,9 +833,8 @@
             if (isRequired())
             {
               // This is illegal -- it must have a value.
-              int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-              String message = getMessage(msgID, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+              throw new ConfigException(message);
             }
             else
             {
@@ -869,9 +848,9 @@
             if ((numValues > 1) && (! isMultiValued()))
             {
               // This is illegal -- the attribute is single-valued.
-              int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-              String message = getMessage(msgID, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message =
+                  ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+              throw new ConfigException(message);
             }
 
             pendingValues = new ArrayList<String>(numValues);
@@ -881,10 +860,9 @@
               if (! allowedValues.contains(lowerValue))
               {
                 // This is illegal -- the value is not allowed.
-                int    msgID   = MSGID_CONFIG_ATTR_VALUE_NOT_ALLOWED;
-                String message = getMessage(msgID, v.getStringValue(),
-                                            a.getName());
-                throw new ConfigException(msgID, message);
+                Message message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(
+                    v.getStringValue(), a.getName());
+                throw new ConfigException(message);
               }
 
               pendingValues.add(v.getStringValue());
@@ -895,9 +873,9 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          int    msgID   = MSGID_CONFIG_ATTR_OPTIONS_NOT_ALLOWED;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName());
+          throw new ConfigException(message);
         }
       }
       else
@@ -906,9 +884,9 @@
         if (activeValues!= null)
         {
           // We cannot have multiple active value sets.
-          int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
+          throw new ConfigException(message);
         }
 
 
@@ -918,9 +896,8 @@
           if (isRequired())
           {
             // This is illegal -- it must have a value.
-            int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            throw new ConfigException(message);
           }
           else
           {
@@ -934,9 +911,9 @@
           if ((numValues > 1) && (! isMultiValued()))
           {
             // This is illegal -- the attribute is single-valued.
-            int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+            throw new ConfigException(message);
           }
 
           activeValues = new ArrayList<String>(numValues);
@@ -946,10 +923,9 @@
             if (! allowedValues.contains(lowerValue))
             {
               // This is illegal -- the value is not allowed.
-              int    msgID   = MSGID_CONFIG_ATTR_VALUE_NOT_ALLOWED;
-              String message = getMessage(msgID, v.getStringValue(),
-                                          a.getName());
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(
+                  v.getStringValue(), a.getName());
+              throw new ConfigException(message);
             }
 
             activeValues.add(v.getStringValue());
@@ -961,9 +937,8 @@
     if (activeValues == null)
     {
       // This is not OK.  The value set must contain an active value.
-      int    msgID   = MSGID_CONFIG_ATTR_NO_ACTIVE_VALUE_SET;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingValues == null)
@@ -1134,14 +1109,18 @@
     {
       attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                    JMX_TYPE_STRING_ARRAY,
-                                                   getDescription(), true, true,
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, true,
                                                    false));
     }
     else
     {
       attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                    String.class.getName(),
-                                                   getDescription(), true, true,
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, true,
                                                    false));
     }
 
@@ -1154,15 +1133,17 @@
       {
         attributeInfoList.add(new MBeanAttributeInfo(name,
                                                      JMX_TYPE_STRING_ARRAY,
-                                                     getDescription(), true,
-                                                     false, false));
+                                                     String.valueOf(
+                                                             getDescription()),
+                                                     true, false, false));
       }
       else
       {
         attributeInfoList.add(new MBeanAttributeInfo(name,
                                                      String.class.getName(),
-                                                     getDescription(), true,
-                                                     false, false));
+                                                     String.valueOf(
+                                                             getDescription()),
+                                                     true, false, false));
       }
     }
   }
@@ -1181,12 +1162,12 @@
     if (isMultiValued())
     {
       return new MBeanParameterInfo(getName(), JMX_TYPE_STRING_ARRAY,
-                                    getDescription());
+                                    String.valueOf(getDescription()));
     }
     else
     {
       return new MBeanParameterInfo(getName(), String.class.getName(),
-                                    getDescription());
+                                    String.valueOf(getDescription()));
     }
   }
 
@@ -1245,25 +1226,24 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_CONFIG_ATTR_INVALID_STRING_VALUE;
-          String message = getMessage(msgID, getName(), String.valueOf(value),
-                                      String.valueOf(e));
-          throw new ConfigException(msgID, message, e);
+          Message message = ERR_CONFIG_ATTR_INVALID_STRING_VALUE.get(
+              getName(), String.valueOf(value), String.valueOf(e));
+          throw new ConfigException(message, e);
         }
       }
       else
       {
-        int    msgID   = MSGID_CONFIG_ATTR_STRING_INVALID_ARRAY_TYPE;
-        String message = getMessage(msgID, componentType);
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CONFIG_ATTR_STRING_INVALID_ARRAY_TYPE.get(
+                    getName(), componentType);
+        throw new ConfigException(message);
       }
     }
     else
     {
-      int    msgID   = MSGID_CONFIG_ATTR_STRING_INVALID_TYPE;
-      String message = getMessage(msgID, String.valueOf(value), getName(),
-                                  value.getClass().getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_STRING_INVALID_TYPE.get(
+          String.valueOf(value), getName(), value.getClass().getName());
+      throw new ConfigException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/ReadOnlyConfigAttribute.java b/opendj-sdk/opends/src/server/org/opends/server/config/ReadOnlyConfigAttribute.java
index f4fcb79..23498b6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/ReadOnlyConfigAttribute.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/ReadOnlyConfigAttribute.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -42,10 +43,7 @@
 import org.opends.server.types.AttributeValue;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
+import static org.opends.messages.ConfigMessages.*;
 /**
  * This class defines a configuration attribute that is only intended for use
  * in displaying information.  It will not allow its value to be altered.
@@ -71,7 +69,7 @@
    * @param  isMultiValued  Indicates whether this configuration attribute may
    *                        have multiple values.
    */
-  public ReadOnlyConfigAttribute(String name, String description,
+  public ReadOnlyConfigAttribute(String name, Message description,
                                  boolean isMultiValued)
   {
     super(name, description, false, isMultiValued, false);
@@ -90,7 +88,7 @@
    * @param  description  The description for this configuration attribute.
    * @param  value        The value for this configuration attribute.
    */
-  public ReadOnlyConfigAttribute(String name, String description, String value)
+  public ReadOnlyConfigAttribute(String name, Message description, String value)
   {
     super(name, description, false, false, false, getValueSet(value));
 
@@ -116,7 +114,7 @@
    * @param  description  The description for this configuration attribute.
    * @param  values       The set of values for this configuration attribute.
    */
-  public ReadOnlyConfigAttribute(String name, String description,
+  public ReadOnlyConfigAttribute(String name, Message description,
                                  List<String> values)
   {
     super(name, description, false, true, false, getValueSet(values));
@@ -175,16 +173,14 @@
   {
     if ((values == null) || values.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_STRING_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (values.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_STRING_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     return values.get(0);
@@ -247,9 +243,8 @@
   public void setValue(String value)
          throws ConfigException
   {
-    int    msgID   = MSGID_CONFIG_ATTR_READ_ONLY;
-    String message = getMessage(msgID, getName());
-    throw new ConfigException(msgID, message);
+    Message message = ERR_CONFIG_ATTR_READ_ONLY.get(getName());
+    throw new ConfigException(message);
   }
 
 
@@ -265,9 +260,8 @@
   public void setValues(List<String> values)
          throws ConfigException
   {
-    int    msgID   = MSGID_CONFIG_ATTR_READ_ONLY;
-    String message = getMessage(msgID, getName());
-    throw new ConfigException(msgID, message);
+    Message message = ERR_CONFIG_ATTR_READ_ONLY.get(getName());
+    throw new ConfigException(message);
   }
 
 
@@ -346,7 +340,7 @@
   public boolean valueIsAcceptable(AttributeValue value,
                                    StringBuilder rejectReason)
   {
-    rejectReason.append(getMessage(MSGID_CONFIG_ATTR_READ_ONLY, getName()));
+    rejectReason.append(ERR_CONFIG_ATTR_READ_ONLY.get(getName()));
     return false;
   }
 
@@ -547,15 +541,17 @@
     {
       attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                    JMX_TYPE_STRING_ARRAY,
-                                                   getDescription(), true,
-                                                   false, false));
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, false, false));
     }
     else
     {
       attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                    String.class.getName(),
-                                                   getDescription(), true,
-                                                   false, false));
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, false, false));
     }
   }
 
@@ -573,12 +569,12 @@
     if (isMultiValued())
     {
       return new MBeanParameterInfo(getName(), JMX_TYPE_STRING_ARRAY,
-                                    getDescription());
+                                    String.valueOf(getDescription()));
     }
     else
     {
       return new MBeanParameterInfo(getName(), String.class.getName(),
-                                    getDescription());
+                                    String.valueOf(getDescription()));
     }
   }
 
@@ -598,9 +594,8 @@
   public void setValue(javax.management.Attribute jmxAttribute)
          throws ConfigException
   {
-    int    msgID   = MSGID_CONFIG_ATTR_READ_ONLY;
-    String message = getMessage(msgID, getName());
-    throw new ConfigException(msgID, message);
+    Message message = ERR_CONFIG_ATTR_READ_ONLY.get(getName());
+    throw new ConfigException(message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/config/StringConfigAttribute.java b/opendj-sdk/opends/src/server/org/opends/server/config/StringConfigAttribute.java
index d346cd4..7d092f7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/config/StringConfigAttribute.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/config/StringConfigAttribute.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.config;
+import org.opends.messages.Message;
 
 
 
@@ -41,19 +42,13 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeValue;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.DebugLogLevel;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ConfigMessages.*;
 /**
  * This class defines a string configuration attribute, which can hold zero or
  * more string values.
@@ -93,7 +88,7 @@
    *                              configuration attribute require administrative
    *                              action before they will take effect.
    */
-  public StringConfigAttribute(String name, String description,
+  public StringConfigAttribute(String name, Message description,
                                boolean isRequired, boolean isMultiValued,
                                boolean requiresAdminAction)
   {
@@ -123,7 +118,7 @@
    * @param  value                The value for this string configuration
    *                              attribute.
    */
-  public StringConfigAttribute(String name, String description,
+  public StringConfigAttribute(String name, Message description,
                                boolean isRequired, boolean isMultiValued,
                                boolean requiresAdminAction, String value)
   {
@@ -163,7 +158,7 @@
    * @param  values               The set of values for this configuration
    *                              attribute.
    */
-  public StringConfigAttribute(String name, String description,
+  public StringConfigAttribute(String name, Message description,
                                boolean isRequired, boolean isMultiValued,
                                boolean requiresAdminAction, List<String> values)
   {
@@ -204,7 +199,7 @@
    * @param  pendingValues        The set of pending values for this
    *                              configuration attribute.
    */
-  public StringConfigAttribute(String name, String description,
+  public StringConfigAttribute(String name, Message description,
                                boolean isRequired, boolean isMultiValued,
                                boolean requiresAdminAction,
                                List<String> activeValues,
@@ -277,16 +272,14 @@
   {
     if ((activeValues == null) || activeValues.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_STRING_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (activeValues.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_STRING_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     return activeValues.get(0);
@@ -327,16 +320,14 @@
 
     if ((pendingValues == null) || pendingValues.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_NO_STRING_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingValues.size() > 1)
     {
-      int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_STRING_VALUES;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      throw new ConfigException(message);
     }
 
     return pendingValues.get(0);
@@ -375,9 +366,8 @@
   {
     if ((value == null) || (value.length() == 0))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+      throw new ConfigException(message);
     }
 
     if (requiresAdminAction())
@@ -413,9 +403,8 @@
     {
       if (isRequired())
       {
-        int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        throw new ConfigException(message);
       }
       else
       {
@@ -437,9 +426,9 @@
     int numValues = values.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -451,9 +440,8 @@
     {
       if ((value == null) || (value.length() == 0))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+        throw new ConfigException(message);
       }
 
       AttributeValue attrValue =
@@ -462,9 +450,9 @@
 
       if (valueSet.contains(attrValue))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS;
-        String message = getMessage(msgID, getName(), value);
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(getName(), value);
+        throw new ConfigException(message);
       }
 
       valueSet.add(attrValue);
@@ -571,8 +559,7 @@
     // The only requirement is that the value is not null or empty.
     if ((value == null) || (value.getStringValue().length() == 0))
     {
-      rejectReason.append(getMessage(MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE,
-                                     getName()));
+      rejectReason.append(ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName()));
       return false;
     }
 
@@ -610,9 +597,8 @@
     {
       if (isRequired())
       {
-        int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-        String message = getMessage(msgID, getName());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        throw new ConfigException(message);
       }
       else
       {
@@ -624,9 +610,9 @@
     int numValues = valueStrings.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -636,18 +622,16 @@
     {
       if ((valueString == null) || (valueString.length() == 0))
       {
-        int    msgID   = MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE;
-        String message = getMessage(msgID, getName());
+        Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
 
         if (allowFailures)
         {
-          logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          throw new ConfigException(msgID, message);
+          throw new ConfigException(message);
         }
       }
 
@@ -661,9 +645,8 @@
     // attribute and if so deal with it accordingly.
     if ((isRequired()) && valueSet.isEmpty())
     {
-      int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      throw new ConfigException(message);
     }
 
 
@@ -751,9 +734,9 @@
           if (pendingValues != null)
           {
             // We cannot have multiple pending value sets.
-            int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
+            throw new ConfigException(message);
           }
 
 
@@ -763,9 +746,8 @@
             if (isRequired())
             {
               // This is illegal -- it must have a value.
-              int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-              String message = getMessage(msgID, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+              throw new ConfigException(message);
             }
             else
             {
@@ -779,9 +761,9 @@
             if ((numValues > 1) && (! isMultiValued()))
             {
               // This is illegal -- the attribute is single-valued.
-              int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-              String message = getMessage(msgID, a.getName());
-              throw new ConfigException(msgID, message);
+              Message message =
+                  ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+              throw new ConfigException(message);
             }
 
             pendingValues = new ArrayList<String>(numValues);
@@ -795,9 +777,9 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          int    msgID   = MSGID_CONFIG_ATTR_OPTIONS_NOT_ALLOWED;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName());
+          throw new ConfigException(message);
         }
       }
       else
@@ -806,9 +788,9 @@
         if (activeValues!= null)
         {
           // We cannot have multiple active value sets.
-          int    msgID   = MSGID_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS;
-          String message = getMessage(msgID, a.getName());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
+          throw new ConfigException(message);
         }
 
 
@@ -818,9 +800,8 @@
           if (isRequired())
           {
             // This is illegal -- it must have a value.
-            int    msgID   = MSGID_CONFIG_ATTR_IS_REQUIRED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            throw new ConfigException(message);
           }
           else
           {
@@ -834,9 +815,9 @@
           if ((numValues > 1) && (! isMultiValued()))
           {
             // This is illegal -- the attribute is single-valued.
-            int    msgID   = MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED;
-            String message = getMessage(msgID, a.getName());
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
+            throw new ConfigException(message);
           }
 
           activeValues = new ArrayList<String>(numValues);
@@ -851,9 +832,8 @@
     if (activeValues == null)
     {
       // This is not OK.  The value set must contain an active value.
-      int    msgID   = MSGID_CONFIG_ATTR_NO_ACTIVE_VALUE_SET;
-      String message = getMessage(msgID, getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      throw new ConfigException(message);
     }
 
     if (pendingValues == null)
@@ -1023,15 +1003,17 @@
     {
       attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                    JMX_TYPE_STRING_ARRAY,
-                                                   getDescription(), true, true,
-                                                   false));
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, true, false));
     }
     else
     {
       attributeInfoList.add(new MBeanAttributeInfo(getName(),
                                                    String.class.getName(),
-                                                   getDescription(), true, true,
-                                                   false));
+                                                   String.valueOf(
+                                                           getDescription()),
+                                                   true, true, false));
     }
 
 
@@ -1043,15 +1025,17 @@
       {
         attributeInfoList.add(new MBeanAttributeInfo(name,
                                                      JMX_TYPE_STRING_ARRAY,
-                                                     getDescription(), true,
-                                                     false, false));
+                                                     String.valueOf(
+                                                             getDescription()),
+                                                     true, false, false));
       }
       else
       {
         attributeInfoList.add(new MBeanAttributeInfo(name,
                                                      String.class.getName(),
-                                                     getDescription(), true,
-                                                     false, false));
+                                                     String.valueOf(
+                                                             getDescription()),
+                                                     true, false, false));
       }
     }
   }
@@ -1070,12 +1054,12 @@
     if (isMultiValued())
     {
       return new MBeanParameterInfo(getName(), JMX_TYPE_STRING_ARRAY,
-                                    getDescription());
+                                    String.valueOf(getDescription()));
     }
     else
     {
       return new MBeanParameterInfo(getName(), String.class.getName(),
-                                    getDescription());
+                                    String.valueOf(getDescription()));
     }
   }
 
@@ -1134,25 +1118,25 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_CONFIG_ATTR_INVALID_STRING_VALUE;
-          String message = getMessage(msgID, getName(), String.valueOf(value),
-                                      String.valueOf(e));
-          throw new ConfigException(msgID, message, e);
+          Message message = ERR_CONFIG_ATTR_INVALID_STRING_VALUE.get(
+              getName(), String.valueOf(value), String.valueOf(e));
+          throw new ConfigException(message, e);
         }
       }
       else
       {
-        int    msgID   = MSGID_CONFIG_ATTR_STRING_INVALID_ARRAY_TYPE;
-        String message = getMessage(msgID, componentType);
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CONFIG_ATTR_STRING_INVALID_ARRAY_TYPE.get(
+                    String.valueOf(jmxAttribute),
+                    String.valueOf(componentType));
+        throw new ConfigException(message);
       }
     }
     else
     {
-      int    msgID   = MSGID_CONFIG_ATTR_STRING_INVALID_TYPE;
-      String message = getMessage(msgID, String.valueOf(value), getName(),
-                                  value.getClass().getName());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_ATTR_STRING_INVALID_TYPE.get(
+          String.valueOf(value), getName(), value.getClass().getName());
+      throw new ConfigException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/AccountUsableRequestControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/AccountUsableRequestControl.java
index a886d0f..17d8634 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/AccountUsableRequestControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/AccountUsableRequestControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -32,8 +33,7 @@
 import org.opends.server.types.Control;
 import org.opends.server.types.LDAPException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -95,9 +95,8 @@
   {
     if (control.hasValue())
     {
-      int    msgID   = MSGID_ACCTUSABLEREQ_CONTROL_HAS_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_ACCTUSABLEREQ_CONTROL_HAS_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/AccountUsableResponseControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/AccountUsableResponseControl.java
index 28980ba..d12f3a8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/AccountUsableResponseControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/AccountUsableResponseControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -43,8 +44,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -493,9 +493,8 @@
     if (controlValue == null)
     {
       // The response control must always have a value.
-      int    msgID   = MSGID_ACCTUSABLERES_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_ACCTUSABLERES_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -541,10 +540,9 @@
                 secondsBeforeUnlock = e.decodeAsInteger().intValue();
                 break;
               default:
-                int    msgID   = MSGID_ACCTUSABLERES_UNKNOWN_UNAVAILABLE_TYPE;
-                String message = getMessage(msgID, byteToHex(e.getType()));
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_ACCTUSABLERES_UNKNOWN_UNAVAILABLE_TYPE.
+                    get(byteToHex(e.getType()));
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
           }
 
@@ -557,10 +555,9 @@
                                                   controlValue);
 
         default:
-          int    msgID   = MSGID_ACCTUSABLERES_UNKNOWN_VALUE_ELEMENT_TYPE;
-          String message = getMessage(msgID, byteToHex(valueElement.getType()));
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                  message);
+          Message message = ERR_ACCTUSABLERES_UNKNOWN_VALUE_ELEMENT_TYPE.get(
+              byteToHex(valueElement.getType()));
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
     }
     catch (LDAPException le)
@@ -574,9 +571,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ae);
       }
 
-      int msgID = MSGID_ACCTUSABLERES_DECODE_ERROR;
-      String message = getMessage(msgID, ae.getMessage());
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_ACCTUSABLERES_DECODE_ERROR.get(ae.getMessage());
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
     catch (Exception e)
     {
@@ -585,9 +581,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ACCTUSABLERES_DECODE_ERROR;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_ACCTUSABLERES_DECODE_ERROR.get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/AuthorizationIdentityResponseControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/AuthorizationIdentityResponseControl.java
index 7c9e8e7..1eb6d74 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/AuthorizationIdentityResponseControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/AuthorizationIdentityResponseControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -34,8 +35,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.LDAPException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -238,9 +238,8 @@
   {
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_AUTHZIDRESP_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_AUTHZIDRESP_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     return new AuthorizationIdentityResponseControl(control.getOID(),
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/EntryChangeNotificationControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/EntryChangeNotificationControl.java
index 829d202..fbd9929 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/EntryChangeNotificationControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/EntryChangeNotificationControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -44,8 +45,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -240,9 +240,8 @@
   {
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_ECN_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_ECN_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -255,9 +254,8 @@
            ASN1Sequence.decodeAsSequence(control.getValue().value()).elements();
       if ((elements.size() < 1) || (elements.size() > 3))
       {
-        int    msgID   = MSGID_ECN_INVALID_ELEMENT_COUNT;
-        String message = getMessage(msgID, elements.size());
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message = ERR_ECN_INVALID_ELEMENT_COUNT.get(elements.size());
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
 
       int changeTypeValue = elements.get(0).decodeAsEnumerated().intValue();
@@ -270,10 +268,9 @@
         {
           if (changeType != PersistentSearchChangeType.MODIFY_DN)
           {
-            int    msgID   = MSGID_ECN_ILLEGAL_PREVIOUS_DN;
-            String message = getMessage(msgID, String.valueOf(changeType));
-            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                    message);
+            Message message =
+                ERR_ECN_ILLEGAL_PREVIOUS_DN.get(String.valueOf(changeType));
+            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
 
           ASN1OctetString rawPreviousDN = e.decodeAsOctetString();
@@ -285,20 +282,18 @@
         }
         else
         {
-          int    msgID   = MSGID_ECN_INVALID_ELEMENT_TYPE;
-          String message = getMessage(msgID, byteToHex(e.getType()));
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                  message);
+          Message message =
+              ERR_ECN_INVALID_ELEMENT_TYPE.get(byteToHex(e.getType()));
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
       }
       else if (elements.size() == 3)
       {
         if (changeType != PersistentSearchChangeType.MODIFY_DN)
         {
-          int    msgID   = MSGID_ECN_ILLEGAL_PREVIOUS_DN;
-          String message = getMessage(msgID, String.valueOf(changeType));
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                  message);
+          Message message =
+              ERR_ECN_ILLEGAL_PREVIOUS_DN.get(String.valueOf(changeType));
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
 
         ASN1OctetString rawPreviousDN = elements.get(1).decodeAsOctetString();
@@ -318,9 +313,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_ECN_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_ECN_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/GetEffectiveRights.java b/opendj-sdk/opends/src/server/org/opends/server/controls/GetEffectiveRights.java
index 358e7d0..8b513fc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/GetEffectiveRights.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/GetEffectiveRights.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 import org.opends.server.types.*;
 import org.opends.server.protocols.asn1.ASN1OctetString;
@@ -36,8 +37,7 @@
 import static org.opends.server.util.Validator.ensureNotNull;
 import static org.opends.server.util.StaticUtils.toLowerCase;
 import org.opends.server.core.DirectoryServer;
-import static org.opends.server.messages.ProtocolMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 
@@ -199,27 +199,26 @@
       if (lowerAuthzIDString.startsWith("dn:"))
          authzDN = DN.decode(authzIDString.substring(3));
       else {
-         int  msgID = MSGID_GETEFFECTIVERIGHTS_INVALID_AUTHZID;
-         String message = getMessage(msgID, authzID);
-         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+         Message message = INFO_GETEFFECTIVERIGHTS_INVALID_AUTHZID.get(
+                 String.valueOf(authzID));
+         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
     } catch (ASN1Exception e) {
          if (debugEnabled()) {
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
          }
 
-         int msgID = MSGID_GETEFFECTIVERIGHTS_DECODE_ERROR;
-         String message = getMessage(msgID, e.getMessage());
-         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+         Message message =
+             INFO_GETEFFECTIVERIGHTS_DECODE_ERROR.get(e.getMessage());
+         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     } catch (DirectoryException de) {
         if (debugEnabled()) {
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        int msgID  = MSGID_CANNOT_DECODE_GETEFFECTIVERIGHTS_AUTHZID_DN;
-        String message =
-        getMessage(msgID, authzIDString.substring(3), de.getErrorMessage());
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message = INFO_CANNOT_DECODE_GETEFFECTIVERIGHTS_AUTHZID_DN.get(
+            authzIDString.substring(3), de.getMessageObject());
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
     return new GetEffectiveRights(val, authzDN, attrs);
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPAssertionRequestControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPAssertionRequestControl.java
index 9d4920f..abda03a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPAssertionRequestControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPAssertionRequestControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -41,8 +42,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -160,9 +160,8 @@
   {
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_LDAPASSERT_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAPASSERT_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -178,9 +177,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ae);
       }
 
-      int    msgID   = MSGID_LDAPASSERT_INVALID_CONTROL_VALUE;
-      String message = getMessage(msgID, ae.getMessage());
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+      Message message =
+          ERR_LDAPASSERT_INVALID_CONTROL_VALUE.get(ae.getMessage());
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                               ae);
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPostReadRequestControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPostReadRequestControl.java
index 7207ba3..a25acbf 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPostReadRequestControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPostReadRequestControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -46,8 +47,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -205,9 +205,8 @@
   {
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_POSTREADREQ_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_POSTREADREQ_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -228,9 +227,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ae);
       }
 
-      int    msgID   = MSGID_POSTREADREQ_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, ae.getMessage());
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+      Message message =
+          ERR_POSTREADREQ_CANNOT_DECODE_VALUE.get(ae.getMessage());
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                               ae);
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPostReadResponseControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPostReadResponseControl.java
index d919382..5c94640 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPostReadResponseControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPostReadResponseControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -40,8 +41,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -147,9 +147,8 @@
   {
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_POSTREADRESP_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_POSTREADRESP_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -169,9 +168,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ae);
       }
 
-      int    msgID   = MSGID_POSTREADRESP_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, ae.getMessage());
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+      Message message =
+          ERR_POSTREADRESP_CANNOT_DECODE_VALUE.get(ae.getMessage());
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                               ae);
     }
     catch (LDAPException le)
@@ -181,9 +180,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, le);
       }
 
-      int    msgID   = MSGID_POSTREADRESP_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, le.getMessage());
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+      Message message =
+          ERR_POSTREADRESP_CANNOT_DECODE_VALUE.get(le.getMessage());
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                               le);
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPreReadRequestControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPreReadRequestControl.java
index b40ad42..47fbf52 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPreReadRequestControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPreReadRequestControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -46,8 +47,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -205,9 +205,8 @@
   {
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_PREREADREQ_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_PREREADREQ_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -228,9 +227,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ae);
       }
 
-      int    msgID   = MSGID_PREREADREQ_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, ae.getMessage());
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+      Message message = ERR_PREREADREQ_CANNOT_DECODE_VALUE.get(ae.getMessage());
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                               ae);
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPreReadResponseControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPreReadResponseControl.java
index 555d155..5f07209 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPreReadResponseControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/LDAPPreReadResponseControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -40,8 +41,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -147,9 +147,8 @@
   {
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_PREREADRESP_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_PREREADRESP_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -169,9 +168,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ae);
       }
 
-      int    msgID   = MSGID_PREREADRESP_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, ae.getMessage());
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+      Message message =
+          ERR_PREREADRESP_CANNOT_DECODE_VALUE.get(ae.getMessage());
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                               ae);
     }
     catch (LDAPException le)
@@ -181,9 +180,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, le);
       }
 
-      int    msgID   = MSGID_PREREADRESP_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, le.getMessage());
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+      Message message =
+          ERR_PREREADRESP_CANNOT_DECODE_VALUE.get(le.getMessage());
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                               le);
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/MatchedValuesControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/MatchedValuesControl.java
index 51968cc..eea54fd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/MatchedValuesControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/MatchedValuesControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -177,9 +177,8 @@
   {
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_MATCHEDVALUES_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_MATCHEDVALUES_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -196,17 +195,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_MATCHEDVALUES_CANNOT_DECODE_VALUE_AS_SEQUENCE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_MATCHEDVALUES_CANNOT_DECODE_VALUE_AS_SEQUENCE.get(
+          getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
     if (elements.isEmpty())
     {
-      int    msgID   = MSGID_MATCHEDVALUES_NO_FILTERS;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_MATCHEDVALUES_NO_FILTERS.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/MatchedValuesFilter.java b/opendj-sdk/opends/src/server/org/opends/server/controls/MatchedValuesFilter.java
index 3399fd9..917d5a1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/MatchedValuesFilter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/MatchedValuesFilter.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -52,8 +53,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -581,10 +581,9 @@
       case OR:
       case NOT:
         // These filter types cannot be used in a matched values filter.
-        int    msgID   = MSGID_MVFILTER_INVALID_LDAP_FILTER_TYPE;
-        String message = getMessage(msgID, String.valueOf(filter),
-                                    String.valueOf(filter.getFilterType()));
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message = ERR_MVFILTER_INVALID_LDAP_FILTER_TYPE.get(
+            String.valueOf(filter), String.valueOf(filter.getFilterType()));
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
 
 
       case EQUALITY:
@@ -632,10 +631,9 @@
         if (filter.getDNAttributes())
         {
           // This cannot be represented in a matched values filter.
-          msgID = MSGID_MVFILTER_INVALID_DN_ATTRIBUTES_FLAG;
-          message = getMessage(msgID, String.valueOf(filter));
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                  message);
+          message = ERR_MVFILTER_INVALID_DN_ATTRIBUTES_FLAG.get(
+              String.valueOf(filter));
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
         else
         {
@@ -647,10 +645,9 @@
 
 
       default:
-        msgID   = MSGID_MVFILTER_INVALID_LDAP_FILTER_TYPE;
-        message = getMessage(msgID, String.valueOf(filter),
-                             String.valueOf(filter.getFilterType()));
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        message = ERR_MVFILTER_INVALID_LDAP_FILTER_TYPE.get(
+            String.valueOf(filter), String.valueOf(filter.getFilterType()));
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
   }
 
@@ -766,10 +763,9 @@
                element.decodeAsSequence().elements();
           if (elements.size() != 2)
           {
-            int    msgID   = MSGID_MVFILTER_INVALID_AVA_SEQUENCE_SIZE;
-            String message = getMessage(msgID, elements.size());
-            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                    message);
+            Message message =
+                ERR_MVFILTER_INVALID_AVA_SEQUENCE_SIZE.get(elements.size());
+            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
 
           String rawAttributeType =
@@ -790,9 +786,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_MVFILTER_CANNOT_DECODE_AVA;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+          Message message =
+              ERR_MVFILTER_CANNOT_DECODE_AVA.get(getExceptionMessage(e));
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                                   e);
         }
 
@@ -806,20 +802,17 @@
                element.decodeAsSequence().elements();
           if (elements.size() != 2)
           {
-            int    msgID   = MSGID_MVFILTER_INVALID_SUBSTRING_SEQUENCE_SIZE;
-            String message = getMessage(msgID, elements.size());
-            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                    message);
+            Message message = ERR_MVFILTER_INVALID_SUBSTRING_SEQUENCE_SIZE.get(
+                elements.size());
+            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
 
           ArrayList<ASN1Element> subElements =
                elements.get(1).decodeAsSequence().elements();
           if (subElements.isEmpty())
           {
-            int    msgID   = MSGID_MVFILTER_NO_SUBSTRING_ELEMENTS;
-            String message = getMessage(msgID);
-            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                    message);
+            Message message = ERR_MVFILTER_NO_SUBSTRING_ELEMENTS.get();
+            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
 
           String rawAttributeType =
@@ -839,10 +832,9 @@
                 }
                 else
                 {
-                  int    msgID   = MSGID_MVFILTER_MULTIPLE_SUBINITIALS;
-                  String message = getMessage(msgID);
-                  throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                          message);
+                  Message message = ERR_MVFILTER_MULTIPLE_SUBINITIALS.get();
+                  throw new LDAPException(
+                          LDAPResultCode.PROTOCOL_ERROR, message);
                 }
                 break;
 
@@ -862,18 +854,16 @@
                 }
                 else
                 {
-                  int    msgID   = MSGID_MVFILTER_MULTIPLE_SUBFINALS;
-                  String message = getMessage(msgID);
-                  throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                          message);
+                  Message message = ERR_MVFILTER_MULTIPLE_SUBFINALS.get();
+                  throw new LDAPException(
+                          LDAPResultCode.PROTOCOL_ERROR, message);
                 }
                 break;
 
               default:
-                int    msgID   = MSGID_MVFILTER_INVALID_SUBSTRING_ELEMENT_TYPE;
-                String message = getMessage(msgID, byteToHex(e.getType()));
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_MVFILTER_INVALID_SUBSTRING_ELEMENT_TYPE.
+                    get(byteToHex(e.getType()));
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
           }
 
@@ -892,9 +882,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_MVFILTER_CANNOT_DECODE_SUBSTRINGS;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+          Message message =
+              ERR_MVFILTER_CANNOT_DECODE_SUBSTRINGS.get(getExceptionMessage(e));
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                                   e);
         }
 
@@ -915,9 +905,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_MVFILTER_CANNOT_DECODE_PRESENT_TYPE;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+          Message message = ERR_MVFILTER_CANNOT_DECODE_PRESENT_TYPE.get(
+              getExceptionMessage(e));
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                                   e);
         }
 
@@ -932,10 +922,9 @@
                element.decodeAsSequence().elements();
           if ((elements.size() < 2) || (elements.size() > 3))
           {
-            int    msgID   = MSGID_MVFILTER_INVALID_EXTENSIBLE_SEQUENCE_SIZE;
-            String message = getMessage(msgID, elements.size());
-            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                    message);
+            Message message = ERR_MVFILTER_INVALID_EXTENSIBLE_SEQUENCE_SIZE.get(
+                elements.size());
+            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
 
 
@@ -953,10 +942,10 @@
                 }
                 else
                 {
-                  int    msgID   = MSGID_MVFILTER_MULTIPLE_MATCHING_RULE_IDS;
-                  String message = getMessage(msgID);
-                  throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                          message);
+                  Message message =
+                      ERR_MVFILTER_MULTIPLE_MATCHING_RULE_IDS.get();
+                  throw new LDAPException(
+                          LDAPResultCode.PROTOCOL_ERROR, message);
                 }
                 break;
 
@@ -967,10 +956,9 @@
                 }
                 else
                 {
-                  int    msgID   = MSGID_MVFILTER_MULTIPLE_ATTRIBUTE_TYPES;
-                  String message = getMessage(msgID);
-                  throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                          message);
+                  Message message = ERR_MVFILTER_MULTIPLE_ATTRIBUTE_TYPES.get();
+                  throw new LDAPException(
+                          LDAPResultCode.PROTOCOL_ERROR, message);
                 }
                 break;
 
@@ -981,18 +969,17 @@
                 }
                 else
                 {
-                  int    msgID   = MSGID_MVFILTER_MULTIPLE_ASSERTION_VALUES;
-                  String message = getMessage(msgID);
-                  throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                          message);
+                  Message message =
+                      ERR_MVFILTER_MULTIPLE_ASSERTION_VALUES.get();
+                  throw new LDAPException(
+                          LDAPResultCode.PROTOCOL_ERROR, message);
                 }
                 break;
 
               default:
-                int    msgID   = MSGID_MVFILTER_INVALID_EXTENSIBLE_ELEMENT_TYPE;
-                String message = getMessage(msgID, byteToHex(e.getType()));
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_MVFILTER_INVALID_EXTENSIBLE_ELEMENT_TYPE.
+                    get(byteToHex(e.getType()));
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
           }
 
@@ -1012,17 +999,17 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_MVFILTER_CANNOT_DECODE_EXTENSIBLE_MATCH;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+          Message message = ERR_MVFILTER_CANNOT_DECODE_EXTENSIBLE_MATCH.get(
+              getExceptionMessage(e));
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                                   e);
         }
 
 
       default:
-        int    msgID   = MSGID_MVFILTER_INVALID_ELEMENT_TYPE;
-        String message = getMessage(msgID, byteToHex(element.getType()));
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message =
+            ERR_MVFILTER_INVALID_ELEMENT_TYPE.get(byteToHex(element.getType()));
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/PagedResultsControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/PagedResultsControl.java
index 9e7644c..a16f5e2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/PagedResultsControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/PagedResultsControl.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ProtocolMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.PROTOCOL_ERROR;
 import static org.opends.server.util.ServerConstants.OID_PAGED_RESULTS_CONTROL;
 
@@ -118,9 +118,8 @@
 
     if (value == null)
     {
-      int    msgID   = MSGID_LDAP_PAGED_RESULTS_DECODE_NULL;
-      String message = getMessage(msgID);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_PAGED_RESULTS_DECODE_NULL.get();
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
     ArrayList<ASN1Element> elements;
@@ -136,17 +135,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_PAGED_RESULTS_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
     int numElements = elements.size();
     if (numElements != 2)
     {
-      int    msgID   = MSGID_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
     try
@@ -160,9 +159,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_PAGED_RESULTS_DECODE_SIZE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_PAGED_RESULTS_DECODE_SIZE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
     try
@@ -176,9 +175,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_PAGED_RESULTS_DECODE_COOKIE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_PAGED_RESULTS_DECODE_COOKIE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordExpiredControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordExpiredControl.java
index 8208f94..83723e3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordExpiredControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordExpiredControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,7 @@
 import org.opends.server.types.Control;
 import org.opends.server.types.LDAPException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -97,9 +97,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_PWEXPIRED_CONTROL_INVALID_VALUE;
-        String message = getMessage(msgID);
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message = ERR_PWEXPIRED_CONTROL_INVALID_VALUE.get();
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordExpiringControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordExpiringControl.java
index 9ab444c..46c6e1e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordExpiringControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordExpiringControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -36,8 +37,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -147,9 +147,8 @@
   {
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_PWEXPIRING_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_PWEXPIRING_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -166,9 +165,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION.
+          get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyErrorType.java b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyErrorType.java
index e4e8f9f..3dc8bad 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyErrorType.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyErrorType.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 
 
 
@@ -45,7 +45,7 @@
    * expired.
    */
   PASSWORD_EXPIRED(PasswordPolicyErrorType.TYPE_PASSWORD_EXPIRED,
-                   MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_EXPIRED),
+                   INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_EXPIRED.get()),
 
 
 
@@ -54,7 +54,7 @@
    * locked.
    */
   ACCOUNT_LOCKED(PasswordPolicyErrorType.TYPE_ACCOUNT_LOCKED,
-                 MSGID_PWPERRTYPE_DESCRIPTION_ACCOUNT_LOCKED),
+                 INFO_PWPERRTYPE_DESCRIPTION_ACCOUNT_LOCKED.get()),
 
 
 
@@ -63,7 +63,7 @@
    * be changed because it has been administratively reset.
    */
   CHANGE_AFTER_RESET(PasswordPolicyErrorType.TYPE_CHANGE_AFTER_RESET,
-                     MSGID_PWPERRTYPE_DESCRIPTION_CHANGE_AFTER_RESET),
+                     INFO_PWPERRTYPE_DESCRIPTION_CHANGE_AFTER_RESET.get()),
 
 
 
@@ -73,7 +73,7 @@
    */
   PASSWORD_MOD_NOT_ALLOWED(
        PasswordPolicyErrorType.TYPE_PASSWORD_MOD_NOT_ALLOWED,
-       MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_MOD_NOT_ALLOWED),
+       INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_MOD_NOT_ALLOWED.get()),
 
 
 
@@ -83,7 +83,7 @@
    */
   MUST_SUPPLY_OLD_PASSWORD(
        PasswordPolicyErrorType.TYPE_MUST_SUPPLY_OLD_PASSWORD,
-       MSGID_PWPERRTYPE_DESCRIPTION_MUST_SUPPLY_OLD_PASSWORD),
+       INFO_PWPERRTYPE_DESCRIPTION_MUST_SUPPLY_OLD_PASSWORD.get()),
 
 
 
@@ -93,7 +93,7 @@
    */
   INSUFFICIENT_PASSWORD_QUALITY(
        PasswordPolicyErrorType.TYPE_INSUFFICIENT_PASSWORD_QUALITY,
-       MSGID_PWPERRTYPE_DESCRIPTION_INSUFFICIENT_PASSWORD_QUALITY),
+       INFO_PWPERRTYPE_DESCRIPTION_INSUFFICIENT_PASSWORD_QUALITY.get()),
 
 
 
@@ -102,7 +102,7 @@
    * too short.
    */
   PASSWORD_TOO_SHORT(PasswordPolicyErrorType.TYPE_PASSWORD_TOO_SHORT,
-                     MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_SHORT),
+                     INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_SHORT.get()),
 
 
 
@@ -112,7 +112,7 @@
    * again).
    */
   PASSWORD_TOO_YOUNG(PasswordPolicyErrorType.TYPE_PASSWORD_TOO_YOUNG,
-                     MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_YOUNG),
+                     INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_YOUNG.get()),
 
 
 
@@ -121,7 +121,7 @@
    * in the user's password history.
    */
   PASSWORD_IN_HISTORY(PasswordPolicyErrorType.TYPE_PASSWORD_IN_HISTORY,
-                      MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_IN_HISTORY);
+                      INFO_PWPERRTYPE_DESCRIPTION_PASSWORD_IN_HISTORY.get());
 
 
 
@@ -193,7 +193,7 @@
   private int value;
 
   // The message ID for the description of this password policy error type.
-  private int descriptionID;
+  private Message description;
 
 
 
@@ -204,13 +204,13 @@
    * @param  value          The integer value associated with the error type to
    *                        use in the associated enumerated element in the
    *                        password policy response control.
-   * @param  descriptionID  The message ID for the description of this password
+   * @param  description    The message for the description of this password
    *                        policy error type.
    */
-  private PasswordPolicyErrorType(int value, int descriptionID)
+  private PasswordPolicyErrorType(int value, Message description)
   {
     this.value         = value;
-    this.descriptionID = descriptionID;
+    this.description   = description;
   }
 
 
@@ -275,7 +275,7 @@
    */
   public String toString()
   {
-    return getMessage(descriptionID);
+    return description.toString();
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyRequestControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyRequestControl.java
index f690c1d..438a9a0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyRequestControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyRequestControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -32,8 +33,7 @@
 import org.opends.server.types.Control;
 import org.opends.server.types.LDAPException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -94,9 +94,8 @@
   {
     if (control.hasValue())
     {
-      int    msgID   = MSGID_PWPOLICYREQ_CONTROL_HAS_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_PWPOLICYREQ_CONTROL_HAS_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java
index 72d70aa..1a3a849 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -43,8 +44,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -262,9 +262,8 @@
     if (controlValue == null)
     {
       // The response control must always have a value.
-      int    msgID   = MSGID_PWPOLICYRES_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_PWPOLICYRES_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -287,11 +286,9 @@
                  PasswordPolicyWarningType.valueOf(integerElement.getType());
             if (warningType == null)
             {
-              int    msgID   = MSGID_PWPOLICYRES_INVALID_WARNING_TYPE;
-              String message = getMessage(msgID,
-                                          byteToHex(integerElement.getType()));
-              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                      message);
+              Message message = ERR_PWPOLICYRES_INVALID_WARNING_TYPE.get(
+                  byteToHex(integerElement.getType()));
+              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
             break;
 
@@ -300,18 +297,16 @@
             errorType = PasswordPolicyErrorType.valueOf(errorValue);
             if (errorType == null)
             {
-              int    msgID   = MSGID_PWPOLICYRES_INVALID_ERROR_TYPE;
-              String message = getMessage(msgID, errorValue);
-              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                      message);
+              Message message =
+                  ERR_PWPOLICYRES_INVALID_ERROR_TYPE.get(errorValue);
+              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
             break;
 
           default:
-            int    msgID   = MSGID_PWPOLICYRES_INVALID_ELEMENT_TYPE;
-            String message = getMessage(msgID, byteToHex(e.getType()));
-            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                    message);
+            Message message = ERR_PWPOLICYRES_INVALID_ELEMENT_TYPE.get(
+                byteToHex(e.getType()));
+            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
       }
 
@@ -331,9 +326,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ae);
       }
 
-      int    msgID   = MSGID_PWPOLICYRES_DECODE_ERROR;
-      String message = getMessage(msgID, ae.getMessage());
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_PWPOLICYRES_DECODE_ERROR.get(ae.getMessage());
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
     catch (Exception e)
     {
@@ -342,9 +336,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWPOLICYRES_DECODE_ERROR;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_PWPOLICYRES_DECODE_ERROR.get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyWarningType.java b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyWarningType.java
index 19e7e6f..08d7966 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyWarningType.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/PasswordPolicyWarningType.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 
 
 
@@ -46,7 +46,7 @@
    * until expiration.
    */
   TIME_BEFORE_EXPIRATION(PasswordPolicyWarningType.TYPE_TIME_BEFORE_EXPIRATION,
-                         MSGID_PWPWARNTYPE_DESCRIPTION_TIME_BEFORE_EXPIRATION),
+                     INFO_PWPWARNTYPE_DESCRIPTION_TIME_BEFORE_EXPIRATION.get()),
 
 
 
@@ -56,7 +56,7 @@
    * logins that the user has left.
    */
   GRACE_LOGINS_REMAINING(PasswordPolicyWarningType.TYPE_GRACE_LOGINS_REMAINING,
-                         MSGID_PWPWARNTYPE_DESCRIPTION_GRACE_LOGINS_REMAINING);
+                     INFO_PWPWARNTYPE_DESCRIPTION_GRACE_LOGINS_REMAINING.get());
 
 
 
@@ -79,7 +79,7 @@
   private byte type;
 
   // The message ID for the description of this password policy error type.
-  private int descriptionID;
+  private Message description;
 
 
 
@@ -89,13 +89,13 @@
    *
    * @param  type           The BER type to use for the associated element in
    *                        the password policy control.
-   * @param  descriptionID  The message ID for the description of this password
+   * @param  description    The message for the description of this password
    *                        policy error type.
    */
-  private PasswordPolicyWarningType(byte type, int descriptionID)
+  private PasswordPolicyWarningType(byte type, Message description)
   {
     this.type          = type;
-    this.descriptionID = descriptionID;
+    this.description   = description;
   }
 
 
@@ -145,7 +145,7 @@
    */
   public String toString()
   {
-    return getMessage(descriptionID);
+    return Message.toString(description);
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/PersistentSearchChangeType.java b/opendj-sdk/opends/src/server/org/opends/server/controls/PersistentSearchChangeType.java
index fb05ab4..329923f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/PersistentSearchChangeType.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/PersistentSearchChangeType.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -35,8 +36,7 @@
 import org.opends.server.protocols.ldap.LDAPResultCode;
 import org.opends.server.types.LDAPException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 
 
 
@@ -154,10 +154,8 @@
       case 8:
         return MODIFY_DN;
       default:
-        int    msgID   = MSGID_PSEARCH_CHANGETYPES_INVALID_TYPE;
-        String message = getMessage(msgID, intValue);
-        throw new LDAPException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
-                                message);
+        Message message = ERR_PSEARCH_CHANGETYPES_INVALID_TYPE.get(intValue);
+        throw new LDAPException(LDAPResultCode.CONSTRAINT_VIOLATION, message);
     }
   }
 
@@ -185,10 +183,8 @@
       case 0:
         // No change types are included.  This won't be allowed because it
         // doesn't make any sense.
-        int    msgID   = MSGID_PSEARCH_CHANGETYPES_NO_TYPES;
-        String message = getMessage(msgID);
-        throw new LDAPException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
-                                message);
+        Message message = ERR_PSEARCH_CHANGETYPES_NO_TYPES.get();
+        throw new LDAPException(LDAPResultCode.CONSTRAINT_VIOLATION, message);
       case 1:
         changeTypes.add(ADD);
         break;
@@ -252,10 +248,8 @@
         changeTypes.add(MODIFY_DN);
         break;
      default:
-        msgID   = MSGID_PSEARCH_CHANGETYPES_INVALID_TYPES;
-        message = getMessage(msgID, intValue);
-        throw new LDAPException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
-                                message);
+        message = ERR_PSEARCH_CHANGETYPES_INVALID_TYPES.get(intValue);
+        throw new LDAPException(LDAPResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     return changeTypes;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/PersistentSearchControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/PersistentSearchControl.java
index c60dc0d..93d765d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/PersistentSearchControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/PersistentSearchControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -43,8 +44,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -215,9 +215,8 @@
   {
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_PSEARCH_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_PSEARCH_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -230,9 +229,9 @@
            ASN1Sequence.decodeAsSequence(control.getValue().value()).elements();
       if (elements.size() != 3)
       {
-        int    msgID   = MSGID_PSEARCH_INVALID_ELEMENT_COUNT;
-        String message = getMessage(msgID, elements.size());
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message =
+            ERR_PSEARCH_INVALID_ELEMENT_COUNT.get(elements.size());
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
 
       int changeTypesValue = elements.get(0).decodeAsInteger().intValue();
@@ -251,9 +250,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PSEARCH_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_PSEARCH_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV1Control.java b/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV1Control.java
index 1f61c81..42aaacc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV1Control.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV1Control.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -48,8 +49,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.util.Validator.*;
@@ -192,17 +192,14 @@
 
     if (! control.isCritical())
     {
-      int    msgID   = MSGID_PROXYAUTH1_CONTROL_NOT_CRITICAL;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                              message);
+      Message message = ERR_PROXYAUTH1_CONTROL_NOT_CRITICAL.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_PROXYAUTH1_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_PROXYAUTH1_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -213,9 +210,9 @@
            ASN1Sequence.decodeAsSequence(control.getValue().value()).elements();
       if (elements.size() != 1)
       {
-        int    msgID   = MSGID_PROXYAUTH1_INVALID_ELEMENT_COUNT;
-        String message = getMessage(msgID, elements.size());
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message =
+            ERR_PROXYAUTH1_INVALID_ELEMENT_COUNT.get(elements.size());
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
 
       rawAuthorizationDN = elements.get(0).decodeAsOctetString();
@@ -231,9 +228,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PROXYAUTH1_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_PROXYAUTH1_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message, e);
     }
 
     return new ProxiedAuthV1Control(control.getOID(), control.isCritical(),
@@ -355,10 +352,9 @@
 
     if (entryLock == null)
     {
-      int    msgID   = MSGID_PROXYAUTH1_CANNOT_LOCK_USER;
-      String message = getMessage(msgID, String.valueOf(authzDN));
-      throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message,
-                                   msgID);
+      Message message =
+          ERR_PROXYAUTH1_CANNOT_LOCK_USER.get(String.valueOf(authzDN));
+      throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
     }
 
     try
@@ -367,10 +363,9 @@
       if (userEntry == null)
       {
         // The requested user does not exist.
-        int    msgID   = MSGID_PROXYAUTH1_NO_SUCH_USER;
-        String message = getMessage(msgID, String.valueOf(authzDN));
-        throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message,
-                                     msgID);
+        Message message =
+            ERR_PROXYAUTH1_NO_SUCH_USER.get(String.valueOf(authzDN));
+        throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
       }
 
 
@@ -384,10 +379,9 @@
           pwpState.lockedDueToMaximumResetAge() ||
           pwpState.isPasswordExpired())
       {
-        int    msgID   = MSGID_PROXYAUTH1_UNUSABLE_ACCOUNT;
-        String message = getMessage(msgID, String.valueOf(authzDN));
-        throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message,
-                                     msgID);
+        Message message =
+            ERR_PROXYAUTH1_UNUSABLE_ACCOUNT.get(String.valueOf(authzDN));
+        throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
       }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java b/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
index be37512..11d5029 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -47,8 +48,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.util.Validator.*;
@@ -138,17 +138,14 @@
 
     if (! control.isCritical())
     {
-      int    msgID   = MSGID_PROXYAUTH2_CONTROL_NOT_CRITICAL;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                              message);
+      Message message = ERR_PROXYAUTH2_CONTROL_NOT_CRITICAL.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     if (! control.hasValue())
     {
-      int    msgID   = MSGID_PROXYAUTH2_NO_CONTROL_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_PROXYAUTH2_NO_CONTROL_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     ASN1OctetString authorizationID;
@@ -171,9 +168,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ae);
         }
 
-        int    msgID   = MSGID_PROXYAUTH2_CANNOT_DECODE_VALUE;
-        String message = getMessage(msgID, getExceptionMessage(ae));
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message,
+        Message message =
+            ERR_PROXYAUTH2_CANNOT_DECODE_VALUE.get(getExceptionMessage(ae));
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                                 ae);
       }
     }
@@ -184,9 +181,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PROXYAUTH2_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_PROXYAUTH2_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message, e);
     }
 
     return new ProxiedAuthV2Control(control.getOID(), control.isCritical(),
@@ -288,10 +285,10 @@
 
         if (entryLock == null)
         {
-          int    msgID   = MSGID_PROXYAUTH2_CANNOT_LOCK_USER;
-          String message = getMessage(msgID, String.valueOf(authzDN));
-          throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message,
-                                       msgID);
+          Message message =
+              ERR_PROXYAUTH2_CANNOT_LOCK_USER.get(String.valueOf(authzDN));
+          throw new DirectoryException(
+                  ResultCode.AUTHORIZATION_DENIED, message);
         }
 
         try
@@ -300,10 +297,9 @@
           if (userEntry == null)
           {
             // The requested user does not exist.
-            int    msgID   = MSGID_PROXYAUTH2_NO_SUCH_USER;
-            String message = getMessage(msgID, authzID);
+            Message message = ERR_PROXYAUTH2_NO_SUCH_USER.get(authzID);
             throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED,
-                                         message, msgID);
+                                         message);
           }
 
           // FIXME -- We should provide some mechanism for enabling debug
@@ -316,10 +312,10 @@
               pwpState.lockedDueToMaximumResetAge() ||
               pwpState.isPasswordExpired())
           {
-            int    msgID   = MSGID_PROXYAUTH2_UNUSABLE_ACCOUNT;
-            String message = getMessage(msgID, String.valueOf(authzDN));
+            Message message =
+                ERR_PROXYAUTH2_UNUSABLE_ACCOUNT.get(String.valueOf(authzDN));
             throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED,
-                                         message, msgID);
+                                         message);
           }
 
 
@@ -347,19 +343,15 @@
            DirectoryServer.getProxiedAuthorizationIdentityMapper();
       if (proxyMapper == null)
       {
-        int    msgID   = MSGID_PROXYAUTH2_NO_IDENTITY_MAPPER;
-        String message = getMessage(msgID);
-        throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message,
-                                     msgID);
+        Message message = ERR_PROXYAUTH2_NO_IDENTITY_MAPPER.get();
+        throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
       }
 
       Entry userEntry = proxyMapper.getEntryForID(authzID.substring(2));
       if (userEntry == null)
       {
-        int    msgID   = MSGID_PROXYAUTH2_NO_SUCH_USER;
-        String message = getMessage(msgID, authzID);
-        throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message,
-                                     msgID);
+        Message message = ERR_PROXYAUTH2_NO_SUCH_USER.get(authzID);
+        throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
       }
       else
       {
@@ -373,10 +365,10 @@
             pwpState.lockedDueToMaximumResetAge() ||
             pwpState.isPasswordExpired())
         {
-          int    msgID   = MSGID_PROXYAUTH2_UNUSABLE_ACCOUNT;
-          String message = getMessage(msgID, String.valueOf(userEntry.getDN()));
+          Message message = ERR_PROXYAUTH2_UNUSABLE_ACCOUNT.get(
+              String.valueOf(userEntry.getDN()));
           throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED,
-                                       message, msgID);
+                                       message);
         }
 
         return userEntry;
@@ -384,9 +376,8 @@
     }
     else
     {
-      int    msgID   = MSGID_PROXYAUTH2_INVALID_AUTHZID;
-      String message = getMessage(msgID, authzID);
-      throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, msgID);
+      Message message = ERR_PROXYAUTH2_INVALID_AUTHZID.get(authzID);
+      throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/ServerSideSortRequestControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/ServerSideSortRequestControl.java
index c229c3d..5b77e65 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/ServerSideSortRequestControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/ServerSideSortRequestControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -44,8 +45,7 @@
 import org.opends.server.types.SortKey;
 import org.opends.server.types.SortOrder;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -231,10 +231,9 @@
       {
         if (token.length() == 0)
         {
-          int    msgID   = MSGID_SORTREQ_CONTROL_NO_ATTR_NAME;
-          String message = getMessage(msgID, sortOrderString);
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                  message);
+          Message message =
+              INFO_SORTREQ_CONTROL_NO_ATTR_NAME.get(sortOrderString);
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
 
         if (reverseOrder)
@@ -253,17 +252,15 @@
       }
       else if (colonPos == 0)
       {
-        int    msgID   = MSGID_SORTREQ_CONTROL_NO_ATTR_NAME;
-        String message = getMessage(msgID, sortOrderString);
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                message);
+        Message message =
+            INFO_SORTREQ_CONTROL_NO_ATTR_NAME.get(sortOrderString);
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
       else if (colonPos == (token.length() - 1))
       {
-        int    msgID   = MSGID_SORTREQ_CONTROL_NO_MATCHING_RULE;
-        String message = getMessage(msgID, sortOrderString);
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                message);
+        Message message =
+            INFO_SORTREQ_CONTROL_NO_MATCHING_RULE.get(sortOrderString);
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
       else
       {
@@ -290,9 +287,8 @@
 
     if (keyList.isEmpty())
     {
-      int    msgID   = MSGID_SORTREQ_CONTROL_NO_SORT_KEYS;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = INFO_SORTREQ_CONTROL_NO_SORT_KEYS.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     return new ASN1OctetString(new ASN1Sequence(keyList).encode());
@@ -320,9 +316,8 @@
     ASN1OctetString controlValue = control.getValue();
     if (controlValue == null)
     {
-      int    msgID   = MSGID_SORTREQ_CONTROL_NO_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = INFO_SORTREQ_CONTROL_NO_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     try
@@ -333,9 +328,8 @@
       SortKey[] sortKeys = new SortKey[orderElements.size()];
       if (sortKeys.length == 0)
       {
-        int    msgID   = MSGID_SORTREQ_CONTROL_NO_SORT_KEYS;
-        String message = getMessage(msgID);
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message = INFO_SORTREQ_CONTROL_NO_SORT_KEYS.get();
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
 
       for (int i=0; i < sortKeys.length; i++)
@@ -350,10 +344,8 @@
                                                                   false);
         if (attrType == null)
         {
-          int    msgID   = MSGID_SORTREQ_CONTROL_UNDEFINED_ATTR;
-          String message = getMessage(msgID, attrName);
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                  message);
+          Message message = INFO_SORTREQ_CONTROL_UNDEFINED_ATTR.get(attrName);
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
 
         OrderingMatchingRule orderingRule = null;
@@ -371,10 +363,9 @@
                    DirectoryServer.getOrderingMatchingRule(orderingRuleID);
               if (orderingRule == null)
               {
-                int    msgID   = MSGID_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE;
-                String message = getMessage(msgID, orderingRuleID);
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = INFO_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE.
+                    get(orderingRuleID);
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
               }
               break;
 
@@ -383,20 +374,18 @@
               break;
 
             default:
-              int    msgID   = MSGID_SORTREQ_CONTROL_INVALID_SEQ_ELEMENT_TYPE;
-              String message = getMessage(msgID, byteToHex(e.getType()));
-              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                      message);
+              Message message = INFO_SORTREQ_CONTROL_INVALID_SEQ_ELEMENT_TYPE.
+                  get(byteToHex(e.getType()));
+              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
         }
 
         if ((orderingRule == null) &&
             (attrType.getOrderingMatchingRule() == null))
         {
-          int    msgID   = MSGID_SORTREQ_CONTROL_NO_ORDERING_RULE_FOR_ATTR;
-          String message = getMessage(msgID, attrName);
-          throw new LDAPException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
-                                  message);
+          Message message =
+              INFO_SORTREQ_CONTROL_NO_ORDERING_RULE_FOR_ATTR.get(attrName);
+          throw new LDAPException(LDAPResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         sortKeys[i] = new SortKey(attrType, ascending, orderingRule);
@@ -413,9 +402,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_SORTREQ_CONTROL_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          INFO_SORTREQ_CONTROL_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/ServerSideSortResponseControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/ServerSideSortResponseControl.java
index 0875728..cb271ea 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/ServerSideSortResponseControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/ServerSideSortResponseControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -38,8 +39,7 @@
 import org.opends.server.types.Control;
 import org.opends.server.types.LDAPException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -207,9 +207,8 @@
     ASN1OctetString controlValue = control.getValue();
     if (controlValue == null)
     {
-      int    msgID   = MSGID_SORTRES_CONTROL_NO_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = INFO_SORTRES_CONTROL_NO_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     try
@@ -231,9 +230,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_SORTRES_CONTROL_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          INFO_SORTRES_CONTROL_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/VLVRequestControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/VLVRequestControl.java
index 1e0ff6f..a8b69f0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/VLVRequestControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/VLVRequestControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -39,8 +40,7 @@
 import org.opends.server.types.Control;
 import org.opends.server.types.LDAPException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -461,9 +461,8 @@
     ASN1OctetString controlValue = control.getValue();
     if (controlValue == null)
     {
-      int    msgID   = MSGID_VLVREQ_CONTROL_NO_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = INFO_VLVREQ_CONTROL_NO_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     try
@@ -474,9 +473,9 @@
 
       if ((elements.size() < 3) || (elements.size() > 4))
       {
-        int    msgID   = MSGID_VLVREQ_CONTROL_INVALID_ELEMENT_COUNT;
-        String message = getMessage(msgID, elements.size());
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message =
+            INFO_VLVREQ_CONTROL_INVALID_ELEMENT_COUNT.get(elements.size());
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
 
       int beforeCount = elements.get(0).decodeAsInteger().intValue();
@@ -501,10 +500,9 @@
           break;
 
         default:
-          int    msgID   = MSGID_VLVREQ_CONTROL_INVALID_TARGET_TYPE;
-          String message = getMessage(msgID, byteToHex(targetType));
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                  message);
+          Message message = INFO_VLVREQ_CONTROL_INVALID_TARGET_TYPE.get(
+              byteToHex(targetType));
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
 
       ASN1OctetString contextID = null;
@@ -524,9 +522,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_VLVREQ_CONTROL_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          INFO_VLVREQ_CONTROL_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/VLVResponseControl.java b/opendj-sdk/opends/src/server/org/opends/server/controls/VLVResponseControl.java
index 2960500..84f0e8b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/VLVResponseControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/VLVResponseControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.controls;
+import org.opends.messages.Message;
 
 
 
@@ -40,8 +41,7 @@
 import org.opends.server.types.Control;
 import org.opends.server.types.LDAPException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -258,9 +258,8 @@
     ASN1OctetString controlValue = control.getValue();
     if (controlValue == null)
     {
-      int    msgID   = MSGID_VLVRES_CONTROL_NO_VALUE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = INFO_VLVRES_CONTROL_NO_VALUE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     try
@@ -271,9 +270,9 @@
 
       if ((elements.size() < 3) || (elements.size() > 4))
       {
-        int    msgID   = MSGID_VLVRES_CONTROL_INVALID_ELEMENT_COUNT;
-        String message = getMessage(msgID, elements.size());
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message =
+            INFO_VLVRES_CONTROL_INVALID_ELEMENT_COUNT.get(elements.size());
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
 
       int targetPosition = elements.get(0).decodeAsInteger().intValue();
@@ -296,9 +295,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_VLVRES_CONTROL_CANNOT_DECODE_VALUE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          INFO_VLVRES_CONTROL_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/AbandonOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/AbandonOperationBasis.java
index e497933..3494be1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/AbandonOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/AbandonOperationBasis.java
@@ -25,6 +25,8 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.core.CoreConstants.LOG_ELEMENT_ERROR_MESSAGE;
 import static org.opends.server.core.CoreConstants.LOG_ELEMENT_ID_TO_ABANDON;
@@ -32,9 +34,7 @@
 import static org.opends.server.core.CoreConstants.LOG_ELEMENT_RESULT_CODE;
 import static org.opends.server.loggers.AccessLogger.logAbandonRequest;
 import static org.opends.server.loggers.AccessLogger.logAbandonResult;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-
+import static org.opends.messages.CoreMessages.*;
 import java.util.List;
 
 import org.opends.server.api.ClientConnection;
@@ -130,13 +130,13 @@
    */
   @Override()
   public final void disconnectClient(DisconnectReason disconnectReason,
-                                     boolean sendNotification, String message,
-                                     int messageID)
+                                     boolean sendNotification, Message message
+  )
   {
     // Since abandon operations can't be cancelled, we don't need to do anything
     // but forward the request on to the client connection.
-    clientConnection.disconnect(disconnectReason, sendNotification, message,
-                                messageID);
+    clientConnection.disconnect(disconnectReason, sendNotification,
+            message);
   }
 
 
@@ -172,7 +172,7 @@
     String resultCode = String.valueOf(getResultCode().getIntValue());
 
     String errorMessage;
-    StringBuilder errorMessageBuffer = getErrorMessage();
+    MessageBuilder errorMessageBuffer = getErrorMessage();
     if (errorMessageBuffer == null)
     {
       errorMessage = null;
@@ -265,8 +265,7 @@
         // return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREPARSE_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
+        appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get());
 
         setProcessingStopTime();
 
@@ -299,8 +298,7 @@
       if (operation == null)
       {
         setResultCode(ResultCode.NO_SUCH_OPERATION);
-        appendErrorMessage(getMessage(MSGID_ABANDON_OP_NO_SUCH_OPERATION,
-                                      idToAbandon));
+        appendErrorMessage(ERR_ABANDON_OP_NO_SUCH_OPERATION.get(idToAbandon));
       }
       else
       {
@@ -309,9 +307,8 @@
         // to ensure that the requestor isn't left hanging.  This will be a
         // configurable option in the server.
         boolean notifyRequestor = DirectoryServer.notifyAbandonedOperations();
-        String cancelReason = getMessage(MSGID_CANCELED_BY_ABANDON_REQUEST,
-                                         messageID);
-        StringBuilder cancelResponse = new StringBuilder();
+        Message cancelReason = INFO_CANCELED_BY_ABANDON_REQUEST.get(messageID);
+        MessageBuilder cancelResponse = new MessageBuilder();
         CancelResult result =
              operation.cancel(new CancelRequest(notifyRequestor, cancelReason,
                                                 cancelResponse));
@@ -344,7 +341,7 @@
   @Override()
   public final CancelResult cancel(CancelRequest cancelRequest)
   {
-    cancelRequest.addResponseMessage(getMessage(MSGID_CANNOT_CANCEL_ABANDON));
+    cancelRequest.addResponseMessage(ERR_CANNOT_CANCEL_ABANDON.get());
     return CancelResult.CANNOT_CANCEL;
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/AbsoluteSubtreeSpecification.java b/opendj-sdk/opends/src/server/org/opends/server/core/AbsoluteSubtreeSpecification.java
index 13b7ee7..35b2359 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/AbsoluteSubtreeSpecification.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/AbsoluteSubtreeSpecification.java
@@ -25,9 +25,9 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 
 import java.util.HashSet;
 import java.util.InputMismatchException;
@@ -217,10 +217,10 @@
       return new AbsoluteSubtreeSpecification(absoluteBaseDN, minimum,
           maximum, chopBefore, chopAfter, filter);
     } else {
-      int msgID = MSGID_ATTR_SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_INVALID;
-      String message = getMessage(msgID, s);
+      Message message =
+          ERR_ATTR_SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_INVALID.get(s);
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-          message, msgID);
+          message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/AccessControlConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/AccessControlConfigManager.java
index d9d8c2c..07a2d42 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/AccessControlConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/AccessControlConfigManager.java
@@ -25,13 +25,13 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -55,8 +55,6 @@
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
@@ -269,11 +267,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER;
-        String message = getMessage(msgID, newHandlerClass,
-                                    String.valueOf(configEntryDN.toString()),
-                                    stackTraceToSingleLineString(e));
-        throw new InitializationException(msgID, message, e);
+        Message message = ERR_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER.
+            get(newHandlerClass, String.valueOf(configEntryDN.toString()),
+                stackTraceToSingleLineString(e));
+        throw new InitializationException(message, e);
       }
 
       // Switch the handlers without interfering with other threads.
@@ -288,26 +285,22 @@
       // If access control has been disabled put a warning in the log.
       if (newHandlerClass.equals(DefaultAccessControlHandler.class.getName()))
       {
-        int msgID = MSGID_CONFIG_AUTHZ_DISABLED;
-        String message = getMessage(msgID);
-        logError(ErrorLogCategory.CONFIGURATION,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = WARN_CONFIG_AUTHZ_DISABLED.get();
+        logError(message);
         if (currentConfiguration != null)
         {
           DirectoryServer.sendAlertNotification(this,
-               ALERT_TYPE_ACCESS_CONTROL_DISABLED, msgID, message);
+               ALERT_TYPE_ACCESS_CONTROL_DISABLED, message);
         }
       }
       else
       {
-        int msgID = MSGID_CONFIG_AUTHZ_ENABLED;
-        String message = getMessage(msgID, newHandlerClass);
-        logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.NOTICE,
-                 message, msgID);
+        Message message = NOTE_CONFIG_AUTHZ_ENABLED.get(newHandlerClass);
+        logError(message);
         if (currentConfiguration != null)
         {
           DirectoryServer.sendAlertNotification(this,
-               ALERT_TYPE_ACCESS_CONTROL_ENABLED, msgID, message);
+               ALERT_TYPE_ACCESS_CONTROL_ENABLED, message);
         }
       }
     }
@@ -323,7 +316,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       AccessControlHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     try
     {
@@ -337,7 +330,7 @@
     }
     catch (InitializationException e)
     {
-      unacceptableReasons.add(e.getMessage());
+      unacceptableReasons.add(e.getMessageObject());
       return false;
     }
 
@@ -353,7 +346,7 @@
                                  AccessControlHandlerCfg configuration)
   {
     ResultCode resultCode = ResultCode.SUCCESS;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     try
     {
@@ -362,12 +355,12 @@
     }
     catch (ConfigException e)
     {
-      messages.add(e.getMessage());
+      messages.add(e.getMessageObject());
       resultCode = ResultCode.CONSTRAINT_VIOLATION;
     }
     catch (InitializationException e)
     {
-      messages.add(e.getMessage());
+      messages.add(e.getMessageObject());
       resultCode = DirectoryServer.getServerErrorResultCode();
     }
 
@@ -462,7 +455,7 @@
                                            AccessControlHandlerCfg.class,
                                            List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(provider, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -470,7 +463,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -479,10 +472,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_AUTHZ_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_AUTHZ_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -490,11 +482,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/AccountStatusNotificationHandlerConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/AccountStatusNotificationHandlerConfigManager.java
index a165f77..bff4937 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/AccountStatusNotificationHandlerConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/AccountStatusNotificationHandlerConfigManager.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.lang.reflect.Method;
@@ -146,7 +146,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       AccountStatusNotificationHandlerCfg configuration,
-      List<String>  unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -164,7 +164,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         status = false;
       }
     }
@@ -183,7 +183,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<String>()
+        ResultCode.SUCCESS, false, new ArrayList<Message>()
         );
 
     // Get the configuration entry DN and the associated handler class.
@@ -228,7 +228,7 @@
     }
     catch (InitializationException ie)
     {
-      changeResult.addMessage (ie.getMessage());
+      changeResult.addMessage (ie.getMessageObject());
       changeResult.setResultCode (DirectoryServer.getServerErrorResultCode());
       return changeResult;
     }
@@ -243,7 +243,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       AccountStatusNotificationHandlerCfg configuration,
-      List<String> unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -253,8 +253,8 @@
     DN configEntryDN = configuration.dn();
     if (notificationHandlers.containsKey(configEntryDN))
     {
-      int    msgID   = MSGID_CONFIG_ACCTNOTHANDLER_EXISTS;
-      String message = getMessage(msgID, String.valueOf(configEntryDN));
+      Message message = ERR_CONFIG_ACCTNOTHANDLER_EXISTS.get(
+              String.valueOf(configEntryDN));
       unacceptableReasons.add (message);
       status = false;
     }
@@ -272,7 +272,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add (ie.getMessage());
+        unacceptableReasons.add (ie.getMessageObject());
         status = false;
       }
     }
@@ -291,7 +291,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<String>()
+        ResultCode.SUCCESS, false, new ArrayList<Message>()
         );
 
     // Register a change listener with it so we can be notified of changes
@@ -308,7 +308,7 @@
       }
       catch (InitializationException ie)
       {
-        changeResult.addMessage (ie.getMessage());
+        changeResult.addMessage (ie.getMessageObject());
         changeResult.setResultCode (DirectoryServer.getServerErrorResultCode());
         return changeResult;
       }
@@ -324,7 +324,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       AccountStatusNotificationHandlerCfg configuration,
-      List<String> unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // A delete should always be acceptable, so just return true.
@@ -342,7 +342,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<String>()
+        ResultCode.SUCCESS, false, new ArrayList<Message>()
         );
 
     uninstallNotificationHandler (configuration.dn());
@@ -446,7 +446,7 @@
                   "isConfigurationAcceptable",
                   AccountStatusNotificationHandlerCfg.class, List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(notificationHandler,
                                                      configuration,
                                                      unacceptableReasons);
@@ -455,7 +455,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -464,10 +464,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_ACCTNOTHANDLER_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_ACCTNOTHANDLER_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -475,13 +474,11 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_ACCTNOTHANDLER_INITIALIZATION_FAILED;
-      String message = getMessage(
-          msgID, className,
-          String.valueOf(configuration.dn()),
-          stackTraceToSingleLineString(e)
-          );
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_ACCTNOTHANDLER_INITIALIZATION_FAILED.get(
+              className,
+              String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/AddOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/AddOperationBasis.java
index b5bf806..37747cf 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/AddOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/AddOperationBasis.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import static org.opends.server.config.ConfigConstants.ATTR_OBJECTCLASS;
@@ -39,8 +40,7 @@
 import static org.opends.server.loggers.AccessLogger.logAddResponse;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.StaticUtils.getExceptionMessage;
 import static org.opends.server.util.StaticUtils.toLowerCase;
 
@@ -58,8 +58,6 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.protocols.ldap.LDAPAttribute;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.LDAPException;
 import org.opends.server.types.AbstractOperation;
 import org.opends.server.types.Attribute;
@@ -275,7 +273,7 @@
       }
 
       setResultCode(de.getResultCode());
-      appendErrorMessage(de.getErrorMessage());
+      appendErrorMessage(de.getMessageObject());
       setMatchedDN(de.getMatchedDN());
       setReferralURLs(de.getReferralURLs());
     }
@@ -403,9 +401,9 @@
             if (! (isInternalOperation() || isSynchronizationOperation()))
             {
               setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-              appendErrorMessage(getMessage(MSGID_ADD_ATTR_IS_NO_USER_MOD,
-                  String.valueOf(entryDN),
-                  attr.getName()));
+              appendErrorMessage(ERR_ADD_ATTR_IS_NO_USER_MOD.get(
+                      String.valueOf(entryDN),
+                      attr.getName()));
 
               objectClasses = null;
               userAttributes = null;
@@ -478,7 +476,7 @@
         catch (LDAPException le)
         {
           setResultCode(ResultCode.valueOf(le.getResultCode()));
-          appendErrorMessage(le.getMessage());
+          appendErrorMessage(le.getMessageObject());
 
           objectClasses = null;
           userAttributes = null;
@@ -569,16 +567,16 @@
    * {@inheritDoc}
    */
   public final void disconnectClient(DisconnectReason disconnectReason,
-                                     boolean sendNotification, String message,
-                                     int messageID)
+                                     boolean sendNotification, Message message
+  )
   {
     // Before calling clientConnection.disconnect, we need to mark this
     // operation as cancelled so that the attempt to cancel it later won't cause
     // an unnecessary delay.
     setCancelResult(CancelResult.CANCELED);
 
-    clientConnection.disconnect(disconnectReason, sendNotification, message,
-                                messageID);
+    clientConnection.disconnect(disconnectReason, sendNotification,
+            message);
   }
 
 
@@ -609,7 +607,7 @@
     String resultCode = String.valueOf(getResultCode().getIntValue());
 
     String errorMessage;
-    StringBuilder errorMessageBuffer = getErrorMessage();
+    MessageBuilder errorMessageBuffer = getErrorMessage();
     if (errorMessageBuffer == null)
     {
       errorMessage = null;
@@ -826,8 +824,7 @@
         // result and return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREPARSE_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
+        appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get());
 
         setProcessingStopTime();
 
@@ -1017,13 +1014,9 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int    msgID   = MSGID_ADD_ERROR_NOTIFYING_PERSISTENT_SEARCH;
-              String message = getMessage(msgID,
-                  String.valueOf(persistentSearch),
-                  getExceptionMessage(e));
-              logError(ErrorLogCategory.CORE_SERVER,
-                  ErrorLogSeverity.SEVERE_ERROR,
-                  message, msgID);
+              Message message = ERR_ADD_ERROR_NOTIFYING_PERSISTENT_SEARCH.get(
+                  String.valueOf(persistentSearch), getExceptionMessage(e));
+              logError(message);
 
               DirectoryServer.deregisterPersistentSearch(persistentSearch);
             }
@@ -1055,15 +1048,15 @@
       {
         // This is not fine.  The root DSE cannot be added.
         setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-        appendErrorMessage(getMessage(MSGID_ADD_CANNOT_ADD_ROOT_DSE));
+        appendErrorMessage(ERR_ADD_CANNOT_ADD_ROOT_DSE.get());
       }
       else
       {
         // The entry doesn't have a parent but isn't a suffix.  This is not
         // allowed.
         setResultCode(ResultCode.NO_SUCH_OBJECT);
-        appendErrorMessage(getMessage(MSGID_ADD_ENTRY_NOT_SUFFIX,
-                                      String.valueOf(entryDN)));
+        appendErrorMessage(ERR_ADD_ENTRY_NOT_SUFFIX.get(
+                String.valueOf(entryDN)));
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/AlertHandlerConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/AlertHandlerConfigManager.java
index 678f020..4479545 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/AlertHandlerConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/AlertHandlerConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -46,16 +47,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.StaticUtils.*;
+import static org.opends.messages.ConfigMessages.*;
 
+import static org.opends.server.util.StaticUtils.*;
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -129,9 +129,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          ErrorLogger.logError(ie.getMessageObject());
           continue;
         }
       }
@@ -144,7 +142,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(AlertHandlerCfg configuration,
-                                              List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -157,7 +155,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -173,9 +171,9 @@
    */
   public ConfigChangeResult applyConfigurationAdd(AlertHandlerCfg configuration)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -200,7 +198,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -219,7 +217,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       AlertHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // alert handler is in use.
@@ -234,9 +232,9 @@
   public ConfigChangeResult applyConfigurationDelete(
                                  AlertHandlerCfg configuration)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     AlertHandler alertHandler = alertHandlers.remove(configuration.dn());
     if (alertHandler != null)
@@ -254,7 +252,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(AlertHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -267,7 +265,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -286,7 +284,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing alert handler if it's already enabled.
@@ -340,7 +338,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -397,7 +395,7 @@
              handler.getClass().getMethod("isConfigurationAcceptable",
                                           AlertHandlerCfg.class, List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(handler, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -405,7 +403,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -414,10 +412,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_ALERTHANDLER_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_ALERTHANDLER_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -425,11 +422,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_ALERTHANDLER_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_ALERTHANDLER_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java
index ac7714f..8bc4fbe 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java
@@ -44,18 +44,18 @@
 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.opends.server.types.AttributeType;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -138,20 +138,15 @@
           }
           catch (DirectoryException de)
           {
-            int    msgID   = MSGID_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX;
-            String message = getMessage(msgID,
-                                  String.valueOf(syntaxConfiguration.dn()),
-                                  de.getErrorMessage());
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+            Message message = WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX.get(
+               String.valueOf(syntaxConfiguration.dn()), de.getMessageObject());
+            logError(message);
             continue;
           }
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          logError(ie.getMessageObject());
           continue;
         }
       }
@@ -165,7 +160,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       AttributeSyntaxCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -178,7 +173,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -195,9 +190,9 @@
   public ConfigChangeResult applyConfigurationAdd(
                                  AttributeSyntaxCfg configuration)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -222,9 +217,8 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX;
-        String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                    de.getErrorMessage());
+        Message message = WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX.get(
+                String.valueOf(configuration.dn()), de.getMessageObject());
         messages.add(message);
 
         if (resultCode == ResultCode.SUCCESS)
@@ -240,7 +234,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     return new ConfigChangeResult(resultCode, adminActionRequired, messages);
@@ -253,7 +247,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       AttributeSyntaxCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> 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
@@ -267,9 +261,8 @@
       {
         if (oid.equals(at.getSyntaxOID()))
         {
-          int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DELETE_SYNTAX_IN_USE;
-          String message = getMessage(msgID, syntax.getSyntaxName(),
-                                      at.getNameOrOID());
+          Message message = WARN_CONFIG_SCHEMA_CANNOT_DELETE_SYNTAX_IN_USE.get(
+                  syntax.getSyntaxName(), at.getNameOrOID());
           unacceptableReasons.add(message);
 
           configAcceptable = false;
@@ -290,7 +283,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     AttributeSyntax syntax = syntaxes.remove(configuration.dn());
     if (syntax != null)
@@ -309,7 +302,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       AttributeSyntaxCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -322,7 +315,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -338,9 +331,10 @@
         {
           if (oid.equals(at.getSyntaxOID()))
           {
-            int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_SYNTAX_IN_USE;
-            String message = getMessage(msgID, syntax.getSyntaxName(),
-                                        at.getNameOrOID());
+            Message message =
+                    WARN_CONFIG_SCHEMA_CANNOT_DISABLE_SYNTAX_IN_USE.get(
+                            syntax.getSyntaxName(),
+                            at.getNameOrOID());
             unacceptableReasons.add(message);
             return false;
           }
@@ -362,7 +356,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing syntax if it's already enabled.
@@ -416,9 +410,9 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX;
-        String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                    de.getErrorMessage());
+        Message message = WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX.get(
+                String.valueOf(configuration.dn()),
+                de.getMessageObject());
         messages.add(message);
 
         if (resultCode == ResultCode.SUCCESS)
@@ -434,7 +428,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     return new ConfigChangeResult(resultCode, adminActionRequired, messages);
@@ -486,7 +480,7 @@
                                                     AttributeSyntaxCfg.class,
                                                     List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(syntax, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -494,7 +488,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -503,10 +497,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_SCHEMA_SYNTAX_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_SCHEMA_SYNTAX_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -514,11 +507,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_SCHEMA_SYNTAX_CANNOT_INITIALIZE;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_SCHEMA_SYNTAX_CANNOT_INITIALIZE.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/AuthenticatedUsers.java b/opendj-sdk/opends/src/server/org/opends/server/core/AuthenticatedUsers.java
index bf00081..093c2c8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/AuthenticatedUsers.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/AuthenticatedUsers.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -41,11 +42,7 @@
 import org.opends.server.types.operation.PostResponseModifyOperation;
 import org.opends.server.types.operation.PostResponseModifyDNOperation;
 
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
+import static org.opends.messages.CoreMessages.*;
 /**
  * This class provides a data structure which maps an authenticated user DN to
  * the set of client connections authenticated as that user.  Note that a single
@@ -183,10 +180,10 @@
     {
       for (ClientConnection conn : connectionSet)
       {
-        int    msgID   = MSGID_CLIENTCONNECTION_DISCONNECT_DUE_TO_DELETE;
-        String message = getMessage(msgID, String.valueOf(entry.getDN()));
+        Message message = WARN_CLIENTCONNECTION_DISCONNECT_DUE_TO_DELETE.get(
+                String.valueOf(entry.getDN()));
 
-        conn.disconnect(DisconnectReason.OTHER, true, message, msgID);
+        conn.disconnect(DisconnectReason.OTHER, true, message);
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/BackendConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/BackendConfigManager.java
index 9033b8a..daab51b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/BackendConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/BackendConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -46,8 +47,8 @@
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ConfigurationAddListener;
@@ -135,9 +136,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_BACKEND_CANNOT_GET_CONFIG_BASE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ConfigException(msgID, message, e);
+      Message message =
+          ERR_CONFIG_BACKEND_CANNOT_GET_CONFIG_BASE.get(getExceptionMessage(e));
+      throw new ConfigException(message, e);
 
     }
 
@@ -147,9 +148,8 @@
     // configuration, even if there are no backends defined below it.
     if (backendRoot == null)
     {
-      int    msgID   = MSGID_CONFIG_BACKEND_BASE_DOES_NOT_EXIST;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_BACKEND_BASE_DOES_NOT_EXIST.get();
+      throw new ConfigException(message);
     }
 
 
@@ -174,11 +174,9 @@
         // then log an error and skip it.
         if (DirectoryServer.hasBackend(backendCfg.getBackendId()))
         {
-          int msgID = MSGID_CONFIG_BACKEND_DUPLICATE_BACKEND_ID;
-          String message = getMessage(msgID, backendID,
-                                      String.valueOf(backendDN));
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          Message message = WARN_CONFIG_BACKEND_DUPLICATE_BACKEND_ID.get(
+              backendID, String.valueOf(backendDN));
+          logError(message);
           continue;
         }
 
@@ -204,13 +202,10 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_CONFIG_BACKEND_CANNOT_INSTANTIATE;
-          String message = getMessage(msgID, String.valueOf(className),
-                                      String.valueOf(backendDN),
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_CONFIG_BACKEND_CANNOT_INSTANTIATE.
+              get(String.valueOf(className), String.valueOf(backendDN),
+                  stackTraceToSingleLineString(e));
+          logError(message);
           continue;
         }
 
@@ -256,11 +251,9 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
           {
-            int msgID = MSGID_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK;
-            String message = getMessage(msgID, backendID,
-                                        String.valueOf(failureReason));
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+                backendID, String.valueOf(failureReason));
+            logError(message);
             // FIXME -- Do we need to send an admin alert?
             continue;
           }
@@ -272,11 +265,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK;
-          String message = getMessage(msgID, backendID,
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+              backendID, stackTraceToSingleLineString(e));
+          logError(message);
           // FIXME -- Do we need to send an admin alert?
           continue;
         }
@@ -294,13 +285,10 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_CONFIG_BACKEND_CANNOT_INITIALIZE;
-          String message = getMessage(msgID, String.valueOf(className),
-                                      String.valueOf(backendDN),
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_CONFIG_BACKEND_CANNOT_INITIALIZE.
+              get(String.valueOf(className), String.valueOf(backendDN),
+                  stackTraceToSingleLineString(e));
+          logError(message);
 
           try
           {
@@ -308,11 +296,9 @@
             StringBuilder failureReason = new StringBuilder();
             if (! LockFileManager.releaseLock(lockFile, failureReason))
             {
-              msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
-              message = getMessage(msgID, backendID,
-                                   String.valueOf(failureReason));
-              logError(ErrorLogCategory.CONFIGURATION,
-                       ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+              message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.
+                  get(backendID, String.valueOf(failureReason));
+              logError(message);
               // FIXME -- Do we need to send an admin alert?
             }
           }
@@ -323,11 +309,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e2);
             }
 
-            msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
-            message = getMessage(msgID, backendID,
-                                 stackTraceToSingleLineString(e2));
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.
+                get(backendID, stackTraceToSingleLineString(e2));
+            logError(message);
             // FIXME -- Do we need to send an admin alert?
           }
 
@@ -355,12 +339,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND;
-          String message = getMessage(msgID, backendID,
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND.get(
+              backendID, getExceptionMessage(e));
+          logError(message);
           // FIXME -- Do we need to send an admin alert?
         }
 
@@ -374,10 +355,9 @@
       {
         // The backend is explicitly disabled.  Log a mild warning and
         // continue.
-        int msgID = MSGID_CONFIG_BACKEND_DISABLED;
-        String message = getMessage(msgID, String.valueOf(backendDN));
-        logError(ErrorLogCategory.CONFIGURATION,
-                 ErrorLogSeverity.INFORMATIONAL, message, msgID);
+        Message message =
+            INFO_CONFIG_BACKEND_DISABLED.get(String.valueOf(backendDN));
+        logError(message);
       }
     }
   }
@@ -388,7 +368,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
        BackendCfg configEntry,
-       List<String> unacceptableReason)
+       List<Message> unacceptableReason)
   {
     DN backendDN = configEntry.dn();
 
@@ -435,7 +415,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          unacceptableReason.add(de.getMessage());
+          unacceptableReason.add(de.getMessageObject());
           return false;
         }
       }
@@ -453,7 +433,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          unacceptableReason.add(de.getMessage());
+          unacceptableReason.add(de.getMessageObject());
           return false;
         }
       }
@@ -471,9 +451,9 @@
       Class backendClass = DirectoryServer.loadClass(className);
       if (! Backend.class.isAssignableFrom(backendClass))
       {
-        int msgID = MSGID_CONFIG_BACKEND_CLASS_NOT_BACKEND;
-        unacceptableReason.add(getMessage(msgID, String.valueOf(className),
-                                          String.valueOf(backendDN)));
+
+        unacceptableReason.add(ERR_CONFIG_BACKEND_CLASS_NOT_BACKEND.get(
+                String.valueOf(className), String.valueOf(backendDN)));
         return false;
       }
 
@@ -490,10 +470,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_BACKEND_CANNOT_INSTANTIATE;
-      unacceptableReason.add(getMessage(msgID, String.valueOf(className),
-                                        String.valueOf(backendDN),
-                                        stackTraceToSingleLineString(e)));
+
+      unacceptableReason.add(ERR_CONFIG_BACKEND_CANNOT_INSTANTIATE.get(
+              String.valueOf(className),
+              String.valueOf(backendDN),
+              stackTraceToSingleLineString(e)));
       return false;
     }
 
@@ -510,11 +491,11 @@
    */
   public ConfigChangeResult applyConfigurationChange(BackendCfg cfg)
   {
-    DN                backendDN           = cfg.dn();
-    Backend           backend             = registeredBackends.get(backendDN);
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    DN                 backendDN           = cfg.dn();
+    Backend            backend             = registeredBackends.get(backendDN);
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // See if the entry contains an attribute that indicates whether the
@@ -559,11 +540,9 @@
             StringBuilder failureReason = new StringBuilder();
             if (! LockFileManager.releaseLock(lockFile, failureReason))
             {
-              int msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
-              String message = getMessage(msgID, backend.getBackendID(),
-                                          String.valueOf(failureReason));
-              logError(ErrorLogCategory.CONFIGURATION,
-                       ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+              Message 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?
             }
           }
@@ -574,11 +553,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e2);
             }
 
-            int msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
-            String message = getMessage(msgID, backend.getBackendID(),
-                                        stackTraceToSingleLineString(e2));
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.
+                get(backend.getBackendID(), stackTraceToSingleLineString(e2));
+            logError(message);
             // FIXME -- Do we need to send an admin alert?
           }
 
@@ -598,9 +575,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_BACKEND_UNABLE_TO_DETERMINE_ENABLED_STATE;
-      messages.add(getMessage(msgID, String.valueOf(backendDN),
-                              stackTraceToSingleLineString(e)));
+
+      messages.add(ERR_CONFIG_BACKEND_UNABLE_TO_DETERMINE_ENABLED_STATE.get(
+              String.valueOf(backendDN), stackTraceToSingleLineString(e)));
       resultCode = DirectoryServer.getServerErrorResultCode();
       return new ConfigChangeResult(resultCode, adminActionRequired, messages);
     }
@@ -660,9 +637,11 @@
             // It appears to be a valid backend class.  We'll return that the
             // change is successful, but indicate that some administrative
             // action is required.
-            int msgID = MSGID_CONFIG_BACKEND_ACTION_REQUIRED_TO_CHANGE_CLASS;
-            messages.add(getMessage(msgID, String.valueOf(backendDN),
-                                    backend.getClass().getName(), className));
+
+            messages.add(
+                    NOTE_CONFIG_BACKEND_ACTION_REQUIRED_TO_CHANGE_CLASS.get(
+                            String.valueOf(backendDN),
+                            backend.getClass().getName(), className));
             adminActionRequired = true;
             return new ConfigChangeResult(resultCode, adminActionRequired,
                                           messages);
@@ -670,9 +649,9 @@
           else
           {
             // It is not a valid backend class.  This is an error.
-            int msgID = MSGID_CONFIG_BACKEND_CLASS_NOT_BACKEND;
-            messages.add(getMessage(msgID, String.valueOf(className),
-                                    String.valueOf(backendDN)));
+
+            messages.add(ERR_CONFIG_BACKEND_CLASS_NOT_BACKEND.get(
+                    String.valueOf(className), String.valueOf(backendDN)));
             resultCode = ResultCode.CONSTRAINT_VIOLATION;
             return new ConfigChangeResult(resultCode, adminActionRequired,
                                           messages);
@@ -685,10 +664,10 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_CONFIG_BACKEND_CANNOT_INSTANTIATE;
-          messages.add(getMessage(msgID, String.valueOf(className),
-                                  String.valueOf(backendDN),
-                                  stackTraceToSingleLineString(e)));
+
+          messages.add(ERR_CONFIG_BACKEND_CANNOT_INSTANTIATE.get(
+                  String.valueOf(className), String.valueOf(backendDN),
+                  stackTraceToSingleLineString(e)));
           resultCode = DirectoryServer.getServerErrorResultCode();
           return new ConfigChangeResult(resultCode, adminActionRequired,
                                         messages);
@@ -710,9 +689,9 @@
       catch (Exception e)
       {
         // It is not a valid backend class.  This is an error.
-        int msgID = MSGID_CONFIG_BACKEND_CLASS_NOT_BACKEND;
-        messages.add(getMessage(msgID, String.valueOf(className),
-                                String.valueOf(backendDN)));
+
+        messages.add(ERR_CONFIG_BACKEND_CLASS_NOT_BACKEND.get(
+                String.valueOf(className), String.valueOf(backendDN)));
         resultCode = ResultCode.CONSTRAINT_VIOLATION;
         return new ConfigChangeResult(resultCode, adminActionRequired,
                                       messages);
@@ -732,11 +711,9 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
         {
-          int msgID = MSGID_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK;
-          String message = getMessage(msgID, backendID,
-                                      String.valueOf(failureReason));
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+              backendID, String.valueOf(failureReason));
+          logError(message);
           // FIXME -- Do we need to send an admin alert?
 
           resultCode = ResultCode.CONSTRAINT_VIOLATION;
@@ -753,11 +730,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK;
-        String message = getMessage(msgID, backendID,
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.CONFIGURATION,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+            backendID, stackTraceToSingleLineString(e));
+        logError(message);
         // FIXME -- Do we need to send an admin alert?
 
         resultCode = ResultCode.CONSTRAINT_VIOLATION;
@@ -779,10 +754,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_CONFIG_BACKEND_CANNOT_INITIALIZE;
-        messages.add(getMessage(msgID, String.valueOf(className),
-                                String.valueOf(backendDN),
-                                stackTraceToSingleLineString(e)));
+        messages.add(ERR_CONFIG_BACKEND_CANNOT_INITIALIZE.get(
+                String.valueOf(className), String.valueOf(backendDN),
+                stackTraceToSingleLineString(e)));
         resultCode = DirectoryServer.getServerErrorResultCode();
 
         try
@@ -791,11 +765,9 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.releaseLock(lockFile, failureReason))
           {
-            msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
-            String message = getMessage(msgID, backendID,
-                                        String.valueOf(failureReason));
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.
+                get(backendID, String.valueOf(failureReason));
+            logError(message);
             // FIXME -- Do we need to send an admin alert?
           }
         }
@@ -806,11 +778,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e2);
           }
 
-          msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
-          String message = getMessage(msgID, backendID,
-                                      stackTraceToSingleLineString(e2));
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
+              backendID, stackTraceToSingleLineString(e2));
+          logError(message);
           // FIXME -- Do we need to send an admin alert?
         }
 
@@ -839,15 +809,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND;
-        String message = getMessage(msgID, backendID,
-                                    getExceptionMessage(e));
+        Message message = WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND.get(
+                backendID, getExceptionMessage(e));
 
         resultCode = DirectoryServer.getServerErrorResultCode();
         messages.add(message);
 
-        logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        logError(message);
         // FIXME -- Do we need to send an admin alert?
 
         return new ConfigChangeResult(resultCode, adminActionRequired,
@@ -878,7 +846,7 @@
    */
   public boolean isConfigurationAddAcceptable(
        BackendCfg configEntry,
-       List<String> unacceptableReason)
+       List<Message> unacceptableReason)
   {
     DN backendDN = configEntry.dn();
 
@@ -888,9 +856,8 @@
     String backendID = configEntry.getBackendId();
     if (DirectoryServer.hasBackend(backendID))
     {
-      int msgID = MSGID_CONFIG_BACKEND_DUPLICATE_BACKEND_ID;
-      unacceptableReason.add(getMessage(msgID,
-                                        String.valueOf(backendDN)));
+      unacceptableReason.add(WARN_CONFIG_BACKEND_DUPLICATE_BACKEND_ID.get(
+              String.valueOf(backendDN), backendID));
       return false;
     }
 
@@ -922,10 +889,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_BACKEND_CANNOT_INSTANTIATE;
-      unacceptableReason.add(getMessage(msgID, String.valueOf(className),
-                                        String.valueOf(backendDN),
-                                        stackTraceToSingleLineString(e)));
+      unacceptableReason.add(ERR_CONFIG_BACKEND_CANNOT_INSTANTIATE.get(
+              String.valueOf(className),
+              String.valueOf(backendDN),
+              stackTraceToSingleLineString(e)));
       return false;
     }
 
@@ -940,7 +907,7 @@
 //      {
 //        if (errorMessages.isEmpty())
 //        {
-//          int msgID = MSGID_CONFIG_BACKEND_UNACCEPTABLE_CONFIG;
+//          int message = ERR_CONFIG_BACKEND_UNACCEPTABLE_CONFIG.get();
 //          unacceptableReason.add(getMessage(msgID,
 //                                            String.valueOf(configEntryDN)));
 //        }
@@ -969,7 +936,7 @@
       }
       catch (DirectoryException de)
       {
-        unacceptableReason.add(de.getMessage());
+        unacceptableReason.add(de.getMessageObject());
         return false;
       }
       catch (Exception e)
@@ -996,7 +963,7 @@
     DN                backendDN           = cfg.dn();
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Register as a change listener for this backend entry so that we will
@@ -1011,10 +978,9 @@
     {
       // The backend is explicitly disabled.  We will log a message to
       // indicate that it won't be enabled and return.
-      int msgID = MSGID_CONFIG_BACKEND_DISABLED;
-      String message = getMessage(msgID, String.valueOf(backendDN));
-      logError(ErrorLogCategory.CONFIGURATION,
-               ErrorLogSeverity.INFORMATIONAL, message, msgID);
+      Message message =
+          INFO_CONFIG_BACKEND_DISABLED.get(String.valueOf(backendDN));
+      logError(message);
       messages.add(message);
       return new ConfigChangeResult(resultCode, adminActionRequired,
                                     messages);
@@ -1027,10 +993,9 @@
     String backendID = cfg.getBackendId();
     if (DirectoryServer.hasBackend(backendID))
     {
-      int msgID = MSGID_CONFIG_BACKEND_DUPLICATE_BACKEND_ID;
-      String message = getMessage(msgID, String.valueOf(backendDN));
-      logError(ErrorLogCategory.CONFIGURATION,
-               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+      Message message = WARN_CONFIG_BACKEND_DUPLICATE_BACKEND_ID.get(
+          String.valueOf(backendDN), backendID);
+      logError(message);
       messages.add(message);
       return new ConfigChangeResult(resultCode, adminActionRequired,
                                     messages);
@@ -1084,10 +1049,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_BACKEND_CANNOT_INSTANTIATE;
-      messages.add(getMessage(msgID, String.valueOf(className),
-                              String.valueOf(backendDN),
-                              stackTraceToSingleLineString(e)));
+      messages.add(ERR_CONFIG_BACKEND_CANNOT_INSTANTIATE.get(
+              String.valueOf(className),
+              String.valueOf(backendDN),
+              stackTraceToSingleLineString(e)));
       resultCode = DirectoryServer.getServerErrorResultCode();
       return new ConfigChangeResult(resultCode, adminActionRequired,
                                     messages);
@@ -1107,11 +1072,9 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        int msgID = MSGID_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK;
-        String message = getMessage(msgID, backendID,
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.CONFIGURATION,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+            backendID, String.valueOf(failureReason));
+        logError(message);
         // FIXME -- Do we need to send an admin alert?
 
         resultCode = ResultCode.CONSTRAINT_VIOLATION;
@@ -1128,11 +1091,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK;
-      String message = getMessage(msgID, backendID,
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.CONFIGURATION,
-               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+      Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+          backendID, stackTraceToSingleLineString(e));
+      logError(message);
       // FIXME -- Do we need to send an admin alert?
 
       resultCode = ResultCode.CONSTRAINT_VIOLATION;
@@ -1155,10 +1116,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_BACKEND_CANNOT_INITIALIZE;
-      messages.add(getMessage(msgID, String.valueOf(className),
-                              String.valueOf(backendDN),
-                              stackTraceToSingleLineString(e)));
+      messages.add(ERR_CONFIG_BACKEND_CANNOT_INITIALIZE.get(
+              String.valueOf(className),
+              String.valueOf(backendDN),
+              stackTraceToSingleLineString(e)));
       resultCode = DirectoryServer.getServerErrorResultCode();
 
       try
@@ -1167,11 +1128,9 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-          msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
-          String message = getMessage(msgID, backendID,
-                                      String.valueOf(failureReason));
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
+              backendID, String.valueOf(failureReason));
+          logError(message);
           // FIXME -- Do we need to send an admin alert?
         }
       }
@@ -1182,11 +1141,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e2);
         }
 
-        msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
-        String message = getMessage(msgID, backendID,
-                                    stackTraceToSingleLineString(e2));
-        logError(ErrorLogCategory.CONFIGURATION,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
+            backendID, stackTraceToSingleLineString(e2));
+        logError(message);
         // FIXME -- Do we need to send an admin alert?
       }
 
@@ -1215,15 +1172,13 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND;
-      String message = getMessage(msgID, backendID,
-                                  getExceptionMessage(e));
+      Message message = WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND.get(
+              backendID, getExceptionMessage(e));
 
       resultCode = DirectoryServer.getServerErrorResultCode();
       messages.add(message);
 
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      logError(message);
       // FIXME -- Do we need to send an admin alert?
 
       return new ConfigChangeResult(resultCode, adminActionRequired,
@@ -1240,7 +1195,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
        BackendCfg configEntry,
-       List<String> unacceptableReason)
+       List<Message> unacceptableReason)
   {
     DN backendDN = configEntry.dn();
 
@@ -1265,8 +1220,9 @@
     }
     else
     {
-      int msgID = MSGID_CONFIG_BACKEND_CANNOT_REMOVE_BACKEND_WITH_SUBORDINATES;
-      unacceptableReason.add(getMessage(msgID, String.valueOf(backendDN)));
+      unacceptableReason.add(
+              NOTE_CONFIG_BACKEND_CANNOT_REMOVE_BACKEND_WITH_SUBORDINATES.get(
+                      String.valueOf(backendDN)));
       return false;
     }
   }
@@ -1280,7 +1236,7 @@
     DN                backendDN           = configEntry.dn();
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // See if this backend config manager has a backend registered with the
@@ -1328,11 +1284,9 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-          int msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
-          String message = getMessage(msgID, backend.getBackendID(),
-                                      String.valueOf(failureReason));
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          Message 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?
         }
       }
@@ -1343,11 +1297,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e2);
         }
 
-        int msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    stackTraceToSingleLineString(e2));
-        logError(ErrorLogCategory.CONFIGURATION,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
+            backend.getBackendID(), stackTraceToSingleLineString(e2));
+        logError(message);
         // FIXME -- Do we need to send an admin alert?
       }
 
@@ -1356,8 +1308,9 @@
     }
     else
     {
-      int msgID = MSGID_CONFIG_BACKEND_CANNOT_REMOVE_BACKEND_WITH_SUBORDINATES;
-      messages.add(getMessage(msgID, String.valueOf(backendDN)));
+
+      messages.add(NOTE_CONFIG_BACKEND_CANNOT_REMOVE_BACKEND_WITH_SUBORDINATES
+              .get(String.valueOf(backendDN)));
       resultCode = ResultCode.UNWILLING_TO_PERFORM;
       return new ConfigChangeResult(resultCode, adminActionRequired, messages);
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/BindOperation.java b/opendj-sdk/opends/src/server/org/opends/server/core/BindOperation.java
index 03cf58b..8194635 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/BindOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/BindOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.AuthenticationInfo;
@@ -34,6 +35,7 @@
 import org.opends.server.types.Entry;
 import org.opends.server.types.Operation;
 
+
 /**
  * This interface defines an operation that may be used to authenticate a user
  * to the Directory Server.  Note that for security restrictions, response
@@ -191,26 +193,15 @@
    * @return  A human-readable message providing the reason that the
    *          authentication failed, or <CODE>null</CODE> if none is available.
    */
-  public abstract String getAuthFailureReason();
-
-  /**
-   * Retrieves the unique identifier for the authentication failure reason, if
-   * available.
-   *
-   * @return  The unique identifier for the authentication failure reason, or
-   *          zero if none is available.
-   */
-  public abstract int getAuthFailureID();
+  public abstract Message getAuthFailureReason();
 
   /**
    * Specifies the reason that the authentication failed.
    *
-   * @param  id      The unique identifier for the authentication failure
-   *                 reason.
-   * @param  reason  A human-readable message providing the reason that the
+   * @param  message providing the reason that the
    *                 authentication failed.
    */
-  public abstract void setAuthFailureReason(int id, String reason);
+  public abstract void setAuthFailureReason(Message message);
 
   /**
    * Retrieves the user entry DN for this bind operation.  It will only be
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/BindOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/BindOperationBasis.java
index 58e39e5..837f39a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/BindOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/BindOperationBasis.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import static org.opends.server.core.CoreConstants.LOG_ELEMENT_AUTH_TYPE;
@@ -39,8 +40,7 @@
 import static org.opends.server.loggers.AccessLogger.logBindRequest;
 import static org.opends.server.loggers.AccessLogger.logBindResponse;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.CoreMessages.*;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -61,11 +61,11 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.Entry;
 import org.opends.server.types.Operation;
 import org.opends.server.types.OperationType;
 import org.opends.server.types.ResultCode;
+import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.operation.PreParseBindOperation;
 import org.opends.server.workflowelement.localbackend.*;
 
@@ -120,14 +120,11 @@
   // password policy state information.
   private Entry saslAuthUserEntry;
 
-  // The unique ID associated with the failure reason message.
-  private int authFailureID;
-
   // The set of response controls for this bind operation.
   private List<Control> responseControls;
 
   // A message explaining the reason for the authentication failure.
-  private String authFailureReason;
+  private Message authFailureReason;
 
   // The SASL mechanism used for SASL authentication.
   private String saslMechanism;
@@ -185,7 +182,6 @@
     bindDN                   = null;
     userEntryDN              = null;
     responseControls         = new ArrayList<Control>(0);
-    authFailureID            = 0;
     authFailureReason        = null;
     saslAuthUserEntry        = null;
   }
@@ -235,7 +231,6 @@
     bindDN                 = null;
     userEntryDN            = null;
     responseControls       = new ArrayList<Control>(0);
-    authFailureID          = 0;
     authFailureReason      = null;
     saslAuthUserEntry      = null;
   }
@@ -290,7 +285,6 @@
     }
 
     responseControls         = new ArrayList<Control>(0);
-    authFailureID            = 0;
     authFailureReason        = null;
     saslAuthUserEntry        = null;
     userEntryDN              = null;
@@ -339,7 +333,6 @@
     }
 
     responseControls       = new ArrayList<Control>(0);
-    authFailureID          = 0;
     authFailureReason      = null;
     saslAuthUserEntry      = null;
     userEntryDN            = null;
@@ -401,7 +394,7 @@
       }
 
       setResultCode(ResultCode.INVALID_CREDENTIALS);
-      setAuthFailureReason(de.getMessageID(), de.getErrorMessage());
+      setAuthFailureReason(de.getMessageObject());
     }
     return bindDN;
   }
@@ -498,7 +491,7 @@
   /**
    * {@inheritDoc}
    */
-  public final String getAuthFailureReason()
+  public final Message getAuthFailureReason()
   {
     return authFailureReason;
   }
@@ -506,32 +499,15 @@
   /**
    * {@inheritDoc}
    */
-  public final int getAuthFailureID()
-  {
-    return authFailureID;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public final void setAuthFailureReason(int id, String reason)
+  public final void setAuthFailureReason(Message message)
   {
     if (DirectoryServer.returnBindErrorMessages())
     {
-      appendErrorMessage(reason);
+      appendErrorMessage(message);
     }
     else
     {
-      if (id < 0)
-      {
-        authFailureID = 0;
-      }
-      else
-      {
-        authFailureID = id;
-      }
-
-      authFailureReason = reason;
+      authFailureReason = message;
     }
   }
 
@@ -576,13 +552,13 @@
    */
   @Override()
   public final void disconnectClient(DisconnectReason disconnectReason,
-                                     boolean sendNotification, String message,
-                                     int messageID)
+                                     boolean sendNotification, Message message
+  )
   {
     // Since bind operations can't be cancelled, we don't need to do anything
     // but forward the request on to the client connection.
-    clientConnection.disconnect(disconnectReason, sendNotification, message,
-                                messageID);
+    clientConnection.disconnect(disconnectReason, sendNotification,
+            message);
   }
 
   /**
@@ -625,7 +601,7 @@
     String resultCode = String.valueOf(getResultCode().getIntValue());
 
     String errorMessage;
-    StringBuilder errorMessageBuffer = getErrorMessage();
+    MessageBuilder errorMessageBuffer = getErrorMessage();
     if (errorMessageBuffer == null)
     {
       errorMessage = null;
@@ -713,7 +689,7 @@
   @Override()
   public final CancelResult cancel(CancelRequest cancelRequest)
   {
-    cancelRequest.addResponseMessage(getMessage(MSGID_CANNOT_CANCEL_BIND));
+    cancelRequest.addResponseMessage(ERR_CANNOT_CANCEL_BIND.get());
     return CancelResult.CANNOT_CANCEL;
   }
 
@@ -804,7 +780,7 @@
     clientConnection.setUnauthenticated();
 
     // Abandon any operations that may be in progress for the client.
-    String cancelReason = getMessage(MSGID_CANCELED_BY_BIND_REQUEST);
+    Message cancelReason = INFO_CANCELED_BY_BIND_REQUEST.get();
     CancelRequest cancelRequest = new CancelRequest(true, cancelReason);
     clientConnection.cancelAllOperationsExcept(cancelRequest, getMessageID());
 
@@ -831,8 +807,7 @@
         // result and return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREPARSE_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
+        appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get());
 
         setProcessingStopTime();
 
@@ -974,11 +949,10 @@
    */
   private void updateOperationErrMsgAndResCode()
   {
-    int    msgID   = MSGID_BIND_OPERATION_UNKNOWN_USER;
-    String message = getMessage(msgID, String.valueOf(getBindDN()));
-
+    Message message = ERR_BIND_OPERATION_UNKNOWN_USER.get(
+            String.valueOf(getBindDN()));
     setResultCode(ResultCode.INVALID_CREDENTIALS);
-    setAuthFailureReason(msgID, message);
+    setAuthFailureReason(message);
   }
 
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/BindOperationWrapper.java b/opendj-sdk/opends/src/server/org/opends/server/core/BindOperationWrapper.java
index 970105b..ea77c0c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/BindOperationWrapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/BindOperationWrapper.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 import org.opends.server.protocols.asn1.ASN1OctetString;
@@ -35,6 +36,7 @@
 import org.opends.server.types.Entry;
 
 
+
 /**
  * This abstract class wraps/decorates a given bind operation.
  * This class will be extended by sub-classes to enhance the
@@ -76,15 +78,7 @@
   /**
    * {@inheritDoc}
    */
-  public int getAuthFailureID()
-  {
-    return bind.getAuthFailureID();
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  public String getAuthFailureReason()
+  public Message getAuthFailureReason()
   {
     return bind.getAuthFailureReason();
   }
@@ -164,7 +158,7 @@
   /**
    * {@inheritDoc}
    */
-  public void setAuthFailureReason(int id, String reason)
+  public void setAuthFailureReason(Message reason)
   {
     if (DirectoryServer.returnBindErrorMessages())
     {
@@ -172,7 +166,7 @@
     }
     else
     {
-      bind.setAuthFailureReason(id, reason);
+      bind.setAuthFailureReason(reason);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/CertificateMapperConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/CertificateMapperConfigManager.java
index 102d778..423af81 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/CertificateMapperConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/CertificateMapperConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -46,14 +47,12 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -135,9 +134,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          logError(ie.getMessageObject());
           continue;
         }
       }
@@ -151,7 +148,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       CertificateMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -164,7 +161,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -181,9 +178,9 @@
   public ConfigChangeResult applyConfigurationAdd(
                                  CertificateMapperCfg configuration)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -208,7 +205,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -228,7 +225,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       CertificateMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // certificate mapper is in use.
@@ -243,9 +240,9 @@
   public ConfigChangeResult applyConfigurationDelete(
                                  CertificateMapperCfg configuration)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     DirectoryServer.deregisterCertificateMapper(configuration.dn());
 
@@ -266,7 +263,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       CertificateMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -279,7 +276,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -298,7 +295,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing mapper if it's already enabled.
@@ -354,7 +351,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -413,7 +410,7 @@
                                                     CertificateMapperCfg.class,
                                                     List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(mapper, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -421,7 +418,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -430,10 +427,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_CERTMAPPER_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_CERTMAPPER_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -441,11 +437,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_CERTMAPPER_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_CERTMAPPER_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/CompareOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/CompareOperationBasis.java
index 4c90a69..e40d5cc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/CompareOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/CompareOperationBasis.java
@@ -25,14 +25,14 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.core.CoreConstants.*;
 import static org.opends.server.loggers.AccessLogger.logCompareRequest;
 import static org.opends.server.loggers.AccessLogger.logCompareResponse;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-
+import static org.opends.messages.CoreMessages.*;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -288,16 +288,16 @@
    */
   @Override()
   public final void disconnectClient(DisconnectReason disconnectReason,
-                                     boolean sendNotification, String message,
-                                     int messageID)
+                                     boolean sendNotification, Message message
+  )
   {
     // Before calling clientConnection.disconnect, we need to mark this
     // operation as cancelled so that the attempt to cancel it later won't cause
     // an unnecessary delay.
     setCancelResult(CancelResult.CANCELED);
 
-    clientConnection.disconnect(disconnectReason, sendNotification, message,
-                                messageID);
+    clientConnection.disconnect(disconnectReason, sendNotification,
+            message);
   }
 
 
@@ -332,7 +332,7 @@
     String resultCode = String.valueOf(getResultCode().getIntValue());
 
     String errorMessage;
-    StringBuilder errorMessageBuffer = getErrorMessage();
+    MessageBuilder errorMessageBuffer = getErrorMessage();
     if (errorMessageBuffer == null)
     {
       errorMessage = null;
@@ -489,8 +489,7 @@
         // result and return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREPARSE_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
+        appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get());
 
         setProcessingStopTime();
 
@@ -538,7 +537,7 @@
         }
 
         setResultCode(de.getResultCode());
-        appendErrorMessage(de.getErrorMessage());
+        appendErrorMessage(de.getMessageObject());
 
         break compareProcessing;
       }
@@ -660,7 +659,7 @@
   {
     setResultCode(ResultCode.NO_SUCH_OBJECT);
     appendErrorMessage(
-      getMessage(MSGID_COMPARE_NO_SUCH_ENTRY, String.valueOf(getEntryDN())));
+      ERR_COMPARE_NO_SUCH_ENTRY.get(String.valueOf(getEntryDN())));
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java
index fb8b77c..93adfa7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java
@@ -25,14 +25,15 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.messages.CoreMessages.*;
+
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.lang.reflect.Method;
@@ -97,7 +98,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     // Register as a change listener for this connection handler entry
     // so that we will be notified of any changes that may be made to
@@ -126,7 +127,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        messages.add(e.getMessage());
+        messages.add(e.getMessageObject());
         resultCode = DirectoryServer.getServerErrorResultCode();
       } catch (Exception e) {
         if (debugEnabled())
@@ -134,9 +135,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_CONFIG_CONNHANDLER_CANNOT_INITIALIZE;
-        messages.add(getMessage(msgID, String.valueOf(configuration
-            .getJavaImplementationClass()), String.valueOf(dn),
+
+        messages.add(ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE.get(
+                String.valueOf(configuration.getJavaImplementationClass()),
+                String.valueOf(dn),
             stackTraceToSingleLineString(e)));
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
@@ -162,7 +164,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     // See whether the connection handler should be enabled.
     if (connectionHandler == null) {
@@ -188,7 +190,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          messages.add(e.getMessage());
+          messages.add(e.getMessageObject());
           resultCode = DirectoryServer.getServerErrorResultCode();
         } catch (Exception e) {
           if (debugEnabled())
@@ -196,8 +198,8 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_CONFIG_CONNHANDLER_CANNOT_INITIALIZE;
-          messages.add(getMessage(msgID, String.valueOf(configuration
+          messages.add(ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE.get(
+                  String.valueOf(configuration
               .getJavaImplementationClass()), String.valueOf(dn),
               stackTraceToSingleLineString(e)));
           resultCode = DirectoryServer.getServerErrorResultCode();
@@ -220,9 +222,9 @@
             .deregisterConnectionHandler(connectionHandler);
         connectionHandlers.remove(dn);
 
-        int id = MSGID_CONNHANDLER_CLOSED_BY_DISABLE;
-        connectionHandler.finalizeConnectionHandler(getMessage(id),
-            false);
+
+        connectionHandler.finalizeConnectionHandler(
+                INFO_CONNHANDLER_CLOSED_BY_DISABLE.get(), false);
       }
     }
 
@@ -251,9 +253,9 @@
     if (connectionHandler != null) {
       DirectoryServer.deregisterConnectionHandler(connectionHandler);
 
-      int id = MSGID_CONNHANDLER_CLOSED_BY_DELETE;
-      connectionHandler.finalizeConnectionHandler(getMessage(id),
-          false);
+      connectionHandler.finalizeConnectionHandler(
+              INFO_CONNHANDLER_CLOSED_BY_DELETE.get(),
+              false);
     }
 
     return new ConfigChangeResult(resultCode, adminActionRequired);
@@ -326,7 +328,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       ConnectionHandlerCfg configuration,
-      List<String> unacceptableReasons) {
+      List<Message> unacceptableReasons) {
     if (configuration.isEnabled()) {
       // It's enabled so always validate the class.
       return isJavaClassAcceptable(configuration, unacceptableReasons);
@@ -343,7 +345,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       ConnectionHandlerCfg configuration,
-      List<String> unacceptableReasons) {
+      List<Message> unacceptableReasons) {
     if (configuration.isEnabled()) {
       // It's enabled so always validate the class.
       return isJavaClassAcceptable(configuration, unacceptableReasons);
@@ -360,7 +362,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       ConnectionHandlerCfg configuration,
-      List<String> unacceptableReasons) {
+      List<Message> unacceptableReasons) {
     // A delete should always be acceptable, so just return true.
     return true;
   }
@@ -391,11 +393,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_CONNHANDLER_CANNOT_INITIALIZE;
-      String message = getMessage(msgID, String.valueOf(className),
-          String.valueOf(config.dn()),
-          stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE.
+          get(String.valueOf(className), String.valueOf(config.dn()),
+              stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     }
 
     // Perform the necessary initialization for the connection
@@ -415,11 +416,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_CONNHANDLER_CANNOT_INITIALIZE;
-      String message = getMessage(msgID, String.valueOf(className),
-          String.valueOf(config.dn()),
-          stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE.
+          get(String.valueOf(className), String.valueOf(config.dn()),
+              stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     }
 
     // The connection handler has been successfully initialized.
@@ -433,7 +433,7 @@
   // class is acceptable.
   private boolean isJavaClassAcceptable(
       ConnectionHandlerCfg config,
-      List<String> unacceptableReasons) {
+      List<Message> unacceptableReasons) {
     String className = config.getJavaImplementationClass();
     ConnectionHandlerCfgDefn d =
       ConnectionHandlerCfgDefn.getInstance();
@@ -452,10 +452,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_CONNHANDLER_CANNOT_INITIALIZE;
-      unacceptableReasons.add(getMessage(msgID, String
-          .valueOf(className), String.valueOf(config.dn()),
-          stackTraceToSingleLineString(e)));
+      unacceptableReasons.add(
+              ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE.get(
+                      String.valueOf(className),
+                      String.valueOf(config.dn()),
+                      stackTraceToSingleLineString(e)));
       return false;
     }
 
@@ -481,10 +482,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_CONNHANDLER_CANNOT_INITIALIZE;
-      unacceptableReasons.add(getMessage(msgID, String
-          .valueOf(className), String.valueOf(config.dn()),
-          stackTraceToSingleLineString(e)));
+      unacceptableReasons.add(ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE.get(
+              String.valueOf(className), String.valueOf(config.dn()),
+              stackTraceToSingleLineString(e)));
       return false;
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/CoreConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/CoreConfigManager.java
index c643145..13960ac 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/CoreConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/CoreConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -49,8 +50,8 @@
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.WritabilityMode;
 
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -110,9 +111,8 @@
         int colonPos = server.indexOf(':');
         if ((colonPos == 0) || (colonPos == (server.length()-1)))
         {
-          int    msgID   = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER;
-          String message = getMessage(msgID, server);
-          throw new ConfigException(msgID, message);
+          Message message = ERR_CONFIG_CORE_INVALID_SMTP_SERVER.get(server);
+          throw new ConfigException(message);
         }
         else if (colonPos > 0)
         {
@@ -121,16 +121,14 @@
             int port = Integer.parseInt(server.substring(colonPos+1));
             if ((port < 1) || (port > 65535))
             {
-              int    msgID   = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER;
-              String message = getMessage(msgID, server);
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_CORE_INVALID_SMTP_SERVER.get(server);
+              throw new ConfigException(message);
             }
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER;
-            String message = getMessage(msgID, server);
-            throw new ConfigException(msgID, message, e);
+            Message message = ERR_CONFIG_CORE_INVALID_SMTP_SERVER.get(server);
+            throw new ConfigException(message, e);
           }
         }
       }
@@ -347,7 +345,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(GlobalCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -356,8 +354,8 @@
     PasswordPolicy policy = DirectoryServer.getPasswordPolicy(policyDN);
     if (policy == null)
     {
-      int    msgID   = MSGID_CONFIG_CORE_NO_SUCH_PWPOLICY;
-      String message = getMessage(msgID, String.valueOf(policyDN));
+      Message message = ERR_CONFIG_CORE_NO_SUCH_PWPOLICY.get(
+              String.valueOf(policyDN));
       unacceptableReasons.add(message);
 
       configAcceptable = false;
@@ -368,9 +366,9 @@
     IdentityMapper mapper = DirectoryServer.getIdentityMapper(mapperDN);
     if (mapper == null)
     {
-      int    msgID   = MSGID_CONFIG_CORE_NO_PROXY_MAPPER_FOR_DN;
-      String message = getMessage(msgID, String.valueOf(mapperDN),
-                                  String.valueOf(configuration.dn()));
+      Message message = ERR_CONFIG_CORE_NO_PROXY_MAPPER_FOR_DN.get(
+              String.valueOf(mapperDN),
+              String.valueOf(configuration.dn()));
       unacceptableReasons.add(message);
 
       configAcceptable = false;
@@ -384,8 +382,7 @@
         int colonPos = server.indexOf(':');
         if ((colonPos == 0) || (colonPos == (server.length()-1)))
         {
-          int    msgID   = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER;
-          String message = getMessage(msgID, server);
+          Message message = ERR_CONFIG_CORE_INVALID_SMTP_SERVER.get(server);
           unacceptableReasons.add(message);
           configAcceptable = false;
         }
@@ -396,16 +393,14 @@
             int port = Integer.parseInt(server.substring(colonPos+1));
             if ((port < 1) || (port > 65535))
             {
-              int    msgID   = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER;
-              String message = getMessage(msgID, server);
+              Message message = ERR_CONFIG_CORE_INVALID_SMTP_SERVER.get(server);
               unacceptableReasons.add(message);
               configAcceptable = false;
             }
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_CONFIG_CORE_INVALID_SMTP_SERVER;
-            String message = getMessage(msgID, server);
+            Message message = ERR_CONFIG_CORE_INVALID_SMTP_SERVER.get(server);
             unacceptableReasons.add(message);
             configAcceptable = false;
           }
@@ -423,9 +418,9 @@
    */
   public ConfigChangeResult applyConfigurationChange(GlobalCfg configuration)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     applyGlobalConfiguration(configuration);
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/DeleteOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/DeleteOperationBasis.java
index 32cbaa8..1df9968 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/DeleteOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/DeleteOperationBasis.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import static org.opends.server.core.CoreConstants.LOG_ELEMENT_ENTRY_DN;
@@ -38,8 +39,7 @@
 import static org.opends.server.loggers.AccessLogger.logDeleteResponse;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.StaticUtils.getExceptionMessage;
 
 import java.util.ArrayList;
@@ -61,8 +61,6 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.Operation;
 import org.opends.server.types.OperationType;
 import org.opends.server.types.ResultCode;
@@ -201,7 +199,7 @@
       }
 
       setResultCode(de.getResultCode());
-      appendErrorMessage(de.getErrorMessage());
+      appendErrorMessage(de.getMessageObject());
       setMatchedDN(de.getMatchedDN());
       setReferralURLs(de.getReferralURLs());
     }
@@ -242,16 +240,16 @@
    */
   @Override()
   public final void disconnectClient(DisconnectReason disconnectReason,
-                                     boolean sendNotification, String message,
-                                     int messageID)
+                                     boolean sendNotification, Message message
+  )
   {
     // Before calling clientConnection.disconnect, we need to mark this
     // operation as cancelled so that the attempt to cancel it later won't cause
     // an unnecessary delay.
     setCancelResult(CancelResult.CANCELED);
 
-    clientConnection.disconnect(disconnectReason, sendNotification, message,
-                                messageID);
+    clientConnection.disconnect(disconnectReason, sendNotification,
+            message);
   }
 
 
@@ -282,7 +280,7 @@
     String resultCode = String.valueOf(getResultCode().getIntValue());
 
     String errorMessage;
-    StringBuilder errorMessageBuffer = getErrorMessage();
+    MessageBuilder errorMessageBuffer = getErrorMessage();
     if (errorMessageBuffer == null)
     {
       errorMessage = null;
@@ -493,8 +491,7 @@
         // result and return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREPARSE_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
+        appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get());
 
         setProcessingStopTime();
 
@@ -684,13 +681,9 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int    msgID   = MSGID_DELETE_ERROR_NOTIFYING_PERSISTENT_SEARCH;
-              String message = getMessage(msgID,
-                  String.valueOf(persistentSearch),
-                  getExceptionMessage(e));
-              logError(ErrorLogCategory.CORE_SERVER,
-                  ErrorLogSeverity.SEVERE_ERROR,
-                  message, msgID);
+              Message message = ERR_DELETE_ERROR_NOTIFYING_PERSISTENT_SEARCH.
+                  get(String.valueOf(persistentSearch), getExceptionMessage(e));
+              logError(message);
 
               DirectoryServer.deregisterPersistentSearch(persistentSearch);
             }
@@ -710,8 +703,8 @@
   private void updateOperationErrMsgAndResCode()
   {
     setResultCode(ResultCode.NO_SUCH_OBJECT);
-    appendErrorMessage(getMessage(MSGID_DELETE_NO_SUCH_ENTRY,
-                                  String.valueOf(getEntryDN())));
+    appendErrorMessage(ERR_DELETE_NO_SUCH_ENTRY.get(
+            String.valueOf(getEntryDN())));
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServer.java b/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServer.java
index 918625c..9831ff6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -26,7 +26,176 @@
  */
 package org.opends.server.core;
 
+import com.sleepycat.je.JEVersion;
 
+import org.opends.server.admin.ClassLoaderProvider;
+import org.opends.server.admin.server.ServerManagementContext;
+import org.opends.server.admin.std.server.AlertHandlerCfg;
+import org.opends.server.admin.std.server.AttributeSyntaxCfg;
+import org.opends.server.admin.std.server.ConnectionHandlerCfg;
+import org.opends.server.admin.std.server.DirectoryStringAttributeSyntaxCfg;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
+import org.opends.server.admin.std.server.PasswordValidatorCfg;
+import org.opends.server.admin.std.server.RootCfg;
+import org.opends.server.admin.std.server.RootDSEBackendCfg;
+import org.opends.server.admin.std.server.SynchronizationProviderCfg;
+import org.opends.server.api.AccountStatusNotificationHandler;
+import org.opends.server.api.AlertGenerator;
+import org.opends.server.api.AlertHandler;
+import org.opends.server.api.ApproximateMatchingRule;
+import org.opends.server.api.AttributeSyntax;
+import org.opends.server.api.Backend;
+import org.opends.server.api.BackendInitializationListener;
+import org.opends.server.api.BackupTaskListener;
+import org.opends.server.api.CertificateMapper;
+import org.opends.server.api.ChangeNotificationListener;
+import org.opends.server.api.ClientConnection;
+import org.opends.server.api.ConfigAddListener;
+import org.opends.server.api.ConfigChangeListener;
+import org.opends.server.api.ConfigDeleteListener;
+import org.opends.server.api.ConfigHandler;
+import org.opends.server.api.ConnectionHandler;
+import org.opends.server.api.DirectoryServerMBean;
+import org.opends.server.api.EntryCache;
+import org.opends.server.api.EqualityMatchingRule;
+import org.opends.server.api.ExportTaskListener;
+import org.opends.server.api.ExtendedOperationHandler;
+import org.opends.server.api.IdentityMapper;
+import org.opends.server.api.ImportTaskListener;
+import org.opends.server.api.InvokableComponent;
+import org.opends.server.api.KeyManagerProvider;
+import org.opends.server.api.MatchingRule;
+import org.opends.server.api.MonitorProvider;
+import org.opends.server.api.OrderingMatchingRule;
+import org.opends.server.api.PasswordGenerator;
+import org.opends.server.api.PasswordStorageScheme;
+import org.opends.server.api.PasswordValidator;
+import org.opends.server.api.RestoreTaskListener;
+import org.opends.server.api.SASLMechanismHandler;
+import org.opends.server.api.ServerShutdownListener;
+import org.opends.server.api.SubstringMatchingRule;
+import org.opends.server.api.SynchronizationProvider;
+import org.opends.server.api.TrustManagerProvider;
+import org.opends.server.api.WorkQueue;
+import org.opends.server.api.AccessLogPublisher;
+import org.opends.server.api.ErrorLogPublisher;
+import org.opends.server.api.DebugLogPublisher;
+import org.opends.server.api.plugin.PluginType;
+import org.opends.server.api.plugin.StartupPluginResult;
+import org.opends.server.backends.RootDSEBackend;
+import static org.opends.server.config.ConfigConstants.DN_MONITOR_ROOT;
+import static org.opends.server.config.ConfigConstants.ENV_VAR_INSTANCE_ROOT;
+import org.opends.server.config.ConfigEntry;
+import org.opends.server.config.ConfigException;
+import org.opends.server.config.JMXMBean;
+import org.opends.server.controls.PasswordPolicyErrorType;
+import org.opends.server.controls.PasswordPolicyResponseControl;
+import org.opends.server.extensions.ConfigFileHandler;
+import org.opends.server.extensions.JMXAlertHandler;
+import static org.opends.server.loggers.AccessLogger.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import org.opends.server.loggers.RetentionPolicy;
+import org.opends.server.loggers.RotationPolicy;
+import org.opends.server.loggers.TextErrorLogPublisher;
+import org.opends.server.loggers.TextWriter;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.loggers.debug.TextDebugLogPublisher;
+
+import org.opends.messages.MessageDescriptor;
+import org.opends.messages.Message;
+import static org.opends.messages.CoreMessages.*;
+import org.opends.server.monitors.BackendMonitor;
+import org.opends.server.monitors.ConnectionHandlerMonitor;
+import org.opends.server.schema.AttributeTypeSyntax;
+import org.opends.server.schema.BinarySyntax;
+import org.opends.server.schema.BooleanEqualityMatchingRule;
+import org.opends.server.schema.BooleanSyntax;
+import org.opends.server.schema.CaseExactEqualityMatchingRule;
+import org.opends.server.schema.CaseExactIA5EqualityMatchingRule;
+import org.opends.server.schema.CaseExactIA5SubstringMatchingRule;
+import org.opends.server.schema.CaseExactOrderingMatchingRule;
+import org.opends.server.schema.CaseExactSubstringMatchingRule;
+import org.opends.server.schema.CaseIgnoreEqualityMatchingRule;
+import org.opends.server.schema.CaseIgnoreIA5EqualityMatchingRule;
+import org.opends.server.schema.CaseIgnoreIA5SubstringMatchingRule;
+import org.opends.server.schema.CaseIgnoreOrderingMatchingRule;
+import org.opends.server.schema.CaseIgnoreSubstringMatchingRule;
+import org.opends.server.schema.DirectoryStringSyntax;
+import org.opends.server.schema.DistinguishedNameEqualityMatchingRule;
+import org.opends.server.schema.DistinguishedNameSyntax;
+import org.opends.server.schema.DoubleMetaphoneApproximateMatchingRule;
+import org.opends.server.schema.GeneralizedTimeEqualityMatchingRule;
+import org.opends.server.schema.GeneralizedTimeOrderingMatchingRule;
+import org.opends.server.schema.GeneralizedTimeSyntax;
+import org.opends.server.schema.IA5StringSyntax;
+import org.opends.server.schema.IntegerEqualityMatchingRule;
+import org.opends.server.schema.IntegerOrderingMatchingRule;
+import org.opends.server.schema.IntegerSyntax;
+import org.opends.server.schema.OIDSyntax;
+import org.opends.server.schema.ObjectClassSyntax;
+import org.opends.server.schema.ObjectIdentifierEqualityMatchingRule;
+import org.opends.server.schema.OctetStringEqualityMatchingRule;
+import org.opends.server.schema.OctetStringOrderingMatchingRule;
+import org.opends.server.schema.OctetStringSubstringMatchingRule;
+import static org.opends.server.schema.SchemaConstants.*;
+import org.opends.server.schema.TelephoneNumberEqualityMatchingRule;
+import org.opends.server.schema.TelephoneNumberSubstringMatchingRule;
+import org.opends.server.schema.TelephoneNumberSyntax;
+import org.opends.server.tools.ConfigureWindowsService;
+import org.opends.server.types.AbstractOperation;
+import org.opends.server.types.AcceptRejectWarn;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.AttributeUsage;
+import org.opends.server.types.AttributeValue;
+import org.opends.server.types.BackupConfig;
+import org.opends.server.types.Control;
+import org.opends.server.types.CryptoManager;
+import org.opends.server.types.DITContentRule;
+import org.opends.server.types.DITStructureRule;
+import org.opends.server.types.DN;
+import org.opends.server.types.DebugLogLevel;
+import org.opends.server.types.DirectoryException;
+import org.opends.server.types.Entry;
+import org.opends.server.types.HostPort;
+import org.opends.server.types.InitializationException;
+import org.opends.server.types.LDIFExportConfig;
+import org.opends.server.types.LDIFImportConfig;
+import org.opends.server.types.MatchingRuleUse;
+import org.opends.server.types.Modification;
+import org.opends.server.types.NameForm;
+import org.opends.server.types.ObjectClass;
+import org.opends.server.types.ObjectClassType;
+import org.opends.server.types.OperatingSystem;
+import org.opends.server.types.OperationType;
+import org.opends.server.types.Privilege;
+import org.opends.server.types.RDN;
+import org.opends.server.types.RestoreConfig;
+import org.opends.server.types.ResultCode;
+import org.opends.server.types.Schema;
+import org.opends.server.types.VirtualAttributeRule;
+import org.opends.server.types.WritabilityMode;
+import org.opends.server.types.DirectoryEnvironmentConfig;
+import org.opends.server.types.LockManager;
+import static org.opends.server.util.DynamicConstants.*;
+import org.opends.server.util.MultiOutputStream;
+import static org.opends.server.util.ServerConstants.*;
+import org.opends.server.util.SetupUtils;
+import org.opends.server.util.StaticUtils;
+import static org.opends.server.util.StaticUtils.*;
+import org.opends.server.util.TimeThread;
+import org.opends.server.util.Validator;
+import static org.opends.server.util.Validator.ensureNotNull;
+import org.opends.server.util.VersionCompatibilityIssue;
+import org.opends.server.util.args.ArgumentException;
+import org.opends.server.util.args.ArgumentParser;
+import org.opends.server.util.args.BooleanArgument;
+import org.opends.server.util.args.StringArgument;
+import org.opends.server.workflowelement.*;
+import org.opends.server.workflowelement.localbackend.*;
+
+import javax.management.MBeanServer;
+import javax.management.MBeanServerFactory;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -47,68 +216,6 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CopyOnWriteArraySet;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerFactory;
-
-import org.opends.server.admin.ClassLoaderProvider;
-import org.opends.server.admin.server.ServerManagementContext;
-import org.opends.server.admin.std.server.AlertHandlerCfg;
-import org.opends.server.admin.std.server.AttributeSyntaxCfg;
-import org.opends.server.admin.std.server.ConnectionHandlerCfg;
-import org.opends.server.admin.std.server.DirectoryStringAttributeSyntaxCfg;
-import org.opends.server.admin.std.server.MonitorProviderCfg;
-import org.opends.server.admin.std.server.PasswordValidatorCfg;
-import org.opends.server.admin.std.server.SynchronizationProviderCfg;
-import org.opends.server.admin.std.server.RootDSEBackendCfg;
-import org.opends.server.admin.std.server.RootCfg;
-import org.opends.server.api.*;
-import org.opends.server.api.plugin.PluginType;
-import org.opends.server.api.plugin.StartupPluginResult;
-import org.opends.server.backends.RootDSEBackend;
-import org.opends.server.config.ConfigEntry;
-import org.opends.server.config.ConfigException;
-import org.opends.server.config.JMXMBean;
-import org.opends.server.controls.PasswordPolicyErrorType;
-import org.opends.server.controls.PasswordPolicyResponseControl;
-import org.opends.server.extensions.ConfigFileHandler;
-import org.opends.server.extensions.JMXAlertHandler;
-import org.opends.server.loggers.TextErrorLogPublisher;
-import org.opends.server.loggers.TextWriter;
-import org.opends.server.loggers.RetentionPolicy;
-import org.opends.server.loggers.RotationPolicy;
-import org.opends.server.monitors.BackendMonitor;
-import org.opends.server.monitors.ConnectionHandlerMonitor;
-import org.opends.server.schema.*;
-import org.opends.server.tools.ConfigureWindowsService;
-import org.opends.server.types.*;
-import org.opends.server.util.MultiOutputStream;
-import org.opends.server.util.SetupUtils;
-import org.opends.server.util.TimeThread;
-import org.opends.server.util.Validator;
-import org.opends.server.util.VersionCompatibilityIssue;
-import org.opends.server.util.StaticUtils;
-import org.opends.server.util.args.ArgumentException;
-import org.opends.server.util.args.ArgumentParser;
-import org.opends.server.util.args.BooleanArgument;
-import org.opends.server.util.args.StringArgument;
-
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.AccessLogger.*;
-import org.opends.server.loggers.debug.TextDebugLogPublisher;
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.schema.SchemaConstants.*;
-import static org.opends.server.util.DynamicConstants.*;
-import static org.opends.server.util.ServerConstants.*;
-import static org.opends.server.util.StaticUtils.*;
-import static org.opends.server.util.Validator.*;
-import com.sleepycat.je.JEVersion;
-import org.opends.server.workflowelement.WorkflowElement;
-import org.opends.server.workflowelement.localbackend.*;
-
 
 
 /**
@@ -689,9 +796,8 @@
   {
     if (isRunning)
     {
-      int    msgID   = MSGID_CANNOT_SET_ENVIRONMENT_CONFIG_WHILE_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_CANNOT_SET_ENVIRONMENT_CONFIG_WHILE_RUNNING.get());
     }
 
     environmentConfig = config;
@@ -831,9 +937,8 @@
     {
       if (isRunning)
       {
-        int    msgID   = MSGID_CANNOT_BOOTSTRAP_WHILE_RUNNING;
-        String message = getMessage(msgID);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_CANNOT_BOOTSTRAP_WHILE_RUNNING.get();
+        throw new InitializationException(message);
       }
 
       isBootstrapped   = false;
@@ -883,10 +988,7 @@
     initializeJMX();
 
 
-    logError(ErrorLogCategory.STARTUP, ErrorLogSeverity.INFORMATIONAL,
-             MSGID_DIRECTORY_BOOTSTRAPPING, getVersionString());
-    logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.INFORMATIONAL,
-             MSGID_DIRECTORY_BOOTSTRAPPING, getVersionString());
+    logError(INFO_DIRECTORY_BOOTSTRAPPING.get());
 
 
     // Perform all the bootstrapping that is shared with the client-side
@@ -945,9 +1047,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_CREATE_MBEAN_SERVER;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CANNOT_CREATE_MBEAN_SERVER.get(String.valueOf(e));
+      throw new InitializationException(message, e);
     }
   }
 
@@ -983,10 +1084,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_LOAD_CONFIG_HANDLER_CLASS;
-      String message = getMessage(msgID, configClass,
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_CANNOT_LOAD_CONFIG_HANDLER_CLASS.get(
+                  configClass, stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
 
     File cfgFile = new File(configFile);
@@ -1033,9 +1134,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_INSTANTIATE_CONFIG_HANDLER;
-      String message = getMessage(msgID, configClass, e);
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_CANNOT_INSTANTIATE_CONFIG_HANDLER.get(
+                  String.valueOf(configClass),
+                  e.getLocalizedMessage());
+      throw new InitializationException(message, e);
     }
 
 
@@ -1061,9 +1164,12 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_INITIALIZE_CONFIG_HANDLER;
-      String message = getMessage(msgID, configClass, configFile, e);
-      throw new InitializationException(msgID, message);
+      Message message =
+          ERR_CANNOT_INITIALIZE_CONFIG_HANDLER.get(
+                  String.valueOf(configClass),
+                  String.valueOf(configFile),
+                  e.getLocalizedMessage());
+      throw new InitializationException(message);
     }
   }
 
@@ -1102,21 +1208,18 @@
     {
       if (! isBootstrapped)
       {
-        int    msgID   = MSGID_CANNOT_START_BEFORE_BOOTSTRAP;
-        String message = getMessage(msgID);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_CANNOT_START_BEFORE_BOOTSTRAP.get();
+        throw new InitializationException(message);
       }
 
       if (isRunning)
       {
-        int    msgID   = MSGID_CANNOT_START_WHILE_RUNNING;
-        String message = getMessage(msgID);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_CANNOT_START_WHILE_RUNNING.get();
+        throw new InitializationException(message);
       }
 
 
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.NOTICE,
-               MSGID_DIRECTORY_SERVER_STARTING, getVersionString());
+      logError(NOTE_DIRECTORY_SERVER_STARTING.get(getVersionString()));
 
 
       // Acquire an exclusive lock for the Directory Server process.
@@ -1128,10 +1231,9 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
           {
-            int    msgID   = MSGID_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK;
-            String message = getMessage(msgID, lockFile,
-                                        String.valueOf(failureReason));
-            throw new InitializationException(msgID, message);
+            Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(
+                lockFile, String.valueOf(failureReason));
+            throw new InitializationException(message);
           }
 
           serverLocked = true;
@@ -1147,10 +1249,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK;
-          String message = getMessage(msgID, lockFile,
-                                      stackTraceToSingleLineString(e));
-          throw new InitializationException(msgID, message, e);
+          Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(
+              lockFile, stackTraceToSingleLineString(e));
+          throw new InitializationException(message, e);
         }
       }
 
@@ -1296,11 +1397,10 @@
            pluginConfigManager.invokeStartupPlugins();
       if (! startupPluginResult.continueStartup())
       {
-        int    msgID   = MSGID_STARTUP_PLUGIN_ERROR;
-        String message = getMessage(msgID,
-                                    startupPluginResult.getErrorMessage(),
-                                    startupPluginResult.getErrorID());
-        throw new InitializationException(msgID, message);
+        Message message = ERR_STARTUP_PLUGIN_ERROR.
+            get(startupPluginResult.getErrorMessage(),
+                startupPluginResult.getErrorMessage().getDescriptor().getId());
+        throw new InitializationException(message);
       }
 
 
@@ -1317,11 +1417,9 @@
       startTimeUTC = TimeThread.getGMTTime();
       isRunning    = true;
 
-      int    msgID   = MSGID_DIRECTORY_SERVER_STARTED;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.NOTICE, message,
-               msgID);
-      sendAlertNotification(this, ALERT_TYPE_SERVER_STARTED, msgID, message);
+      Message message = NOTE_DIRECTORY_SERVER_STARTED.get();
+      logError(message);
+      sendAlertNotification(this, ALERT_TYPE_SERVER_STARTED, message);
 
 
       if (startupDebugLogPublisher != null)
@@ -1369,12 +1467,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                  DoubleMetaphoneApproximateMatchingRule.class.getName(),
-                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(DoubleMetaphoneApproximateMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1391,12 +1487,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                                  BooleanEqualityMatchingRule.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(BooleanEqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1413,12 +1507,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                                  CaseExactEqualityMatchingRule.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(CaseExactEqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1436,12 +1528,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message =
-           getMessage(msgID, CaseExactIA5EqualityMatchingRule.class.getName(),
-                      stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(CaseExactIA5EqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1458,12 +1548,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                            CaseIgnoreEqualityMatchingRule.class.getName(),
-                            stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(CaseIgnoreEqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1481,12 +1569,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message =
-           getMessage(msgID, CaseIgnoreIA5EqualityMatchingRule.class.getName(),
-                      stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(CaseIgnoreIA5EqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1504,12 +1590,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                  DistinguishedNameEqualityMatchingRule.class.getName(),
-                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(DistinguishedNameEqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1527,12 +1611,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                  GeneralizedTimeEqualityMatchingRule.class.getName(),
-                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(GeneralizedTimeEqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1549,12 +1631,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                                  IntegerEqualityMatchingRule.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(IntegerEqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1571,12 +1651,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                            OctetStringEqualityMatchingRule.class.getName(),
-                            stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(OctetStringEqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1594,13 +1672,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message =
-           getMessage(msgID,
-                      ObjectIdentifierEqualityMatchingRule.class.getName(),
-                      stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(ObjectIdentifierEqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1618,13 +1693,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message =
-           getMessage(msgID,
-                      TelephoneNumberEqualityMatchingRule.class.getName(),
-                      stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(TelephoneNumberEqualityMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1641,12 +1713,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                                  CaseExactOrderingMatchingRule.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(CaseExactOrderingMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1663,12 +1733,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                            CaseIgnoreOrderingMatchingRule.class.getName(),
-                            stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(CaseIgnoreOrderingMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1686,12 +1754,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                            GeneralizedTimeOrderingMatchingRule.class.getName(),
-                            stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(GeneralizedTimeOrderingMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1708,12 +1774,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                                  IntegerOrderingMatchingRule.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(IntegerOrderingMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1730,12 +1794,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                            OctetStringOrderingMatchingRule.class.getName(),
-                            stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(OctetStringOrderingMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1752,12 +1814,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                            CaseExactSubstringMatchingRule.class.getName(),
-                            stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(CaseExactSubstringMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1775,12 +1835,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message =
-           getMessage(msgID, CaseExactIA5SubstringMatchingRule.class.getName(),
-                      stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(CaseExactIA5SubstringMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1798,12 +1856,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                            CaseIgnoreSubstringMatchingRule.class.getName(),
-                            stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(CaseIgnoreSubstringMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1821,12 +1877,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                            CaseIgnoreIA5SubstringMatchingRule.class.getName(),
-                            stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(CaseIgnoreIA5SubstringMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1844,12 +1898,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message = getMessage(msgID,
-                            OctetStringSubstringMatchingRule.class.getName(),
-                            stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(OctetStringSubstringMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1867,13 +1919,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE;
-      String message =
-           getMessage(msgID,
-                      TelephoneNumberSubstringMatchingRule.class.getName(),
-                      stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+          get(TelephoneNumberSubstringMatchingRule.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
   }
 
@@ -1899,11 +1948,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID, AttributeTypeSyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.get(
+          AttributeTypeSyntax.class.getName(), stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1920,11 +1967,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID, BinarySyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.get(
+          BinarySyntax.class.getName(), stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1941,11 +1986,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID, BooleanSyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.get(
+          BooleanSyntax.class.getName(), stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1963,11 +2006,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID, DirectoryStringSyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.
+          get(DirectoryStringSyntax.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -1984,12 +2026,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID,
-                                  DistinguishedNameSyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.
+          get(DistinguishedNameSyntax.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -2006,11 +2046,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID, IA5StringSyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.get(
+          IA5StringSyntax.class.getName(), stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -2027,11 +2065,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID, IntegerSyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.get(
+          IntegerSyntax.class.getName(), stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -2048,11 +2084,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID, GeneralizedTimeSyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.
+          get(GeneralizedTimeSyntax.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -2069,11 +2104,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID, ObjectClassSyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.get(
+          ObjectClassSyntax.class.getName(), stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -2090,11 +2123,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID, OIDSyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.get(
+          OIDSyntax.class.getName(), stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
@@ -2111,11 +2142,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_BOOTSTRAP_SYNTAX;
-      String message = getMessage(msgID, TelephoneNumberSyntax.class.getName(),
-                                  stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_BOOTSTRAP_SYNTAX.
+          get(TelephoneNumberSyntax.class.getName(),
+              stackTraceToSingleLineString(e));
+      logError(message);
     }
   }
 
@@ -2300,9 +2330,12 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_INITIALIZE_CONFIG_HANDLER;
-      String message = getMessage(msgID, configClass, configFile, e);
-      throw new InitializationException(msgID, message);
+      Message message =
+          ERR_CANNOT_INITIALIZE_CONFIG_HANDLER.get(
+                  String.valueOf(configClass),
+                  String.valueOf(configFile),
+                  e.getLocalizedMessage());
+      throw new InitializationException(message);
     }
 
 
@@ -2320,8 +2353,7 @@
       catch (DirectoryException de)
       {
         // This should never happen, so we'll just re-throw it.
-        throw new InitializationException(de.getMessageID(),
-                                          de.getErrorMessage());
+        throw new InitializationException(de.getMessageObject());
       }
     }
 
@@ -2338,8 +2370,7 @@
       catch (DirectoryException de)
       {
         // This should never happen, so we'll just re-throw it.
-        throw new InitializationException(de.getMessageID(),
-                                          de.getErrorMessage());
+        throw new InitializationException(de.getMessageObject());
       }
     }
 
@@ -2356,8 +2387,7 @@
       catch (DirectoryException de)
       {
         // This should never happen, so we'll just re-throw it.
-        throw new InitializationException(de.getMessageID(),
-                                          de.getErrorMessage());
+        throw new InitializationException(de.getMessageObject());
       }
     }
   }
@@ -2491,9 +2521,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_GET_ROOT_DSE_CONFIG_ENTRY;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CANNOT_GET_ROOT_DSE_CONFIG_ENTRY.get(
+          stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
 
     rootDSEBackend = new RootDSEBackend();
@@ -2615,7 +2645,7 @@
     }
     catch (DirectoryException de)
     {
-      throw new ConfigException(de.getMessageID(), de.getErrorMessage());
+      throw new ConfigException(de.getMessageObject());
     }
   }
 
@@ -4655,14 +4685,11 @@
    *
    * @param  generator     The alert generator that created the alert.
    * @param  alertType     The alert type name for this alert.
-   * @param  alertID       The alert ID that uniquely identifies the type of
-   *                       alert.
    * @param  alertMessage  A message (possibly <CODE>null</CODE>) that can
-   *                       provide more information about this alert.
    */
   public static void sendAlertNotification(AlertGenerator generator,
-                                           String alertType, int alertID,
-                                           String alertMessage)
+                                           String alertType,
+                                           Message alertMessage)
   {
     if ((directoryServer.alertHandlers == null) ||
         directoryServer.alertHandlers.isEmpty())
@@ -4675,7 +4702,7 @@
         {
           JMXAlertHandler alertHandler = new JMXAlertHandler();
           alertHandler.initializeAlertHandler(null);
-          alertHandler.sendAlertNotification(generator, alertType, alertID,
+          alertHandler.sendAlertNotification(generator, alertType,
                                              alertMessage);
         }
         catch (Exception e)
@@ -4716,17 +4743,18 @@
           }
         }
 
-        alertHandler.sendAlertNotification(generator, alertType, alertID,
-                                           alertMessage);
+        alertHandler.sendAlertNotification(generator, alertType, alertMessage);
       }
     }
 
 
-    int msgID = MSGID_SENT_ALERT_NOTIFICATION;
-    String message = getMessage(msgID, generator.getClassName(), alertType,
-                                alertID, alertMessage);
-    logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.NOTICE,
-             message, msgID);
+    Message message = NOTE_SENT_ALERT_NOTIFICATION.get(
+        generator.getClassName(), alertType,
+            alertMessage != null ?
+                    String.valueOf(alertMessage.getDescriptor().getId()) :
+                    String.valueOf(MessageDescriptor.NULL_ID),
+            alertMessage);
+    logError(message);
   }
 
 
@@ -5743,11 +5771,10 @@
     if ((existingRootEntryDN != null) &&
         (! existingRootEntryDN.equals(actualRootEntryDN)))
     {
-      int   msgID    = MSGID_CANNOT_REGISTER_DUPLICATE_ALTERNATE_ROOT_BIND_DN;
-      String message = getMessage(msgID, String.valueOf(alternateRootBindDN),
-                                  String.valueOf(existingRootEntryDN));
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_CANNOT_REGISTER_DUPLICATE_ALTERNATE_ROOT_BIND_DN.
+          get(String.valueOf(alternateRootBindDN),
+              String.valueOf(existingRootEntryDN));
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
   }
 
@@ -6059,10 +6086,8 @@
           new TreeMap<String, Backend>(directoryServer.backends);
       if (newBackends.containsKey(backendID))
       {
-        int msgID = MSGID_REGISTER_BACKEND_ALREADY_EXISTS;
-        String message = getMessage(msgID, backendID);
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_REGISTER_BACKEND_ALREADY_EXISTS.get(backendID);
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else
       {
@@ -6273,12 +6298,10 @@
       Backend existingBackend = newBaseDNs.get(baseDN);
       if (existingBackend != null)
       {
-        int    msgID   = MSGID_REGISTER_BASEDN_ALREADY_EXISTS;
-        String message = getMessage(msgID, String.valueOf(baseDN),
-                                    backend.getBackendID(),
-                                    existingBackend.getBackendID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_REGISTER_BASEDN_ALREADY_EXISTS.
+            get(String.valueOf(baseDN), backend.getBackendID(),
+                existingBackend.getBackendID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
 
@@ -6295,12 +6318,11 @@
 
           if (baseDN.isAncestorOf(dn) || baseDN.isDescendantOf(dn))
           {
-            int    msgID   = MSGID_REGISTER_BASEDN_HIERARCHY_CONFLICT;
-            String message = getMessage(msgID, String.valueOf(baseDN),
-                                        backend.getBackendID(),
-                                        String.valueOf(dn));
+            Message message = ERR_REGISTER_BASEDN_HIERARCHY_CONFLICT.
+                get(String.valueOf(baseDN), backend.getBackendID(),
+                    String.valueOf(dn));
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
         }
       }
@@ -6323,12 +6345,11 @@
           {
             if (! dn.isDescendantOf(superiorBaseDN))
             {
-              int    msgID   = MSGID_REGISTER_BASEDN_DIFFERENT_PARENT_BASES;
-              String message = getMessage(msgID, String.valueOf(baseDN),
-                                          backend.getBackendID(),
-                                          String.valueOf(dn));
+              Message message = ERR_REGISTER_BASEDN_DIFFERENT_PARENT_BASES.
+                  get(String.valueOf(baseDN), backend.getBackendID(),
+                      String.valueOf(dn));
               throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                           message, msgID);
+                                           message);
             }
           }
 
@@ -6342,12 +6363,11 @@
       {
         if (backend.getParentBackend() != null)
         {
-          int    msgID   = MSGID_REGISTER_BASEDN_NEW_BASE_NOT_SUBORDINATE;
-          String message = getMessage(msgID, String.valueOf(baseDN),
-                                backend.getBackendID(),
-                                backend.getParentBackend().getBackendID());
+          Message message = ERR_REGISTER_BASEDN_NEW_BASE_NOT_SUBORDINATE.
+              get(String.valueOf(baseDN), backend.getBackendID(),
+                  backend.getParentBackend().getBackendID());
           throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                       message, msgID);
+                                       message);
         }
       }
 
@@ -6395,12 +6415,10 @@
         {
           if (superiorBackend.entryExists(baseDN))
           {
-            int    msgID   = MSGID_REGISTER_BASEDN_ENTRIES_IN_MULTIPLE_BACKENDS;
-            String message = getMessage(msgID, superiorBackend.getBackendID(),
-                                        String.valueOf(baseDN),
-                                        backend.getBackendID());
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            Message message = WARN_REGISTER_BASEDN_ENTRIES_IN_MULTIPLE_BACKENDS.
+                get(superiorBackend.getBackendID(), String.valueOf(baseDN),
+                    backend.getBackendID());
+            logError(message);
           }
         }
 
@@ -6485,10 +6503,9 @@
       Backend backend = newBaseDNs.get(baseDN);
       if (backend == null)
       {
-        int    msgID   = MSGID_DEREGISTER_BASEDN_NOT_REGISTERED;
-        String message = getMessage(msgID, String.valueOf(baseDN));
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message =
+            ERR_DEREGISTER_BASEDN_NOT_REGISTERED.get(String.valueOf(baseDN));
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
 
@@ -6577,11 +6594,9 @@
           // because some of the structural entries will be missing.
           if (! subordinateBackends.isEmpty())
           {
-            int    msgID   = MSGID_DEREGISTER_BASEDN_MISSING_HIERARCHY;
-            String message = getMessage(msgID, String.valueOf(baseDN),
-                                        backend.getBackendID());
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            Message message = WARN_DEREGISTER_BASEDN_MISSING_HIERARCHY.get(
+                String.valueOf(baseDN), backend.getBackendID());
+            logError(message);
 
             for (Backend b : subordinateBackends)
             {
@@ -7210,7 +7225,7 @@
   private void startConnectionHandlers() throws ConfigException
   {
     LinkedHashSet<HostPort> usedListeners = new LinkedHashSet<HostPort>();
-    LinkedHashSet<String> errorMessages = new LinkedHashSet<String>();
+    LinkedHashSet<Message> errorMessages = new LinkedHashSet<Message>();
     // Check that the port specified in the connection handlers is
     // available.
     for (ConnectionHandler<?> c : connectionHandlers)
@@ -7221,11 +7236,9 @@
         {
           // The port was already specified: this is a configuration error,
           // log a message.
-          int msgID = MSGID_HOST_PORT_ALREADY_SPECIFIED;
-          String message = getMessage(msgID, c.getConnectionHandlerName(),
-              listener.toString());
-          logError(ErrorLogCategory.CONNECTION_HANDLING,
-              ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+          Message message = ERR_HOST_PORT_ALREADY_SPECIFIED.get(
+              c.getConnectionHandlerName(), listener.toString());
+          logError(message);
           errorMessages.add(message);
 
         }
@@ -7238,20 +7251,16 @@
 
     if (errorMessages.size() > 0)
     {
-      throw new ConfigException(MSGID_ERROR_STARTING_CONNECTION_HANDLERS,
-          getMessage(MSGID_ERROR_STARTING_CONNECTION_HANDLERS));
+      throw new ConfigException(ERR_ERROR_STARTING_CONNECTION_HANDLERS.get());
     }
 
 
     // If there are no connection handlers log a message.
     if (connectionHandlers.isEmpty())
     {
-      int msgID = MSGID_NOT_AVAILABLE_CONNECTION_HANDLERS;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.CONNECTION_HANDLING,
-          ErrorLogSeverity.SEVERE_ERROR, message, msgID);
-      throw new ConfigException(MSGID_ERROR_STARTING_CONNECTION_HANDLERS,
-          getMessage(MSGID_ERROR_STARTING_CONNECTION_HANDLERS));
+      Message message = ERR_NOT_AVAILABLE_CONNECTION_HANDLERS.get();
+      logError(message);
+      throw new ConfigException(ERR_ERROR_STARTING_CONNECTION_HANDLERS.get());
     }
 
     // At this point, we should be ready to go.  Start all the connection
@@ -7292,10 +7301,8 @@
     if (clientConnection.bindInProgress() &&
         (operation.getOperationType() != OperationType.BIND))
     {
-      int    msgID   = MSGID_ENQUEUE_BIND_IN_PROGRESS;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_ENQUEUE_BIND_IN_PROGRESS.get();
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
 
@@ -7315,17 +7322,15 @@
         case MODIFY_DN:
           if (directoryServer.lockdownMode)
           {
-            int msgID = MSGID_REJECT_OPERATION_IN_LOCKDOWN_MODE;
-            String message = getMessage(msgID);
+            Message message = NOTE_REJECT_OPERATION_IN_LOCKDOWN_MODE.get();
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
           else
           {
-            int msgID = MSGID_REJECT_UNAUTHENTICATED_OPERATION;
-            String message = getMessage(msgID);
+            Message message = ERR_REJECT_UNAUTHENTICATED_OPERATION.get();
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
 
         case EXTENDED:
@@ -7336,17 +7341,15 @@
          {
            if (directoryServer.lockdownMode)
            {
-             int msgID = MSGID_REJECT_OPERATION_IN_LOCKDOWN_MODE;
-             String message = getMessage(msgID);
+             Message message = NOTE_REJECT_OPERATION_IN_LOCKDOWN_MODE.get();
              throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                          message, msgID);
+                                          message);
            }
            else
            {
-             int msgID = MSGID_REJECT_UNAUTHENTICATED_OPERATION;
-             String message = getMessage(msgID);
+             Message message = ERR_REJECT_UNAUTHENTICATED_OPERATION.get();
              throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                          message, msgID);
+                                          message);
            }
          }
          break;
@@ -7380,10 +7383,9 @@
             }
           }
 
-          int    msgID   = MSGID_ENQUEUE_MUST_CHANGE_PASSWORD;
-          String message = getMessage(msgID);
-          throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                       msgID);
+          Message message = ERR_ENQUEUE_MUST_CHANGE_PASSWORD.get();
+          throw new DirectoryException(
+                  ResultCode.CONSTRAINT_VIOLATION, message);
 
         case EXTENDED:
           // We will only allow the password modify and StartTLS extended
@@ -7406,10 +7408,9 @@
               }
             }
 
-            msgID   = MSGID_ENQUEUE_MUST_CHANGE_PASSWORD;
-            message = getMessage(msgID);
+            message = ERR_ENQUEUE_MUST_CHANGE_PASSWORD.get();
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
 
           break;
@@ -8061,7 +8062,7 @@
    * @param  reason     The human-readable reason that the directory server is
    *                    shutting down.
    */
-  public static void shutDown(String className, String reason)
+  public static void shutDown(String className, Message reason)
   {
     synchronized (directoryServer)
     {
@@ -8077,10 +8078,9 @@
 
 
     // Send an alert notification that the server is shutting down.
-    int    msgID   = MSGID_SERVER_SHUTDOWN;
-    String message = getMessage(msgID, className, reason);
-    sendAlertNotification(directoryServer, ALERT_TYPE_SERVER_SHUTDOWN, msgID,
-                          message);
+    Message message = NOTE_SERVER_SHUTDOWN.get(className, reason);
+    sendAlertNotification(directoryServer, ALERT_TYPE_SERVER_SHUTDOWN,
+            message);
 
 
     // Create a shutdown monitor that will watch the rest of the shutdown
@@ -8094,8 +8094,9 @@
     {
       try
       {
-        int id = MSGID_CONNHANDLER_CLOSED_BY_SHUTDOWN;
-        handler.finalizeConnectionHandler(getMessage(id), true);
+
+        handler.finalizeConnectionHandler(
+                INFO_CONNHANDLER_CLOSED_BY_SHUTDOWN.get(), true);
       }
       catch (Exception e)
       {
@@ -8284,11 +8285,9 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.releaseLock(lockFile, failureReason))
           {
-            msgID   = MSGID_SHUTDOWN_CANNOT_RELEASE_SHARED_BACKEND_LOCK;
-            message = getMessage(msgID, backend.getBackendID(),
-                                 String.valueOf(failureReason));
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            message = WARN_SHUTDOWN_CANNOT_RELEASE_SHARED_BACKEND_LOCK.
+                get(backend.getBackendID(), String.valueOf(failureReason));
+            logError(message);
             // FIXME -- Do we need to send an admin alert?
           }
 
@@ -8301,11 +8300,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e2);
           }
 
-          msgID = MSGID_SHUTDOWN_CANNOT_RELEASE_SHARED_BACKEND_LOCK;
-          message = getMessage(msgID, backend.getBackendID(),
-                               stackTraceToSingleLineString(e2));
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          message = WARN_SHUTDOWN_CANNOT_RELEASE_SHARED_BACKEND_LOCK.
+              get(backend.getBackendID(), stackTraceToSingleLineString(e2));
+          logError(message);
           // FIXME -- Do we need to send an admin alert?
         }
       }
@@ -8328,10 +8325,9 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        msgID   = MSGID_CANNOT_RELEASE_EXCLUSIVE_SERVER_LOCK;
-        message = getMessage(msgID, lockFile, String.valueOf(failureReason));
-        logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        message = WARN_CANNOT_RELEASE_EXCLUSIVE_SERVER_LOCK.get(
+            lockFile, String.valueOf(failureReason));
+        logError(message);
       }
     }
     catch (Exception e)
@@ -8341,18 +8337,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID   = MSGID_CANNOT_RELEASE_EXCLUSIVE_SERVER_LOCK;
-      message = getMessage(msgID, lockFile, stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_WARNING,
-               message, msgID);
+      message = WARN_CANNOT_RELEASE_EXCLUSIVE_SERVER_LOCK.get(
+          lockFile, stackTraceToSingleLineString(e));
+      logError(message);
     }
 
 
     // Log a final message indicating that the server is stopped (which should
     // be true for all practical purposes), and then shut down all the error
     // loggers.
-    logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.NOTICE,
-             MSGID_SERVER_STOPPED);
+    logError(NOTE_SERVER_STOPPED.get());
 
     removeAllAccessLogPublishers();
     removeAllErrorLogPublishers();
@@ -8379,7 +8373,7 @@
    * @param  reason     The human-readable reason that the directory server is
    *                    shutting down.
    */
-  public static void restart(String className, String reason)
+  public static void restart(String className, Message reason)
   {
     restart(className, reason, directoryServer.environmentConfig);
   }
@@ -8397,7 +8391,7 @@
    *                    shutting down.
    * @param  config     The environment configuration to use for the server.
    */
-  public static void restart(String className, String reason,
+  public static void restart(String className, Message reason,
                              DirectoryEnvironmentConfig config)
   {
     try
@@ -8825,23 +8819,19 @@
 
     if (lockdownMode)
     {
-      int    msgID   = MSGID_DIRECTORY_SERVER_ENTERING_LOCKDOWN_MODE;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.NOTICE, message,
-               msgID);
+      Message message = WARN_DIRECTORY_SERVER_ENTERING_LOCKDOWN_MODE.get();
+      logError(message);
 
       sendAlertNotification(directoryServer, ALERT_TYPE_ENTERING_LOCKDOWN_MODE,
-                            msgID, message);
+              message);
     }
     else
     {
-      int    msgID   = MSGID_DIRECTORY_SERVER_LEAVING_LOCKDOWN_MODE;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.NOTICE, message,
-               msgID);
+      Message message = NOTE_DIRECTORY_SERVER_LEAVING_LOCKDOWN_MODE.get();
+      logError(message);
 
       sendAlertNotification(directoryServer, ALERT_TYPE_LEAVING_LOCKDOWN_MODE,
-                            msgID, message);
+              message);
     }
   }
 
@@ -8940,12 +8930,10 @@
       TRACER.debugCaught(DebugLogLevel.ERROR, exception);
     }
 
-    int    msgID   = MSGID_UNCAUGHT_THREAD_EXCEPTION;
-    String message = getMessage(msgID, thread.getName(),
-                                stackTraceToString(exception));
-    logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_ERROR,
-             message, msgID);
-    sendAlertNotification(this, ALERT_TYPE_UNCAUGHT_EXCEPTION, msgID, message);
+    Message message = ERR_UNCAUGHT_THREAD_EXCEPTION.get(
+        thread.getName(), stackTraceToString(exception));
+    logError(message);
+    sendAlertNotification(this, ALERT_TYPE_UNCAUGHT_EXCEPTION, message);
   }
 
 
@@ -8974,7 +8962,6 @@
     BooleanArgument checkStartability = null;
     BooleanArgument windowsNetStart   = null;
     BooleanArgument displayUsage      = null;
-    BooleanArgument dumpMessages      = null;
     BooleanArgument fullVersion       = null;
     BooleanArgument noDetach          = null;
     BooleanArgument systemInfo        = null;
@@ -8983,7 +8970,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_DSCORE_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_DSCORE_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.core.DirectoryServer",
                             toolDescription, false);
@@ -8996,7 +8983,8 @@
       configClass = new StringArgument("configclass", 'C', "configClass",
                                        true, false, true, "{configClass}",
                                        ConfigFileHandler.class.getName(), null,
-                                       MSGID_DSCORE_DESCRIPTION_CONFIG_CLASS);
+                                       INFO_DSCORE_DESCRIPTION_CONFIG_CLASS
+                                               .get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -9004,56 +8992,50 @@
       configFile = new StringArgument("configfile", 'f', "configFile",
                                       true, false, true, "{configFile}", null,
                                       null,
-                                      MSGID_DSCORE_DESCRIPTION_CONFIG_FILE);
+                                      INFO_DSCORE_DESCRIPTION_CONFIG_FILE
+                                              .get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
 
       checkStartability = new BooleanArgument("checkstartability", null,
                               "checkStartability",
-                              MSGID_DSCORE_DESCRIPTION_CHECK_STARTABILITY);
+                              INFO_DSCORE_DESCRIPTION_CHECK_STARTABILITY.get());
       checkStartability.setHidden(true);
       argParser.addArgument(checkStartability);
 
       windowsNetStart = new BooleanArgument("windowsnetstart", null,
                               "windowsNetStart",
-                              MSGID_DSCORE_DESCRIPTION_WINDOWS_NET_START);
+                              INFO_DSCORE_DESCRIPTION_WINDOWS_NET_START.get());
       windowsNetStart.setHidden(true);
       argParser.addArgument(windowsNetStart);
 
 
       fullVersion = new BooleanArgument("fullversion", 'F', "fullVersion",
-                                        MSGID_DSCORE_DESCRIPTION_FULLVERSION);
+                                        INFO_DSCORE_DESCRIPTION_FULLVERSION
+                                                .get());
       fullVersion.setHidden(true);
       argParser.addArgument(fullVersion);
 
 
       systemInfo = new BooleanArgument("systeminfo", 's', "systemInfo",
-                                       MSGID_DSCORE_DESCRIPTION_SYSINFO);
+                                       INFO_DSCORE_DESCRIPTION_SYSINFO.get());
       argParser.addArgument(systemInfo);
 
 
-      dumpMessages = new BooleanArgument("dumpmessages", 'm', "dumpMessages",
-                                         MSGID_DSCORE_DESCRIPTION_DUMPMESSAGES);
-      dumpMessages.setHidden(true);
-      argParser.addArgument(dumpMessages);
-
-
       noDetach = new BooleanArgument("nodetach", 'N', "nodetach",
-                                     MSGID_DSCORE_DESCRIPTION_NODETACH);
+                                     INFO_DSCORE_DESCRIPTION_NODETACH.get());
       argParser.addArgument(noDetach);
 
 
       displayUsage = new BooleanArgument("help", 'H', "help",
-                                         MSGID_DSCORE_DESCRIPTION_USAGE);
+                                         INFO_DSCORE_DESCRIPTION_USAGE.get());
       argParser.addArgument(displayUsage);
       argParser.setUsageArgument(displayUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_DSCORE_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
-
+      Message message = ERR_DSCORE_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       System.err.println(message);
       System.exit(1);
     }
@@ -9066,9 +9048,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_DSCORE_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
-
+      Message message = ERR_DSCORE_ERROR_PARSING_ARGS.get(ae.getMessage());
       System.err.println(message);
       System.err.println(argParser.getUsage());
       System.exit(1);
@@ -9103,8 +9083,7 @@
         // exit with a code of zero.
         System.exit(NOTHING_TO_DO);
       }
-      else if (fullVersion.isPresent() ||
-               systemInfo.isPresent() || dumpMessages.isPresent())
+      else if (fullVersion.isPresent() || systemInfo.isPresent())
       {
         // We're not really trying to start, so rebuild the argument list
         // without the "--checkStartability" argument and try again.  Exit with
@@ -9206,18 +9185,6 @@
 
       return;
     }
-    else if (dumpMessages.isPresent())
-    {
-      DirectoryServer.bootstrapClient();
-
-      ConcurrentHashMap<Integer,String> messageMap = getMessages();
-      for (int msgID : messageMap.keySet())
-      {
-        System.out.println(msgID + "\t" + messageMap.get(msgID));
-      }
-
-      return;
-    }
 
 
     // At this point, we know that we're going to try to start the server.
@@ -9228,8 +9195,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK;
-        String message = getMessage(msgID, lockFile,
+        Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
                                     String.valueOf(failureReason));
         System.err.println(message);
         System.exit(1);
@@ -9242,8 +9208,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK;
-      String message = getMessage(msgID, lockFile,
+      Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
                                   stackTraceToSingleLineString(e));
       System.err.println(message);
       System.exit(1);
@@ -9413,15 +9378,14 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
 
-      int    msgID   = MSGID_DSCORE_CANNOT_BOOTSTRAP;
-      String message = getMessage(msgID, ie.getMessage());
+      Message message = ERR_DSCORE_CANNOT_BOOTSTRAP.get(ie.getMessage());
       System.err.println(message);
       System.exit(1);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_DSCORE_CANNOT_BOOTSTRAP;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
+      Message message = ERR_DSCORE_CANNOT_BOOTSTRAP.get(
+              stackTraceToSingleLineString(e));
       System.err.println(message);
       System.exit(1);
     }
@@ -9437,14 +9401,13 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
 
-      int    msgID   = MSGID_DSCORE_CANNOT_START;
-      String message = getMessage(msgID, ie.getMessage());
+      Message message = ERR_DSCORE_CANNOT_START.get(ie.getMessage());
       shutDown(directoryServer.getClass().getName(), message);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_DSCORE_CANNOT_START;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
+      Message message = ERR_DSCORE_CANNOT_START.get(
+              stackTraceToSingleLineString(e));
       shutDown(directoryServer.getClass().getName(), message);
     }
   }
@@ -9563,8 +9526,7 @@
       else
       {
         // The server's already running.
-        int msgID = MSGID_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK;
-        String message = getMessage(msgID, lockFile,
+        Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
             String.valueOf(failureReason));
         System.err.println(message);
         isServerRunning = true;
@@ -9574,8 +9536,7 @@
     {
       // We'll treat this as if the server is running because we won't
       // be able to start it anyway.
-      int msgID = MSGID_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK;
-      String message = getMessage(msgID, lockFile,
+      Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
           getExceptionMessage(e));
       System.err.println(message);
       isServerRunning = true;
@@ -9602,9 +9563,7 @@
         {
           // Conflicting arguments
           returnValue = CHECK_ERROR;
-          int    msgID   = MSGID_DSCORE_ERROR_NODETACH_AND_WINDOW_SERVICE;
-          String message = getMessage(msgID, (Object[])null);
-
+          Message message = ERR_DSCORE_ERROR_NODETACH_AND_WINDOW_SERVICE.get();
           System.err.println(message);
 
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServerShutdownHook.java b/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServerShutdownHook.java
index e096f29..992af37 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServerShutdownHook.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/DirectoryServerShutdownHook.java
@@ -31,11 +31,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
+import static org.opends.messages.CoreMessages.*;
 /**
  * This class defines a shutdown hook that will be invoked automatically when
  * the JVM is shutting down.  It may be able to detect certain kinds of shutdown
@@ -79,7 +75,7 @@
         "Directory Server shutdown hook has been invoked.");
 
     DirectoryServer.shutDown(CLASS_NAME,
-                             getMessage(MSGID_SHUTDOWN_DUE_TO_SHUTDOWN_HOOK));
+                             ERR_SHUTDOWN_DUE_TO_SHUTDOWN_HOOK.get());
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/EntryCacheConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/EntryCacheConfigManager.java
index f84b84b..24a05d1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/EntryCacheConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/EntryCacheConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -47,15 +48,14 @@
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.messages.ConfigMessages.*;
+
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -119,9 +119,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_ENTRYCACHE_CANNOT_INSTALL_DEFAULT_CACHE;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_ENTRYCACHE_CANNOT_INSTALL_DEFAULT_CACHE.get(
+          stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
 
   }
@@ -169,7 +169,7 @@
     //      logError(
     //          ErrorLogCategory.CONFIGURATION,
     //          ErrorLogSeverity.SEVERE_WARNING,
-    //          MSGID_CONFIG_ENTRYCACHE_NO_CONFIG_ENTRY
+    //          ERR_CONFIG_ENTRYCACHE_NO_CONFIG_ENTRY
     //          );
     //      return;
     //    }
@@ -194,11 +194,7 @@
       }
       catch (InitializationException ie)
       {
-        logError(
-            ErrorLogCategory.CONFIGURATION,
-            ErrorLogSeverity.SEVERE_ERROR,
-            ie.getMessage(),
-            ie.getMessageID());
+        logError(ie.getMessageObject());
       }
     }
   }
@@ -209,7 +205,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       EntryCacheCfg configuration,
-      List<String>  unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -227,7 +223,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         status = false;
       }
     }
@@ -245,7 +241,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<String>()
+        ResultCode.SUCCESS, false, new ArrayList<Message>()
         );
 
     // If the new configuration has the entry cache disabled, then install
@@ -287,7 +283,7 @@
     }
     catch (InitializationException ie)
     {
-      changeResult.addMessage (ie.getMessage());
+      changeResult.addMessage (ie.getMessageObject());
       changeResult.setResultCode (DirectoryServer.getServerErrorResultCode());
       return changeResult;
     }
@@ -301,7 +297,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       EntryCacheCfg configuration,
-      List<String>  unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -319,7 +315,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add (ie.getMessage());
+        unacceptableReasons.add (ie.getMessageObject());
         status = false;
       }
     }
@@ -337,7 +333,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<String>()
+        ResultCode.SUCCESS, false, new ArrayList<Message>()
         );
 
     // Register a change listener with it so we can be notified of changes
@@ -354,7 +350,7 @@
       }
       catch (InitializationException ie)
       {
-        changeResult.addMessage (ie.getMessage());
+        changeResult.addMessage (ie.getMessageObject());
         changeResult.setResultCode (DirectoryServer.getServerErrorResultCode());
         return changeResult;
       }
@@ -369,7 +365,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       EntryCacheCfg configuration,
-      List<String>  unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // NYI
@@ -390,7 +386,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<String>()
+        ResultCode.SUCCESS, false, new ArrayList<Message>()
         );
 
     // If the entry cache was installed then replace it with the
@@ -484,15 +480,15 @@
                                                    EntryCacheCfg.class,
                                                    List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(cache, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
         {
-          StringBuilder buffer = new StringBuilder();
+          MessageBuilder buffer = new MessageBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -501,10 +497,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_ENTRYCACHE_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_ENTRYCACHE_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -512,13 +507,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_ENTRYCACHE_CANNOT_INITIALIZE_CACHE;
-      String message = getMessage(
-          msgID, className,
-          String.valueOf(configuration.dn()),
-          stackTraceToSingleLineString(e)
-          );
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_ENTRYCACHE_CANNOT_INITIALIZE_CACHE.get(
+          className,
+          String.valueOf(configuration.dn()));
+      throw new InitializationException(message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/ExtendedOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/ExtendedOperationBasis.java
index 6955d0e..90df451 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/ExtendedOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/ExtendedOperationBasis.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import java.util.ArrayList;
@@ -58,9 +59,7 @@
 import org.opends.server.loggers.debug.DebugLogger;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -245,16 +244,16 @@
    */
   @Override()
   public final void disconnectClient(DisconnectReason disconnectReason,
-                                     boolean sendNotification, String message,
-                                     int messageID)
+                                     boolean sendNotification, Message message
+  )
   {
     // Before calling clientConnection.disconnect, we need to mark this
     // operation as cancelled so that the attempt to cancel it later won't cause
     // an unnecessary delay.
     setCancelResult(CancelResult.CANCELED);
 
-    clientConnection.disconnect(disconnectReason, sendNotification, message,
-                                messageID);
+    clientConnection.disconnect(disconnectReason, sendNotification,
+            message);
   }
 
 
@@ -288,7 +287,7 @@
     String resultCode = String.valueOf(getResultCode().getIntValue());
 
     String errorMessage;
-    StringBuilder errorMessageBuffer = getErrorMessage();
+    MessageBuilder errorMessageBuffer = getErrorMessage();
     if (errorMessageBuffer == null)
     {
       errorMessage = null;
@@ -427,8 +426,7 @@
         // result and return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREPARSE_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
+        appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get());
 
         setProcessingStopTime();
 
@@ -475,8 +473,8 @@
       if (handler == null)
       {
         setResultCode(ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
-        appendErrorMessage(getMessage(MSGID_EXTENDED_NO_HANDLER,
-                                      String.valueOf(requestOID)));
+        appendErrorMessage(ERR_EXTENDED_NO_HANDLER.get(
+                String.valueOf(requestOID)));
         break extendedProcessing;
       }
 
@@ -492,8 +490,9 @@
                   getAccessControlHandler().
                   isAllowed(this.getAuthorizationDN(), this, c)) {
             setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
-            int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS;
-            appendErrorMessage(getMessage(msgID, c.getOID()));
+
+            appendErrorMessage(ERR_CONTROL_INSUFFICIENT_ACCESS_RIGHTS.get(
+                    c.getOID()));
             skipPostOperation=true;
             break extendedProcessing;
           }
@@ -506,9 +505,9 @@
           {
             setResultCode(ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
 
-            int msgID = MSGID_EXTENDED_UNSUPPORTED_CRITICAL_CONTROL;
-            appendErrorMessage(getMessage(msgID, String.valueOf(requestOID),
-                                          c.getOID()));
+            appendErrorMessage(ERR_EXTENDED_UNSUPPORTED_CRITICAL_CONTROL.get(
+                    String.valueOf(requestOID),
+                    c.getOID()));
 
             break extendedProcessing;
           }
@@ -526,8 +525,8 @@
           .getAccessControlHandler().isAllowed(this) == false) {
         setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
 
-        int msgID = MSGID_EXTENDED_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS;
-        appendErrorMessage(getMessage(msgID, String.valueOf(requestOID)));
+        appendErrorMessage(ERR_EXTENDED_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS.get(
+                String.valueOf(requestOID)));
 
         skipPostOperation = true;
         break extendedProcessing;
@@ -542,9 +541,7 @@
         // and return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
-
+        appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
         setProcessingStopTime();
 
         logExtendedResponse(this);
@@ -597,8 +594,7 @@
         // return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
+        appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
         setProcessingStopTime();
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/ExtendedOperationConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/ExtendedOperationConfigManager.java
index 2f546ec..10bc93c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/ExtendedOperationConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/ExtendedOperationConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -51,8 +52,8 @@
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 
@@ -168,7 +169,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
        ExtendedOperationHandlerCfg configuration,
-       List<String> unacceptableReasons)
+       List<Message> 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<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     // See whether the handler should be enabled.
     if (handler == null) {
@@ -212,7 +213,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          messages.add(e.getMessage());
+          messages.add(e.getMessageObject());
           resultCode = DirectoryServer.getServerErrorResultCode();
         } catch (Exception e) {
           if (debugEnabled())
@@ -220,10 +221,10 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_CONFIG_EXTOP_INITIALIZATION_FAILED;
-          messages.add(getMessage(msgID, String.valueOf(configuration
-              .getJavaImplementationClass()), String.valueOf(dn),
-              stackTraceToSingleLineString(e)));
+          messages.add(ERR_CONFIG_EXTOP_INITIALIZATION_FAILED.get(
+                  String.valueOf(configuration.getJavaImplementationClass()),
+                  String.valueOf(dn),
+                  stackTraceToSingleLineString(e)));
           resultCode = DirectoryServer.getServerErrorResultCode();
         }
       }
@@ -257,7 +258,7 @@
    */
   public boolean isConfigurationAddAcceptable(
        ExtendedOperationHandlerCfg configuration,
-       List<String> unacceptableReasons)
+       List<Message> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(configuration, unacceptableReasons);
   }
@@ -271,7 +272,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     // Register as a change listener for this connection handler entry
     // so that we will be notified of any changes that may be made to
@@ -298,7 +299,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        messages.add(e.getMessage());
+        messages.add(e.getMessageObject());
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
       catch (Exception e)
@@ -308,10 +309,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_CONFIG_EXTOP_INITIALIZATION_FAILED;
-        messages.add(getMessage(msgID, String.valueOf(configuration
-            .getJavaImplementationClass()), String.valueOf(dn),
-            stackTraceToSingleLineString(e)));
+        messages.add(ERR_CONFIG_EXTOP_INITIALIZATION_FAILED.get(
+                String.valueOf(configuration.getJavaImplementationClass()),
+                String.valueOf(dn),
+                stackTraceToSingleLineString(e)));
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
     }
@@ -326,7 +327,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
        ExtendedOperationHandlerCfg configuration,
-       List<String> unacceptableReasons)
+       List<Message> unacceptableReasons)
   {
     // A delete should always be acceptable, so just return true.
     return true;
@@ -367,11 +368,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_EXTOP_INVALID_CLASS;
-      String message = getMessage(msgID, String.valueOf(className),
-                                  String.valueOf(config.dn()),
-                                  String.valueOf(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_EXTOP_INVALID_CLASS.
+          get(String.valueOf(className), String.valueOf(config.dn()),
+              String.valueOf(e));
+      throw new ConfigException(message, e);
     }
 
     // The handler has been successfully initialized.
@@ -383,7 +383,7 @@
   // Determines whether or not the new configuration's implementation
   // class is acceptable.
   private boolean isJavaClassAcceptable(ExtendedOperationHandlerCfg config,
-                                        List<String> unacceptableReasons)
+                                        List<Message> unacceptableReasons)
   {
     String className = config.getJavaImplementationClass();
     ExtendedOperationHandlerCfgDefn d =
@@ -418,8 +418,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_EXTOP_INVALID_CLASS;
-      unacceptableReasons.add(getMessage(msgID, className,
+      unacceptableReasons.add(ERR_CONFIG_EXTOP_INVALID_CLASS.get(className,
                               String.valueOf(config.dn()),
                               String.valueOf(e)));
       return false;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/GroupManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/GroupManager.java
index 236edb0..edb1d0c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/GroupManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/GroupManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -58,8 +59,8 @@
 import org.opends.server.types.DereferencePolicy;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.SearchResultEntry;
@@ -70,11 +71,10 @@
 import org.opends.server.types.operation.PostResponseModifyOperation;
 import org.opends.server.types.operation.PostResponseModifyDNOperation;
 
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -178,9 +178,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          logError(ie.getMessageObject());
           continue;
         }
       }
@@ -194,7 +192,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       GroupImplementationCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -207,7 +205,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -226,7 +224,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -251,7 +249,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -272,7 +270,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       GroupImplementationCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // group implementation is in use.
@@ -289,7 +287,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     Group group = groupImplementations.remove(configuration.dn());
     if (group != null)
@@ -317,7 +315,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       GroupImplementationCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -330,7 +328,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -349,7 +347,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing group implementation if it's already enabled.
@@ -411,7 +409,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -471,7 +469,7 @@
                                                    GroupImplementationCfg.class,
                                                    List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(group, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -479,7 +477,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -488,10 +486,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_GROUP_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_GROUP_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -499,11 +496,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_GROUP_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_GROUP_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/IdentityMapperConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/IdentityMapperConfigManager.java
index 7bd2b12..7d8d220 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/IdentityMapperConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/IdentityMapperConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -46,14 +47,14 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -133,9 +134,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          logError(ie.getMessageObject());
           continue;
         }
       }
@@ -148,14 +147,12 @@
     DN mapperDN = DirectoryServer.getProxiedAuthorizationIdentityMapperDN();
     if (mapperDN == null)
     {
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.MILD_WARNING,
-               MSGID_CONFIG_IDMAPPER_NO_PROXY_MAPPER_DN);
+      logError(ERR_CONFIG_IDMAPPER_NO_PROXY_MAPPER_DN.get());
     }
     else if (! identityMappers.containsKey(mapperDN))
     {
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_WARNING,
-               MSGID_CONFIG_IDMAPPER_INVALID_PROXY_MAPPER_DN,
-               String.valueOf(mapperDN));
+      logError(ERR_CONFIG_IDMAPPER_INVALID_PROXY_MAPPER_DN.get(
+          String.valueOf(mapperDN)));
     }
   }
 
@@ -166,7 +163,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       IdentityMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -179,7 +176,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -198,7 +195,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -223,7 +220,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -243,7 +240,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       IdentityMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // identity mapper is in use.
@@ -260,7 +257,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     DirectoryServer.deregisterIdentityMapper(configuration.dn());
 
@@ -280,7 +277,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       IdentityMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -293,7 +290,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -312,7 +309,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing mapper if it's already enabled.
@@ -367,7 +364,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -426,7 +423,7 @@
                                                     IdentityMapperCfg.class,
                                                     List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(mapper, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -434,7 +431,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -443,10 +440,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_IDMAPPER_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_IDMAPPER_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -454,11 +450,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_IDMAPPER_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_IDMAPPER_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/IdleTimeLimitThread.java b/opendj-sdk/opends/src/server/org/opends/server/core/IdleTimeLimitThread.java
index 3f228ae..988a15d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/IdleTimeLimitThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/IdleTimeLimitThread.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -35,14 +36,12 @@
 import org.opends.server.api.ServerShutdownListener;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.DisconnectReason;
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.CoreMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -87,8 +86,7 @@
    */
   public void run()
   {
-    int    disconnectMessageID = MSGID_IDLETIME_LIMIT_EXCEEDED;
-    String disconnectMessage   = getMessage(disconnectMessageID);
+    Message disconnectMessage = INFO_IDLETIME_LIMIT_EXCEEDED.get();
 
     long sleepTime = 5000L;
 
@@ -126,7 +124,7 @@
                   try
                   {
                     c.disconnect(DisconnectReason.IDLE_TIME_LIMIT_EXCEEDED,
-                                 true, disconnectMessage, disconnectMessageID);
+                                 true, disconnectMessage);
                   }
                   catch (Exception e)
                   {
@@ -135,11 +133,11 @@
                       TRACER.debugCaught(DebugLogLevel.ERROR, e);
                     }
 
-                    int    msgID   = MSGID_IDLETIME_DISCONNECT_ERROR;
-                    String message = getMessage(msgID, c.getConnectionID(),
-                                          stackTraceToSingleLineString(e));
-                    logError(ErrorLogCategory.CORE_SERVER,
-                             ErrorLogSeverity.MILD_ERROR, message, msgID);
+                    Message message = ERR_IDLETIME_DISCONNECT_ERROR.get(
+                            c.getConnectionID(),
+                            stackTraceToSingleLineString(e)
+                    );
+                    ErrorLogger.logError(message);
                   }
                 }
                 else
@@ -162,10 +160,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_IDLETIME_UNEXPECTED_ERROR;
-        String message = getMessage(msgID, stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message =
+            ERR_IDLETIME_UNEXPECTED_ERROR.get(stackTraceToSingleLineString(e));
+        ErrorLogger.logError(message);
       }
     }
   }
@@ -185,7 +182,7 @@
   /**
    * {@inheritDoc}
    */
-  public void processServerShutdown(String reason)
+  public void processServerShutdown(Message reason)
   {
     shutdownRequested = true;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/KeyManagerProviderConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/KeyManagerProviderConfigManager.java
index cd26663..e15adc5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/KeyManagerProviderConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/KeyManagerProviderConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -46,14 +47,12 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -134,9 +133,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          logError(ie.getMessageObject());
           continue;
         }
       }
@@ -149,7 +146,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(KeyManagerCfg configuration,
-                                              List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -162,7 +159,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -180,7 +177,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -205,7 +202,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -223,7 +220,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(KeyManagerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // provider is in use.
@@ -240,7 +237,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     DirectoryServer.deregisterKeyManagerProvider(configuration.dn());
 
@@ -259,7 +256,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(KeyManagerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -272,7 +269,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -291,7 +288,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing provider if it's already enabled.
@@ -345,7 +342,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -405,7 +402,7 @@
              provider.getClass().getMethod("isConfigurationAcceptable",
                                            KeyManagerCfg.class, List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(provider, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -413,7 +410,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -422,10 +419,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_KEYMANAGER_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_KEYMANAGER_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -437,11 +433,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_KEYMANAGER_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_KEYMANAGER_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/LockFileManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/LockFileManager.java
index 5bb1fdd..da15e4a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/LockFileManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/LockFileManager.java
@@ -40,8 +40,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -100,8 +99,9 @@
       // then we can't get a shared lock on it.
       if (exclusiveLocks.containsKey(lockFile))
       {
-        int msgID = MSGID_FILELOCKER_LOCK_SHARED_REJECTED_BY_EXCLUSIVE;
-        failureReason.append(getMessage(msgID, lockFile));
+
+        failureReason.append(
+                ERR_FILELOCKER_LOCK_SHARED_REJECTED_BY_EXCLUSIVE.get(lockFile));
         return false;
       }
 
@@ -135,8 +135,8 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_FILELOCKER_LOCK_SHARED_FAILED_CREATE;
-        failureReason.append(getMessage(msgID, lockFile,
+        failureReason.append(
+                ERR_FILELOCKER_LOCK_SHARED_FAILED_CREATE.get(lockFile,
                                         getExceptionMessage(e)));
         return false;
       }
@@ -157,9 +157,8 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_FILELOCKER_LOCK_SHARED_FAILED_OPEN;
-        failureReason.append(getMessage(msgID, lockFile,
-                                        getExceptionMessage(e)));
+        failureReason.append(ERR_FILELOCKER_LOCK_SHARED_FAILED_OPEN.get(
+                lockFile, getExceptionMessage(e)));
 
         if (raf != null)
         {
@@ -188,8 +187,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_FILELOCKER_LOCK_SHARED_FAILED_LOCK;
-        failureReason.append(getMessage(msgID, getExceptionMessage(e)));
+        failureReason.append(
+                ERR_FILELOCKER_LOCK_SHARED_FAILED_LOCK.get(
+                        lockFile, getExceptionMessage(e)));
         if (channel != null)
         {
           try
@@ -218,8 +218,8 @@
       // the shared lock table with a reference count of 1 and return true.
       if (fileLock == null)
       {
-        int msgID = MSGID_FILELOCKER_LOCK_SHARED_NOT_GRANTED;
-        failureReason.append(getMessage(msgID, lockFile));
+        failureReason.append(
+                ERR_FILELOCKER_LOCK_SHARED_NOT_GRANTED.get(lockFile));
         if (channel != null)
         {
           try
@@ -278,8 +278,9 @@
       // then we can't get another exclusive lock on it.
       if (exclusiveLocks.containsKey(lockFile))
       {
-        int msgID = MSGID_FILELOCKER_LOCK_EXCLUSIVE_REJECTED_BY_EXCLUSIVE;
-        failureReason.append(getMessage(msgID, lockFile));
+        failureReason.append(
+                ERR_FILELOCKER_LOCK_EXCLUSIVE_REJECTED_BY_EXCLUSIVE.get(
+                        lockFile));
         return false;
       }
 
@@ -288,8 +289,8 @@
       // we can't get an exclusive lock on it.
       if (sharedLocks.containsKey(lockFile))
       {
-        int msgID = MSGID_FILELOCKER_LOCK_EXCLUSIVE_REJECTED_BY_SHARED;
-        failureReason.append(getMessage(msgID, lockFile));
+        failureReason.append(
+                ERR_FILELOCKER_LOCK_EXCLUSIVE_REJECTED_BY_SHARED.get(lockFile));
         return false;
       }
 
@@ -310,9 +311,8 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-
-        int msgID = MSGID_FILELOCKER_LOCK_EXCLUSIVE_FAILED_CREATE;
-        failureReason.append(getMessage(msgID, lockFile,
+        failureReason.append(
+                ERR_FILELOCKER_LOCK_EXCLUSIVE_FAILED_CREATE.get(lockFile,
                                         getExceptionMessage(e)));
         return false;
       }
@@ -333,9 +333,8 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_FILELOCKER_LOCK_EXCLUSIVE_FAILED_OPEN;
-        failureReason.append(getMessage(msgID, lockFile,
-                                        getExceptionMessage(e)));
+        failureReason.append(ERR_FILELOCKER_LOCK_EXCLUSIVE_FAILED_OPEN.get(
+                lockFile, getExceptionMessage(e)));
         if (raf != null)
         {
           try
@@ -363,8 +362,8 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_FILELOCKER_LOCK_EXCLUSIVE_FAILED_LOCK;
-        failureReason.append(getMessage(msgID, lockFile,
+        failureReason.append(
+                ERR_FILELOCKER_LOCK_EXCLUSIVE_FAILED_LOCK.get(lockFile,
                                         getExceptionMessage(e)));
         if (channel != null)
         {
@@ -395,8 +394,8 @@
       // the exclusive lock table and return true.
       if (fileLock == null)
       {
-        int msgID = MSGID_FILELOCKER_LOCK_EXCLUSIVE_NOT_GRANTED;
-        failureReason.append(getMessage(msgID, lockFile));
+        failureReason.append(
+                ERR_FILELOCKER_LOCK_EXCLUSIVE_NOT_GRANTED.get(lockFile));
         if (channel != null)
         {
           try
@@ -472,8 +471,8 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_FILELOCKER_UNLOCK_EXCLUSIVE_FAILED_RELEASE;
-          failureReason.append(getMessage(msgID, lockFile,
+          failureReason.append(
+                  ERR_FILELOCKER_UNLOCK_EXCLUSIVE_FAILED_RELEASE.get(lockFile,
                                           getExceptionMessage(e)));
           return false;
         }
@@ -520,9 +519,8 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int msgID = MSGID_FILELOCKER_UNLOCK_SHARED_FAILED_RELEASE;
-            failureReason.append(getMessage(msgID, lockFile,
-                                            getExceptionMessage(e)));
+            failureReason.append(ERR_FILELOCKER_UNLOCK_SHARED_FAILED_RELEASE
+                    .get(lockFile, getExceptionMessage(e)));
             return false;
           }
 
@@ -553,8 +551,7 @@
       // We didn't find a reference to the file.  We'll have to return false
       // since either we lost the reference or we're trying to release a lock
       // we never had.  Both of them are bad.
-      int msgID = MSGID_FILELOCKER_UNLOCK_UNKNOWN_FILE;
-      failureReason.append(getMessage(msgID, lockFile));
+      failureReason.append(ERR_FILELOCKER_UNLOCK_UNKNOWN_FILE.get(lockFile));
       return false;
     }
     finally
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/LogRetentionPolicyConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/LogRetentionPolicyConfigManager.java
index ae99da9..03c6cd7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/LogRetentionPolicyConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/LogRetentionPolicyConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 import org.opends.server.admin.std.server.LogRetentionPolicyCfg;
 import org.opends.server.admin.std.server.RootCfg;
@@ -43,8 +44,8 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ConfigMessages.*;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 import java.util.List;
@@ -104,7 +105,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       LogRetentionPolicyCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     return isJavaClassAcceptable(configuration, unacceptableReasons);
   }
@@ -114,7 +115,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       LogRetentionPolicyCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> 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<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     try
     {
@@ -141,16 +142,17 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      messages.add(e.getMessage());
+      messages.add(e.getMessageObject());
       resultCode = DirectoryServer.getServerErrorResultCode();
     } catch (Exception e) {
       if (debugEnabled())
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int msgID = MSGID_CONFIG_RETENTION_POLICY_CANNOT_CREATE_POLICY;
-      messages.add(getMessage(msgID, String.valueOf(config.dn().toString()),
-                              stackTraceToSingleLineString(e)));
+
+      messages.add(ERR_CONFIG_RETENTION_POLICY_CANNOT_CREATE_POLICY.get(
+              String.valueOf(config.dn().toString()),
+              stackTraceToSingleLineString(e)));
       resultCode = DirectoryServer.getServerErrorResultCode();
     }
 
@@ -166,7 +168,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     RetentionPolicy policy = DirectoryServer.getRetentionPolicy(config.dn());
     if(policy != null)
@@ -187,7 +189,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       LogRetentionPolicyCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     return isJavaClassAcceptable(configuration, unacceptableReasons);
   }
@@ -201,7 +203,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     RetentionPolicy policy =
         DirectoryServer.getRetentionPolicy(configuration.dn());
@@ -215,7 +217,7 @@
   }
 
   private boolean isJavaClassAcceptable(LogRetentionPolicyCfg config,
-                                        List<String> unacceptableReasons)
+                                        List<Message> unacceptableReasons)
   {
     String className = config.getJavaImplementationClass();
     LogRetentionPolicyCfgDefn d = LogRetentionPolicyCfgDefn.getInstance();
@@ -227,8 +229,7 @@
       theClass = pd.loadClass(className, RetentionPolicy.class);
       theClass.newInstance();
     } catch (Exception e) {
-      int    msgID   = MSGID_CONFIG_RETENTION_POLICY_INVALID_CLASS;
-      String message = getMessage(msgID, className,
+      Message message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(className,
                                   config.dn().toString(),
                                   String.valueOf(e));
       unacceptableReasons.add(message);
@@ -242,8 +243,7 @@
       theClass.getMethod("initializeLogRetentionPolicy", config.definition()
           .getServerConfigurationClass());
     } catch (Exception e) {
-      int    msgID   = MSGID_CONFIG_RETENTION_POLICY_INVALID_CLASS;
-      String message = getMessage(msgID, className,
+      Message message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(className,
                                   config.dn().toString(),
                                   String.valueOf(e));
       unacceptableReasons.add(message);
@@ -277,17 +277,13 @@
     {
       // Rethrow the exceptions thrown be the invoked method.
       Throwable e = ite.getTargetException();
-      int    msgID   = MSGID_CONFIG_RETENTION_POLICY_INVALID_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(
+          className, config.dn().toString(), stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     } catch (Exception e) {
-      int    msgID   = MSGID_CONFIG_RETENTION_POLICY_INVALID_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  String.valueOf(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(
+          className, config.dn().toString(), String.valueOf(e));
+      throw new ConfigException(message, e);
     }
 
     // The connection handler has been successfully initialized.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/LogRotationPolicyConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/LogRotationPolicyConfigManager.java
index f7ee8da..153fff1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/LogRotationPolicyConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/LogRotationPolicyConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 import org.opends.server.loggers.RotationPolicy;
 import org.opends.server.admin.server.ConfigurationAddListener;
@@ -43,8 +44,8 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ConfigMessages.*;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 import java.util.List;
@@ -104,7 +105,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       LogRotationPolicyCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     return isJavaClassAcceptable(configuration, unacceptableReasons);
   }
@@ -114,7 +115,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       LogRotationPolicyCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> 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<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     try
     {
@@ -141,16 +142,17 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      messages.add(e.getMessage());
+      messages.add(e.getMessageObject());
       resultCode = DirectoryServer.getServerErrorResultCode();
     } catch (Exception e) {
       if (debugEnabled())
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int msgID = MSGID_CONFIG_ROTATION_POLICY_CANNOT_CREATE_POLICY;
-      messages.add(getMessage(msgID, String.valueOf(config.dn().toString()),
-                              stackTraceToSingleLineString(e)));
+
+      messages.add(ERR_CONFIG_ROTATION_POLICY_CANNOT_CREATE_POLICY.get(
+              String.valueOf(config.dn().toString()),
+              stackTraceToSingleLineString(e)));
       resultCode = DirectoryServer.getServerErrorResultCode();
     }
 
@@ -166,7 +168,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     RotationPolicy policy = DirectoryServer.getRotationPolicy(config.dn());
     if(policy != null)
@@ -187,7 +189,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       LogRotationPolicyCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     return isJavaClassAcceptable(configuration, unacceptableReasons);
   }
@@ -201,7 +203,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     RotationPolicy policy =
         DirectoryServer.getRotationPolicy(configuration.dn());
@@ -215,7 +217,7 @@
   }
 
   private boolean isJavaClassAcceptable(LogRotationPolicyCfg config,
-                                        List<String> unacceptableReasons)
+                                        List<Message> unacceptableReasons)
   {
     String className = config.getJavaImplementationClass();
     LogRotationPolicyCfgDefn d = LogRotationPolicyCfgDefn.getInstance();
@@ -227,8 +229,7 @@
       theClass = pd.loadClass(className, RotationPolicy.class);
       theClass.newInstance();
     } catch (Exception e) {
-      int    msgID   = MSGID_CONFIG_ROTATION_POLICY_INVALID_CLASS;
-      String message = getMessage(msgID, className,
+      Message message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(className,
                                   config.dn().toString(),
                                   String.valueOf(e));
       unacceptableReasons.add(message);
@@ -242,8 +243,7 @@
       theClass.getMethod("initializeLogRotationPolicy", config.definition()
           .getServerConfigurationClass());
     } catch (Exception e) {
-      int    msgID   = MSGID_CONFIG_ROTATION_POLICY_INVALID_CLASS;
-      String message = getMessage(msgID, className,
+      Message message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(className,
                                   config.dn().toString(),
                                   String.valueOf(e));
       unacceptableReasons.add(message);
@@ -277,17 +277,13 @@
     {
       // Rethrow the exceptions thrown be the invoked method.
       Throwable e = ite.getTargetException();
-      int    msgID   = MSGID_CONFIG_ROTATION_POLICY_INVALID_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(
+          className, config.dn().toString(), stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     } catch (Exception e) {
-      int    msgID   = MSGID_CONFIG_ROTATION_POLICY_INVALID_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  String.valueOf(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(
+          className, config.dn().toString(), String.valueOf(e));
+      throw new ConfigException(message, e);
     }
 
     // The connection handler has been successfully initialized.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/LoggerConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/LoggerConfigManager.java
index d359aa3..23cc5a6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/LoggerConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/LoggerConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -36,8 +37,9 @@
 import org.opends.server.loggers.debug.DebugLogger;
 import org.opends.server.loggers.ErrorLogger;
 import org.opends.server.loggers.AccessLogger;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+
 import org.opends.server.admin.std.server.*;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
@@ -104,9 +106,9 @@
       }
       else
       {
-        int    msgID   = MSGID_CONFIG_LOGGER_INVALID_OBJECTCLASS;
-        String message = getMessage(msgID, String.valueOf(config.dn()));
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CONFIG_LOGGER_INVALID_OBJECTCLASS.get(
+            String.valueOf(config.dn()));
+        throw new ConfigException(message);
       }
     }
 
@@ -114,15 +116,11 @@
     // message.
     if (accessPublisherCfgs.isEmpty())
     {
-      ErrorLogger.logError(ErrorLogCategory.CONFIGURATION,
-                           ErrorLogSeverity.SEVERE_WARNING,
-                           MSGID_CONFIG_LOGGER_NO_ACTIVE_ACCESS_LOGGERS);
+      logError(WARN_CONFIG_LOGGER_NO_ACTIVE_ACCESS_LOGGERS.get());
     }
     if (errorPublisherCfgs.isEmpty())
     {
-      ErrorLogger.logError(ErrorLogCategory.CONFIGURATION,
-                           ErrorLogSeverity.SEVERE_WARNING,
-                           MSGID_CONFIG_LOGGER_NO_ACTIVE_ERROR_LOGGERS);
+      logError(WARN_CONFIG_LOGGER_NO_ACTIVE_ERROR_LOGGERS.get());
     }
 
     DebugLogger.getInstance().initializeDebugLogger(debugPublisherCfgs);
@@ -134,7 +132,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(LogPublisherCfg config,
-                                              List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     if(config instanceof DebugLogPublisherCfg)
     {
@@ -153,8 +151,9 @@
    }
     else
     {
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_OBJECTCLASS;
-      unacceptableReasons.add(getMessage(msgID, String.valueOf(config.dn())));
+
+      unacceptableReasons.add(ERR_CONFIG_LOGGER_INVALID_OBJECTCLASS.get(
+              String.valueOf(config.dn())));
       return false;
     }
   }
@@ -181,10 +180,10 @@
    }
     else
     {
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_OBJECTCLASS;
-      ArrayList<String> messages            = new ArrayList<String>();
+      ArrayList<Message> messages            = new ArrayList<Message>();
+      messages.add(ERR_CONFIG_LOGGER_INVALID_OBJECTCLASS.
+              get(String.valueOf(config.dn())));
       boolean           adminActionRequired = false;
-      messages.add(getMessage(msgID, String.valueOf(config.dn())));
       ResultCode resultCode = ResultCode.UNWILLING_TO_PERFORM;
       return new ConfigChangeResult(resultCode, adminActionRequired, messages);
     }
@@ -194,7 +193,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(LogPublisherCfg config,
-                                               List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     if(config instanceof DebugLogPublisherCfg)
     {
@@ -213,8 +212,8 @@
    }
     else
     {
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_OBJECTCLASS;
-      unacceptableReasons.add(getMessage(msgID, String.valueOf(config.dn())));
+      unacceptableReasons.add(ERR_CONFIG_LOGGER_INVALID_OBJECTCLASS.get(
+              String.valueOf(config.dn())));
       return false;
     }
   }
@@ -241,10 +240,10 @@
    }
     else
     {
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_OBJECTCLASS;
-      ArrayList<String> messages            = new ArrayList<String>();
+      ArrayList<Message> messages            = new ArrayList<Message>();
+      messages.add(ERR_CONFIG_LOGGER_INVALID_OBJECTCLASS.get(
+              String.valueOf(config.dn())));
       boolean           adminActionRequired = false;
-      messages.add(getMessage(msgID, String.valueOf(config.dn())));
       ResultCode resultCode = ResultCode.UNWILLING_TO_PERFORM;
       return new ConfigChangeResult(resultCode, adminActionRequired, messages);
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/MatchingRuleConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/MatchingRuleConfigManager.java
index 9280fca..5f787d3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/MatchingRuleConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/MatchingRuleConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -59,17 +60,16 @@
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.MatchingRuleUse;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.StaticUtils.*;
+import static org.opends.messages.ConfigMessages.*;
 
+import static org.opends.server.util.StaticUtils.*;
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -148,20 +148,15 @@
           }
           catch (DirectoryException de)
           {
-            int    msgID   = MSGID_CONFIG_SCHEMA_MR_CONFLICTING_MR;
-            String message = getMessage(msgID,
-                                  String.valueOf(mrConfiguration.dn()),
-                                  de.getErrorMessage());
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+            Message message = WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(
+                String.valueOf(mrConfiguration.dn()), de.getMessageObject());
+            ErrorLogger.logError(message);
             continue;
           }
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          ErrorLogger.logError(ie.getMessageObject());
           continue;
         }
       }
@@ -174,7 +169,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(MatchingRuleCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -187,7 +182,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -205,7 +200,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -230,9 +225,9 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_CONFIG_SCHEMA_MR_CONFLICTING_MR;
-        String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                    de.getErrorMessage());
+        Message message = WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(
+                String.valueOf(configuration.dn()),
+                de.getMessageObject());
         messages.add(message);
 
         if (resultCode == ResultCode.SUCCESS)
@@ -248,7 +243,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     return new ConfigChangeResult(resultCode, adminActionRequired, messages);
@@ -260,7 +255,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(MatchingRuleCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> 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.
@@ -275,9 +270,10 @@
         ApproximateMatchingRule amr = at.getApproximateMatchingRule();
         if ((amr != null) && oid.equals(amr.getOID()))
         {
-          int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT;
-          String message = getMessage(msgID, matchingRule.getName(),
-                                      at.getNameOrOID());
+          Message message =
+                  WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT.get(
+                          matchingRule.getName(),
+                          at.getNameOrOID());
           unacceptableReasons.add(message);
 
           configAcceptable = false;
@@ -287,9 +283,10 @@
         EqualityMatchingRule emr = at.getEqualityMatchingRule();
         if ((emr != null) && oid.equals(emr.getOID()))
         {
-          int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT;
-          String message = getMessage(msgID, matchingRule.getName(),
-                                      at.getNameOrOID());
+          Message message =
+                  WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT.get(
+                          matchingRule.getName(),
+                          at.getNameOrOID());
           unacceptableReasons.add(message);
 
           configAcceptable = false;
@@ -299,9 +296,10 @@
         OrderingMatchingRule omr = at.getOrderingMatchingRule();
         if ((omr != null) && oid.equals(omr.getOID()))
         {
-          int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT;
-          String message = getMessage(msgID, matchingRule.getName(),
-                                      at.getNameOrOID());
+          Message message =
+                  WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT.get(
+                          matchingRule.getName(),
+                          at.getNameOrOID());
           unacceptableReasons.add(message);
 
           configAcceptable = false;
@@ -311,9 +309,10 @@
         SubstringMatchingRule smr = at.getSubstringMatchingRule();
         if ((smr != null) && oid.equals(smr.getOID()))
         {
-          int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT;
-          String message = getMessage(msgID, matchingRule.getName(),
-                                      at.getNameOrOID());
+          Message message =
+                  WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT.get(
+                          matchingRule.getName(),
+                          at.getNameOrOID());
           unacceptableReasons.add(message);
 
           configAcceptable = false;
@@ -325,9 +324,10 @@
       {
         if (oid.equals(mru.getMatchingRule().getOID()))
         {
-          int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_MRU;
-          String message = getMessage(msgID, matchingRule.getName(),
-                                      mru.getName());
+          Message message =
+                  WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_MRU.get(
+                          matchingRule.getName(),
+                          mru.getName());
           unacceptableReasons.add(message);
 
           configAcceptable = false;
@@ -349,7 +349,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     MatchingRule matchingRule = matchingRules.remove(configuration.dn());
     if (matchingRule != null)
@@ -367,7 +367,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(MatchingRuleCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     if (configuration.isEnabled())
@@ -381,7 +381,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         configAcceptable = false;
       }
     }
@@ -398,9 +398,10 @@
           ApproximateMatchingRule amr = at.getApproximateMatchingRule();
           if ((amr != null) && oid.equals(amr.getOID()))
           {
-            int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT;
-            String message = getMessage(msgID, matchingRule.getName(),
-                                        at.getNameOrOID());
+            Message message =
+                    WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT.get(
+                            matchingRule.getName(),
+                            at.getNameOrOID());
             unacceptableReasons.add(message);
 
             configAcceptable = false;
@@ -410,9 +411,10 @@
           EqualityMatchingRule emr = at.getEqualityMatchingRule();
           if ((emr != null) && oid.equals(emr.getOID()))
           {
-            int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT;
-            String message = getMessage(msgID, matchingRule.getName(),
-                                        at.getNameOrOID());
+            Message message =
+                    WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT.get(
+                            matchingRule.getName(),
+                            at.getNameOrOID());
             unacceptableReasons.add(message);
 
             configAcceptable = false;
@@ -422,9 +424,10 @@
           OrderingMatchingRule omr = at.getOrderingMatchingRule();
           if ((omr != null) && oid.equals(omr.getOID()))
           {
-            int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT;
-            String message = getMessage(msgID, matchingRule.getName(),
-                                        at.getNameOrOID());
+            Message message =
+                    WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT.get(
+                            matchingRule.getName(),
+                            at.getNameOrOID());
             unacceptableReasons.add(message);
 
             configAcceptable = false;
@@ -434,9 +437,8 @@
           SubstringMatchingRule smr = at.getSubstringMatchingRule();
           if ((smr != null) && oid.equals(smr.getOID()))
           {
-            int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT;
-            String message = getMessage(msgID, matchingRule.getName(),
-                                        at.getNameOrOID());
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT
+                    .get(matchingRule.getName(), at.getNameOrOID());
             unacceptableReasons.add(message);
 
             configAcceptable = false;
@@ -449,9 +451,9 @@
         {
           if (oid.equals(mru.getMatchingRule().getOID()))
           {
-            int msgID = MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_MRU;
-            String message = getMessage(msgID, matchingRule.getName(),
-                                        mru.getName());
+            Message message =
+                    WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_MRU.get(
+                            matchingRule.getName(), mru.getName());
             unacceptableReasons.add(message);
 
             configAcceptable = false;
@@ -474,7 +476,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing matching rule if it's already enabled.
@@ -528,9 +530,8 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_CONFIG_SCHEMA_MR_CONFLICTING_MR;
-        String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                    de.getErrorMessage());
+        Message message = WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(
+                String.valueOf(configuration.dn()), de.getMessageObject());
         messages.add(message);
 
         if (resultCode == ResultCode.SUCCESS)
@@ -546,7 +547,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     return new ConfigChangeResult(resultCode, adminActionRequired, messages);
@@ -643,7 +644,7 @@
                                                MatchingRuleCfg.class,
                                                List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(matchingRule,
                                                      configuration,
                                                      unacceptableReasons);
@@ -652,7 +653,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -661,10 +662,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_SCHEMA_MR_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_SCHEMA_MR_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -672,11 +672,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_SCHEMA_MR_CANNOT_INITIALIZE;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_SCHEMA_MR_CANNOT_INITIALIZE.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/ModifyDNOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/ModifyDNOperationBasis.java
index ca64821..52c8995 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/ModifyDNOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/ModifyDNOperationBasis.java
@@ -25,6 +25,8 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -41,8 +43,6 @@
 import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.Modification;
 import org.opends.server.types.Operation;
 import org.opends.server.types.OperationType;
@@ -56,13 +56,12 @@
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.workflowelement.localbackend.*;
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 
 import org.opends.server.loggers.debug.DebugLogger;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -257,7 +256,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
       setResultCode(de.getResultCode());
-      appendErrorMessage(de.getErrorMessage());
+      appendErrorMessage(de.getMessageObject());
     }
     return entryDN;
   }
@@ -301,7 +300,7 @@
       }
 
       setResultCode(de.getResultCode());
-      appendErrorMessage(de.getErrorMessage());
+      appendErrorMessage(de.getMessageObject());
     }
     return newRDN;
   }
@@ -368,7 +367,7 @@
         }
 
         setResultCode(de.getResultCode());
-        appendErrorMessage(de.getErrorMessage());
+        appendErrorMessage(de.getMessageObject());
       }
     }
     return newSuperior;
@@ -453,16 +452,16 @@
    */
   @Override()
   public final void disconnectClient(DisconnectReason disconnectReason,
-      boolean sendNotification, String message,
-      int messageID)
+                                     boolean sendNotification, Message message
+  )
   {
     // Before calling clientConnection.disconnect, we need to mark this
     // operation as cancelled so that the attempt to cancel it later won't cause
     // an unnecessary delay.
     setCancelResult(CancelResult.CANCELED);
 
-    clientConnection.disconnect(disconnectReason, sendNotification, message,
-        messageID);
+    clientConnection.disconnect(disconnectReason, sendNotification,
+            message);
   }
 
 
@@ -508,7 +507,7 @@
     String resultCode = String.valueOf(getResultCode().getIntValue());
 
     String errorMessage;
-    StringBuilder errorMessageBuffer = getErrorMessage();
+    MessageBuilder errorMessageBuffer = getErrorMessage();
     if (errorMessageBuffer == null)
     {
       errorMessage = null;
@@ -647,8 +646,7 @@
         // result and return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREPARSE_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
+        appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get());
 
         setProcessingStopTime();
 
@@ -838,13 +836,9 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int    msgID   = MSGID_MODDN_ERROR_NOTIFYING_PERSISTENT_SEARCH;
-              String message = getMessage(msgID,
-                  String.valueOf(persistentSearch),
-                  getExceptionMessage(e));
-              logError(ErrorLogCategory.CORE_SERVER,
-                  ErrorLogSeverity.SEVERE_ERROR,
-                  message, msgID);
+              Message message = ERR_MODDN_ERROR_NOTIFYING_PERSISTENT_SEARCH.get(
+                  String.valueOf(persistentSearch), getExceptionMessage(e));
+              ErrorLogger.logError(message);
 
               DirectoryServer.deregisterPersistentSearch(persistentSearch);
             }
@@ -864,8 +858,8 @@
   private void updateOperationErrMsgAndResCode()
   {
     setResultCode(ResultCode.NO_SUCH_OBJECT);
-    appendErrorMessage(getMessage(MSGID_MODDN_NO_BACKEND_FOR_CURRENT_ENTRY,
-        String.valueOf(entryDN)));
+    appendErrorMessage(ERR_MODDN_NO_BACKEND_FOR_CURRENT_ENTRY.get(
+            String.valueOf(entryDN)));
   }
 
 
@@ -990,8 +984,7 @@
       if ((parentDN == null) || parentDN.isNullDN())
       {
         setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-        appendErrorMessage(getMessage(MSGID_MODDN_NO_PARENT,
-            String.valueOf(entryDN)));
+        appendErrorMessage(ERR_MODDN_NO_PARENT.get(String.valueOf(entryDN)));
       }
       newDN = parentDN.concat(newRDN);
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/ModifyOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/ModifyOperationBasis.java
index 5d7e6f8..efa653c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/ModifyOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/ModifyOperationBasis.java
@@ -26,6 +26,8 @@
  */
 package org.opends.server.core;
 
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.Message;
 
 
 import static org.opends.server.core.CoreConstants.LOG_ELEMENT_ENTRY_DN;
@@ -38,8 +40,7 @@
 import static org.opends.server.loggers.AccessLogger.logModifyResponse;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.StaticUtils.getExceptionMessage;
 
 import java.util.ArrayList;
@@ -56,8 +57,6 @@
 import org.opends.server.protocols.ldap.LDAPModification;
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.Operation;
 import org.opends.server.types.RawModification;
 import org.opends.server.types.AbstractOperation;
@@ -222,7 +221,7 @@
         }
 
         setResultCode(de.getResultCode());
-        appendErrorMessage(de.getErrorMessage());
+        appendErrorMessage(de.getMessageObject());
       }
     }
     return entryDN;
@@ -277,7 +276,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, le);
         }
         setResultCode(ResultCode.valueOf(le.getResultCode()));
-        appendErrorMessage(le.getMessage());
+        appendErrorMessage(le.getMessageObject());
         modifications = null;
       }
     }
@@ -297,16 +296,16 @@
    * {@inheritDoc}
    */
   public final void disconnectClient(DisconnectReason disconnectReason,
-      boolean sendNotification, String message,
-      int messageID)
+                                     boolean sendNotification, Message message
+  )
   {
     // Before calling clientConnection.disconnect, we need to mark this
     // operation as cancelled so that the attempt to cancel it later won't cause
     // an unnecessary delay.
     setCancelResult(CancelResult.CANCELED);
 
-    clientConnection.disconnect(disconnectReason, sendNotification, message,
-        messageID);
+    clientConnection.disconnect(disconnectReason, sendNotification,
+            message);
   }
 
   /**
@@ -345,7 +344,7 @@
     String resultCode = String.valueOf(getResultCode().getIntValue());
 
     String errorMessage;
-    StringBuilder errorMessageBuffer = getErrorMessage();
+    MessageBuilder errorMessageBuffer = getErrorMessage();
     if (errorMessageBuffer == null)
     {
       errorMessage = null;
@@ -565,8 +564,7 @@
         // result and return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREPARSE_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
+        appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get());
 
         setProcessingStopTime();
 
@@ -755,13 +753,9 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int    msgID   = MSGID_MODIFY_ERROR_NOTIFYING_PERSISTENT_SEARCH;
-              String message = getMessage(msgID,
-                                          String.valueOf(persistentSearch),
-                                          getExceptionMessage(e));
-              logError(ErrorLogCategory.CORE_SERVER,
-                       ErrorLogSeverity.SEVERE_ERROR,
-                       message, msgID);
+              Message message = ERR_MODIFY_ERROR_NOTIFYING_PERSISTENT_SEARCH.
+                  get(String.valueOf(persistentSearch), getExceptionMessage(e));
+              logError(message);
 
               DirectoryServer.deregisterPersistentSearch(persistentSearch);
             }
@@ -781,8 +775,8 @@
   private void updateOperationErrMsgAndResCode()
   {
     setResultCode(ResultCode.NO_SUCH_OBJECT);
-    appendErrorMessage(getMessage(MSGID_MODIFY_NO_SUCH_ENTRY,
-                                  String.valueOf(getEntryDN())));
+    appendErrorMessage(
+            ERR_MODIFY_NO_SUCH_ENTRY.get(String.valueOf(getEntryDN())));
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/MonitorConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/MonitorConfigManager.java
index 25e5abf..5b521a9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/MonitorConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/MonitorConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -45,14 +46,12 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -131,9 +130,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          logError(ie.getMessageObject());
           continue;
         }
       }
@@ -147,7 +144,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       MonitorProviderCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -160,7 +157,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -179,7 +176,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -204,7 +201,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -223,7 +220,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       MonitorProviderCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // It will always be acceptable to delete or disable a monitor provider.
     return true;
@@ -239,7 +236,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     MonitorProvider monitor = monitors.remove(configuration.dn());
     if (monitor != null)
@@ -259,7 +256,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       MonitorProviderCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -272,7 +269,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -291,7 +288,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing monitor provider if it's already enabled.
@@ -347,7 +344,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -402,11 +399,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_MONITOR_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_MONITOR_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/NetworkGroup.java b/opendj-sdk/opends/src/server/org/opends/server/core/NetworkGroup.java
index a510884..3cda3de 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/NetworkGroup.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/NetworkGroup.java
@@ -25,10 +25,8 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
-
-
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import org.opends.messages.Message;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.Validator.ensureNotNull;
 
 import java.util.TreeMap;
@@ -124,10 +122,10 @@
       // The network group must not be already registered
       if (registeredNetworkGroups.containsKey(networkGroupID))
       {
-        int msgID = MSGID_REGISTER_NETWORK_GROUP_ALREADY_EXISTS;
-        String message = getMessage(msgID, networkGroupID);
+        Message message = ERR_REGISTER_NETWORK_GROUP_ALREADY_EXISTS.get(
+                          networkGroupID);
         throw new DirectoryException(
-            ResultCode.UNWILLING_TO_PERFORM, message, msgID);
+            ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
       TreeMap<String, NetworkGroup> newRegisteredNetworkGroups =
@@ -341,11 +339,9 @@
   /**
    * Deregisters a workflow node with the network group.
    *
-   * @param workflowNode  the workflow node to deregister
+   * @param workflow  the workflow node to deregister
    */
-  private void deregisterWorkflow(
-      Workflow workflow
-      )
+  private void deregisterWorkflow(Workflow workflow)
   {
     // true as soon as the workflow has been deregistered
     boolean deregistered = false;
@@ -401,10 +397,10 @@
       // The workflow must not be already registered
       if (registeredWorkflowNodes.containsKey(workflowID))
       {
-        int msgID = MSGID_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS;
-        String message = getMessage(msgID, workflowID, networkGroupID);
+        Message message = ERR_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS.get(
+          workflowID, networkGroupID);
         throw new DirectoryException(
-            ResultCode.UNWILLING_TO_PERFORM, message, msgID);
+            ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
       TreeMap<String, WorkflowTopologyNode> newRegisteredWorkflowNodes =
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/OperationWrapper.java b/opendj-sdk/opends/src/server/org/opends/server/core/OperationWrapper.java
index af9b4bf..914964d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/OperationWrapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/OperationWrapper.java
@@ -26,6 +26,9 @@
  */
 package org.opends.server.core;
 
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.Message;
+
 import java.util.List;
 import java.util.Map;
 
@@ -81,7 +84,7 @@
   /**
    * {@inheritDoc}
    */
-  public void appendAdditionalLogMessage(String message)
+  public void appendAdditionalLogMessage(Message message)
   {
     operation.appendAdditionalLogMessage(message);
   }
@@ -89,7 +92,7 @@
   /**
    * {@inheritDoc}
    */
-  public void appendErrorMessage(String message)
+  public void appendErrorMessage(Message message)
   {
     operation.appendErrorMessage(message);
   }
@@ -106,13 +109,13 @@
    * {@inheritDoc}
    */
   public void disconnectClient(
-    DisconnectReason disconnectReason,
-    boolean sendNotification,
-    String message,
-    int messageID)
+          DisconnectReason disconnectReason,
+          boolean sendNotification,
+          Message message
+  )
   {
     operation.disconnectClient(
-      disconnectReason, sendNotification, message, messageID);
+      disconnectReason, sendNotification, message);
   }
 
   /**
@@ -126,7 +129,7 @@
   /**
    * {@inheritDoc}
    */
-  public StringBuilder getAdditionalLogMessage()
+  public MessageBuilder getAdditionalLogMessage()
   {
     return operation.getAdditionalLogMessage();
   }
@@ -206,7 +209,7 @@
   /**
    * {@inheritDoc}
    */
-  public StringBuilder getErrorMessage()
+  public MessageBuilder getErrorMessage()
   {
     return operation.getErrorMessage();
   }
@@ -374,7 +377,7 @@
   /**
    * {@inheritDoc}
    */
-  public void setAdditionalLogMessage(StringBuilder additionalLogMessage)
+  public void setAdditionalLogMessage(MessageBuilder additionalLogMessage)
   {
     operation.setAdditionalLogMessage(additionalLogMessage);
   }
@@ -430,7 +433,7 @@
   /**
    * {@inheritDoc}
    */
-  public void setErrorMessage(StringBuilder errorMessage)
+  public void setErrorMessage(MessageBuilder errorMessage)
   {
     operation.setErrorMessage(errorMessage);
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordGeneratorConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordGeneratorConfigManager.java
index 734203f..fc1818c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordGeneratorConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordGeneratorConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -46,14 +47,12 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 
@@ -134,9 +133,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          logError(ie.getMessageObject());
           continue;
         }
       }
@@ -148,7 +145,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PasswordGeneratorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -161,7 +158,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -179,7 +176,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing generator if it's already enabled.
@@ -236,7 +233,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -253,7 +250,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       PasswordGeneratorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -266,7 +263,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -284,7 +281,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -310,7 +307,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -327,7 +324,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(
-      PasswordGeneratorCfg configuration, List<String> unacceptableReasons)
+      PasswordGeneratorCfg configuration, List<Message> unacceptableReasons)
   {
     // A delete should always be acceptable, so just return true.
     return true;
@@ -407,7 +404,7 @@
                                             PasswordGeneratorCfg.class,
                                             List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(generator, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -415,7 +412,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -424,10 +421,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_PWGENERATOR_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_PWGENERATOR_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -435,11 +431,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_PWGENERATOR_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_PWGENERATOR_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicy.java b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicy.java
index 20f02bf..1383260 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicy.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicy.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -58,8 +59,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -285,10 +285,9 @@
         AttributeType pwAttrType = DirectoryServer.getAttributeType(lowerName);
         if (pwAttrType == null)
         {
-          msgID = MSGID_PWPOLICY_UNDEFINED_PASSWORD_ATTRIBUTE;
-          String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                String.valueOf(passwordAttr));
-          throw new ConfigException(msgID, message);
+          Message message = ERR_PWPOLICY_UNDEFINED_PASSWORD_ATTRIBUTE.get(
+              String.valueOf(configEntryDN), String.valueOf(passwordAttr));
+          throw new ConfigException(message);
         }
 
         String syntaxOID = pwAttrType.getSyntaxOID();
@@ -310,11 +309,10 @@
             syntax = syntaxOID;
           }
 
-          msgID = MSGID_PWPOLICY_INVALID_PASSWORD_ATTRIBUTE_SYNTAX;
-          String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                      String.valueOf(passwordAttr),
-                                      String.valueOf(syntax));
-          throw new ConfigException(msgID, message);
+          Message message = ERR_PWPOLICY_INVALID_PASSWORD_ATTRIBUTE_SYNTAX.
+              get(String.valueOf(configEntryDN), String.valueOf(passwordAttr),
+                  String.valueOf(syntax));
+          throw new ConfigException(message);
         }
       }
     }
@@ -329,10 +327,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_PWPOLICY_CANNOT_DETERMINE_PASSWORD_ATTRIBUTE;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWPOLICY_CANNOT_DETERMINE_PASSWORD_ATTRIBUTE.get(
+          String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -344,9 +341,9 @@
     {
       if (storageSchemes == null)
       {
-        msgID = MSGID_PWPOLICY_NO_DEFAULT_STORAGE_SCHEMES;
-        String message = getMessage(msgID, String.valueOf(configEntryDN));
-        throw new ConfigException(msgID, message);
+        Message message = ERR_PWPOLICY_NO_DEFAULT_STORAGE_SCHEMES.get(
+            String.valueOf(configEntryDN));
+        throw new ConfigException(message);
       }
       else
       {
@@ -367,10 +364,9 @@
 
           if (scheme == null)
           {
-            msgID = MSGID_PWPOLICY_NO_SUCH_DEFAULT_SCHEME;
-            String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                        String.valueOf(schemeName));
-            throw new ConfigException(msgID, message);
+            Message message = ERR_PWPOLICY_NO_SUCH_DEFAULT_SCHEME.get(
+                String.valueOf(configEntryDN), String.valueOf(schemeName));
+            throw new ConfigException(message);
           }
           else
           {
@@ -393,10 +389,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_PWPOLICY_CANNOT_DETERMINE_DEFAULT_STORAGE_SCHEMES;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWPOLICY_CANNOT_DETERMINE_DEFAULT_STORAGE_SCHEMES.
+          get(String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -418,10 +413,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_PWPOLICY_CANNOT_DETERMINE_DEPRECATED_STORAGE_SCHEMES;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+ERR_PWPOLICY_CANNOT_DETERMINE_DEPRECATED_STORAGE_SCHEMES.
+            get(String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -444,10 +439,9 @@
                validator = DirectoryServer.getPasswordValidator(validatorDN);
           if (validator == null)
           {
-            msgID = MSGID_PWPOLICY_NO_SUCH_VALIDATOR;
-            String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                        String.valueOf(validatorDN));
-            throw new ConfigException(msgID, message);
+            Message message = ERR_PWPOLICY_NO_SUCH_VALIDATOR.get(
+                String.valueOf(configEntryDN), String.valueOf(validatorDN));
+            throw new ConfigException(message);
           }
 
           validators.put(validatorDN, validator);
@@ -467,10 +461,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_PWPOLICY_CANNOT_DETERMINE_PASSWORD_VALIDATORS;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWPOLICY_CANNOT_DETERMINE_PASSWORD_VALIDATORS.get(
+          String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -489,10 +482,9 @@
                DirectoryServer.getAccountStatusNotificationHandler(handlerDN);
           if (handler == null)
           {
-            msgID = MSGID_PWPOLICY_NO_SUCH_NOTIFICATION_HANDLER;
-            String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                        String.valueOf(handlerDN));
-            throw new ConfigException(msgID, message);
+            Message message = ERR_PWPOLICY_NO_SUCH_NOTIFICATION_HANDLER.get(
+                String.valueOf(configEntryDN), String.valueOf(handlerDN));
+            throw new ConfigException(message);
           }
 
           handlers.put(handlerDN, handler);
@@ -512,10 +504,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_PWPOLICY_CANNOT_DETERMINE_NOTIFICATION_HANDLERS;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWPOLICY_CANNOT_DETERMINE_NOTIFICATION_HANDLERS.get(
+          String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -546,10 +537,9 @@
              DirectoryServer.getPasswordGenerator(passGenDN);
         if (generator == null)
         {
-          msgID = MSGID_PWPOLICY_NO_SUCH_GENERATOR;
-          String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                String.valueOf(passGenDN));
-          throw new ConfigException(msgID, message);
+          Message message = ERR_PWPOLICY_NO_SUCH_GENERATOR.get(
+              String.valueOf(configEntryDN), String.valueOf(passGenDN));
+          throw new ConfigException(message);
         }
 
         this.passwordGeneratorDN = passGenDN;
@@ -567,10 +557,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_PWPOLICY_CANNOT_DETERMINE_PASSWORD_GENERATOR;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWPOLICY_CANNOT_DETERMINE_PASSWORD_GENERATOR.get(
+          String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -612,9 +601,10 @@
     if ((! this.expirePasswordsWithoutWarning()) &&
         (this.getWarningInterval() <= 0))
     {
-      msgID = MSGID_PWPOLICY_MUST_HAVE_WARNING_IF_NOT_EXPIRE_WITHOUT_WARNING;
-      String message = getMessage(msgID, String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message =
+        ERR_PWPOLICY_MUST_HAVE_WARNING_IF_NOT_EXPIRE_WITHOUT_WARNING.
+            get(String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
 
     // Determine whether to allow user changes for expired passwords.
@@ -668,10 +658,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_PWPOLICY_CANNOT_DETERMINE_REQUIRE_CHANGE_BY_TIME;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWPOLICY_CANNOT_DETERMINE_REQUIRE_CHANGE_BY_TIME.
+          get(String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -688,11 +677,10 @@
         AttributeType attrType = DirectoryServer.getAttributeType(lowerName);
         if (attrType == null)
         {
-          msgID = MSGID_PWPOLICY_UNDEFINED_LAST_LOGIN_TIME_ATTRIBUTE;
-          String message =
-               getMessage(msgID, String.valueOf(configEntryDN),
-                          String.valueOf(lastLoginTimeAtt));
-          throw new ConfigException(msgID, message);
+          Message message = ERR_PWPOLICY_UNDEFINED_LAST_LOGIN_TIME_ATTRIBUTE.
+              get(String.valueOf(configEntryDN),
+                  String.valueOf(lastLoginTimeAtt));
+          throw new ConfigException(message);
         }
 
         this.lastLoginTimeAttribute = attrType;
@@ -709,10 +697,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_PWPOLICY_CANNOT_DETERMINE_LAST_LOGIN_TIME_ATTR;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWPOLICY_CANNOT_DETERMINE_LAST_LOGIN_TIME_ATTR.get(
+          String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
     // Get the last login time format.  If specified, it must be a valid format
@@ -733,10 +720,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          msgID = MSGID_PWPOLICY_INVALID_LAST_LOGIN_TIME_FORMAT;
-          String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                      String.valueOf(formatString));
-          throw new ConfigException(msgID, message);
+          Message message = ERR_PWPOLICY_INVALID_LAST_LOGIN_TIME_FORMAT.get(
+              String.valueOf(configEntryDN), String.valueOf(formatString));
+          throw new ConfigException(message);
         }
 
         this.lastLoginTimeFormat = formatString;
@@ -753,10 +739,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_PWPOLICY_CANNOT_DETERMINE_LAST_LOGIN_TIME_FORMAT;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWPOLICY_CANNOT_DETERMINE_LAST_LOGIN_TIME_FORMAT.
+          get(String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -781,10 +766,10 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            msgID = MSGID_PWPOLICY_INVALID_PREVIOUS_LAST_LOGIN_TIME_FORMAT;
-            String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                        String.valueOf(s));
-            throw new ConfigException(msgID, message);
+            Message message =
+              ERR_PWPOLICY_INVALID_PREVIOUS_LAST_LOGIN_TIME_FORMAT.
+                  get(String.valueOf(configEntryDN), String.valueOf(s));
+            throw new ConfigException(message);
           }
         }
 
@@ -803,10 +788,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_PWPOLICY_CANNOT_DETERMINE_PREVIOUS_LAST_LOGIN_TIME_FORMAT;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+ERR_PWPOLICY_CANNOT_DETERMINE_PREVIOUS_LAST_LOGIN_TIME_FORMAT.
+            get(String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -831,18 +816,18 @@
     // entry, since it is required.
     if (passwordAttribute == null)
     {
-      msgID = MSGID_PWPOLICY_NO_PASSWORD_ATTRIBUTE;
-      String message = getMessage(msgID, String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_PWPOLICY_NO_PASSWORD_ATTRIBUTE.get(String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
 
     // Ensure that at least one default password storage scheme was included in
     // the configuration entry, since it is required.
     if (defaultStorageSchemes.isEmpty())
     {
-      msgID = MSGID_PWPOLICY_NO_DEFAULT_STORAGE_SCHEMES;
-      String message = getMessage(msgID, String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message = ERR_PWPOLICY_NO_DEFAULT_STORAGE_SCHEMES.get(
+          String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
 
     // If both a maximum password age and a warning interval are provided, then
@@ -856,16 +841,17 @@
       {
         if ((warnInterval + minimumPasswordAge) >= maximumPasswordAge)
         {
-          msgID = MSGID_PWPOLICY_MIN_AGE_PLUS_WARNING_GREATER_THAN_MAX_AGE;
-          String message = getMessage(msgID, String.valueOf(configEntryDN));
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_PWPOLICY_MIN_AGE_PLUS_WARNING_GREATER_THAN_MAX_AGE.
+                get(String.valueOf(configEntryDN));
+          throw new ConfigException(message);
         }
       }
       else if (warnInterval >= maximumPasswordAge)
       {
-        msgID = MSGID_PWPOLICY_WARNING_INTERVAL_LARGER_THAN_MAX_AGE;
-        String message = getMessage(msgID, String.valueOf(configEntryDN));
-        throw new ConfigException(msgID, message);
+        Message message = ERR_PWPOLICY_WARNING_INTERVAL_LARGER_THAN_MAX_AGE.get(
+            String.valueOf(configEntryDN));
+        throw new ConfigException(message);
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyConfig.java b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyConfig.java
index 464fe20..0feb81b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyConfig.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyConfig.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -39,8 +40,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.CoreMessages.*;
+
 
 /**
  This class is the interface between the password policy configurable component
@@ -84,7 +85,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      PasswordPolicyCfg configuration, List<String> unacceptableReasons)
+      PasswordPolicyCfg configuration, List<Message> unacceptableReasons)
   {
     assert configuration.dn().equals(this.currentPolicy.getConfigEntryDN() )
             : "Internal Error: mismatch between DN of configuration entry and"
@@ -101,7 +102,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
 
-      unacceptableReasons.add(ce.getMessage());
+      unacceptableReasons.add(ce.getMessageObject());
       return false;
     }
     catch (InitializationException ie)
@@ -111,7 +112,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
 
-      unacceptableReasons.add(ie.getMessage());
+      unacceptableReasons.add(ie.getMessageObject());
       return false;
     }
 
@@ -143,8 +144,8 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
-      ArrayList<String> messages = new ArrayList<String>();
-      messages.add(ce.getMessage());
+      ArrayList<Message> messages = new ArrayList<Message>();
+      messages.add(ce.getMessageObject());
       return new ConfigChangeResult(
               DirectoryServer.getServerErrorResultCode(),
               /*adminActionRequired*/ true, messages);
@@ -155,8 +156,8 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
-      ArrayList<String> messages = new ArrayList<String>();
-      messages.add(ie.getMessage());
+      ArrayList<Message> messages = new ArrayList<Message>();
+      messages.add(ie.getMessageObject());
       return new ConfigChangeResult(
               DirectoryServer.getServerErrorResultCode(),
               /*adminActionRequired*/ true, messages);
@@ -164,10 +165,9 @@
 
     // If we've made it here, then everything is acceptable.  Apply the new
     // configuration.
-    ArrayList<String> messages = new ArrayList<String>();
-    int msgID = MSGID_PWPOLICY_UPDATED_POLICY;
-    messages.add(getMessage(msgID, String.valueOf(p.getConfigEntryDN())));
-
+    ArrayList<Message> messages = new ArrayList<Message>();
+    messages.add(INFO_PWPOLICY_UPDATED_POLICY.get(
+            String.valueOf(p.getConfigEntryDN())));
     this.currentPolicy = p;
 
     return new ConfigChangeResult(ResultCode.SUCCESS,
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyConfigManager.java
index 2a2d7ce..6fd3d37 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,8 @@
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -103,18 +104,16 @@
     // there are no policies defined, so that's a problem.
     if (passwordPoliciesName.length == 0)
     {
-      int    msgID   = MSGID_CONFIG_PWPOLICY_NO_POLICIES;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_PWPOLICY_NO_POLICIES.get();
+      throw new ConfigException(message);
     }
 
 
     // Get the DN of the default password policy from the core configuration.
     if( null == DirectoryServer.getDefaultPasswordPolicyDN())
     {
-      int    msgID   = MSGID_CONFIG_PWPOLICY_NO_DEFAULT_POLICY;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_PWPOLICY_NO_DEFAULT_POLICY.get();
+      throw new ConfigException(message);
     }
 
 
@@ -135,25 +134,22 @@
       }
       catch (ConfigException ce)
       {
-        int msgID = MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG;
-        String message = getMessage(msgID, String
-            .valueOf(passwordPolicyConfiguration.dn()), ce.getMessage());
-        throw new ConfigException(msgID, message, ce);
+        Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+            String.valueOf(passwordPolicyConfiguration.dn()), ce.getMessage());
+        throw new ConfigException(message, ce);
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG;
-        String message = getMessage(msgID, String
-            .valueOf(passwordPolicyConfiguration.dn()), ie.getMessage());
-        throw new InitializationException(msgID, message, ie);
+        Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+            String.valueOf(passwordPolicyConfiguration.dn()), ie.getMessage());
+        throw new InitializationException(message, ie);
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG;
-        String message = getMessage(msgID, String
-            .valueOf(passwordPolicyConfiguration.dn()),
-            stackTraceToSingleLineString(e));
-        throw new InitializationException(msgID, message, e);
+        Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.
+            get(String.valueOf(passwordPolicyConfiguration.dn()),
+                stackTraceToSingleLineString(e));
+        throw new InitializationException(message, e);
       }
     }
 
@@ -162,10 +158,10 @@
     // registered, then fail.
     if (null == DirectoryServer.getDefaultPasswordPolicy())
     {
-      int    msgID   = MSGID_CONFIG_PWPOLICY_MISSING_DEFAULT_POLICY;
       DN defaultPolicyDN = DirectoryServer.getDefaultPasswordPolicyDN();
-      String message = getMessage(msgID, String.valueOf(defaultPolicyDN));
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CONFIG_PWPOLICY_MISSING_DEFAULT_POLICY.get(
+              String.valueOf(defaultPolicyDN));
+      throw new ConfigException(message);
     }
   }
 
@@ -175,7 +171,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(PasswordPolicyCfg configuration,
-                                       List<String> unacceptableReason)
+                                       List<Message> unacceptableReason)
   {
     // See if we can create a password policy from the provided configuration
     // entry.  If so, then it's acceptable.
@@ -185,25 +181,25 @@
     }
     catch (ConfigException ce)
     {
-      int    msgID   = MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG;
-      String message = getMessage(msgID, String.valueOf(configuration.dn()),
+      Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+              String.valueOf(configuration.dn()),
                                   ce.getMessage());
       unacceptableReason.add(message);
       return false;
     }
     catch (InitializationException ie)
     {
-      int    msgID   = MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG;
-      String message = getMessage(msgID, String.valueOf(configuration.dn()),
+      Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+              String.valueOf(configuration.dn()),
                                   ie.getMessage());
       unacceptableReason.add(message);
       return false;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG;
-      String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+              String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
       unacceptableReason.add(message);
       return false;
     }
@@ -222,7 +218,7 @@
       PasswordPolicyCfg configuration)
   {
     DN                configEntryDN       = configuration.dn();
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // See if we can create a password policy from the provided configuration
@@ -238,27 +234,27 @@
     }
     catch (ConfigException ce)
     {
-      int msgID = MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG;
-      messages.add(getMessage(msgID, String.valueOf(configuration.dn()),
-                              ce.getMessage()));
+      messages.add(ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+              String.valueOf(configuration.dn()),
+              ce.getMessage()));
 
       return new ConfigChangeResult(ResultCode.CONSTRAINT_VIOLATION, false,
                                     messages);
     }
     catch (InitializationException ie)
     {
-      int msgID = MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG;
-      messages.add(getMessage(msgID, String.valueOf(configuration.dn()),
-                              ie.getMessage()));
+      messages.add(ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+              String.valueOf(configuration.dn()),
+              ie.getMessage()));
 
       return new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                     false, messages);
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG;
-      messages.add(getMessage(msgID, String.valueOf(configuration.dn()),
-                              stackTraceToSingleLineString(e)));
+      messages.add(ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+              String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e)));
 
       return new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                     false, messages);
@@ -271,7 +267,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(
-      PasswordPolicyCfg configuration, List<String> unacceptableReason)
+      PasswordPolicyCfg configuration, List<Message> 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
@@ -281,8 +277,8 @@
     if ((defaultPolicyDN != null) &&
         defaultPolicyDN.equals(configuration.dn()))
     {
-      int msgID = MSGID_CONFIG_PWPOLICY_CANNOT_DELETE_DEFAULT_POLICY;
-      String message = getMessage(msgID, String.valueOf(defaultPolicyDN));
+      Message message = WARN_CONFIG_PWPOLICY_CANNOT_DELETE_DEFAULT_POLICY.get(
+              String.valueOf(defaultPolicyDN));
       unacceptableReason.add(message);
       return false;
     }
@@ -304,14 +300,13 @@
     // 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<String> messages = new ArrayList<String>(1);
+    ArrayList<Message> messages = new ArrayList<Message>(1);
     DN policyDN = configuration.dn();
     DN defaultPolicyDN = DirectoryServer.getDefaultPasswordPolicyDN();
     if ((defaultPolicyDN != null) && defaultPolicyDN.equals(policyDN))
     {
-      int msgID = MSGID_CONFIG_PWPOLICY_CANNOT_DELETE_DEFAULT_POLICY;
-      messages.add(getMessage(msgID, String.valueOf(defaultPolicyDN)));
-
+      messages.add(WARN_CONFIG_PWPOLICY_CANNOT_DELETE_DEFAULT_POLICY.get(
+              String.valueOf(defaultPolicyDN)));
       return new ConfigChangeResult(ResultCode.CONSTRAINT_VIOLATION, false,
                                     messages);
     }
@@ -323,8 +318,8 @@
       configuration.removeChangeListener(config);
     }
 
-    int msgID = MSGID_CONFIG_PWPOLICY_REMOVED_POLICY;
-    messages.add(getMessage(msgID, String.valueOf(policyDN)));
+    messages.add(INFO_CONFIG_PWPOLICY_REMOVED_POLICY.get(
+            String.valueOf(policyDN)));
 
     return new ConfigChangeResult(ResultCode.SUCCESS, false, messages);
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyState.java b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyState.java
index a73bc74..ee2ee3d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyState.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordPolicyState.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import java.text.SimpleDateFormat;
@@ -64,8 +65,6 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.Modification;
 import org.opends.server.types.ModificationType;
 import org.opends.server.types.Operation;
@@ -74,10 +73,9 @@
 import org.opends.server.util.TimeThread;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -322,11 +320,10 @@
                        stackTraceToSingleLineString(e));
           }
 
-          int    msgID   = MSGID_PWPSTATE_CANNOT_DECODE_SUBENTRY_VALUE_AS_DN;
-          String message = getMessage(msgID, v.getStringValue(), userDNString,
-                                      e.getMessage());
+          Message message = ERR_PWPSTATE_CANNOT_DECODE_SUBENTRY_VALUE_AS_DN.get(
+              v.getStringValue(), userDNString, e.getMessage());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message,
-                                       msgID, e);
+                                       e);
         }
 
         PasswordPolicy policy = DirectoryServer.getPasswordPolicy(subentryDN);
@@ -339,12 +336,10 @@
                        String.valueOf(subentryDN), userDNString);
           }
 
-          int msgID = MSGID_PWPSTATE_NO_SUCH_POLICY;
-          String message = getMessage(msgID, userDNString,
-                                      String.valueOf(subentryDN));
+          Message message = ERR_PWPSTATE_NO_SUCH_POLICY.get(
+              userDNString, String.valueOf(subentryDN));
           throw new DirectoryException(
-               DirectoryServer.getServerErrorResultCode(), message,
-               msgID);
+               DirectoryServer.getServerErrorResultCode(), message);
         }
 
         if (debug)
@@ -470,12 +465,11 @@
                          userDNString, stackTraceToSingleLineString(e));
           }
 
-          int msgID = MSGID_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME;
-          String message = getMessage(msgID, v.getStringValue(),
-                                      attributeType.getNameOrOID(),
-                                      userDNString, String.valueOf(e));
+          Message message = ERR_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME.
+              get(v.getStringValue(), attributeType.getNameOrOID(),
+                  userDNString, String.valueOf(e));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID, e);
+                                       message, e);
         }
         break ;
       }
@@ -545,12 +539,11 @@
                            userDNString, stackTraceToSingleLineString(e));
             }
 
-            int msgID = MSGID_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME;
-            String message = getMessage(msgID, v.getStringValue(),
-                                        attributeType.getNameOrOID(),
-                                        userDNString, String.valueOf(e));
+            Message message = ERR_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME.
+                get(v.getStringValue(), attributeType.getNameOrOID(),
+                    userDNString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID, e);
+                                         message, e);
           }
         }
       }
@@ -637,12 +630,10 @@
                        userDNString);
         }
 
-        int msgID = MSGID_PWPSTATE_CANNOT_DECODE_BOOLEAN;
-        String message = getMessage(msgID, valueString,
-                                    attributeType.getNameOrOID(),
-                                    userDNString);
+        Message message = ERR_PWPSTATE_CANNOT_DECODE_BOOLEAN.get(
+            valueString, attributeType.getNameOrOID(), userDNString);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -3678,7 +3669,7 @@
   public boolean passwordIsAcceptable(Operation operation, Entry userEntry,
                                       ByteString newPassword,
                                       Set<ByteString> currentPasswords,
-                                      StringBuilder invalidReason)
+                                      MessageBuilder invalidReason)
   {
     for (DN validatorDN : passwordPolicy.getPasswordValidators().keySet())
     {
@@ -4608,12 +4599,11 @@
    * @param  notificationType  The type for the account status notification.
    * @param  userDN            The DN of the user entry to which this
    *                           notification applies.
-   * @param  messageID         The unique ID for the notification.
    * @param  message           The human-readable message for the notification.
    */
   public void generateAccountStatusNotification(
-                   AccountStatusNotificationType notificationType,
-                   DN userDN, int messageID, String message)
+          AccountStatusNotificationType notificationType,
+          DN userDN, Message message)
   {
     Collection<AccountStatusNotificationHandler> handlers =
          passwordPolicy.getAccountStatusNotificationHandlers().values();
@@ -4624,8 +4614,8 @@
 
     for (AccountStatusNotificationHandler handler : handlers)
     {
-      handler.handleStatusNotification(notificationType, userDN, messageID,
-                                       message);
+      handler.handleStatusNotification(notificationType, userDN,
+              message);
     }
   }
 
@@ -4703,8 +4693,7 @@
     ResultCode resultCode = internalModify.getResultCode();
     if (resultCode != ResultCode.SUCCESS)
     {
-      int    msgID   = MSGID_PWPSTATE_CANNOT_UPDATE_USER_ENTRY;
-      String message = getMessage(msgID, userDNString,
+      Message 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
@@ -4714,12 +4703,11 @@
           (passwordPolicy.getStateUpdateFailurePolicy() ==
            PasswordPolicyCfgDefn.StateUpdateFailurePolicy.IGNORE)))
       {
-        logError(ErrorLogCategory.PASSWORD_POLICY,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        ErrorLogger.logError(message);
       }
       else
       {
-        throw new DirectoryException(resultCode, message, msgID);
+        throw new DirectoryException(resultCode, message);
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordStorageSchemeConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordStorageSchemeConfigManager.java
index 36a8c5d..92f60a6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordStorageSchemeConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordStorageSchemeConfigManager.java
@@ -25,11 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.lang.reflect.Method;
@@ -137,7 +138,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       PasswordStorageSchemeCfg configuration,
-      List<String>             unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -155,7 +156,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         status = false;
       }
     }
@@ -174,7 +175,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<String>()
+        ResultCode.SUCCESS, false, new ArrayList<Message>()
         );
 
     // Get the configuration entry DN and the associated
@@ -220,7 +221,7 @@
     }
     catch (InitializationException ie)
     {
-      changeResult.addMessage (ie.getMessage());
+      changeResult.addMessage (ie.getMessageObject());
       changeResult.setResultCode (DirectoryServer.getServerErrorResultCode());
       return changeResult;
     }
@@ -235,7 +236,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       PasswordStorageSchemeCfg configuration,
-      List<String>             unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -245,8 +246,8 @@
     DN configEntryDN = configuration.dn();
     if (storageSchemes.containsKey(configEntryDN))
     {
-      int    msgID   = MSGID_CONFIG_PWSCHEME_EXISTS;
-      String message = getMessage(msgID, String.valueOf(configEntryDN));
+      Message message = ERR_CONFIG_PWSCHEME_EXISTS.get(
+              String.valueOf(configEntryDN));
       unacceptableReasons.add (message);
       status = false;
     }
@@ -264,7 +265,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add (ie.getMessage());
+        unacceptableReasons.add (ie.getMessageObject());
         status = false;
       }
     }
@@ -283,7 +284,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<String>()
+        ResultCode.SUCCESS, false, new ArrayList<Message>()
         );
 
     // Register a change listener with it so we can be notified of changes
@@ -301,7 +302,7 @@
       }
       catch (InitializationException ie)
       {
-        changeResult.addMessage (ie.getMessage());
+        changeResult.addMessage (ie.getMessageObject());
         changeResult.setResultCode (DirectoryServer.getServerErrorResultCode());
         return changeResult;
       }
@@ -317,7 +318,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       PasswordStorageSchemeCfg configuration,
-      List<String>             unacceptableReasons
+      List<Message> 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<String>()
+        ResultCode.SUCCESS, false, new ArrayList<Message>()
         );
 
     uninstallPasswordStorageScheme (configuration.dn());
@@ -432,7 +433,7 @@
                              "isConfigurationAcceptable",
                              PasswordStorageSchemeCfg.class, List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(passwordStorageScheme,
                                                      configuration,
                                                      unacceptableReasons);
@@ -441,7 +442,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -450,10 +451,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_PWSCHEME_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_PWSCHEME_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -461,13 +461,11 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_PWSCHEME_INITIALIZATION_FAILED;
-      String message = getMessage(
-          msgID, className,
+      Message message = ERR_CONFIG_PWSCHEME_INITIALIZATION_FAILED.get(className,
           String.valueOf(configuration.dn()),
           stackTraceToSingleLineString(e)
           );
-      throw new InitializationException(msgID, message, e);
+      throw new InitializationException(message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordValidatorConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordValidatorConfigManager.java
index 3e5d3dc..810d6f1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/PasswordValidatorConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/PasswordValidatorConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -46,14 +47,12 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -136,9 +135,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          logError(ie.getMessageObject());
           continue;
         }
       }
@@ -152,7 +149,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       PasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -165,7 +162,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -184,7 +181,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -210,7 +207,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -230,7 +227,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       PasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // password validator is in use.
@@ -247,7 +244,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     DirectoryServer.deregisterPasswordValidator(configuration.dn());
 
@@ -268,7 +265,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -281,7 +278,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -300,7 +297,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing validator if it's already enabled.
@@ -357,7 +354,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -420,7 +417,7 @@
                                             PasswordValidatorCfg.class,
                                             List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(validator, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -428,7 +425,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -437,10 +434,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_PWVALIDATOR_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_PWVALIDATOR_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -448,11 +444,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_PWVALIDATOR_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_PWVALIDATOR_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/PluginConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/PluginConfigManager.java
index f27d52c..74c459d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/PluginConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/PluginConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -69,8 +70,8 @@
 import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.IntermediateResponse;
 import org.opends.server.types.LDIFExportConfig;
@@ -123,12 +124,13 @@
 import org.opends.server.types.operation.SubordinateModifyDNOperation;
 import org.opends.server.workflowelement.localbackend.*;
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.loggers.ErrorLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.PluginMessages.*;
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.messages.PluginMessages.*;
+
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -351,8 +353,7 @@
       }
       catch (InitializationException ie)
       {
-        logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-                 ie.getMessage(), ie.getMessageID());
+        logError(ie.getMessageObject());
         continue;
       }
     }
@@ -416,15 +417,15 @@
                                                     PluginCfg.class,
                                                     List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(plugin, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
         {
-          StringBuilder buffer = new StringBuilder();
+          MessageBuilder buffer = new MessageBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -433,10 +434,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_PLUGIN_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_PLUGIN_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -444,11 +444,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_PLUGIN_CANNOT_INITIALIZE;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_PLUGIN_CANNOT_INITIALIZE.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 
@@ -908,10 +907,9 @@
           // determination.
           if (pluginArray.length == 0)
           {
-            int    msgID   = MSGID_CONFIG_PLUGIN_EMPTY_ELEMENT_IN_ORDER;
-            String message = getMessage(msgID, pluginType.getName());
-            logError(ErrorLogCategory.CONFIGURATION,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            Message message = WARN_CONFIG_PLUGIN_EMPTY_ELEMENT_IN_ORDER.get(
+                pluginType.getName());
+            logError(message);
           }
         }
         else if (token.equals("*"))
@@ -923,10 +921,9 @@
             // determination.
             if (pluginArray.length == 0)
             {
-              int    msgID   = MSGID_CONFIG_PLUGIN_MULTIPLE_WILDCARDS_IN_ORDER;
-              String message = getMessage(msgID, pluginType.getName());
-              logError(ErrorLogCategory.CONFIGURATION,
-                       ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+              Message message = WARN_CONFIG_PLUGIN_MULTIPLE_WILDCARDS_IN_ORDER.
+                  get(pluginType.getName());
+              logError(message);
             }
           }
           else
@@ -947,10 +944,9 @@
               // make the determination.
               if (pluginArray.length == 0)
               {
-                int    msgID   = MSGID_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES;
-                String message = getMessage(msgID, pluginType.getName(), token);
-                logError(ErrorLogCategory.CONFIGURATION,
-                         ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                Message message = WARN_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES.get(
+                    pluginType.getName(), token);
+                logError(message);
               }
             }
 
@@ -965,10 +961,9 @@
               // make the determination.
               if (pluginArray.length == 0)
               {
-                int    msgID   = MSGID_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES;
-                String message = getMessage(msgID, pluginType.getName(), token);
-                logError(ErrorLogCategory.CONFIGURATION,
-                         ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                Message message = WARN_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES.get(
+                    pluginType.getName(), token);
+                logError(message);
               }
             }
 
@@ -984,10 +979,9 @@
         // determination.
         if (pluginArray.length == 0)
         {
-          int    msgID   = MSGID_CONFIG_PLUGIN_ORDER_NO_WILDCARD;
-          String message = getMessage(msgID, pluginType.getName());
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          Message message =
+              WARN_CONFIG_PLUGIN_ORDER_NO_WILDCARD.get(pluginType.getName());
+          logError(message);
         }
       }
 
@@ -1360,45 +1354,38 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_STARTUP_PLUGIN_EXCEPTION;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_PLUGIN_STARTUP_PLUGIN_EXCEPTION.get(
+                String.valueOf(p.getPluginEntryDN()),
+                stackTraceToSingleLineString(e));
 
-        result = new StartupPluginResult(false, false, msgID, message);
+        result = new StartupPluginResult(false, false, message);
         break;
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_STARTUP_PLUGIN_RETURNED_NULL;
-        String message = getMessage(msgID,
-                                    String.valueOf(p.getPluginEntryDN()));
-
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.FATAL_ERROR,
-                 message, msgID);
-        return new StartupPluginResult(false, false, msgID,message);
+        Message message = ERR_PLUGIN_STARTUP_PLUGIN_RETURNED_NULL.get(
+            String.valueOf(p.getPluginEntryDN()));
+        logError(message);
+        return new StartupPluginResult(false, false, message);
       }
       else if (! result.completedSuccessfully())
       {
         if (result.continueStartup())
         {
-          int    msgID   = MSGID_PLUGIN_STARTUP_PLUGIN_FAIL_CONTINUE;
-          String message = getMessage(msgID,
-                                      String.valueOf(p.getPluginEntryDN()),
-                                      result.getErrorMessage(),
-                                      result.getErrorID());
-          logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_PLUGIN_STARTUP_PLUGIN_FAIL_CONTINUE.
+              get(String.valueOf(p.getPluginEntryDN()),
+                  result.getErrorMessage(),
+                  result.getErrorMessage().getDescriptor().getId());
+          logError(message);
         }
         else
         {
-          int    msgID   = MSGID_PLUGIN_STARTUP_PLUGIN_FAIL_ABORT;
-          String message = getMessage(msgID,
-                                      String.valueOf(p.getPluginEntryDN()),
-                                      result.getErrorMessage(),
-                                      result.getErrorID());
-          logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.FATAL_ERROR,
-                   message, msgID);
+          Message message = ERR_PLUGIN_STARTUP_PLUGIN_FAIL_ABORT.
+              get(String.valueOf(p.getPluginEntryDN()),
+                  result.getErrorMessage(),
+                  result.getErrorMessage().getDescriptor().getId());
+          logError(message);
           return result;
         }
       }
@@ -1422,7 +1409,7 @@
    *
    * @param  reason  The human-readable reason for the shutdown.
    */
-  public void invokeShutdownPlugins(String reason)
+  public void invokeShutdownPlugins(Message reason)
   {
     for (DirectoryServerPlugin p : shutdownPlugins)
     {
@@ -1437,11 +1424,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_SHUTDOWN_PLUGIN_EXCEPTION;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_SHUTDOWN_PLUGIN_EXCEPTION.
+            get(String.valueOf(p.getPluginEntryDN()),
+                stackTraceToSingleLineString(e));
+        logError(message);
       }
     }
   }
@@ -1474,18 +1460,17 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_PLUGIN_POST_CONNECT_PLUGIN_EXCEPTION;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    clientConnection.getConnectionID(),
-                                    clientConnection.getClientAddress(),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_CONNECT_PLUGIN_EXCEPTION.
+            get(String.valueOf(p.getPluginEntryDN()),
+                clientConnection.getConnectionID(),
+                clientConnection.getClientAddress(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         try
         {
           clientConnection.disconnect(DisconnectReason.SERVER_ERROR, true,
-                                      message, msgID);
+                  message);
         }
         catch (Exception e2)
         {
@@ -1501,18 +1486,16 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_CONNECT_PLUGIN_RETURNED_NULL;
-        String message = getMessage(msgID,
-                                    String.valueOf(p.getPluginEntryDN()),
-                                    clientConnection.getConnectionID(),
-                                    clientConnection.getClientAddress());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_CONNECT_PLUGIN_RETURNED_NULL.
+            get(String.valueOf(p.getPluginEntryDN()),
+                clientConnection.getConnectionID(),
+                clientConnection.getClientAddress());
+        logError(message);
 
         try
         {
           clientConnection.disconnect(DisconnectReason.SERVER_ERROR, true,
-                                      message, msgID);
+                  message);
         }
         catch (Exception e)
         {
@@ -1550,17 +1533,15 @@
    * @param  clientConnection  The client connection that has been closed.
    * @param  disconnectReason  The general reason that the connection was
    *                           closed.
-   * @param  messageID         The unique ID for the closure message, or a
-   *                           negative value if there was no message.
    * @param  message           A human-readable message that may provide
    *                           additional information about the closure.
    *
    * @return  The result of processing the post-connect plugins.
    */
   public PostDisconnectPluginResult invokePostDisconnectPlugins(
-                                         ClientConnection clientConnection,
-                                         DisconnectReason disconnectReason,
-                                         int messageID, String message)
+                                        ClientConnection clientConnection,
+                                        DisconnectReason disconnectReason,
+                                        Message message)
   {
     PostDisconnectPluginResult result = null;
 
@@ -1569,7 +1550,7 @@
       try
       {
         result = p.doPostDisconnect(clientConnection, disconnectReason,
-                                    messageID, message);
+                message);
       }
       catch (Exception e)
       {
@@ -1578,13 +1559,12 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID = MSGID_PLUGIN_POST_DISCONNECT_PLUGIN_EXCEPTION;
-        String msg   = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                  clientConnection.getConnectionID(),
-                                  clientConnection.getClientAddress(),
-                                  stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR, msg,
-                 msgID);
+        Message msg = ERR_PLUGIN_POST_DISCONNECT_PLUGIN_EXCEPTION.
+            get(String.valueOf(p.getPluginEntryDN()),
+                clientConnection.getConnectionID(),
+                clientConnection.getClientAddress(),
+                stackTraceToSingleLineString(e));
+        logError(msg);
 
         return new PostDisconnectPluginResult(false);
       }
@@ -1592,12 +1572,11 @@
 
       if (result == null)
       {
-        int    msgID = MSGID_PLUGIN_POST_DISCONNECT_PLUGIN_RETURNED_NULL;
-        String msg   = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                  clientConnection.getConnectionID(),
-                                  clientConnection.getClientAddress());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR, msg,
-                 msgID);
+        Message msg = ERR_PLUGIN_POST_DISCONNECT_PLUGIN_RETURNED_NULL.
+            get(String.valueOf(p.getPluginEntryDN()),
+                clientConnection.getConnectionID(),
+                clientConnection.getClientAddress());
+        logError(msg);
 
         return new PostDisconnectPluginResult(false);
       }
@@ -1647,23 +1626,20 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_LDIF_IMPORT_PLUGIN_EXCEPTION;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    String.valueOf(entry.getDN()),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_LDIF_IMPORT_PLUGIN_EXCEPTION.
+            get(String.valueOf(p.getPluginEntryDN()),
+                String.valueOf(entry.getDN()), stackTraceToSingleLineString(e));
+        logError(message);
 
         return new LDIFPluginResult(false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_LDIF_IMPORT_PLUGIN_RETURNED_NULL;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    String.valueOf(entry.getDN()));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_LDIF_IMPORT_PLUGIN_RETURNED_NULL.
+            get(String.valueOf(p.getPluginEntryDN()),
+                String.valueOf(entry.getDN()));
+        logError(message);
 
         return new LDIFPluginResult(false, false);
       }
@@ -1713,23 +1689,20 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_LDIF_EXPORT_PLUGIN_EXCEPTION;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    String.valueOf(entry.getDN()),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_LDIF_EXPORT_PLUGIN_EXCEPTION.
+            get(String.valueOf(p.getPluginEntryDN()),
+                String.valueOf(entry.getDN()), stackTraceToSingleLineString(e));
+        logError(message);
 
         return new LDIFPluginResult(false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_LDIF_EXPORT_PLUGIN_RETURNED_NULL;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    String.valueOf(entry.getDN()));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_LDIF_EXPORT_PLUGIN_RETURNED_NULL.
+            get(String.valueOf(p.getPluginEntryDN()),
+                String.valueOf(entry.getDN()));
+        logError(message);
 
         return new LDIFPluginResult(false, false);
       }
@@ -1778,16 +1751,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        abandonOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        abandonOperation.getConnectionID(),
-                        abandonOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
+            get(abandonOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                abandonOperation.getConnectionID(),
+                abandonOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         abandonOperation.setResultCode(
                               DirectoryServer.getServerErrorResultCode());
@@ -1798,15 +1768,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        abandonOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        abandonOperation.getConnectionID(),
-                        abandonOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
+            get(abandonOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                abandonOperation.getConnectionID(),
+                String.valueOf(abandonOperation.getOperationID()));
+        logError(message);
 
         abandonOperation.setResultCode(
              DirectoryServer.getServerErrorResultCode());
@@ -1860,16 +1827,12 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        addOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        addOperation.getConnectionID(),
-                        addOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
+            get(addOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                addOperation.getConnectionID(), addOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         addOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         addOperation.appendErrorMessage(message);
@@ -1879,15 +1842,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        addOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        addOperation.getConnectionID(),
-                        addOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
+            get(addOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                addOperation.getConnectionID(),
+                String.valueOf(addOperation.getOperationID()));
+        logError(message);
 
         addOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         addOperation.appendErrorMessage(message);
@@ -1940,16 +1900,12 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        bindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        bindOperation.getConnectionID(),
-                        bindOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
+            get(bindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                bindOperation.getConnectionID(), bindOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         bindOperation.appendErrorMessage(message);
@@ -1959,15 +1915,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        bindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        bindOperation.getConnectionID(),
-                        bindOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
+            get(bindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                bindOperation.getConnectionID(),
+                String.valueOf(bindOperation.getOperationID()));
+        logError(message);
 
         bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         bindOperation.appendErrorMessage(message);
@@ -2020,16 +1973,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        compareOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        compareOperation.getConnectionID(),
-                        compareOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
+            get(compareOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                compareOperation.getConnectionID(),
+                compareOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         compareOperation.setResultCode(
                               DirectoryServer.getServerErrorResultCode());
@@ -2040,15 +1990,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        compareOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        compareOperation.getConnectionID(),
-                        compareOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
+            get(compareOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                compareOperation.getConnectionID(),
+                String.valueOf(compareOperation.getOperationID()));
+        logError(message);
 
         compareOperation.setResultCode(
                               DirectoryServer.getServerErrorResultCode());
@@ -2102,16 +2049,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        deleteOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        deleteOperation.getConnectionID(),
-                        deleteOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
+            get(deleteOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                deleteOperation.getConnectionID(),
+                deleteOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         deleteOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -2122,15 +2066,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        deleteOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        deleteOperation.getConnectionID(),
-                        deleteOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
+            get(deleteOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                deleteOperation.getConnectionID(),
+                String.valueOf(deleteOperation.getOperationID()));
+        logError(message);
 
         deleteOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -2184,16 +2125,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        extendedOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        extendedOperation.getConnectionID(),
-                        extendedOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
+            get(extendedOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                extendedOperation.getConnectionID(),
+                extendedOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         extendedOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -2204,15 +2142,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        extendedOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        extendedOperation.getConnectionID(),
-                        extendedOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
+            get(extendedOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                extendedOperation.getConnectionID(),
+                String.valueOf(extendedOperation.getOperationID()));
+        logError(message);
 
         extendedOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -2266,16 +2201,12 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        operation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        operation.getConnectionID(),
-                        operation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
+            get(operation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                operation.getConnectionID(), operation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         operation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -2286,15 +2217,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        operation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        operation.getConnectionID(),
-                        operation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
+            get(operation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                operation.getConnectionID(),
+                String.valueOf(operation.getOperationID()));
+        logError(message);
 
         operation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -2348,16 +2276,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        modifyDNOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyDNOperation.getConnectionID(),
-                        modifyDNOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
+            get(modifyDNOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyDNOperation.getConnectionID(),
+                modifyDNOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         modifyDNOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -2368,15 +2293,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        modifyDNOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyDNOperation.getConnectionID(),
-                        modifyDNOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
+            get(modifyDNOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyDNOperation.getConnectionID(),
+                String.valueOf(modifyDNOperation.getOperationID()));
+        logError(message);
 
         modifyDNOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -2430,16 +2352,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        searchOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        searchOperation.getConnectionID(),
-                        searchOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
+            get(searchOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         searchOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -2450,15 +2369,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        searchOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        searchOperation.getConnectionID(),
-                        searchOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
+            get(searchOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                String.valueOf(searchOperation.getOperationID()));
+        logError(message);
 
         searchOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -2512,16 +2428,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        unbindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        unbindOperation.getConnectionID(),
-                        unbindOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.
+            get(unbindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                unbindOperation.getConnectionID(),
+                unbindOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         unbindOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -2532,15 +2445,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        unbindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        unbindOperation.getConnectionID(),
-                        unbindOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.
+            get(unbindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                unbindOperation.getConnectionID(),
+                String.valueOf(unbindOperation.getOperationID()));
+        logError(message);
 
         unbindOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -2594,16 +2504,12 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        addOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        addOperation.getConnectionID(),
-                        addOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION.
+            get(addOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                addOperation.getConnectionID(), addOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         addOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         addOperation.appendErrorMessage(message);
@@ -2613,15 +2519,11 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        addOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        addOperation.getConnectionID(),
-                        addOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL.
+            get(addOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                addOperation.getConnectionID(), addOperation.getOperationID());
+        logError(message);
 
         addOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         addOperation.appendErrorMessage(message);
@@ -2674,16 +2576,12 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        bindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        bindOperation.getConnectionID(),
-                        bindOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION.
+            get(bindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                bindOperation.getConnectionID(), bindOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         bindOperation.appendErrorMessage(message);
@@ -2693,15 +2591,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        bindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        bindOperation.getConnectionID(),
-                        bindOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL.
+            get(bindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                bindOperation.getConnectionID(),
+                bindOperation.getOperationID());
+        logError(message);
 
         bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         bindOperation.appendErrorMessage(message);
@@ -2754,16 +2649,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        compareOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        compareOperation.getConnectionID(),
-                        compareOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION.
+            get(compareOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                compareOperation.getConnectionID(),
+                compareOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         compareOperation.setResultCode(
                               DirectoryServer.getServerErrorResultCode());
@@ -2774,15 +2666,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        compareOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        compareOperation.getConnectionID(),
-                        compareOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL.
+            get(compareOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                compareOperation.getConnectionID(),
+                compareOperation.getOperationID());
+        logError(message);
 
         compareOperation.setResultCode(
                               DirectoryServer.getServerErrorResultCode());
@@ -2836,16 +2725,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        deleteOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        deleteOperation.getConnectionID(),
-                        deleteOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION.
+            get(deleteOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                deleteOperation.getConnectionID(),
+                deleteOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         deleteOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -2856,15 +2742,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        deleteOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        deleteOperation.getConnectionID(),
-                        deleteOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL.
+            get(deleteOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                deleteOperation.getConnectionID(),
+                deleteOperation.getOperationID());
+        logError(message);
 
         deleteOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -2918,16 +2801,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        extendedOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        extendedOperation.getConnectionID(),
-                        extendedOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION.
+            get(extendedOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                extendedOperation.getConnectionID(),
+                extendedOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         extendedOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -2938,15 +2818,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        extendedOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        extendedOperation.getConnectionID(),
-                        extendedOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL.
+            get(extendedOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                extendedOperation.getConnectionID(),
+                extendedOperation.getOperationID());
+        logError(message);
 
         extendedOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -3000,16 +2877,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        modifyOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyOperation.getConnectionID(),
-                        modifyOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION.
+            get(modifyOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyOperation.getConnectionID(),
+                modifyOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         modifyOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -3020,15 +2894,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        modifyOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyOperation.getConnectionID(),
-                        modifyOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL.
+            get(modifyOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyOperation.getConnectionID(),
+                modifyOperation.getOperationID());
+        logError(message);
 
         modifyOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -3082,16 +2953,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        modifyDNOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyDNOperation.getConnectionID(),
-                        modifyDNOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION.
+            get(modifyDNOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyDNOperation.getConnectionID(),
+                modifyDNOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         modifyDNOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -3102,15 +2970,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        modifyDNOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyDNOperation.getConnectionID(),
-                        modifyDNOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL.
+            get(modifyDNOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyDNOperation.getConnectionID(),
+                modifyDNOperation.getOperationID());
+        logError(message);
 
         modifyDNOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -3164,16 +3029,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        searchOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        searchOperation.getConnectionID(),
-                        searchOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION.
+            get(searchOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         searchOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -3184,15 +3046,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        searchOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        searchOperation.getConnectionID(),
-                        searchOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL.
+            get(searchOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID());
+        logError(message);
 
         searchOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -3246,16 +3105,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        abandonOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        abandonOperation.getConnectionID(),
-                        abandonOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+            get(abandonOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                abandonOperation.getConnectionID(),
+                abandonOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         abandonOperation.setResultCode(
                               DirectoryServer.getServerErrorResultCode());
@@ -3266,15 +3122,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        abandonOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        abandonOperation.getConnectionID(),
-                        abandonOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+            get(abandonOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                abandonOperation.getConnectionID(),
+                abandonOperation.getOperationID());
+        logError(message);
 
         abandonOperation.setResultCode(
                               DirectoryServer.getServerErrorResultCode());
@@ -3328,16 +3181,12 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        addOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        addOperation.getConnectionID(),
-                        addOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+            get(addOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                addOperation.getConnectionID(), addOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         addOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         addOperation.appendErrorMessage(message);
@@ -3347,15 +3196,11 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        addOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        addOperation.getConnectionID(),
-                        addOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+            get(addOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                addOperation.getConnectionID(), addOperation.getOperationID());
+        logError(message);
 
         addOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         addOperation.appendErrorMessage(message);
@@ -3408,16 +3253,12 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        bindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        bindOperation.getConnectionID(),
-                        bindOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+            get(bindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                bindOperation.getConnectionID(), bindOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         bindOperation.appendErrorMessage(message);
@@ -3427,15 +3268,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        bindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        bindOperation.getConnectionID(),
-                        bindOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+            get(bindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                bindOperation.getConnectionID(),
+                bindOperation.getOperationID());
+        logError(message);
 
         bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
         bindOperation.appendErrorMessage(message);
@@ -3488,16 +3326,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        compareOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        compareOperation.getConnectionID(),
-                        compareOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+            get(compareOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                compareOperation.getConnectionID(),
+                compareOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         compareOperation.setResultCode(
                               DirectoryServer.getServerErrorResultCode());
@@ -3508,15 +3343,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        compareOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        compareOperation.getConnectionID(),
-                        compareOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+            get(compareOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                compareOperation.getConnectionID(),
+                compareOperation.getOperationID());
+        logError(message);
 
         compareOperation.setResultCode(
                               DirectoryServer.getServerErrorResultCode());
@@ -3570,16 +3402,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        deleteOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        deleteOperation.getConnectionID(),
-                        deleteOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+            get(deleteOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                deleteOperation.getConnectionID(),
+                deleteOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         deleteOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -3590,15 +3419,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        deleteOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        deleteOperation.getConnectionID(),
-                        deleteOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+            get(deleteOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                deleteOperation.getConnectionID(),
+                deleteOperation.getOperationID());
+        logError(message);
 
         deleteOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -3652,16 +3478,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        extendedOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        extendedOperation.getConnectionID(),
-                        extendedOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+            get(extendedOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                extendedOperation.getConnectionID(),
+                extendedOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         extendedOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -3672,15 +3495,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        extendedOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        extendedOperation.getConnectionID(),
-                        extendedOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+            get(extendedOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                extendedOperation.getConnectionID(),
+                extendedOperation.getOperationID());
+        logError(message);
 
         extendedOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -3734,16 +3554,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        modifyOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyOperation.getConnectionID(),
-                        modifyOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+            get(modifyOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyOperation.getConnectionID(),
+                modifyOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         modifyOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -3754,15 +3571,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        modifyOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyOperation.getConnectionID(),
-                        modifyOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+            get(modifyOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyOperation.getConnectionID(),
+                modifyOperation.getOperationID());
+        logError(message);
 
         modifyOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -3816,16 +3630,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        modifyDNOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyDNOperation.getConnectionID(),
-                        modifyDNOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+            get(modifyDNOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyDNOperation.getConnectionID(),
+                modifyDNOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         modifyDNOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -3836,15 +3647,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        modifyDNOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyDNOperation.getConnectionID(),
-                        modifyDNOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+            get(modifyDNOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyDNOperation.getConnectionID(),
+                modifyDNOperation.getOperationID());
+        logError(message);
 
         modifyDNOperation.setResultCode(
                                DirectoryServer.getServerErrorResultCode());
@@ -3898,16 +3706,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        searchOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        searchOperation.getConnectionID(),
-                        searchOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+            get(searchOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         searchOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -3918,15 +3723,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        searchOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        searchOperation.getConnectionID(),
-                        searchOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+            get(searchOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID());
+        logError(message);
 
         searchOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -3980,16 +3782,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        unbindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        unbindOperation.getConnectionID(),
-                        unbindOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+            get(unbindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                unbindOperation.getConnectionID(),
+                unbindOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         unbindOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -4000,15 +3799,12 @@
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        unbindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        unbindOperation.getConnectionID(),
-                        unbindOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+            get(unbindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                unbindOperation.getConnectionID(),
+                unbindOperation.getOperationID());
+        logError(message);
 
         unbindOperation.setResultCode(
                              DirectoryServer.getServerErrorResultCode());
@@ -4062,31 +3858,23 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        addOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        addOperation.getConnectionID(),
-                        addOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+            get(addOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                addOperation.getConnectionID(), addOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        addOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        addOperation.getConnectionID(),
-                        addOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+            get(addOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                addOperation.getConnectionID(), addOperation.getOperationID());
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
@@ -4136,31 +3924,24 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        bindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        bindOperation.getConnectionID(),
-                        bindOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+            get(bindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                bindOperation.getConnectionID(), bindOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        bindOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        bindOperation.getConnectionID(),
-                        bindOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+            get(bindOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                bindOperation.getConnectionID(),
+                bindOperation.getOperationID());
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
@@ -4210,31 +3991,25 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        compareOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        compareOperation.getConnectionID(),
-                        compareOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+            get(compareOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                compareOperation.getConnectionID(),
+                compareOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        compareOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        compareOperation.getConnectionID(),
-                        compareOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+            get(compareOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                compareOperation.getConnectionID(),
+                compareOperation.getOperationID());
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
@@ -4284,31 +4059,25 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        deleteOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        deleteOperation.getConnectionID(),
-                        deleteOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+            get(deleteOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                deleteOperation.getConnectionID(),
+                deleteOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        deleteOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        deleteOperation.getConnectionID(),
-                        deleteOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+            get(deleteOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                deleteOperation.getConnectionID(),
+                deleteOperation.getOperationID());
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
@@ -4358,31 +4127,25 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        extendedOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        extendedOperation.getConnectionID(),
-                        extendedOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+            get(extendedOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                extendedOperation.getConnectionID(),
+                extendedOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        extendedOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        extendedOperation.getConnectionID(),
-                        extendedOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+            get(extendedOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                extendedOperation.getConnectionID(),
+                extendedOperation.getOperationID());
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
@@ -4432,31 +4195,25 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        modifyOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyOperation.getConnectionID(),
-                        modifyOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+            get(modifyOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyOperation.getConnectionID(),
+                modifyOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        modifyOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyOperation.getConnectionID(),
-                        modifyOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+            get(modifyOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyOperation.getConnectionID(),
+                modifyOperation.getOperationID());
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
@@ -4506,31 +4263,25 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        modifyDNOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyDNOperation.getConnectionID(),
-                        modifyDNOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+            get(modifyDNOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyDNOperation.getConnectionID(),
+                modifyDNOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        modifyDNOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyDNOperation.getConnectionID(),
-                        modifyDNOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+            get(modifyDNOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                modifyDNOperation.getConnectionID(),
+                modifyDNOperation.getOperationID());
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
@@ -4580,31 +4331,25 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        searchOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        searchOperation.getConnectionID(),
-                        searchOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+            get(searchOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
-                        searchOperation.getOperationType().getOperationName(),
-                        String.valueOf(p.getPluginEntryDN()),
-                        searchOperation.getConnectionID(),
-                        searchOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+            get(searchOperation.getOperationType().getOperationName(),
+                String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID());
+        logError(message);
 
         return new PostResponsePluginResult(false, false);
       }
@@ -4654,27 +4399,25 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_SEARCH_ENTRY_PLUGIN_EXCEPTION;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    searchOperation.getConnectionID(),
-                                    searchOperation.getOperationID(),
-                                    String.valueOf(searchEntry.getDN()),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_SEARCH_ENTRY_PLUGIN_EXCEPTION.
+            get(String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                String.valueOf(searchEntry.getDN()),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new SearchEntryPluginResult(false, false, false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_SEARCH_ENTRY_PLUGIN_RETURNED_NULL;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    searchOperation.getConnectionID(),
-                                    searchOperation.getOperationID(),
-                                    String.valueOf(searchEntry.getDN()));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_SEARCH_ENTRY_PLUGIN_RETURNED_NULL.
+            get(String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                String.valueOf(searchEntry.getDN()));
+        logError(message);
 
         return new SearchEntryPluginResult(false, false, false, false);
       }
@@ -4724,27 +4467,25 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_SEARCH_ENTRY_PLUGIN_EXCEPTION;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    searchOperation.getConnectionID(),
-                                    searchOperation.getOperationID(),
-                                    String.valueOf(searchEntry.getDN()),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_SEARCH_ENTRY_PLUGIN_EXCEPTION.
+            get(String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                String.valueOf(searchEntry.getDN()),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new SearchEntryPluginResult(false, false, false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_SEARCH_ENTRY_PLUGIN_RETURNED_NULL;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    searchOperation.getConnectionID(),
-                                    searchOperation.getOperationID(),
-                                    String.valueOf(searchEntry.getDN()));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_SEARCH_ENTRY_PLUGIN_RETURNED_NULL.
+            get(String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                String.valueOf(searchEntry.getDN()));
+        logError(message);
 
         return new SearchEntryPluginResult(false, false, false, false);
       }
@@ -4794,27 +4535,25 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_SEARCH_REFERENCE_PLUGIN_EXCEPTION;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    searchOperation.getConnectionID(),
-                                    searchOperation.getOperationID(),
-                                    searchReference.getReferralURLString(),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_SEARCH_REFERENCE_PLUGIN_EXCEPTION.
+            get(String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                searchReference.getReferralURLString(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new SearchReferencePluginResult(false, false, false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_SEARCH_REFERENCE_PLUGIN_RETURNED_NULL;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    searchOperation.getConnectionID(),
-                                    searchOperation.getOperationID(),
-                                    searchReference.getReferralURLString());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_SEARCH_REFERENCE_PLUGIN_RETURNED_NULL.
+            get(String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                searchReference.getReferralURLString());
+        logError(message);
 
         return new SearchReferencePluginResult(false, false, false, false);
       }
@@ -4864,27 +4603,25 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_SEARCH_REFERENCE_PLUGIN_EXCEPTION;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    searchOperation.getConnectionID(),
-                                    searchOperation.getOperationID(),
-                                    searchReference.getReferralURLString(),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_SEARCH_REFERENCE_PLUGIN_EXCEPTION.
+            get(String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                searchReference.getReferralURLString(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new SearchReferencePluginResult(false, false, false, false);
       }
 
       if (result == null)
       {
-        int    msgID   = MSGID_PLUGIN_SEARCH_REFERENCE_PLUGIN_RETURNED_NULL;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    searchOperation.getConnectionID(),
-                                    searchOperation.getOperationID(),
-                                    searchReference.getReferralURLString());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_SEARCH_REFERENCE_PLUGIN_RETURNED_NULL.
+            get(String.valueOf(p.getPluginEntryDN()),
+                searchOperation.getConnectionID(),
+                searchOperation.getOperationID(),
+                searchReference.getReferralURLString());
+        logError(message);
 
         return new SearchReferencePluginResult(false, false, false, false);
       }
@@ -4943,30 +4680,21 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-
-        int    msgID   = MSGID_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_EXCEPTION;
-        String message =
-             getMessage(msgID,
-                        String.valueOf(p.getPluginEntryDN()),
-                        modifyDNOperation.getConnectionID(),
-                        modifyDNOperation.getOperationID(),
-                        stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        logError(ERR_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_EXCEPTION.get(
+                String.valueOf(p.getPluginEntryDN()),
+                modifyDNOperation.getConnectionID(),
+                modifyDNOperation.getOperationID(),
+                stackTraceToSingleLineString(e)));
 
         return new SubordinateModifyDNPluginResult(false, false, true);
       }
 
       if (result == null)
       {
-        int msgID = MSGID_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_RETURNED_NULL;
-        String message =
-             getMessage(msgID,
+        logError(ERR_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_RETURNED_NULL.get(
                         String.valueOf(p.getPluginEntryDN()),
                         modifyDNOperation.getConnectionID(),
-                        modifyDNOperation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+                        String.valueOf(modifyDNOperation.getOperationID())));
 
         return new SubordinateModifyDNPluginResult(false, false, true);
       }
@@ -5018,25 +4746,21 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_EXCEPTION;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    operation.getConnectionID(),
-                                    operation.getOperationID(),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_EXCEPTION.
+            get(String.valueOf(p.getPluginEntryDN()),
+                operation.getConnectionID(), operation.getOperationID(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         return new IntermediateResponsePluginResult(false, false, false, false);
       }
 
       if (result == null)
       {
-        int msgID = MSGID_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_RETURNED_NULL;
-        String message = getMessage(msgID, String.valueOf(p.getPluginEntryDN()),
-                                    operation.getConnectionID(),
-                                    operation.getOperationID());
-        logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_RETURNED_NULL.
+            get(String.valueOf(p.getPluginEntryDN()),
+                operation.getConnectionID(), operation.getOperationID());
+        logError(message);
 
         return new IntermediateResponsePluginResult(false, false, false, false);
       }
@@ -5063,7 +4787,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(PluginCfg configuration,
-                                              List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -5084,7 +4808,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -5103,7 +4827,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -5135,7 +4859,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -5153,7 +4877,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       PluginCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // We will always allow plugins to be removed.
     return true;
@@ -5169,7 +4893,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     deregisterPlugin(configuration.dn());
 
@@ -5183,7 +4907,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PluginCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -5204,7 +4928,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -5223,7 +4947,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing plugin if it's already enabled.
@@ -5280,7 +5004,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/RFC3672SubtreeSpecification.java b/opendj-sdk/opends/src/server/org/opends/server/core/RFC3672SubtreeSpecification.java
index c715aa3..dede103 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/RFC3672SubtreeSpecification.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/RFC3672SubtreeSpecification.java
@@ -25,9 +25,9 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -558,10 +558,10 @@
       return new RFC3672SubtreeSpecification(rootDN, relativeBaseDN,
           minimum, maximum, chopBefore, chopAfter, refinement);
     } else {
-      int msgID = MSGID_ATTR_SYNTAX_RFC3672_SUBTREE_SPECIFICATION_INVALID;
-      String message = getMessage(msgID, s);
+      Message message =
+          ERR_ATTR_SYNTAX_RFC3672_SUBTREE_SPECIFICATION_INVALID.get(s);
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-          message, msgID);
+          message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/RelativeSubtreeSpecification.java b/opendj-sdk/opends/src/server/org/opends/server/core/RelativeSubtreeSpecification.java
index 0e6d031..00d8f8c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/RelativeSubtreeSpecification.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/RelativeSubtreeSpecification.java
@@ -25,9 +25,9 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 
 import java.util.HashSet;
 import java.util.InputMismatchException;
@@ -210,10 +210,10 @@
       return new RelativeSubtreeSpecification(rootDN, relativeBaseDN,
           minimum, maximum, chopBefore, chopAfter, filter);
     } else {
-      int msgID = MSGID_ATTR_SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_INVALID;
-      String message = getMessage(msgID, s);
+      Message message =
+          ERR_ATTR_SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_INVALID.get(s);
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-          message, msgID);
+          message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/RootDNConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/RootDNConfigManager.java
index 3b4da18..763232d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/RootDNConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/RootDNConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -49,8 +50,7 @@
 import org.opends.server.types.Privilege;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
 
 
 
@@ -140,8 +140,7 @@
         }
         catch (DirectoryException de)
         {
-          throw new InitializationException(de.getMessageID(),
-                                            de.getErrorMessage(), de);
+          throw new InitializationException(de.getMessageObject());
         }
       }
 
@@ -169,7 +168,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(RootDNUserCfg configuration,
-                                              List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     // The new root user must not have an alternate bind DN that is already
     // in use.
@@ -179,10 +178,11 @@
       DN existingRootDN = DirectoryServer.getActualRootBindDN(altBindDN);
       if (existingRootDN != null)
       {
-        int    msgID   = MSGID_CONFIG_ROOTDN_CONFLICTING_MAPPING;
-        String message = getMessage(msgID, String.valueOf(altBindDN),
-                                    String.valueOf(configuration.dn()),
-                                    String.valueOf(existingRootDN));
+
+        Message message = ERR_CONFIG_ROOTDN_CONFLICTING_MAPPING.get(
+                String.valueOf(altBindDN),
+                String.valueOf(configuration.dn()),
+                String.valueOf(existingRootDN));
         unacceptableReasons.add(message);
 
         configAcceptable = false;
@@ -203,7 +203,7 @@
 
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     HashSet<DN> altBindDNs = new HashSet<DN>();
     for (DN altBindDN : configuration.getAlternateBindDN())
@@ -218,7 +218,7 @@
         // This shouldn't happen, since the set of DNs should have already been
         // validated.
         resultCode = DirectoryServer.getServerErrorResultCode();
-        messages.add(de.getErrorMessage());
+        messages.add(de.getMessageObject());
 
         for (DN dn : altBindDNs)
         {
@@ -243,7 +243,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(RootDNUserCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     return true;
   }
@@ -261,7 +261,7 @@
 
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     HashSet<DN> altBindDNs = alternateBindDNs.remove(configuration.dn());
     if (altBindDNs != null)
@@ -281,7 +281,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(RootDNUserCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -293,10 +293,10 @@
       if ((existingRootDN != null) &&
           (! existingRootDN.equals(configuration.dn())))
       {
-        int    msgID   = MSGID_CONFIG_ROOTDN_CONFLICTING_MAPPING;
-        String message = getMessage(msgID, String.valueOf(altBindDN),
-                                    String.valueOf(configuration.dn()),
-                                    String.valueOf(existingRootDN));
+        Message message = ERR_CONFIG_ROOTDN_CONFLICTING_MAPPING.get(
+                String.valueOf(altBindDN),
+                String.valueOf(configuration.dn()),
+                String.valueOf(existingRootDN));
         unacceptableReasons.add(message);
 
         configAcceptable = false;
@@ -316,7 +316,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     HashSet<DN> setDNs = new HashSet<DN>();
     HashSet<DN> addDNs = new HashSet<DN>();
@@ -351,7 +351,7 @@
         // This shouldn't happen, since the set of DNs should have already been
         // validated.
         resultCode = DirectoryServer.getServerErrorResultCode();
-        messages.add(de.getErrorMessage());
+        messages.add(de.getMessageObject());
 
         for (DN addedDN : addedDNs)
         {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java b/opendj-sdk/opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java
index b2cbe40..3f58afc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/RootPrivilegeChangeListener.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -67,7 +68,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(RootDNCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // No special validation is required.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/SASLConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/SASLConfigManager.java
index 4a061e4..31d921f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/SASLConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/SASLConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -46,16 +47,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.StaticUtils.*;
+import static org.opends.messages.ConfigMessages.*;
 
+import static org.opends.server.util.StaticUtils.*;
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -136,9 +136,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          ErrorLogger.logError(ie.getMessageObject());
           continue;
         }
       }
@@ -152,7 +150,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -165,7 +163,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -184,7 +182,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -209,7 +207,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -227,7 +225,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // SASL mechanism handler is in use.
@@ -244,7 +242,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     SASLMechanismHandler handler = handlers.remove(configuration.dn());
     if (handler != null)
@@ -262,7 +260,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -275,7 +273,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -294,7 +292,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing handler if it's already enabled.
@@ -346,7 +344,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -405,7 +403,7 @@
                                           SASLMechanismHandlerCfg.class,
                                           List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(handler, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -413,7 +411,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -422,10 +420,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_SASL_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_SASL_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -433,11 +430,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_SASL_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_SASL_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/SchemaConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/SchemaConfigManager.java
index febcfb4..f94317b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/SchemaConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/SchemaConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -49,8 +50,6 @@
 import org.opends.server.types.DITContentRule;
 import org.opends.server.types.DITStructureRule;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.MatchingRuleUse;
@@ -63,11 +62,10 @@
 
 import static org.opends.server.config.ConfigConstants.*;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.loggers.ErrorLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -216,15 +214,14 @@
     {
       if (! schemaDir.exists())
       {
-        int    msgID   = MSGID_CONFIG_SCHEMA_NO_SCHEMA_DIR;
-        String message = getMessage(msgID, schemaDirPath);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR.get(schemaDirPath);
+        throw new InitializationException(message);
       }
       else if (! schemaDir.isDirectory())
       {
-        int    msgID   = MSGID_CONFIG_SCHEMA_DIR_NOT_DIRECTORY;
-        String message = getMessage(msgID, schemaDirPath);
-        throw new InitializationException(msgID, message);
+        Message message =
+            ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY.get(schemaDirPath);
+        throw new InitializationException(message);
       }
 
       File[] schemaDirFiles = schemaDir.listFiles();
@@ -270,10 +267,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_LIST_FILES;
-      String message = getMessage(msgID, schemaDirPath,
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES.get(
+          schemaDirPath, getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -376,18 +372,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_OPEN_FILE;
-      String message = getMessage(msgID, schemaFile, schemaDirPath,
-                                  getExceptionMessage(e));
+      Message message = WARN_CONFIG_SCHEMA_CANNOT_OPEN_FILE.get(
+              schemaFile, schemaDirPath, getExceptionMessage(e));
 
       if (failOnError)
       {
-        throw new ConfigException(msgID, message);
+        throw new ConfigException(message);
       }
       else
       {
-        logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        logError(message);
         return null;
       }
     }
@@ -413,18 +407,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_READ_LDIF_ENTRY;
-      String message = getMessage(msgID, schemaFile, schemaDirPath,
-                                  getExceptionMessage(e));
+      Message message = WARN_CONFIG_SCHEMA_CANNOT_READ_LDIF_ENTRY.get(
+              schemaFile, schemaDirPath, getExceptionMessage(e));
 
       if (failOnError)
       {
-        throw new InitializationException(msgID, message, e);
+        throw new InitializationException(message, e);
       }
       else
       {
-        logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        logError(message);
         return null;
       }
     }
@@ -435,10 +427,9 @@
       Entry e = reader.readEntry(false);
       if (e != null)
       {
-        int    msgID   = MSGID_CONFIG_SCHEMA_MULTIPLE_ENTRIES_IN_FILE;
-        String message = getMessage(msgID, schemaFile, schemaDirPath);
-        logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_CONFIG_SCHEMA_MULTIPLE_ENTRIES_IN_FILE.get(
+            schemaFile, schemaDirPath);
+        logError(message);
       }
     }
     catch (Exception e)
@@ -448,11 +439,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_SCHEMA_UNPARSEABLE_EXTRA_DATA_IN_FILE;
-      String message = getMessage(msgID, schemaFile, schemaDirPath,
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-               message, msgID);
+      Message message = WARN_CONFIG_SCHEMA_UNPARSEABLE_EXTRA_DATA_IN_FILE.get(
+          schemaFile, schemaDirPath, getExceptionMessage(e));
+      logError(message);
     }
 
     try
@@ -755,18 +744,16 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE.get(
+                    schemaFile, de.getMessageObject());
 
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, de);
+              throw new ConfigException(message, de);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -777,18 +764,16 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE;
-            String message = getMessage(msgID, schemaFile,
-                                        v.getStringValue() + ":  " +
-                                        getExceptionMessage(e));
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE.get(
+                    schemaFile, v.getStringValue() + ":  " +
+                    getExceptionMessage(e));
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, e);
+              throw new ConfigException(message, e);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -807,12 +792,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CONFLICTING_ATTR_TYPE;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
-
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_ATTR_TYPE.get(
+                schemaFile, de.getMessageObject());
+            logError(message);
 
             try
             {
@@ -854,18 +836,17 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_OC;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_OC.get(
+                    schemaFile,
+                    de.getMessageObject());
 
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, de);
+              throw new ConfigException(message, de);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -876,19 +857,17 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_OC;
-            String message = getMessage(msgID, schemaFile,
-                                        v.getStringValue() + ":  " +
-                                        getExceptionMessage(e));
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_OC.get(
+                    schemaFile,
+                    v.getStringValue() + ":  " + getExceptionMessage(e));
 
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, e);
+              throw new ConfigException(message, e);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -907,11 +886,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CONFLICTING_OC;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_OC.get(
+                schemaFile, de.getMessageObject());
+            logError(message);
 
             try
             {
@@ -953,18 +930,15 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
-
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM.get(
+                    schemaFile, de.getMessageObject());
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, de);
+              throw new ConfigException(message, de);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -975,19 +949,17 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM;
-            String message = getMessage(msgID, schemaFile,
-                                        v.getStringValue() + ":  " +
-                                        getExceptionMessage(e));
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM.get(
+                    schemaFile,  v.getStringValue() + ":  " +
+                    getExceptionMessage(e));
 
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, e);
+              throw new ConfigException(message, e);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -1006,11 +978,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CONFLICTING_NAME_FORM;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_NAME_FORM.get(
+                schemaFile, de.getMessageObject());
+            logError(message);
 
             try
             {
@@ -1052,18 +1022,16 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_DCR;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DCR.get(
+                    schemaFile, de.getMessageObject());
 
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, de);
+              throw new ConfigException(message, de);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -1074,19 +1042,17 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_DCR;
-            String message = getMessage(msgID, schemaFile,
-                                        v.getStringValue() + ":  " +
-                                        getExceptionMessage(e));
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DCR.get(
+                    schemaFile,v.getStringValue() + ":  " +
+                    getExceptionMessage(e));
 
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, e);
+              throw new ConfigException(message, e);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -1105,11 +1071,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CONFLICTING_DCR;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_DCR.get(
+                schemaFile, de.getMessageObject());
+            logError(message);
 
             try
             {
@@ -1152,18 +1116,16 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_DSR;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DSR.get(
+                    schemaFile, de.getMessageObject());
 
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, de);
+              throw new ConfigException(message, de);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -1174,19 +1136,17 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_DSR;
-            String message = getMessage(msgID, schemaFile,
-                                        v.getStringValue() + ":  " +
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DSR.get(
+                    schemaFile, v.getStringValue() + ":  " +
                                         getExceptionMessage(e));
 
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, e);
+              throw new ConfigException(message, e);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -1205,11 +1165,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CONFLICTING_DSR;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_DSR.get(
+                schemaFile, de.getMessageObject());
+            logError(message);
 
             try
             {
@@ -1252,18 +1210,16 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_MRU;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_MRU.get(
+                    schemaFile, de.getMessageObject());
 
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, de);
+              throw new ConfigException(message, de);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -1274,19 +1230,18 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CANNOT_PARSE_MRU;
-            String message = getMessage(msgID, schemaFile,
-                                        v.getStringValue() + ":  " +
-                                        getExceptionMessage(e));
+            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_MRU.get(
+                    schemaFile,
+                    v.getStringValue() + ":  " +
+                    getExceptionMessage(e));
 
             if (failOnError)
             {
-              throw new ConfigException(msgID, message, e);
+              throw new ConfigException(message, e);
             }
             else
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               continue;
             }
           }
@@ -1305,11 +1260,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_CONFIG_SCHEMA_CONFLICTING_MRU;
-            String message = getMessage(msgID, schemaFile,
-                                        de.getErrorMessage());
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_MRU.get(
+                schemaFile, de.getMessageObject());
+            logError(message);
 
             try
             {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
index 69f0534..9e4b11e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
@@ -26,6 +26,9 @@
  */
 package org.opends.server.core;
 
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.Message;
+
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -73,8 +76,7 @@
 import static org.opends.server.core.CoreConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.loggers.AccessLogger.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.StaticUtils.toLowerCase;
 
 /**
@@ -420,7 +422,7 @@
       }
 
       setResultCode(de.getResultCode());
-      appendErrorMessage(de.getErrorMessage());
+      appendErrorMessage(de.getMessageObject());
       setMatchedDN(de.getMatchedDN());
       setReferralURLs(de.getReferralURLs());
     }
@@ -554,7 +556,7 @@
       }
 
       setResultCode(de.getResultCode());
-      appendErrorMessage(de.getErrorMessage());
+      appendErrorMessage(de.getMessageObject());
       setMatchedDN(de.getMatchedDN());
       setReferralURLs(de.getReferralURLs());
     }
@@ -619,8 +621,7 @@
     if ((getSizeLimit() > 0) && (getEntriesSent() >= getSizeLimit()))
     {
       setResultCode(ResultCode.SIZE_LIMIT_EXCEEDED);
-      appendErrorMessage(getMessage(MSGID_SEARCH_SIZE_LIMIT_EXCEEDED,
-                                    getSizeLimit()));
+      appendErrorMessage(ERR_SEARCH_SIZE_LIMIT_EXCEEDED.get(getSizeLimit()));
       return false;
     }
 
@@ -630,8 +631,7 @@
                                                 getTimeLimitExpiration()))
     {
       setResultCode(ResultCode.TIME_LIMIT_EXCEEDED);
-      appendErrorMessage(getMessage(MSGID_SEARCH_TIME_LIMIT_EXCEEDED,
-                                    getTimeLimit()));
+      appendErrorMessage(ERR_SEARCH_TIME_LIMIT_EXCEEDED.get(getTimeLimit()));
       return false;
     }
 
@@ -1005,8 +1005,8 @@
       // any processing.  Just update the operation to indicate that it was
       // cancelled and return false.
       setResultCode(ResultCode.CANCELED);
-      appendErrorMessage(getMessage(MSGID_CANCELED_BY_SEARCH_ENTRY_DISCONNECT,
-                                    String.valueOf(entry.getDN())));
+      appendErrorMessage(ERR_CANCELED_BY_SEARCH_ENTRY_DISCONNECT.get(
+              String.valueOf(entry.getDN())));
       return false;
     }
 
@@ -1057,8 +1057,7 @@
                                         getTimeLimitExpiration()))
     {
       setResultCode(ResultCode.TIME_LIMIT_EXCEEDED);
-      appendErrorMessage(getMessage(MSGID_SEARCH_TIME_LIMIT_EXCEEDED,
-                                    getTimeLimit()));
+      appendErrorMessage(ERR_SEARCH_TIME_LIMIT_EXCEEDED.get(getTimeLimit()));
       return false;
     }
 
@@ -1089,8 +1088,8 @@
       // any processing.  Just update the operation to indicate that it was
       // cancelled and return false.
       setResultCode(ResultCode.CANCELED);
-      appendErrorMessage(getMessage(MSGID_CANCELED_BY_SEARCH_REF_DISCONNECT,
-           String.valueOf(reference.getReferralURLString())));
+      appendErrorMessage(ERR_CANCELED_BY_SEARCH_REF_DISCONNECT.get(
+              String.valueOf(reference.getReferralURLString())));
       return false;
     }
 
@@ -1172,16 +1171,15 @@
    */
   @Override()
   public final void disconnectClient(DisconnectReason disconnectReason,
-                                     boolean sendNotification, String message,
-                                     int messageID)
+                                     boolean sendNotification, Message message
+  )
   {
     // Before calling clientConnection.disconnect, we need to mark this
     // operation as cancelled so that the attempt to cancel it later won't cause
     // an unnecessary delay.
     setCancelResult(CancelResult.CANCELED);
 
-    clientConnection.disconnect(disconnectReason, sendNotification, message,
-                                messageID);
+    clientConnection.disconnect(disconnectReason, sendNotification, message);
   }
 
   /**
@@ -1236,7 +1234,7 @@
     String resultCode = String.valueOf(getResultCode().getIntValue());
 
     String errorMessage;
-    StringBuilder errorMessageBuffer = getErrorMessage();
+    MessageBuilder errorMessageBuffer = getErrorMessage();
     if (errorMessageBuffer == null)
     {
       errorMessage = null;
@@ -1651,8 +1649,7 @@
         // result and return.
         setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREPARSE_DISCONNECT;
-        appendErrorMessage(getMessage(msgID));
+        appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get());
 
         setProcessingStopTime();
 
@@ -1784,8 +1781,9 @@
   private void updateOperationErrMsgAndResCode()
   {
     setResultCode(ResultCode.NO_SUCH_OBJECT);
-    appendErrorMessage(getMessage(MSGID_SEARCH_BASE_DOESNT_EXIST,
-                                  String.valueOf(getBaseDN())));
+    Message message =
+            ERR_SEARCH_BASE_DOESNT_EXIST.get(String.valueOf(getBaseDN()));
+    appendErrorMessage(message);
   }
 
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/SynchronizationProviderConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/SynchronizationProviderConfigManager.java
index b0383b2..3168aa3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/SynchronizationProviderConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/SynchronizationProviderConfigManager.java
@@ -25,13 +25,14 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.lang.reflect.Method;
@@ -165,7 +166,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     // Attempt to get the existing synchronization provider. This will only
     // succeed if it is currently enabled.
@@ -199,7 +200,7 @@
           if (debugEnabled())
           {
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
-            messages.add(e.getMessage());
+            messages.add(e.getMessageObject());
             resultCode = DirectoryServer.getServerErrorResultCode();
           }
         }
@@ -209,11 +210,10 @@
           {
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
-          int msgID = MSGID_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER;
-          messages.add(getMessage(msgID, String.valueOf(
-                             configuration.getJavaImplementationClass()),
-                             String.valueOf(configuration.dn()),
-                             stackTraceToSingleLineString(e)));
+
+          messages.add(ERR_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER.get(
+                  String.valueOf(configuration.getJavaImplementationClass()),
+                  String.valueOf(configuration.dn())));
           resultCode = DirectoryServer.getServerErrorResultCode();
         }
       }
@@ -255,7 +255,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       SynchronizationProviderCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -279,7 +279,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     // Register as a change listener for this synchronization provider entry
     // so that we will be notified if when it is disabled or enabled.
@@ -307,7 +307,7 @@
         if (debugEnabled())
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
-          messages.add(e.getMessage());
+          messages.add(e.getMessageObject());
           resultCode = DirectoryServer.getServerErrorResultCode();
         }
       }
@@ -317,11 +317,10 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        int msgID = MSGID_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER;
-        messages.add(getMessage(msgID, String.valueOf(
-                           configuration.getJavaImplementationClass()),
-                           String.valueOf(configuration.dn()),
-                           stackTraceToSingleLineString(e)));
+
+        messages.add(ERR_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER.get(
+                String.valueOf(configuration.getJavaImplementationClass()),
+                           String.valueOf(configuration.dn())));
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
     }
@@ -338,7 +337,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       SynchronizationProviderCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -359,9 +358,6 @@
    *
    * @param configuration       The configuration for which the class must be
    *                            checked.
-   * @param unacceptableReasons A list containing the reasons why the class is
-   *                            not acceptable.
-   *
    * @return                    true if the class is acceptable or false if not.
    */
   @SuppressWarnings("unchecked")
@@ -384,11 +380,10 @@
     } catch (Exception e)
     {
        // Handle the exception: put a message in the unacceptable reasons.
-       int msgID = MSGID_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS;
-       String message = getMessage(msgID, String.valueOf(className),
-                                   String.valueOf(configuration.dn()),
-                                   stackTraceToSingleLineString(e));
-       throw new ConfigException(msgID, message, e);
+       Message message = ERR_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS.
+           get(String.valueOf(className), String.valueOf(configuration.dn()),
+               stackTraceToSingleLineString(e));
+       throw new ConfigException(message, e);
     }
     try
     {
@@ -397,11 +392,10 @@
     } catch (Exception e)
     {
       // Handle the exception: put a message in the unacceptable reasons.
-      int msgID = MSGID_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER;
-      String message = getMessage(msgID, String.valueOf(className),
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER.
+          get(String.valueOf(className), String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     }
     try
     {
@@ -410,11 +404,9 @@
     } catch (Exception e)
     {
       // Handle the exception: put a message in the unacceptable reasons.
-      int msgID = MSGID_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER;
-      String message = getMessage(msgID, String.valueOf(className),
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER.get(
+              String.valueOf(className), String.valueOf(configuration.dn()));
+      throw new ConfigException(message, e);
     }
     return provider;
   }
@@ -432,7 +424,7 @@
    */
   private boolean isJavaClassAcceptable(
       SynchronizationProviderCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     String className = configuration.getJavaImplementationClass();
     SynchronizationProviderCfgDefn d =
@@ -450,10 +442,10 @@
     } catch (Exception e)
     {
        // Handle the exception: put a message in the unacceptable reasons.
-       int msgID = MSGID_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS;
-       String message = getMessage(msgID, String.valueOf(className),
-                                   String.valueOf(configuration.dn()),
-                                   stackTraceToSingleLineString(e));
+       Message message = ERR_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS.get(
+               String.valueOf(className),
+               String.valueOf(configuration.dn()),
+               stackTraceToSingleLineString(e));
        unacceptableReasons.add(message);
        return false;
     }
@@ -476,10 +468,10 @@
     } catch (Exception e)
     {
       // Handle the exception: put a message in the unacceptable reasons.
-      int msgID = MSGID_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER;
-      String message = getMessage(msgID, String.valueOf(className),
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER.get(
+              String.valueOf(className),
+              String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
       unacceptableReasons.add(message);
       return false;
     }
@@ -517,7 +509,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       SynchronizationProviderCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     // A delete should always be acceptable, so just return true.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/TrustManagerProviderConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/TrustManagerProviderConfigManager.java
index 0b638ea..820a555 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/TrustManagerProviderConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/TrustManagerProviderConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -46,16 +47,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.StaticUtils.*;
+import static org.opends.messages.ConfigMessages.*;
 
+import static org.opends.server.util.StaticUtils.*;
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -135,9 +135,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          ErrorLogger.logError(ie.getMessageObject());
           continue;
         }
       }
@@ -150,7 +148,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(TrustManagerCfg configuration,
-                                              List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -163,7 +161,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -181,7 +179,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -206,7 +204,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -225,7 +223,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(TrustManagerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // provider is in use.
@@ -242,7 +240,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     DirectoryServer.deregisterTrustManagerProvider(configuration.dn());
 
@@ -261,7 +259,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(TrustManagerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -274,7 +272,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -293,7 +291,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing provider if it's already enabled.
@@ -347,7 +345,7 @@
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
 
-      messages.add(ie.getMessage());
+      messages.add(ie.getMessageObject());
     }
 
     if (resultCode == ResultCode.SUCCESS)
@@ -405,7 +403,7 @@
              provider.getClass().getMethod("isConfigurationAcceptable",
                                            TrustManagerCfg.class, List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(provider, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -413,7 +411,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -422,10 +420,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_TRUSTMANAGER_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_TRUSTMANAGER_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -433,11 +430,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_TRUSTMANAGER_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_TRUSTMANAGER_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/UnbindOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/UnbindOperationBasis.java
index 17856b6..7bcc129 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/UnbindOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/UnbindOperationBasis.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -44,11 +45,7 @@
 import org.opends.server.types.operation.PreParseUnbindOperation;
 
 import static org.opends.server.loggers.AccessLogger.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
+import static org.opends.messages.CoreMessages.*;
 /**
  * This class defines an operation that may be used to close the connection
  * between the client and the Directory Server.
@@ -104,13 +101,12 @@
    */
   @Override()
   public final void disconnectClient(DisconnectReason disconnectReason,
-                                     boolean sendNotification, String message,
-                                     int messageID)
+                                     boolean sendNotification, Message message)
   {
     // Since unbind operations can't be cancelled, we don't need to do anything
     // but forward the request on to the client connection.
-    clientConnection.disconnect(disconnectReason, sendNotification, message,
-                                messageID);
+    clientConnection.disconnect(disconnectReason, sendNotification,
+            message);
   }
 
 
@@ -212,7 +208,7 @@
 
 
     // Disconnect the client.
-    getClientConnection().disconnect(DisconnectReason.UNBIND, false, null, -1);
+    getClientConnection().disconnect(DisconnectReason.UNBIND, false, null);
 
 
     // Invoke the post-operation unbind plugins.
@@ -229,7 +225,7 @@
   @Override()
   public final CancelResult cancel(CancelRequest cancelRequest)
   {
-    cancelRequest.addResponseMessage(getMessage(MSGID_CANNOT_CANCEL_UNBIND));
+    cancelRequest.addResponseMessage(ERR_CANNOT_CANCEL_UNBIND.get());
     return CancelResult.CANNOT_CANCEL;
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
index 1867b4d..de35a4f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/VirtualAttributeConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -49,18 +50,18 @@
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.SearchFilter;
 import org.opends.server.types.VirtualAttributeRule;
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -158,11 +159,10 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, de);
               }
 
-              int    msgID   = MSGID_CONFIG_VATTR_INVALID_SEARCH_FILTER;
-              String message = getMessage(msgID, filterString,
-                                          String.valueOf(cfg.dn()),
-                                          de.getErrorMessage());
-              throw new ConfigException(msgID, message, de);
+              Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
+                      filterString, String.valueOf(cfg.dn()),
+                      de.getMessageObject());
+              throw new ConfigException(message, de);
             }
           }
 
@@ -170,20 +170,19 @@
           {
             if (provider.isMultiValued())
             {
-              int    msgID   = MSGID_CONFIG_VATTR_SV_TYPE_WITH_MV_PROVIDER;
-              String message = getMessage(msgID, String.valueOf(cfg.dn()),
-                                          cfg.getAttributeType().getNameOrOID(),
-                                          className);
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_VATTR_SV_TYPE_WITH_MV_PROVIDER.
+                  get(String.valueOf(cfg.dn()),
+                      cfg.getAttributeType().getNameOrOID(), className);
+              throw new ConfigException(message);
             }
             else if (cfg.getConflictBehavior() ==
                      VirtualAttributeCfgDefn.ConflictBehavior.
                           MERGE_REAL_AND_VIRTUAL)
             {
-              int    msgID   = MSGID_CONFIG_VATTR_SV_TYPE_WITH_MERGE_VALUES;
-              String message = getMessage(msgID, String.valueOf(cfg.dn()),
-                                    cfg.getAttributeType().getNameOrOID());
-              throw new ConfigException(msgID, message);
+              Message message = ERR_CONFIG_VATTR_SV_TYPE_WITH_MERGE_VALUES.
+                  get(String.valueOf(cfg.dn()),
+                      cfg.getAttributeType().getNameOrOID());
+              throw new ConfigException(message);
             }
           }
 
@@ -196,9 +195,7 @@
         }
         catch (InitializationException ie)
         {
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   ie.getMessage(), ie.getMessageID());
+          ErrorLogger.logError(ie.getMessageObject());
           continue;
         }
       }
@@ -212,7 +209,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       VirtualAttributeCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -225,7 +222,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -245,10 +242,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        int    msgID   = MSGID_CONFIG_VATTR_INVALID_SEARCH_FILTER;
-        String message = getMessage(msgID, filterString,
-                                    String.valueOf(configuration.dn()),
-                                    de.getErrorMessage());
+        Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
+                filterString,
+                String.valueOf(configuration.dn()),
+                de.getMessageObject());
         unacceptableReasons.add(message);
         return false;
       }
@@ -268,7 +265,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     configuration.addChangeListener(this);
 
@@ -298,10 +295,10 @@
           resultCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
         }
 
-        int    msgID   = MSGID_CONFIG_VATTR_INVALID_SEARCH_FILTER;
-        String message = getMessage(msgID, filterString,
-                                    String.valueOf(configuration.dn()),
-                                    de.getErrorMessage());
+        Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
+                filterString,
+                String.valueOf(configuration.dn()),
+                de.getMessageObject());
         messages.add(message);
       }
     }
@@ -319,7 +316,7 @@
       catch (InitializationException ie)
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
-        messages.add(ie.getMessage());
+        messages.add(ie.getMessageObject());
       }
     }
 
@@ -346,7 +343,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       VirtualAttributeCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // We will always allow getting rid of a virtual attribute rule.
     return true;
@@ -362,7 +359,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     VirtualAttributeRule rule = rules.remove(configuration.dn());
     if (rule != null)
@@ -381,7 +378,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       VirtualAttributeCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -394,7 +391,7 @@
       }
       catch (InitializationException ie)
       {
-        unacceptableReasons.add(ie.getMessage());
+        unacceptableReasons.add(ie.getMessageObject());
         return false;
       }
     }
@@ -414,10 +411,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        int    msgID   = MSGID_CONFIG_VATTR_INVALID_SEARCH_FILTER;
-        String message = getMessage(msgID, filterString,
-                                    String.valueOf(configuration.dn()),
-                                    de.getErrorMessage());
+        Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
+                filterString,
+                String.valueOf(configuration.dn()),
+                de.getMessageObject());
         unacceptableReasons.add(message);
         return false;
       }
@@ -437,7 +434,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the existing rule if it's already enabled.
@@ -479,10 +476,10 @@
           resultCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
         }
 
-        int    msgID   = MSGID_CONFIG_VATTR_INVALID_SEARCH_FILTER;
-        String message = getMessage(msgID, filterString,
-                                    String.valueOf(configuration.dn()),
-                                    de.getErrorMessage());
+        Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
+                filterString,
+                String.valueOf(configuration.dn()),
+                de.getMessageObject());
         messages.add(message);
       }
     }
@@ -500,7 +497,7 @@
       catch (InitializationException ie)
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
-        messages.add(ie.getMessage());
+        messages.add(ie.getMessageObject());
       }
     }
 
@@ -579,7 +576,7 @@
                                            VirtualAttributeCfg.class,
                                            List.class);
 
-        List<String> unacceptableReasons = new ArrayList<String>();
+        List<Message> unacceptableReasons = new ArrayList<Message>();
         Boolean acceptable = (Boolean) method.invoke(provider, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -587,7 +584,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<String> iterator = unacceptableReasons.iterator();
+            Iterator<Message> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -596,10 +593,9 @@
             }
           }
 
-          int    msgID   = MSGID_CONFIG_VATTR_CONFIG_NOT_ACCEPTABLE;
-          String message = getMessage(msgID, String.valueOf(configuration.dn()),
-                                      buffer.toString());
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_VATTR_CONFIG_NOT_ACCEPTABLE.get(
+              String.valueOf(configuration.dn()), buffer.toString());
+          throw new InitializationException(message);
         }
       }
 
@@ -607,11 +603,10 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_VATTR_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, className,
-                                  String.valueOf(configuration.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_VATTR_INITIALIZATION_FAILED.
+          get(className, String.valueOf(configuration.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/WorkQueueConfigManager.java b/opendj-sdk/opends/src/server/org/opends/server/core/WorkQueueConfigManager.java
index 7ebde1f..0bcd2ec 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/WorkQueueConfigManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/WorkQueueConfigManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
 
 
 
@@ -44,8 +45,8 @@
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -118,11 +119,11 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_CONFIG_WORK_QUEUE_INITIALIZATION_FAILED;
-      String message = getMessage(msgID, workQueueConfig.getWorkQueueClass(),
-                                  String.valueOf(workQueueConfig.dn()),
-                                  stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_WORK_QUEUE_INITIALIZATION_FAILED.
+          get(workQueueConfig.getWorkQueueClass(),
+              String.valueOf(workQueueConfig.dn()),
+              stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
   }
 
@@ -132,7 +133,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(WorkQueueCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> 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<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // If the work queue class has been changed, then we should warn the user
@@ -157,9 +158,10 @@
     String workQueueClass = configuration.getWorkQueueClass();
     if (! workQueueClass.equals(workQueue.getClass().getName()))
     {
-      int msgID = MSGID_CONFIG_WORK_QUEUE_CLASS_CHANGE_REQUIRES_RESTART;
-      messages.add(getMessage(msgID, workQueue.getClass().getName(),
-                              workQueueClass));
+
+      messages.add(INFO_CONFIG_WORK_QUEUE_CLASS_CHANGE_REQUIRES_RESTART.get(
+              workQueue.getClass().getName(),
+              workQueueClass));
 
       adminActionRequired = true;
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/WorkflowImpl.java b/opendj-sdk/opends/src/server/org/opends/server/core/WorkflowImpl.java
index f28841d..33853d3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/WorkflowImpl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/WorkflowImpl.java
@@ -26,9 +26,8 @@
  */
 package org.opends.server.core;
 
-
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.CoreMessages.*;
+import org.opends.messages.Message;
 import static org.opends.server.util.Validator.ensureNotNull;
 
 import java.util.TreeMap;
@@ -174,10 +173,10 @@
       // The workflow must not be already registered
       if (registeredWorkflows.containsKey(workflowID))
       {
-        int msgID = MSGID_REGISTER_WORKFLOW_ALREADY_EXISTS;
-        String message = getMessage(msgID, workflowID);
+        Message message =
+                ERR_REGISTER_WORKFLOW_ALREADY_EXISTS.get(workflowID);
         throw new DirectoryException(
-            ResultCode.UNWILLING_TO_PERFORM, message, msgID);
+            ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
       TreeMap<String, Workflow> newRegisteredWorkflows =
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/WorkflowResultCode.java b/opendj-sdk/opends/src/server/org/opends/server/core/WorkflowResultCode.java
index 28746ae..1ba3b64 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/WorkflowResultCode.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/WorkflowResultCode.java
@@ -25,6 +25,8 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.core;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import org.opends.server.types.ResultCode;
@@ -40,7 +42,7 @@
   private ResultCode resultCode = ResultCode.UNDEFINED;
 
   // The global error message.
-  private StringBuilder errorMessage = new StringBuilder ("");
+  private MessageBuilder errorMessage = new MessageBuilder(Message.EMPTY);
 
 
   /**
@@ -61,8 +63,8 @@
    * @param errorMessage  the initial value for the error message
    */
   public WorkflowResultCode(
-      ResultCode    resultCode,
-      StringBuilder errorMessage
+      ResultCode     resultCode,
+      MessageBuilder errorMessage
       )
   {
     this.resultCode   = resultCode;
@@ -114,8 +116,8 @@
    *         into a reference entry
    */
   public boolean elaborateGlobalResultCode(
-      ResultCode    newResultCode,
-      StringBuilder newErrorMessage
+      ResultCode     newResultCode,
+      MessageBuilder newErrorMessage
       )
   {
     // Returned value
@@ -126,7 +128,7 @@
     if (resultCode == ResultCode.UNDEFINED)
     {
       resultCode   = newResultCode;
-      errorMessage = new StringBuilder (newErrorMessage);
+      errorMessage = new MessageBuilder (newErrorMessage);
     }
     else
     {
@@ -143,11 +145,11 @@
         {
           case NO_SUCH_OBJECT:
             resultCode = ResultCode.SUCCESS;
-            errorMessage = new StringBuilder ("");
+            errorMessage = new MessageBuilder(Message.EMPTY);
             break;
           case REFERRAL:
             resultCode = ResultCode.SUCCESS;
-            errorMessage = new StringBuilder ("");
+            errorMessage = new MessageBuilder(Message.EMPTY);
             sendReferenceEntry = true;
             break;
           default:
@@ -171,12 +173,12 @@
         {
           case REFERRAL:
             resultCode = ResultCode.SUCCESS;
-            errorMessage = new StringBuilder ("");
+            errorMessage = new MessageBuilder(Message.EMPTY);
             sendReferenceEntry = true;
             break;
           case NO_SUCH_OBJECT:
             resultCode = ResultCode.REFERRAL;
-            errorMessage = new StringBuilder (newErrorMessage);
+            errorMessage = new MessageBuilder (Message.EMPTY);
             break;
           default:
             // global resultCode remains the same
@@ -193,23 +195,23 @@
         {
           case REFERRAL:
             resultCode = newResultCode;
-            errorMessage = new StringBuilder (newErrorMessage);
+            errorMessage = new MessageBuilder (newErrorMessage);
             sendReferenceEntry = true;
             break;
           case SUCCESS:
             resultCode = newResultCode;
-            errorMessage = new StringBuilder (newErrorMessage);
+            errorMessage = new MessageBuilder (newErrorMessage);
             break;
           case NO_SUCH_OBJECT:
             resultCode = newResultCode;
-            errorMessage = new StringBuilder (newErrorMessage);
+            errorMessage = new MessageBuilder (newErrorMessage);
             break;
           default:
             // global resultCode remains the same but append the new
             // error message into the current error message
             if (errorMessage == null)
             {
-              errorMessage =  new StringBuilder (newErrorMessage);
+              errorMessage =  new MessageBuilder (newErrorMessage);
             }
             else
             {
@@ -241,7 +243,7 @@
    *
    * @return the global error message.
    */
-  public StringBuilder errorMessage()
+  public MessageBuilder errorMessage()
   {
     return errorMessage;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/AnonymousSASLMechanismHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/AnonymousSASLMechanismHandler.java
index f9ed346..f791e8f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/AnonymousSASLMechanismHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/AnonymousSASLMechanismHandler.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
-
+import org.opends.messages.MessageBuilder;
 
 
 import org.opends.server.admin.std.server.SASLMechanismHandlerCfg;
@@ -35,13 +35,13 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.AuthenticationInfo;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -112,14 +112,15 @@
       String credString = saslCredentials.stringValue();
       if (credString.length() > 0)
       {
-        bindOperation.appendAdditionalLogMessage("trace='");
-        bindOperation.appendAdditionalLogMessage(credString);
-        bindOperation.appendAdditionalLogMessage("'");
+        MessageBuilder mb = new MessageBuilder();
+        mb.append("trace='");
+        mb.append(credString);
+        mb.append("'");
+        bindOperation.appendAdditionalLogMessage(mb.toMessage());
 
-        logError(ErrorLogCategory.REQUEST_HANDLING,
-                 ErrorLogSeverity.INFORMATIONAL, MSGID_SASLANONYMOUS_TRACE,
-                 bindOperation.getConnectionID(),
-                 bindOperation.getOperationID(), credString);
+        logError(INFO_SASLANONYMOUS_TRACE.
+            get(bindOperation.getConnectionID(), bindOperation.getOperationID(),
+                credString));
 
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/AttributeValuePasswordValidator.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/AttributeValuePasswordValidator.java
index c41d872..3366805 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/AttributeValuePasswordValidator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/AttributeValuePasswordValidator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -45,9 +46,8 @@
 import org.opends.server.types.Operation;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
+import static org.opends.messages.ExtensionMessages.*;
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -109,7 +109,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      StringBuilder invalidReason)
+                                      MessageBuilder invalidReason)
   {
     // Get a handle to the current configuration.
     AttributeValuePasswordValidatorCfg config = currentConfig;
@@ -145,8 +145,8 @@
         if (a.hasValue(vf) ||
             (config.isTestReversedPassword() && a.hasValue(vr)))
         {
-          int msgID = MSGID_ATTRVALUE_VALIDATOR_PASSWORD_IN_ENTRY;
-          invalidReason.append(getMessage(msgID));
+
+          invalidReason.append(ERR_ATTRVALUE_VALIDATOR_PASSWORD_IN_ENTRY.get());
           return false;
         }
       }
@@ -164,7 +164,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PasswordValidatorCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     AttributeValuePasswordValidatorCfg config =
          (AttributeValuePasswordValidatorCfg) configuration;
@@ -178,7 +178,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       AttributeValuePasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // If we've gotten this far, then we'll accept the change.
     return true;
@@ -194,7 +194,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     currentConfig = configuration;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/Base64PasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/Base64PasswordStorageScheme.java
index e5f8ee3..b7a38c3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/Base64PasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/Base64PasswordStorageScheme.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -42,10 +43,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
+import static org.opends.messages.ExtensionMessages.*;
 /**
  * This class defines a Directory Server password storage scheme that will store
  * the values in base64-encoded form.  This is a reversible algorithm that
@@ -175,11 +173,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD;
-      String message = getMessage(msgID, storedPassword.stringValue(),
-                                  String.valueOf(e));
+      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+          storedPassword.stringValue(), String.valueOf(e));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID, e);
+                                   e);
     }
   }
 
@@ -204,10 +201,9 @@
   public ByteString encodeAuthPassword(ByteString plaintext)
          throws DirectoryException
   {
-    int    msgID   = MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD;
-    String message = getMessage(msgID, getStorageSchemeName());
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -233,10 +229,9 @@
                                                   String authValue)
          throws DirectoryException
   {
-    int    msgID   = MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD;
-    String message = getMessage(msgID, getStorageSchemeName());
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java
index 450a1a8..7ead7ab 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -61,8 +62,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -160,9 +161,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_SASLCRAMMD5_CANNOT_GET_MESSAGE_DIGEST;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_SASLCRAMMD5_CANNOT_GET_MESSAGE_DIGEST.get(getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -178,10 +179,9 @@
     identityMapper = DirectoryServer.getIdentityMapper(identityMapperDN);
     if (identityMapper == null)
     {
-      int    msgID   = MSGID_SASLCRAMMD5_NO_SUCH_IDENTITY_MAPPER;
-      String message = getMessage(msgID, String.valueOf(identityMapperDN),
-                                  String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message = ERR_SASLCRAMMD5_NO_SUCH_IDENTITY_MAPPER.get(
+          String.valueOf(identityMapperDN), String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
 
 
@@ -248,9 +248,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLCRAMMD5_NO_STORED_CHALLENGE;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLCRAMMD5_NO_STORED_CHALLENGE.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -258,9 +257,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLCRAMMD5_INVALID_STORED_CHALLENGE;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLCRAMMD5_INVALID_STORED_CHALLENGE.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -280,9 +278,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLCRAMMD5_NO_SPACE_IN_CREDENTIALS;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLCRAMMD5_NO_SPACE_IN_CREDENTIALS.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -296,10 +293,10 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLCRAMMD5_INVALID_DIGEST_LENGTH;
-      String message = getMessage(msgID, digest.length(),
-                                  (2*MD5_DIGEST_LENGTH));
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLCRAMMD5_INVALID_DIGEST_LENGTH.get(
+              digest.length(),
+              (2*MD5_DIGEST_LENGTH));
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -317,9 +314,9 @@
 
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int msgID = MSGID_SASLCRAMMD5_INVALID_DIGEST_CONTENT;
-      String message = getMessage(msgID, pe.getMessage());
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLCRAMMD5_INVALID_DIGEST_CONTENT.get(
+              pe.getMessage());
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -346,9 +343,9 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int msgID = MSGID_SASLCRAMMD5_CANNOT_DECODE_USERNAME_AS_DN;
-        String message = getMessage(msgID, userName, de.getErrorMessage());
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLCRAMMD5_CANNOT_DECODE_USERNAME_AS_DN.get(
+                userName, de.getMessageObject());
+        bindOperation.setAuthFailureReason(message);
         return;
       }
 
@@ -356,9 +353,8 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLCRAMMD5_USERNAME_IS_NULL_DN;
-        String message = getMessage(msgID);
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLCRAMMD5_USERNAME_IS_NULL_DN.get();
+        bindOperation.setAuthFailureReason(message);
         return;
       }
 
@@ -384,9 +380,9 @@
       {
         bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
 
-        int    msgID   = MSGID_SASLCRAMMD5_CANNOT_LOCK_ENTRY;
-        String message = getMessage(msgID, String.valueOf(userDN));
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = INFO_SASLCRAMMD5_CANNOT_LOCK_ENTRY.get(
+                String.valueOf(userDN));
+        bindOperation.setAuthFailureReason(message);
         return;
       }
 
@@ -403,10 +399,9 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int msgID = MSGID_SASLCRAMMD5_CANNOT_GET_ENTRY_BY_DN;
-        String message = getMessage(msgID, String.valueOf(userDN),
-                                    de.getErrorMessage());
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLCRAMMD5_CANNOT_GET_ENTRY_BY_DN.get(
+                String.valueOf(userDN), de.getMessageObject());
+        bindOperation.setAuthFailureReason(message);
         return;
       }
       finally
@@ -435,10 +430,9 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int msgID = MSGID_SASLCRAMMD5_CANNOT_MAP_USERNAME;
-        String message = getMessage(msgID, String.valueOf(userName),
-                                    de.getErrorMessage());
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLCRAMMD5_CANNOT_MAP_USERNAME.get(
+                String.valueOf(userName), de.getMessageObject());
+        bindOperation.setAuthFailureReason(message);
         return;
       }
     }
@@ -449,9 +443,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLCRAMMD5_NO_MATCHING_ENTRIES;
-      String message = getMessage(msgID, userName);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLCRAMMD5_NO_MATCHING_ENTRIES.get(userName);
+      bindOperation.setAuthFailureReason(message);
       return;
     }
     else
@@ -471,9 +464,9 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int msgID = MSGID_SASLCRAMMD5_NO_REVERSIBLE_PASSWORDS;
-        String message = getMessage(msgID, String.valueOf(userEntry.getDN()));
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLCRAMMD5_NO_REVERSIBLE_PASSWORDS.get(
+                String.valueOf(userEntry.getDN()));
+        bindOperation.setAuthFailureReason(message);
         return;
       }
     }
@@ -481,10 +474,10 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLCRAMMD5_CANNOT_GET_REVERSIBLE_PASSWORDS;
-      String message = getMessage(msgID, String.valueOf(userEntry.getDN()),
-                                  String.valueOf(e));
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLCRAMMD5_CANNOT_GET_REVERSIBLE_PASSWORDS.get(
+              String.valueOf(userEntry.getDN()),
+              String.valueOf(e));
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -506,9 +499,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLCRAMMD5_INVALID_PASSWORD;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLCRAMMD5_INVALID_PASSWORD.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -621,7 +613,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     CramMD5SASLMechanismHandlerCfg config =
          (CramMD5SASLMechanismHandlerCfg) configuration;
@@ -635,7 +627,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       CramMD5SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -646,10 +638,9 @@
          DirectoryServer.getIdentityMapper(identityMapperDN);
     if (newIdentityMapper == null)
     {
-      int msgID = MSGID_SASLCRAMMD5_NO_SUCH_IDENTITY_MAPPER;
-      unacceptableReasons.add(getMessage(msgID,
-                                         String.valueOf(identityMapperDN),
-                                         String.valueOf(cfgEntryDN)));
+      unacceptableReasons.add(ERR_SASLCRAMMD5_NO_SUCH_IDENTITY_MAPPER.get(
+              String.valueOf(identityMapperDN),
+              String.valueOf(cfgEntryDN)));
       configAcceptable = false;
     }
 
@@ -667,7 +658,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the identity mapper that should be used to find users.
@@ -681,9 +672,9 @@
         resultCode = ResultCode.CONSTRAINT_VIOLATION;
       }
 
-      int msgID = MSGID_SASLCRAMMD5_NO_SUCH_IDENTITY_MAPPER;
-      messages.add(getMessage(msgID, String.valueOf(identityMapperDN),
-                              String.valueOf(configEntryDN)));
+      messages.add(ERR_SASLCRAMMD5_NO_SUCH_IDENTITY_MAPPER.get(
+              String.valueOf(identityMapperDN),
+              String.valueOf(configEntryDN)));
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/CancelExtendedOperation.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/CancelExtendedOperation.java
index 8543df6..1b14c7d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/CancelExtendedOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/CancelExtendedOperation.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import org.opends.server.api.ClientConnection;
@@ -43,8 +44,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.admin.std.server.ExtendedOperationHandlerCfg;
@@ -138,8 +138,7 @@
     {
       operation.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-      int msgID = MSGID_EXTOP_CANCEL_NO_REQUEST_VALUE;
-      operation.appendErrorMessage(getMessage(msgID));
+      operation.appendErrorMessage(ERR_EXTOP_CANCEL_NO_REQUEST_VALUE.get());
       return;
     }
     else
@@ -160,8 +159,8 @@
 
         operation.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-        int    msgID   = MSGID_EXTOP_CANCEL_CANNOT_DECODE_REQUEST_VALUE;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_EXTOP_CANCEL_CANNOT_DECODE_REQUEST_VALUE.get(
+                getExceptionMessage(e));
         operation.appendErrorMessage(message);
 
         return;
@@ -170,9 +169,9 @@
 
 
     // Create the cancel request for the target operation.
-    String cancelReason = getMessage(MSGID_EXTOP_CANCEL_REASON,
-                                     operation.getMessageID());
-    StringBuilder cancelResultMessage = new StringBuilder();
+    Message cancelReason =
+        INFO_EXTOP_CANCEL_REASON.get(operation.getMessageID());
+    MessageBuilder cancelResultMessage = new MessageBuilder();
     CancelRequest cancelRequest = new CancelRequest(true, cancelReason,
                                                     cancelResultMessage);
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/CharacterSetPasswordValidator.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/CharacterSetPasswordValidator.java
index 341ead1..0f2ebef 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/CharacterSetPasswordValidator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/CharacterSetPasswordValidator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -46,8 +47,8 @@
 import org.opends.server.types.Operation;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -118,7 +119,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      StringBuilder invalidReason)
+                                      MessageBuilder invalidReason)
   {
     // Get a handle to the current configuration.
     CharacterSetPasswordValidatorCfg config = currentConfig;
@@ -153,8 +154,8 @@
 
       if ((! found) && (! config.isAllowUnclassifiedCharacters()))
       {
-        int msgID = MSGID_CHARSET_VALIDATOR_ILLEGAL_CHARACTER;
-        invalidReason.append(getMessage(msgID, String.valueOf(c)));
+        invalidReason.append(ERR_CHARSET_VALIDATOR_ILLEGAL_CHARACTER.get(
+                String.valueOf(c)));
         return false;
       }
     }
@@ -165,8 +166,8 @@
       Integer passwordCount = counts.get(characterSet);
       if ((passwordCount == null) || (passwordCount < minimumCount))
       {
-        int msgID = MSGID_CHARSET_VALIDATOR_TOO_FEW_CHARS_FROM_SET;
-        invalidReason.append(getMessage(msgID, characterSet, minimumCount));
+        invalidReason.append(ERR_CHARSET_VALIDATOR_TOO_FEW_CHARS_FROM_SET.get(
+                characterSet, minimumCount));
         return false;
       }
     }
@@ -204,15 +205,13 @@
       int colonPos = definition.indexOf(':');
       if (colonPos <= 0)
       {
-        int    msgID   = MSGID_CHARSET_VALIDATOR_NO_COLON;
-        String message = getMessage(msgID, definition);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CHARSET_VALIDATOR_NO_COLON.get(definition);
+        throw new ConfigException(message);
       }
       else if (colonPos == (definition.length() - 1))
       {
-        int    msgID   = MSGID_CHARSET_VALIDATOR_NO_CHARS;
-        String message = getMessage(msgID, definition);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CHARSET_VALIDATOR_NO_CHARS.get(definition);
+        throw new ConfigException(message);
       }
 
       int minCount;
@@ -222,16 +221,14 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CHARSET_VALIDATOR_INVALID_COUNT;
-        String message = getMessage(msgID, definition);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CHARSET_VALIDATOR_INVALID_COUNT.get(definition);
+        throw new ConfigException(message);
       }
 
       if (minCount <= 0)
       {
-        int    msgID   = MSGID_CHARSET_VALIDATOR_INVALID_COUNT;
-        String message = getMessage(msgID, definition);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CHARSET_VALIDATOR_INVALID_COUNT.get(definition);
+        throw new ConfigException(message);
       }
 
       String characterSet = definition.substring(colonPos+1);
@@ -240,9 +237,9 @@
         char c = characterSet.charAt(i);
         if (usedCharacters.contains(c))
         {
-          int    msgID   = MSGID_CHARSET_VALIDATOR_DUPLICATE_CHAR;
-          String message = getMessage(msgID, definition, String.valueOf(c));
-          throw new ConfigException(msgID, message);
+          Message message = ERR_CHARSET_VALIDATOR_DUPLICATE_CHAR.get(
+              definition, String.valueOf(c));
+          throw new ConfigException(message);
         }
 
         usedCharacters.add(c);
@@ -261,7 +258,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PasswordValidatorCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     CharacterSetPasswordValidatorCfg config =
          (CharacterSetPasswordValidatorCfg) configuration;
@@ -275,7 +272,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       CharacterSetPasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // Make sure that we can process the defined character sets.  If so, then
     // we'll accept the new configuration.
@@ -285,7 +282,7 @@
     }
     catch (ConfigException ce)
     {
-      unacceptableReasons.add(ce.getMessage());
+      unacceptableReasons.add(ce.getMessageObject());
       return false;
     }
 
@@ -300,9 +297,9 @@
   public ConfigChangeResult applyConfigurationChange(
                       CharacterSetPasswordValidatorCfg configuration)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Make sure that we can process the defined character sets.  If so, then
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/ClearPasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/ClearPasswordStorageScheme.java
index fbdb6d0..2cccfef 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/ClearPasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/ClearPasswordStorageScheme.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -38,9 +39,7 @@
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.extensions.ExtensionsConstants.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
+import static org.opends.messages.ExtensionMessages.*;
 import java.util.Arrays;
 
 
@@ -179,10 +178,9 @@
   public ByteString encodeAuthPassword(ByteString plaintext)
          throws DirectoryException
   {
-    int    msgID   = MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD;
-    String message = getMessage(msgID, getStorageSchemeName());
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -208,10 +206,9 @@
                                                   String authValue)
          throws DirectoryException
   {
-    int    msgID   = MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD;
-    String message = getMessage(msgID, getStorageSchemeName());
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
index 888b65c..3836371 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/ConfigFileHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -85,8 +86,8 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ExistingFileBehavior;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LDIFExportConfig;
@@ -109,8 +110,8 @@
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.admin.Configuration;
@@ -218,9 +219,8 @@
     {
       if (! f.exists())
       {
-        int    msgID   = MSGID_CONFIG_FILE_DOES_NOT_EXIST;
-        String message = getMessage(msgID, configFile);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_CONFIG_FILE_DOES_NOT_EXIST.get(configFile);
+        throw new InitializationException(message);
       }
     }
     catch (InitializationException ie)
@@ -239,9 +239,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_CANNOT_VERIFY_EXISTENCE;
-      String message = getMessage(msgID, configFile, String.valueOf(e));
-      throw new InitializationException(msgID, message);
+      Message message = ERR_CONFIG_FILE_CANNOT_VERIFY_EXISTENCE.get(
+          configFile, String.valueOf(e));
+      throw new InitializationException(message);
     }
 
 
@@ -254,8 +254,7 @@
     }
     catch (DirectoryException de)
     {
-      throw new InitializationException(de.getMessageID(),
-                                        de.getErrorMessage(), de.getCause());
+      throw new InitializationException(de.getMessageObject(), de.getCause());
     }
 
     File archiveDirectory = new File(f.getParent(), CONFIG_ARCHIVE_DIR_NAME);
@@ -299,10 +298,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_UNABLE_TO_APPLY_STARTUP_CHANGES;
-      String message = getMessage(msgID, changesFile.getAbsolutePath(),
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_UNABLE_TO_APPLY_STARTUP_CHANGES.get(
+          changesFile.getAbsolutePath(), String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -324,9 +322,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_CANNOT_OPEN_FOR_READ;
-      String message = getMessage(msgID, configFile, String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_FILE_CANNOT_OPEN_FOR_READ.get(
+          configFile, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -355,10 +353,9 @@
         }
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_INVALID_LDIF_ENTRY;
-      String message = getMessage(msgID, le.getLineNumber(), configFile,
-                                  String.valueOf(le));
-      throw new InitializationException(msgID, message, le);
+      Message message = ERR_CONFIG_FILE_INVALID_LDIF_ENTRY.get(
+          le.getLineNumber(), configFile, String.valueOf(le));
+      throw new InitializationException(message, le);
     }
     catch (Exception e)
     {
@@ -379,9 +376,9 @@
         }
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_READ_ERROR;
-      String message = getMessage(msgID, configFile, String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_CONFIG_FILE_READ_ERROR.get(configFile, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -400,9 +397,8 @@
         }
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_EMPTY;
-      String message = getMessage(msgID, configFile);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_CONFIG_FILE_EMPTY.get(configFile);
+      throw new InitializationException(message);
     }
 
 
@@ -412,10 +408,9 @@
       DN configRootDN = DN.decode(DN_CONFIG_ROOT);
       if (! entry.getDN().equals(configRootDN))
       {
-        int    msgID   = MSGID_CONFIG_FILE_INVALID_BASE_DN;
-        String message = getMessage(msgID, configFile, entry.getDN().toString(),
-                                    DN_CONFIG_ROOT);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_CONFIG_FILE_INVALID_BASE_DN.get(
+            configFile, entry.getDN().toString(), DN_CONFIG_ROOT);
+        throw new InitializationException(message);
       }
     }
     catch (InitializationException ie)
@@ -459,9 +454,9 @@
       }
 
       // This should not happen, so we can use a generic error here.
-      int    msgID   = MSGID_CONFIG_FILE_GENERIC_ERROR;
-      String message = getMessage(msgID, configFile, String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_CONFIG_FILE_GENERIC_ERROR.get(configFile, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -500,10 +495,9 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_INVALID_LDIF_ENTRY;
-        String message = getMessage(msgID, le.getLineNumber(), configFile,
-                                    String.valueOf(le));
-        throw new InitializationException(msgID, message, le);
+        Message message = ERR_CONFIG_FILE_INVALID_LDIF_ENTRY.get(
+            le.getLineNumber(), configFile, String.valueOf(le));
+        throw new InitializationException(message, le);
       }
       catch (Exception e)
       {
@@ -524,9 +518,9 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_READ_ERROR;
-        String message = getMessage(msgID, configFile, String.valueOf(e));
-        throw new InitializationException(msgID, message, e);
+        Message message =
+            ERR_CONFIG_FILE_READ_ERROR.get(configFile, String.valueOf(e));
+        throw new InitializationException(message, e);
       }
 
 
@@ -566,11 +560,10 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_DUPLICATE_ENTRY;
-        String message = getMessage(msgID, entryDN.toString(),
-                                    reader.getLastEntryLineNumber(),
-                                    configFile);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_CONFIG_FILE_DUPLICATE_ENTRY.get(
+            entryDN.toString(), String.valueOf(reader.getLastEntryLineNumber()),
+                configFile);
+        throw new InitializationException(message);
       }
 
 
@@ -590,11 +583,9 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_UNKNOWN_PARENT;
-        String message = getMessage(msgID, entryDN.toString(),
-                                    reader.getLastEntryLineNumber(),
-                                    configFile);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_CONFIG_FILE_UNKNOWN_PARENT.get(
+            entryDN.toString(), reader.getLastEntryLineNumber(), configFile);
+        throw new InitializationException(message);
       }
 
       ConfigEntry parentEntry = configEntries.get(parentDN);
@@ -612,11 +603,10 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_NO_PARENT;
-        String message = getMessage(msgID, entryDN.toString(),
-                                    reader.getLastEntryLineNumber(),
-                                    configFile, parentDN.toString());
-        throw new InitializationException(msgID, message);
+        Message message = ERR_CONFIG_FILE_NO_PARENT.
+            get(entryDN.toString(), reader.getLastEntryLineNumber(), configFile,
+                parentDN.toString());
+        throw new InitializationException(message);
       }
 
 
@@ -648,9 +638,9 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_GENERIC_ERROR;
-        String message = getMessage(msgID, configFile, String.valueOf(e));
-        throw new InitializationException(msgID, message, e);
+        Message message =
+            ERR_CONFIG_FILE_GENERIC_ERROR.get(configFile, String.valueOf(e));
+        throw new InitializationException(message, e);
       }
     }
 
@@ -672,9 +662,9 @@
 
         if (serverRoot == null)
         {
-          int    msgID   = MSGID_CONFIG_CANNOT_DETERMINE_SERVER_ROOT;
-          String message = getMessage(msgID, ENV_VAR_INSTANCE_ROOT);
-          throw new InitializationException(msgID, message);
+          Message message = ERR_CONFIG_CANNOT_DETERMINE_SERVER_ROOT.get(
+              ENV_VAR_INSTANCE_ROOT);
+          throw new InitializationException(message);
         }
       }
       catch (InitializationException ie)
@@ -693,9 +683,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_CONFIG_CANNOT_DETERMINE_SERVER_ROOT;
-        String message = getMessage(msgID, ENV_VAR_INSTANCE_ROOT);
-        throw new InitializationException(msgID, message);
+        Message message =
+            ERR_CONFIG_CANNOT_DETERMINE_SERVER_ROOT.get(ENV_VAR_INSTANCE_ROOT);
+        throw new InitializationException(message);
       }
     }
     else
@@ -724,10 +714,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_CANNOT_REGISTER_AS_PRIVATE_SUFFIX;
-      String message = getMessage(msgID, configRootEntry.getDN(),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_CANNOT_REGISTER_AS_PRIVATE_SUFFIX.get(
+          String.valueOf(configRootEntry.getDN()), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
   }
 
@@ -765,11 +754,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIG_CANNOT_CALCULATE_DIGEST;
-      String message = getMessage(msgID, configFile,
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_CANNOT_CALCULATE_DIGEST.get(
+          configFile, stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -895,11 +883,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIG_CANNOT_CALCULATE_DIGEST;
-      String message = getMessage(msgID, latestFile.getAbsolutePath(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_CANNOT_CALCULATE_DIGEST.get(
+          latestFile.getAbsolutePath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
   }
 
@@ -943,7 +930,7 @@
 
 
     // Apply the changes and make sure there were no errors.
-    LinkedList<String> errorList = new LinkedList<String>();
+    LinkedList<Message> errorList = new LinkedList<Message>();
     boolean successful = LDIFModify.modifyLDIF(sourceReader, changesReader,
                                                targetWriter, errorList);
 
@@ -965,17 +952,14 @@
     if (! successful)
     {
       // FIXME -- Log each error message and throw an exception.
-      for (String s : errorList)
+      for (Message s : errorList)
       {
-        int    msgID   = MSGID_CONFIG_ERROR_APPLYING_STARTUP_CHANGE;
-        String message = getMessage(msgID, s);
-        logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-                 msgID, message);
+        Message message = ERR_CONFIG_ERROR_APPLYING_STARTUP_CHANGE.get(s);
+        logError(message);
       }
 
-      int    msgID   = MSGID_CONFIG_UNABLE_TO_APPLY_CHANGES_FILE;
-      String message = getMessage(msgID);
-      throw new LDIFException(msgID, message);
+      Message message = ERR_CONFIG_UNABLE_TO_APPLY_CHANGES_FILE.get();
+      throw new LDIFException(message);
     }
 
 
@@ -1223,10 +1207,9 @@
       if (! (clientConnection.hasAllPrivileges(CONFIG_READ_AND_WRITE,
                                                addOperation)))
       {
-        int    msgID   = MSGID_CONFIG_FILE_ADD_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_CONFIG_FILE_ADD_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -1242,10 +1225,9 @@
       DN entryDN = e.getDN();
       if (configEntries.containsKey(entryDN))
       {
-        int    msgID   = MSGID_CONFIG_FILE_ADD_ALREADY_EXISTS;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message,
-                                     msgID);
+        Message message =
+            ERR_CONFIG_FILE_ADD_ALREADY_EXISTS.get(String.valueOf(entryDN));
+        throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message);
       }
 
 
@@ -1254,18 +1236,18 @@
       if (parentDN == null)
       {
         // The entry DN doesn't have a parent.  This is not allowed.
-        int    msgID   = MSGID_CONFIG_FILE_ADD_NO_PARENT_DN;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+        Message message =
+            ERR_CONFIG_FILE_ADD_NO_PARENT_DN.get(String.valueOf(entryDN));
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
 
       ConfigEntry parentEntry = configEntries.get(parentDN);
       if (parentEntry == null)
       {
         // The parent entry does not exist.  This is not allowed.
-        int msgID = MSGID_CONFIG_FILE_ADD_NO_PARENT;
-        String message = getMessage(msgID, String.valueOf(entryDN),
-                                    String.valueOf(parentDN));
+        Message message = ERR_CONFIG_FILE_ADD_NO_PARENT.get(
+                String.valueOf(entryDN),
+                String.valueOf(parentDN));
 
         // Get the matched DN, if possible.
         DN matchedDN = null;
@@ -1281,7 +1263,7 @@
           parentDN = parentDN.getParent();
         }
 
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
                                      matchedDN, null);
       }
 
@@ -1294,17 +1276,16 @@
       // through them and make sure the new entry is acceptable.
       CopyOnWriteArrayList<ConfigAddListener> addListeners =
            parentEntry.getAddListeners();
-      StringBuilder unacceptableReason = new StringBuilder();
+      MessageBuilder unacceptableReason = new MessageBuilder();
       for (ConfigAddListener l : addListeners)
       {
         if (! l.configAddIsAcceptable(newEntry, unacceptableReason))
         {
-          int msgID = MSGID_CONFIG_FILE_ADD_REJECTED_BY_LISTENER;
-          String message = getMessage(msgID, String.valueOf(entryDN),
-                                      String.valueOf(parentDN),
-                                      String.valueOf(unacceptableReason));
-          throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                       msgID);
+          Message message = ERR_CONFIG_FILE_ADD_REJECTED_BY_LISTENER.
+              get(String.valueOf(entryDN), String.valueOf(parentDN),
+                  String.valueOf(unacceptableReason));
+          throw new DirectoryException(
+                  ResultCode.UNWILLING_TO_PERFORM, message);
 
         }
       }
@@ -1325,18 +1306,17 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ce);
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_ADD_FAILED;
-        String message = getMessage(msgID, String.valueOf(entryDN),
-                                    String.valueOf(parentDN),
-                                    getExceptionMessage(ce));
+        Message message = ERR_CONFIG_FILE_ADD_FAILED.
+            get(String.valueOf(entryDN), String.valueOf(parentDN),
+                getExceptionMessage(ce));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
 
 
       // Notify all the add listeners that the entry has been added.
-      ResultCode         resultCode = ResultCode.SUCCESS;
-      LinkedList<String> messages   = new LinkedList<String>();
+      ResultCode          resultCode = ResultCode.SUCCESS;
+      LinkedList<Message> messages   = new LinkedList<Message>();
       for (ConfigAddListener l : addListeners)
       {
         ConfigChangeResult result = l.applyConfigurationAdd(newEntry);
@@ -1357,10 +1337,10 @@
 
       if (resultCode != ResultCode.SUCCESS)
       {
-        StringBuilder buffer = new StringBuilder();
+        MessageBuilder buffer = new MessageBuilder();
         if (! messages.isEmpty())
         {
-          Iterator<String> iterator = messages.iterator();
+          Iterator<Message> iterator = messages.iterator();
           buffer.append(iterator.next());
           while (iterator.hasNext())
           {
@@ -1369,9 +1349,9 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_ADD_APPLY_FAILED;
-        String message = getMessage(msgID, String.valueOf(buffer));
-        throw new DirectoryException(resultCode, message, msgID);
+        Message message =
+            ERR_CONFIG_FILE_ADD_APPLY_FAILED.get(String.valueOf(buffer));
+        throw new DirectoryException(resultCode, message);
       }
     }
     finally
@@ -1407,10 +1387,9 @@
       if (! (clientConnection.hasAllPrivileges(CONFIG_READ_AND_WRITE,
                                                deleteOperation)))
       {
-        int    msgID   = MSGID_CONFIG_FILE_DELETE_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_CONFIG_FILE_DELETE_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -1442,20 +1421,20 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_DELETE_NO_SUCH_ENTRY;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
-                                     matchedDN, null);
+        Message message =
+            ERR_CONFIG_FILE_DELETE_NO_SUCH_ENTRY.get(String.valueOf(entryDN));
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
+                matchedDN, null);
       }
 
 
       // If the entry has children, then fail.
       if (entry.hasChildren())
       {
-        int    msgID   = MSGID_CONFIG_FILE_DELETE_HAS_CHILDREN;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF, message,
-                                     msgID);
+        Message message =
+            ERR_CONFIG_FILE_DELETE_HAS_CHILDREN.get(String.valueOf(entryDN));
+        throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF,
+                message);
       }
 
 
@@ -1464,10 +1443,9 @@
       ConfigEntry parentEntry = entry.getParent();
       if (parentEntry == null)
       {
-        int    msgID   = MSGID_CONFIG_FILE_DELETE_NO_PARENT;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message =
+            ERR_CONFIG_FILE_DELETE_NO_PARENT.get(String.valueOf(entryDN));
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
 
@@ -1475,17 +1453,16 @@
       // all OK with the delete.
       CopyOnWriteArrayList<ConfigDeleteListener> deleteListeners =
            parentEntry.getDeleteListeners();
-      StringBuilder unacceptableReason = new StringBuilder();
+      MessageBuilder unacceptableReason = new MessageBuilder();
       for (ConfigDeleteListener l : deleteListeners)
       {
         if (! l.configDeleteIsAcceptable(entry, unacceptableReason))
         {
-          int    msgID   = MSGID_CONFIG_FILE_DELETE_REJECTED;
-          String message = getMessage(msgID, String.valueOf(entryDN),
-                                      String.valueOf(parentEntry.getDN()),
-                                      String.valueOf(unacceptableReason));
-          throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                       msgID);
+          Message message = ERR_CONFIG_FILE_DELETE_REJECTED.
+              get(String.valueOf(entryDN), String.valueOf(parentEntry.getDN()),
+                  String.valueOf(unacceptableReason));
+          throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+                  message);
         }
       }
 
@@ -1505,18 +1482,17 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ce);
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_DELETE_FAILED;
-        String message = getMessage(msgID, String.valueOf(entryDN),
-                                    String.valueOf(parentEntry.getDN()),
-                                    getExceptionMessage(ce));
+        Message message = ERR_CONFIG_FILE_DELETE_FAILED.
+            get(String.valueOf(entryDN), String.valueOf(parentEntry.getDN()),
+                getExceptionMessage(ce));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
 
 
       // Notify all the delete listeners that the entry has been removed.
-      ResultCode         resultCode = ResultCode.SUCCESS;
-      LinkedList<String> messages   = new LinkedList<String>();
+      ResultCode          resultCode = ResultCode.SUCCESS;
+      LinkedList<Message> messages   = new LinkedList<Message>();
       for (ConfigDeleteListener l : deleteListeners)
       {
         ConfigChangeResult result = l.applyConfigurationDelete(entry);
@@ -1540,7 +1516,7 @@
         StringBuilder buffer = new StringBuilder();
         if (! messages.isEmpty())
         {
-          Iterator<String> iterator = messages.iterator();
+          Iterator<Message> iterator = messages.iterator();
           buffer.append(iterator.next());
           while (iterator.hasNext())
           {
@@ -1549,9 +1525,9 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_DELETE_APPLY_FAILED;
-        String message = getMessage(msgID, String.valueOf(buffer));
-        throw new DirectoryException(resultCode, message, msgID);
+        Message message =
+            ERR_CONFIG_FILE_DELETE_APPLY_FAILED.get(String.valueOf(buffer));
+        throw new DirectoryException(resultCode, message);
       }
     }
     finally
@@ -1591,10 +1567,9 @@
       if (! (clientConnection.hasAllPrivileges(CONFIG_READ_AND_WRITE,
                                                modifyOperation)))
       {
-        int    msgID   = MSGID_CONFIG_FILE_MODIFY_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_CONFIG_FILE_MODIFY_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
 
       AttributeType privType =
@@ -1607,10 +1582,10 @@
           if (! clientConnection.hasPrivilege(Privilege.PRIVILEGE_CHANGE,
                                               modifyOperation))
           {
-            int msgID = MSGID_CONFIG_FILE_MODIFY_PRIVS_INSUFFICIENT_PRIVILEGES;
-            String message = getMessage(msgID);
+            Message message =
+                ERR_CONFIG_FILE_MODIFY_PRIVS_INSUFFICIENT_PRIVILEGES.get();
             throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                         message, msgID);
+                                         message);
           }
 
           break;
@@ -1651,10 +1626,10 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_MODIFY_NO_SUCH_ENTRY;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
-                                     matchedDN, null);
+        Message message =
+            ERR_CONFIG_FILE_MODIFY_NO_SUCH_ENTRY.get(String.valueOf(entryDN));
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
+                matchedDN, null);
       }
 
 
@@ -1663,9 +1638,9 @@
       if (! currentEntry.getEntry().getStructuralObjectClass().equals(
                  entry.getStructuralObjectClass()))
       {
-        int    msgID   = MSGID_CONFIG_FILE_MODIFY_STRUCTURAL_CHANGE_NOT_ALLOWED;
-        String message = getMessage(msgID, String.valueOf(entryDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID);
+        Message message = ERR_CONFIG_FILE_MODIFY_STRUCTURAL_CHANGE_NOT_ALLOWED.
+            get(String.valueOf(entryDN));
+        throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
 
 
@@ -1677,16 +1652,15 @@
       // If there are, then make sure they are all OK with the change.
       CopyOnWriteArrayList<ConfigChangeListener> changeListeners =
            currentEntry.getChangeListeners();
-      StringBuilder unacceptableReason = new StringBuilder();
+      MessageBuilder unacceptableReason = new MessageBuilder();
       for (ConfigChangeListener l : changeListeners)
       {
         if (! l.configChangeIsAcceptable(newEntry, unacceptableReason))
         {
-          int    msgID   = MSGID_CONFIG_FILE_MODIFY_REJECTED_BY_CHANGE_LISTENER;
-          String message = getMessage(msgID, String.valueOf(entryDN),
-                                      String.valueOf(unacceptableReason));
-          throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                       msgID);
+          Message message = ERR_CONFIG_FILE_MODIFY_REJECTED_BY_CHANGE_LISTENER.
+              get(String.valueOf(entryDN), String.valueOf(unacceptableReason));
+          throw new DirectoryException(
+                  ResultCode.UNWILLING_TO_PERFORM, message);
         }
       }
 
@@ -1700,8 +1674,8 @@
 
 
       // Notify all the change listeners of the update.
-      ResultCode         resultCode = ResultCode.SUCCESS;
-      LinkedList<String> messages   = new LinkedList<String>();
+      ResultCode         resultCode  = ResultCode.SUCCESS;
+      LinkedList<Message> messages   = new LinkedList<Message>();
       for (ConfigChangeListener l : changeListeners)
       {
         ConfigChangeResult result = l.applyConfigurationChange(newEntry);
@@ -1722,10 +1696,10 @@
 
       if (resultCode != ResultCode.SUCCESS)
       {
-        StringBuilder buffer = new StringBuilder();
+        MessageBuilder buffer = new MessageBuilder();
         if (! messages.isEmpty())
         {
-          Iterator<String> iterator = messages.iterator();
+          Iterator<Message> iterator = messages.iterator();
           buffer.append(iterator.next());
           while (iterator.hasNext())
           {
@@ -1734,9 +1708,9 @@
           }
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_MODIFY_APPLY_FAILED;
-        String message = getMessage(msgID, String.valueOf(buffer));
-        throw new DirectoryException(resultCode, message, msgID);
+        Message message =
+            ERR_CONFIG_FILE_MODIFY_APPLY_FAILED.get(String.valueOf(buffer));
+        throw new DirectoryException(resultCode, message);
       }
     }
     finally
@@ -1775,20 +1749,17 @@
       if (! (clientConnection.hasAllPrivileges(CONFIG_READ_AND_WRITE,
                                                modifyDNOperation)))
       {
-        int    msgID   = MSGID_CONFIG_FILE_MODDN_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_CONFIG_FILE_MODDN_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
     }
 
 
     // Modify DN operations will not be allowed in the configuration, so this
     // will always throw an exception.
-    int msgID = MSGID_CONFIG_FILE_MODDN_NOT_ALLOWED;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_CONFIG_FILE_MODDN_NOT_ALLOWED.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -1810,10 +1781,9 @@
     ClientConnection clientConnection = searchOperation.getClientConnection();
     if (! clientConnection.hasPrivilege(Privilege.CONFIG_READ, searchOperation))
     {
-      int    msgID   = MSGID_CONFIG_FILE_SEARCH_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
+      Message message = ERR_CONFIG_FILE_SEARCH_INSUFFICIENT_PRIVILEGES.get();
       throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -1822,9 +1792,8 @@
     ConfigEntry baseEntry = configEntries.get(baseDN);
     if (baseEntry == null)
     {
-      int    msgID   = MSGID_CONFIG_FILE_SEARCH_NO_SUCH_BASE;
-      String message = getMessage(msgID, String.valueOf(baseDN));
-
+      Message message = ERR_CONFIG_FILE_SEARCH_NO_SUCH_BASE.get(
+              String.valueOf(baseDN));
       DN matchedDN = null;
       if (baseDN.isDescendantOf(configRootEntry.getDN()))
       {
@@ -1841,7 +1810,7 @@
         }
       }
 
-      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, msgID,
+      throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
                                    matchedDN, null);
     }
 
@@ -1902,9 +1871,9 @@
 
       default:
         // The user provided an invalid scope.
-        int    msgID   = MSGID_CONFIG_FILE_SEARCH_INVALID_SCOPE;
-        String message = getMessage(msgID, String.valueOf(scope));
-        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, msgID);
+        Message message =
+            ERR_CONFIG_FILE_SEARCH_INVALID_SCOPE.get(String.valueOf(scope));
+        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
     }
   }
 
@@ -2004,15 +1973,12 @@
         inputStream.close();
         outputStream.close();
 
-        int    msgID   = MSGID_CONFIG_MANUAL_CHANGES_DETECTED;
-        String message = getMessage(msgID, configFile,
-                                    newConfigFile.getAbsolutePath());
-
-        logError(ErrorLogCategory.CONFIGURATION,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = WARN_CONFIG_MANUAL_CHANGES_DETECTED.get(
+            configFile, newConfigFile.getAbsolutePath());
+        logError(message);
 
         DirectoryServer.sendAlertNotification(this,
-             ALERT_TYPE_MANUAL_CONFIG_EDIT_HANDLED, msgID, message);
+             ALERT_TYPE_MANUAL_CONFIG_EDIT_HANDLED, message);
       }
     }
     catch (Exception e)
@@ -2022,15 +1988,12 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_MANUAL_CHANGES_LOST;
-      String message = getMessage(msgID, configFile,
-                                  stackTraceToSingleLineString(e));
-
-      logError(ErrorLogCategory.CONFIGURATION,
-               ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+      Message message = ERR_CONFIG_MANUAL_CHANGES_LOST.get(
+          configFile, stackTraceToSingleLineString(e));
+      logError(message);
 
       DirectoryServer.sendAlertNotification(this,
-           ALERT_TYPE_MANUAL_CONFIG_EDIT_HANDLED, msgID, message);
+           ALERT_TYPE_MANUAL_CONFIG_EDIT_HANDLED, message);
     }
 
 
@@ -2051,15 +2014,12 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_WRITE_CANNOT_EXPORT_NEW_CONFIG;
-      String message = getMessage(msgID, String.valueOf(tempConfig),
-                                  stackTraceToSingleLineString(e));
-
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_CONFIG_FILE_WRITE_CANNOT_EXPORT_NEW_CONFIG.get(
+          String.valueOf(tempConfig), stackTraceToSingleLineString(e));
+      logError(message);
 
       DirectoryServer.sendAlertNotification(this,
-           ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, msgID, message);
+           ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, message);
       return;
     }
 
@@ -2078,16 +2038,13 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_WRITE_CANNOT_RENAME_NEW_CONFIG;
-      String message = getMessage(msgID, String.valueOf(tempConfig),
-                                  String.valueOf(configFile),
-                                  stackTraceToSingleLineString(e));
-
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_CONFIG_FILE_WRITE_CANNOT_RENAME_NEW_CONFIG.
+          get(String.valueOf(tempConfig), String.valueOf(configFile),
+              stackTraceToSingleLineString(e));
+      logError(message);
 
       DirectoryServer.sendAlertNotification(this,
-           ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, msgID, message);
+           ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, message);
       return;
     }
 
@@ -2119,15 +2076,12 @@
       {
         if (! archiveDirectory.mkdirs())
         {
-          int msgID = MSGID_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR_NO_REASON;
-          String message = getMessage(msgID,
-                                      archiveDirectory.getAbsolutePath());
-
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+          Message message = ERR_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR_NO_REASON.
+              get(archiveDirectory.getAbsolutePath());
+          logError(message);
 
           DirectoryServer.sendAlertNotification(this,
-               ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, msgID, message);
+               ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, message);
           return;
         }
       }
@@ -2138,15 +2092,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR;
-        String message = getMessage(msgID, archiveDirectory.getAbsolutePath(),
-                                    stackTraceToSingleLineString(e));
-
-        logError(ErrorLogCategory.CONFIGURATION,
-                 ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+        Message message = ERR_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR.
+            get(archiveDirectory.getAbsolutePath(),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         DirectoryServer.sendAlertNotification(this,
-             ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, msgID, message);
+             ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, message);
         return;
       }
     }
@@ -2179,14 +2131,12 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
-
-      logError(ErrorLogCategory.CONFIGURATION,
-               ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+      Message message = ERR_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE.get(
+          stackTraceToSingleLineString(e));
+      logError(message);
 
       DirectoryServer.sendAlertNotification(this,
-           ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, msgID, message);
+           ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, message);
       return;
     }
 
@@ -2214,14 +2164,12 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
-
-      logError(ErrorLogCategory.CONFIGURATION,
-               ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+      Message message = ERR_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE.get(
+          stackTraceToSingleLineString(e));
+      logError(message);
 
       DirectoryServer.sendAlertNotification(this,
-           ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, msgID, message);
+           ALERT_TYPE_CANNOT_WRITE_CONFIGURATION, message);
       return;
     }
     finally
@@ -2300,7 +2248,7 @@
     try
     {
       writer = new LDIFWriter(exportConfig);
-      writer.writeComment(getMessage(MSGID_CONFIG_FILE_HEADER), 80);
+      writer.writeComment(INFO_CONFIG_FILE_HEADER.get(), 80);
       writeEntryAndChildren(writer, configRootEntry);
     }
     catch (Exception e)
@@ -2310,10 +2258,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_LDIF_WRITE_ERROR;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message = ERR_CONFIG_LDIF_WRITE_ERROR.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
     try
@@ -2327,10 +2274,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_CLOSE_ERROR;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message = ERR_CONFIG_FILE_CLOSE_ERROR.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
   }
 
@@ -2363,11 +2309,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_FILE_WRITE_ERROR;
-      String message = getMessage(msgID, configEntry.getDN().toString(),
-                                  String.valueOf(e));
+      Message message = ERR_CONFIG_FILE_WRITE_ERROR.get(
+          configEntry.getDN().toString(), String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -2404,10 +2349,8 @@
   public LDIFImportResult importLDIF(LDIFImportConfig importConfig)
          throws DirectoryException
   {
-    int msgID     =  MSGID_CONFIG_FILE_UNWILLING_TO_IMPORT;
-    String message = getMessage(msgID);
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message = ERR_CONFIG_FILE_UNWILLING_TO_IMPORT.get();
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -2505,12 +2448,11 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_CONFIG_BACKUP_CANNOT_GET_MAC;
-          String message = getMessage(msgID, macAlgorithm,
-                                      stackTraceToSingleLineString(e));
+          Message message = ERR_CONFIG_BACKUP_CANNOT_GET_MAC.get(
+              macAlgorithm, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
-                         msgID, e);
+                         e);
         }
       }
       else
@@ -2529,12 +2471,11 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_CONFIG_BACKUP_CANNOT_GET_DIGEST;
-          String message = getMessage(msgID, digestAlgorithm,
-                                      stackTraceToSingleLineString(e));
+          Message message = ERR_CONFIG_BACKUP_CANNOT_GET_DIGEST.get(
+              digestAlgorithm, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
-                         msgID, e);
+                         e);
         }
       }
     }
@@ -2582,12 +2523,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_CONFIG_BACKUP_CANNOT_CREATE_ARCHIVE_FILE;
-      String message = getMessage(msgID, String.valueOf(filename),
-                                  backupDirectory.getPath(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
+          get(String.valueOf(filename), backupDirectory.getPath(),
+              stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -2610,11 +2550,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_CONFIG_BACKUP_CANNOT_GET_CIPHER;
-        String message = getMessage(msgID, cipherAlgorithm,
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_CONFIG_BACKUP_CANNOT_GET_CIPHER.get(
+            cipherAlgorithm, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
       outputStream = new CipherOutputStream(outputStream, cipher);
@@ -2624,10 +2563,10 @@
     // Wrap the file output stream in a zip output stream.
     ZipOutputStream zipStream = new ZipOutputStream(outputStream);
 
-    int    msgID   = MSGID_CONFIG_BACKUP_ZIP_COMMENT;
-    String message = getMessage(msgID, DynamicConstants.PRODUCT_NAME,
-                                backupID);
-    zipStream.setComment(message);
+    Message message = ERR_CONFIG_BACKUP_ZIP_COMMENT.get(
+            DynamicConstants.PRODUCT_NAME,
+            backupID);
+    zipStream.setComment(message.toString());
 
     if (compress)
     {
@@ -2656,10 +2595,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID   = MSGID_CONFIG_BACKUP_CANNOT_DETERMINE_CONFIG_FILE_LOCATION;
-      message = getMessage(msgID, getExceptionMessage(e));
+      message = ERR_CONFIG_BACKUP_CANNOT_DETERMINE_CONFIG_FILE_LOCATION.
+          get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -2717,10 +2656,10 @@
         zipStream.close();
       } catch (Exception e2) {}
 
-      msgID   = MSGID_CONFIG_BACKUP_CANNOT_BACKUP_CONFIG_FILE;
-      message = getMessage(msgID, configFile, stackTraceToSingleLineString(e));
+      message = ERR_CONFIG_BACKUP_CANNOT_BACKUP_CONFIG_FILE.get(
+          configFile, stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -2783,10 +2722,10 @@
         zipStream.close();
       } catch (Exception e2) {}
 
-      msgID   = MSGID_CONFIG_BACKUP_CANNOT_BACKUP_ARCHIVED_CONFIGS;
-      message = getMessage(msgID, configFile, stackTraceToSingleLineString(e));
+      message = ERR_CONFIG_BACKUP_CANNOT_BACKUP_ARCHIVED_CONFIGS.get(
+          configFile, stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -2803,11 +2742,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID   = MSGID_CONFIG_BACKUP_CANNOT_CLOSE_ZIP_STREAM;
-      message = getMessage(msgID, filename, backupDirectory.getPath(),
-                           getExceptionMessage(e));
+      message = ERR_CONFIG_BACKUP_CANNOT_CLOSE_ZIP_STREAM.get(
+          filename, backupDirectory.getPath(), getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -2847,11 +2785,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_CONFIG_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR;
-      message = getMessage(msgID, backupDirectory.getDescriptorPath(),
-                           stackTraceToSingleLineString(e));
+      message = ERR_CONFIG_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get(
+          backupDirectory.getDescriptorPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
   }
 
@@ -2905,10 +2842,10 @@
     BackupInfo      backupInfo      = backupDirectory.getBackupInfo(backupID);
     if (backupInfo == null)
     {
-      int    msgID   = MSGID_CONFIG_RESTORE_NO_SUCH_BACKUP;
-      String message = getMessage(msgID, backupID, backupPath);
+      Message message =
+          ERR_CONFIG_RESTORE_NO_SUCH_BACKUP.get(backupID, backupPath);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -2918,10 +2855,10 @@
          backupInfo.getBackupProperty(BACKUP_PROPERTY_ARCHIVE_FILENAME);
     if (backupFilename == null)
     {
-      int    msgID   = MSGID_CONFIG_RESTORE_NO_BACKUP_FILE;
-      String message = getMessage(msgID, backupID, backupPath);
+      Message message =
+          ERR_CONFIG_RESTORE_NO_BACKUP_FILE.get(backupID, backupPath);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
     File backupFile = new File(backupPath + File.separator + backupFilename);
@@ -2929,10 +2866,10 @@
     {
       if (! backupFile.exists())
       {
-        int    msgID   = MSGID_CONFIG_RESTORE_NO_SUCH_FILE;
-        String message = getMessage(msgID, backupID, backupFile.getPath());
+        Message message =
+            ERR_CONFIG_RESTORE_NO_SUCH_FILE.get(backupID, backupFile.getPath());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
     }
     catch (DirectoryException de)
@@ -2941,11 +2878,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIG_RESTORE_CANNOT_CHECK_FOR_ARCHIVE;
-      String message = getMessage(msgID, backupID, backupFile.getPath(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_RESTORE_CANNOT_CHECK_FOR_ARCHIVE.get(
+          backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -2959,10 +2895,9 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_DIGEST_ALGORITHM);
       if (digestAlgorithm == null)
       {
-        int    msgID   = MSGID_CONFIG_RESTORE_UNKNOWN_DIGEST;
-        String message = getMessage(msgID, backupID);
+        Message message = ERR_CONFIG_RESTORE_UNKNOWN_DIGEST.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
 
       try
@@ -2972,10 +2907,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CONFIG_RESTORE_CANNOT_GET_DIGEST;
-        String message = getMessage(msgID, backupID, digestAlgorithm);
+        Message message =
+            ERR_CONFIG_RESTORE_CANNOT_GET_DIGEST.get(backupID, digestAlgorithm);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -2989,10 +2924,9 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_MAC_ALGORITHM);
       if (macAlgorithm == null)
       {
-        int    msgID   = MSGID_CONFIG_RESTORE_UNKNOWN_MAC;
-        String message = getMessage(msgID, backupID);
+        Message message = ERR_CONFIG_RESTORE_UNKNOWN_MAC.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
 
       try
@@ -3001,11 +2935,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CONFIG_RESTORE_CANNOT_GET_MAC;
-        String message = getMessage(msgID, backupID, macAlgorithm,
-                                    backupFile.getPath());
+        Message message = ERR_CONFIG_RESTORE_CANNOT_GET_MAC.get(
+            backupID, macAlgorithm);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -3019,11 +2952,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIG_RESTORE_CANNOT_OPEN_BACKUP_FILE;
-      String message = getMessage(msgID, backupID, backupFile.getPath(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_RESTORE_CANNOT_OPEN_BACKUP_FILE.get(
+          backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
     // If the backup is encrypted, then we need to wrap the file input stream
@@ -3034,10 +2966,9 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_CIPHER_ALGORITHM);
       if (cipherAlgorithm == null)
       {
-        int    msgID   = MSGID_CONFIG_RESTORE_UNKNOWN_CIPHER;
-        String message = getMessage(msgID, backupID);
+        Message message = ERR_CONFIG_RESTORE_UNKNOWN_CIPHER.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
 
       Cipher cipher;
@@ -3048,12 +2979,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CONFIG_RESTORE_CANNOT_GET_CIPHER;
-        String message = getMessage(msgID, cipherAlgorithm,
-                                    backupFile.getPath(),
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_CONFIG_RESTORE_CANNOT_GET_CIPHER.
+            get(backupFile.getPath(), cipherAlgorithm);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
       inputStream = new CipherInputStream(inputStream, cipher);
@@ -3119,12 +3048,11 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CONFIG_RESTORE_CANNOT_BACKUP_EXISTING_CONFIG;
-        String message = getMessage(msgID, backupID, configDirPath,
-                                    String.valueOf(backupDirPath),
-                                    getExceptionMessage(e));
+        Message message = ERR_CONFIG_RESTORE_CANNOT_BACKUP_EXISTING_CONFIG.
+            get(backupID, configDirPath, String.valueOf(backupDirPath),
+                getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
 
@@ -3142,26 +3070,23 @@
           try
           {
             configBackupDir.renameTo(configDir);
-            int    msgID   = MSGID_CONFIG_RESTORE_RESTORED_OLD_CONFIG;
-            String message = getMessage(msgID, configDirPath);
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                     msgID);
+            Message message =
+                NOTE_CONFIG_RESTORE_RESTORED_OLD_CONFIG.get(configDirPath);
+            logError(message);
           }
           catch (Exception e2)
           {
-            int msgID = MSGID_CONFIG_RESTORE_CANNOT_RESTORE_OLD_CONFIG;
-            String message = getMessage(msgID, configBackupDir.getPath());
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message = ERR_CONFIG_RESTORE_CANNOT_RESTORE_OLD_CONFIG.get(
+                configBackupDir.getPath());
+            logError(message);
           }
         }
 
 
-        int    msgID   = MSGID_CONFIG_RESTORE_CANNOT_CREATE_CONFIG_DIRECTORY;
-        String message = getMessage(msgID, backupID, configDirPath,
-                                    getExceptionMessage(e));
+        Message message = ERR_CONFIG_RESTORE_CANNOT_CREATE_CONFIG_DIRECTORY.get(
+            backupID, configDirPath, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -3182,17 +3107,15 @@
         // Tell the user where the previous config was archived.
         if (configBackupDir != null)
         {
-          int    msgID   = MSGID_CONFIG_RESTORE_OLD_CONFIG_SAVED;
-          String message = getMessage(msgID, configBackupDir.getPath());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                   msgID);
+          Message message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
+              configBackupDir.getPath());
+          logError(message);
         }
 
-        int    msgID   = MSGID_CONFIG_RESTORE_CANNOT_GET_ZIP_ENTRY;
-        String message = getMessage(msgID, backupID, backupFile.getPath(),
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_CONFIG_RESTORE_CANNOT_GET_ZIP_ENTRY.get(
+            backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
 
       if (zipEntry == null)
@@ -3236,19 +3159,17 @@
           // Tell the user where the previous config was archived.
           if (configBackupDir != null)
           {
-            int    msgID   = MSGID_CONFIG_RESTORE_OLD_CONFIG_SAVED;
-            String message = getMessage(msgID, configBackupDir.getPath());
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                     msgID);
+            Message message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
+                configBackupDir.getPath());
+            logError(message);
           }
 
-          int    msgID   = MSGID_CONFIG_RESTORE_CANNOT_CREATE_FILE;
-          String message = getMessage(msgID, backupID,
-                                      restoreFile.getAbsolutePath(),
-                                      stackTraceToSingleLineString(e));
+          Message message = ERR_CONFIG_RESTORE_CANNOT_CREATE_FILE.
+              get(backupID, restoreFile.getAbsolutePath(),
+                  stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
-                         msgID, e);
+                         e);
         }
       }
 
@@ -3300,17 +3221,15 @@
         // Tell the user where the previous config was archived.
         if (configBackupDir != null)
         {
-          int    msgID   = MSGID_CONFIG_RESTORE_OLD_CONFIG_SAVED;
-          String message = getMessage(msgID, configBackupDir.getPath());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                   msgID);
+          Message message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
+              configBackupDir.getPath());
+          logError(message);
         }
 
-        int msgID = MSGID_CONFIG_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE;
-        String message = getMessage(msgID, backupID, fileName,
-                                    stackTraceToSingleLineString(e));
+        Message message = ERR_CONFIG_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE.get(
+            backupID, fileName, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -3322,11 +3241,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIG_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE;
-      String message = getMessage(msgID, backupID, backupFile.getPath(),
-                                  getExceptionMessage(e));
+      Message message = ERR_CONFIG_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE.get(
+          backupID, backupFile.getPath(), getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -3338,26 +3256,23 @@
       byte[] calculatedHash = digest.digest();
       if (Arrays.equals(calculatedHash, unsignedHash))
       {
-        int    msgID = MSGID_CONFIG_RESTORE_UNSIGNED_HASH_VALID;
-        String message = getMessage(msgID);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                 msgID);
+        Message message = NOTE_CONFIG_RESTORE_UNSIGNED_HASH_VALID.get();
+        logError(message);
       }
       else
       {
         // Tell the user where the previous config was archived.
         if (configBackupDir != null)
         {
-          int    msgID   = MSGID_CONFIG_RESTORE_OLD_CONFIG_SAVED;
-          String message = getMessage(msgID, configBackupDir.getPath());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                   msgID);
+          Message message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
+              configBackupDir.getPath());
+          logError(message);
         }
 
-        int    msgID = MSGID_CONFIG_RESTORE_UNSIGNED_HASH_INVALID;
-        String message = getMessage(msgID, backupID);
+        Message message =
+            ERR_CONFIG_RESTORE_UNSIGNED_HASH_INVALID.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -3366,26 +3281,23 @@
       byte[] calculatedSignature = mac.doFinal();
       if (Arrays.equals(calculatedSignature, signedHash))
       {
-        int    msgID = MSGID_CONFIG_RESTORE_SIGNED_HASH_VALID;
-        String message = getMessage(msgID);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                 msgID);
+        Message message = NOTE_CONFIG_RESTORE_SIGNED_HASH_VALID.get();
+        logError(message);
       }
       else
       {
         // Tell the user where the previous config was archived.
         if (configBackupDir != null)
         {
-          int    msgID   = MSGID_CONFIG_RESTORE_OLD_CONFIG_SAVED;
-          String message = getMessage(msgID, configBackupDir.getPath());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                   msgID);
+          Message message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
+              configBackupDir.getPath());
+          logError(message);
         }
 
-        int    msgID = MSGID_CONFIG_RESTORE_SIGNED_HASH_INVALID;
-        String message = getMessage(msgID);
+        Message message = ERR_CONFIG_RESTORE_SIGNED_HASH_INVALID.get(
+                configBackupDir.getPath());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -3393,10 +3305,9 @@
     // If we are just verifying the archive, then we're done.
     if (verifyOnly)
     {
-      int    msgID   = MSGID_CONFIG_RESTORE_VERIFY_SUCCESSFUL;
-      String message = getMessage(msgID, backupID, backupPath);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-               msgID);
+      Message message =
+          NOTE_CONFIG_RESTORE_VERIFY_SUCCESSFUL.get(backupID, backupPath);
+      logError(message);
       return;
     }
 
@@ -3409,10 +3320,8 @@
       recursiveDelete(configBackupDir);
     }
 
-    int    msgID   = MSGID_CONFIG_RESTORE_SUCCESSFUL;
-    String message = getMessage(msgID, backupID, backupPath);
-    logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-             msgID);
+    Message message = NOTE_CONFIG_RESTORE_SUCCESSFUL.get(backupID, backupPath);
+    logError(message);
   }
 
 
@@ -3491,23 +3400,21 @@
   {
     if (result == null)
     {
-      int    msgID   = MSGID_CONFIG_CHANGE_NO_RESULT;
-      String message = getMessage(msgID, String.valueOf(className),
-                                  String.valueOf(methodName),
-                                  String.valueOf(entryDN));
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_CONFIG_CHANGE_NO_RESULT.
+          get(String.valueOf(className), String.valueOf(methodName),
+              String.valueOf(entryDN));
+      logError(message);
       return;
     }
 
-    ResultCode   resultCode          = result.getResultCode();
-    boolean      adminActionRequired = result.adminActionRequired();
-    List<String> messages            = result.getMessages();
+    ResultCode    resultCode          = result.getResultCode();
+    boolean       adminActionRequired = result.adminActionRequired();
+    List<Message> messages            = result.getMessages();
 
-    StringBuilder messageBuffer = new StringBuilder();
+    MessageBuilder messageBuffer = new MessageBuilder();
     if (messages != null)
     {
-      for (String s : messages)
+      for (Message s : messages)
       {
         if (messageBuffer.length() > 0)
         {
@@ -3520,35 +3427,25 @@
 
     if (resultCode != ResultCode.SUCCESS)
     {
-      int    msgID   = MSGID_CONFIG_CHANGE_RESULT_ERROR;
-      String message = getMessage(msgID, String.valueOf(className),
-                                  String.valueOf(methodName),
-                                  String.valueOf(entryDN),
-                                  String.valueOf(resultCode),
-                                  adminActionRequired,
-                                  messageBuffer.toString());
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_CONFIG_CHANGE_RESULT_ERROR.
+          get(String.valueOf(className), String.valueOf(methodName),
+              String.valueOf(entryDN), String.valueOf(resultCode),
+              adminActionRequired, messageBuffer.toString());
+      logError(message);
     }
     else if (adminActionRequired)
     {
-      int    msgID   = MSGID_CONFIG_CHANGE_RESULT_ACTION_REQUIRED;
-      String message = getMessage(msgID, String.valueOf(className),
-                                  String.valueOf(methodName),
-                                  String.valueOf(entryDN),
-                                  messageBuffer.toString());
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.SEVERE_WARNING,
-               message, msgID);
+      Message 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)
     {
-      int    msgID   = MSGID_CONFIG_CHANGE_RESULT_MESSAGES;
-      String message = getMessage(msgID, String.valueOf(className),
-                                  String.valueOf(methodName),
-                                  String.valueOf(entryDN),
-                                  messageBuffer.toString());
-      logError(ErrorLogCategory.CONFIGURATION, ErrorLogSeverity.INFORMATIONAL,
-               message, msgID);
+      Message message = INFO_CONFIG_CHANGE_RESULT_MESSAGES.
+          get(String.valueOf(className), String.valueOf(methodName),
+              String.valueOf(entryDN), messageBuffer.toString());
+      logError(message);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/CryptPasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/CryptPasswordStorageScheme.java
index 82ec8c2..0c76800 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/CryptPasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/CryptPasswordStorageScheme.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
 import static org.opends.server.extensions.ExtensionsConstants.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.util.Arrays;
@@ -125,12 +125,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME,
-                                  stackTraceToSingleLineString(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
     return ByteStringFactory.create(digestBytes);
@@ -227,10 +225,9 @@
   public ByteString encodeAuthPassword(ByteString plaintext)
          throws DirectoryException
   {
-    int    msgID   = MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD;
-    String message = getMessage(msgID, getStorageSchemeName());
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -266,10 +263,9 @@
   public ByteString getPlaintextValue(ByteString storedPassword)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID, STORAGE_SCHEME_NAME_CRYPT);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_CRYPT);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
@@ -282,10 +278,9 @@
                                                   String authValue)
          throws DirectoryException
   {
-    int    msgID   = MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD;
-    String message = getMessage(msgID, getStorageSchemeName());
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/DefaultEntryCache.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/DefaultEntryCache.java
index b5e7020..7633e06 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/DefaultEntryCache.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/DefaultEntryCache.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -44,7 +45,6 @@
 
 
 
-
 /**
  * This class defines the default entry cache that will be used in the server if
  * none is configured.  It does not actually store any entries, so all calls to
@@ -212,7 +212,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       EntryCacheCfg configuration,
-      List<String>  unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // No implementation required.
@@ -231,7 +231,7 @@
     // No implementation required.
 
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<String>()
+        ResultCode.SUCCESS, false, new ArrayList<Message>()
         );
 
     return changeResult;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/DictionaryPasswordValidator.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/DictionaryPasswordValidator.java
index d11d987..065b66b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/DictionaryPasswordValidator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/DictionaryPasswordValidator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -52,8 +53,8 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -126,7 +127,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      StringBuilder invalidReason)
+                                      MessageBuilder invalidReason)
   {
     // Get a handle to the current configuration.
     DictionaryPasswordValidatorCfg config = currentConfig;
@@ -143,8 +144,8 @@
 
     if (dictionary.contains(password))
     {
-      int msgID = MSGID_DICTIONARY_VALIDATOR_PASSWORD_IN_DICTIONARY;
-      invalidReason.append(getMessage(msgID));
+      invalidReason.append(
+              ERR_DICTIONARY_VALIDATOR_PASSWORD_IN_DICTIONARY.get());
       return false;
     }
 
@@ -154,8 +155,8 @@
     {
       if (dictionary.contains(new StringBuilder(password).reverse().toString()))
       {
-        int msgID = MSGID_DICTIONARY_VALIDATOR_PASSWORD_IN_DICTIONARY;
-        invalidReason.append(getMessage(msgID));
+        invalidReason.append(
+                ERR_DICTIONARY_VALIDATOR_PASSWORD_IN_DICTIONARY.get());
         return false;
       }
     }
@@ -187,9 +188,9 @@
     File dictionaryFile = getFileForPath(configuration.getDictionaryFile());
     if (! dictionaryFile.exists())
     {
-      int    msgID   = MSGID_DICTIONARY_VALIDATOR_NO_SUCH_FILE;
-      String message = getMessage(msgID, configuration.getDictionaryFile());
-      throw new ConfigException(msgID, message);
+      Message message = ERR_DICTIONARY_VALIDATOR_NO_SUCH_FILE.get(
+          configuration.getDictionaryFile());
+      throw new ConfigException(message);
     }
 
 
@@ -218,10 +219,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_DICTIONARY_VALIDATOR_CANNOT_READ_FILE;
-      String message = getMessage(msgID, configuration.getDictionaryFile(),
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message);
+      Message message = ERR_DICTIONARY_VALIDATOR_CANNOT_READ_FILE.get(
+          configuration.getDictionaryFile(), String.valueOf(e));
+      throw new InitializationException(message);
     }
     finally
     {
@@ -244,7 +244,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PasswordValidatorCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     DictionaryPasswordValidatorCfg config =
          (DictionaryPasswordValidatorCfg) configuration;
@@ -258,7 +258,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       DictionaryPasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // Make sure that we can load the dictionary.  If so, then we'll accept the
     // new configuration.
@@ -268,12 +268,12 @@
     }
     catch (ConfigException ce)
     {
-      unacceptableReasons.add(ce.getMessage());
+      unacceptableReasons.add(ce.getMessageObject());
       return false;
     }
     catch (InitializationException ie)
     {
-      unacceptableReasons.add(ie.getMessage());
+      unacceptableReasons.add(ie.getMessageObject());
       return false;
     }
     catch (Exception e)
@@ -295,7 +295,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Make sure we can load the dictionary.  If we can, then activate the new
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandler.java
index e187669..bb42dab 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -60,8 +61,8 @@
 import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LockManager;
 import org.opends.server.types.Privilege;
@@ -72,8 +73,8 @@
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -164,9 +165,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_GET_MESSAGE_DIGEST;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_SASLDIGESTMD5_CANNOT_GET_MESSAGE_DIGEST.get(
+          getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -175,10 +176,9 @@
     identityMapper = DirectoryServer.getIdentityMapper(identityMapperDN);
     if (identityMapper == null)
     {
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_SUCH_IDENTITY_MAPPER;
-      String message = getMessage(msgID, String.valueOf(identityMapperDN),
-                                  String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message = ERR_SASLDIGESTMD5_NO_SUCH_IDENTITY_MAPPER.get(
+          String.valueOf(identityMapperDN), String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
 
 
@@ -297,12 +297,11 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLDIGESTMD5_CHALLENGE_TOO_LONG;
-        String message = getMessage(msgID, challenge.value().length);
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = WARN_SASLDIGESTMD5_CHALLENGE_TOO_LONG.get(
+                challenge.value().length);
+        bindOperation.setAuthFailureReason(message);
 
-        logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        logError(message);
         return;
       }
 
@@ -327,9 +326,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_CREDENTIALS;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLDIGESTMD5_NO_CREDENTIALS.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -380,9 +378,8 @@
 
       // This isn't necessarily fatal because we're going to retry using UTF-8,
       // but we want to log it anyway.
-      logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.SEVERE_WARNING,
-               MSGID_SASLDIGESTMD5_CANNOT_PARSE_ISO_CREDENTIALS,
-               responseCharset, getExceptionMessage(e));
+      logError(WARN_SASLDIGESTMD5_CANNOT_PARSE_ISO_CREDENTIALS.get(
+          responseCharset, getExceptionMessage(e)));
     }
 
     if ((credString == null) ||
@@ -404,9 +401,9 @@
         // string at all, or we know we need to do so using UTF-8 and can't.
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_PARSE_UTF8_CREDENTIALS;
-        String message = getMessage(msgID, getExceptionMessage(e));
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = WARN_SASLDIGESTMD5_CANNOT_PARSE_UTF8_CREDENTIALS.get(
+                getExceptionMessage(e));
+        bindOperation.setAuthFailureReason(message);
         return;
       }
     }
@@ -425,9 +422,9 @@
         // have a name/value delimiter.
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLDIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS;
-        String message = getMessage(msgID, pos);
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLDIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS.get(
+                credString, pos);
+        bindOperation.setAuthFailureReason(message);
         return;
       }
 
@@ -445,8 +442,8 @@
       {
         // We couldn't parse the token value, so it must be malformed.
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
-        bindOperation.setAuthFailureReason(de.getMessageID(),
-                                           de.getErrorMessage());
+        bindOperation.setAuthFailureReason(
+                de.getMessageObject());
         return;
       }
 
@@ -457,9 +454,8 @@
         {
           bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int    msgID   = MSGID_SASLDIGESTMD5_INVALID_CHARSET;
-          String message = getMessage(msgID, tokenValue);
-          bindOperation.setAuthFailureReason(msgID, message);
+          Message message = ERR_SASLDIGESTMD5_INVALID_CHARSET.get(tokenValue);
+          bindOperation.setAuthFailureReason(message);
           return;
         }
       }
@@ -476,9 +472,9 @@
           {
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int   msgID   = MSGID_SASLDIGESTMD5_INVALID_REALM;
-            String message = getMessage(msgID, responseRealm);
-            bindOperation.setAuthFailureReason(msgID, message);
+            Message message =
+                    ERR_SASLDIGESTMD5_INVALID_REALM.get(responseRealm);
+            bindOperation.setAuthFailureReason(message);
             return;
           }
         }
@@ -493,10 +489,9 @@
           // attempt at a replay or chosen plaintext attack, so we'll close the
           // connection.  We will put a message in the log but will not send it
           // to the client.
-          int    msgID   = MSGID_SASLDIGESTMD5_INVALID_NONCE;
-          String message = getMessage(msgID);
+          Message message = ERR_SASLDIGESTMD5_INVALID_NONCE.get();
           clientConnection.disconnect(DisconnectReason.SECURITY_PROBLEM, false,
-                                      msgID, message);
+                  message);
           return;
         }
       }
@@ -520,9 +515,9 @@
 
           bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_DECODE_NONCE_COUNT;
-          String message = getMessage(msgID, tokenValue);
-          bindOperation.setAuthFailureReason(msgID, message);
+          Message message = ERR_SASLDIGESTMD5_CANNOT_DECODE_NONCE_COUNT.get(
+                  tokenValue);
+          bindOperation.setAuthFailureReason(message);
           return;
         }
 
@@ -540,9 +535,10 @@
 
           bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int msgID = MSGID_SASLDIGESTMD5_CANNOT_DECODE_STORED_NONCE_COUNT;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          bindOperation.setAuthFailureReason(msgID, message);
+          Message message =
+                  ERR_SASLDIGESTMD5_CANNOT_DECODE_STORED_NONCE_COUNT.get(
+                          getExceptionMessage(e));
+          bindOperation.setAuthFailureReason(message);
           return;
         }
 
@@ -551,10 +547,9 @@
           // The nonce count provided by the client is incorrect.  This
           // indicates a replay attack, so we'll close the connection.  We will
           // put a message in the log but we will not send it to the client.
-          int    msgID   = MSGID_SASLDIGESTMD5_INVALID_NONCE_COUNT;
-          String message = getMessage(msgID);
+          Message message = ERR_SASLDIGESTMD5_INVALID_NONCE_COUNT.get();
           clientConnection.disconnect(DisconnectReason.SECURITY_PROBLEM, false,
-                                      msgID, message);
+                  message);
           return;
         }
       }
@@ -571,9 +566,8 @@
           // FIXME -- Add support for integrity protection.
           bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int    msgID   = MSGID_SASLDIGESTMD5_INTEGRITY_NOT_SUPPORTED;
-          String message = getMessage(msgID);
-          bindOperation.setAuthFailureReason(msgID, message);
+          Message message = ERR_SASLDIGESTMD5_INTEGRITY_NOT_SUPPORTED.get();
+          bindOperation.setAuthFailureReason(message);
           return;
         }
         else if (responseQoP.equals("auth-conf"))
@@ -581,9 +575,9 @@
           // FIXME -- Add support for confidentiality protection.
           bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int    msgID   = MSGID_SASLDIGESTMD5_CONFIDENTIALITY_NOT_SUPPORTED;
-          String message = getMessage(msgID);
-          bindOperation.setAuthFailureReason(msgID, message);
+          Message message =
+                  ERR_SASLDIGESTMD5_CONFIDENTIALITY_NOT_SUPPORTED.get();
+          bindOperation.setAuthFailureReason(message);
           return;
         }
         else
@@ -591,9 +585,8 @@
           // This is an invalid QoP value.
           bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int    msgID   = MSGID_SASLDIGESTMD5_INVALID_QOP;
-          String message = getMessage(msgID, responseQoP);
-          bindOperation.setAuthFailureReason(msgID, message);
+          Message message = ERR_SASLDIGESTMD5_INVALID_QOP.get(responseQoP);
+          bindOperation.setAuthFailureReason(message);
           return;
         }
       }
@@ -611,10 +604,9 @@
           {
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int    msgID   = MSGID_SASLDIGESTMD5_INVALID_DIGEST_URI;
-            String message = getMessage(msgID, responseDigestURI,
-                                        expectedDigestURI);
-            bindOperation.setAuthFailureReason(msgID, message);
+            Message message = ERR_SASLDIGESTMD5_INVALID_DIGEST_URI.get(
+                    responseDigestURI, expectedDigestURI);
+            bindOperation.setAuthFailureReason(message);
             return;
           }
         }
@@ -632,9 +624,10 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, pe);
           }
 
-          int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_PARSE_RESPONSE_DIGEST;
-          String message = getMessage(msgID, getExceptionMessage(pe));
-          bindOperation.setAuthFailureReason(msgID, message);
+          Message message =
+                  ERR_SASLDIGESTMD5_CANNOT_PARSE_RESPONSE_DIGEST.get(
+                          getExceptionMessage(pe));
+          bindOperation.setAuthFailureReason(message);
           return;
         }
       }
@@ -653,9 +646,9 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLDIGESTMD5_INVALID_RESPONSE_TOKEN;
-        String message = getMessage(msgID, tokenName);
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLDIGESTMD5_INVALID_RESPONSE_TOKEN.get(
+                tokenName);
+        bindOperation.setAuthFailureReason(message);
         return;
       }
     }
@@ -666,54 +659,48 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_USERNAME_IN_RESPONSE;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLDIGESTMD5_NO_USERNAME_IN_RESPONSE.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
     else if (responseNonce == null)
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_NONCE_IN_RESPONSE;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLDIGESTMD5_NO_NONCE_IN_RESPONSE.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
     else if (responseCNonce == null)
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_CNONCE_IN_RESPONSE;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLDIGESTMD5_NO_CNONCE_IN_RESPONSE.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
     else if (responseNonceCount < 0)
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_NONCE_COUNT_IN_RESPONSE;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLDIGESTMD5_NO_NONCE_COUNT_IN_RESPONSE.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
     else if (responseDigestURI == null)
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_DIGEST_URI_IN_RESPONSE;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLDIGESTMD5_NO_DIGEST_URI_IN_RESPONSE.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
     else if (responseDigest == null)
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_DIGEST_IN_RESPONSE;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLDIGESTMD5_NO_DIGEST_IN_RESPONSE.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -748,10 +735,9 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_DECODE_USERNAME_AS_DN;
-        String message = getMessage(msgID, responseUserName,
-                                    de.getErrorMessage());
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLDIGESTMD5_CANNOT_DECODE_USERNAME_AS_DN.get(
+                responseUserName, de.getMessageObject());
+        bindOperation.setAuthFailureReason(message);
         return;
       }
 
@@ -759,9 +745,8 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLDIGESTMD5_USERNAME_IS_NULL_DN;
-        String message = getMessage(msgID);
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLDIGESTMD5_USERNAME_IS_NULL_DN.get();
+        bindOperation.setAuthFailureReason(message);
         return;
       }
 
@@ -787,9 +772,9 @@
       {
         bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
 
-        int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_LOCK_ENTRY;
-        String message = getMessage(msgID, String.valueOf(userDN));
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = INFO_SASLDIGESTMD5_CANNOT_LOCK_ENTRY.get(
+                String.valueOf(userDN));
+        bindOperation.setAuthFailureReason(message);
         return;
       }
 
@@ -806,10 +791,9 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_GET_ENTRY_BY_DN;
-        String message = getMessage(msgID, String.valueOf(userDN),
-                                    de.getErrorMessage());
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLDIGESTMD5_CANNOT_GET_ENTRY_BY_DN.get(
+                String.valueOf(userDN), de.getMessageObject());
+        bindOperation.setAuthFailureReason(message);
         return;
       }
       finally
@@ -827,9 +811,8 @@
         {
           bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int    msgID   = MSGID_SASLDIGESTMD5_ZERO_LENGTH_USERNAME;
-          String message = getMessage(msgID);
-          bindOperation.setAuthFailureReason(msgID, message);
+          Message message = ERR_SASLDIGESTMD5_ZERO_LENGTH_USERNAME.get();
+          bindOperation.setAuthFailureReason(message);
           return;
         }
 
@@ -850,10 +833,9 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_MAP_USERNAME;
-        String message = getMessage(msgID, String.valueOf(responseUserName),
-                                    de.getErrorMessage());
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLDIGESTMD5_CANNOT_MAP_USERNAME.get(
+                String.valueOf(responseUserName), de.getMessageObject());
+        bindOperation.setAuthFailureReason(message);
         return;
       }
     }
@@ -864,9 +846,9 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_MATCHING_ENTRIES;
-      String message = getMessage(msgID, responseUserName);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message =
+              ERR_SASLDIGESTMD5_NO_MATCHING_ENTRIES.get(responseUserName);
+      bindOperation.setAuthFailureReason(message);
       return;
     }
     else
@@ -883,9 +865,8 @@
         // The authorization ID must not be an empty string.
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLDIGESTMD5_EMPTY_AUTHZID;
-        String message = getMessage(msgID);
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLDIGESTMD5_EMPTY_AUTHZID.get();
+        bindOperation.setAuthFailureReason(message);
         return;
       }
       else if (! responseAuthzID.equals(responseUserName))
@@ -908,10 +889,9 @@
 
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int    msgID   = MSGID_SASLDIGESTMD5_AUTHZID_INVALID_DN;
-            String message = getMessage(msgID, responseAuthzID,
-                                        de.getErrorMessage());
-            bindOperation.setAuthFailureReason(msgID, message);
+            Message message = ERR_SASLDIGESTMD5_AUTHZID_INVALID_DN.get(
+                    responseAuthzID, de.getMessageObject());
+            bindOperation.setAuthFailureReason(message);
             return;
           }
 
@@ -932,10 +912,10 @@
             {
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int msgID = MSGID_SASLDIGESTMD5_AUTHZID_INSUFFICIENT_PRIVILEGES;
-              String message = getMessage(msgID,
-                                          String.valueOf(userEntry.getDN()));
-              bindOperation.setAuthFailureReason(msgID, message);
+              Message message =
+                      ERR_SASLDIGESTMD5_AUTHZID_INSUFFICIENT_PRIVILEGES.get(
+                              String.valueOf(userEntry.getDN()));
+              bindOperation.setAuthFailureReason(message);
               return;
             }
 
@@ -952,9 +932,9 @@
                 {
                   bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-                  int msgID = MSGID_SASLDIGESTMD5_AUTHZID_NO_SUCH_ENTRY;
-                  String message = getMessage(msgID, String.valueOf(authzDN));
-                  bindOperation.setAuthFailureReason(msgID, message);
+                  Message message = ERR_SASLDIGESTMD5_AUTHZID_NO_SUCH_ENTRY.get(
+                          String.valueOf(authzDN));
+                  bindOperation.setAuthFailureReason(message);
                   return;
                 }
               }
@@ -967,10 +947,9 @@
 
                 bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-                int msgID = MSGID_SASLDIGESTMD5_AUTHZID_CANNOT_GET_ENTRY;
-                String message = getMessage(msgID, String.valueOf(authzDN),
-                                            de.getErrorMessage());
-                bindOperation.setAuthFailureReason(msgID, message);
+                Message message = ERR_SASLDIGESTMD5_AUTHZID_CANNOT_GET_ENTRY
+                        .get(String.valueOf(authzDN), de.getMessageObject());
+                bindOperation.setAuthFailureReason(message);
                 return;
               }
             }
@@ -1001,9 +980,9 @@
               {
                 bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-                int    msgID   = MSGID_SASLDIGESTMD5_AUTHZID_NO_MAPPED_ENTRY;
-                String message = getMessage(msgID, responseAuthzID);
-                bindOperation.setAuthFailureReason(msgID, message);
+                Message message = ERR_SASLDIGESTMD5_AUTHZID_NO_MAPPED_ENTRY.get(
+                        responseAuthzID);
+                bindOperation.setAuthFailureReason(message);
                 return;
               }
             }
@@ -1016,10 +995,9 @@
 
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_MAP_AUTHZID;
-              String message = getMessage(msgID, responseAuthzID,
-                                          de.getErrorMessage());
-              bindOperation.setAuthFailureReason(msgID, message);
+              Message message = ERR_SASLDIGESTMD5_CANNOT_MAP_AUTHZID.get(
+                      responseAuthzID, de.getMessageObject());
+              bindOperation.setAuthFailureReason(message);
               return;
             }
           }
@@ -1036,10 +1014,10 @@
             {
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int msgID = MSGID_SASLDIGESTMD5_AUTHZID_INSUFFICIENT_PRIVILEGES;
-              String message = getMessage(msgID,
-                                          String.valueOf(userEntry.getDN()));
-              bindOperation.setAuthFailureReason(msgID, message);
+              Message message =
+                      ERR_SASLDIGESTMD5_AUTHZID_INSUFFICIENT_PRIVILEGES.get(
+                              String.valueOf(userEntry.getDN()));
+              bindOperation.setAuthFailureReason(message);
               return;
             }
           }
@@ -1059,9 +1037,9 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int msgID = MSGID_SASLDIGESTMD5_NO_REVERSIBLE_PASSWORDS;
-        String message = getMessage(msgID, String.valueOf(userEntry.getDN()));
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLDIGESTMD5_NO_REVERSIBLE_PASSWORDS.get(
+                String.valueOf(userEntry.getDN()));
+        bindOperation.setAuthFailureReason(message);
         return;
       }
     }
@@ -1069,10 +1047,10 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_GET_REVERSIBLE_PASSWORDS;
-      String message = getMessage(msgID, String.valueOf(userEntry.getDN()),
-                                  String.valueOf(e));
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLDIGESTMD5_CANNOT_GET_REVERSIBLE_PASSWORDS.get(
+              String.valueOf(userEntry.getDN()),
+              String.valueOf(e));
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -1100,10 +1078,8 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        logError(ErrorLogCategory.EXTENSIONS,
-                 ErrorLogSeverity.SEVERE_WARNING,
-                 MSGID_SASLDIGESTMD5_CANNOT_GENERATE_RESPONSE_DIGEST,
-                 getExceptionMessage(e));
+        logError(WARN_SASLDIGESTMD5_CANNOT_GENERATE_RESPONSE_DIGEST.get(
+            getExceptionMessage(e)));
         continue;
       }
 
@@ -1119,9 +1095,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_INVALID_CREDENTIALS;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLDIGESTMD5_INVALID_CREDENTIALS.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -1147,9 +1122,10 @@
 
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLDIGESTMD5_CANNOT_GENERATE_RESPONSE_AUTH_DIGEST;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message =
+              ERR_SASLDIGESTMD5_CANNOT_GENERATE_RESPONSE_AUTH_DIGEST.get(
+                      getExceptionMessage(e));
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -1318,10 +1294,10 @@
             {
               // We found the closing quote before the end of the token.  This
               // is not fine.
-              int    msgID   = MSGID_SASLDIGESTMD5_INVALID_CLOSING_QUOTE_POS;
-              String message = getMessage(msgID, (pos-2));
+              Message message =
+                  ERR_SASLDIGESTMD5_INVALID_CLOSING_QUOTE_POS.get((pos-2));
               throw new DirectoryException(ResultCode.INVALID_CREDENTIALS,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -1619,7 +1595,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     DigestMD5SASLMechanismHandlerCfg config =
          (DigestMD5SASLMechanismHandlerCfg) configuration;
@@ -1633,7 +1609,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       DigestMD5SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -1644,10 +1620,9 @@
          DirectoryServer.getIdentityMapper(identityMapperDN);
     if (newIdentityMapper == null)
     {
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_SUCH_IDENTITY_MAPPER;
-      unacceptableReasons.add(getMessage(msgID,
-                                         String.valueOf(identityMapperDN),
-                                         String.valueOf(cfgEntryDN)));
+      unacceptableReasons.add(ERR_SASLDIGESTMD5_NO_SUCH_IDENTITY_MAPPER.get(
+              String.valueOf(identityMapperDN),
+              String.valueOf(cfgEntryDN)));
       configAcceptable = false;
     }
 
@@ -1665,7 +1640,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the identity mapper that should be used to find users.
@@ -1679,9 +1654,9 @@
         resultCode = ResultCode.CONSTRAINT_VIOLATION;
       }
 
-      int    msgID   = MSGID_SASLDIGESTMD5_NO_SUCH_IDENTITY_MAPPER;
-      messages.add(getMessage(msgID, String.valueOf(identityMapperDN),
-                              String.valueOf(configEntryDN)));
+      messages.add(ERR_SASLDIGESTMD5_NO_SUCH_IDENTITY_MAPPER.get(
+              String.valueOf(identityMapperDN),
+              String.valueOf(configEntryDN)));
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/DynamicGroup.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/DynamicGroup.java
index 35c52e5..c214ad9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/DynamicGroup.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/DynamicGroup.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -45,8 +46,6 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LDAPURL;
 import org.opends.server.types.MemberList;
@@ -55,11 +54,10 @@
 import org.opends.server.types.SearchScope;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.Validator.*;
 
@@ -169,12 +167,10 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_DYNAMICGROUP_CANNOT_DECODE_MEMBERURL;
-            String message = getMessage(msgID, v.getStringValue(),
-                                        String.valueOf(groupEntry.getDN()),
-                                        de.getErrorMessage());
-            logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.MILD_ERROR,
-                     message, msgID);
+            Message message = ERR_DYNAMICGROUP_CANNOT_DECODE_MEMBERURL.
+                get(v.getStringValue(), String.valueOf(groupEntry.getDN()),
+                    de.getMessageObject());
+            ErrorLogger.logError(message);
           }
         }
       }
@@ -273,9 +269,8 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Dynamic groups don't support nesting.
-    int    msgID   = MSGID_DYNAMICGROUP_NESTING_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_DYNAMICGROUP_NESTING_NOT_SUPPORTED.get();
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -288,9 +283,8 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Dynamic groups don't support nesting.
-    int    msgID   = MSGID_DYNAMICGROUP_NESTING_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_DYNAMICGROUP_NESTING_NOT_SUPPORTED.get();
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -397,9 +391,8 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Dynamic groups don't support altering the member list.
-    int    msgID   = MSGID_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED.get();
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -412,9 +405,8 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Dynamic groups don't support altering the member list.
-    int    msgID   = MSGID_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED.get();
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/DynamicGroupSearchThread.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/DynamicGroupSearchThread.java
index c6850d9..f7b30c0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/DynamicGroupSearchThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/DynamicGroupSearchThread.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -38,8 +39,6 @@
 import org.opends.server.types.DereferencePolicy;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.LDAPURL;
 import org.opends.server.types.MembershipException;
 import org.opends.server.types.ResultCode;
@@ -48,11 +47,8 @@
 import org.opends.server.types.SearchResultReference;
 import org.opends.server.types.SearchScope;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
+import static org.opends.messages.ExtensionMessages.*;
+import org.opends.server.loggers.ErrorLogger;
 
 /**
  * This class implements a Directory Server thread that will be used to perform
@@ -134,25 +130,23 @@
       {
         if (resultCode == ResultCode.NO_SUCH_OBJECT)
         {
-          int    msgID   = MSGID_DYNAMICGROUP_NONEXISTENT_BASE_DN;
-          String message =
-               getMessage(msgID, String.valueOf(baseDNs[searchCounter]),
-                          String.valueOf(memberList.getDynamicGroupDN()));
-          logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.MILD_WARNING,
-                   message, msgID);
+          Message message = WARN_DYNAMICGROUP_NONEXISTENT_BASE_DN.
+              get(String.valueOf(baseDNs[searchCounter]),
+                  String.valueOf(memberList.getDynamicGroupDN()));
+          ErrorLogger.logError(message);
           continue;
         }
         else
         {
-          int    msgID   = MSGID_DYNAMICGROUP_INTERNAL_SEARCH_FAILED;
-          String message =
-               getMessage(msgID, String.valueOf(baseDNs[searchCounter]),
-                          String.valueOf(searchFilters[searchCounter]),
-                          String.valueOf(memberList.getDynamicGroupDN()),
-                          String.valueOf(resultCode),
-                          String.valueOf(searchOperation.getErrorMessage()));
+          Message message =
+               ERR_DYNAMICGROUP_INTERNAL_SEARCH_FAILED.get(
+                       String.valueOf(baseDNs[searchCounter]),
+                       String.valueOf(searchFilters[searchCounter]),
+                       String.valueOf(memberList.getDynamicGroupDN()),
+                       String.valueOf(resultCode),
+                       String.valueOf(searchOperation.getErrorMessage()));
           if (! memberList.addResult(
-                     new MembershipException(msgID, message, true)))
+                     new MembershipException(message, true)))
           {
             memberList.setSearchesCompleted();
             return;
@@ -179,13 +173,11 @@
       {
         if (! memberList.addResult(searchEntry))
         {
-          int msgID = MSGID_DYNAMICGROUP_CANNOT_RETURN_ENTRY;
-          String message = getMessage(msgID,
-                                String.valueOf(searchEntry.getDN()),
-                                String.valueOf(memberList.getDynamicGroupDN()));
+          Message message = ERR_DYNAMICGROUP_CANNOT_RETURN_ENTRY.
+              get(String.valueOf(searchEntry.getDN()),
+                  String.valueOf(memberList.getDynamicGroupDN()));
           throw new DirectoryException(
-                         DirectoryServer.getServerErrorResultCode(), message,
-                         msgID);
+                         DirectoryServer.getServerErrorResultCode(), message);
         }
 
         return;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/EntryCacheCommon.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/EntryCacheCommon.java
index 10abc6f..40caf11 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/EntryCacheCommon.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/EntryCacheCommon.java
@@ -25,9 +25,10 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import org.opends.messages.MessageDescriptor;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.util.ArrayList;
@@ -37,8 +38,7 @@
 
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.SearchFilter;
 
@@ -83,10 +83,10 @@
     private EntryCacheCommon.ConfigPhase _configPhase;
 
     // Unacceptable reasons. Used when _configPhase is PHASE_ACCEPTABLE.
-    private List<String> _unacceptableReasons;
+    private List<Message> _unacceptableReasons;
 
     // Error messages. Used when _configPhase is PHASE_APPLY.
-    private ArrayList<String> _errorMessages;
+    private ArrayList<Message> _errorMessages;
 
     // Result code. Used when _configPhase is PHASE_APPLY.
     private ResultCode _resultCode;
@@ -107,8 +107,8 @@
      */
     public ConfigErrorHandler (
         EntryCacheCommon.ConfigPhase configPhase,
-        List<String>                 unacceptableReasons,
-        ArrayList<String>            errorMessages
+        List<Message> unacceptableReasons,
+        ArrayList<Message>            errorMessages
         )
     {
       _configPhase         = configPhase;
@@ -121,44 +121,32 @@
     /**
      * Report an error.
      *
-     * @param category     the category of the error to report
-     * @param severity     the severity of the error to report
-     * @param errorID      the error ID of the error to report
-     * @param arg1         the first  argument of the error message
-     * @param arg2         the second argument of the error message
-     * @param arg3         the third  argument of the error message
+     * @param error        the error to report
      * @param isAcceptable <code>true</code> if the configuration is acceptable
      * @param resultCode   the change result for the current configuration
      */
     public void reportError(
-        ErrorLogCategory category,
-        ErrorLogSeverity severity,
-        int              errorID,
-        String           arg1,
-        String           arg2,
-        String           arg3,
-        boolean          isAcceptable,
-        ResultCode       resultCode
-        )
+            Message error,
+            boolean isAcceptable,
+            ResultCode resultCode
+    )
     {
       switch (_configPhase)
       {
       case PHASE_INIT:
         {
-        logError (category, severity, errorID, arg1, arg2, arg3);
+        logError (error);
         break;
         }
       case PHASE_ACCEPTABLE:
         {
-        String message = getMessage (errorID, arg1, arg2, arg3);
-        _unacceptableReasons.add (message);
+        _unacceptableReasons.add (error);
         _isAcceptable = isAcceptable;
         break;
         }
       case PHASE_APPLY:
         {
-        String message = getMessage (errorID, arg1, arg2, arg3);
-        _errorMessages.add (message);
+        _errorMessages.add (error);
         _isAcceptable = isAcceptable;
         if (_resultCode == ResultCode.SUCCESS)
         {
@@ -197,7 +185,7 @@
      *
      * @return the list of unacceptable reasons
      */
-    public List<String> getUnacceptableReasons()
+    public List<Message> getUnacceptableReasons()
     {
       return _unacceptableReasons;
     }
@@ -208,7 +196,7 @@
      *
      * @return the list of error messages
      */
-    public ArrayList<String> getErrorMessages()
+    public ArrayList<Message> getErrorMessages()
     {
       return _errorMessages;
     }
@@ -232,10 +220,10 @@
    * filters.
    *
    * @param filters  the list of string filter to convert to search filters
-   * @param decodeErrorMsgId  the error message ID to use in case of error
+   * @param decodeErrorMsg  the error message ID to use in case of error
    * @param errorHandler      an handler used to report errors
    *                          during decoding of filter
-   * @param noFilterMsgId     the error message ID to use when none of the
+   * @param noFilterMsg     the error message ID to use when none of the
    *                          filters was decoded properly
    * @param configEntryDN     the DN of the configuration entry for the
    *                          entry cache
@@ -243,11 +231,13 @@
    * @return the set of search filters
    */
   public static HashSet<SearchFilter> getFilters (
-      SortedSet<String>  filters,
-      int                decodeErrorMsgId,
-      int                noFilterMsgId,
-      ConfigErrorHandler errorHandler,
-      DN                 configEntryDN
+      SortedSet<String>       filters,
+      MessageDescriptor.Arg3<CharSequence, CharSequence, CharSequence>
+                              decodeErrorMsg,
+      MessageDescriptor.Arg1<CharSequence>
+                              noFilterMsg,
+      ConfigErrorHandler      errorHandler,
+      DN                      configEntryDN
       )
   {
     // Returned value
@@ -266,15 +256,13 @@
         {
           // We couldn't decode this filter. Log a warning and continue.
           errorHandler.reportError(
-              ErrorLogCategory.CONFIGURATION,
-              ErrorLogSeverity.SEVERE_WARNING,
-              decodeErrorMsgId,
-              String.valueOf(configEntryDN),
-              curFilter,
-              stackTraceToSingleLineString (de),
-              false,
-              ResultCode.INVALID_ATTRIBUTE_SYNTAX
-              );
+                  decodeErrorMsg.get(
+                          String.valueOf(configEntryDN),
+                          curFilter,
+                          stackTraceToSingleLineString(de)),
+                  false,
+                  ResultCode.INVALID_ATTRIBUTE_SYNTAX
+          );
         }
       }
 
@@ -283,16 +271,15 @@
       if ((errorHandler.getConfigPhase() == ConfigPhase.PHASE_INIT)
           && searchFilters.isEmpty())
       {
-        errorHandler.reportError(
-            ErrorLogCategory.CONFIGURATION,
-            ErrorLogSeverity.SEVERE_ERROR,
-            noFilterMsgId,
-            null,
-            null,
-            null,
-            false,
-            null
-            );
+        if (noFilterMsg != null) {
+          errorHandler.reportError(
+                  noFilterMsg.get(String.valueOf(configEntryDN)),
+                  false, null);
+        } else {
+          errorHandler.reportError( // TODO: i18n
+                  Message.raw("No filter provided: %s", configEntryDN),
+                  false, null);
+        }
       }
     }
 
@@ -315,8 +302,8 @@
    */
   public static ConfigErrorHandler getConfigErrorHandler (
       EntryCacheCommon.ConfigPhase  configPhase,
-      List<String>                  unacceptableReasons,
-      ArrayList<String>             errorMessages
+      List<Message> unacceptableReasons,
+      ArrayList<Message>             errorMessages
       )
   {
     ConfigErrorHandler errorHandler = null;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProvider.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProvider.java
index 6af98f1..1c810dc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -48,8 +49,7 @@
 import org.opends.server.types.VirtualAttributeRule;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -257,8 +257,8 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    int    msgID   = MSGID_ENTRYUUID_VATTR_NOT_SEARCHABLE;
-    String message = getMessage(msgID, rule.getAttributeType().getNameOrOID());
+    Message message = ERR_ENTRYUUID_VATTR_NOT_SEARCHABLE.get(
+            rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandler.java
index ad07f71..5e16790 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandler.java
@@ -25,12 +25,13 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.ExtensionsMessages.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -47,8 +48,8 @@
 import org.opends.server.types.AccountStatusNotificationType;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
@@ -71,15 +72,15 @@
    * The set of names for the account status notification types that may be
    * logged by this notification handler.
    */
-  private static final HashSet<String> NOTIFICATION_TYPE_NAMES =
-       new HashSet<String>();
+  private static final HashSet<Message> NOTIFICATION_TYPE_NAMES =
+       new HashSet<Message>();
 
   static
   {
     for (AccountStatusNotificationType t :
          AccountStatusNotificationType.values())
     {
-      NOTIFICATION_TYPE_NAMES.add(t.getNotificationTypeName());
+      NOTIFICATION_TYPE_NAMES.add(t.getNotificationName());
     }
   }
 
@@ -114,15 +115,15 @@
    * {@inheritDoc}
    */
   public void handleStatusNotification(AccountStatusNotificationType
-                                            notificationType,
-                                       DN userDN, int messageID, String message)
+          notificationType,
+                                       DN userDN, Message message)
   {
     if (notificationTypes.contains(notificationType))
     {
-      int msgID = MSGID_ERRORLOG_ACCTNOTHANDLER_NOTIFICATION;
-      logError(ErrorLogCategory.PASSWORD_POLICY, ErrorLogSeverity.NOTICE,
-               msgID, notificationType.getNotificationTypeName(),
-               String.valueOf(userDN), messageID, message);
+      logError(NOTE_ERRORLOG_ACCTNOTHANDLER_NOTIFICATION.get(
+                notificationType.getNotificationName(),
+                String.valueOf(userDN),
+                message.getDescriptor().getId(), message));
     }
   }
 
@@ -134,7 +135,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       AccountStatusNotificationHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     ErrorLogAccountStatusNotificationHandlerCfg config =
          (ErrorLogAccountStatusNotificationHandlerCfg) configuration;
@@ -148,7 +149,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       ErrorLogAccountStatusNotificationHandlerCfg configuration,
-      List<String> unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // Make sure that we can process the defined notification handler.
@@ -199,7 +200,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
     ConfigChangeResult changeResult = new ConfigChangeResult(
         resultCode, adminActionRequired, messages
         );
@@ -258,8 +259,9 @@
    * Gets the OpenDS notification type object that corresponds to the
    * configuration counterpart.
    *
-   * @param  notificationType  The configuration notification type for which
-   *                           to retrieve the OpenDS notification type.
+   * @param  configNotificationType  The configuration notification type for
+   *                                 which  to retrieve the OpenDS notification
+   *                                 type.
    */
   private AccountStatusNotificationType getNotificationType(
       ErrorLogAccountStatusNotificationHandlerCfgDefn.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/ExactMatchIdentityMapper.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/ExactMatchIdentityMapper.java
index d71e544..793ce21 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/ExactMatchIdentityMapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/ExactMatchIdentityMapper.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -57,8 +58,8 @@
 import org.opends.server.types.SearchResultEntry;
 import org.opends.server.types.SearchScope;
 
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -128,10 +129,9 @@
                                                             false);
       if (type == null)
       {
-        int    msgID   = MSGID_EXACTMAP_UNKNOWN_ATTR;
-        String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                    name);
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_EXACTMAP_UNKNOWN_ATTR.get(String.valueOf(configEntryDN), name);
+        throw new ConfigException(message);
       }
 
       attributeTypes[i++] = type;
@@ -233,27 +233,25 @@
 
         case SIZE_LIMIT_EXCEEDED:
           // Multiple entries matched the filter.  This is not acceptable.
-          int    msgID   = MSGID_EXACTMAP_MULTIPLE_MATCHING_ENTRIES;
-          String message = getMessage(msgID, String.valueOf(id));
-          throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                       msgID);
+          Message message =
+              ERR_EXACTMAP_MULTIPLE_MATCHING_ENTRIES.get(String.valueOf(id));
+          throw new DirectoryException(
+                  ResultCode.CONSTRAINT_VIOLATION, message);
 
         case TIME_LIMIT_EXCEEDED:
         case ADMIN_LIMIT_EXCEEDED:
           // The search criteria was too inefficient.
-          msgID   = MSGID_EXACTMAP_INEFFICIENT_SEARCH;
-          message = getMessage(msgID, String.valueOf(id),
-                         String.valueOf(internalSearch.getErrorMessage()));
-          throw new DirectoryException(internalSearch.getResultCode(), message,
-                                       msgID);
+          message = ERR_EXACTMAP_INEFFICIENT_SEARCH.
+              get(String.valueOf(id),
+                  String.valueOf(internalSearch.getErrorMessage()));
+          throw new DirectoryException(internalSearch.getResultCode(), message);
 
         default:
           // Just pass on the failure that was returned for this search.
-          msgID   = MSGID_EXACTMAP_SEARCH_FAILED;
-          message = getMessage(msgID, String.valueOf(id),
-                         String.valueOf(internalSearch.getErrorMessage()));
-          throw new DirectoryException(internalSearch.getResultCode(), message,
-                                       msgID);
+          message = ERR_EXACTMAP_SEARCH_FAILED.
+              get(String.valueOf(id),
+                  String.valueOf(internalSearch.getErrorMessage()));
+          throw new DirectoryException(internalSearch.getResultCode(), message);
       }
 
       LinkedList<SearchResultEntry> searchEntries =
@@ -266,18 +264,18 @@
           matchingEntry = iterator.next();
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_EXACTMAP_MULTIPLE_MATCHING_ENTRIES;
-            String message = getMessage(msgID, String.valueOf(id));
+            Message message =
+                ERR_EXACTMAP_MULTIPLE_MATCHING_ENTRIES.get(String.valueOf(id));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
         }
         else
         {
-          int    msgID   = MSGID_EXACTMAP_MULTIPLE_MATCHING_ENTRIES;
-          String message = getMessage(msgID, String.valueOf(id));
-          throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                       msgID);
+          Message message =
+              ERR_EXACTMAP_MULTIPLE_MATCHING_ENTRIES.get(String.valueOf(id));
+          throw new DirectoryException(
+                  ResultCode.CONSTRAINT_VIOLATION, message);
         }
       }
     }
@@ -300,7 +298,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(IdentityMapperCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     ExactMatchIdentityMapperCfg config =
          (ExactMatchIdentityMapperCfg) configuration;
@@ -314,7 +312,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       ExactMatchIdentityMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -326,8 +324,9 @@
                                                          false);
       if (t == null)
       {
-        int msgID = MSGID_EXACTMAP_UNKNOWN_ATTR;
-        unacceptableReasons.add(getMessage(msgID, configuration.dn(), name));
+
+        unacceptableReasons.add(ERR_EXACTMAP_UNKNOWN_ATTR.get(
+                String.valueOf(configuration.dn()), name));
         configAcceptable = false;
       }
     }
@@ -346,7 +345,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the attribute types to use for the searches.
@@ -364,8 +363,8 @@
           resultCode = ResultCode.NO_SUCH_ATTRIBUTE;
         }
 
-        int msgID = MSGID_EXACTMAP_UNKNOWN_ATTR;
-        messages.add(getMessage(msgID, String.valueOf(configEntryDN), name));
+        messages.add(ERR_EXACTMAP_UNKNOWN_ATTR.get(
+                String.valueOf(configEntryDN), name));
       }
 
       newAttributeTypes[i++] = type;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/ExternalSASLMechanismHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/ExternalSASLMechanismHandler.java
index 702e3c4..826e558 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/ExternalSASLMechanismHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/ExternalSASLMechanismHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -57,8 +58,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -151,10 +152,9 @@
          DirectoryServer.getAttributeType(toLowerCase(attrTypeName), false);
     if (certificateAttributeType == null)
     {
-      int    msgID   = MSGID_SASLEXTERNAL_UNKNOWN_CERT_ATTR;
-      String message = getMessage(msgID, String.valueOf(attrTypeName),
-                                  String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message = ERR_SASLEXTERNAL_UNKNOWN_CERT_ATTR.get(
+          String.valueOf(attrTypeName), String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
 
 
@@ -164,11 +164,10 @@
               configuration.getCertificateMapperDN());
     if (certificateMapper == null)
     {
-      int    msgID   = MSGID_SASLEXTERNAL_INVALID_CERTIFICATE_MAPPER_DN;
-      String message =
-           getMessage(msgID, String.valueOf(configEntryDN),
-                      String.valueOf(configuration.getCertificateMapperDN()));
-      throw new ConfigException(msgID, message);
+      Message message = ERR_SASLEXTERNAL_INVALID_CERTIFICATE_MAPPER_DN.
+          get(String.valueOf(configEntryDN),
+              String.valueOf(configuration.getCertificateMapperDN()));
+      throw new ConfigException(message);
     }
 
 
@@ -208,9 +207,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLEXTERNAL_NO_CLIENT_CONNECTION;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLEXTERNAL_NO_CLIENT_CONNECTION.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -220,9 +218,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLEXTERNAL_NO_SECURITY_PROVIDER;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLEXTERNAL_NO_SECURITY_PROVIDER.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -233,10 +230,9 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLEXTERNAL_CLIENT_NOT_USING_TLS_PROVIDER;
-      String message = getMessage(msgID,
-                                  securityProvider.getSecurityMechanismName());
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLEXTERNAL_CLIENT_NOT_USING_TLS_PROVIDER.get(
+              securityProvider.getSecurityMechanismName());
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -252,9 +248,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLEXTERNAL_NO_CLIENT_CERT;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLEXTERNAL_NO_CLIENT_CERT.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -267,10 +262,10 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLEXTERNAL_INVALID_CERTIFICATE_MAPPER_DN;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  String.valueOf(certificateMapperDN));
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLEXTERNAL_INVALID_CERTIFICATE_MAPPER_DN.get(
+              String.valueOf(configEntryDN),
+              String.valueOf(certificateMapperDN));
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -300,9 +295,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLEXTERNAL_NO_MAPPING;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLEXTERNAL_NO_MAPPING.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
     else
@@ -324,10 +318,9 @@
           {
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int    msgID   = MSGID_SASLEXTERNAL_NO_CERT_IN_ENTRY;
-            String message = getMessage(msgID,
-                                        String.valueOf(userEntry.getDN()));
-            bindOperation.setAuthFailureReason(msgID, message);
+            Message message = ERR_SASLEXTERNAL_NO_CERT_IN_ENTRY.get(
+                    String.valueOf(userEntry.getDN()));
+            bindOperation.setAuthFailureReason(message);
             return;
           }
         }
@@ -354,10 +347,9 @@
             {
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int    msgID   = MSGID_SASLEXTERNAL_PEER_CERT_NOT_FOUND;
-              String message = getMessage(msgID,
-                                          String.valueOf(userEntry.getDN()));
-              bindOperation.setAuthFailureReason(msgID, message);
+              Message message = ERR_SASLEXTERNAL_PEER_CERT_NOT_FOUND.get(
+                      String.valueOf(userEntry.getDN()));
+              bindOperation.setAuthFailureReason(message);
               return;
             }
           }
@@ -370,11 +362,10 @@
 
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int    msgID   = MSGID_SASLEXTERNAL_CANNOT_VALIDATE_CERT;
-            String message = getMessage(msgID,
-                                        String.valueOf(userEntry.getDN()),
-                                        getExceptionMessage(e));
-            bindOperation.setAuthFailureReason(msgID, message);
+            Message message = ERR_SASLEXTERNAL_CANNOT_VALIDATE_CERT.get(
+                    String.valueOf(userEntry.getDN()),
+                    getExceptionMessage(e));
+            bindOperation.setAuthFailureReason(message);
             return;
           }
         }
@@ -404,10 +395,9 @@
             {
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int    msgID   = MSGID_SASLEXTERNAL_PEER_CERT_NOT_FOUND;
-              String message = getMessage(msgID,
-                                          String.valueOf(userEntry.getDN()));
-              bindOperation.setAuthFailureReason(msgID, message);
+              Message message = ERR_SASLEXTERNAL_PEER_CERT_NOT_FOUND.get(
+                      String.valueOf(userEntry.getDN()));
+              bindOperation.setAuthFailureReason(message);
               return;
             }
           }
@@ -420,11 +410,10 @@
 
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int    msgID   = MSGID_SASLEXTERNAL_CANNOT_VALIDATE_CERT;
-            String message = getMessage(msgID,
-                                        String.valueOf(userEntry.getDN()),
-                                        getExceptionMessage(e));
-            bindOperation.setAuthFailureReason(msgID, message);
+            Message message = ERR_SASLEXTERNAL_CANNOT_VALIDATE_CERT.get(
+                    String.valueOf(userEntry.getDN()),
+                    getExceptionMessage(e));
+            bindOperation.setAuthFailureReason(message);
             return;
           }
         }
@@ -470,7 +459,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     ExternalSASLMechanismHandlerCfg config =
          (ExternalSASLMechanismHandlerCfg) configuration;
@@ -484,7 +473,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       ExternalSASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -500,9 +489,9 @@
          DirectoryServer.getAttributeType(toLowerCase(attrTypeName), false);
     if (newCertificateType == null)
     {
-      int msgID = MSGID_SASLEXTERNAL_UNKNOWN_CERT_ATTR;
-      unacceptableReasons.add(getMessage(msgID, String.valueOf(attrTypeName),
-                                         String.valueOf(cfgEntryDN)));
+      unacceptableReasons.add(ERR_SASLEXTERNAL_UNKNOWN_CERT_ATTR.get(
+              String.valueOf(attrTypeName),
+              String.valueOf(cfgEntryDN)));
       configAcceptable = false;
     }
 
@@ -513,9 +502,9 @@
               configuration.getCertificateMapperDN());
     if (certificateMapper == null)
     {
-      int msgID = MSGID_SASLEXTERNAL_INVALID_CERTIFICATE_MAPPER_DN;
-      unacceptableReasons.add(getMessage(msgID, String.valueOf(cfgEntryDN),
-           String.valueOf(configuration.getCertificateMapperDN())));
+      unacceptableReasons.add(ERR_SASLEXTERNAL_INVALID_CERTIFICATE_MAPPER_DN
+              .get(String.valueOf(cfgEntryDN),
+                   String.valueOf(configuration.getCertificateMapperDN())));
       configAcceptable = false;
     }
 
@@ -533,7 +522,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // See if we should attempt to validate client certificates against those in
@@ -570,9 +559,10 @@
         resultCode = ResultCode.NO_SUCH_ATTRIBUTE;
       }
 
-      int msgID = MSGID_SASLEXTERNAL_UNKNOWN_CERT_ATTR;
-      messages.add(getMessage(msgID, String.valueOf(attrTypeName),
-                              String.valueOf(configEntryDN)));
+
+      messages.add(ERR_SASLEXTERNAL_UNKNOWN_CERT_ATTR.get(
+              String.valueOf(attrTypeName),
+              String.valueOf(configEntryDN)));
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java
index 9a170d3..594b6e6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/FIFOEntryCache.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -56,10 +57,9 @@
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.SearchFilter;
 
-import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -859,7 +859,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(EntryCacheCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     FIFOEntryCacheCfg config = (FIFOEntryCacheCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -872,7 +872,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       FIFOEntryCacheCfg configuration,
-      List<String>      unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // Make sure that we can process the defined character sets.  If so, then
@@ -901,7 +901,7 @@
     // Make sure that we can process the defined character sets.  If so, then
     // activate the new configuration.
     boolean applyChanges = false;
-    ArrayList<String> errorMessages = new ArrayList<String>();
+    ArrayList<Message> errorMessages = new ArrayList<Message>();
     EntryCacheCommon.ConfigErrorHandler errorHandler =
       EntryCacheCommon.getConfigErrorHandler (
           EntryCacheCommon.ConfigPhase.PHASE_APPLY, null, errorMessages
@@ -960,9 +960,7 @@
       if (maxMemoryPercent != prevMaxMemoryPercent)
       {
         changeResult.addMessage(
-            getMessage(
-                MSGID_FIFOCACHE_UPDATED_MAX_MEMORY_PCT,
-                maxMemoryPercent,
+            INFO_FIFOCACHE_UPDATED_MAX_MEMORY_PCT.get(maxMemoryPercent,
                 maxAllowedMemory));
       }
 
@@ -970,25 +968,25 @@
       if (maxEntries != prevMaxEntries)
       {
         changeResult.addMessage(
-            getMessage (MSGID_FIFOCACHE_UPDATED_MAX_ENTRIES, maxEntries));
+            INFO_FIFOCACHE_UPDATED_MAX_ENTRIES.get(maxEntries));
       }
 
       if (lockTimeout != prevLockTimeout)
       {
         changeResult.addMessage(
-            getMessage (MSGID_FIFOCACHE_UPDATED_LOCK_TIMEOUT, lockTimeout));
+            INFO_FIFOCACHE_UPDATED_LOCK_TIMEOUT.get(lockTimeout));
       }
 
       if (!includeFilters.equals(prevIncludeFilters))
       {
         changeResult.addMessage(
-            getMessage (MSGID_FIFOCACHE_UPDATED_INCLUDE_FILTERS));
+            INFO_FIFOCACHE_UPDATED_INCLUDE_FILTERS.get());
       }
 
       if (!excludeFilters.equals(prevExcludeFilters))
       {
         changeResult.addMessage(
-            getMessage (MSGID_FIFOCACHE_UPDATED_EXCLUDE_FILTERS));
+            INFO_FIFOCACHE_UPDATED_EXCLUDE_FILTERS.get());
       }
     }
 
@@ -1038,15 +1036,15 @@
     case PHASE_INIT:
       newIncludeFilters = EntryCacheCommon.getFilters (
           configuration.getIncludeFilter(),
-          MSGID_FIFOCACHE_INVALID_INCLUDE_FILTER,
-          MSGID_FIFOCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS,
+          ERR_FIFOCACHE_INVALID_INCLUDE_FILTER,
+          WARN_FIFOCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS,
           errorHandler,
           newConfigEntryDN
           );
       newExcludeFilters = EntryCacheCommon.getFilters (
           configuration.getExcludeFilter(),
-          MSGID_FIFOCACHE_CANNOT_DECODE_EXCLUDE_FILTER,
-          MSGID_FIFOCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS,
+          WARN_FIFOCACHE_CANNOT_DECODE_EXCLUDE_FILTER,
+          WARN_FIFOCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS,
           errorHandler,
           newConfigEntryDN
           );
@@ -1055,15 +1053,15 @@
     case PHASE_APPLY:       // error ID codes
       newIncludeFilters = EntryCacheCommon.getFilters (
           configuration.getIncludeFilter(),
-          MSGID_FIFOCACHE_INVALID_INCLUDE_FILTER,
-          0,
+          ERR_FIFOCACHE_INVALID_INCLUDE_FILTER,
+          null,
           errorHandler,
           newConfigEntryDN
           );
       newExcludeFilters = EntryCacheCommon.getFilters (
           configuration.getExcludeFilter(),
-          MSGID_FIFOCACHE_INVALID_EXCLUDE_FILTER,
-          0,
+          ERR_FIFOCACHE_INVALID_EXCLUDE_FILTER,
+          null,
           errorHandler,
           newConfigEntryDN
           );
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java
index 456a289..32ba882 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -52,12 +53,11 @@
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -125,10 +125,9 @@
     try {
       File f = getFileForPath(keyStoreFile);
       if (!(f.exists() && f.isFile())) {
-        int msgID = MSGID_FILE_KEYMANAGER_NO_SUCH_FILE;
-        String message = getMessage(msgID, String
-            .valueOf(keyStoreFile), String.valueOf(configEntryDN));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_FILE_KEYMANAGER_NO_SUCH_FILE.get(
+            String.valueOf(keyStoreFile), String.valueOf(configEntryDN));
+        throw new InitializationException(message);
       }
     } catch (SecurityException e) {
       if (debugEnabled())
@@ -136,10 +135,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE;
-      String message = getMessage(msgID, String
-          .valueOf(configEntryDN), getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE.get(
+          String.valueOf(configEntryDN), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
     // Get the keystore type. If none is specified, then use the
@@ -154,11 +152,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, kse);
         }
 
-        int msgID = MSGID_FILE_KEYMANAGER_INVALID_TYPE;
-        String message = getMessage(msgID,
-            String.valueOf(configuration.getKeyStoreType()),
-            String.valueOf(configEntryDN), getExceptionMessage(kse));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_FILE_KEYMANAGER_INVALID_TYPE.
+            get(String.valueOf(configuration.getKeyStoreType()),
+                String.valueOf(configEntryDN), getExceptionMessage(kse));
+        throw new InitializationException(message);
       }
     } else {
       keyStoreType = KeyStore.getDefaultType();
@@ -182,10 +179,9 @@
       String pinStr = System.getProperty(propertyName);
 
       if (pinStr == null) {
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET;
-        String message = getMessage(msgID, String
-            .valueOf(propertyName), String.valueOf(configEntryDN));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
+            String.valueOf(propertyName), String.valueOf(configEntryDN));
+        throw new InitializationException(message);
       }
 
       keyStorePIN = pinStr.toCharArray();
@@ -195,10 +191,9 @@
       String pinStr = System.getenv(enVarName);
 
       if (pinStr == null) {
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET;
-        String message = getMessage(msgID, String.valueOf(enVarName),
-            String.valueOf(configEntryDN));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
+            String.valueOf(enVarName), String.valueOf(configEntryDN));
+        throw new InitializationException(message);
       }
 
       keyStorePIN = pinStr.toCharArray();
@@ -207,10 +202,9 @@
       File pinFile = getFileForPath(fileName);
 
       if (!pinFile.exists()) {
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_NO_SUCH_FILE;
-        String message = getMessage(msgID, String.valueOf(fileName),
-            String.valueOf(configEntryDN));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_FILE_KEYMANAGER_PIN_NO_SUCH_FILE.get(
+            String.valueOf(fileName), String.valueOf(configEntryDN));
+        throw new InitializationException(message);
       }
 
       String pinStr;
@@ -220,17 +214,16 @@
         pinStr = br.readLine();
         br.close();
       } catch (IOException ioe) {
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ;
-        String message = getMessage(msgID, String.valueOf(fileName),
-            String.valueOf(configEntryDN), getExceptionMessage(ioe));
-        throw new InitializationException(msgID, message, ioe);
+        Message 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) {
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_FILE_EMPTY;
-        String message = getMessage(msgID, String.valueOf(fileName),
-            String.valueOf(configEntryDN));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_FILE_KEYMANAGER_PIN_FILE_EMPTY.get(
+            String.valueOf(fileName), String.valueOf(configEntryDN));
+        throw new InitializationException(message);
       }
 
       keyStorePIN = pinStr.toCharArray();
@@ -238,10 +231,9 @@
       keyStorePIN = configuration.getKeyStorePin().toCharArray();
     } else {
       // Pin wasn't defined anywhere.
-      int msgID = MSGID_FILE_KEYMANAGER_NO_PIN;
-      String message = getMessage(msgID, String
-          .valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_FILE_KEYMANAGER_NO_PIN.get(String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
   }
 
@@ -288,10 +280,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_FILE_KEYMANAGER_CANNOT_LOAD;
-      String message = getMessage(msgID, keyStoreFile, getExceptionMessage(e));
+      Message message = ERR_FILE_KEYMANAGER_CANNOT_LOAD.get(
+          keyStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -310,10 +302,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_FILE_KEYMANAGER_CANNOT_CREATE_FACTORY;
-      String message = getMessage(msgID, keyStoreFile, getExceptionMessage(e));
+      Message message = ERR_FILE_KEYMANAGER_CANNOT_CREATE_FACTORY.get(
+          keyStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
   }
 
@@ -324,7 +316,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(KeyManagerCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     FileBasedKeyManagerCfg config = (FileBasedKeyManagerCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -337,7 +329,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       FileBasedKeyManagerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -350,10 +342,9 @@
       File f = getFileForPath(newKeyStoreFile);
       if (!(f.exists() && f.isFile()))
       {
-        int msgID = MSGID_FILE_KEYMANAGER_NO_SUCH_FILE;
-        unacceptableReasons.add(getMessage(msgID,
-                                           String.valueOf(newKeyStoreFile),
-                                           String.valueOf(cfgEntryDN)));
+        unacceptableReasons.add(ERR_FILE_KEYMANAGER_NO_SUCH_FILE.get(
+                String.valueOf(newKeyStoreFile),
+                String.valueOf(cfgEntryDN)));
         configAcceptable = false;
       }
     }
@@ -364,9 +355,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE;
-      unacceptableReasons.add(getMessage(msgID, String.valueOf(cfgEntryDN),
-                                         getExceptionMessage(e)));
+      unacceptableReasons.add(ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE.get(
+              String.valueOf(cfgEntryDN),
+              getExceptionMessage(e)));
       configAcceptable = false;
     }
 
@@ -384,10 +375,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, kse);
         }
 
-        int msgID = MSGID_FILE_KEYMANAGER_INVALID_TYPE;
-        unacceptableReasons.add(getMessage(msgID,
-             String.valueOf(configuration.getKeyStoreType()),
-             String.valueOf(cfgEntryDN), getExceptionMessage(kse)));
+        unacceptableReasons.add(ERR_FILE_KEYMANAGER_INVALID_TYPE.get(
+                String.valueOf(configuration.getKeyStoreType()),
+               String.valueOf(cfgEntryDN), getExceptionMessage(kse)));
         configAcceptable = false;
       }
     }
@@ -410,9 +400,9 @@
 
       if (pinStr == null)
       {
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET;
-        unacceptableReasons.add(getMessage(msgID, String.valueOf(propertyName),
-                                           String.valueOf(cfgEntryDN)));
+        unacceptableReasons.add(ERR_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
+                String.valueOf(propertyName),
+                String.valueOf(cfgEntryDN)));
         configAcceptable = false;
       }
     }
@@ -423,9 +413,9 @@
 
       if (pinStr == null)
       {
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET;
-        unacceptableReasons.add(getMessage(msgID, String.valueOf(enVarName),
-                                           String.valueOf(cfgEntryDN)));
+        unacceptableReasons.add(ERR_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
+                String.valueOf(enVarName),
+                String.valueOf(cfgEntryDN)));
         configAcceptable = false;
       }
     }
@@ -436,9 +426,9 @@
 
       if (!pinFile.exists())
       {
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_NO_SUCH_FILE;
-        unacceptableReasons.add(getMessage(msgID, String.valueOf(fileName),
-                                           String.valueOf(cfgEntryDN)));
+        unacceptableReasons.add(ERR_FILE_KEYMANAGER_PIN_NO_SUCH_FILE.get(
+                String.valueOf(fileName),
+                String.valueOf(cfgEntryDN)));
         configAcceptable = false;
       }
       else
@@ -451,10 +441,10 @@
         }
         catch (IOException ioe)
         {
-          int msgID = MSGID_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ;
-          unacceptableReasons.add(getMessage(msgID, String.valueOf(fileName),
-                                             String.valueOf(cfgEntryDN),
-                                             getExceptionMessage(ioe)));
+          unacceptableReasons.add(ERR_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ.get(
+                  String.valueOf(fileName),
+                  String.valueOf(cfgEntryDN),
+                  getExceptionMessage(ioe)));
           configAcceptable = false;
         }
         finally
@@ -467,9 +457,9 @@
 
         if (pinStr == null)
         {
-          int msgID = MSGID_FILE_KEYMANAGER_PIN_FILE_EMPTY;
-          unacceptableReasons.add(getMessage(msgID, String.valueOf(fileName),
-                                             String.valueOf(cfgEntryDN)));
+          unacceptableReasons.add(ERR_FILE_KEYMANAGER_PIN_FILE_EMPTY.get(
+                  String.valueOf(fileName),
+                  String.valueOf(cfgEntryDN)));
           configAcceptable = false;
         }
       }
@@ -481,8 +471,8 @@
     else
     {
       // Pin wasn't defined anywhere.
-      int msgID = MSGID_FILE_KEYMANAGER_NO_PIN;
-      unacceptableReasons.add(getMessage(msgID, String.valueOf(cfgEntryDN)));
+      unacceptableReasons.add(ERR_FILE_KEYMANAGER_NO_PIN.get(
+              String.valueOf(cfgEntryDN)));
       configAcceptable = false;
     }
 
@@ -499,7 +489,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the path to the key store file.
@@ -511,9 +501,9 @@
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
 
-        int msgID = MSGID_FILE_KEYMANAGER_NO_SUCH_FILE;
-        messages.add(getMessage(msgID, String.valueOf(newKeyStoreFile),
-                                String.valueOf(configEntryDN)));
+        messages.add(ERR_FILE_KEYMANAGER_NO_SUCH_FILE.get(
+                String.valueOf(newKeyStoreFile),
+                String.valueOf(configEntryDN)));
       }
     }
     catch (Exception e)
@@ -525,9 +515,9 @@
 
       resultCode = DirectoryServer.getServerErrorResultCode();
 
-      int msgID = MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE;
-      messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                              getExceptionMessage(e)));
+      messages.add(ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE.get(
+              String.valueOf(configEntryDN),
+              getExceptionMessage(e)));
     }
 
     // Get the keystore type. If none is specified, then use the default type.
@@ -548,11 +538,10 @@
 
         resultCode = DirectoryServer.getServerErrorResultCode();
 
-        int msgID = MSGID_FILE_KEYMANAGER_INVALID_TYPE;
-        messages.add(getMessage(msgID,
-                                String.valueOf(configuration.getKeyStoreType()),
-                                String.valueOf(configEntryDN),
-                                getExceptionMessage(kse)));
+        messages.add(ERR_FILE_KEYMANAGER_INVALID_TYPE.get(
+                String.valueOf(configuration.getKeyStoreType()),
+                String.valueOf(configEntryDN),
+                getExceptionMessage(kse)));
       }
     }
 
@@ -578,9 +567,9 @@
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
 
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET;
-        messages.add(getMessage(msgID, String.valueOf(propertyName),
-                                String.valueOf(configEntryDN)));
+        messages.add(ERR_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
+                String.valueOf(propertyName),
+                String.valueOf(configEntryDN)));
       }
       else
       {
@@ -596,9 +585,9 @@
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
 
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET;
-        messages.add(getMessage(msgID, String.valueOf(enVarName),
-                                String.valueOf(configEntryDN)));
+        messages.add(ERR_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
+                String.valueOf(enVarName),
+                String.valueOf(configEntryDN)));
       }
       else
       {
@@ -614,9 +603,9 @@
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
 
-        int msgID = MSGID_FILE_KEYMANAGER_PIN_NO_SUCH_FILE;
-        messages.add(getMessage(msgID, String.valueOf(fileName),
-                                String.valueOf(configEntryDN)));
+        messages.add(ERR_FILE_KEYMANAGER_PIN_NO_SUCH_FILE.get(
+                String.valueOf(fileName),
+                String.valueOf(configEntryDN)));
       }
       else
       {
@@ -630,10 +619,10 @@
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
 
-          int msgID = MSGID_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ;
-          messages.add(getMessage(msgID, String.valueOf(fileName),
-                                  String.valueOf(configEntryDN),
-                                  getExceptionMessage(ioe)));
+          messages.add(ERR_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ.get(
+                  String.valueOf(fileName),
+                  String.valueOf(configEntryDN),
+                  getExceptionMessage(ioe)));
         }
         finally
         {
@@ -647,9 +636,9 @@
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
 
-          int msgID = MSGID_FILE_KEYMANAGER_PIN_FILE_EMPTY;
-          messages.add(getMessage(msgID, String.valueOf(fileName),
-                                  String.valueOf(configEntryDN)));
+          messages.add(ERR_FILE_KEYMANAGER_PIN_FILE_EMPTY.get(
+                  String.valueOf(fileName),
+                  String.valueOf(configEntryDN)));
         }
         else
         {
@@ -666,8 +655,8 @@
       // Pin wasn't defined anywhere.
       resultCode = DirectoryServer.getServerErrorResultCode();
 
-      int msgID = MSGID_FILE_KEYMANAGER_NO_PIN;
-      messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+      messages.add(ERR_FILE_KEYMANAGER_NO_PIN.get(
+              String.valueOf(configEntryDN)));
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/FileBasedTrustManagerProvider.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/FileBasedTrustManagerProvider.java
index 801a80b..c642482 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/FileBasedTrustManagerProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/FileBasedTrustManagerProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -56,8 +57,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -127,10 +128,9 @@
     File f = getFileForPath(trustStoreFile);
     if (! (f.exists() && f.isFile()))
     {
-      int    msgID   = MSGID_FILE_TRUSTMANAGER_NO_SUCH_FILE;
-      String message = getMessage(msgID, String.valueOf(trustStoreFile),
-                                  String.valueOf(configEntryDN));
-      throw new InitializationException(msgID, message);
+      Message message = ERR_FILE_TRUSTMANAGER_NO_SUCH_FILE.get(
+          String.valueOf(trustStoreFile), String.valueOf(configEntryDN));
+      throw new InitializationException(message);
     }
 
 
@@ -153,11 +153,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, kse);
       }
 
-      int    msgID   = MSGID_FILE_TRUSTMANAGER_INVALID_TYPE;
-      String message = getMessage(msgID, String.valueOf(trustStoreType),
-                                  String.valueOf(configEntryDN),
-                                  getExceptionMessage(kse));
-      throw new InitializationException(msgID, message);
+      Message message = ERR_FILE_TRUSTMANAGER_INVALID_TYPE.
+          get(String.valueOf(trustStoreType), String.valueOf(configEntryDN),
+              getExceptionMessage(kse));
+      throw new InitializationException(message);
     }
 
 
@@ -195,11 +194,9 @@
           File pinFile = getFileForPath(pinFilePath);
           if (! pinFile.exists())
           {
-            int    msgID    = MSGID_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE;
-            String message = getMessage(msgID,
-                                        String.valueOf(pinFilePath),
-                                        String.valueOf(configEntryDN));
-            throw new InitializationException(msgID, message);
+            Message message = ERR_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE.get(
+                String.valueOf(pinFilePath), String.valueOf(configEntryDN));
+            throw new InitializationException(message);
           }
           else
           {
@@ -213,12 +210,10 @@
             }
             catch (IOException ioe)
             {
-              int    msgID   = MSGID_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ;
-              String message = getMessage(msgID,
-                                          String.valueOf(pinFilePath),
-                                          String.valueOf(configEntryDN),
-                                          getExceptionMessage(ioe));
-              throw new InitializationException(msgID, message, ioe);
+              Message message = ERR_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ.
+                  get(String.valueOf(pinFilePath),
+                      String.valueOf(configEntryDN), getExceptionMessage(ioe));
+              throw new InitializationException(message, ioe);
             }
             finally
             {
@@ -230,11 +225,9 @@
 
             if (pinStr == null)
             {
-              int    msgID   = MSGID_FILE_TRUSTMANAGER_PIN_FILE_EMPTY;
-              String message = getMessage(msgID,
-                                          String.valueOf(pinFilePath),
-                                          String.valueOf(configEntryDN));
-              throw new InitializationException(msgID, message);
+              Message message = ERR_FILE_TRUSTMANAGER_PIN_FILE_EMPTY.get(
+                  String.valueOf(pinFilePath), String.valueOf(configEntryDN));
+              throw new InitializationException(message);
             }
             else
             {
@@ -248,11 +241,9 @@
         String pinStr = System.getenv(pinEnVar);
         if (pinStr == null)
         {
-          int    msgID   = MSGID_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET;
-          String message = getMessage(msgID,
-                                      String.valueOf(pinProperty),
-                                      String.valueOf(configEntryDN));
-          throw new InitializationException(msgID, message);
+          Message message = ERR_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET.get(
+              String.valueOf(pinProperty), String.valueOf(configEntryDN));
+          throw new InitializationException(message);
         }
         else
         {
@@ -265,11 +256,9 @@
       String pinStr = System.getProperty(pinProperty);
       if (pinStr == null)
       {
-        int    msgID   = MSGID_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET;
-        String message = getMessage(msgID,
-                                    String.valueOf(pinProperty),
-                                    String.valueOf(configEntryDN));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET.get(
+            String.valueOf(pinProperty), String.valueOf(configEntryDN));
+        throw new InitializationException(message);
       }
       else
       {
@@ -315,11 +304,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_FILE_TRUSTMANAGER_CANNOT_LOAD;
-      String message = getMessage(msgID, trustStoreFile,
-                                  getExceptionMessage(e));
+      Message message = ERR_FILE_TRUSTMANAGER_CANNOT_LOAD.get(
+          trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -345,11 +333,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_FILE_TRUSTMANAGER_CANNOT_CREATE_FACTORY;
-      String message = getMessage(msgID, trustStoreFile,
-                                  getExceptionMessage(e));
+      Message message = ERR_FILE_TRUSTMANAGER_CANNOT_CREATE_FACTORY.get(
+          trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
   }
 
@@ -360,7 +347,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(TrustManagerCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     FileBasedTrustManagerCfg config = (FileBasedTrustManagerCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -373,7 +360,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       FileBasedTrustManagerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -386,10 +373,9 @@
       File f = getFileForPath(newTrustStoreFile);
       if (!(f.exists() && f.isFile()))
       {
-        int msgID = MSGID_FILE_TRUSTMANAGER_NO_SUCH_FILE;
-        unacceptableReasons.add(getMessage(msgID,
-                                           String.valueOf(newTrustStoreFile),
-                                           String.valueOf(cfgEntryDN)));
+        unacceptableReasons.add(ERR_FILE_TRUSTMANAGER_NO_SUCH_FILE.get(
+                String.valueOf(newTrustStoreFile),
+                String.valueOf(cfgEntryDN)));
         configAcceptable = false;
       }
     }
@@ -400,9 +386,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_FILE;
-      unacceptableReasons.add(getMessage(msgID, String.valueOf(cfgEntryDN),
-                                         getExceptionMessage(e)));
+      unacceptableReasons.add(ERR_FILE_TRUSTMANAGER_CANNOT_DETERMINE_FILE.get(
+              String.valueOf(cfgEntryDN),
+              getExceptionMessage(e)));
       configAcceptable = false;
     }
 
@@ -422,10 +408,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, kse);
         }
 
-        int    msgID   = MSGID_FILE_TRUSTMANAGER_INVALID_TYPE;
-        String message = getMessage(msgID, String.valueOf(storeType),
-                                    String.valueOf(cfgEntryDN),
-                                    getExceptionMessage(kse));
+        Message message = ERR_FILE_TRUSTMANAGER_INVALID_TYPE.get(
+                String.valueOf(storeType),
+                String.valueOf(cfgEntryDN),
+                getExceptionMessage(kse));
         unacceptableReasons.add(message);
         configAcceptable = false;
       }
@@ -439,9 +425,9 @@
     {
       if (System.getProperty(pinProp) == null)
       {
-        int    msgID   = MSGID_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET;
-        String message = getMessage(msgID, String.valueOf(pinProp),
-                                    String.valueOf(cfgEntryDN));
+        Message message = ERR_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET.get(
+                String.valueOf(pinProp),
+                String.valueOf(cfgEntryDN));
         unacceptableReasons.add(message);
         configAcceptable = false;
       }
@@ -455,9 +441,9 @@
     {
       if (System.getenv(pinEnVar) == null)
       {
-        int    msgID   = MSGID_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET;
-        String message = getMessage(msgID, String.valueOf(pinEnVar),
-                                    String.valueOf(cfgEntryDN));
+        Message message = ERR_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET.get(
+                String.valueOf(pinEnVar),
+                String.valueOf(cfgEntryDN));
         unacceptableReasons.add(message);
         configAcceptable = false;
       }
@@ -481,10 +467,10 @@
         }
         catch (IOException ioe)
         {
-          int    msgID   = MSGID_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ;
-          String message = getMessage(msgID, String.valueOf(pinFile),
-                                      String.valueOf(cfgEntryDN),
-                                      getExceptionMessage(ioe));
+          Message message = ERR_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ.get(
+                  String.valueOf(pinFile),
+                  String.valueOf(cfgEntryDN),
+                  getExceptionMessage(ioe));
           unacceptableReasons.add(message);
           configAcceptable = false;
         }
@@ -498,18 +484,18 @@
 
         if (pinStr == null)
         {
-          int    msgID   = MSGID_FILE_TRUSTMANAGER_PIN_FILE_EMPTY;
-          String message =  getMessage(msgID, String.valueOf(pinFile),
-                                       String.valueOf(cfgEntryDN));
+          Message message =  ERR_FILE_TRUSTMANAGER_PIN_FILE_EMPTY.get(
+                  String.valueOf(pinFile),
+                  String.valueOf(cfgEntryDN));
           unacceptableReasons.add(message);
           configAcceptable = false;
         }
       }
       else
       {
-        int    msgID   = MSGID_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE;
-        String message = getMessage(msgID, String.valueOf(pinFile),
-                                    String.valueOf(cfgEntryDN));
+        Message message = ERR_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE.get(
+                String.valueOf(pinFile),
+                String.valueOf(cfgEntryDN));
         unacceptableReasons.add(message);
         configAcceptable = false;
       }
@@ -527,7 +513,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the path to the trust store file.
@@ -537,9 +523,9 @@
     {
       resultCode = DirectoryServer.getServerErrorResultCode();
 
-      int msgID = MSGID_FILE_TRUSTMANAGER_NO_SUCH_FILE;
-      messages.add(getMessage(msgID, String.valueOf(newTrustStoreFile),
-                              String.valueOf(configEntryDN)));
+      messages.add(ERR_FILE_TRUSTMANAGER_NO_SUCH_FILE.get(
+              String.valueOf(newTrustStoreFile),
+              String.valueOf(configEntryDN)));
     }
 
 
@@ -562,10 +548,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, kse);
       }
 
-      int msgID = MSGID_FILE_TRUSTMANAGER_INVALID_TYPE;
-      messages.add(getMessage(msgID, String.valueOf(newTrustStoreType),
-                              String.valueOf(configEntryDN),
-                              getExceptionMessage(kse)));
+      messages.add(ERR_FILE_TRUSTMANAGER_INVALID_TYPE.get(
+              String.valueOf(newTrustStoreType),
+              String.valueOf(configEntryDN),
+              getExceptionMessage(kse)));
 
       resultCode = DirectoryServer.getServerErrorResultCode();
     }
@@ -608,9 +594,9 @@
           {
             resultCode = DirectoryServer.getServerErrorResultCode();
 
-            int msgID = MSGID_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE;
-            messages.add(getMessage(msgID, String.valueOf(newPINFile),
-                                    String.valueOf(configEntryDN)));
+            messages.add(ERR_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE.get(
+                    String.valueOf(newPINFile),
+                    String.valueOf(configEntryDN)));
           }
           else
           {
@@ -626,10 +612,10 @@
             {
               resultCode = DirectoryServer.getServerErrorResultCode();
 
-              int msgID = MSGID_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ;
-              messages.add(getMessage(msgID, String.valueOf(newPINFile),
-                                      String.valueOf(configEntryDN),
-                                      getExceptionMessage(ioe)));
+              messages.add(ERR_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ.get(
+                      String.valueOf(newPINFile),
+                      String.valueOf(configEntryDN),
+                      getExceptionMessage(ioe)));
             }
             finally
             {
@@ -643,9 +629,9 @@
             {
               resultCode = DirectoryServer.getServerErrorResultCode();
 
-              int msgID = MSGID_FILE_TRUSTMANAGER_PIN_FILE_EMPTY;
-              messages.add(getMessage(msgID, String.valueOf(newPINFile),
-                                      String.valueOf(configEntryDN)));
+              messages.add(ERR_FILE_TRUSTMANAGER_PIN_FILE_EMPTY.get(
+                      String.valueOf(newPINFile),
+                      String.valueOf(configEntryDN)));
             }
             else
             {
@@ -661,9 +647,9 @@
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
 
-          int msgID = MSGID_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET;
-          messages.add(getMessage(msgID, String.valueOf(newPINEnVar),
-                                  String.valueOf(configEntryDN)));
+          messages.add(ERR_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET.get(
+                  String.valueOf(newPINEnVar),
+                  String.valueOf(configEntryDN)));
         }
         else
         {
@@ -678,9 +664,9 @@
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
 
-        int msgID = MSGID_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET;
-        messages.add(getMessage(msgID, String.valueOf(newPINProperty),
-                                String.valueOf(configEntryDN)));
+        messages.add(ERR_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET.get(
+                String.valueOf(newPINProperty),
+                String.valueOf(configEntryDN)));
       }
       else
       {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java
index 1ca983c..d6ed620 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -64,20 +65,20 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
 import org.opends.server.types.EntryEncodeConfig;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.SearchFilter;
 import org.opends.server.types.FilePermission;
 import org.opends.server.types.DebugLogLevel;
+import org.opends.server.types.OpenDsException;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.ServerConstants.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 /**
@@ -273,16 +274,13 @@
       }
 
       // Log an error message.
-      logError(ErrorLogCategory.CONFIGURATION,
-          ErrorLogSeverity.SEVERE_ERROR,
-          MSGID_FSCACHE_HOMELESS,
-          String.valueOf(configEntryDN), stackTraceToSingleLineString(e));
+      logError(ERR_FSCACHE_HOMELESS.get());
 
       // Not having any home directory for the cache db environment is a
       // fatal error as we are unable to continue any further without it.
-      int msgID = MSGID_FSCACHE_HOMELESS;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_FSCACHE_HOMELESS.get();
+      throw new InitializationException(message, e);
     }
 
     // Open JE environment and cache database.
@@ -326,10 +324,7 @@
           // Its safe to ignore and continue here, JE will use its default
           // value for this however we have to let the user know about it
           // so just log an error message.
-          logError(ErrorLogCategory.CONFIGURATION,
-              ErrorLogSeverity.SEVERE_ERROR,
-              MSGID_FSCACHE_CANNOT_SET_JE_MEMORY_PCT,
-              String.valueOf(configEntryDN), stackTraceToSingleLineString(e));
+          logError(ERR_FSCACHE_CANNOT_SET_JE_MEMORY_PCT.get());
         }
       }
       if (jeCacheSize != 0) {
@@ -343,10 +338,7 @@
           // Its safe to ignore and continue here, JE will use its default
           // value for this however we have to let the user know about it
           // so just log an error message.
-          logError(ErrorLogCategory.CONFIGURATION,
-              ErrorLogSeverity.SEVERE_ERROR,
-              MSGID_FSCACHE_CANNOT_SET_JE_MEMORY_SIZE,
-              String.valueOf(configEntryDN), stackTraceToSingleLineString(e));
+          logError(ERR_FSCACHE_CANNOT_SET_JE_MEMORY_SIZE.get());
         }
       }
 
@@ -423,11 +415,9 @@
               public void run() {
                 if ((persistentEntriesRestored > 0) &&
                     (persistentEntriesRestored < persistentEntriesTotal)) {
-                  int msgID = MSGID_FSCACHE_RESTORE_PROGRESS_REPORT;
-                  String message = getMessage(msgID, persistentEntriesRestored,
-                      persistentEntriesTotal);
-                  logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.NOTICE,
-                      message, msgID);
+                  Message message = INFO_FSCACHE_RESTORE_PROGRESS_REPORT.get(
+                      persistentEntriesRestored, persistentEntriesTotal);
+                  logError(message);
                 }
               }
             };
@@ -456,11 +446,9 @@
               timer.cancel();
 
               // Final persistent state restore progress report.
-              int msgID = MSGID_FSCACHE_RESTORE_PROGRESS_REPORT;
-              String message = getMessage(msgID, persistentEntriesRestored,
-                      persistentEntriesTotal);
-              logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.NOTICE,
-                      message, msgID);
+              Message message = INFO_FSCACHE_RESTORE_PROGRESS_REPORT.get(
+                  persistentEntriesRestored, persistentEntriesTotal);
+              logError(message);
             }
 
             // Compare last known offline states to offline states on startup.
@@ -478,10 +466,7 @@
                 // Remove cache entries specific to this backend.
                 clearBackend(DirectoryServer.getBackend(backend));
                 // Log an error message.
-                logError(ErrorLogCategory.EXTENSIONS,
-                    ErrorLogSeverity.SEVERE_WARNING,
-                    MSGID_FSCACHE_OFFLINE_STATE_FAIL,
-                    backend);
+                logError(WARN_FSCACHE_OFFLINE_STATE_FAIL.get(backend));
               }
             }
             // Pop max entries limit.
@@ -493,8 +478,7 @@
           }
 
           // Log an error message.
-          logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.NOTICE,
-              MSGID_FSCACHE_INDEX_NOT_FOUND);
+          logError(INFO_FSCACHE_INDEX_NOT_FOUND.get());
 
           // Clear the entry cache.
           clear();
@@ -504,8 +488,7 @@
           }
 
           // Log an error message.
-          logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.SEVERE_ERROR,
-              MSGID_FSCACHE_INDEX_IMPAIRED);
+          logError(ERR_FSCACHE_INDEX_IMPAIRED.get());
 
           // Clear the entry cache.
           clear();
@@ -515,9 +498,7 @@
           }
 
           // Log an error message.
-          logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.SEVERE_ERROR,
-              MSGID_FSCACHE_CANNOT_LOAD_PERSISTENT_DATA,
-              stackTraceToSingleLineString(e));
+          logError(ERR_FSCACHE_CANNOT_LOAD_PERSISTENT_DATA.get());
 
           // Clear the entry cache.
           clear();
@@ -531,9 +512,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_FSCACHE_CANNOT_INITIALIZE;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_FSCACHE_CANNOT_INITIALIZE.get();
+      throw new InitializationException(message, e);
     }
 
   }
@@ -569,11 +550,9 @@
         public void run() {
           if ((persistentEntriesSaved > 0) &&
               (persistentEntriesSaved < persistentEntriesTotal)) {
-            int msgID = MSGID_FSCACHE_SAVE_PROGRESS_REPORT;
-            String message = getMessage(msgID, persistentEntriesSaved,
-                persistentEntriesTotal);
-            logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.NOTICE,
-                message, msgID);
+            Message message = INFO_FSCACHE_SAVE_PROGRESS_REPORT.get(
+                persistentEntriesSaved, persistentEntriesTotal);
+            logError(message);
           }
         }
       };
@@ -598,11 +577,9 @@
         timer.cancel();
 
         // Final persistent state save progress report.
-        int msgID = MSGID_FSCACHE_SAVE_PROGRESS_REPORT;
-        String message = getMessage(msgID, persistentEntriesSaved,
-            persistentEntriesTotal);
-        logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.NOTICE,
-            message, msgID);
+        Message message = INFO_FSCACHE_SAVE_PROGRESS_REPORT.get(
+            persistentEntriesSaved, persistentEntriesTotal);
+        logError(message);
       }
 
       // Store the index.
@@ -620,9 +597,7 @@
         }
 
         // Log an error message.
-        logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.SEVERE_ERROR,
-            MSGID_FSCACHE_CANNOT_STORE_PERSISTENT_DATA,
-            stackTraceToSingleLineString(e));
+        logError(ERR_FSCACHE_CANNOT_STORE_PERSISTENT_DATA.get());
       }
     }
 
@@ -1044,7 +1019,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(EntryCacheCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     FileSystemEntryCacheCfg config = (FileSystemEntryCacheCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -1055,7 +1030,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       FileSystemEntryCacheCfg configuration,
-      List<String>      unacceptableReasons
+      List<Message> unacceptableReasons
       )
   {
     // Make sure that we can process the defined character sets.  If so, then
@@ -1082,7 +1057,7 @@
     // Make sure that we can process the defined character sets.  If so, then
     // activate the new configuration.
     boolean applyChanges = false;
-    ArrayList<String> errorMessages = new ArrayList<String>();
+    ArrayList<Message> errorMessages = new ArrayList<Message>();
     EntryCacheCommon.ConfigErrorHandler errorHandler =
       EntryCacheCommon.getConfigErrorHandler (
           EntryCacheCommon.ConfigPhase.PHASE_APPLY, null, errorMessages
@@ -1142,50 +1117,50 @@
       if (maxEntries.longValue() != prevMaxEntries)
       {
         changeResult.addMessage(
-            getMessage (MSGID_FSCACHE_UPDATED_MAX_ENTRIES, maxEntries));
+            INFO_FSCACHE_UPDATED_MAX_ENTRIES.get(maxEntries));
       }
 
       if (lockTimeout != prevLockTimeout)
       {
         changeResult.addMessage(
-            getMessage (MSGID_FSCACHE_UPDATED_LOCK_TIMEOUT, lockTimeout));
+            INFO_FSCACHE_UPDATED_LOCK_TIMEOUT.get(lockTimeout));
       }
 
       if (!includeFilters.equals(prevIncludeFilters))
       {
         changeResult.addMessage(
-            getMessage (MSGID_FSCACHE_UPDATED_INCLUDE_FILTERS));
+            INFO_FSCACHE_UPDATED_INCLUDE_FILTERS.get());
       }
 
       if (!excludeFilters.equals(prevExcludeFilters))
       {
         changeResult.addMessage(
-            getMessage (MSGID_FSCACHE_UPDATED_EXCLUDE_FILTERS));
+            INFO_FSCACHE_UPDATED_EXCLUDE_FILTERS.get());
       }
 
       if (maxAllowedMemory != prevMaxAllowedMemory)
       {
         changeResult.addMessage(
-            getMessage (MSGID_FSCACHE_UPDATED_MAX_MEMORY_SIZE,
-            maxAllowedMemory));
+            INFO_FSCACHE_UPDATED_MAX_MEMORY_SIZE.get(maxAllowedMemory));
       }
 
       if (jeCachePercent != prevJECachePercent)
       {
         changeResult.addMessage(
-            getMessage (MSGID_FSCACHE_UPDATED_JE_MEMORY_PCT, jeCachePercent));
+            INFO_FSCACHE_UPDATED_JE_MEMORY_PCT.get(jeCachePercent));
       }
 
       if (jeCacheSize != prevJECacheSize)
       {
         changeResult.addMessage(
-            getMessage (MSGID_FSCACHE_UPDATED_JE_MEMORY_SIZE, jeCacheSize));
+            INFO_FSCACHE_UPDATED_JE_MEMORY_SIZE.get(jeCacheSize));
       }
 
       if (persistentCache != prevPersistentCache)
       {
         changeResult.addMessage(
-            getMessage (MSGID_FSCACHE_UPDATED_IS_PERSISTENT, persistentCache));
+            INFO_FSCACHE_UPDATED_IS_PERSISTENT.get(
+                    String.valueOf(persistentCache)));
       }
     }
 
@@ -1255,15 +1230,15 @@
 
       newIncludeFilters = EntryCacheCommon.getFilters(
           configuration.getIncludeFilter(),
-          MSGID_FIFOCACHE_INVALID_INCLUDE_FILTER,
-          MSGID_FIFOCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS,
+          ERR_FIFOCACHE_INVALID_INCLUDE_FILTER,
+          WARN_FIFOCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS,
           errorHandler,
           configEntryDN
           );
       newExcludeFilters = EntryCacheCommon.getFilters (
           configuration.getExcludeFilter(),
-          MSGID_FIFOCACHE_CANNOT_DECODE_EXCLUDE_FILTER,
-          MSGID_FIFOCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS,
+          WARN_FIFOCACHE_CANNOT_DECODE_EXCLUDE_FILTER,
+          WARN_FIFOCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS,
           errorHandler,
           configEntryDN
           );
@@ -1272,15 +1247,15 @@
     case PHASE_APPLY:       // error ID codes
       newIncludeFilters = EntryCacheCommon.getFilters (
           configuration.getIncludeFilter(),
-          MSGID_FIFOCACHE_INVALID_INCLUDE_FILTER,
-          0,
+          ERR_FIFOCACHE_INVALID_INCLUDE_FILTER,
+          null,
           errorHandler,
           configEntryDN
           );
       newExcludeFilters = EntryCacheCommon.getFilters (
           configuration.getExcludeFilter(),
-          MSGID_FIFOCACHE_INVALID_EXCLUDE_FILTER,
-          0,
+          ERR_FIFOCACHE_INVALID_EXCLUDE_FILTER,
+          null,
           errorHandler,
           configEntryDN
           );
@@ -1308,12 +1283,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
             errorHandler.reportError(
-              ErrorLogCategory.CONFIGURATION,
-              ErrorLogSeverity.SEVERE_WARNING,
-              MSGID_FSCACHE_CANNOT_SET_JE_MEMORY_PCT,
-              String.valueOf(configEntryDN),
-              stackTraceToSingleLineString(e),
-              null,
+              ERR_FSCACHE_CANNOT_SET_JE_MEMORY_PCT.get(),
               false,
               DirectoryServer.getServerErrorResultCode()
               );
@@ -1329,12 +1299,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
             errorHandler.reportError(
-              ErrorLogCategory.CONFIGURATION,
-              ErrorLogSeverity.SEVERE_WARNING,
-              MSGID_FSCACHE_CANNOT_SET_JE_MEMORY_SIZE,
-              String.valueOf(configEntryDN),
-              stackTraceToSingleLineString(e),
-              null,
+              ERR_FSCACHE_CANNOT_SET_JE_MEMORY_SIZE.get(),
               false,
               DirectoryServer.getServerErrorResultCode()
               );
@@ -1386,9 +1351,7 @@
       }
 
       // Log an error message.
-      logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.SEVERE_ERROR,
-              MSGID_FSCACHE_CANNOT_RETRIEVE_ENTRY,
-              stackTraceToSingleLineString(e));
+      logError(ERR_FSCACHE_CANNOT_RETRIEVE_ENTRY.get());
     }
     return null;
   }
@@ -1475,9 +1438,8 @@
       }
 
       // Log an error message.
-      logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.SEVERE_ERROR,
-              MSGID_FSCACHE_CANNOT_STORE_ENTRY,
-              stackTraceToSingleLineString(e));
+      logError(
+          ERR_FSCACHE_CANNOT_STORE_ENTRY.get());
 
       return false;
     }
@@ -1518,10 +1480,8 @@
           }
         } catch(Exception e) {
           // Log a warning that the permissions were not set.
-          int msgID = MSGID_FSCACHE_SET_PERMISSIONS_FAILED;
-          String message = getMessage(msgID, cacheHome);
-          logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.SEVERE_WARNING,
-              message, msgID);
+          Message message = WARN_FSCACHE_SET_PERMISSIONS_FAILED.get(cacheHome);
+          logError(message);
         }
       }
     } else {
@@ -1598,10 +1558,10 @@
    * trying to locate and load persistent cache index from
    * the existing entry cache database.
    */
-  private class CacheIndexNotFoundException extends Exception {
+  private class CacheIndexNotFoundException extends OpenDsException {
     static final long serialVersionUID = 6444756053577853869L;
     public CacheIndexNotFoundException() {}
-    public CacheIndexNotFoundException(String message) {
+    public CacheIndexNotFoundException(Message message) {
       super(message);
     }
   }
@@ -1611,10 +1571,10 @@
    * found in the existing entry cache database is determined
    * to be empty, inconsistent or damaged.
    */
-  private class CacheIndexImpairedException extends Exception {
+  private class CacheIndexImpairedException extends OpenDsException {
     static final long serialVersionUID = -369455697709478407L;
     public CacheIndexImpairedException() {}
-    public CacheIndexImpairedException(String message) {
+    public CacheIndexImpairedException(Message message) {
       super(message);
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java
index 73c03be..9affa63 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -44,8 +45,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.Validator.*;
 
 
@@ -199,11 +199,10 @@
         Entry memberEntry = DirectoryConfig.getEntry(nextDN);
         if (memberEntry == null)
         {
-          int    msgID   = MSGID_STATICMEMBERS_NO_SUCH_ENTRY;
-          String message = getMessage(msgID, String.valueOf(nextDN),
-                                      String.valueOf(groupDN));
+          Message message = ERR_STATICMEMBERS_NO_SUCH_ENTRY.get(
+              String.valueOf(nextDN), String.valueOf(groupDN));
           nextMembershipException =
-               new MembershipException(msgID, message, true);
+               new MembershipException(message, true);
           return;
         }
 
@@ -232,12 +231,11 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        int    msgID   = MSGID_STATICMEMBERS_CANNOT_GET_ENTRY;
-        String message = getMessage(msgID, String.valueOf(nextDN),
-                                    String.valueOf(groupDN),
-                                    String.valueOf(de.getErrorMessage()));
+        Message message = ERR_STATICMEMBERS_CANNOT_GET_ENTRY.
+            get(String.valueOf(nextDN), String.valueOf(groupDN),
+                String.valueOf(de.getMessageObject()));
         nextMembershipException =
-             new MembershipException(msgID, message, true, de);
+             new MembershipException(message, true, de);
         return;
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/FingerprintCertificateMapper.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/FingerprintCertificateMapper.java
index c32bb76..c7b3a71 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/FingerprintCertificateMapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/FingerprintCertificateMapper.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -59,8 +60,8 @@
 import org.opends.server.types.SearchScope;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -126,10 +127,9 @@
          DirectoryServer.getAttributeType(toLowerCase(attrName), false);
     if (fingerprintAttributeType == null)
     {
-      int    msgID   = MSGID_FCM_NO_SUCH_ATTR;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  attrName);
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_FCM_NO_SUCH_ATTR.get(String.valueOf(configEntryDN), attrName);
+      throw new ConfigException(message);
     }
 
 
@@ -170,10 +170,8 @@
     // Make sure that a peer certificate was provided.
     if ((certificateChain == null) || (certificateChain.length == 0))
     {
-      int    msgID   = MSGID_FCM_NO_PEER_CERTIFICATE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_FCM_NO_PEER_CERTIFICATE.get();
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -190,11 +188,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_FCM_PEER_CERT_NOT_X509;
-      String message =
-           getMessage(msgID, String.valueOf(certificateChain[0].getType()));
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_FCM_PEER_CERT_NOT_X509.get(
+          String.valueOf(certificateChain[0].getType()));
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -217,11 +213,9 @@
       String peerSubject = peerCertificate.getSubjectX500Principal().getName(
                                 X500Principal.RFC2253);
 
-      int    msgID   = MSGID_FCM_CANNOT_CALCULATE_FINGERPRINT;
-      String message = getMessage(msgID, peerSubject,
-                                  getExceptionMessage(e));
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_FCM_CANNOT_CALCULATE_FINGERPRINT.get(
+          peerSubject, getExceptionMessage(e));
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -258,12 +252,10 @@
         }
         else
         {
-          int    msgID   = MSGID_FCM_MULTIPLE_MATCHING_ENTRIES;
-          String message = getMessage(msgID, fingerprintString,
-                                      String.valueOf(userEntry.getDN()),
-                                      String.valueOf(entry.getDN()));
-          throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                       msgID);
+          Message message = ERR_FCM_MULTIPLE_MATCHING_ENTRIES.
+              get(fingerprintString, String.valueOf(userEntry.getDN()),
+                  String.valueOf(entry.getDN()));
+          throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
         }
       }
     }
@@ -281,7 +273,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(CertificateMapperCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     FingerprintCertificateMapperCfg config =
          (FingerprintCertificateMapperCfg) configuration;
@@ -295,7 +287,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       FingerprintCertificateMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -307,9 +299,9 @@
                                        false);
     if (newFingerprintType == null)
     {
-      unacceptableReasons.add(getMessage(MSGID_FCM_NO_SUCH_ATTR,
-                                         String.valueOf(cfgEntryDN),
-                                         attrName));
+      unacceptableReasons.add(ERR_FCM_NO_SUCH_ATTR.get(
+              String.valueOf(cfgEntryDN),
+              attrName));
       configAcceptable = false;
     }
 
@@ -327,7 +319,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Make sure that the fingerprint attribute is defined in the server schema.
@@ -342,8 +334,8 @@
         resultCode = ResultCode.NO_SUCH_ATTRIBUTE;
       }
 
-      messages.add(getMessage(MSGID_FCM_NO_SUCH_ATTR,
-                              String.valueOf(configEntryDN), attrName));
+      messages.add(ERR_FCM_NO_SUCH_ATTR.get(
+              String.valueOf(configEntryDN), attrName));
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/GSSAPISASLMechanismHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/GSSAPISASLMechanismHandler.java
index b9d8dde..ccc9566 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/GSSAPISASLMechanismHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/GSSAPISASLMechanismHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -55,8 +56,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -122,10 +123,9 @@
     identityMapper = DirectoryServer.getIdentityMapper(identityMapperDN);
     if (identityMapper == null)
     {
-      int    msgID   = MSGID_SASLGSSAPI_NO_SUCH_IDENTITY_MAPPER;
-      String message = getMessage(msgID, String.valueOf(identityMapperDN),
-                                  String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message = ERR_SASLGSSAPI_NO_SUCH_IDENTITY_MAPPER.get(
+          String.valueOf(identityMapperDN), String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
 
 
@@ -145,10 +145,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_SASLGSSAPI_CANNOT_GET_SERVER_FQDN;
-        String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                    getExceptionMessage(e));
-        throw new InitializationException(msgID, message, e);
+        Message message = ERR_SASLGSSAPI_CANNOT_GET_SERVER_FQDN.get(
+            String.valueOf(configEntryDN), getExceptionMessage(e));
+        throw new InitializationException(message, e);
       }
     }
 
@@ -204,9 +203,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG.get(getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
     System.setProperty(JAAS_PROPERTY_CONFIG_FILE, configFileName);
@@ -243,10 +242,9 @@
     ClientConnection clientConnection = bindOperation.getClientConnection();
     if (clientConnection == null)
     {
-      int    msgID   = MSGID_SASLGSSAPI_NO_CLIENT_CONNECTION;
-      String message = getMessage(msgID);
+      Message message = ERR_SASLGSSAPI_NO_CLIENT_CONNECTION.get();
 
-      bindOperation.setAuthFailureReason(msgID, message);
+      bindOperation.setAuthFailureReason(message);
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
       return;
     }
@@ -270,7 +268,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ie);
         }
 
-        bindOperation.setAuthFailureReason(ie.getMessageID(), ie.getMessage());
+        bindOperation.setAuthFailureReason(ie.getMessageObject());
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
         clientConnection.setSASLAuthStateInfo(null);
         return;
@@ -380,7 +378,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     GSSAPISASLMechanismHandlerCfg config =
          (GSSAPISASLMechanismHandlerCfg) configuration;
@@ -394,7 +392,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       GSSAPISASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -405,10 +403,10 @@
          DirectoryServer.getIdentityMapper(identityMapperDN);
     if (newIdentityMapper == null)
     {
-      int msgID = MSGID_SASLGSSAPI_NO_SUCH_IDENTITY_MAPPER;
-      unacceptableReasons.add(getMessage(msgID,
-                                         String.valueOf(identityMapperDN),
-                                         String.valueOf(cfgEntryDN)));
+
+      unacceptableReasons.add(ERR_SASLGSSAPI_NO_SUCH_IDENTITY_MAPPER.get(
+              String.valueOf(identityMapperDN),
+              String.valueOf(cfgEntryDN)));
       configAcceptable = false;
     }
 
@@ -426,7 +424,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the identity mapper that should be used to find users.
@@ -440,9 +438,10 @@
         resultCode = ResultCode.CONSTRAINT_VIOLATION;
       }
 
-      int msgID = MSGID_SASLGSSAPI_NO_SUCH_IDENTITY_MAPPER;
-      messages.add(getMessage(msgID, String.valueOf(identityMapperDN),
-                              String.valueOf(configEntryDN)));
+
+      messages.add(ERR_SASLGSSAPI_NO_SUCH_IDENTITY_MAPPER.get(
+              String.valueOf(identityMapperDN),
+              String.valueOf(configEntryDN)));
     }
 
 
@@ -467,9 +466,10 @@
           resultCode = DirectoryServer.getServerErrorResultCode();
         }
 
-        int msgID = MSGID_SASLGSSAPI_CANNOT_GET_SERVER_FQDN;
-        messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                                getExceptionMessage(e)));
+
+        messages.add(ERR_SASLGSSAPI_CANNOT_GET_SERVER_FQDN.get(
+                String.valueOf(configEntryDN),
+                getExceptionMessage(e)));
       }
     }
 
@@ -525,8 +525,8 @@
 
         resultCode = DirectoryServer.getServerErrorResultCode();
 
-        int msgID = MSGID_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG;
-        messages.add(getMessage(msgID, getExceptionMessage(e)));
+        messages.add(ERR_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG.get(
+                getExceptionMessage(e)));
 
        return new ConfigChangeResult(resultCode, adminActionRequired, messages);
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/GSSAPIStateInfo.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/GSSAPIStateInfo.java
index 55b8ed7..4cc6f0e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/GSSAPIStateInfo.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/GSSAPIStateInfo.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -54,8 +55,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -144,9 +144,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SASLGSSAPI_CANNOT_CREATE_LOGIN_CONTEXT;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_SASLGSSAPI_CANNOT_CREATE_LOGIN_CONTEXT.get(
+          getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
     try
@@ -160,9 +160,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SASLGSSAPI_CANNOT_AUTHENTICATE_SERVER;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_SASLGSSAPI_CANNOT_AUTHENTICATE_SERVER.get(getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -281,11 +281,11 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_SASLGSSAPI_CANNOT_CREATE_SASL_SERVER;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_SASLGSSAPI_CANNOT_CREATE_SASL_SERVER.get(
+                getExceptionMessage(e));
 
         clientConnection.setSASLAuthStateInfo(null);
-        bindOperation.setAuthFailureReason(msgID, message);
+        bindOperation.setAuthFailureReason(message);
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
         return false;
       }
@@ -340,11 +340,11 @@
         }
       }
 
-      int    msgID   = MSGID_SASLGSSAPI_CANNOT_EVALUATE_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message = ERR_SASLGSSAPI_CANNOT_EVALUATE_RESPONSE.get(
+              getExceptionMessage(e));
 
       clientConnection.setSASLAuthStateInfo(null);
-      bindOperation.setAuthFailureReason(msgID, message);
+      bindOperation.setAuthFailureReason(message);
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
       return false;
     }
@@ -378,11 +378,10 @@
         }
       }
 
-      int    msgID   = MSGID_SASLGSSAPI_NO_AUTHZ_ID;
-      String message = getMessage(msgID);
+      Message message = ERR_SASLGSSAPI_NO_AUTHZ_ID.get();
 
       clientConnection.setSASLAuthStateInfo(null);
-      bindOperation.setAuthFailureReason(msgID, message);
+      bindOperation.setAuthFailureReason(message);
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
       return false;
     }
@@ -412,8 +411,7 @@
       }
 
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
-      bindOperation.setAuthFailureReason(de.getMessageID(),
-                                         de.getErrorMessage());
+      bindOperation.setAuthFailureReason(de.getMessageObject());
       clientConnection.setSASLAuthStateInfo(null);
       return false;
     }
@@ -435,11 +433,10 @@
         }
       }
 
-      int    msgID   = MSGID_SASLGSSAPI_CANNOT_MAP_AUTHZID;
-      String message = getMessage(msgID, authzID);
+      Message message = ERR_SASLGSSAPI_CANNOT_MAP_AUTHZID.get(authzID);
 
       clientConnection.setSASLAuthStateInfo(null);
-      bindOperation.setAuthFailureReason(msgID, message);
+      bindOperation.setAuthFailureReason(message);
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
       return false;
     }
@@ -515,18 +512,18 @@
         }
         else
         {
-          int msgID = MSGID_SASLGSSAPI_DIFFERENT_AUTHID_AND_AUTHZID;
-          String message = getMessage(msgID, authID, authzID);
-          bindOperation.setAuthFailureReason(msgID, message);
+          Message message = ERR_SASLGSSAPI_DIFFERENT_AUTHID_AND_AUTHZID.get(
+                  authID, authzID);
+          bindOperation.setAuthFailureReason(message);
           authzCallback.setAuthorized(false);
         }
       }
       else
       {
         // We weren't prepared for this type of callback.
-        int    msgID   = MSGID_SASLGSSAPI_UNEXPECTED_CALLBACK;
-        String message = getMessage(msgID, String.valueOf(callback));
-        throw new UnsupportedCallbackException(callback, message);
+        Message message =
+            INFO_SASLGSSAPI_UNEXPECTED_CALLBACK.get(String.valueOf(callback));
+        throw new UnsupportedCallbackException(callback, message.toString());
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/GetConnectionIDExtendedOperation.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/GetConnectionIDExtendedOperation.java
index c21acd3..b64108c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/GetConnectionIDExtendedOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/GetConnectionIDExtendedOperation.java
@@ -39,8 +39,7 @@
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/JMXAlertHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/JMXAlertHandler.java
index e06478f..d1b42b5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/JMXAlertHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/JMXAlertHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -64,9 +65,9 @@
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -159,9 +160,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_JMX_ALERT_HANDLER_CANNOT_REGISTER;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new InitializationException(msgID, message, e);
+        Message message =
+            ERR_JMX_ALERT_HANDLER_CANNOT_REGISTER.get(String.valueOf(e));
+        throw new InitializationException(message, e);
       }
     }
 
@@ -185,7 +186,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAcceptable(AlertHandlerCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     return true;
   }
@@ -218,12 +219,12 @@
    * {@inheritDoc}
    */
   public void sendAlertNotification(AlertGenerator generator, String alertType,
-                                    int alertID, String alertMessage)
+                                    Message alertMessage)
   {
     sendNotification(new Notification(alertType, generator.getClassName(),
                                       sequenceNumber.getAndIncrement(),
                                       System.currentTimeMillis(),
-                                      alertMessage));
+                                      alertMessage.toString()));
   }
 
 
@@ -271,10 +272,9 @@
          throws AttributeNotFoundException
   {
     // There are no attributes for this MBean.
-    int    msgID   = MSGID_CONFIG_JMX_ATTR_NO_ATTR;
-    String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                attribute);
-    throw new AttributeNotFoundException(message);
+    Message message = ERR_CONFIG_JMX_ATTR_NO_ATTR.get(
+        String.valueOf(configEntryDN), attribute);
+    throw new AttributeNotFoundException(message.toString());
   }
 
 
@@ -295,10 +295,9 @@
          throws AttributeNotFoundException, InvalidAttributeValueException
   {
     // There are no attributes for this MBean.
-    int    msgID   = MSGID_CONFIG_JMX_ATTR_NO_ATTR;
-    String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                attribute);
-    throw new AttributeNotFoundException(message);
+    Message message = ERR_CONFIG_JMX_ATTR_NO_ATTR.get(
+        String.valueOf(configEntryDN), String.valueOf(attribute));
+    throw new AttributeNotFoundException(message.toString());
   }
 
 
@@ -373,10 +372,9 @@
 
     buffer.append(")");
 
-    int    msgID   = MSGID_CONFIG_JMX_NO_METHOD;
-    String message = getMessage(msgID, buffer.toString(),
-                                String.valueOf(configEntryDN));
-    throw new MBeanException(new ConfigException(msgID, message));
+    Message message = ERR_CONFIG_JMX_NO_METHOD.get(
+        buffer.toString(), String.valueOf(configEntryDN));
+    throw new MBeanException(new ConfigException(message));
   }
 
 
@@ -401,7 +399,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(AlertHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java
index 568e198..d95e0f3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -43,9 +44,8 @@
 import org.opends.server.types.Operation;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
+import static org.opends.messages.ExtensionMessages.*;
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -92,9 +92,9 @@
     int minLength = configuration.getMinimumPasswordLength();
     if ((maxLength > 0) && (minLength > 0) && (minLength > maxLength))
     {
-      int    msgID   = MSGID_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX;
-      String message = getMessage(msgID, minLength, maxLength);
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX.get(minLength, maxLength);
+      throw new ConfigException(message);
     }
   }
 
@@ -118,7 +118,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      StringBuilder invalidReason)
+                                      MessageBuilder invalidReason)
   {
     LengthBasedPasswordValidatorCfg config = currentConfig;
 
@@ -127,16 +127,14 @@
     int minLength = config.getMinimumPasswordLength();
     if ((minLength > 0) && (numChars < minLength))
     {
-      invalidReason.append(getMessage(MSGID_PWLENGTHVALIDATOR_TOO_SHORT,
-                                      minLength));
+      invalidReason.append(ERR_PWLENGTHVALIDATOR_TOO_SHORT.get(minLength));
       return false;
     }
 
     int maxLength = config.getMaximumPasswordLength();
     if ((maxLength > 0) && (numChars > maxLength))
     {
-      invalidReason.append(getMessage(MSGID_PWLENGTHVALIDATOR_TOO_LONG,
-                                      minLength));
+      invalidReason.append(ERR_PWLENGTHVALIDATOR_TOO_LONG.get(minLength));
       return false;
     }
 
@@ -150,7 +148,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PasswordValidatorCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     LengthBasedPasswordValidatorCfg config =
          (LengthBasedPasswordValidatorCfg) configuration;
@@ -164,7 +162,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       LengthBasedPasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> 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.
@@ -172,8 +170,8 @@
     int minLength = configuration.getMinimumPasswordLength();
     if ((maxLength > 0) && (minLength > 0) && (minLength > maxLength))
     {
-      int    msgID   = MSGID_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX;
-      String message = getMessage(msgID, minLength, maxLength);
+      Message message = ERR_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX.get(
+              minLength, maxLength);
       unacceptableReasons.add(message);
       return false;
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/MD5PasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/MD5PasswordStorageScheme.java
index c566b5d..0805625 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/MD5PasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/MD5PasswordStorageScheme.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -39,8 +40,8 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.ByteStringFactory;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.Base64;
@@ -50,8 +51,7 @@
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -122,10 +122,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST;
-      String message = getMessage(msgID, MESSAGE_DIGEST_ALGORITHM_MD5,
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+          MESSAGE_DIGEST_ALGORITHM_MD5, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
     digestLock = new ReentrantLock();
@@ -166,11 +165,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -209,11 +207,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -269,9 +266,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.MILD_ERROR,
-               MSGID_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD,
-               storedPassword.stringValue(), String.valueOf(e));
+      logError(ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+          storedPassword.stringValue(), String.valueOf(e)));
 
       return false;
     }
@@ -300,10 +296,9 @@
   public ByteString encodeAuthPassword(ByteString plaintext)
          throws DirectoryException
   {
-    int    msgID   = MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD;
-    String message = getMessage(msgID, getStorageSchemeName());
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -339,10 +334,8 @@
   public ByteString getPlaintextValue(ByteString storedPassword)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID, STORAGE_SCHEME_NAME_MD5);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message = ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_MD5);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
@@ -355,10 +348,9 @@
                                                   String authValue)
          throws DirectoryException
   {
-    int    msgID   = MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD;
-    String message = getMessage(msgID, getStorageSchemeName());
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java
index 9958ec3..6c7439a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -364,7 +365,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       MemberVirtualAttributeCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // The new configuration should always be acceptable.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/NullConnectionSecurityProvider.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/NullConnectionSecurityProvider.java
index b007350..ef52f6c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/NullConnectionSecurityProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/NullConnectionSecurityProvider.java
@@ -43,11 +43,10 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
-
 /**
  * This class provides an implementation of a connection security provider that
  * does not actually provide any security for the communication process.  Any
@@ -292,7 +291,7 @@
           // The connection has been closed by the client.  Disconnect and
           // return.
           clientConnection.disconnect(DisconnectReason.CLIENT_DISCONNECT, false,
-                                      -1);
+                                      null);
           return false;
         }
         else if (bytesRead == 0)
@@ -321,7 +320,7 @@
 
         // An error occurred while trying to read data from the client.
         // Disconnect and return.
-        clientConnection.disconnect(DisconnectReason.IO_ERROR, false, -1);
+        clientConnection.disconnect(DisconnectReason.IO_ERROR, false, null);
         return false;
       }
       catch (Exception e)
@@ -333,8 +332,8 @@
 
         // An unexpected error occurred.  Disconnect and return.
         clientConnection.disconnect(DisconnectReason.SERVER_ERROR, true,
-                                    MSGID_NULL_SECURITY_PROVIDER_READ_ERROR,
-                                    getExceptionMessage(e));
+                                    ERR_NULL_SECURITY_PROVIDER_READ_ERROR.get(
+                                      getExceptionMessage(e)));
         return false;
       }
     }
@@ -374,7 +373,7 @@
         {
           // The client connection has been closed.  Disconnect and return.
           clientConnection.disconnect(DisconnectReason.CLIENT_DISCONNECT, false,
-                                      -1);
+                                      null);
           return false;
         }
       }
@@ -390,7 +389,7 @@
 
       // An error occurred while trying to write data to the client.  Disconnect
       // and return.
-      clientConnection.disconnect(DisconnectReason.IO_ERROR, false, -1);
+      clientConnection.disconnect(DisconnectReason.IO_ERROR, false, null);
       return false;
     }
     catch (Exception e)
@@ -402,8 +401,8 @@
 
       // An unexpected error occurred.  Disconnect and return.
       clientConnection.disconnect(DisconnectReason.SERVER_ERROR, true,
-                                  MSGID_NULL_SECURITY_PROVIDER_WRITE_ERROR,
-                                  getExceptionMessage(e));
+                                  ERR_NULL_SECURITY_PROVIDER_WRITE_ERROR.get(
+                                  getExceptionMessage(e)));
       return false;
     }
     finally
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/PKCS11KeyManagerProvider.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/PKCS11KeyManagerProvider.java
index 54a8616..1278a42 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/PKCS11KeyManagerProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/PKCS11KeyManagerProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -50,12 +51,11 @@
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -136,10 +136,9 @@
       String pinStr = System.getProperty(propertyName);
 
       if (pinStr == null) {
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET;
-        String message = getMessage(msgID, String
-            .valueOf(propertyName), String.valueOf(configEntryDN));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
+            String.valueOf(propertyName), String.valueOf(configEntryDN));
+        throw new InitializationException(message);
       }
 
       keyStorePIN = pinStr.toCharArray();
@@ -149,10 +148,9 @@
       String pinStr = System.getenv(enVarName);
 
       if (pinStr == null) {
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET;
-        String message = getMessage(msgID, String.valueOf(enVarName),
-            String.valueOf(configEntryDN));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
+            String.valueOf(enVarName), String.valueOf(configEntryDN));
+        throw new InitializationException(message);
       }
 
       keyStorePIN = pinStr.toCharArray();
@@ -161,10 +159,9 @@
       File pinFile = getFileForPath(fileName);
 
       if (!pinFile.exists()) {
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE;
-        String message = getMessage(msgID, String.valueOf(fileName),
-            String.valueOf(configEntryDN));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE.get(
+            String.valueOf(fileName), String.valueOf(configEntryDN));
+        throw new InitializationException(message);
       }
 
       String pinStr;
@@ -179,17 +176,16 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
         }
 
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_FILE_CANNOT_READ;
-        String message = getMessage(msgID, String.valueOf(fileName),
-            String.valueOf(configEntryDN), getExceptionMessage(ioe));
-        throw new InitializationException(msgID, message, ioe);
+        Message 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) {
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_FILE_EMPTY;
-        String message = getMessage(msgID, String.valueOf(fileName),
-            String.valueOf(configEntryDN));
-        throw new InitializationException(msgID, message);
+        Message message = ERR_PKCS11_KEYMANAGER_PIN_FILE_EMPTY.get(
+            String.valueOf(fileName), String.valueOf(configEntryDN));
+        throw new InitializationException(message);
       }
 
       keyStorePIN = pinStr.toCharArray();
@@ -197,9 +193,9 @@
       keyStorePIN = configuration.getKeyStorePin().toCharArray();
     } else {
       // Pin wasn't defined anywhere.
-      int msgID = MSGID_PKCS11_KEYMANAGER_NO_PIN;
-      String message = getMessage(msgID, String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_PKCS11_KEYMANAGER_NO_PIN.get(String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
   }
 
@@ -242,10 +238,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PKCS11_KEYMANAGER_CANNOT_LOAD;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message =
+          ERR_PKCS11_KEYMANAGER_CANNOT_LOAD.get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
 
@@ -264,10 +260,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PKCS11_KEYMANAGER_CANNOT_CREATE_FACTORY;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message = ERR_PKCS11_KEYMANAGER_CANNOT_CREATE_FACTORY.get(
+          getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
   }
 
@@ -278,7 +274,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(KeyManagerCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     PKCS11KeyManagerCfg config = (PKCS11KeyManagerCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -291,7 +287,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PKCS11KeyManagerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -315,9 +311,9 @@
 
       if (pinStr == null)
       {
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET;
-        unacceptableReasons.add(getMessage(msgID, String.valueOf(propertyName),
-                                           String.valueOf(cfgEntryDN)));
+        unacceptableReasons.add(ERR_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
+                String.valueOf(propertyName),
+                String.valueOf(cfgEntryDN)));
         configAcceptable = false;
       }
     }
@@ -328,9 +324,9 @@
 
       if (pinStr == null)
       {
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET;
-        unacceptableReasons.add(getMessage(msgID, String.valueOf(enVarName),
-                                           String.valueOf(cfgEntryDN)));
+        unacceptableReasons.add(ERR_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
+                String.valueOf(enVarName),
+                String.valueOf(cfgEntryDN)));
         configAcceptable = false;
       }
     }
@@ -341,9 +337,9 @@
 
       if (!pinFile.exists())
       {
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE;
-        unacceptableReasons.add(getMessage(msgID, String.valueOf(fileName),
-                                           String.valueOf(cfgEntryDN)));
+        unacceptableReasons.add(ERR_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE.get(
+                String.valueOf(fileName),
+                String.valueOf(cfgEntryDN)));
         configAcceptable = false;
       }
       else
@@ -356,10 +352,11 @@
         }
         catch (IOException ioe)
         {
-          int msgID = MSGID_PKCS11_KEYMANAGER_PIN_FILE_CANNOT_READ;
-          unacceptableReasons.add(getMessage(msgID, String.valueOf(fileName),
-                                             String.valueOf(cfgEntryDN),
-                                             getExceptionMessage(ioe)));
+          unacceptableReasons.add(
+                  ERR_PKCS11_KEYMANAGER_PIN_FILE_CANNOT_READ.get(
+                          String.valueOf(fileName),
+                          String.valueOf(cfgEntryDN),
+                          getExceptionMessage(ioe)));
           configAcceptable = false;
         }
         finally
@@ -372,9 +369,10 @@
 
         if (pinStr == null)
         {
-          int msgID = MSGID_PKCS11_KEYMANAGER_PIN_FILE_EMPTY;
-          unacceptableReasons.add(getMessage(msgID, String.valueOf(fileName),
-                                             String.valueOf(cfgEntryDN)));
+
+          unacceptableReasons.add(ERR_PKCS11_KEYMANAGER_PIN_FILE_EMPTY.get(
+                  String.valueOf(fileName),
+                  String.valueOf(cfgEntryDN)));
           configAcceptable = false;
         }
       }
@@ -386,8 +384,8 @@
     else
     {
       // Pin wasn't defined anywhere.
-      int msgID = MSGID_PKCS11_KEYMANAGER_NO_PIN;
-      unacceptableReasons.add(getMessage(msgID, String.valueOf(cfgEntryDN)));
+      unacceptableReasons.add(ERR_PKCS11_KEYMANAGER_NO_PIN.get(
+              String.valueOf(cfgEntryDN)));
       configAcceptable = false;
     }
 
@@ -404,7 +402,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the PIN needed to access the contents of the keystore file.
@@ -429,9 +427,9 @@
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
 
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET;
-        messages.add(getMessage(msgID, String.valueOf(propertyName),
-                                String.valueOf(configEntryDN)));
+        messages.add(ERR_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
+                String.valueOf(propertyName),
+                String.valueOf(configEntryDN)));
       }
       else
       {
@@ -447,9 +445,9 @@
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
 
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET;
-        messages.add(getMessage(msgID, String.valueOf(enVarName),
-                                String.valueOf(configEntryDN)));
+        messages.add(ERR_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
+                String.valueOf(enVarName),
+                String.valueOf(configEntryDN)));
       }
       else
       {
@@ -465,9 +463,9 @@
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
 
-        int msgID = MSGID_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE;
-        messages.add(getMessage(msgID, String.valueOf(fileName),
-                                String.valueOf(configEntryDN)));
+        messages.add(ERR_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE.get(
+                String.valueOf(fileName),
+                String.valueOf(configEntryDN)));
       }
       else
       {
@@ -481,10 +479,10 @@
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
 
-          int msgID = MSGID_PKCS11_KEYMANAGER_PIN_FILE_CANNOT_READ;
-          messages.add(getMessage(msgID, String.valueOf(fileName),
-                                  String.valueOf(configEntryDN),
-                                  getExceptionMessage(ioe)));
+          messages.add(ERR_PKCS11_KEYMANAGER_PIN_FILE_CANNOT_READ.get(
+                  String.valueOf(fileName),
+                  String.valueOf(configEntryDN),
+                  getExceptionMessage(ioe)));
         }
         finally
         {
@@ -498,9 +496,9 @@
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
 
-          int msgID = MSGID_PKCS11_KEYMANAGER_PIN_FILE_EMPTY;
-          messages.add(getMessage(msgID, String.valueOf(fileName),
-                                  String.valueOf(configEntryDN)));
+          messages.add(ERR_PKCS11_KEYMANAGER_PIN_FILE_EMPTY.get(
+                  String.valueOf(fileName),
+                  String.valueOf(configEntryDN)));
         }
         else
         {
@@ -517,8 +515,9 @@
       // Pin wasn't defined anywhere.
       resultCode = DirectoryServer.getServerErrorResultCode();
 
-      int msgID = MSGID_PKCS11_KEYMANAGER_NO_PIN;
-      messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+
+      messages.add(ERR_PKCS11_KEYMANAGER_NO_PIN.get(
+              String.valueOf(configEntryDN)));
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
index 2676af9..d2ef3af 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -70,8 +71,6 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LockManager;
 import org.opends.server.types.Modification;
@@ -80,10 +79,11 @@
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.extensions.ExtensionsConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ExtensionMessages.*;
+
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -157,10 +157,9 @@
       identityMapper = DirectoryServer.getIdentityMapper(identityMapperDN);
       if (identityMapper == null)
       {
-        int msgID = MSGID_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER;
-        String message = getMessage(msgID, String.valueOf(identityMapperDN),
-                                    String.valueOf(config.dn()));
-        throw new ConfigException(msgID, message);
+        Message message = ERR_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER.get(
+            String.valueOf(identityMapperDN), String.valueOf(config.dn()));
+        throw new ConfigException(message);
       }
     }
     catch (Exception e)
@@ -169,10 +168,9 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int msgID = MSGID_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER;
-      String message = getMessage(msgID, String.valueOf(config.dn()),
-                                  getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER.get(
+          String.valueOf(config.dn()), getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -273,9 +271,10 @@
             default:
               operation.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-              int msgID = MSGID_EXTOP_PASSMOD_ILLEGAL_REQUEST_ELEMENT_TYPE;
-              operation.appendErrorMessage(getMessage(msgID,
-                                                      byteToHex(e.getType())));
+
+              operation.appendErrorMessage(
+                      ERR_EXTOP_PASSMOD_ILLEGAL_REQUEST_ELEMENT_TYPE.get(
+                              byteToHex(e.getType())));
               return;
           }
         }
@@ -289,8 +288,8 @@
 
         operation.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-        int    msgID   = MSGID_EXTOP_PASSMOD_CANNOT_DECODE_REQUEST;
-        String message = getMessage(msgID, getExceptionMessage(ae));
+        Message message = ERR_EXTOP_PASSMOD_CANNOT_DECODE_REQUEST.get(
+                getExceptionMessage(ae));
         operation.appendErrorMessage(message);
 
         return;
@@ -321,8 +320,8 @@
         {
           operation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-          int msgID = MSGID_EXTOP_PASSMOD_NO_AUTH_OR_USERID;
-          operation.appendErrorMessage(getMessage(msgID));
+          operation.appendErrorMessage(
+                  ERR_EXTOP_PASSMOD_NO_AUTH_OR_USERID.get());
 
           return;
         }
@@ -345,8 +344,9 @@
         {
           operation.setResultCode(DirectoryServer.getServerErrorResultCode());
 
-          int    msgID   = MSGID_EXTOP_PASSMOD_CANNOT_LOCK_USER_ENTRY;
-          String message = getMessage(msgID, String.valueOf(userDN));
+          Message message =
+                  ERR_EXTOP_PASSMOD_CANNOT_LOCK_USER_ENTRY.get(
+                          String.valueOf(userDN));
           operation.appendErrorMessage(message);
 
           return;
@@ -377,8 +377,8 @@
 
             operation.setResultCode(ResultCode.INVALID_DN_SYNTAX);
 
-            int msgID = MSGID_EXTOP_PASSMOD_CANNOT_DECODE_AUTHZ_DN;
-            operation.appendErrorMessage(getMessage(msgID, authzIDStr));
+            operation.appendErrorMessage(
+                    ERR_EXTOP_PASSMOD_CANNOT_DECODE_AUTHZ_DN.get(authzIDStr));
 
             return;
           }
@@ -408,16 +408,15 @@
               {
                 operation.setResultCode(ResultCode.NO_SUCH_OBJECT);
 
-                int msgID = MSGID_EXTOP_PASSMOD_CANNOT_MAP_USER;
-                operation.appendErrorMessage(getMessage(msgID, authzIDStr));
+                operation.appendErrorMessage(
+                        ERR_EXTOP_PASSMOD_CANNOT_MAP_USER.get(authzIDStr));
               }
               else
               {
                 operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-                int msgID = MSGID_EXTOP_PASSMOD_CANNOT_MAP_USER;
-                operation.appendAdditionalLogMessage(getMessage(msgID,
-                                                                authzIDStr));
+                operation.appendAdditionalLogMessage(
+                        ERR_EXTOP_PASSMOD_CANNOT_MAP_USER.get(authzIDStr));
               }
 
               return;
@@ -438,17 +437,17 @@
             {
               operation.setResultCode(de.getResultCode());
 
-              int msgID = MSGID_EXTOP_PASSMOD_ERROR_MAPPING_USER;
-              operation.appendErrorMessage(getMessage(msgID, authzIDStr,
-                                                      de.getErrorMessage()));
+              operation.appendErrorMessage(ERR_EXTOP_PASSMOD_ERROR_MAPPING_USER
+                      .get(authzIDStr,de.getMessageObject()));
             }
             else
             {
               operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int msgID = MSGID_EXTOP_PASSMOD_ERROR_MAPPING_USER;
-              operation.appendAdditionalLogMessage(getMessage(msgID, authzIDStr,
-                                                        de.getErrorMessage()));
+              operation.appendAdditionalLogMessage(
+                      ERR_EXTOP_PASSMOD_ERROR_MAPPING_USER.get(
+                              authzIDStr,
+                              de.getMessageObject()));
             }
 
             return;
@@ -459,8 +458,8 @@
           // The authorization ID was in an illegal format.
           operation.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-          int msgID = MSGID_EXTOP_PASSMOD_INVALID_AUTHZID_STRING;
-          operation.appendErrorMessage(getMessage(msgID, authzIDStr));
+          operation.appendErrorMessage(
+                  ERR_EXTOP_PASSMOD_INVALID_AUTHZID_STRING.get(authzIDStr));
 
           return;
         }
@@ -483,9 +482,10 @@
 
         operation.setResultCode(DirectoryServer.getServerErrorResultCode());
 
-        int msgID = MSGID_EXTOP_PASSMOD_CANNOT_GET_PW_POLICY;
-        operation.appendErrorMessage(getMessage(msgID, String.valueOf(userDN),
-                                                de.getErrorMessage()));
+        operation.appendErrorMessage(
+                ERR_EXTOP_PASSMOD_CANNOT_GET_PW_POLICY.get(
+                        String.valueOf(userDN),
+                        de.getMessageObject()));
         return;
       }
 
@@ -513,8 +513,8 @@
         if (! clientConnection.hasPrivilege(Privilege.PASSWORD_RESET,
                                             operation))
         {
-          int msgID = MSGID_EXTOP_PASSMOD_INSUFFICIENT_PRIVILEGES;
-          operation.appendErrorMessage(getMessage(msgID));
+          operation.appendErrorMessage(
+                  ERR_EXTOP_PASSMOD_INSUFFICIENT_PRIVILEGES.get());
           operation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
           return;
         }
@@ -534,8 +534,7 @@
                                                  pwPolicyErrorType));
         }
 
-        int    msgID   = MSGID_EXTOP_PASSMOD_ACCOUNT_DISABLED;
-        String message = getMessage(msgID);
+        Message message = ERR_EXTOP_PASSMOD_ACCOUNT_DISABLED.get();
 
         if (oldPassword == null)
         {
@@ -565,8 +564,7 @@
                                                  pwPolicyErrorType));
         }
 
-        int    msgID   = MSGID_EXTOP_PASSMOD_ACCOUNT_LOCKED;
-        String message = getMessage(msgID);
+        Message message = ERR_EXTOP_PASSMOD_ACCOUNT_LOCKED.get();
 
         if (oldPassword == null)
         {
@@ -592,8 +590,8 @@
         {
           operation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-          int msgID = MSGID_EXTOP_PASSMOD_REQUIRE_CURRENT_PW;
-          operation.appendErrorMessage(getMessage(msgID));
+          operation.appendErrorMessage(
+                  ERR_EXTOP_PASSMOD_REQUIRE_CURRENT_PW.get());
 
           if (pwPolicyRequested)
           {
@@ -615,8 +613,8 @@
         {
           operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int msgID = MSGID_EXTOP_PASSMOD_SECURE_AUTH_REQUIRED;
-          operation.appendAdditionalLogMessage(getMessage(msgID));
+          operation.appendAdditionalLogMessage(
+                  ERR_EXTOP_PASSMOD_SECURE_AUTH_REQUIRED.get());
           return;
         }
 
@@ -628,8 +626,8 @@
         {
           operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int msgID = MSGID_EXTOP_PASSMOD_INVALID_OLD_PASSWORD;
-          operation.appendAdditionalLogMessage(getMessage(msgID));
+          operation.appendAdditionalLogMessage(
+                  ERR_EXTOP_PASSMOD_INVALID_OLD_PASSWORD.get());
 
           pwPolicyState.updateAuthFailureTimes();
           List<Modification> mods = pwPolicyState.getModifications();
@@ -664,15 +662,15 @@
         {
           operation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-          int msgID = MSGID_EXTOP_PASSMOD_USER_PW_CHANGES_NOT_ALLOWED;
-          operation.appendErrorMessage(getMessage(msgID));
+          operation.appendErrorMessage(
+                  ERR_EXTOP_PASSMOD_USER_PW_CHANGES_NOT_ALLOWED.get());
         }
         else
         {
           operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int msgID = MSGID_EXTOP_PASSMOD_USER_PW_CHANGES_NOT_ALLOWED;
-          operation.appendAdditionalLogMessage(getMessage(msgID));
+          operation.appendAdditionalLogMessage(
+                  ERR_EXTOP_PASSMOD_USER_PW_CHANGES_NOT_ALLOWED.get());
         }
 
         return;
@@ -688,15 +686,15 @@
         {
           operation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-          int msgID = MSGID_EXTOP_PASSMOD_SECURE_CHANGES_REQUIRED;
-          operation.appendErrorMessage(getMessage(msgID));
+          operation.appendErrorMessage(
+                  ERR_EXTOP_PASSMOD_SECURE_CHANGES_REQUIRED.get());
         }
         else
         {
           operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int msgID = MSGID_EXTOP_PASSMOD_SECURE_CHANGES_REQUIRED;
-          operation.appendAdditionalLogMessage(getMessage(msgID));
+          operation.appendAdditionalLogMessage(
+                  ERR_EXTOP_PASSMOD_SECURE_CHANGES_REQUIRED.get());
         }
 
         return;
@@ -721,15 +719,14 @@
         {
           operation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-          int msgID = MSGID_EXTOP_PASSMOD_IN_MIN_AGE;
-          operation.appendErrorMessage(getMessage(msgID));
+          operation.appendErrorMessage(ERR_EXTOP_PASSMOD_IN_MIN_AGE.get());
         }
         else
         {
           operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int msgID = MSGID_EXTOP_PASSMOD_IN_MIN_AGE;
-          operation.appendAdditionalLogMessage(getMessage(msgID));
+          operation.appendAdditionalLogMessage(
+                  ERR_EXTOP_PASSMOD_IN_MIN_AGE.get());
         }
 
         return;
@@ -755,15 +752,15 @@
         {
           operation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-          int msgID = MSGID_EXTOP_PASSMOD_PASSWORD_IS_EXPIRED;
-          operation.appendErrorMessage(getMessage(msgID));
+          operation.appendErrorMessage(
+                  ERR_EXTOP_PASSMOD_PASSWORD_IS_EXPIRED.get());
         }
         else
         {
           operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int msgID = MSGID_EXTOP_PASSMOD_PASSWORD_IS_EXPIRED;
-          operation.appendAdditionalLogMessage(getMessage(msgID));
+          operation.appendAdditionalLogMessage(
+                  ERR_EXTOP_PASSMOD_PASSWORD_IS_EXPIRED.get());
         }
 
         return;
@@ -786,15 +783,15 @@
             {
               operation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-              int msgID = MSGID_EXTOP_PASSMOD_NO_PW_GENERATOR;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_EXTOP_PASSMOD_NO_PW_GENERATOR.get());
             }
             else
             {
               operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int msgID = MSGID_EXTOP_PASSMOD_NO_PW_GENERATOR;
-              operation.appendAdditionalLogMessage(getMessage(msgID));
+              operation.appendAdditionalLogMessage(
+                      ERR_EXTOP_PASSMOD_NO_PW_GENERATOR.get());
             }
 
             return;
@@ -815,17 +812,17 @@
           {
             operation.setResultCode(de.getResultCode());
 
-            int msgID = MSGID_EXTOP_PASSMOD_CANNOT_GENERATE_PW;
-            operation.appendErrorMessage(getMessage(msgID,
-                                                    de.getErrorMessage()));
+            operation.appendErrorMessage(
+                    ERR_EXTOP_PASSMOD_CANNOT_GENERATE_PW.get(
+                            de.getMessageObject()));
           }
           else
           {
             operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int msgID = MSGID_EXTOP_PASSMOD_CANNOT_GENERATE_PW;
-            operation.appendAdditionalLogMessage(getMessage(msgID,
-                                                      de.getErrorMessage()));
+            operation.appendAdditionalLogMessage(
+                    ERR_EXTOP_PASSMOD_CANNOT_GENERATE_PW.get(
+                            de.getMessageObject()));
           }
 
           return;
@@ -845,15 +842,15 @@
             {
               operation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-              int msgID = MSGID_EXTOP_PASSMOD_PRE_ENCODED_NOT_ALLOWED;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_EXTOP_PASSMOD_PRE_ENCODED_NOT_ALLOWED.get());
             }
             else
             {
               operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int msgID = MSGID_EXTOP_PASSMOD_PRE_ENCODED_NOT_ALLOWED;
-              operation.appendAdditionalLogMessage(getMessage(msgID));
+              operation.appendAdditionalLogMessage(
+                      ERR_EXTOP_PASSMOD_PRE_ENCODED_NOT_ALLOWED.get());
             }
 
             return;
@@ -884,7 +881,7 @@
               }
             }
 
-            StringBuilder invalidReason = new StringBuilder();
+            MessageBuilder invalidReason = new MessageBuilder();
             if (! pwPolicyState.passwordIsAcceptable(operation, userEntry,
                                                      newPassword,
                                                      clearPasswords,
@@ -904,17 +901,17 @@
               {
                 operation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                int msgID = MSGID_EXTOP_PASSMOD_UNACCEPTABLE_PW;
-                operation.appendErrorMessage(getMessage(msgID,
-                               String.valueOf(invalidReason)));
+                operation.appendErrorMessage(
+                        ERR_EXTOP_PASSMOD_UNACCEPTABLE_PW.get(
+                                String.valueOf(invalidReason)));
               }
               else
               {
                 operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-                int msgID = MSGID_EXTOP_PASSMOD_UNACCEPTABLE_PW;
-                operation.appendAdditionalLogMessage(getMessage(msgID,
-                               String.valueOf(invalidReason)));
+                operation.appendAdditionalLogMessage(
+                        ERR_EXTOP_PASSMOD_UNACCEPTABLE_PW.get(
+                                String.valueOf(invalidReason)));
               }
 
               return;
@@ -931,15 +928,15 @@
               {
                 operation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                int msgID = MSGID_EXTOP_PASSMOD_PW_IN_HISTORY;
-                operation.appendErrorMessage(getMessage(msgID));
+                operation.appendErrorMessage(
+                        ERR_EXTOP_PASSMOD_PW_IN_HISTORY.get());
               }
               else
               {
                 operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-                int msgID = MSGID_EXTOP_PASSMOD_PW_IN_HISTORY;
-                operation.appendAdditionalLogMessage(getMessage(msgID));
+                operation.appendAdditionalLogMessage(
+                        ERR_EXTOP_PASSMOD_PW_IN_HISTORY.get());
               }
             }
             else
@@ -975,17 +972,17 @@
           {
             operation.setResultCode(de.getResultCode());
 
-            int msgID = MSGID_EXTOP_PASSMOD_CANNOT_ENCODE_PASSWORD;
-            operation.appendErrorMessage(getMessage(msgID,
-                                                    de.getErrorMessage()));
+            operation.appendErrorMessage(
+                    ERR_EXTOP_PASSMOD_CANNOT_ENCODE_PASSWORD.get(
+                            de.getMessageObject()));
           }
           else
           {
             operation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int msgID = MSGID_EXTOP_PASSMOD_CANNOT_ENCODE_PASSWORD;
-            operation.appendAdditionalLogMessage(getMessage(msgID,
-                                                      de.getErrorMessage()));
+            operation.appendAdditionalLogMessage(
+                    ERR_EXTOP_PASSMOD_CANNOT_ENCODE_PASSWORD.get(
+                            de.getMessageObject()));
           }
 
           return;
@@ -1146,7 +1143,7 @@
       // appropriate response.  Otherwise, process the operation.
       if (noOpRequested)
       {
-        operation.appendErrorMessage(getMessage(MSGID_EXTOP_PASSMOD_NOOP));
+        operation.appendErrorMessage(WARN_EXTOP_PASSMOD_NOOP.get());
 
         operation.setResultCode(ResultCode.NO_OPERATION);
       }
@@ -1192,12 +1189,11 @@
             // At this point, the user's password is already changed so there's
             // not much point in returning a non-success result.  However, we
             // should at least log that something went wrong.
-            int    msgID   = MSGID_EXTOP_PASSMOD_CANNOT_UPDATE_PWP_STATE;
-            String message = getMessage(msgID, String.valueOf(userDN),
-                                        modOp.getResultCode(),
-                                        modOp.getErrorMessage());
-            logError(ErrorLogCategory.PASSWORD_POLICY,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            Message message = WARN_EXTOP_PASSMOD_CANNOT_UPDATE_PWP_STATE.get(
+                    String.valueOf(userDN),
+                    String.valueOf(modOp.getResultCode()),
+                    modOp.getErrorMessage());
+            ErrorLogger.logError(message);
           }
         }
 
@@ -1281,9 +1277,9 @@
       {
         operation.setResultCode(ResultCode.NO_SUCH_OBJECT);
 
-        int msgID = MSGID_EXTOP_PASSMOD_NO_USER_ENTRY_BY_AUTHZID;
-        operation.appendErrorMessage(getMessage(msgID,
-                                                String.valueOf(entryDN)));
+        operation.appendErrorMessage(
+                ERR_EXTOP_PASSMOD_NO_USER_ENTRY_BY_AUTHZID.get(
+                        String.valueOf(entryDN)));
 
         // See if one of the entry's ancestors exists.
         DN parentDN = entryDN.getParentDNInSuffix();
@@ -1322,7 +1318,7 @@
       }
 
       operation.setResultCode(de.getResultCode());
-      operation.appendErrorMessage(de.getErrorMessage());
+      operation.appendErrorMessage(de.getMessageObject());
       operation.setMatchedDN(de.getMatchedDN());
       operation.setReferralURLs(de.getReferralURLs());
 
@@ -1338,7 +1334,7 @@
   @Override()
   public boolean isConfigurationAcceptable(ExtendedOperationHandlerCfg
                                                 configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     PasswordModifyExtendedOperationHandlerCfg config =
          (PasswordModifyExtendedOperationHandlerCfg) configuration;
@@ -1363,7 +1359,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
        PasswordModifyExtendedOperationHandlerCfg config,
-       List<String> unacceptableReasons)
+       List<Message> unacceptableReasons)
   {
     // Make sure that the specified identity mapper is OK.
     try
@@ -1372,9 +1368,9 @@
       IdentityMapper mapper = DirectoryServer.getIdentityMapper(mapperDN);
       if (mapper == null)
       {
-        int msgID = MSGID_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER;
-        String message = getMessage(msgID, String.valueOf(mapperDN),
-                                    String.valueOf(config.dn()));
+        Message message = ERR_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER.get(
+                String.valueOf(mapperDN),
+                String.valueOf(config.dn()));
         unacceptableReasons.add(message);
         return false;
       }
@@ -1386,9 +1382,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER;
-      String message = getMessage(msgID, String.valueOf(config.dn()),
-                                  getExceptionMessage(e));
+      Message message = ERR_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER.get(
+              String.valueOf(config.dn()),
+              getExceptionMessage(e));
       unacceptableReasons.add(message);
       return false;
     }
@@ -1419,7 +1415,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Make sure that the specified identity mapper is OK.
@@ -1433,9 +1429,9 @@
       {
         resultCode = ResultCode.CONSTRAINT_VIOLATION;
 
-        int msgID = MSGID_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER;
-        messages.add(getMessage(msgID, String.valueOf(mapperDN),
-                                String.valueOf(config.dn())));
+        messages.add(ERR_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER.get(
+                String.valueOf(mapperDN),
+                String.valueOf(config.dn())));
       }
     }
     catch (Exception e)
@@ -1447,9 +1443,9 @@
 
       resultCode = DirectoryServer.getServerErrorResultCode();
 
-      int msgID = MSGID_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER;
-      messages.add(getMessage(msgID, String.valueOf(config.dn()),
-                              getExceptionMessage(e)));
+      messages.add(ERR_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER.get(
+              String.valueOf(config.dn()),
+              getExceptionMessage(e)));
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordPolicyStateExtendedOperation.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordPolicyStateExtendedOperation.java
index 297b64a..180ed9d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordPolicyStateExtendedOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordPolicyStateExtendedOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -63,8 +64,7 @@
 import org.opends.server.types.SearchScope;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -528,7 +528,7 @@
     ClientConnection clientConnection = operation.getClientConnection();
     if (! clientConnection.hasPrivilege(Privilege.PASSWORD_RESET, operation))
     {
-      String message = getMessage(MSGID_PWPSTATE_EXTOP_NO_PRIVILEGE);
+      Message message = ERR_PWPSTATE_EXTOP_NO_PRIVILEGE.get();
       operation.appendErrorMessage(message);
       operation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
       return;
@@ -540,7 +540,7 @@
     ASN1OctetString requestValue = operation.getRequestValue();
     if (requestValue == null)
     {
-      String message = getMessage(MSGID_PWPSTATE_EXTOP_NO_REQUEST_VALUE);
+      Message message = ERR_PWPSTATE_EXTOP_NO_REQUEST_VALUE.get();
       operation.appendErrorMessage(message);
       operation.setResultCode(ResultCode.PROTOCOL_ERROR);
       return;
@@ -571,8 +571,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      String message = getMessage(MSGID_PWPSTATE_EXTOP_DECODE_FAILURE,
-                                  getExceptionMessage(e));
+      Message message =
+          ERR_PWPSTATE_EXTOP_DECODE_FAILURE.get(getExceptionMessage(e));
       operation.appendErrorMessage(message);
       operation.setResultCode(ResultCode.PROTOCOL_ERROR);
       return;
@@ -626,7 +626,8 @@
     }
     else if (matchingEntries.size() > 1)
     {
-      String message = getMessage(MSGID_PWPSTATE_EXTOP_MULTIPLE_ENTRIES);
+      Message message = ERR_PWPSTATE_EXTOP_MULTIPLE_ENTRIES.get(
+              String.valueOf(targetDN));
       operation.appendErrorMessage(message);
       operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
       return;
@@ -706,7 +707,8 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          String message = getMessage(MSGID_PWPSTATE_EXTOP_INVALID_OP_ENCODING);
+          Message message = ERR_PWPSTATE_EXTOP_INVALID_OP_ENCODING.get(
+            e.getLocalizedMessage());
           operation.appendErrorMessage(message);
           operation.setResultCode(ResultCode.PROTOCOL_ERROR);
           return;
@@ -725,15 +727,15 @@
           case OP_SET_ACCOUNT_DISABLED_STATE:
             if (opValues == null)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_NO_DISABLED_VALUE;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_NO_DISABLED_VALUE.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
             else if (opValues.size() != 1)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_BAD_DISABLED_VALUE_COUNT;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_BAD_DISABLED_VALUE_COUNT.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
@@ -750,8 +752,8 @@
               }
               else
               {
-                int msgID = MSGID_PWPSTATE_EXTOP_BAD_DISABLED_VALUE;
-                operation.appendErrorMessage(getMessage(msgID));
+                operation.appendErrorMessage(
+                        ERR_PWPSTATE_EXTOP_BAD_DISABLED_VALUE.get());
                 operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
                 return;
               }
@@ -776,8 +778,8 @@
             }
             else if (opValues.size() != 1)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_BAD_ACCT_EXP_VALUE_COUNT;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_BAD_ACCT_EXP_VALUE_COUNT.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
@@ -793,9 +795,10 @@
               }
               catch (DirectoryException de)
               {
-                int msgID = MSGID_PWPSTATE_EXTOP_BAD_ACCT_EXP_VALUE;
-                operation.appendErrorMessage(getMessage(msgID, opValues.get(0),
-                                                        de.getErrorMessage()));
+                operation.appendErrorMessage(
+                        ERR_PWPSTATE_EXTOP_BAD_ACCT_EXP_VALUE.get(
+                                opValues.get(0),
+                                de.getMessageObject()));
                 operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
                 return;
               }
@@ -824,8 +827,8 @@
             }
             else if (opValues.size() != 1)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_BAD_PWCHANGETIME_VALUE_COUNT;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_BAD_PWCHANGETIME_VALUE_COUNT.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
@@ -841,9 +844,10 @@
               }
               catch (DirectoryException de)
               {
-                int msgID = MSGID_PWPSTATE_EXTOP_BAD_PWCHANGETIME_VALUE;
-                operation.appendErrorMessage(getMessage(msgID, opValues.get(0),
-                                                        de.getErrorMessage()));
+                operation.appendErrorMessage(
+                        ERR_PWPSTATE_EXTOP_BAD_PWCHANGETIME_VALUE.get(
+                                opValues.get(0),
+                                de.getMessageObject()));
                 operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
                 return;
               }
@@ -868,8 +872,8 @@
             }
             else if (opValues.size() != 1)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_BAD_PWWARNEDTIME_VALUE_COUNT;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_BAD_PWWARNEDTIME_VALUE_COUNT.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
@@ -885,10 +889,10 @@
               }
               catch (DirectoryException de)
               {
-                int msgID = MSGID_PWPSTATE_EXTOP_BAD_PWWARNEDTIME_VALUE;
-                operation.appendErrorMessage(getMessage(msgID,
-                                                        opValues.get(0),
-                                                        de.getErrorMessage()));
+                operation.appendErrorMessage(
+                        ERR_PWPSTATE_EXTOP_BAD_PWWARNEDTIME_VALUE.get(
+                                opValues.get(0),
+                                de.getMessageObject()));
                 operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
                 return;
               }
@@ -927,8 +931,8 @@
             }
             else if (opValues.size() != 1)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_BAD_ADD_FAILURE_TIME_COUNT;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_BAD_ADD_FAILURE_TIME_COUNT.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
@@ -949,9 +953,9 @@
               }
               catch (DirectoryException de)
               {
-                int msgID = MSGID_PWPSTATE_EXTOP_BAD_AUTH_FAILURE_TIME;
-                String message = getMessage(msgID, opValues.get(0),
-                                            de.getErrorMessage());
+                Message message = ERR_PWPSTATE_EXTOP_BAD_AUTH_FAILURE_TIME.get(
+                        opValues.get(0),
+                        de.getMessageObject());
                 operation.setResultCode(de.getResultCode());
                 operation.appendErrorMessage(message);
                 return;
@@ -981,8 +985,10 @@
                 }
                 catch (DirectoryException de)
                 {
-                  int msgID = MSGID_PWPSTATE_EXTOP_BAD_AUTH_FAILURE_TIME;
-                  String message = getMessage(msgID, s, de.getErrorMessage());
+                  Message message =
+                          ERR_PWPSTATE_EXTOP_BAD_AUTH_FAILURE_TIME.get(
+                                  s,
+                                  de.getMessageObject());
                   operation.setResultCode(de.getResultCode());
                   operation.appendErrorMessage(message);
                   return;
@@ -1018,8 +1024,8 @@
             }
             else if (opValues.size() != 1)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_BAD_LAST_LOGIN_TIME_COUNT;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_BAD_LAST_LOGIN_TIME_COUNT.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
@@ -1035,9 +1041,10 @@
               }
               catch (DirectoryException de)
               {
-                int msgID = MSGID_PWPSTATE_EXTOP_BAD_LAST_LOGIN_TIME;
-                operation.appendErrorMessage(getMessage(msgID, opValues.get(0),
-                                                        de.getErrorMessage()));
+                operation.appendErrorMessage(
+                        ERR_PWPSTATE_EXTOP_BAD_LAST_LOGIN_TIME.get(
+                                opValues.get(0),
+                                de.getMessageObject()));
                 operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
                 return;
               }
@@ -1062,15 +1069,15 @@
           case OP_SET_PASSWORD_RESET_STATE:
             if (opValues == null)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_NO_RESET_STATE_VALUE;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_NO_RESET_STATE_VALUE.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
             else if (opValues.size() != 1)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_BAD_RESET_STATE_VALUE_COUNT;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_BAD_RESET_STATE_VALUE_COUNT.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
@@ -1087,8 +1094,8 @@
               }
               else
               {
-                int msgID = MSGID_PWPSTATE_EXTOP_BAD_RESET_STATE_VALUE;
-                operation.appendErrorMessage(getMessage(msgID));
+                operation.appendErrorMessage(
+                        ERR_PWPSTATE_EXTOP_BAD_RESET_STATE_VALUE.get());
                 operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
                 return;
               }
@@ -1117,8 +1124,8 @@
             }
             else if (opValues.size() != 1)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_BAD_ADD_GRACE_LOGIN_TIME_COUNT;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_BAD_ADD_GRACE_LOGIN_TIME_COUNT.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
@@ -1139,9 +1146,9 @@
               }
               catch (DirectoryException de)
               {
-                int msgID = MSGID_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME;
-                String message = getMessage(msgID, opValues.get(0),
-                                            de.getErrorMessage());
+                Message message = ERR_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME.get(
+                        opValues.get(0),
+                        de.getMessageObject());
                 operation.setResultCode(de.getResultCode());
                 operation.appendErrorMessage(message);
                 return;
@@ -1171,8 +1178,8 @@
                 }
                 catch (DirectoryException de)
                 {
-                  int msgID = MSGID_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME;
-                  String message = getMessage(msgID, s, de.getErrorMessage());
+                  Message message = ERR_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME.get(
+                          s, de.getMessageObject());
                   operation.setResultCode(de.getResultCode());
                   operation.appendErrorMessage(message);
                   return;
@@ -1204,8 +1211,8 @@
             }
             else if (opValues.size() != 1)
             {
-              int msgID = MSGID_PWPSTATE_EXTOP_BAD_REQUIRED_CHANGE_TIME_COUNT;
-              operation.appendErrorMessage(getMessage(msgID));
+              operation.appendErrorMessage(
+                      ERR_PWPSTATE_EXTOP_BAD_REQUIRED_CHANGE_TIME_COUNT.get());
               operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               return;
             }
@@ -1221,9 +1228,10 @@
               }
               catch (DirectoryException de)
               {
-                int msgID = MSGID_PWPSTATE_EXTOP_BAD_REQUIRED_CHANGE_TIME;
-                operation.appendErrorMessage(getMessage(msgID, opValues.get(0),
-                                                        de.getErrorMessage()));
+                operation.appendErrorMessage(
+                        ERR_PWPSTATE_EXTOP_BAD_REQUIRED_CHANGE_TIME.get(
+                                opValues.get(0),
+                                de.getMessageObject()));
                 operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
                 return;
               }
@@ -1251,8 +1259,9 @@
             break;
 
           default:
-            int msgID = MSGID_PWPSTATE_EXTOP_UNKNOWN_OP_TYPE;
-            operation.appendErrorMessage(getMessage(msgID, opType));
+
+            operation.appendErrorMessage(ERR_PWPSTATE_EXTOP_UNKNOWN_OP_TYPE.get(
+                    String.valueOf(opType)));
             operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
             return;
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java
index 2f0fb51..1a4d7e2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -57,8 +58,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -127,10 +128,9 @@
     identityMapper = DirectoryServer.getIdentityMapper(identityMapperDN);
     if (identityMapper == null)
     {
-      int    msgID   = MSGID_SASLPLAIN_NO_SUCH_IDENTITY_MAPPER;
-      String message = getMessage(msgID, String.valueOf(identityMapperDN),
-                                  String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message = ERR_SASLPLAIN_NO_SUCH_IDENTITY_MAPPER.get(
+          String.valueOf(identityMapperDN), String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
 
 
@@ -170,9 +170,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLPLAIN_NO_SASL_CREDENTIALS;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLPLAIN_NO_SASL_CREDENTIALS.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -183,9 +182,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLPLAIN_NO_NULLS_IN_CREDENTIALS;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLPLAIN_NO_NULLS_IN_CREDENTIALS.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -200,9 +198,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLPLAIN_NO_SECOND_NULL;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLPLAIN_NO_SECOND_NULL.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -210,9 +207,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLPLAIN_ZERO_LENGTH_AUTHCID;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLPLAIN_ZERO_LENGTH_AUTHCID.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -220,9 +216,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLPLAIN_ZERO_LENGTH_PASSWORD;
-      String message = getMessage(msgID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLPLAIN_ZERO_LENGTH_PASSWORD.get();
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -252,9 +247,9 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLPLAIN_CANNOT_DECODE_AUTHCID_AS_DN;
-        String message = getMessage(msgID, authcID, de.getErrorMessage());
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLPLAIN_CANNOT_DECODE_AUTHCID_AS_DN.get(
+                authcID, de.getMessageObject());
+        bindOperation.setAuthFailureReason(message);
         return;
       }
 
@@ -262,9 +257,8 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLPLAIN_AUTHCID_IS_NULL_DN;
-        String message = getMessage(msgID);
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLPLAIN_AUTHCID_IS_NULL_DN.get();
+        bindOperation.setAuthFailureReason(message);
         return;
       }
 
@@ -290,9 +284,9 @@
       {
         bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
 
-        int    msgID   = MSGID_SASLPLAIN_CANNOT_LOCK_ENTRY;
-        String message = getMessage(msgID, String.valueOf(userDN));
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = INFO_SASLPLAIN_CANNOT_LOCK_ENTRY.get(String.valueOf(
+                userDN));
+        bindOperation.setAuthFailureReason(message);
         return;
       }
 
@@ -309,10 +303,10 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLPLAIN_CANNOT_GET_ENTRY_BY_DN;
-        String message = getMessage(msgID, String.valueOf(userDN),
-                                    de.getErrorMessage());
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLPLAIN_CANNOT_GET_ENTRY_BY_DN.get(
+                String.valueOf(userDN),
+                de.getMessageObject());
+        bindOperation.setAuthFailureReason(message);
         return;
       }
       finally
@@ -341,10 +335,10 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLPLAIN_CANNOT_MAP_USERNAME;
-        String message = getMessage(msgID, String.valueOf(authcID),
-                                    de.getErrorMessage());
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLPLAIN_CANNOT_MAP_USERNAME.get(
+                String.valueOf(authcID),
+                de.getMessageObject());
+        bindOperation.setAuthFailureReason(message);
         return;
       }
     }
@@ -355,9 +349,8 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLPLAIN_NO_MATCHING_ENTRIES;
-      String message = getMessage(msgID, authcID);
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLPLAIN_NO_MATCHING_ENTRIES.get(authcID);
+      bindOperation.setAuthFailureReason(message);
       return;
     }
     else
@@ -388,9 +381,9 @@
 
           bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          int    msgID   = MSGID_SASLPLAIN_AUTHZID_INVALID_DN;
-          String message = getMessage(msgID, authzID, de.getErrorMessage());
-          bindOperation.setAuthFailureReason(msgID, message);
+          Message message = ERR_SASLPLAIN_AUTHZID_INVALID_DN.get(
+                  authzID, de.getMessageObject());
+          bindOperation.setAuthFailureReason(message);
           return;
         }
 
@@ -411,10 +404,9 @@
           {
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int msgID = MSGID_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES;
-            String message = getMessage(msgID,
-                                        String.valueOf(userEntry.getDN()));
-            bindOperation.setAuthFailureReason(msgID, message);
+            Message message = ERR_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES.get(
+                    String.valueOf(userEntry.getDN()));
+            bindOperation.setAuthFailureReason(message);
             return;
           }
 
@@ -431,9 +423,9 @@
               {
                 bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-                int msgID = MSGID_SASLPLAIN_AUTHZID_NO_SUCH_ENTRY;
-                String message = getMessage(msgID, String.valueOf(authzDN));
-                bindOperation.setAuthFailureReason(msgID, message);
+                Message message = ERR_SASLPLAIN_AUTHZID_NO_SUCH_ENTRY.get(
+                        String.valueOf(authzDN));
+                bindOperation.setAuthFailureReason(message);
                 return;
               }
             }
@@ -446,10 +438,10 @@
 
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int msgID = MSGID_SASLPLAIN_AUTHZID_CANNOT_GET_ENTRY;
-              String message = getMessage(msgID, String.valueOf(authzDN),
-                                          de.getErrorMessage());
-              bindOperation.setAuthFailureReason(msgID, message);
+              Message message = ERR_SASLPLAIN_AUTHZID_CANNOT_GET_ENTRY.get(
+                      String.valueOf(authzDN),
+                      de.getMessageObject());
+              bindOperation.setAuthFailureReason(message);
               return;
             }
           }
@@ -480,9 +472,9 @@
             {
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int    msgID   = MSGID_SASLPLAIN_AUTHZID_NO_MAPPED_ENTRY;
-              String message = getMessage(msgID, authzID);
-              bindOperation.setAuthFailureReason(msgID, message);
+              Message message = ERR_SASLPLAIN_AUTHZID_NO_MAPPED_ENTRY.get(
+                      authzID);
+              bindOperation.setAuthFailureReason(message);
               return;
             }
           }
@@ -495,9 +487,9 @@
 
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int    msgID   = MSGID_SASLPLAIN_AUTHZID_CANNOT_MAP_AUTHZID;
-            String message = getMessage(msgID, authzID, de.getErrorMessage());
-            bindOperation.setAuthFailureReason(msgID, message);
+            Message message = ERR_SASLPLAIN_AUTHZID_CANNOT_MAP_AUTHZID.get(
+                    authzID, de.getMessageObject());
+            bindOperation.setAuthFailureReason(message);
             return;
           }
         }
@@ -514,10 +506,9 @@
           {
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            int msgID = MSGID_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES;
-            String message = getMessage(msgID,
-                                        String.valueOf(userEntry.getDN()));
-            bindOperation.setAuthFailureReason(msgID, message);
+            Message message = ERR_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES.get(
+                    String.valueOf(userEntry.getDN()));
+            bindOperation.setAuthFailureReason(message);
             return;
           }
         }
@@ -535,9 +526,8 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_SASLPLAIN_INVALID_PASSWORD;
-        String message = getMessage(msgID);
-        bindOperation.setAuthFailureReason(msgID, message);
+        Message message = ERR_SASLPLAIN_INVALID_PASSWORD.get();
+        bindOperation.setAuthFailureReason(message);
         return;
       }
     }
@@ -550,10 +540,10 @@
 
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      int    msgID   = MSGID_SASLPLAIN_CANNOT_CHECK_PASSWORD_VALIDITY;
-      String message = getMessage(msgID, String.valueOf(userEntry.getDN()),
-                                  String.valueOf(e));
-      bindOperation.setAuthFailureReason(msgID, message);
+      Message message = ERR_SASLPLAIN_CANNOT_CHECK_PASSWORD_VALIDITY.get(
+              String.valueOf(userEntry.getDN()),
+              String.valueOf(e));
+      bindOperation.setAuthFailureReason(message);
       return;
     }
 
@@ -600,7 +590,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     PlainSASLMechanismHandlerCfg config =
          (PlainSASLMechanismHandlerCfg) configuration;
@@ -614,7 +604,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PlainSASLMechanismHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -625,10 +615,9 @@
          DirectoryServer.getIdentityMapper(identityMapperDN);
     if (newIdentityMapper == null)
     {
-      int msgID = MSGID_SASLPLAIN_NO_SUCH_IDENTITY_MAPPER;
-      unacceptableReasons.add(getMessage(msgID,
-                                         String.valueOf(identityMapperDN),
-                                         String.valueOf(cfgEntryDN)));
+      unacceptableReasons.add(ERR_SASLPLAIN_NO_SUCH_IDENTITY_MAPPER.get(
+              String.valueOf(identityMapperDN),
+              String.valueOf(cfgEntryDN)));
       configAcceptable = false;
     }
 
@@ -646,7 +635,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the identity mapper that should be used to find users.
@@ -660,9 +649,9 @@
         resultCode = ResultCode.CONSTRAINT_VIOLATION;
       }
 
-      int msgID = MSGID_SASLPLAIN_NO_SUCH_IDENTITY_MAPPER;
-      messages.add(getMessage(msgID, String.valueOf(identityMapperDN),
-                              String.valueOf(configEntryDN)));
+      messages.add(ERR_SASLPLAIN_NO_SUCH_IDENTITY_MAPPER.get(
+              String.valueOf(identityMapperDN),
+              String.valueOf(configEntryDN)));
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/RandomPasswordGenerator.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/RandomPasswordGenerator.java
index fb824cd..d910fb9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/RandomPasswordGenerator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/RandomPasswordGenerator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -51,12 +52,11 @@
 import org.opends.server.types.NamedCharacterSet;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -127,19 +127,18 @@
 
       if (encodedCharacterSets.size() == 0)
       {
-        msgID = MSGID_RANDOMPWGEN_NO_CHARSETS;
-        String message = getMessage(msgID, String.valueOf(configEntryDN));
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_RANDOMPWGEN_NO_CHARSETS.get(String.valueOf(configEntryDN));
+        throw new ConfigException(message);
       }
       for (NamedCharacterSet s : NamedCharacterSet
           .decodeCharacterSets(encodedCharacterSets))
       {
         if (charsets.containsKey(s.getName()))
         {
-          msgID = MSGID_RANDOMPWGEN_CHARSET_NAME_CONFLICT;
-          String message = getMessage(msgID, String.valueOf(configEntryDN), s
-              .getName());
-          throw new ConfigException(msgID, message);
+          Message message = ERR_RANDOMPWGEN_CHARSET_NAME_CONFLICT.get(
+              String.valueOf(configEntryDN), s.getName());
+          throw new ConfigException(message);
         }
         else
         {
@@ -158,9 +157,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS.get(getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -188,10 +187,9 @@
           NamedCharacterSet charset = charsets.get(name);
           if (charset == null)
           {
-            msgID = MSGID_RANDOMPWGEN_UNKNOWN_CHARSET;
-            String message = getMessage(msgID, String.valueOf(formatString),
-                String.valueOf(name));
-            throw new ConfigException(msgID, message);
+            Message message = ERR_RANDOMPWGEN_UNKNOWN_CHARSET.get(
+                String.valueOf(formatString), String.valueOf(name));
+            throw new ConfigException(message);
           }
           else
           {
@@ -210,9 +208,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          msgID = MSGID_RANDOMPWGEN_INVALID_PWFORMAT;
-          String message = getMessage(msgID, String.valueOf(formatString));
-          throw new ConfigException(msgID, message, e);
+          Message message = ERR_RANDOMPWGEN_INVALID_PWFORMAT.get(
+              String.valueOf(formatString));
+          throw new ConfigException(message, e);
         }
       }
 
@@ -238,9 +236,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new InitializationException(msgID, message, e);
+      Message message =
+          ERR_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT.get(getExceptionMessage(e));
+      throw new InitializationException(message, e);
     }
 
     configuration.addRandomChangeListener(this) ;
@@ -301,7 +299,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PasswordGeneratorCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     RandomPasswordGeneratorCfg config =
          (RandomPasswordGeneratorCfg) configuration;
@@ -315,7 +313,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       RandomPasswordGeneratorCfg configuration,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     int msgID;
 
@@ -331,9 +329,9 @@
       SortedSet<String> currentPasSet = configuration.getPasswordCharacterSet();
       if (currentPasSet.size() == 0)
       {
-        msgID = MSGID_RANDOMPWGEN_NO_CHARSETS;
-        String message = getMessage(msgID, String.valueOf(cfgEntryDN));
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_RANDOMPWGEN_NO_CHARSETS.get(String.valueOf(cfgEntryDN));
+        throw new ConfigException(message);
       }
 
       for (NamedCharacterSet s : NamedCharacterSet
@@ -341,9 +339,8 @@
       {
         if (charsets.containsKey(s.getName()))
         {
-          msgID = MSGID_RANDOMPWGEN_CHARSET_NAME_CONFLICT;
-          String message = getMessage(msgID, String.valueOf(cfgEntryDN), s
-              .getName());
+          Message message = ERR_RANDOMPWGEN_CHARSET_NAME_CONFLICT.get(
+                  String.valueOf(cfgEntryDN), s.getName());
           unacceptableReasons.add(message);
           return false;
         }
@@ -355,7 +352,7 @@
     }
     catch (ConfigException ce)
     {
-      unacceptableReasons.add(ce.getMessage());
+      unacceptableReasons.add(ce.getMessageObject());
       return false;
     }
     catch (Exception e)
@@ -365,8 +362,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message = ERR_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS.get(
+              getExceptionMessage(e));
       unacceptableReasons.add(message);
       return false;
     }
@@ -392,9 +389,8 @@
             NamedCharacterSet charset = charsets.get(name);
             if (charset == null)
             {
-              msgID = MSGID_RANDOMPWGEN_UNKNOWN_CHARSET;
-              String message = getMessage(msgID, String.valueOf(formatString),
-                                          String.valueOf(name));
+              Message message = ERR_RANDOMPWGEN_UNKNOWN_CHARSET.get(
+                      String.valueOf(formatString), String.valueOf(name));
               unacceptableReasons.add(message);
               return false;
             }
@@ -406,8 +402,8 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            msgID = MSGID_RANDOMPWGEN_INVALID_PWFORMAT;
-            String message = getMessage(msgID, String.valueOf(formatString));
+            Message message = ERR_RANDOMPWGEN_INVALID_PWFORMAT.get(
+                    String.valueOf(formatString));
             unacceptableReasons.add(message);
             return false;
           }
@@ -420,8 +416,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message = ERR_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT.get(
+              getExceptionMessage(e));
       unacceptableReasons.add(message);
       return false;
     }
@@ -441,7 +437,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
     int msgID;
 
 
@@ -455,8 +451,8 @@
       newEncodedCharacterSets = configuration.getPasswordCharacterSet();
       if (newEncodedCharacterSets.size() == 0)
       {
-        msgID = MSGID_RANDOMPWGEN_NO_CHARSETS;
-        messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+        messages.add(ERR_RANDOMPWGEN_NO_CHARSETS.get(
+                String.valueOf(configEntryDN)));
 
         if (resultCode == ResultCode.SUCCESS)
         {
@@ -470,9 +466,9 @@
         {
           if (charsets.containsKey(s.getName()))
           {
-            msgID = MSGID_RANDOMPWGEN_CHARSET_NAME_CONFLICT;
-            messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                                    s.getName()));
+            messages.add(ERR_RANDOMPWGEN_CHARSET_NAME_CONFLICT.get(
+                    String.valueOf(configEntryDN),
+                    s.getName()));
 
             if (resultCode == ResultCode.SUCCESS)
             {
@@ -488,7 +484,7 @@
     }
     catch (ConfigException ce)
     {
-      messages.add(ce.getMessage());
+      messages.add(ce.getMessageObject());
 
       if (resultCode == ResultCode.SUCCESS)
       {
@@ -502,8 +498,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS;
-      messages.add(getMessage(msgID, getExceptionMessage(e)));
+      messages.add(ERR_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS.get(
+              getExceptionMessage(e)));
 
       if (resultCode == ResultCode.SUCCESS)
       {
@@ -537,9 +533,9 @@
           NamedCharacterSet charset = charsets.get(name);
           if (charset == null)
           {
-            msgID = MSGID_RANDOMPWGEN_UNKNOWN_CHARSET;
-            messages.add(getMessage(msgID, String.valueOf(newFormatString),
-                String.valueOf(name)));
+            messages.add(ERR_RANDOMPWGEN_UNKNOWN_CHARSET.get(
+                    String.valueOf(newFormatString),
+                    String.valueOf(name)));
 
             if (resultCode == ResultCode.SUCCESS)
             {
@@ -559,8 +555,8 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          msgID = MSGID_RANDOMPWGEN_INVALID_PWFORMAT;
-          messages.add(getMessage(msgID, String.valueOf(newFormatString)));
+          messages.add(ERR_RANDOMPWGEN_INVALID_PWFORMAT.get(
+                  String.valueOf(newFormatString)));
 
           if (resultCode == ResultCode.SUCCESS)
           {
@@ -576,8 +572,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      msgID = MSGID_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT;
-      messages.add(getMessage(msgID, getExceptionMessage(e)));
+      messages.add(ERR_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT.get(
+              getExceptionMessage(e)));
 
       if (resultCode == ResultCode.SUCCESS)
       {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/RegularExpressionIdentityMapper.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/RegularExpressionIdentityMapper.java
index 26884a6..81675be 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/RegularExpressionIdentityMapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/RegularExpressionIdentityMapper.java
@@ -60,8 +60,8 @@
 import org.opends.server.types.SearchResultEntry;
 import org.opends.server.types.SearchScope;
 
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+import org.opends.messages.Message;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -131,12 +131,11 @@
     {
       matchPattern  = Pattern.compile(currentConfig.getMatchPattern());
     }
-    catch (PatternSyntaxException pse)
-    {
-      int    msgID   = MSGID_REGEXMAP_INVALID_MATCH_PATTERN;
-      String message = getMessage(msgID, currentConfig.getMatchPattern(),
-                                  pse.getMessage());
-      throw new ConfigException(msgID, message, pse);
+    catch (PatternSyntaxException pse) {
+      Message message = ERR_REGEXMAP_INVALID_MATCH_PATTERN.get(
+              currentConfig.getMatchPattern(),
+              pse.getMessage());
+      throw new ConfigException(message, pse);
     }
 
     replacePattern = currentConfig.getReplacePattern();
@@ -156,10 +155,9 @@
                                                             false);
       if (type == null)
       {
-        int    msgID   = MSGID_REGEXMAP_UNKNOWN_ATTR;
-        String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                    name);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_REGEXMAP_UNKNOWN_ATTR.get(
+                String.valueOf(configEntryDN), name);
+        throw new ConfigException(message);
       }
 
       attributeTypes[i++] = type;
@@ -257,27 +255,26 @@
 
         case SIZE_LIMIT_EXCEEDED:
           // Multiple entries matched the filter.  This is not acceptable.
-          int    msgID   = MSGID_REGEXMAP_MULTIPLE_MATCHING_ENTRIES;
-          String message = getMessage(msgID, String.valueOf(processedID));
-          throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                       msgID);
+          Message message = ERR_REGEXMAP_MULTIPLE_MATCHING_ENTRIES.get(
+                          String.valueOf(processedID));
+          throw new DirectoryException(
+                  ResultCode.CONSTRAINT_VIOLATION, message);
+
 
         case TIME_LIMIT_EXCEEDED:
         case ADMIN_LIMIT_EXCEEDED:
           // The search criteria was too inefficient.
-          msgID   = MSGID_REGEXMAP_INEFFICIENT_SEARCH;
-          message = getMessage(msgID, String.valueOf(processedID),
+          message = ERR_REGEXMAP_INEFFICIENT_SEARCH.get(
+                           String.valueOf(processedID),
                          String.valueOf(internalSearch.getErrorMessage()));
-          throw new DirectoryException(internalSearch.getResultCode(), message,
-                                       msgID);
+          throw new DirectoryException(internalSearch.getResultCode(), message);
 
         default:
           // Just pass on the failure that was returned for this search.
-          msgID   = MSGID_REGEXMAP_SEARCH_FAILED;
-          message = getMessage(msgID, String.valueOf(processedID),
+          message = ERR_REGEXMAP_SEARCH_FAILED.get(
+                           String.valueOf(processedID),
                          String.valueOf(internalSearch.getErrorMessage()));
-          throw new DirectoryException(internalSearch.getResultCode(), message,
-                                       msgID);
+          throw new DirectoryException(internalSearch.getResultCode(), message);
       }
 
       LinkedList<SearchResultEntry> searchEntries =
@@ -290,18 +287,18 @@
           matchingEntry = iterator.next();
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_REGEXMAP_MULTIPLE_MATCHING_ENTRIES;
-            String message = getMessage(msgID, String.valueOf(processedID));
+            Message message = ERR_REGEXMAP_MULTIPLE_MATCHING_ENTRIES.get(
+                            String.valueOf(processedID));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
         }
         else
         {
-          int    msgID   = MSGID_REGEXMAP_MULTIPLE_MATCHING_ENTRIES;
-          String message = getMessage(msgID, String.valueOf(processedID));
-          throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                       msgID);
+          Message message = ERR_REGEXMAP_MULTIPLE_MATCHING_ENTRIES.get(
+                          String.valueOf(processedID));
+          throw new DirectoryException(
+                  ResultCode.CONSTRAINT_VIOLATION, message);
         }
       }
     }
@@ -324,7 +321,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(IdentityMapperCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     RegularExpressionIdentityMapperCfg config =
          (RegularExpressionIdentityMapperCfg) configuration;
@@ -338,7 +335,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       RegularExpressionIdentityMapperCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -349,8 +346,8 @@
     }
     catch (PatternSyntaxException pse)
     {
-      int    msgID   = MSGID_REGEXMAP_INVALID_MATCH_PATTERN;
-      String message = getMessage(msgID, configuration.getMatchPattern(),
+      Message message = ERR_REGEXMAP_INVALID_MATCH_PATTERN.get(
+                      configuration.getMatchPattern(),
                                   pse.getMessage());
       unacceptableReasons.add(message);
       configAcceptable = false;
@@ -364,8 +361,9 @@
                                                          false);
       if (t == null)
       {
-        int msgID = MSGID_REGEXMAP_UNKNOWN_ATTR;
-        unacceptableReasons.add(getMessage(msgID, configuration.dn(), name));
+        Message message = ERR_REGEXMAP_UNKNOWN_ATTR.get(
+                String.valueOf(configuration.dn()), name);
+        unacceptableReasons.add(message);
         configAcceptable = false;
       }
     }
@@ -382,9 +380,9 @@
   public ConfigChangeResult applyConfigurationChange(
               RegularExpressionIdentityMapperCfg configuration)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     Pattern newMatchPattern = null;
@@ -394,8 +392,8 @@
     }
     catch (PatternSyntaxException pse)
     {
-      int    msgID   = MSGID_REGEXMAP_INVALID_MATCH_PATTERN;
-      String message = getMessage(msgID, configuration.getMatchPattern(),
+      Message message = ERR_REGEXMAP_INVALID_MATCH_PATTERN.get(
+                      configuration.getMatchPattern(),
                                   pse.getMessage());
       messages.add(message);
       resultCode = ResultCode.CONSTRAINT_VIOLATION;
@@ -423,8 +421,9 @@
           resultCode = ResultCode.NO_SUCH_ATTRIBUTE;
         }
 
-        int msgID = MSGID_REGEXMAP_UNKNOWN_ATTR;
-        messages.add(getMessage(msgID, String.valueOf(configEntryDN), name));
+        Message message = ERR_REGEXMAP_UNKNOWN_ATTR.get(
+                        String.valueOf(configEntryDN), name);
+        messages.add(message);
       }
 
       newAttributeTypes[i++] = type;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidator.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidator.java
index a1e9919..029ff33 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -42,9 +43,8 @@
 import org.opends.server.types.Operation;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
+import static org.opends.messages.ExtensionMessages.*;
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -106,7 +106,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      StringBuilder invalidReason)
+                                      MessageBuilder invalidReason)
   {
     // Get a handle to the current configuration and see if we need to count
     // the number of repeated characters in the password.
@@ -144,8 +144,9 @@
         consecutiveCount++;
         if (consecutiveCount > maxRepeats)
         {
-          int    msgID   = MSGID_REPEATEDCHARS_VALIDATOR_TOO_MANY_CONSECUTIVE;
-          String message = getMessage(msgID, maxRepeats);
+          Message message =
+                  ERR_REPEATEDCHARS_VALIDATOR_TOO_MANY_CONSECUTIVE.get(
+                          maxRepeats);
           invalidReason.append(message);
           return false;
         }
@@ -167,7 +168,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       RepeatedCharactersPasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> 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.
@@ -184,7 +185,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     // For this password validator, we will always be able to successfully apply
     // the new configuration.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SHA1PasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SHA1PasswordStorageScheme.java
index 3ecd9e2..e977c5d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SHA1PasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SHA1PasswordStorageScheme.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -39,8 +40,8 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.ByteStringFactory;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.Base64;
@@ -50,8 +51,7 @@
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -122,10 +122,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST;
-      String message = getMessage(msgID, MESSAGE_DIGEST_ALGORITHM_SHA_1,
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+          MESSAGE_DIGEST_ALGORITHM_SHA_1, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
     digestLock = new ReentrantLock();
@@ -166,11 +165,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -209,11 +207,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -268,9 +265,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.MILD_ERROR,
-               MSGID_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD,
-               storedPassword.stringValue(), String.valueOf(e));
+      logError(ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+          storedPassword.stringValue(), String.valueOf(e)));
 
       return false;
     }
@@ -299,10 +295,9 @@
   public ByteString encodeAuthPassword(ByteString plaintext)
          throws DirectoryException
   {
-    int    msgID   = MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD;
-    String message = getMessage(msgID, getStorageSchemeName());
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
@@ -338,10 +333,9 @@
   public ByteString getPlaintextValue(ByteString storedPassword)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID, STORAGE_SCHEME_NAME_SHA_1);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SHA_1);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
@@ -354,10 +348,9 @@
                                                   String authValue)
          throws DirectoryException
   {
-    int    msgID   = MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD;
-    String message = getMessage(msgID, getStorageSchemeName());
-    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
+    throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SMTPAlertHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SMTPAlertHandler.java
index 281ffd2..15ec9e6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SMTPAlertHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SMTPAlertHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -41,16 +42,15 @@
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.EMailMessage;
 
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ExtensionMessages.*;
+
+import org.opends.messages.MessageDescriptor;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -98,9 +98,8 @@
     if ((DirectoryServer.getMailServerPropertySets() == null) ||
         DirectoryServer.getMailServerPropertySets().isEmpty())
     {
-      int    msgID   = MSGID_SMTPALERTHANDLER_NO_SMTP_SERVERS;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_SMTPALERTHANDLER_NO_SMTP_SERVERS.get();
+      throw new ConfigException(message);
     }
 
     configuration.addSMTPChangeListener(this);
@@ -123,7 +122,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAcceptable(AlertHandlerCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     return true;
   }
@@ -144,24 +143,32 @@
    * {@inheritDoc}
    */
   public void sendAlertNotification(AlertGenerator generator, String alertType,
-                                    int alertID, String alertMessage)
+                                    Message alertMessage)
   {
     SMTPAlertHandlerCfg cfg = currentConfig;
 
     ArrayList<String> recipients =
          new ArrayList<String>(cfg.getRecipientAddress());
 
-    String alertIDStr = String.valueOf(alertID);
+    String alertIDStr;
+    String alertMessageStr;
+    if (alertMessage != null) {
+      alertIDStr = String.valueOf(alertMessage.getDescriptor().getId());
+      alertMessageStr = alertMessage.toString();
+    } else {
+      alertIDStr = String.valueOf(MessageDescriptor.NULL_ID);
+      alertMessageStr = "none";
+    }
     String subject = replaceTokens(cfg.getMessageSubject(), alertType,
-                                   alertIDStr, alertMessage);
+                                   alertIDStr, alertMessageStr);
 
     String body = replaceTokens(cfg.getMessageBody(), alertType, alertIDStr,
-                                alertMessage);
+                                alertMessageStr);
 
     EMailMessage message = new EMailMessage(cfg.getSenderAddress(), recipients,
                                             subject);
 
-    message.setBody(wrapText(body, 75));
+    message.setBody(Message.raw(wrapText(body, 75)));
 
     try
     {
@@ -174,11 +181,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_SMTPALERTHANDLER_ERROR_SENDING_MESSAGE;
-      String msg = getMessage(msgID, alertType, alertMessage,
-                              stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_WARNING,
-               msg, msgID);
+      Message msg = WARN_SMTPALERTHANDLER_ERROR_SENDING_MESSAGE.get(
+          alertType, alertMessage, stackTraceToSingleLineString(e));
+      ErrorLogger.logError(msg);
     }
   }
 
@@ -220,7 +225,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       SMTPAlertHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java
index 30ce90a..9624db2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -40,19 +41,16 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.ByteStringFactory;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.Base64;
 
 import static org.opends.server.extensions.ExtensionsConstants.*;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -136,10 +134,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST;
-      String message = getMessage(msgID, MESSAGE_DIGEST_ALGORITHM_MD5,
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+          MESSAGE_DIGEST_ALGORITHM_MD5, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -194,11 +191,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -256,11 +252,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -307,11 +302,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD;
-      String message = getMessage(msgID, storedPassword.stringValue(),
-                                  String.valueOf(e));
-      logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.MILD_ERROR,
-               message, msgID);
+      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+          storedPassword.stringValue(), String.valueOf(e));
+      ErrorLogger.logError(message);
       return false;
     }
 
@@ -407,11 +400,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -496,10 +488,9 @@
   public ByteString getPlaintextValue(ByteString storedPassword)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_MD5);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SALTED_MD5);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
@@ -512,10 +503,9 @@
                                                   String authValue)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID, AUTH_PASSWORD_SCHEME_NAME_SALTED_MD5);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_NOT_REVERSIBLE.get(AUTH_PASSWORD_SCHEME_NAME_SALTED_MD5);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java
index b1b891b..d2771f9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -40,19 +41,16 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.ByteStringFactory;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.Base64;
 
 import static org.opends.server.extensions.ExtensionsConstants.*;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -136,10 +134,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST;
-      String message = getMessage(msgID, MESSAGE_DIGEST_ALGORITHM_SHA_1,
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+          MESSAGE_DIGEST_ALGORITHM_SHA_1, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
     digestLock = new ReentrantLock();
@@ -193,11 +190,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -255,11 +251,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -306,11 +301,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD;
-      String message = getMessage(msgID, storedPassword.stringValue(),
-                                  String.valueOf(e));
-      logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.MILD_ERROR,
-               message, msgID);
+      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+          storedPassword.stringValue(), String.valueOf(e));
+      ErrorLogger.logError(message);
       return false;
     }
 
@@ -406,11 +399,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -495,10 +487,9 @@
   public ByteString getPlaintextValue(ByteString storedPassword)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_SHA_1);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SALTED_SHA_1);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
@@ -511,10 +502,9 @@
                                                   String authValue)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID, AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_NOT_REVERSIBLE.get(AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
@@ -563,10 +553,9 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST;
-      String message = getMessage(msgID, MESSAGE_DIGEST_ALGORITHM_SHA_1,
-                                  String.valueOf(e));
-      throw new DirectoryException(ResultCode.OTHER, message, msgID, e);
+      Message 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/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
index 8e027ae..ba26d79 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -40,19 +41,16 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.ByteStringFactory;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.Base64;
 
 import static org.opends.server.extensions.ExtensionsConstants.*;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -138,10 +136,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST;
-      String message = getMessage(msgID, MESSAGE_DIGEST_ALGORITHM_SHA_256,
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+          MESSAGE_DIGEST_ALGORITHM_SHA_256, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -196,11 +193,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -258,11 +254,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -309,11 +304,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD;
-      String message = getMessage(msgID, storedPassword.stringValue(),
-                                  String.valueOf(e));
-      logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.MILD_ERROR,
-               message, msgID);
+      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+          storedPassword.stringValue(), String.valueOf(e));
+      ErrorLogger.logError(message);
       return false;
     }
 
@@ -409,11 +402,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -498,10 +490,9 @@
   public ByteString getPlaintextValue(ByteString storedPassword)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_SHA_256);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SALTED_SHA_256);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
@@ -514,11 +505,9 @@
                                                   String authValue)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID,
-                                AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_256);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message = ERR_PWSCHEME_NOT_REVERSIBLE.get(
+        AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_256);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java
index a551f68..78964a1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -40,19 +41,16 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.ByteStringFactory;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.Base64;
 
 import static org.opends.server.extensions.ExtensionsConstants.*;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -138,10 +136,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST;
-      String message = getMessage(msgID, MESSAGE_DIGEST_ALGORITHM_SHA_384,
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+          MESSAGE_DIGEST_ALGORITHM_SHA_384, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
 
@@ -196,11 +193,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -258,11 +254,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -309,11 +304,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD;
-      String message = getMessage(msgID, storedPassword.stringValue(),
-                                  String.valueOf(e));
-      logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.MILD_ERROR,
-               message, msgID);
+      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+          storedPassword.stringValue(), String.valueOf(e));
+      ErrorLogger.logError(message);
       return false;
     }
 
@@ -409,11 +402,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -498,10 +490,9 @@
   public ByteString getPlaintextValue(ByteString storedPassword)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_SHA_384);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SALTED_SHA_384);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
@@ -514,11 +505,9 @@
                                                   String authValue)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID,
-                                AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_384);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message = ERR_PWSCHEME_NOT_REVERSIBLE.get(
+        AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_384);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java
index f1029c4..5660daa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -40,19 +41,16 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.ByteStringFactory;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.Base64;
 
 import static org.opends.server.extensions.ExtensionsConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.loggers.ErrorLogger;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -138,10 +136,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST;
-      String message = getMessage(msgID, MESSAGE_DIGEST_ALGORITHM_SHA_512,
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+          MESSAGE_DIGEST_ALGORITHM_SHA_512, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
     digestLock = new ReentrantLock();
@@ -195,11 +192,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -257,11 +253,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -308,11 +303,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD;
-      String message = getMessage(msgID, storedPassword.stringValue(),
-                                  String.valueOf(e));
-      logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.MILD_ERROR,
-               message, msgID);
+      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+          storedPassword.stringValue(), String.valueOf(e));
+      ErrorLogger.logError(message);
       return false;
     }
 
@@ -408,11 +401,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD;
-      String message = getMessage(msgID, CLASS_NAME, getExceptionMessage(e));
-
+      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+          CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -497,10 +489,9 @@
   public ByteString getPlaintextValue(ByteString storedPassword)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_SHA_512);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message =
+        ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SALTED_SHA_512);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
@@ -513,11 +504,9 @@
                                                   String authValue)
          throws DirectoryException
   {
-    int msgID = MSGID_PWSCHEME_NOT_REVERSIBLE;
-    String message = getMessage(msgID,
-                                AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_512);
-    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                 msgID);
+    Message message = ERR_PWSCHEME_NOT_REVERSIBLE.get(
+        AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_512);
+    throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
 
@@ -567,10 +556,9 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST;
-      String message = getMessage(msgID, MESSAGE_DIGEST_ALGORITHM_SHA_512,
-                                  String.valueOf(e));
-      throw new DirectoryException(ResultCode.OTHER, message, msgID, e);
+      Message 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/opendj-sdk/opends/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidator.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidator.java
index 079034c..850dd98 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 import java.util.List;
 import java.util.Set;
@@ -42,8 +43,8 @@
 import org.opends.server.admin.std.server.SimilarityBasedPasswordValidatorCfg;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -102,7 +103,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      StringBuilder invalidReason)  {
+                                      MessageBuilder invalidReason)  {
 
     int minDifference = currentConfig.getMinimumPasswordDifference();
     ByteString passwd = newPassword == null
@@ -126,8 +127,8 @@
         int ldistance = LevenshteinDistance.calculate(passwd.stringValue(),
                                                       bs.stringValue());
         if (ldistance < minDifference) {
-          invalidReason.append(getMessage(MSGID_PWDIFFERENCEVALIDATOR_TOO_SMALL,
-                                          minDifference));
+          invalidReason.append(ERR_PWDIFFERENCEVALIDATOR_TOO_SMALL.get(
+                  minDifference));
           return false;
         }
     }
@@ -140,7 +141,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       SimilarityBasedPasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java
index e0ab8d7..f28284c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.Validator.*;
 
 
@@ -140,10 +140,9 @@
         Entry memberEntry = DirectoryConfig.getEntry(memberDN);
         if (memberEntry == null)
         {
-          int    msgID   = MSGID_STATICMEMBERS_NO_SUCH_ENTRY;
-          String message = getMessage(msgID, String.valueOf(memberDN),
-                                      String.valueOf(groupDN));
-          throw new MembershipException(msgID, message, true);
+          Message message = ERR_STATICMEMBERS_NO_SUCH_ENTRY.get(
+              String.valueOf(memberDN), String.valueOf(groupDN));
+          throw new MembershipException(message, true);
         }
 
         return memberEntry;
@@ -155,11 +154,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        int    msgID   = MSGID_STATICMEMBERS_CANNOT_GET_ENTRY;
-        String message = getMessage(msgID, String.valueOf(memberDN),
-                                    String.valueOf(groupDN),
-                                    String.valueOf(de.getErrorMessage()));
-        throw new MembershipException(msgID, message, true, de);
+        Message 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/opendj-sdk/opends/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java
index 1ec80a3..cd0915a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -54,10 +55,9 @@
 import org.opends.server.types.SearchFilter;
 
 
-import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -443,7 +443,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(EntryCacheCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     SoftReferenceEntryCacheCfg config =
          (SoftReferenceEntryCacheCfg) configuration;
@@ -457,7 +457,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       SoftReferenceEntryCacheCfg configuration,
-      List<String>               unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     // Make sure that we can process the defined character sets.  If so, then
     // we'll accept the new configuration.
@@ -485,7 +485,7 @@
     // Make sure that we can process the defined character sets.  If so, then
     // activate the new configuration.
     boolean applyChanges = false;
-    ArrayList<String> errorMessages = new ArrayList<String>();
+    ArrayList<Message> errorMessages = new ArrayList<Message>();
     EntryCacheCommon.ConfigErrorHandler errorHandler =
       EntryCacheCommon.getConfigErrorHandler (
           EntryCacheCommon.ConfigPhase.PHASE_APPLY, null, errorMessages
@@ -535,15 +535,15 @@
     case PHASE_INIT:
       newIncludeFilters = EntryCacheCommon.getFilters (
           configuration.getIncludeFilter(),
-          MSGID_SOFTREFCACHE_INVALID_INCLUDE_FILTER,
-          MSGID_SOFTREFCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS,
+          ERR_SOFTREFCACHE_INVALID_INCLUDE_FILTER,
+          WARN_SOFTREFCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS,
           errorHandler,
           newConfigEntryDN
           );
       newExcludeFilters = EntryCacheCommon.getFilters (
           configuration.getExcludeFilter(),
-          MSGID_SOFTREFCACHE_CANNOT_DECODE_EXCLUDE_FILTER,
-          MSGID_SOFTREFCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS,
+          WARN_SOFTREFCACHE_CANNOT_DECODE_EXCLUDE_FILTER,
+          WARN_SOFTREFCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS,
           errorHandler,
           newConfigEntryDN
           );
@@ -552,15 +552,15 @@
     case PHASE_APPLY:       // error ID codes
       newIncludeFilters = EntryCacheCommon.getFilters (
           configuration.getIncludeFilter(),
-          MSGID_SOFTREFCACHE_INVALID_INCLUDE_FILTER,
-          0,
+          ERR_SOFTREFCACHE_INVALID_INCLUDE_FILTER,
+          null,
           errorHandler,
           newConfigEntryDN
           );
       newExcludeFilters = EntryCacheCommon.getFilters (
           configuration.getExcludeFilter(),
-          MSGID_SOFTREFCACHE_INVALID_EXCLUDE_FILTER,
-          0,
+          ERR_SOFTREFCACHE_INVALID_EXCLUDE_FILTER,
+          null,
           errorHandler,
           newConfigEntryDN
           );
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/StartTLSExtendedOperation.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/StartTLSExtendedOperation.java
index 8faad76..00d068b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/StartTLSExtendedOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/StartTLSExtendedOperation.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
-
+import org.opends.messages.MessageBuilder;
 
 
 import org.opends.server.api.ClientConnection;
@@ -35,8 +35,8 @@
 import org.opends.server.core.ExtendedOperation;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DisconnectReason;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
@@ -44,8 +44,7 @@
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.admin.std.server.ExtendedOperationHandlerCfg;
@@ -140,8 +139,8 @@
     {
       operation.setResultCode(ResultCode.UNAVAILABLE);
 
-      int msgID = MSGID_STARTTLS_NO_CLIENT_CONNECTION;
-      operation.appendErrorMessage(getMessage(msgID));
+
+      operation.appendErrorMessage(ERR_STARTTLS_NO_CLIENT_CONNECTION.get());
       return;
     }
 
@@ -157,12 +156,12 @@
     {
       operation.setResultCode(ResultCode.UNAVAILABLE);
 
-      int msgID = MSGID_STARTTLS_NOT_TLS_CAPABLE;
-      operation.appendErrorMessage(getMessage(msgID));
+
+      operation.appendErrorMessage(ERR_STARTTLS_NOT_TLS_CAPABLE.get());
       return;
     }
 
-    StringBuilder unavailableReason = new StringBuilder();
+    MessageBuilder unavailableReason = new MessageBuilder();
     if (! tlsCapableConnection.tlsProtectionAvailable(unavailableReason))
     {
       operation.setResultCode(ResultCode.UNAVAILABLE);
@@ -185,8 +184,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.MILD_ERROR,
-               MSGID_STARTTLS_ERROR_ON_ENABLE, getExceptionMessage(de));
+      logError(ERR_STARTTLS_ERROR_ON_ENABLE.get(getExceptionMessage(de)));
     }
 
 
@@ -206,13 +204,12 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.MILD_ERROR,
-               MSGID_STARTTLS_ERROR_SENDING_CLEAR_RESPONSE,
-               getExceptionMessage(e));
+      logError(ERR_STARTTLS_ERROR_SENDING_CLEAR_RESPONSE.get(
+          getExceptionMessage(e)));
 
       clientConnection.disconnect(DisconnectReason.SECURITY_PROBLEM, false,
-                                  MSGID_STARTTLS_ERROR_SENDING_CLEAR_RESPONSE,
-                                  getExceptionMessage(e));
+                                  ERR_STARTTLS_ERROR_SENDING_CLEAR_RESPONSE.get(
+                                  getExceptionMessage(e)));
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/StaticGroup.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/StaticGroup.java
index 9a119ec..07b3c70 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/StaticGroup.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/StaticGroup.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -36,13 +37,28 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.config.ConfigException;
 import org.opends.server.protocols.internal.InternalClientConnection;
+import org.opends.server.types.Attribute;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.AttributeValue;
+import org.opends.server.types.Control;
+import org.opends.server.types.DirectoryConfig;
+import org.opends.server.types.DirectoryException;
+import org.opends.server.types.DN;
+import org.opends.server.types.Entry;
+import org.opends.server.types.InitializationException;
+import org.opends.server.types.MemberList;
+import org.opends.server.types.Modification;
+import org.opends.server.types.ModificationType;
+import org.opends.server.types.ObjectClass;
+import org.opends.server.types.ResultCode;
+import org.opends.server.types.SearchFilter;
+import org.opends.server.types.SearchScope;
 
 import org.opends.server.types.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.Validator.*;
 
@@ -155,12 +171,10 @@
     {
       if (groupEntry.hasObjectClass(groupOfUniqueNamesClass))
       {
-        int    msgID   = MSGID_STATICGROUP_INVALID_OC_COMBINATION;
-        String message = getMessage(msgID, String.valueOf(groupEntry.getDN()),
-                                    OC_GROUP_OF_NAMES,
-                                    OC_GROUP_OF_UNIQUE_NAMES);
-        throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_STATICGROUP_INVALID_OC_COMBINATION.
+            get(String.valueOf(groupEntry.getDN()), OC_GROUP_OF_NAMES,
+                OC_GROUP_OF_UNIQUE_NAMES);
+        throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
       }
 
       memberAttributeType = DirectoryConfig.getAttributeType(ATTR_MEMBER, true);
@@ -172,11 +186,10 @@
     }
     else
     {
-      int    msgID   = MSGID_STATICGROUP_NO_VALID_OC;
-      String message = getMessage(msgID, String.valueOf(groupEntry.getDN()),
-                                  OC_GROUP_OF_NAMES, OC_GROUP_OF_UNIQUE_NAMES);
-      throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_STATICGROUP_NO_VALID_OC.
+          get(String.valueOf(groupEntry.getDN()), OC_GROUP_OF_NAMES,
+              OC_GROUP_OF_UNIQUE_NAMES);
+      throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
     }
 
 
@@ -201,14 +214,10 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_STATICGROUP_CANNOT_DECODE_MEMBER_VALUE_AS_DN;
-            String message =
-                 getMessage(msgID, v.getStringValue(),
-                            memberAttributeType.getNameOrOID(),
-                            String.valueOf(groupEntry.getDN()),
-                            de.getErrorMessage());
-            logError(ErrorLogCategory.EXTENSIONS, ErrorLogSeverity.MILD_ERROR,
-                     message, msgID);
+            Message message = ERR_STATICGROUP_CANNOT_DECODE_MEMBER_VALUE_AS_DN.
+                get(v.getStringValue(), memberAttributeType.getNameOrOID(),
+                    String.valueOf(groupEntry.getDN()), de.getMessageObject());
+            ErrorLogger.logError(message);
           }
         }
       }
@@ -330,11 +339,11 @@
     {
       if (nestedGroups.contains(nestedGroupDN))
       {
-        int    msgID   = MSGID_STATICGROUP_ADD_NESTED_GROUP_ALREADY_EXISTS;
-        String message = getMessage(msgID,String.valueOf(nestedGroupDN),
-                                    String.valueOf(groupEntryDN));
-        throw new DirectoryException(ResultCode.ATTRIBUTE_OR_VALUE_EXISTS,
-                                     message, msgID);
+        Message msg = ERR_STATICGROUP_ADD_NESTED_GROUP_ALREADY_EXISTS.get(
+                String.valueOf(nestedGroupDN),
+                String.valueOf(groupEntryDN));
+        throw new DirectoryException(
+                ResultCode.ATTRIBUTE_OR_VALUE_EXISTS, msg);
       }
 
       LinkedHashSet<AttributeValue> values =
@@ -363,12 +372,12 @@
       modifyOperation.run();
       if (modifyOperation.getResultCode() != ResultCode.SUCCESS)
       {
-        int    msgID   = MSGID_STATICGROUP_ADD_MEMBER_UPDATE_FAILED;
-        String message = getMessage(msgID, String.valueOf(nestedGroupDN),
-                              String.valueOf(groupEntryDN),
-                              modifyOperation.getErrorMessage().toString());
-        throw new DirectoryException(modifyOperation.getResultCode(), message,
-                                     msgID);
+        Message msg = ERR_STATICGROUP_ADD_MEMBER_UPDATE_FAILED.get(
+                String.valueOf(nestedGroupDN),
+                String.valueOf(groupEntryDN),
+                modifyOperation.getErrorMessage().toString());
+        throw new DirectoryException(modifyOperation.getResultCode(),
+                                     msg);
       }
 
 
@@ -397,11 +406,11 @@
     {
       if (! nestedGroups.contains(nestedGroupDN))
       {
-        int    msgID   = MSGID_STATICGROUP_REMOVE_NESTED_GROUP_NO_SUCH_GROUP;
-        String message = getMessage(msgID, String.valueOf(nestedGroupDN),
-                                    String.valueOf(groupEntryDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE, message,
-                                     msgID);
+        throw new DirectoryException(
+                ResultCode.NO_SUCH_ATTRIBUTE,
+                ERR_STATICGROUP_REMOVE_NESTED_GROUP_NO_SUCH_GROUP.get(
+                  String.valueOf(nestedGroupDN),
+                  String.valueOf(groupEntryDN)));
       }
 
       LinkedHashSet<AttributeValue> values =
@@ -430,12 +439,12 @@
       modifyOperation.run();
       if (modifyOperation.getResultCode() != ResultCode.SUCCESS)
       {
-        int    msgID   = MSGID_STATICGROUP_REMOVE_MEMBER_UPDATE_FAILED;
-        String message = getMessage(msgID,String.valueOf(nestedGroupDN),
-                              String.valueOf(groupEntryDN),
-                              modifyOperation.getErrorMessage().toString());
-        throw new DirectoryException(modifyOperation.getResultCode(), message,
-                                     msgID);
+        throw new DirectoryException(
+                modifyOperation.getResultCode(),
+                ERR_STATICGROUP_REMOVE_MEMBER_UPDATE_FAILED.get(
+                        String.valueOf(nestedGroupDN),
+                        String.valueOf(groupEntryDN),
+                        modifyOperation.getErrorMessage()));
       }
 
 
@@ -515,10 +524,10 @@
                DirectoryServer.getGroupManager().getGroupInstance(groupEntryDN);
         //Check if the group itself has been removed
         if(thisGroup == null) {
-          int    msgID   = MSGID_STATICGROUP_GROUP_INSTANCE_INVALID;
-          String message = getMessage(msgID, String.valueOf(groupEntryDN));
-          throw new
-               DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE, message, msgID);
+          throw new DirectoryException(
+                  ResultCode.NO_SUCH_ATTRIBUTE,
+                  ERR_STATICGROUP_GROUP_INSTANCE_INVALID.get(
+                    String.valueOf(groupEntryDN)));
         } else if(thisGroup != this) {
           LinkedHashSet<DN> newMemberDNs = new LinkedHashSet<DN>();
           MemberList memberList=thisGroup.getMembers();
@@ -606,11 +615,10 @@
       DN userDN = userEntry.getDN();
       if (memberDNs.contains(userDN))
       {
-        int    msgID   = MSGID_STATICGROUP_ADD_MEMBER_ALREADY_EXISTS;
-        String message = getMessage(msgID, String.valueOf(userDN),
-                                    String.valueOf(groupEntryDN));
+        Message message = ERR_STATICGROUP_ADD_MEMBER_ALREADY_EXISTS.get(
+            String.valueOf(userDN), String.valueOf(groupEntryDN));
         throw new DirectoryException(ResultCode.ATTRIBUTE_OR_VALUE_EXISTS,
-                                     message, msgID);
+                                     message);
       }
 
       LinkedHashSet<AttributeValue> values =
@@ -637,12 +645,10 @@
       modifyOperation.run();
       if (modifyOperation.getResultCode() != ResultCode.SUCCESS)
       {
-        int    msgID   = MSGID_STATICGROUP_ADD_MEMBER_UPDATE_FAILED;
-        String message = getMessage(msgID, String.valueOf(userDN),
-                              String.valueOf(groupEntryDN),
-                              modifyOperation.getErrorMessage().toString());
-        throw new DirectoryException(modifyOperation.getResultCode(), message,
-                                     msgID);
+        Message message = ERR_STATICGROUP_ADD_MEMBER_UPDATE_FAILED.
+            get(String.valueOf(userDN), String.valueOf(groupEntryDN),
+                modifyOperation.getErrorMessage().toString());
+        throw new DirectoryException(modifyOperation.getResultCode(), message);
       }
 
 
@@ -669,11 +675,9 @@
     {
       if (! memberDNs.contains(userDN))
       {
-        int    msgID   = MSGID_STATICGROUP_REMOVE_MEMBER_NO_SUCH_MEMBER;
-        String message = getMessage(msgID, String.valueOf(userDN),
-                                    String.valueOf(groupEntryDN));
-        throw new DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE, message,
-                                     msgID);
+        Message message = ERR_STATICGROUP_REMOVE_MEMBER_NO_SUCH_MEMBER.get(
+            String.valueOf(userDN), String.valueOf(groupEntryDN));
+        throw new DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE, message);
       }
 
 
@@ -701,12 +705,10 @@
       modifyOperation.run();
       if (modifyOperation.getResultCode() != ResultCode.SUCCESS)
       {
-        int    msgID   = MSGID_STATICGROUP_REMOVE_MEMBER_UPDATE_FAILED;
-        String message = getMessage(msgID, String.valueOf(userDN),
-                              String.valueOf(groupEntryDN),
-                              modifyOperation.getErrorMessage().toString());
-        throw new DirectoryException(modifyOperation.getResultCode(), message,
-                                     msgID);
+        Message 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/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java
index 8b49293..3cfb57b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -61,8 +62,8 @@
 import org.opends.server.types.SearchScope;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -131,49 +132,43 @@
       int colonPos = lowerMap.indexOf(':');
       if (colonPos <= 0)
       {
-        int    msgID   = MSGID_SATUACM_INVALID_MAP_FORMAT;
-        String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                    mapStr);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_SATUACM_INVALID_MAP_FORMAT.get(
+            String.valueOf(configEntryDN), mapStr);
+        throw new ConfigException(message);
       }
 
       String certAttrName = lowerMap.substring(0, colonPos).trim();
       String userAttrName = lowerMap.substring(colonPos+1).trim();
       if ((certAttrName.length() == 0) || (userAttrName.length() == 0))
       {
-        int    msgID   = MSGID_SATUACM_INVALID_MAP_FORMAT;
-        String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                    mapStr);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_SATUACM_INVALID_MAP_FORMAT.get(
+            String.valueOf(configEntryDN), mapStr);
+        throw new ConfigException(message);
       }
 
       if (attributeMap.containsKey(certAttrName))
       {
-        int    msgID   = MSGID_SATUACM_DUPLICATE_CERT_ATTR;
-        String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                    certAttrName);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_SATUACM_DUPLICATE_CERT_ATTR.get(
+            String.valueOf(configEntryDN), certAttrName);
+        throw new ConfigException(message);
       }
 
       AttributeType userAttrType =
            DirectoryServer.getAttributeType(userAttrName, false);
       if (userAttrType == null)
       {
-        int    msgID   = MSGID_SATUACM_NO_SUCH_ATTR;
-        String message = getMessage(msgID, mapStr,
-                                    String.valueOf(configEntryDN),
-                                    userAttrName);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_SATUACM_NO_SUCH_ATTR.get(
+            mapStr, String.valueOf(configEntryDN), userAttrName);
+        throw new ConfigException(message);
       }
 
       for (AttributeType attrType : attributeMap.values())
       {
         if (attrType.equals(userAttrType))
         {
-          int    msgID   = MSGID_SATUACM_DUPLICATE_USER_ATTR;
-          String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                      attrType.getNameOrOID());
-          throw new ConfigException(msgID, message);
+          Message message = ERR_SATUACM_DUPLICATE_USER_ATTR.get(
+              String.valueOf(configEntryDN), attrType.getNameOrOID());
+          throw new ConfigException(message);
         }
       }
 
@@ -208,10 +203,8 @@
     // Make sure that a peer certificate was provided.
     if ((certificateChain == null) || (certificateChain.length == 0))
     {
-      int    msgID   = MSGID_SATUACM_NO_PEER_CERTIFICATE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_SATUACM_NO_PEER_CERTIFICATE.get();
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -228,11 +221,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SATUACM_PEER_CERT_NOT_X509;
-      String message =
-           getMessage(msgID, String.valueOf(certificateChain[0].getType()));
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_SATUACM_PEER_CERT_NOT_X509.get(
+          String.valueOf(certificateChain[0].getType()));
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -247,10 +238,10 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_SATUACM_CANNOT_DECODE_SUBJECT_AS_DN;
-      String message = getMessage(msgID, peerName, de.getErrorMessage());
+      Message message = ERR_SATUACM_CANNOT_DECODE_SUBJECT_AS_DN.get(
+          peerName, de.getMessageObject());
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID, de);
+                                   de);
     }
 
     LinkedList<SearchFilter> filterComps = new LinkedList<SearchFilter>();
@@ -271,10 +262,8 @@
 
     if (filterComps.isEmpty())
     {
-      int    msgID   = MSGID_SATUACM_NO_MAPPABLE_ATTRIBUTES;
-      String message = getMessage(msgID, peerName);
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_SATUACM_NO_MAPPABLE_ATTRIBUTES.get(peerName);
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
     SearchFilter filter = SearchFilter.createANDFilter(filterComps);
@@ -306,12 +295,10 @@
         }
         else
         {
-          int    msgID   = MSGID_SATUACM_MULTIPLE_MATCHING_ENTRIES;
-          String message = getMessage(msgID, peerName,
-                                      String.valueOf(userEntry.getDN()),
-                                      String.valueOf(entry.getDN()));
-          throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                       msgID);
+          Message message = ERR_SATUACM_MULTIPLE_MATCHING_ENTRIES.
+              get(peerName, String.valueOf(userEntry.getDN()),
+                  String.valueOf(entry.getDN()));
+          throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
         }
       }
     }
@@ -329,7 +316,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(CertificateMapperCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     SubjectAttributeToUserAttributeCertificateMapperCfg config =
          (SubjectAttributeToUserAttributeCertificateMapperCfg) configuration;
@@ -344,7 +331,7 @@
   public boolean isConfigurationChangeAcceptable(
               SubjectAttributeToUserAttributeCertificateMapperCfg
                    configuration,
-              List<String> unacceptableReasons)
+              List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -359,9 +346,9 @@
       int colonPos = lowerMap.indexOf(':');
       if (colonPos <= 0)
       {
-        int msgID = MSGID_SATUACM_INVALID_MAP_FORMAT;
-        unacceptableReasons.add(getMessage(msgID, String.valueOf(cfgEntryDN),
-                                           mapStr));
+        unacceptableReasons.add(ERR_SATUACM_INVALID_MAP_FORMAT.get(
+                String.valueOf(cfgEntryDN),
+                mapStr));
         configAcceptable = false;
         break;
       }
@@ -370,18 +357,18 @@
       String userAttrName = lowerMap.substring(colonPos+1).trim();
       if ((certAttrName.length() == 0) || (userAttrName.length() == 0))
       {
-        int msgID = MSGID_SATUACM_INVALID_MAP_FORMAT;
-        unacceptableReasons.add(getMessage(msgID, String.valueOf(cfgEntryDN),
-                                           mapStr));
+        unacceptableReasons.add(ERR_SATUACM_INVALID_MAP_FORMAT.get(
+                String.valueOf(cfgEntryDN),
+                mapStr));
         configAcceptable = false;
         break;
       }
 
       if (newAttributeMap.containsKey(certAttrName))
       {
-        int msgID = MSGID_SATUACM_DUPLICATE_CERT_ATTR;
-        unacceptableReasons.add(getMessage(msgID, String.valueOf(cfgEntryDN),
-                                           certAttrName));
+        unacceptableReasons.add(ERR_SATUACM_DUPLICATE_CERT_ATTR.get(
+                String.valueOf(cfgEntryDN),
+                certAttrName));
         configAcceptable = false;
         break;
       }
@@ -390,10 +377,10 @@
            DirectoryServer.getAttributeType(userAttrName, false);
       if (userAttrType == null)
       {
-        int msgID = MSGID_SATUACM_NO_SUCH_ATTR;
-        unacceptableReasons.add(getMessage(msgID, mapStr,
-                                           String.valueOf(cfgEntryDN),
-                                           userAttrName));
+        unacceptableReasons.add(ERR_SATUACM_NO_SUCH_ATTR.get(
+                mapStr,
+                String.valueOf(cfgEntryDN),
+                userAttrName));
         configAcceptable = false;
         break;
       }
@@ -402,10 +389,9 @@
       {
         if (attrType.equals(userAttrType))
         {
-          int msgID = MSGID_SATUACM_DUPLICATE_USER_ATTR;
-          unacceptableReasons.add(getMessage(msgID,
-                                             String.valueOf(cfgEntryDN),
-                                             attrType.getNameOrOID()));
+          unacceptableReasons.add(ERR_SATUACM_DUPLICATE_USER_ATTR.get(
+                  String.valueOf(cfgEntryDN),
+                  attrType.getNameOrOID()));
           configAcceptable = false;
           break mapLoop;
         }
@@ -429,7 +415,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get and validate the subject attribute to user attribute mappings.
@@ -447,8 +433,9 @@
           resultCode = ResultCode.CONSTRAINT_VIOLATION;
         }
 
-        int msgID = MSGID_SATUACM_INVALID_MAP_FORMAT;
-        messages.add(getMessage(msgID, String.valueOf(configEntryDN), mapStr));
+
+        messages.add(ERR_SATUACM_INVALID_MAP_FORMAT.get(
+                String.valueOf(configEntryDN), mapStr));
         break;
       }
 
@@ -461,8 +448,9 @@
           resultCode = ResultCode.CONSTRAINT_VIOLATION;
         }
 
-        int msgID = MSGID_SATUACM_INVALID_MAP_FORMAT;
-        messages.add(getMessage(msgID, String.valueOf(configEntryDN), mapStr));
+
+        messages.add(ERR_SATUACM_INVALID_MAP_FORMAT.get(
+                String.valueOf(configEntryDN), mapStr));
         break;
       }
 
@@ -473,9 +461,10 @@
           resultCode = ResultCode.CONSTRAINT_VIOLATION;
         }
 
-        int msgID = MSGID_SATUACM_DUPLICATE_CERT_ATTR;
-        messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                                certAttrName));
+
+        messages.add(ERR_SATUACM_DUPLICATE_CERT_ATTR.get(
+                String.valueOf(configEntryDN),
+                certAttrName));
         break;
       }
 
@@ -488,9 +477,10 @@
           resultCode = ResultCode.CONSTRAINT_VIOLATION;
         }
 
-        int msgID = MSGID_SATUACM_NO_SUCH_ATTR;
-        messages.add(getMessage(msgID, mapStr, String.valueOf(configEntryDN),
-                                userAttrName));
+
+        messages.add(ERR_SATUACM_NO_SUCH_ATTR.get(
+                mapStr, String.valueOf(configEntryDN),
+                userAttrName));
         break;
       }
 
@@ -503,9 +493,10 @@
             resultCode = ResultCode.CONSTRAINT_VIOLATION;
           }
 
-          int msgID = MSGID_SATUACM_DUPLICATE_USER_ATTR;
-          messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                                  attrType.getNameOrOID()));
+
+          messages.add(ERR_SATUACM_DUPLICATE_USER_ATTR.get(
+                  String.valueOf(configEntryDN),
+                  attrType.getNameOrOID()));
           break mapLoop;
         }
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapper.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapper.java
index 9c317ff..2cb3990 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapper.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -59,8 +60,8 @@
 import org.opends.server.types.SearchScope;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -125,10 +126,9 @@
          DirectoryServer.getAttributeType(toLowerCase(attrName), false);
     if (subjectAttributeType == null)
     {
-      int    msgID   = MSGID_SDTUACM_NO_SUCH_ATTR;
-      String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                  attrName);
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_SDTUACM_NO_SUCH_ATTR.get(String.valueOf(configEntryDN), attrName);
+      throw new ConfigException(message);
     }
   }
 
@@ -158,10 +158,8 @@
     // Make sure that a peer certificate was provided.
     if ((certificateChain == null) || (certificateChain.length == 0))
     {
-      int    msgID   = MSGID_SDTUACM_NO_PEER_CERTIFICATE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_SDTUACM_NO_PEER_CERTIFICATE.get();
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -178,11 +176,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SDTUACM_PEER_CERT_NOT_X509;
-      String message =
-           getMessage(msgID, String.valueOf(certificateChain[0].getType()));
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_SDTUACM_PEER_CERT_NOT_X509.get(
+          String.valueOf(certificateChain[0].getType()));
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -221,12 +217,10 @@
         }
         else
         {
-          int    msgID   = MSGID_SDTUACM_MULTIPLE_MATCHING_ENTRIES;
-          String message = getMessage(msgID, peerName,
-                                      String.valueOf(userEntry.getDN()),
-                                      String.valueOf(entry.getDN()));
-          throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                       msgID);
+          Message message = ERR_SDTUACM_MULTIPLE_MATCHING_ENTRIES.
+              get(peerName, String.valueOf(userEntry.getDN()),
+                  String.valueOf(entry.getDN()));
+          throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
         }
       }
     }
@@ -244,7 +238,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(CertificateMapperCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     SubjectDNToUserAttributeCertificateMapperCfg config =
          (SubjectDNToUserAttributeCertificateMapperCfg) configuration;
@@ -259,7 +253,7 @@
   public boolean isConfigurationChangeAcceptable(
                       SubjectDNToUserAttributeCertificateMapperCfg
                            configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -271,9 +265,9 @@
                                        false);
     if (newSubjectType == null)
     {
-      unacceptableReasons.add(getMessage(MSGID_SDTUACM_NO_SUCH_ATTR,
-                                         String.valueOf(cfgEntryDN),
-                                         attrName));
+      unacceptableReasons.add(ERR_SDTUACM_NO_SUCH_ATTR.get(
+              String.valueOf(cfgEntryDN),
+              attrName));
       configAcceptable = false;
     }
 
@@ -290,9 +284,9 @@
               SubjectDNToUserAttributeCertificateMapperCfg
                    configuration)
   {
-    ResultCode        resultCode          = ResultCode.SUCCESS;
-    boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ResultCode         resultCode          = ResultCode.SUCCESS;
+    boolean            adminActionRequired = false;
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Make sure that the fingerprint attribute is defined in the server schema.
@@ -307,8 +301,8 @@
         resultCode = ResultCode.NO_SUCH_ATTRIBUTE;
       }
 
-      messages.add(getMessage(MSGID_SDTUACM_NO_SUCH_ATTR,
-                              String.valueOf(configEntryDN), attrName));
+      messages.add(ERR_SDTUACM_NO_SUCH_ATTR.get(
+              String.valueOf(configEntryDN), attrName));
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java
index 42ec32f..f381d3e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -47,8 +48,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -117,10 +117,8 @@
     // Make sure that a peer certificate was provided.
     if ((certificateChain == null) || (certificateChain.length == 0))
     {
-      int    msgID   = MSGID_SEDCM_NO_PEER_CERTIFICATE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_SEDCM_NO_PEER_CERTIFICATE.get();
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -137,11 +135,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SEDCM_PEER_CERT_NOT_X509;
-      String message =
-           getMessage(msgID, String.valueOf(certificateChain[0].getType()));
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_SEDCM_PEER_CERT_NOT_X509.get(
+          String.valueOf(certificateChain[0].getType()));
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -159,11 +155,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SEDCM_CANNOT_DECODE_SUBJECT_AS_DN;
-      String message = getMessage(msgID, String.valueOf(peerPrincipal),
-                                  getExceptionMessage(e));
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_SEDCM_CANNOT_DECODE_SUBJECT_AS_DN.get(
+          String.valueOf(peerPrincipal), getExceptionMessage(e));
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -181,10 +175,9 @@
 
     if (readLock == null)
     {
-      int    msgID   = MSGID_SEDCM_CANNOT_LOCK_ENTRY;
-      String message = getMessage(msgID, String.valueOf(subjectDN));
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message =
+          ERR_SEDCM_CANNOT_LOCK_ENTRY.get(String.valueOf(subjectDN));
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
 
@@ -201,11 +194,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      int    msgID   = MSGID_SEDCM_CANNOT_GET_ENTRY;
-      String message = getMessage(msgID, String.valueOf(subjectDN),
-                                  de.getErrorMessage());
+      Message message = ERR_SEDCM_CANNOT_GET_ENTRY.get(
+          String.valueOf(subjectDN), de.getMessageObject());
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID, de);
+                                   de);
     }
     catch (Exception e)
     {
@@ -214,11 +206,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SEDCM_CANNOT_GET_ENTRY;
-      String message = getMessage(msgID, String.valueOf(subjectDN),
-                                  getExceptionMessage(e));
+      Message message = ERR_SEDCM_CANNOT_GET_ENTRY.get(
+          String.valueOf(subjectDN), getExceptionMessage(e));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID, e);
+                                   e);
     }
     finally
     {
@@ -228,10 +219,8 @@
 
     if (userEntry == null)
     {
-      int    msgID   = MSGID_SEDCM_NO_USER_FOR_DN;
-      String message = getMessage(msgID, String.valueOf(subjectDN));
-      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
-                                   msgID);
+      Message message = ERR_SEDCM_NO_USER_FOR_DN.get(String.valueOf(subjectDN));
+      throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
     else
     {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProvider.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProvider.java
index a4492ae..6aaaafd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -46,8 +47,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -209,8 +209,8 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    int    msgID   = MSGID_SUBSCHEMASUBENTRY_VATTR_NOT_SEARCHABLE;
-    String message = getMessage(msgID, rule.getAttributeType().getNameOrOID());
+    Message message = ERR_SUBSCHEMASUBENTRY_VATTR_NOT_SEARCHABLE.get(
+            rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/TLSCapableConnection.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/TLSCapableConnection.java
index ae4efef..d294df1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/TLSCapableConnection.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/TLSCapableConnection.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
-
+import org.opends.messages.MessageBuilder;
 
 
 import org.opends.server.types.DirectoryException;
@@ -55,7 +55,7 @@
    * @return  <CODE>true</CODE> if TLS is available on the underlying client
    *          connection, or <CODE>false</CODE> if it is not.
    */
-  public boolean tlsProtectionAvailable(StringBuilder unavailableReason);
+  public boolean tlsProtectionAvailable(MessageBuilder unavailableReason);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/TLSConnectionSecurityProvider.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/TLSConnectionSecurityProvider.java
index 1786722..0912664 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/TLSConnectionSecurityProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/TLSConnectionSecurityProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -55,8 +56,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -216,10 +216,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_TLS_SECURITY_PROVIDER_CANNOT_INITIALIZE;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message = ERR_TLS_SECURITY_PROVIDER_CANNOT_INITIALIZE.get(
+          getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
 
     sslEngine = sslContext.createSSLEngine(inetAddress.getHostName(),
@@ -524,7 +524,7 @@
         {
           // The client connection has been closed.  Disconnect and return.
           clientConnection.disconnect(DisconnectReason.CLIENT_DISCONNECT, false,
-                                      -1);
+                                      null);
           return false;
         }
 
@@ -554,7 +554,7 @@
                   // The client connection has been closed.  Disconnect and
                   // return.
                   clientConnection.disconnect(
-                       DisconnectReason.CLIENT_DISCONNECT, false, -1);
+                       DisconnectReason.CLIENT_DISCONNECT, false, null);
                   return false;
                 }
               }
@@ -594,14 +594,15 @@
               // FIXME -- Allow for closing the SSL channel without closing the
               //          underlying connection.
               clientConnection.disconnect(DisconnectReason.CLIENT_DISCONNECT,
-                                          false, -1);
+                                          false, null);
               return false;
 
             default:
               // This should not have happened.
               clientConnection.disconnect(DisconnectReason.SECURITY_PROBLEM,
-                   false, MSGID_TLS_SECURITY_PROVIDER_UNEXPECTED_UNWRAP_STATUS,
-                   String.valueOf(unwrapResult.getStatus()));
+                      false,
+                      ERR_TLS_SECURITY_PROVIDER_UNEXPECTED_UNWRAP_STATUS.get(
+                              String.valueOf(unwrapResult.getStatus())));
               return false;
           }
 
@@ -626,7 +627,7 @@
                   // The client connection has been closed.  Disconnect and
                   // return.
                   clientConnection.disconnect(
-                       DisconnectReason.CLIENT_DISCONNECT, false, -1);
+                       DisconnectReason.CLIENT_DISCONNECT, false, null);
                   return false;
                 }
               }
@@ -651,7 +652,7 @@
 
         // An error occurred while trying to communicate with the client.
         // Disconnect and return.
-        clientConnection.disconnect(DisconnectReason.IO_ERROR, false, -1);
+        clientConnection.disconnect(DisconnectReason.IO_ERROR, false, null);
         return false;
       }
       catch (Exception e)
@@ -664,8 +665,8 @@
         // An unexpected error occurred while trying to process the data read.
         // Disconnect and return.
         clientConnection.disconnect(DisconnectReason.SERVER_ERROR, true,
-                                    MSGID_TLS_SECURITY_PROVIDER_READ_ERROR,
-                                    getExceptionMessage(e));
+                                    ERR_TLS_SECURITY_PROVIDER_READ_ERROR.get(
+                                    getExceptionMessage(e)));
         return false;
       }
     }
@@ -781,7 +782,7 @@
                 // The client connection has been closed.  Disconnect and
                 // return.
                 clientConnection.disconnect(
-                     DisconnectReason.CLIENT_DISCONNECT, false, -1);
+                     DisconnectReason.CLIENT_DISCONNECT, false, null);
                 return false;
               }
             }
@@ -803,7 +804,7 @@
               // The client connection is already closed, so we don't need to
               // worry about it.
               clientConnection.disconnect(DisconnectReason.CLIENT_DISCONNECT,
-                                          false, -1);
+                                          false, null);
               return false;
             }
             else if (bytesRead == 0)
@@ -811,7 +812,7 @@
               // We didn't get the data that we need.  We'll have to disconnect
               // to avoid blocking other clients.
               clientConnection.disconnect(DisconnectReason.SECURITY_PROBLEM,
-                   false, MSGID_TLS_SECURITY_PROVIDER_WRITE_NEEDS_UNWRAP);
+                   false, ERR_TLS_SECURITY_PROVIDER_WRITE_NEEDS_UNWRAP.get());
               return false;
             }
             else
@@ -847,14 +848,14 @@
             // FIXME -- Allow for closing the SSL channel without closing the
             //          underlying connection.
             clientConnection.disconnect(DisconnectReason.CLIENT_DISCONNECT,
-                                        false, -1);
+                                        false, null);
             return false;
 
           default:
             // This should not have happened.
             clientConnection.disconnect(DisconnectReason.SECURITY_PROBLEM,
-                 false, MSGID_TLS_SECURITY_PROVIDER_UNEXPECTED_WRAP_STATUS,
-                 String.valueOf(wrapResult.getStatus()));
+                 false, ERR_TLS_SECURITY_PROVIDER_UNEXPECTED_WRAP_STATUS.get(
+                  String.valueOf(wrapResult.getStatus())));
             return false;
         }
 
@@ -881,7 +882,7 @@
                 // The client connection has been closed.  Disconnect and
                 // return.
                 clientConnection.disconnect(
-                     DisconnectReason.CLIENT_DISCONNECT, false, -1);
+                     DisconnectReason.CLIENT_DISCONNECT, false, null);
                 return false;
               }
             }
@@ -903,7 +904,7 @@
               // The client connection is already closed, so we don't need to
               // worry about it.
               clientConnection.disconnect(DisconnectReason.CLIENT_DISCONNECT,
-                                          false, -1);
+                                          false, null);
               return false;
             }
             else if (bytesRead == 0)
@@ -911,7 +912,7 @@
               // We didn't get the data that we need.  We'll have to disconnect
               // to avoid blocking other clients.
               clientConnection.disconnect(DisconnectReason.SECURITY_PROBLEM,
-                   false, MSGID_TLS_SECURITY_PROVIDER_WRITE_NEEDS_UNWRAP);
+                   false, ERR_TLS_SECURITY_PROVIDER_WRITE_NEEDS_UNWRAP.get());
               return false;
             }
             else
@@ -931,7 +932,7 @@
           {
             // The client connection has been closed.
             clientConnection.disconnect(DisconnectReason.CLIENT_DISCONNECT,
-                                        false, -1);
+                                        false, null);
             return false;
           }
         }
@@ -951,7 +952,7 @@
 
       // An error occurred while trying to communicate with the client.
       // Disconnect and return.
-      clientConnection.disconnect(DisconnectReason.IO_ERROR, false, -1);
+      clientConnection.disconnect(DisconnectReason.IO_ERROR, false, null);
       return false;
     }
     catch (Exception e)
@@ -964,8 +965,8 @@
       // An unexpected error occurred while trying to process the data read.
       // Disconnect and return.
       clientConnection.disconnect(DisconnectReason.SERVER_ERROR, true,
-                                  MSGID_TLS_SECURITY_PROVIDER_WRITE_ERROR,
-                                  getExceptionMessage(e));
+              ERR_TLS_SECURITY_PROVIDER_WRITE_ERROR.get(
+                      getExceptionMessage(e)));
       return false;
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
index 1a87228..75ae755 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -48,19 +49,15 @@
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.Operation;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.messages.CoreMessages.*;
 import org.opends.server.types.AbstractOperation;
 
 
@@ -205,11 +202,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR;
-      String message = getMessage(msgID, TraditionalWorkQueueMonitor.class,
-                                  String.valueOf(e));
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR.get(
+          String.valueOf(TraditionalWorkQueueMonitor.class), String.valueOf(e));
+      logError(message);
     }
   }
 
@@ -219,7 +214,7 @@
    * {@inheritDoc}
    */
   @Override()
-  public void finalizeWorkQueue(String reason)
+  public void finalizeWorkQueue(Message reason)
   {
     shutdownRequested = true;
 
@@ -242,9 +237,8 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_WARNING,
-                 MSGID_QUEUE_UNABLE_TO_CANCEL, String.valueOf(o),
-                 String.valueOf(e));
+        logError(WARN_QUEUE_UNABLE_TO_CANCEL.get(
+            String.valueOf(o), String.valueOf(e)));
       }
     }
 
@@ -263,9 +257,8 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_WARNING,
-                 MSGID_QUEUE_UNABLE_TO_NOTIFY_THREAD, t.getName(),
-                 String.valueOf(e));
+        logError(WARN_QUEUE_UNABLE_TO_NOTIFY_THREAD.get(
+            t.getName(), String.valueOf(e)));
       }
     }
   }
@@ -301,18 +294,16 @@
   {
     if (shutdownRequested)
     {
-      int    messageID = MSGID_OP_REJECTED_BY_SHUTDOWN;
-      String message   = getMessage(messageID);
-      throw new DirectoryException(ResultCode.UNAVAILABLE, message, messageID);
+      Message message = WARN_OP_REJECTED_BY_SHUTDOWN.get();
+      throw new DirectoryException(ResultCode.UNAVAILABLE, message);
     }
 
     if (! opQueue.offer(operation))
     {
       queueFullRejects.incrementAndGet();
 
-      int    messageID = MSGID_OP_REJECTED_BY_QUEUE_FULL;
-      String message   = getMessage(messageID, maxCapacity);
-      throw new DirectoryException(ResultCode.UNAVAILABLE, message, messageID);
+      Message message = WARN_OP_REJECTED_BY_QUEUE_FULL.get(maxCapacity);
+      throw new DirectoryException(ResultCode.UNAVAILABLE, message);
     }
 
     opsSubmitted.incrementAndGet();
@@ -401,11 +392,9 @@
     {
       if (numFailures > MAX_RETRY_COUNT)
       {
-        int msgID = MSGID_CONFIG_WORK_QUEUE_TOO_MANY_FAILURES;
-        String message = getMessage(msgID, Thread.currentThread().getName(),
-                                    numFailures, MAX_RETRY_COUNT);
-        logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_CONFIG_WORK_QUEUE_TOO_MANY_FAILURES.get(
+            Thread.currentThread().getName(), numFailures, MAX_RETRY_COUNT);
+        logError(message);
       }
 
       return null;
@@ -481,9 +470,8 @@
 
       // If we've gotten here, then the worker thread was interrupted for some
       // other reason.  This should not happen, and we need to log a message.
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_WARNING,
-               MSGID_WORKER_INTERRUPTED_WITHOUT_SHUTDOWN,
-               Thread.currentThread().getName(), String.valueOf(ie));
+      logError(WARN_WORKER_INTERRUPTED_WITHOUT_SHUTDOWN.get(
+          Thread.currentThread().getName(), String.valueOf(ie)));
       return retryNextOperation(workerThread, numFailures+1);
     }
     catch (Exception e)
@@ -495,9 +483,8 @@
 
       // This should not happen.  The only recourse we have is to log a message
       // and try again.
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_WARNING,
-               MSGID_WORKER_WAITING_UNCAUGHT_EXCEPTION,
-               Thread.currentThread().getName(), String.valueOf(e));
+      logError(WARN_WORKER_WAITING_UNCAUGHT_EXCEPTION.get(
+          Thread.currentThread().getName(), String.valueOf(e)));
       return retryNextOperation(workerThread, numFailures + 1);
     }
   }
@@ -571,7 +558,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       TraditionalWorkQueueCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // The provided configuration will always be acceptable.
     return true;
@@ -585,7 +572,7 @@
   public ConfigChangeResult applyConfigurationChange(
                                  TraditionalWorkQueueCfg configuration)
   {
-    ArrayList<String> resultMessages = new ArrayList<String>();
+    ArrayList<Message> resultMessages = new ArrayList<Message>();
     int newNumThreads  = configuration.getNumWorkerThreads();
     int newMaxCapacity = configuration.getMaxWorkQueueCapacity();
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkerThread.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkerThread.java
index 5cd4053..28d6d5d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkerThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/TraditionalWorkerThread.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -37,14 +38,11 @@
 import org.opends.server.types.CancelResult;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DisconnectReason;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -189,13 +187,10 @@
 
         try
         {
-          int msgID = MSGID_UNCAUGHT_WORKER_THREAD_EXCEPTION;
-          String message = getMessage(msgID, getName(),
-                                      String.valueOf(operation),
-                                      stackTraceToSingleLineString(e));
-
-          logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION.
+              get(getName(), String.valueOf(operation),
+                  stackTraceToSingleLineString(e));
+          logError(message);
 
           operation.setResultCode(DirectoryServer.getServerErrorResultCode());
           operation.appendErrorMessage(message);
@@ -216,14 +211,13 @@
 
         try
         {
-          int msgID = MSGID_UNCAUGHT_WORKER_THREAD_EXCEPTION;
-          String message = getMessage(msgID, getName(),
+          Message message = ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION.get(getName(),
                                       String.valueOf(operation),
                                       stackTraceToSingleLineString(e));
 
           operation.disconnectClient(
                                      DisconnectReason.SERVER_ERROR,
-                                     true, message, msgID);
+                                     true, message);
         }
         catch (Exception e2)
         {
@@ -240,13 +234,11 @@
     // and we will want to log a message.
     if (stoppedByReducedThreadNumber)
     {
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.INFORMATIONAL,
-               MSGID_WORKER_STOPPED_BY_REDUCED_THREADNUMBER, getName());
+      logError(INFO_WORKER_STOPPED_BY_REDUCED_THREADNUMBER.get(getName()));
     }
     else if (! workQueue.shutdownRequested())
     {
-      logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_WARNING,
-               MSGID_UNEXPECTED_WORKER_THREAD_EXIT, getName());
+      logError(WARN_UNEXPECTED_WORKER_THREAD_EXIT.get(getName()));
     }
 
 
@@ -297,7 +289,7 @@
       try
       {
         CancelRequest cancelRequest =
-          new CancelRequest(true, getMessage(MSGID_CANCELED_BY_SHUTDOWN));
+          new CancelRequest(true, INFO_CANCELED_BY_SHUTDOWN.get());
         operation.cancel(cancelRequest);
       }
       catch (Exception e)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidator.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidator.java
index 670f84a..78ce0e1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -42,9 +43,8 @@
 import org.opends.server.types.Operation;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
+import static org.opends.messages.ExtensionMessages.*;
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -106,7 +106,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      StringBuilder invalidReason)
+                                      MessageBuilder invalidReason)
   {
     // Get a handle to the current configuration and see if we need to count
     // the number of unique characters in the password.
@@ -142,8 +142,8 @@
     // number of allowed unique characters, then we will reject the password.
     if (passwordCharacters.size() < minUniqueCharacters)
     {
-      int    msgID   = MSGID_UNIQUECHARS_VALIDATOR_NOT_ENOUGH_UNIQUE_CHARS;
-      String message = getMessage(msgID, minUniqueCharacters);
+      Message message = ERR_UNIQUECHARS_VALIDATOR_NOT_ENOUGH_UNIQUE_CHARS.get(
+              minUniqueCharacters);
       invalidReason.append(message);
       return false;
     }
@@ -158,7 +158,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       UniqueCharactersPasswordValidatorCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> 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.
@@ -175,7 +175,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     // For this password validator, we will always be able to successfully apply
     // the new configuration.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProvider.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProvider.java
index 7ea6862..9985fb9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProvider.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -172,7 +173,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       UserDefinedVirtualAttributeCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // The new configuration should always be acceptable.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/VirtualStaticGroup.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/VirtualStaticGroup.java
index b90d62d..18e031d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/VirtualStaticGroup.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/VirtualStaticGroup.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -53,8 +54,7 @@
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.Validator.*;
 
@@ -151,11 +151,10 @@
         {
           if (targetDN != null)
           {
-            int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_MULTIPLE_TARGETS;
-            String message = getMessage(msgID,
-                                        String.valueOf(groupEntry.getDN()));
+            Message message = ERR_VIRTUAL_STATIC_GROUP_MULTIPLE_TARGETS.get(
+                String.valueOf(groupEntry.getDN()));
             throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
 
           try
@@ -169,12 +168,11 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_CANNOT_DECODE_TARGET;
-            String message = getMessage(msgID, v.getStringValue(),
-                                        String.valueOf(groupEntry.getDN()),
-                                        de.getErrorMessage());
+            Message message = ERR_VIRTUAL_STATIC_GROUP_CANNOT_DECODE_TARGET.
+                get(v.getStringValue(), String.valueOf(groupEntry.getDN()),
+                    de.getMessageObject());
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID, de);
+                                         message, de);
           }
         }
       }
@@ -182,10 +180,9 @@
 
     if (targetDN == null)
     {
-      int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_NO_TARGET;
-      String message = getMessage(msgID, String.valueOf(groupEntry.getDN()));
-      throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET.get(
+          String.valueOf(groupEntry.getDN()));
+      throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
     }
 
     return new VirtualStaticGroup(groupEntry.getDN(), targetDN);
@@ -280,9 +277,8 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Virtual static groups don't support nesting.
-    int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED.get();
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -295,9 +291,8 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Virtual static groups don't support nesting.
-    int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED;
-    String message = getMessage(msgID);
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED.get();
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -318,19 +313,16 @@
          DirectoryServer.getGroupManager().getGroupInstance(targetGroupDN);
     if (targetGroup == null)
     {
-      int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP;
-      String message = getMessage(msgID, String.valueOf(targetGroupDN),
-                                  String.valueOf(groupEntryDN));
+      Message message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
+          String.valueOf(targetGroupDN), String.valueOf(groupEntryDN));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     else if (targetGroup instanceof VirtualStaticGroup)
     {
-      int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL;
-      String message = getMessage(msgID, String.valueOf(groupEntryDN),
-                                  String.valueOf(targetGroupDN));
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
+          String.valueOf(groupEntryDN), String.valueOf(targetGroupDN));
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
     else
     {
@@ -356,19 +348,16 @@
          DirectoryServer.getGroupManager().getGroupInstance(targetGroupDN);
     if (targetGroup == null)
     {
-      int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP;
-      String message = getMessage(msgID, String.valueOf(targetGroupDN),
-                                  String.valueOf(groupEntryDN));
+      Message message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
+          String.valueOf(targetGroupDN), String.valueOf(groupEntryDN));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     else if (targetGroup instanceof VirtualStaticGroup)
     {
-      int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL;
-      String message = getMessage(msgID, String.valueOf(groupEntryDN),
-                                  String.valueOf(targetGroupDN));
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
+          String.valueOf(groupEntryDN), String.valueOf(targetGroupDN));
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
     else
     {
@@ -389,19 +378,16 @@
          DirectoryServer.getGroupManager().getGroupInstance(targetGroupDN);
     if (targetGroup == null)
     {
-      int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP;
-      String message = getMessage(msgID, String.valueOf(targetGroupDN),
-                                  String.valueOf(groupEntryDN));
+      Message message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
+          String.valueOf(targetGroupDN), String.valueOf(groupEntryDN));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     else if (targetGroup instanceof VirtualStaticGroup)
     {
-      int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL;
-      String message = getMessage(msgID, String.valueOf(groupEntryDN),
-                                  String.valueOf(targetGroupDN));
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
+          String.valueOf(groupEntryDN), String.valueOf(targetGroupDN));
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
     else
     {
@@ -423,19 +409,16 @@
          DirectoryServer.getGroupManager().getGroupInstance(targetGroupDN);
     if (targetGroup == null)
     {
-      int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP;
-      String message = getMessage(msgID, String.valueOf(targetGroupDN),
-                                  String.valueOf(groupEntryDN));
+      Message message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
+          String.valueOf(targetGroupDN), String.valueOf(groupEntryDN));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
     else if (targetGroup instanceof VirtualStaticGroup)
     {
-      int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL;
-      String message = getMessage(msgID, String.valueOf(groupEntryDN),
-                                  String.valueOf(targetGroupDN));
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
+          String.valueOf(groupEntryDN), String.valueOf(targetGroupDN));
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
     else
     {
@@ -464,9 +447,9 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Virtual static groups don't support altering the member list.
-    int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(groupEntryDN));
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED.
+        get(String.valueOf(groupEntryDN));
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
@@ -479,9 +462,9 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Virtual static groups don't support altering the member list.
-    int    msgID   = MSGID_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED;
-    String message = getMessage(msgID, String.valueOf(groupEntryDN));
-    throw new UnsupportedOperationException(message);
+    Message message = ERR_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED.
+        get(String.valueOf(groupEntryDN));
+    throw new UnsupportedOperationException(message.toString());
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/WhoAmIExtendedOperation.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/WhoAmIExtendedOperation.java
index ddd61c7..f9172f7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/WhoAmIExtendedOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/WhoAmIExtendedOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.extensions;
+import org.opends.messages.Message;
 
 
 
@@ -53,8 +54,7 @@
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -164,8 +164,9 @@
           if (! clientConnection.hasPrivilege(Privilege.PROXIED_AUTH,
                                               operation))
           {
-            int msgID = MSGID_EXTOP_WHOAMI_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-            operation.appendErrorMessage(getMessage(msgID));
+
+            operation.appendErrorMessage(
+                    ERR_EXTOP_WHOAMI_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
             operation.setResultCode(ResultCode.AUTHORIZATION_DENIED);
             return;
           }
@@ -190,7 +191,7 @@
               }
 
               operation.setResultCode(ResultCode.valueOf(le.getResultCode()));
-              operation.appendErrorMessage(le.getMessage());
+              operation.appendErrorMessage(le.getMessageObject());
               return;
             }
           }
@@ -209,7 +210,7 @@
             }
 
             operation.setResultCode(de.getResultCode());
-            operation.appendErrorMessage(de.getErrorMessage());
+            operation.appendErrorMessage(de.getMessageObject());
             return;
           }
 
@@ -222,8 +223,9 @@
           if (! clientConnection.hasPrivilege(Privilege.PROXIED_AUTH,
                                               operation))
           {
-            int msgID = MSGID_EXTOP_WHOAMI_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-            operation.appendErrorMessage(getMessage(msgID));
+
+            operation.appendErrorMessage(
+                    ERR_EXTOP_WHOAMI_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
             operation.setResultCode(ResultCode.AUTHORIZATION_DENIED);
             return;
           }
@@ -248,7 +250,7 @@
               }
 
               operation.setResultCode(ResultCode.valueOf(le.getResultCode()));
-              operation.appendErrorMessage(le.getMessage());
+              operation.appendErrorMessage(le.getMessageObject());
               return;
             }
           }
@@ -267,7 +269,7 @@
             }
 
             operation.setResultCode(de.getResultCode());
-            operation.appendErrorMessage(de.getErrorMessage());
+            operation.appendErrorMessage(de.getMessageObject());
             return;
           }
 
@@ -291,7 +293,8 @@
     }
 
     operation.setResponseValue(new ASN1OctetString(authzID));
-    operation.appendAdditionalLogMessage("authzID=\"" + authzID + "\"");
+    operation.appendAdditionalLogMessage(
+            Message.raw("authzID=\"" + authzID + "\""));
     operation.setResultCode(ResultCode.SUCCESS);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/AccessLogger.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/AccessLogger.java
index ca4586f..e5ab49e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/AccessLogger.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/AccessLogger.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 
 
@@ -47,11 +48,11 @@
 import org.opends.server.config.ConfigException;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ConfigMessages.
-    MSGID_CONFIG_LOGGER_CANNOT_CREATE_LOGGER;
-import static org.opends.server.messages.ConfigMessages.
-    MSGID_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ConfigMessages.
+    ERR_CONFIG_LOGGER_CANNOT_CREATE_LOGGER;
+import static org.opends.messages.ConfigMessages.
+    ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS;
+
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 
@@ -162,8 +163,9 @@
   /**
    * {@inheritDoc}
    */
-   public boolean isConfigurationAddAcceptable(AccessLogPublisherCfg config,
-                                               List<String> unacceptableReasons)
+   public boolean isConfigurationAddAcceptable(
+          AccessLogPublisherCfg config,
+          List<Message> unacceptableReasons)
    {
      return !config.isEnabled() ||
          isJavaClassAcceptable(config, unacceptableReasons);
@@ -172,8 +174,9 @@
   /**
    * {@inheritDoc}
    */
-   public boolean isConfigurationChangeAcceptable(AccessLogPublisherCfg config,
-                                               List<String> unacceptableReasons)
+   public boolean isConfigurationChangeAcceptable(
+          AccessLogPublisherCfg config,
+          List<Message> unacceptableReasons)
    {
      return !config.isEnabled() ||
          isJavaClassAcceptable(config, unacceptableReasons);
@@ -187,7 +190,7 @@
      // Default result code.
      ResultCode resultCode = ResultCode.SUCCESS;
      boolean adminActionRequired = false;
-     ArrayList<String> messages = new ArrayList<String>();
+     ArrayList<Message> messages = new ArrayList<Message>();
 
      config.addAccessChangeListener(this);
 
@@ -205,7 +208,7 @@
          {
            TRACER.debugCaught(DebugLogLevel.ERROR, e);
          }
-         messages.add(e.getMessage());
+         messages.add(e.getMessageObject());
          resultCode = DirectoryServer.getServerErrorResultCode();
        }
        catch (Exception e)
@@ -214,9 +217,10 @@
          {
            TRACER.debugCaught(DebugLogLevel.ERROR, e);
          }
-         int msgID = MSGID_CONFIG_LOGGER_CANNOT_CREATE_LOGGER;
-         messages.add(getMessage(msgID, String.valueOf(config.dn().toString()),
-                                 stackTraceToSingleLineString(e)));
+
+         messages.add(ERR_CONFIG_LOGGER_CANNOT_CREATE_LOGGER.get(
+                 String.valueOf(config.dn().toString()),
+                 stackTraceToSingleLineString(e)));
          resultCode = DirectoryServer.getServerErrorResultCode();
        }
      }
@@ -232,7 +236,7 @@
      // Default result code.
      ResultCode resultCode = ResultCode.SUCCESS;
      boolean adminActionRequired = false;
-     ArrayList<String> messages = new ArrayList<String>();
+     ArrayList<Message> messages = new ArrayList<Message>();
 
      DN dn = config.dn();
 
@@ -282,8 +286,9 @@
   /**
    * {@inheritDoc}
    */
-   public boolean isConfigurationDeleteAcceptable(AccessLogPublisherCfg config,
-                                               List<String> unacceptableReasons)
+   public boolean isConfigurationDeleteAcceptable(
+          AccessLogPublisherCfg config,
+          List<Message> unacceptableReasons)
    {
      DN dn = config.dn();
 
@@ -334,7 +339,7 @@
   }
 
    private boolean isJavaClassAcceptable(AccessLogPublisherCfg config,
-                                         List<String> unacceptableReasons)
+                                         List<Message> unacceptableReasons)
    {
      String className = config.getJavaImplementationClass();
      AccessLogPublisherCfgDefn d = AccessLogPublisherCfgDefn.getInstance();
@@ -347,10 +352,10 @@
        theClass = pd.loadClass(className, AccessLogPublisher.class);
        publisher = theClass.newInstance();
      } catch (Exception e) {
-       int    msgID   = MSGID_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS;
-       String message = getMessage(msgID, className,
-                                   config.dn().toString(),
-                                   String.valueOf(e));
+       Message message = ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS.get(
+               className,
+               config.dn().toString(),
+               String.valueOf(e));
        unacceptableReasons.add(message);
        return false;
      }
@@ -370,10 +375,10 @@
          return false;
        }
      } catch (Exception e) {
-       int    msgID   = MSGID_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS;
-       String message = getMessage(msgID, className,
-                                   config.dn().toString(),
-                                   String.valueOf(e));
+       Message message = ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS.get(
+               className,
+               config.dn().toString(),
+               String.valueOf(e));
        unacceptableReasons.add(message);
        return false;
      }
@@ -405,19 +410,15 @@
      {
        // Rethrow the exceptions thrown be the invoked method.
        Throwable e = ite.getTargetException();
-       int    msgID   = MSGID_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS;
-       String message = getMessage(msgID, className,
-                                   config.dn().toString(),
-                                   stackTraceToSingleLineString(e));
-       throw new ConfigException(msgID, message, e);
+       Message message = ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS.get(
+           className, config.dn().toString(), stackTraceToSingleLineString(e));
+       throw new ConfigException(message, e);
      }
      catch (Exception e)
      {
-       int    msgID   = MSGID_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS;
-       String message = getMessage(msgID, className,
-                                   config.dn().toString(),
-                                   String.valueOf(e));
-       throw new ConfigException(msgID, message, e);
+       Message message = ERR_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS.get(
+           className, config.dn().toString(), String.valueOf(e));
+       throw new ConfigException(message, e);
      }
 
      // The access publisher has been successfully initialized.
@@ -456,7 +457,7 @@
    */
   public static void logDisconnect(ClientConnection clientConnection,
                                    DisconnectReason disconnectReason,
-                                   String message)
+                                   Message message)
   {
     for (AccessLogPublisher publisher : accessPublishers)
     {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/AsyncronousTextWriter.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/AsyncronousTextWriter.java
index a0e4a5d..ea61eee 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/AsyncronousTextWriter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/AsyncronousTextWriter.java
@@ -25,11 +25,13 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.api.ServerShutdownListener;
 import org.opends.server.core.DirectoryServer;
 
+
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -188,7 +190,7 @@
   /**
    * {@inheritDoc}
    */
-  public void processServerShutdown(String reason)
+  public void processServerShutdown(Message 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/opendj-sdk/opends/src/server/org/opends/server/loggers/ErrorLogger.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/ErrorLogger.java
index 8c10170..1879421 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/ErrorLogger.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/ErrorLogger.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 
 
@@ -38,7 +39,7 @@
 import org.opends.server.api.ErrorLogPublisher;
 import org.opends.server.backends.task.Task;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.messages.MessageHandler;
+
 import org.opends.server.types.*;
 import org.opends.server.admin.std.server.ErrorLogPublisherCfg;
 import org.opends.server.admin.std.meta.ErrorLogPublisherCfgDefn;
@@ -50,10 +51,8 @@
 import org.opends.server.core.DirectoryServer;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ConfigMessages.*;
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.util.StaticUtils.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-
 /**
  * This class defines the wrapper that will invoke all registered error loggers
  * for each type of request received or response sent. If no error log
@@ -162,7 +161,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(ErrorLogPublisherCfg config,
-                                              List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     return !config.isEnabled() ||
         isJavaClassAcceptable(config, unacceptableReasons);
@@ -171,8 +170,9 @@
   /**
    * {@inheritDoc}
    */
-  public boolean isConfigurationChangeAcceptable(ErrorLogPublisherCfg config,
-                                               List<String> unacceptableReasons)
+  public boolean isConfigurationChangeAcceptable(
+          ErrorLogPublisherCfg config,
+          List<Message> unacceptableReasons)
   {
     return !config.isEnabled() ||
         isJavaClassAcceptable(config, unacceptableReasons);
@@ -186,7 +186,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     config.addErrorChangeListener(this);
 
@@ -204,7 +204,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        messages.add(e.getMessage());
+        messages.add(e.getMessageObject());
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
       catch (Exception e)
@@ -213,9 +213,9 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        int msgID = MSGID_CONFIG_LOGGER_CANNOT_CREATE_LOGGER;
-        messages.add(getMessage(msgID, String.valueOf(config.dn().toString()),
-                                stackTraceToSingleLineString(e)));
+        messages.add(ERR_CONFIG_LOGGER_CANNOT_CREATE_LOGGER.get(
+                String.valueOf(config.dn().toString()),
+                stackTraceToSingleLineString(e)));
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
     }
@@ -231,7 +231,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     DN dn = config.dn();
 
@@ -281,8 +281,9 @@
   /**
    * {@inheritDoc}
    */
-  public boolean isConfigurationDeleteAcceptable(ErrorLogPublisherCfg config,
-                                               List<String> unacceptableReasons)
+  public boolean isConfigurationDeleteAcceptable(
+          ErrorLogPublisherCfg config,
+          List<Message> unacceptableReasons)
   {
     DN dn = config.dn();
 
@@ -332,7 +333,7 @@
   }
 
   private boolean isJavaClassAcceptable(ErrorLogPublisherCfg config,
-                                        List<String> unacceptableReasons)
+                                        List<Message> unacceptableReasons)
   {
     String className = config.getJavaImplementationClass();
     ErrorLogPublisherCfgDefn d = ErrorLogPublisherCfgDefn.getInstance();
@@ -345,10 +346,10 @@
       theClass = pd.loadClass(className, ErrorLogPublisher.class);
       publisher = theClass.newInstance();
     } catch (Exception e) {
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  String.valueOf(e));
+      Message message = ERR_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS.get(
+              className,
+              config.dn().toString(),
+              String.valueOf(e));
       unacceptableReasons.add(message);
       return false;
     }
@@ -368,10 +369,10 @@
         return false;
       }
     } catch (Exception e) {
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  String.valueOf(e));
+      Message message = ERR_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS.get(
+              className,
+              config.dn().toString(),
+              String.valueOf(e));
       unacceptableReasons.add(message);
       return false;
     }
@@ -403,19 +404,15 @@
     {
       // Rethrow the exceptions thrown be the invoked method.
       Throwable e = ite.getTargetException();
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS.get(
+          className, config.dn().toString(), stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  String.valueOf(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS.get(
+          className, config.dn().toString(), String.valueOf(e));
+      throw new ConfigException(message, e);
     }
 
     // The error publisher has been successfully initialized.
@@ -427,90 +424,13 @@
   /**
    * Writes a message to the error log using the provided information.
    *
-   * @param  category  The category that may be used to determine whether to
-   *                   actually log this message.
-   * @param  severity  The severity that may be used to determine whether to
-   *                   actually log this message.
-   * @param  errorID   The error ID that uniquely identifies the provided format
-   *                   string.
-   */
-  public static void logError(ErrorLogCategory category,
-                              ErrorLogSeverity severity, int errorID)
-  {
-    String message = MessageHandler.getMessage(errorID);
-
-    for (ErrorLogPublisher publisher : errorPublishers)
-    {
-      publisher.logError(category, severity, message, errorID);
-    }
-
-    if (Thread.currentThread() instanceof DirectoryThread)
-    {
-      DirectoryThread thread = (DirectoryThread) Thread.currentThread();
-      Task task = thread.getAssociatedTask();
-      if (task != null)
-      {
-        task.addLogMessage(severity, errorID, message);
-      }
-    }
-  }
-
-
-
-  /**
-   * Writes a message to the error log using the provided information.
-   *
-   * @param  category  The category that may be used to determine whether to
-   *                   actually log this message.
-   * @param  severity  The severity that may be used to determine whether to
-   *                   actually log this message.
-   * @param  errorID   The error ID that uniquely identifies the provided format
-   *                   string.
-   * @param  args      The set of arguments to use for the provided format
-   *                   string.
-   */
-  public static void logError(ErrorLogCategory category,
-                              ErrorLogSeverity severity, int errorID,
-                              Object... args)
-  {
-    String message = MessageHandler.getMessage(errorID, args);
-
-    for (ErrorLogPublisher publisher : errorPublishers)
-    {
-      publisher.logError(category, severity, message, errorID);
-    }
-
-    if (Thread.currentThread() instanceof DirectoryThread)
-    {
-      DirectoryThread thread = (DirectoryThread) Thread.currentThread();
-      Task task = thread.getAssociatedTask();
-      if (task != null)
-      {
-        task.addLogMessage(severity, errorID, message);
-      }
-    }
-  }
-
-
-
-  /**
-   * Writes a message to the error log using the provided information.
-   *
-   * @param  category  The category that may be used to determine whether to
-   *                   actually log this message.
-   * @param  severity  The severity that may be used to determine whether to
-   *                   actually log this message.
    * @param  message   The message to be logged.
-   * @param  errorID   The error ID that uniquely identifies the format string
-   *                   used to generate the provided message.
    */
-  public static void logError(ErrorLogCategory category,
-                              ErrorLogSeverity severity, String message,
-                              int errorID)
+  public static void logError(Message message)
   {
     for (ErrorLogPublisher publisher : errorPublishers)
     {
-      publisher.logError(category, severity, message, errorID);
+      publisher.logError(message);
     }
 
     if (Thread.currentThread() instanceof DirectoryThread)
@@ -519,7 +439,7 @@
       Task task = thread.getAssociatedTask();
       if (task != null)
       {
-        task.addLogMessage(severity, errorID, message);
+        task.addLogMessage(message);
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/FileNumberRetentionPolicy.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/FileNumberRetentionPolicy.java
index b0c55b9..17e6682 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/FileNumberRetentionPolicy.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/FileNumberRetentionPolicy.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 import org.opends.server.admin.std.server.FileCountLogRetentionPolicyCfg;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -39,6 +40,7 @@
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.ResultCode;
 
+
 /**
  * This class implements a retention policy based on the number of files.
  * Files will be cleaned up based on the number of files on disk.
@@ -71,7 +73,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       FileCountLogRetentionPolicyCfg config,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -86,7 +88,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     numFiles = config.getNumberOfFiles();
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java
index 5acbfed..86f290a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 import java.util.*;
 
@@ -37,6 +38,7 @@
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.ResultCode;
 
+
 /**
  * This class implements a rotation policy based on fixed
  * day/time of day.
@@ -81,7 +83,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      FixedTimeLogRotationPolicyCfg config, List<String> unacceptableReasons)
+      FixedTimeLogRotationPolicyCfg config, List<Message> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -96,7 +98,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     rotationTimes = new long[config.getTimeOfDay().size()];
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
index c6ee347..0239bfd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 import java.io.File;
 import java.lang.reflect.Method;
@@ -40,6 +41,7 @@
 import org.opends.server.admin.std.server.FreeDiskSpaceLogRetentionPolicyCfg;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 
+
 /**
  * This class implements a retention policy based on the free disk
  * space available expressed as a percentage. This policy is only
@@ -73,7 +75,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       FreeDiskSpaceLogRetentionPolicyCfg config,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -88,7 +90,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     freeDiskSpace = config.getFreeDiskSpace();
 
@@ -131,7 +133,7 @@
     }
 
           if(debugEnabled())
-      {
+      { // TODO: i18n
         TRACER.debugInfo("Current free disk space: %d, Required: %d", freeSpace,
                   freeDiskSpace);
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/LogPublisherErrorHandler.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/LogPublisherErrorHandler.java
index d74ad0e..acbe0e8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/LogPublisherErrorHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/LogPublisherErrorHandler.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 import org.opends.server.types.DN;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.LoggerMessages.*;
+import static org.opends.messages.LoggerMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 import java.io.File;
@@ -68,9 +68,9 @@
   {
     if(!writeErroroccurred)
     {
-      int msgID = MSGID_LOGGER_ERROR_WRITING_RECORD;
-      String msg = getMessage(msgID, publisherConfigDN.toString(),
-                              stackTraceToSingleLineString(ex));
+      Message msg = ERR_LOGGER_ERROR_WRITING_RECORD.get(
+              publisherConfigDN.toString(),
+              stackTraceToSingleLineString(ex));
       System.err.println(msg);
       writeErroroccurred = true;
     }
@@ -84,8 +84,7 @@
    */
   public void handleOpenError(File file, Throwable ex)
   {
-    int msgID = MSGID_LOGGER_ERROR_OPENING_FILE;
-    String msg = getMessage(msgID, file.toString(),
+    Message msg = ERR_LOGGER_ERROR_OPENING_FILE.get(file.toString(),
                             publisherConfigDN.toString(),
                             stackTraceToSingleLineString(ex));
     System.err.println(msg);
@@ -98,9 +97,9 @@
    */
   public void handleCloseError(Throwable ex)
   {
-    int msgID = MSGID_LOGGER_ERROR_CLOSING_FILE;
-    String msg = getMessage(msgID, publisherConfigDN.toString(),
-                            stackTraceToSingleLineString(ex));
+    Message msg = ERR_LOGGER_ERROR_CLOSING_FILE.get(
+            publisherConfigDN.toString(),
+            stackTraceToSingleLineString(ex));
     System.err.println(msg);
   }
 
@@ -111,9 +110,9 @@
    */
   public void handleFlushError(Throwable ex)
   {
-    int msgID = MSGID_LOGGER_ERROR_FLUSHING_BUFFER;
-    String msg = getMessage(msgID, publisherConfigDN.toString(),
-                            stackTraceToSingleLineString(ex));
+    Message msg = ERR_LOGGER_ERROR_FLUSHING_BUFFER.get(
+            publisherConfigDN.toString(),
+            stackTraceToSingleLineString(ex));
     System.err.println(msg);
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java
index eef2ae4..a4b3d52 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java
@@ -26,6 +26,7 @@
  */
 package org.opends.server.loggers;
 
+
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.api.ServerShutdownListener;
 import org.opends.server.core.DirectoryServer;
@@ -38,9 +39,8 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.LoggerMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.messages.LoggerMessages.*;
+import org.opends.messages.Message;
 
 import java.io.*;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -198,23 +198,17 @@
       {
         if(!FilePermission.setPermissions(file, filePermissions))
         {
-          int msgID = MSGID_LOGGER_UNABLE_SET_PERMISSIONS;
-          String message = getMessage(msgID, filePermissions.toString(),
-                                      file.toString());
-          logError(ErrorLogCategory.CONFIGURATION,
-                   ErrorLogSeverity.MILD_WARNING,
-                   message, msgID);
+          Message message = WARN_LOGGER_UNABLE_SET_PERMISSIONS.get(
+              filePermissions.toString(), file.toString());
+          ErrorLogger.logError(message);
         }
       }
       catch(Exception e)
       {
         // Log an warning that the permissions were not set.
-        int msgID = MSGID_LOGGER_SET_PERMISSION_FAILED;
-        String message = getMessage(msgID, file.toString(),
-                                    stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.CONFIGURATION,
-                 ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_LOGGER_SET_PERMISSION_FAILED.get(
+            file.toString(), stackTraceToSingleLineString(e));
+        ErrorLogger.logError(message);
       }
     }
   }
@@ -355,7 +349,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      SizeLimitLogRotationPolicyCfg config, List<String> unacceptableReasons)
+      SizeLimitLogRotationPolicyCfg config, List<Message> unacceptableReasons)
   {
     // This should always be ok
     return true;
@@ -373,7 +367,7 @@
     }
 
     return new ConfigChangeResult(ResultCode.SUCCESS, false,
-                                  new ArrayList<String>());
+                                  new ArrayList<Message>());
   }
 
   /**
@@ -461,7 +455,7 @@
    *
    * @param  reason  The human-readable reason for the shutdown.
    */
-  public void processServerShutdown(String reason)
+  public void processServerShutdown(Message reason)
   {
     stopRequested = true;
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java
index 0876a93..0e723af 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 import org.opends.server.admin.std.server.SizeLimitLogRetentionPolicyCfg;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -33,6 +34,7 @@
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.ResultCode;
 
+
 import java.io.File;
 import java.util.Arrays;
 import java.util.List;
@@ -70,7 +72,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       SizeLimitLogRetentionPolicyCfg config,
-      List<String> unacceptableReasons)
+      List<Message> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -85,7 +87,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     size = config.getDiskSpaceUsed();
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
index b38afc0..59f837b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -36,6 +37,7 @@
 import org.opends.server.types.ResultCode;
 import org.opends.server.config.ConfigException;
 
+
 import java.util.List;
 import java.util.ArrayList;
 
@@ -73,7 +75,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      SizeLimitLogRotationPolicyCfg config, List<String> unacceptableReasons)
+      SizeLimitLogRotationPolicyCfg config, List<Message> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -88,7 +90,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     sizeLimit = config.getFileSizeLimit();
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAccessLogPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAccessLogPublisher.java
index d771aea..2130a60 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAccessLogPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAccessLogPublisher.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 
 import java.io.File;
@@ -50,8 +51,9 @@
 import org.opends.server.types.*;
 import org.opends.server.util.TimeThread;
 
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ConfigMessages.*;
+
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.StaticUtils.getFileForPath;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
@@ -131,10 +133,9 @@
         }
         else
         {
-          int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-          String message = getMessage(msgID, dn.toString(),
-                                      config.dn().toString());
-          throw new ConfigException(msgID, message);
+          Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+              dn.toString(), config.dn().toString());
+          throw new ConfigException(message);
         }
       }
       for(DN dn: config.getRetentionPolicyDN())
@@ -146,10 +147,9 @@
         }
         else
         {
-          int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-          String message = getMessage(msgID, dn.toString(),
-                                      config.dn().toString());
-          throw new ConfigException(msgID, message);
+          Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+              dn.toString(), config.dn().toString());
+          throw new ConfigException(message);
         }
       }
 
@@ -167,18 +167,16 @@
     }
     catch(DirectoryException e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+          config.dn().toString(), String.valueOf(e));
+      throw new InitializationException(message, e);
 
     }
     catch(IOException e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+          config.dn().toString(), String.valueOf(e));
+      throw new InitializationException(message, e);
 
     }
 
@@ -198,7 +196,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(AccessLogPublisherCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     FileBasedAccessLogPublisherCfg config =
          (FileBasedAccessLogPublisherCfg) configuration;
@@ -209,9 +207,9 @@
        RotationPolicy policy = DirectoryServer.getRotationPolicy(dn);
        if(policy == null)
        {
-         int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-         String message = getMessage(msgID, dn.toString(),
-                                     config.dn().toString());
+         Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+                 dn.toString(),
+                 config.dn().toString());
          unacceptableReasons.add(message);
          return false;
        }
@@ -221,9 +219,9 @@
        RetentionPolicy policy = DirectoryServer.getRetentionPolicy(dn);
        if(policy == null)
        {
-         int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-         String message = getMessage(msgID, dn.toString(),
-                                     config.dn().toString());
+         Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+                 dn.toString(),
+                 config.dn().toString());
          unacceptableReasons.add(message);
          return false;
        }
@@ -236,7 +234,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-       FileBasedAccessLogPublisherCfg config, List<String> unacceptableReasons)
+       FileBasedAccessLogPublisherCfg config, List<Message> unacceptableReasons)
    {
      // Make sure the permission is valid.
      try
@@ -257,9 +255,9 @@
      }
      catch(Exception e)
      {
-       int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-       String message = getMessage(msgID, config.dn().toString(),
-                                    stackTraceToSingleLineString(e));
+       Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+               config.dn().toString(),
+               stackTraceToSingleLineString(e));
        unacceptableReasons.add(message);
        return false;
      }
@@ -276,7 +274,7 @@
      // Default result code.
      ResultCode resultCode = ResultCode.SUCCESS;
      boolean adminActionRequired = false;
-     ArrayList<String> messages = new ArrayList<String>();
+     ArrayList<Message> messages = new ArrayList<Message>();
 
      suppressInternalOperations = config.isSuppressInternalOperations();
      suppressSynchronizationOperations =
@@ -328,9 +326,9 @@
            }
            else
            {
-             int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-             String message = getMessage(msgID, dn.toString(),
-                                         config.dn().toString());
+             Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+                     dn.toString(),
+                     config.dn().toString());
              resultCode = DirectoryServer.getServerErrorResultCode();
              messages.add(message);
            }
@@ -344,9 +342,9 @@
            }
            else
            {
-             int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-             String message = getMessage(msgID, dn.toString(),
-                                         config.dn().toString());
+             Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+                     dn.toString(),
+                     config.dn().toString());
              resultCode = DirectoryServer.getServerErrorResultCode();
              messages.add(message);
            }
@@ -384,9 +382,9 @@
      }
      catch(Exception e)
      {
-       int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-       String message = getMessage(msgID, config.dn().toString(),
-                                   stackTraceToSingleLineString(e));
+       Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+               config.dn().toString(),
+               stackTraceToSingleLineString(e));
        resultCode = DirectoryServer.getServerErrorResultCode();
        messages.add(message);
 
@@ -457,7 +455,7 @@
    */
   public void logDisconnect(ClientConnection clientConnection,
                             DisconnectReason disconnectReason,
-                            String message)
+                            Message message)
   {
     long connectionID = clientConnection.getConnectionID();
     if (connectionID < 0 && suppressInternalOperations)
@@ -574,7 +572,7 @@
     buffer.append(" result=");
     buffer.append(abandonOperation.getResultCode());
 
-    StringBuilder msg = abandonOperation.getErrorMessage();
+    MessageBuilder msg = abandonOperation.getErrorMessage();
     if ((msg != null) && (msg.length() > 0))
     {
       buffer.append(" message=\"");
@@ -687,7 +685,7 @@
     buffer.append(" result=\"");
     buffer.append(addOperation.getResultCode());
 
-    StringBuilder msg = addOperation.getErrorMessage();
+    MessageBuilder msg = addOperation.getErrorMessage();
     if ((msg != null) && (msg.length() > 0))
     {
       buffer.append("\" message=\"");
@@ -822,25 +820,20 @@
     buffer.append(" result=\"");
     buffer.append(bindOperation.getResultCode());
 
-    StringBuilder msg = bindOperation.getErrorMessage();
+    MessageBuilder msg = bindOperation.getErrorMessage();
     if ((msg != null) && (msg.length() > 0))
     {
       buffer.append("\" message=\"");
       buffer.append(msg);
     }
 
-    int failureID = bindOperation.getAuthFailureID();
-    if (failureID > 0)
+    Message failureMessage = bindOperation.getAuthFailureReason();
+    if (failureMessage != null)
     {
       buffer.append("\" authFailureID=");
-      buffer.append(failureID);
+      buffer.append(failureMessage.getDescriptor().getId());
       buffer.append(" authFailureReason=\"");
-
-      String failureReason = bindOperation.getAuthFailureReason();
-      if (failureReason != null)
-      {
-        buffer.append(failureReason);
-      }
+      buffer.append(failureMessage);
     }
 
     msg = bindOperation.getAdditionalLogMessage();
@@ -972,7 +965,7 @@
     buffer.append(" result=\"");
     buffer.append(compareOperation.getResultCode());
 
-    StringBuilder msg = compareOperation.getErrorMessage();
+    MessageBuilder msg = compareOperation.getErrorMessage();
     if ((msg != null) && (msg.length() > 0))
     {
       buffer.append("\" message=\"");
@@ -1091,7 +1084,7 @@
     buffer.append(" result=\"");
     buffer.append(deleteOperation.getResultCode());
 
-    StringBuilder msg = deleteOperation.getErrorMessage();
+    MessageBuilder msg = deleteOperation.getErrorMessage();
     if ((msg != null) && (msg.length() > 0))
     {
       buffer.append("\" message=\"");
@@ -1220,7 +1213,7 @@
     buffer.append(" result=\"");
     buffer.append(extendedOperation.getResultCode());
 
-    StringBuilder msg = extendedOperation.getErrorMessage();
+    MessageBuilder msg = extendedOperation.getErrorMessage();
     if ((msg != null) && (msg.length() > 0))
     {
       buffer.append("\" message=\"");
@@ -1333,7 +1326,7 @@
     buffer.append(" result=\"");
     buffer.append(modifyOperation.getResultCode());
 
-    StringBuilder msg = modifyOperation.getErrorMessage();
+    MessageBuilder msg = modifyOperation.getErrorMessage();
     if ((msg != null) && (msg.length() > 0))
     {
       buffer.append("\" message=\"");
@@ -1464,7 +1457,7 @@
     buffer.append(" result=\"");
     buffer.append(modifyDNOperation.getResultCode());
 
-    StringBuilder msg = modifyDNOperation.getErrorMessage();
+    MessageBuilder msg = modifyDNOperation.getErrorMessage();
     if ((msg != null) && (msg.length() > 0))
     {
       buffer.append("\" message=\"");
@@ -1638,7 +1631,7 @@
     buffer.append(" result=\"");
     buffer.append(searchOperation.getResultCode());
 
-    StringBuilder msg = searchOperation.getErrorMessage();
+    MessageBuilder msg = searchOperation.getErrorMessage();
     if ((msg != null) && (msg.length() > 0))
     {
       buffer.append("\" message=\"");
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAuditLogPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAuditLogPublisher.java
index 0cafdba..1eec158 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAuditLogPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/TextAuditLogPublisher.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 
 import java.io.File;
@@ -51,8 +52,8 @@
 import org.opends.server.util.StaticUtils;
 import org.opends.server.util.TimeThread;
 
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.types.ResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -115,10 +116,9 @@
         }
         else
         {
-          int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-          String message = getMessage(msgID, dn.toString(),
-                                      config.dn().toString());
-          throw new ConfigException(msgID, message);
+          Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+              dn.toString(), config.dn().toString());
+          throw new ConfigException(message);
         }
       }
       for(DN dn: config.getRetentionPolicyDN())
@@ -130,10 +130,9 @@
         }
         else
         {
-          int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-          String message = getMessage(msgID, dn.toString(),
-                                      config.dn().toString());
-          throw new ConfigException(msgID, message);
+          Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+              dn.toString(), config.dn().toString());
+          throw new ConfigException(message);
         }
       }
 
@@ -151,18 +150,16 @@
     }
     catch(DirectoryException e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+          config.dn().toString(), String.valueOf(e));
+      throw new InitializationException(message, e);
 
     }
     catch(IOException e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+          config.dn().toString(), String.valueOf(e));
+      throw new InitializationException(message, e);
 
     }
 
@@ -181,7 +178,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-       FileBasedAccessLogPublisherCfg config, List<String> unacceptableReasons)
+       FileBasedAccessLogPublisherCfg config, List<Message> unacceptableReasons)
    {
      // Make sure the permission is valid.
      try
@@ -202,9 +199,9 @@
      }
      catch(Exception e)
      {
-       int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-       String message = getMessage(msgID, config.dn().toString(),
-                                    stackTraceToSingleLineString(e));
+       Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+               config.dn().toString(),
+               stackTraceToSingleLineString(e));
        unacceptableReasons.add(message);
        return false;
      }
@@ -215,9 +212,9 @@
        RotationPolicy policy = DirectoryServer.getRotationPolicy(dn);
        if(policy == null)
        {
-         int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-         String message = getMessage(msgID, dn.toString(),
-                                     config.dn().toString());
+         Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+                 dn.toString(),
+                 config.dn().toString());
          unacceptableReasons.add(message);
          return false;
        }
@@ -227,9 +224,9 @@
        RetentionPolicy policy = DirectoryServer.getRetentionPolicy(dn);
        if(policy == null)
        {
-         int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-         String message = getMessage(msgID, dn.toString(),
-                                     config.dn().toString());
+         Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+                 dn.toString(),
+                 config.dn().toString());
          unacceptableReasons.add(message);
          return false;
        }
@@ -247,7 +244,7 @@
      // Default result code.
      ResultCode resultCode = ResultCode.SUCCESS;
      boolean adminActionRequired = false;
-     ArrayList<String> messages = new ArrayList<String>();
+     ArrayList<Message> messages = new ArrayList<Message>();
 
      suppressInternalOperations = config.isSuppressInternalOperations();
      suppressSynchronizationOperations =
@@ -299,9 +296,9 @@
            }
            else
            {
-             int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-             String message = getMessage(msgID, dn.toString(),
-                                         config.dn().toString());
+             Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+                     dn.toString(),
+                     config.dn().toString());
              resultCode = DirectoryServer.getServerErrorResultCode();
              messages.add(message);
            }
@@ -315,9 +312,9 @@
            }
            else
            {
-             int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-             String message = getMessage(msgID, dn.toString(),
-                                         config.dn().toString());
+             Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+                     dn.toString(),
+                     config.dn().toString());
              resultCode = DirectoryServer.getServerErrorResultCode();
              messages.add(message);
            }
@@ -355,9 +352,9 @@
      }
      catch(Exception e)
      {
-       int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-       String message = getMessage(msgID, config.dn().toString(),
-                                   stackTraceToSingleLineString(e));
+       Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+               config.dn().toString(),
+               stackTraceToSingleLineString(e));
        resultCode = DirectoryServer.getServerErrorResultCode();
        messages.add(message);
 
@@ -396,7 +393,7 @@
   @Override()
   public void logDisconnect(ClientConnection clientConnection,
                             DisconnectReason disconnectReason,
-                            String message)
+                            Message message)
   {
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/TextErrorLogPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/TextErrorLogPublisher.java
index 09fe163..d8481ec 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/TextErrorLogPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/TextErrorLogPublisher.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 import java.io.File;
 import java.io.IOException;
@@ -35,9 +36,10 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.*;
 
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.LoggerMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.messages.LoggerMessages.*;
+import org.opends.messages.Severity;
+import org.opends.messages.Category;
 import org.opends.server.admin.std.server.ErrorLogPublisherCfg;
 import org.opends.server.admin.std.server.FileBasedErrorLogPublisherCfg;
 import org.opends.server.admin.std.meta.ErrorLogPublisherCfgDefn;
@@ -74,10 +76,10 @@
     TextErrorLogPublisher startupPublisher = new TextErrorLogPublisher();
     startupPublisher.writer = writer;
 
-    startupPublisher.defaultSeverities.add(ErrorLogSeverity.FATAL_ERROR);
-    startupPublisher.defaultSeverities.add(ErrorLogSeverity.SEVERE_ERROR);
-    startupPublisher.defaultSeverities.add(ErrorLogSeverity.SEVERE_WARNING);
-    startupPublisher.defaultSeverities.add(ErrorLogSeverity.NOTICE);
+    startupPublisher.defaultSeverities.add(Severity.FATAL_ERROR);
+    startupPublisher.defaultSeverities.add(Severity.SEVERE_ERROR);
+    startupPublisher.defaultSeverities.add(Severity.SEVERE_WARNING);
+    startupPublisher.defaultSeverities.add(Severity.NOTICE);
 
     return startupPublisher;
   }
@@ -124,10 +126,9 @@
         }
         else
         {
-          int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-          String message = getMessage(msgID, dn.toString(),
-                                      config.dn().toString());
-          throw new ConfigException(msgID, message);
+          Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+              dn.toString(), config.dn().toString());
+          throw new ConfigException(message);
         }
       }
       for(DN dn: config.getRetentionPolicyDN())
@@ -139,10 +140,9 @@
         }
         else
         {
-          int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-          String message = getMessage(msgID, dn.toString(),
-                                      config.dn().toString());
-          throw new ConfigException(msgID, message);
+          Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+              dn.toString(), config.dn().toString());
+          throw new ConfigException(message);
         }
       }
 
@@ -160,18 +160,16 @@
     }
     catch(DirectoryException e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+          config.dn().toString(), String.valueOf(e));
+      throw new InitializationException(message, e);
 
     }
     catch(IOException e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+          config.dn().toString(), String.valueOf(e));
+      throw new InitializationException(message, e);
 
     }
 
@@ -179,27 +177,27 @@
         config.getDefaultSeverity();
     if(defSevs.isEmpty())
     {
-      defaultSeverities.add(ErrorLogSeverity.FATAL_ERROR);
-      defaultSeverities.add(ErrorLogSeverity.SEVERE_ERROR);
-      defaultSeverities.add(ErrorLogSeverity.SEVERE_WARNING);
+      defaultSeverities.add(Severity.FATAL_ERROR);
+      defaultSeverities.add(Severity.SEVERE_ERROR);
+      defaultSeverities.add(Severity.SEVERE_WARNING);
     } else
     {
       for(ErrorLogPublisherCfgDefn.DefaultSeverity defSev : defSevs)
       {
         if(defSev.toString().equalsIgnoreCase(LOG_SEVERITY_ALL))
         {
-          defaultSeverities.add(ErrorLogSeverity.FATAL_ERROR);
-          defaultSeverities.add(ErrorLogSeverity.INFORMATIONAL);
-          defaultSeverities.add(ErrorLogSeverity.MILD_ERROR);
-          defaultSeverities.add(ErrorLogSeverity.MILD_WARNING);
-          defaultSeverities.add(ErrorLogSeverity.NOTICE);
-          defaultSeverities.add(ErrorLogSeverity.SEVERE_ERROR);
-          defaultSeverities.add(ErrorLogSeverity.SEVERE_WARNING);
+          defaultSeverities.add(Severity.FATAL_ERROR);
+          defaultSeverities.add(Severity.INFORMATION);
+          defaultSeverities.add(Severity.MILD_ERROR);
+          defaultSeverities.add(Severity.MILD_WARNING);
+          defaultSeverities.add(Severity.NOTICE);
+          defaultSeverities.add(Severity.SEVERE_ERROR);
+          defaultSeverities.add(Severity.SEVERE_WARNING);
         }
         else
         {
-          ErrorLogSeverity errorSeverity =
-              ErrorLogSeverity.getByName(defSev.toString());
+          Severity errorSeverity =
+              Severity.parseString(defSev.name());
           if(errorSeverity != null)
           {
             defaultSeverities.add(errorSeverity);
@@ -215,23 +213,22 @@
         int equalPos = overrideSeverity.indexOf('=');
         if (equalPos < 0)
         {
-          int msgID = MSGID_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY;
-          String msg = getMessage(msgID, overrideSeverity);
-          throw new ConfigException(msgID, msg);
+          Message msg =
+              WARN_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY.get(overrideSeverity);
+          throw new ConfigException(msg);
 
         } else
         {
           String categoryName = overrideSeverity.substring(0, equalPos);
-          ErrorLogCategory category = ErrorLogCategory.getByName(categoryName);
+          Category category = Category.valueOf(categoryName);
           if (category == null)
           {
-            int msgID = MSGID_ERROR_LOGGER_INVALID_CATEGORY;
-            String msg = getMessage(msgID, categoryName);
-            throw new ConfigException(msgID, msg);
+            Message msg = WARN_ERROR_LOGGER_INVALID_CATEGORY.get(categoryName);
+            throw new ConfigException(msg);
           } else
           {
-            HashSet<ErrorLogSeverity> severities =
-                new HashSet<ErrorLogSeverity>();
+            HashSet<Severity> severities =
+                new HashSet<Severity>();
             StringTokenizer sevTokenizer =
               new StringTokenizer(overrideSeverity.substring(equalPos+1), ",");
             while (sevTokenizer.hasMoreElements())
@@ -239,23 +236,23 @@
               String severityName = sevTokenizer.nextToken();
               if(severityName.equalsIgnoreCase(LOG_SEVERITY_ALL))
               {
-                severities.add(ErrorLogSeverity.FATAL_ERROR);
-                severities.add(ErrorLogSeverity.INFORMATIONAL);
-                severities.add(ErrorLogSeverity.MILD_ERROR);
-                severities.add(ErrorLogSeverity.MILD_WARNING);
-                severities.add(ErrorLogSeverity.NOTICE);
-                severities.add(ErrorLogSeverity.SEVERE_ERROR);
-                severities.add(ErrorLogSeverity.SEVERE_WARNING);
+                severities.add(Severity.FATAL_ERROR);
+                severities.add(Severity.INFORMATION);
+                severities.add(Severity.MILD_ERROR);
+                severities.add(Severity.MILD_WARNING);
+                severities.add(Severity.NOTICE);
+                severities.add(Severity.SEVERE_ERROR);
+                severities.add(Severity.SEVERE_WARNING);
               }
               else
               {
-                ErrorLogSeverity severity =
-                    ErrorLogSeverity.getByName(severityName);
+                Severity severity =
+                    Severity.parseString(severityName);
                 if (severity == null)
                 {
-                  int msgID = MSGID_ERROR_LOGGER_INVALID_SEVERITY;
-                  String msg = getMessage(msgID, severityName);
-                  throw new ConfigException(msgID, msg);
+                  Message msg =
+                      WARN_ERROR_LOGGER_INVALID_SEVERITY.get(severityName);
+                  throw new ConfigException(msg);
                 } else
                 {
                   severities.add(severity);
@@ -280,7 +277,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(ErrorLogPublisherCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     FileBasedErrorLogPublisherCfg config =
          (FileBasedErrorLogPublisherCfg) configuration;
@@ -291,9 +288,9 @@
       RotationPolicy policy = DirectoryServer.getRotationPolicy(dn);
       if(policy == null)
       {
-        int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-        String message = getMessage(msgID, dn.toString(),
-                                    config.dn().toString());
+        Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+                dn.toString(),
+                config.dn().toString());
         unacceptableReasons.add(message);
         return false;
       }
@@ -303,9 +300,9 @@
       RetentionPolicy policy = DirectoryServer.getRetentionPolicy(dn);
       if(policy == null)
       {
-        int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-        String message = getMessage(msgID, dn.toString(),
-                                    config.dn().toString());
+        Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+                dn.toString(),
+                config.dn().toString());
         unacceptableReasons.add(message);
         return false;
       }
@@ -318,19 +315,18 @@
         int equalPos = overrideSeverity.indexOf('=');
         if (equalPos < 0)
         {
-          int msgID = MSGID_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY;
-          String msg = getMessage(msgID, overrideSeverity);
+          Message msg = WARN_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY.get(
+                  overrideSeverity);
           unacceptableReasons.add(msg);
           return false;
 
         } else
         {
           String categoryName = overrideSeverity.substring(0, equalPos);
-          ErrorLogCategory category = ErrorLogCategory.getByName(categoryName);
+          Category category = Category.valueOf(categoryName);
           if (category == null)
           {
-            int msgID = MSGID_ERROR_LOGGER_INVALID_CATEGORY;
-            String msg = getMessage(msgID, categoryName);
+            Message msg = WARN_ERROR_LOGGER_INVALID_CATEGORY.get(categoryName);
             unacceptableReasons.add(msg);
             return false;
           } else
@@ -342,12 +338,12 @@
               String severityName = sevTokenizer.nextToken();
               if(!severityName.equalsIgnoreCase(LOG_SEVERITY_ALL))
               {
-                ErrorLogSeverity severity =
-                    ErrorLogSeverity.getByName(severityName);
+                Severity severity =
+                    Severity.parseString(severityName);
                 if (severity == null)
                 {
-                  int msgID = MSGID_ERROR_LOGGER_INVALID_SEVERITY;
-                  String msg = getMessage(msgID, severityName);
+                  Message msg = WARN_ERROR_LOGGER_INVALID_SEVERITY.get(
+                          severityName);
                   unacceptableReasons.add(msg);
                   return false;
                 }
@@ -364,7 +360,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      FileBasedErrorLogPublisherCfg config, List<String> unacceptableReasons)
+      FileBasedErrorLogPublisherCfg config, List<Message> unacceptableReasons)
   {
     // Make sure the permission is valid.
     try
@@ -385,9 +381,9 @@
     }
     catch(Exception e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+              config.dn().toString(),
+              stackTraceToSingleLineString(e));
       unacceptableReasons.add(message);
       return false;
     }
@@ -404,34 +400,34 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     Set<ErrorLogPublisherCfgDefn.DefaultSeverity> defSevs =
         config.getDefaultSeverity();
     defaultSeverities.clear();
     if(defSevs.isEmpty())
     {
-      defaultSeverities.add(ErrorLogSeverity.FATAL_ERROR);
-      defaultSeverities.add(ErrorLogSeverity.SEVERE_ERROR);
-      defaultSeverities.add(ErrorLogSeverity.SEVERE_WARNING);
+      defaultSeverities.add(Severity.FATAL_ERROR);
+      defaultSeverities.add(Severity.SEVERE_ERROR);
+      defaultSeverities.add(Severity.SEVERE_WARNING);
     } else
     {
       for(ErrorLogPublisherCfgDefn.DefaultSeverity defSev : defSevs)
       {
         if(defSev.toString().equalsIgnoreCase(LOG_SEVERITY_ALL))
         {
-          defaultSeverities.add(ErrorLogSeverity.FATAL_ERROR);
-          defaultSeverities.add(ErrorLogSeverity.INFORMATIONAL);
-          defaultSeverities.add(ErrorLogSeverity.MILD_ERROR);
-          defaultSeverities.add(ErrorLogSeverity.MILD_WARNING);
-          defaultSeverities.add(ErrorLogSeverity.NOTICE);
-          defaultSeverities.add(ErrorLogSeverity.SEVERE_ERROR);
-          defaultSeverities.add(ErrorLogSeverity.SEVERE_WARNING);
+          defaultSeverities.add(Severity.FATAL_ERROR);
+          defaultSeverities.add(Severity.INFORMATION);
+          defaultSeverities.add(Severity.MILD_ERROR);
+          defaultSeverities.add(Severity.MILD_WARNING);
+          defaultSeverities.add(Severity.NOTICE);
+          defaultSeverities.add(Severity.SEVERE_ERROR);
+          defaultSeverities.add(Severity.SEVERE_WARNING);
         }
         else
         {
-          ErrorLogSeverity errorSeverity =
-              ErrorLogSeverity.getByName(defSev.toString());
+          Severity errorSeverity =
+              Severity.parseString(defSev.name());
           if(errorSeverity != null)
           {
             defaultSeverities.add(errorSeverity);
@@ -448,24 +444,23 @@
         int equalPos = overrideSeverity.indexOf('=');
         if (equalPos < 0)
         {
-          int msgID = MSGID_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY;
-          String msg = getMessage(msgID, overrideSeverity);
+          Message msg = WARN_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY.get(
+                  overrideSeverity);
           resultCode = DirectoryServer.getServerErrorResultCode();
           messages.add(msg);
         } else
         {
           String categoryName = overrideSeverity.substring(0, equalPos);
-          ErrorLogCategory category = ErrorLogCategory.getByName(categoryName);
+          Category category = Category.valueOf(categoryName);
           if (category == null)
           {
-            int msgID = MSGID_ERROR_LOGGER_INVALID_CATEGORY;
-            String msg = getMessage(msgID, categoryName);
+            Message msg = WARN_ERROR_LOGGER_INVALID_CATEGORY.get(categoryName);
             resultCode = DirectoryServer.getServerErrorResultCode();
             messages.add(msg);
           } else
           {
-            HashSet<ErrorLogSeverity> severities =
-                new HashSet<ErrorLogSeverity>();
+            HashSet<Severity> severities =
+                new HashSet<Severity>();
             StringTokenizer sevTokenizer =
               new StringTokenizer(overrideSeverity.substring(equalPos+1), ",");
             while (sevTokenizer.hasMoreElements())
@@ -473,22 +468,22 @@
               String severityName = sevTokenizer.nextToken();
               if(severityName.equalsIgnoreCase(LOG_SEVERITY_ALL))
               {
-                severities.add(ErrorLogSeverity.FATAL_ERROR);
-                severities.add(ErrorLogSeverity.INFORMATIONAL);
-                severities.add(ErrorLogSeverity.MILD_ERROR);
-                severities.add(ErrorLogSeverity.MILD_WARNING);
-                severities.add(ErrorLogSeverity.NOTICE);
-                severities.add(ErrorLogSeverity.SEVERE_ERROR);
-                severities.add(ErrorLogSeverity.SEVERE_WARNING);
+                severities.add(Severity.FATAL_ERROR);
+                severities.add(Severity.INFORMATION);
+                severities.add(Severity.MILD_ERROR);
+                severities.add(Severity.MILD_WARNING);
+                severities.add(Severity.NOTICE);
+                severities.add(Severity.SEVERE_ERROR);
+                severities.add(Severity.SEVERE_WARNING);
               }
               else
               {
-                ErrorLogSeverity severity =
-                    ErrorLogSeverity.getByName(severityName);
+                Severity severity =
+                    Severity.parseString(severityName);
                 if (severity == null)
                 {
-                  int msgID = MSGID_ERROR_LOGGER_INVALID_SEVERITY;
-                  String msg = getMessage(msgID, severityName);
+                  Message msg = WARN_ERROR_LOGGER_INVALID_SEVERITY.get(
+                          severityName);
                   resultCode = DirectoryServer.getServerErrorResultCode();
                   messages.add(msg);
                 } else
@@ -549,9 +544,9 @@
           }
           else
           {
-            int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-            String message = getMessage(msgID, dn.toString(),
-                                        config.dn().toString());
+            Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+                    dn.toString(),
+                    config.dn().toString());
             resultCode = DirectoryServer.getServerErrorResultCode();
             messages.add(message);
           }
@@ -565,9 +560,9 @@
           }
           else
           {
-            int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-            String message = getMessage(msgID, dn.toString(),
-                                        config.dn().toString());
+            Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+                    dn.toString(),
+                    config.dn().toString());
             resultCode = DirectoryServer.getServerErrorResultCode();
             messages.add(message);
           }
@@ -605,9 +600,9 @@
     }
     catch(Exception e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+              config.dn().toString(),
+              stackTraceToSingleLineString(e));
       resultCode = DirectoryServer.getServerErrorResultCode();
       messages.add(message);
 
@@ -635,11 +630,12 @@
   /**
    * {@inheritDoc}
    */
-  public void logError(ErrorLogCategory category,
-                       ErrorLogSeverity severity, String message,
-                       int errorID)
+  public void logError(Message message)
   {
-    HashSet<ErrorLogSeverity> severities = definedSeverities.get(category);
+    Severity severity = message.getDescriptor().getSeverity();
+    Category category = message.getDescriptor().getCategory();
+    int msgId = message.getDescriptor().getId();
+    HashSet<Severity> severities = definedSeverities.get(category);
     if(severities == null)
     {
       severities = defaultSeverities;
@@ -651,9 +647,9 @@
       StringBuilder sb = new StringBuilder();
       sb.append("[");
       sb.append(TimeThread.getLocalTime());
-      sb.append("] category=").append(category.getCategoryName()).
-          append(" severity=").append(severity.getSeverityName()).
-          append(" msgID=").append(String.valueOf(errorID)).
+      sb.append("] category=").append(category).
+          append(" severity=").append(severity).
+          append(" msgID=").append(msgId).
           append(" msg=").append(message);
 
       writer.writeRecord(sb.toString());
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/ThreadFilterTextErrorLogPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/ThreadFilterTextErrorLogPublisher.java
index 0608ba2..221008e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/ThreadFilterTextErrorLogPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/ThreadFilterTextErrorLogPublisher.java
@@ -26,14 +26,16 @@
  */
 package org.opends.server.loggers;
 
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.DN;
 import org.opends.server.admin.std.server.ErrorLogPublisherCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.api.ErrorLogPublisher;
 import org.opends.server.util.TimeThread;
+import org.opends.messages.Message;
+import org.opends.messages.Severity;
+import org.opends.messages.Category;
 
 /**
  * This class provides an implementation of an error logger where only messages
@@ -80,23 +82,26 @@
   /**
    * {@inheritDoc}
    */
-  public void logError(ErrorLogCategory category,
-                       ErrorLogSeverity severity, String message,
-                       int errorID)
+  public void logError(Message message)
   {
-    Thread currentThread = Thread.currentThread();
-    if(this.thread.equals(currentThread) ||
-        this.thread.getThreadGroup().equals(currentThread.getThreadGroup()))
-    {
-      StringBuilder sb = new StringBuilder();
-      sb.append("[");
-      sb.append(TimeThread.getLocalTime());
-      sb.append("] category=").append(category.getCategoryName()).
-          append(" severity=").append(severity.getSeverityName()).
-          append(" msgID=").append(String.valueOf(errorID)).
-          append(" msg=").append(message);
+    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()))
+      {
+        StringBuilder sb = new StringBuilder();
+        sb.append("[");
+        sb.append(TimeThread.getLocalTime());
+        sb.append("] category=").append(category).
+            append(" severity=").append(severity).
+            append(" msgID=").append(msgId).
+            append(" msg=").append(message);
 
-      this.writer.writeRecord(sb.toString());
+        this.writer.writeRecord(sb.toString());
+      }
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
index 1f81104..e06966f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers;
+import org.opends.messages.Message;
 
 import org.opends.server.util.TimeThread;
 import org.opends.server.admin.std.server.TimeLimitLogRotationPolicyCfg;
@@ -34,6 +35,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 
+
 import java.util.List;
 import java.util.ArrayList;
 
@@ -66,7 +68,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      TimeLimitLogRotationPolicyCfg config, List<String> unacceptableReasons)
+      TimeLimitLogRotationPolicyCfg config, List<Message> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -81,7 +83,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     timeInterval = config.getRotationInterval();
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java
index 66caf42..4755379 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.loggers.debug;
+import org.opends.messages.Message;
 
 import java.util.*;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -45,8 +46,8 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ConfigMessages.*;
+import static org.opends.messages.ConfigMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 /**
@@ -182,7 +183,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(DebugLogPublisherCfg config,
-                                              List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     return !config.isEnabled() ||
         isJavaClassAcceptable(config, unacceptableReasons);
@@ -192,7 +193,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(DebugLogPublisherCfg config,
-                                               List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     return !config.isEnabled() ||
         isJavaClassAcceptable(config, unacceptableReasons);
@@ -206,7 +207,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     config.addDebugChangeListener(this);
 
@@ -221,14 +222,15 @@
       }
       catch(ConfigException e)
       {
-        messages.add(e.getMessage());
+        messages.add(e.getMessageObject());
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
       catch (Exception e)
       {
-        int msgID = MSGID_CONFIG_LOGGER_CANNOT_CREATE_LOGGER;
-        messages.add(getMessage(msgID, String.valueOf(config.dn().toString()),
-                                stackTraceToSingleLineString(e)));
+
+        messages.add(ERR_CONFIG_LOGGER_CANNOT_CREATE_LOGGER.get(
+                String.valueOf(config.dn().toString()),
+                stackTraceToSingleLineString(e)));
         resultCode = DirectoryServer.getServerErrorResultCode();
       }
     }
@@ -244,7 +246,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     DN dn = config.dn();
 
@@ -294,7 +296,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(DebugLogPublisherCfg config,
-                                               List<String> unacceptableReasons)
+                                             List<Message> unacceptableReasons)
   {
     DN dn = config.dn();
 
@@ -343,7 +345,7 @@
   }
 
   private boolean isJavaClassAcceptable(DebugLogPublisherCfg config,
-                                        List<String> unacceptableReasons)
+                                        List<Message> unacceptableReasons)
   {
     String className = config.getJavaImplementationClass();
     DebugLogPublisherCfgDefn d = DebugLogPublisherCfgDefn.getInstance();
@@ -356,10 +358,10 @@
       theClass = pd.loadClass(className, DebugLogPublisher.class);
       publisher = theClass.newInstance();
     } catch (Exception e) {
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  String.valueOf(e));
+      Message message = ERR_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS.get(
+              className,
+              config.dn().toString(),
+              String.valueOf(e));
       unacceptableReasons.add(message);
       return false;
     }
@@ -379,10 +381,10 @@
         return false;
       }
     } catch (Exception e) {
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  String.valueOf(e));
+      Message message = ERR_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS.get(
+              className,
+              config.dn().toString(),
+              String.valueOf(e));
       unacceptableReasons.add(message);
       return false;
     }
@@ -414,19 +416,15 @@
     {
       // Rethrow the exceptions thrown be the invoked method.
       Throwable e = ite.getTargetException();
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  stackTraceToSingleLineString(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS.get(
+          className, config.dn().toString(), stackTraceToSingleLineString(e));
+      throw new ConfigException(message, e);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS;
-      String message = getMessage(msgID, className,
-                                  config.dn().toString(),
-                                  String.valueOf(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS.get(
+          className, config.dn().toString(), String.valueOf(e));
+      throw new ConfigException(message, e);
     }
 
     // The debug publisher has been successfully initialized.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
index c9bfaa3..2b250c4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.loggers.debug;
+import org.opends.messages.Message;
 
 import org.opends.server.api.*;
 import org.opends.server.loggers.*;
@@ -44,13 +45,13 @@
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
-import static org.opends.server.messages.ConfigMessages.
-    MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-import static org.opends.server.messages.ConfigMessages.
-    MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-import static org.opends.server.messages.ConfigMessages.
-    MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ConfigMessages.
+    ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
+import static org.opends.messages.ConfigMessages.
+    WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
+import static org.opends.messages.ConfigMessages.
+    ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
+
 
 import java.util.*;
 import java.io.File;
@@ -161,10 +162,9 @@
         }
         else
         {
-          int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-          String message = getMessage(msgID, dn.toString(),
-                                      config.dn().toString());
-          throw new ConfigException(msgID, message);
+          Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+              dn.toString(), config.dn().toString());
+          throw new ConfigException(message);
         }
       }
       for(DN dn: config.getRetentionPolicyDN())
@@ -176,10 +176,9 @@
         }
         else
         {
-          int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-          String message = getMessage(msgID, dn.toString(),
-                                      config.dn().toString());
-          throw new ConfigException(msgID, message);
+          Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+              dn.toString(), config.dn().toString());
+          throw new ConfigException(message);
         }
       }
 
@@ -196,18 +195,16 @@
     }
     catch(DirectoryException e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+          config.dn().toString(), String.valueOf(e));
+      throw new InitializationException(message, e);
 
     }
     catch(IOException e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+          config.dn().toString(), String.valueOf(e));
+      throw new InitializationException(message, e);
 
     }
 
@@ -258,7 +255,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(DebugLogPublisherCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     FileBasedDebugLogPublisherCfg config =
          (FileBasedDebugLogPublisherCfg) configuration;
@@ -269,9 +266,9 @@
       RotationPolicy policy = DirectoryServer.getRotationPolicy(dn);
       if(policy == null)
       {
-        int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-        String message = getMessage(msgID, dn.toString(),
-                                    config.dn().toString());
+        Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+                dn.toString(),
+                config.dn().toString());
         unacceptableReasons.add(message);
         return false;
       }
@@ -281,9 +278,9 @@
       RetentionPolicy policy = DirectoryServer.getRetentionPolicy(dn);
       if(policy != null)
       {
-        int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-        String message = getMessage(msgID, dn.toString(),
-                                    config.dn().toString());
+        Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+                dn.toString(),
+                config.dn().toString());
         unacceptableReasons.add(message);
         return false;
       }
@@ -296,7 +293,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      FileBasedDebugLogPublisherCfg config, List<String> unacceptableReasons)
+      FileBasedDebugLogPublisherCfg config, List<Message> unacceptableReasons)
   {
     // Make sure the permission is valid.
     try
@@ -317,9 +314,9 @@
     }
     catch(Exception e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                   stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+              config.dn().toString(),
+              stackTraceToSingleLineString(e));
       unacceptableReasons.add(message);
       return false;
     }
@@ -336,7 +333,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     //Get the default/global settings
     LogLevel logLevel =
@@ -410,9 +407,9 @@
           }
           else
           {
-            int msgID = MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY;
-            String message = getMessage(msgID, dn.toString(),
-                                        config.dn().toString());
+            Message message = ERR_CONFIG_LOGGER_INVALID_ROTATION_POLICY.get(
+                    dn.toString(),
+                    config.dn().toString());
             resultCode = DirectoryServer.getServerErrorResultCode();
             messages.add(message);
           }
@@ -426,9 +423,9 @@
           }
           else
           {
-            int msgID = MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY;
-            String message = getMessage(msgID, dn.toString(),
-                                        config.dn().toString());
+            Message message = WARN_CONFIG_LOGGER_INVALID_RETENTION_POLICY.get(
+                    dn.toString(),
+                    config.dn().toString());
             resultCode = DirectoryServer.getServerErrorResultCode();
             messages.add(message);
           }
@@ -466,9 +463,9 @@
     }
     catch(Exception e)
     {
-      int msgID = MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, config.dn().toString(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+              config.dn().toString(),
+              stackTraceToSingleLineString(e));
       resultCode = DirectoryServer.getServerErrorResultCode();
       messages.add(message);
 
@@ -481,7 +478,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(DebugTargetCfg config,
-                                              List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     return getTraceSettings(config.getDebugScope()) == null;
   }
@@ -490,7 +487,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(DebugTargetCfg config,
-                                               List<String> unacceptableReasons)
+                                              List<Message> unacceptableReasons)
   {
     // A delete should always be acceptable.
     return true;
@@ -504,7 +501,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     addTraceSettings(config.getDebugScope(), new TraceSettings(config));
 
@@ -521,7 +518,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     removeTraceSettings(config.getDebugScope());
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TraceSettings.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TraceSettings.java
index bfbd4d8..e77bf78 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TraceSettings.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TraceSettings.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.loggers.debug;
+import org.opends.messages.Message;
 
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DebugLogCategory;
@@ -37,6 +38,7 @@
 import org.opends.server.admin.std.meta.DebugTargetCfgDefn;
 import org.opends.server.admin.std.server.DebugTargetCfg;
 
+
 import java.util.Set;
 import java.util.HashSet;
 import java.util.ArrayList;
@@ -193,8 +195,9 @@
   /**
    * {@inheritDoc}
    */
-  public boolean isConfigurationChangeAcceptable(DebugTargetCfg config,
-                                               List<String> unacceptableReasons)
+  public boolean isConfigurationChangeAcceptable(
+          DebugTargetCfg config,
+          List<Message> 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.
@@ -209,7 +212,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     // We can assume that the target scope did not change since its the
     // naming attribute. Changing it would result in a modify DN.
@@ -284,7 +287,7 @@
                 stackDepth = Integer.valueOf(keyword.substring(depthStart+1));
               }
               catch(NumberFormatException nfe)
-              {
+              { // TODO: i18n
                 System.err.println("The keyword " + STACK_DUMP_KEYWORD +
                     " contains an invalid depth value. The complete stack " +
                     "will be included.");
@@ -314,7 +317,7 @@
 
           if(keyword.length() == INCLUDE_CATEGORY_KEYWORD.length() ||
               categoryStart != INCLUDE_CATEGORY_KEYWORD.length())
-          {
+          { // TODO: i18n
             System.err.println("The keyword " + INCLUDE_CATEGORY_KEYWORD +
                 " does not contain an equal sign to define the set of " +
                 "categories to include. All categories will be included.");
@@ -331,7 +334,7 @@
                 includeCategories.add(DebugLogCategory.parse(category));
               }
               catch(IllegalArgumentException iae)
-              {
+              { // TODO: i18n
                 System.err.println("The keyword " + INCLUDE_CATEGORY_KEYWORD +
                     " contains an invalid debug log category: " +
                     iae.toString() + ". It will be ignored.");
@@ -347,7 +350,7 @@
 
           if(keyword.length() == LEVEL_KEYWORD.length() ||
               levelStart != LEVEL_KEYWORD.length())
-          {
+          { // TODO: i18n
             System.err.println("The keyword " + LEVEL_KEYWORD +
                 " does not contain an equal sign to specify the log level. " +
                 "Default level of " + level.toString() + " will be used.");
@@ -359,7 +362,7 @@
               level = LogLevel.parse(keyword.substring(levelStart+1));
             }
             catch(IllegalArgumentException iae)
-            {
+            {  // TODO: i18n
               System.err.println("The keyword " + LEVEL_KEYWORD +
                   " contains an invalid debug log level: " +
                   iae.toString() + ". Default level of " + level.toString() +
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/AciMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/AciMessages.java
deleted file mode 100644
index 71d0cc9..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/AciMessages.java
+++ /dev/null
@@ -1,1522 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
- */
-
-package org.opends.server.messages;
-
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.config.ConfigConstants.ATTR_AUTHZ_GLOBAL_ACI;
-
-/**
- * The AciMessages class defines the set of message IDs and default format
- * strings for messages associated with the dseecompat access control
- * implementation.
- */
-public class AciMessages {
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value cannot be parsed because it failed the non-specific regular
-     * expression check during the initial ACI decode process. This takes one
-     * argument, which is the string representation of the "aci" attribute
-     * type value.
-     */
-    public static final int MSGID_ACI_SYNTAX_GENERAL_PARSE_FAILED =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 1;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid version string. This
-     * takes one argument, which is the version string parsed from the
-     * "aci" attribute type value.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVAILD_VERSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 2;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid access type string. This
-     * takes one argument, which is the access type string parsed from the
-     * "aci" attribute type value.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_ACCESS_TYPE_VERSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 3;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid rights string. This
-     * takes one argument, which is the rights string parsed from the
-     * "aci" attribute type value.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_RIGHTS_SYNTAX =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 4;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid rights keyword. This
-     * takes one argument, which is the rights keyword string parsed from the
-     * rights string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_RIGHTS_KEYWORD =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 5;
-
-    /**
-     * The message ID for the message that will be used if an ACI bind rule
-     * value failed parsing because it starts with an open parenthesis,
-     * but does not contain a matching close parenthesis.  This takes one
-     * argument, which is the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_BIND_RULE_MISSING_CLOSE_PAREN =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_MILD_ERROR | 6;
-
-    /**
-     * The message ID for the message that will be used if an ACI bind rule
-     * value failed parsing because it is an invalid bind rule syntax. This
-     * takes one argument, which is the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_BIND_RULE_SYNTAX =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_MILD_ERROR | 7;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid bind rule keyword. This
-     * takes one argument, which is the bind rule keyword string parsed from
-     * the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 8;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid bind rule operator. This
-     * takes one argument, which is the bind rule operator string parsed
-     * from the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_BIND_RULE_OPERATOR =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 9;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of a missing bind rule expression
-     * string. This takes one argument, which is the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_MISSING_BIND_RULE_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 10;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid bind rule boolean
-     * operator. This takes one argument, which is the bind rule boolean
-     * operator string parsed from the bind rule string.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_BIND_RULE_BOOLEAN_OPERATOR =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 11;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid bind rule keyword,
-     * keyword operation combination. This takes two arguments, which are the
-     * bind rule keyword string and the bind rule keyword operator parsed from
-     * the bind rule string.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD_OPERATOR_COMBO =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 12;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule userdn LDAP URL failed
-     * to decode.  This takes one argument the message from the LDAP
-     * URL decode DirectoryException.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_USERDN_URL =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 13;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule roledn expression failed
-     * to parse.  This takes one argument, which is the roledn expression
-     * string parsed from the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_ROLEDN_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 14;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule roledn LDAP URL failed
-     * to decode.  This takes one argument the message from the LDAP
-     * URL decode DirectoryException.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_ROLEDN_URL =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 15;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule groupdn expression failed
-     * to parse.  This takes one argument, which is the groupdn expression
-     * string parsed from the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_GROUPDN_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 16;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule groupdn LDAP URL failed
-     * to decode.  This takes one argument the message from the LDAP
-     * URL decode DirectoryException.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_GROUPDN_URL =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 17;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule ip keyword expression
-     * network mask value did not match the expression network address value.
-     * For example, the ACI has a IPV6 network mask; but the internet
-     * address part is IPV4. This takes two arguments, which are the
-     * bind rule ip netmask string and the bind rule ip inet address
-     * parsed from the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_ADDRESS_FAMILY_MISMATCH =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 18;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule ip keyword expression
-     * failed to parse because the number of bits specified to match the
-     * network was not valid for the inet address specified. This takes
-     * two arguments, which an string specifying the address type
-     * (inet6address, inet4address) and an error message.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_NETWORK_BIT_MATCH =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 19;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule ip expression failed
-     * to decode.  This takes one argument, the message from the
-     * thrown exception.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_IP_CRITERIA_DECODE =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 20;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule ip expression failed
-     * to parse.  This takes one argument, which is the ip expression
-     * string parsed from the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_IP_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 21;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule dns expression failed
-     * to parse.  This takes one argument, which is the dns expression
-     * string parsed from the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_DNS_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 22;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule dns expression failed
-     * to parse because a wild-card was not in the leftmost position.
-     * This takes one argument, which is the dns expression string parsed
-     * from the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_DNS_WILDCARD =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 23;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule dayofweek expression failed
-     * to parse.  This takes one argument, which is the dayofweek expression
-     * string parsed from the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_DAYOFWEEK =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING |24;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule timeofday expression failed
-     * to parse.  This takes one argument, which is the timeofday expression
-     * string parsed from the bind rule string.
-     */
-
-    public static final int MSGID_ACI_SYNTAX_INVALID_TIMEOFDAY =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING |25;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule timeofday expression failed
-     * to parse because the timeofday was not in a valid range.  This takes one
-     * argument, which is the timeofday expression string parsed from the
-     * bind rule string.
-     */
-
-    public static final int MSGID_ACI_SYNTAX_INVALID_TIMEOFDAY_RANGE =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING |26;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule authmethod expression failed
-     * to parse.  This takes one argument, which is the authmethod expression
-     * string parsed from the bind rule string.
-     */
-
-    public static final int MSGID_ACI_SYNTAX_INVALID_AUTHMETHOD_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING |27;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule userattr expression failed
-     * to decode.  This takes one argument, the message from the
-     * thrown exception.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_USERATTR_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 28;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule userattr expression value
-     * is not supported.  This takes one argument, which is the userattr
-     * expression string parsed from the bind rule string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_USERATTR_KEYWORD =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 29;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule userattr expression
-     * inheritance pattern did not parse.  This takes one argument, which
-     * is the userattr expression inheritance pattern string parsed
-     * from the bind rule string.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_USERATTR_INHERITANCE_PATTERN =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 30;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule userattr expression
-     * inheritance level exceeded the max value.  This takes two arguments,
-     * which are the userattr expression inheritance pattern string parsed
-     * from the bind rule string and the max leval value.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_MAX_USERATTR_INHERITANCE_LEVEL_EXCEEDED =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 31;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule userattr expression
-     * inheritance level was non-numeric.  This takes one argument,
-     * which is the userattr expression inheritance level pattern string
-     * parsed from the bind rule string.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_INHERITANCE_VALUE =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 32;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a target rule had an invalid syntax.
-     * This takes one argument, which is the target rule string
-     * parsed from the "aci" attribute type value string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_TARGET_SYNTAX =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 33;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid target keyword. This
-     * takes one argument, which is the target keyword string parsed
-     * from the "aci" attribute type value string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_TARGET_KEYWORD =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 34;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid target keyword operator.
-     * This takes two arguments, which  are the target keyword operator string
-     * parsed from the "aci" attribute type value string and the keyword string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_TARGET_NOT_OPERATOR =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 35;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of a target keyword is not supported
-     * at this time. This takes one argument, which is the unsupported target
-     * keyword string parsed from the "aci" attribute type value string.
-     */
-    public static final int MSGID_ACI_SYNTAX_TARGET_KEYWORD_NOT_SUPPORTED =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 36;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of a target keyword was seen multiple
-     * times in the value. This takes two arguments, which are the target
-     * keyword string parsed from the "aci" attribute type value string and
-     * the "aci" attribute type value string.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 37;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid target keyword
-     * operator. This takes one argument, which is the target keyword
-     * operator string parsed from the "aci" attribute type value string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_TARGETS_OPERATOR =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 38;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid targetscope expression.
-     * This takes one argument, which is the targetscope expression
-     * string parsed from the "aci" attribute type value string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_TARGETSCOPE_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 39;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of an invalid target keyword
-     * expression.  This takes one argument, which is the target keyword
-     * expression string parsed from the "aci" attribute type value string.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_TARGETKEYWORD_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 40;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of a target keyword DN is not a
-     * descendant of the ACI entry DN. This takes two arguments, which are
-     * the target keyword DN string parsed from the "aci" attribute type value
-     * string and the DN of the "aci" attribute type entry.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_TARGET_DN_NOT_DESCENDENTOF =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 41;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of a targetattr keyword expression
-     * is invalid. This takes one argument, which is the targetattr
-     * keyword expression string parsed from the "aci" attribute type value
-     * string.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_TARGETATTRKEYWORD_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 42;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value failed parsing because of a targetfilter keyword expression
-     * string is invalid. This takes one argument, which is the targetfilter
-     * keyword expression string parsed from the "aci" attribute type value
-     * string.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_TARGETFILTERKEYWORD_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 43;
-
-    /**
-     * The message ID for the ACI message that will be generated when a client
-     * attempts to add an entry with the "aci" attribute type
-     * and they do not have the required "modify-acl"privilege.  This takes two
-     * arguments, which are the string representation of the entry DN of the
-     * entry being added, and the string representation of the
-     * authorization DN.
-     */
-    public static final int MSGID_ACI_ADD_FAILED_PRIVILEGE =
-        CATEGORY_MASK_ACCESS_CONTROL  | 44;
-
-
-    /**
-     * The message ID for the ACI message that will be generated when a client
-     * attempts to perform a modification on an "aci" attribute type
-     * and they do not have the required "modify-acl"privilege.  This takes two
-     * arguments, which are the string representation of the entry DN of the
-     * entry being modified, and the string representation of the
-     * authorization DN.
-     */
-    public static final int MSGID_ACI_MODIFY_FAILED_PRIVILEGE =
-        CATEGORY_MASK_ACCESS_CONTROL  | 45;
-
-    /**
-     * The message ID for the ACI message that will be generated when a client
-     * attempts to add an entry with the "aci" attribute type
-     * and the ACI decode failed because of an syntax error.  This takes one
-     * argument, which is the message string thrown by the AciException.
-     */
-    public static final int MSGID_ACI_ADD_FAILED_DECODE =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 46;
-
-    /**
-     * The message ID for the ACI message that will be generated when a client
-     * attempts to perform a modification on an "aci" attribute type
-     * and the ACI decode failed because of a syntax error.  This takes one
-     * argument, which is the message string thrown by the AciException.
-     */
-    public static final int MSGID_ACI_MODIFY_FAILED_DECODE =
-       CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 47;
-
-    /**
-     * The message ID for the ACI message that will be generated when
-     * an ACI decode failed because of an syntax error. This message is usually
-     * generated by an invalid ACI that was added during import which
-     * fails the decode at server startup. This takes three
-     * argument, which are the ACI string, the DN of the entry containing the
-     * ACI, and the message string thrown by the AciException.
-     */
-    public static final int MSGID_ACI_ADD_LIST_FAILED_DECODE =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 48;
-
-    /**
-     * The message ID for the ACI message that will be generated the server
-     * searches an directory context for "aci" attribute types and finds none.
-     * This takes one argument, which is the DN of the directory context.
-     */
-    public static final int MSGID_ACI_ADD_LIST_NO_ACIS =
-        CATEGORY_MASK_ACCESS_CONTROL | 49;
-
-    /**
-     * The message ID for the ACI message that will be generated the server
-     * searches an directory context for "aci" attribute types and finds some.
-     * This takes two arguments, which are the DN of the directory context,
-     * the number of valid ACIs decoded.
-     */
-    public static final int MSGID_ACI_ADD_LIST_ACIS =
-        CATEGORY_MASK_ACCESS_CONTROL | 50;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule userattr roledn expression
-     * inheritance pattern did not parse.  This takes one argument, which
-     * is the userattr expression inheritance pattern string parsed
-     * from the bind rule string.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_USERATTR_ROLEDN_INHERITANCE_PATTERN =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 51;
-
-   /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a targattrfilters keyword expression
-     * did not parse because the operation was invalid.  This takes two
-     * arguments, which are the targattrfilters expression parsed from the ACI
-     * and a message further clarifying the error.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_OPERATION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 52;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a targattrfiltesr keyword expression
-     * did not parse.  This takes one argument, which is the targattrfilters
-     * expression parsed from the ACI.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 53;
-
-      /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because the operation tokens targattrfilters
-     * in the expresssion are the same.  This takes one argument, which is
-     * the targattrfilters expression parsed from the ACI.
-     */
-    public static
-    final int MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_OPS_MATCH =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 54;
-
-    /**
-    * The message ID for the message that will be used if an "aci" attribute
-    * type value parse failed because the there are two many targattrfilters
-    * filter list statements in the ACI.  This takes one argument, which is
-    * the targattrfilters expression parsed from the ACI.
-    */
-   public static
-   final int MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_MAX_FILTER_LISTS =
-       CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 55;
-
-  /**
-    * The message ID for the message that will be used if an "aci" attribute
-    * type value parse failed because the targattrfilters expression statement
-    * is in the wrong format.  This takes one argument, which is
-    * the targattrfilters expression parsed from the ACI.
-    */
-   public static
-   final int MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LIST_FORMAT =
-       CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 56;
-
-    /**
-      * The message ID for the message that will be used if an "aci" attribute
-      * type value parse failed because one or more targattrfilters filter
-      * statements are invalid.  This takes two arguments, which are
-      * the targattrfilters expression parsed from the ACI and an error
-      * message from the createFilterFromString method.
-      */
-     public static
-     final int MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_FILTER =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 57;
-
-     /**
-      * The message ID for the message that will be used if an "aci" attribute
-      * type value parse failed because one or more targattrfilters filter
-      * statements contain invalid attribute type names.  This takes one
-      * argument, which is the targattrfilters expression parsed from the ACI.
-      */
-     public static final
-        int MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_ATTR_FILTER =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 58;
-
-     /**
-      * The message ID for the message that will be used if an "aci" attribute
-      * type name is invalid.  This takes one
-      * argument, which is the attribute type name parsed from the ACI.
-      */
-     public static final
-        int MSGID_ACI_SYNTAX_INVALID_ATTRIBUTE_TYPE_NAME =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 59;
-
-     /**
-      * The message ID for the message that will be used if a bind rule
-      * authmethod expression contains a SASL mechanism that is not currrently
-      * registered in the server.  This takes one argument, which is the
-      * SASL mechanism string parsed from the authmethod expression.
-      */
-     public static final
-        int MSGID_ACI_SYNTAX_DUBIOUS_AUTHMETHOD_SASL_MECHANISM =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_NOTICE | 60;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * includes a dns hostname of "localhost" that does not match the canonical
-     * representation which means that it will likely never match.  This takes
-     * three arguments, which are the DNS bind rule expression, the hostname
-     * used in the access control rule, and the canonical hostname associated
-     * with that name.
-     */
-    public static final int MSGID_ACI_LOCALHOST_DOESNT_MATCH_CANONICAL_VALUE =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 61;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * includes a dns hostname that does not match the canonical representation,
-     * which means that it will likely never match.  This takes four arguments,
-     * which are the DNS bind rule expression, the hostname used in the access
-     * control rule, an IP address to which that name resolves, and the
-     * canonical hostname associated with that IP address.
-     */
-    public static final int MSGID_ACI_HOSTNAME_DOESNT_MATCH_CANONICAL_VALUE =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 62;
-
-    /**
-     * The message ID for the message that will be used if an error occurs while
-     * attempting to determine whether a DNS hostname used in an access control
-     * rule matches its canonical representation.  This takes three arguments,
-     * which are the hostname used in the access control rule, the DNS bind rule
-     * expression, and a string representation of the exception that was caught.
-     */
-    public static final int MSGID_ACI_ERROR_CHECKING_CANONICAL_HOSTNAME =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 63;
-
-    /**
-     * The message ID for the message that will be used as the description of
-     * the configuration attribute specifying a global ACI.
-     */
-    public static final
-    int MSGID_ACI_DESCRIPTION_GLOBAL_ACI = CATEGORY_MASK_ACCESS_CONTROL | 64;
-
-
-    /**
-     * The message ID for the ACI message that will be generated the server
-     * searches an directory context for Global "aci" attribute types and
-     * finds none. This takes no arguments.
-     */
-    public static final int MSGID_ACI_ADD_LIST_NO_GLOBAL_ACIS =
-        CATEGORY_MASK_ACCESS_CONTROL | 65;
-
-    /**
-     * The message ID for the ACI message that will be generated the server
-     * searches the config entry for Global "aci" attribute types and
-     * finds some. This takes one argument, which is the number of
-     * valid Global ACIs decoded.
-     */
-    public static final int MSGID_ACI_ADD_LIST_GLOBAL_ACIS =
-        CATEGORY_MASK_ACCESS_CONTROL | 66;
-
-    /**
-     * The message ID for the ACI message that will be generated when the server
-     * searches the config entry for Global "aci" attribute types and
-     * an error occurs. This takes one argument, which is the DN of the
-     * access control configuration entry.
-     */
-    public static final int MSGID_ACI_HANDLER_FAIL_PROCESS_GLOBAL_ACI =
-        CATEGORY_MASK_ACCESS_CONTROL | 67;
-
-    /**
-     * The message ID for the ACI message that will be generated when the server
-     * searches the config system for "aci" attribute types and
-     * an error occurs. This takes no arguments.
-     */
-    public static final int MSGID_ACI_HANDLER_FAIL_PROCESS_ACI =
-        CATEGORY_MASK_ACCESS_CONTROL | 68;
-
-    /**
-     * The message ID for the message that will be used if a DN pattern failed
-     * parsing because it contained consecutive wildcards in an attribute value.
-     * This takes one argument, which is the invalid DN pattern string.
-     */
-    public static final int MSGID_PATTERN_DN_CONSECUTIVE_WILDCARDS_IN_VALUE =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 69;
-
-
-    /**
-     * The message ID for the message that will be used if a DN pattern failed
-     * parsing because it uses wildcards for substring matching on an attribute
-     * type.  This takes one argument, which is the invalid DN pattern string.
-     */
-    public static final int MSGID_PATTERN_DN_TYPE_CONTAINS_SUBSTRINGS =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 70;
-
-
-    /**
-     * The message ID for the message that will be used if a DN pattern failed
-     * parsing because it contained a wildcard match on an attribute type
-     * in a multi-valued RDN.  This takes one argument, which is the invalid
-     * DN pattern string.
-     */
-    public static final int MSGID_PATTERN_DN_TYPE_WILDCARD_IN_MULTIVALUED_RDN =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 71;
-
-   /**
-     * The message ID for the message that will be used if the server
-     * is unable to obtain a lock on a ModifyDN new superior entry.
-     * This takes a single argument, which is the DN of the new
-     * superior entry.
-     */
-   public static final int MSGID_ACI_HANDLER_CANNOT_LOCK_NEW_SUPERIOR_USER =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 72;
-
-  /**
-   * The message ID for the message that will be used if a attribute type with
-   * a DN syntax failed to DN decode in the selfwrite access checking. This
-   * takes one argument, which is the invalid DN string.
-   */
-  public static final int MSGID_ACI_NOT_VALID_DN =
-       CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 73;
-
-  /**
-   * The message ID for the message that will be used if a targetattr
-   * keyword expression contains an error when a each token in an targetattr
-   * expression was parsed. This takes one argument, which is the expression
-   * string that caused the error.
-   */
-  public static final int MSGID_ACI_TARGETATTR_INVALID_ATTR_TOKEN =
-          CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 74;
-
-
-  /**
-   * The message ID for the message that will be used if a roledn
-   * keyword expression is parsed. The roledn keyword is not supported.
-   * This takes one argument, which is the roledn expression string.
-   */
-  public static final int MSGID_ACI_SYNTAX_ROLEDN_NOT_SUPPORTED =
-       CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 75;
-
-   /**
-   * The message ID for the message that will be used if there are ACI decode
-   * failures at server initialization time or during a backend initialization.
-   * This takes one argument, which is the error message from the ACI decode
-   * exception.
-   */
-  public static final int MSGID_ACI_SERVER_DECODE_FAILED =
-       CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 76;
-
-
-   /**
-   * The message ID for the message that will be used if there are ACI decode
-   * failures at server initialization time or during a backend initialization
-   * causing the server is being put in lockdown mode. The takes no arguments.
-   */
-  public static final int MSGID_ACI_ENTER_LOCKDOWN_MODE =
-       CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 77;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule userattr LDAP URL failed
-     * to decode.  This takes one argument the message from the LDAP
-     * URL decode DirectoryException.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_USERATTR_URL =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 78;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule userattr LDAP URL contained
-     * a null base DN.  This takes one argument the ldap URL from the bind rule
-     * expression.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_USERATTR_BASEDN_URL =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 79;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a bind rule userattr LDAP URL attribute
-     * field either contained more than one attribute or the field was null.
-     * This takes one argument the ldap URL from the bind rule expression.
-     */
-    public static final int MSGID_ACI_SYNTAX_INVALID_USERATTR_ATTR_URL =
-        CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 80;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse fails beacause a bind rule IP field had an invalid
-     * prefix format. This takes one argument, which is the IP field from the
-     * bind rule expression.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_INVALID_PREFIX_FORMAT =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 81;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse fails beacause a bind rule IP field had an invalid
-     * prefix value. This takes one argument, which is the IP field from the
-     * bind rule expression.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_INVALID_PREFIX_VALUE =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 82;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse fails beacause a bind rule IP field has an
-     * prefix value that is not numeric. This takes one argument, which is
-     * the IP field from the bind rule expression.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_PREFIX_NOT_NUMERIC =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 83;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse fails beacause a bind rule IP field IPv4 address has an
-     * invalid format. This takes one argument, which is
-     * the IP field from the bind rule expression.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_INVALID_IPV4_FORMAT =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 84;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse fails beacause a bind rule IP field IPv4 address has an
-     * invalid value. This takes one argument, which is
-     * the IP field from the bind rule expression.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_INVALID_IPV4_VALUE =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 85;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse fails beacause a bind rule IP field IPv4 address has an
-     * non-numeric value. This takes one argument, which is
-     * the IP field from the bind rule expression.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_IPV4_NOT_NUMERIC =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 86;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse fails beacause a bind rule IP field IPv6 address
-     * contains a wildcard character '*'. This takes one argument, which is
-     * the IP field from the bind rule expression.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_IPV6_WILDCARD_INVALID =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 87;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse fails beacause a bind rule IP field IPv6 address
-     * has an invalid format. This takes otwo arguments, which are
-     * the IP field from the bind rule expression and the message from the
-     * IPv6 parsing method.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_INVALID_IPV6_FORMAT =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 88;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse fails beacause a bind rule IP field had an invalid
-     * netmask format. This takes one argument, which is the IP field from the
-     * bind rule expression.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_INVALID_NETMASK_FORMAT =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 89;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse fails beacause a bind rule IP field had an invalid
-     * netmask value. This takes one argument, which is the IP field from the
-     * bind rule expression.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_INVALID_NETMASK =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 90;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because a targetcontrol keyword expression
-     * did not parse.  This takes one argument, which is the targetcontrol
-     * expression from the ACI.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_INVALID_TARGETCONTROL_EXPRESSION =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 91;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value cannot be parsed because numeric OID contained an
-     * illegal character.  This takes three arguments, which are the provided
-     * value, the illegal character, and the position of that character.
-     */
-     public static final int
-            MSGID_ACI_SYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID =
-            CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 92;
-
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value cannot be parsed because the OID contained two
-     * consecutive periods.  This takes two arguments, which are the provided
-     * value and the position of the second period.
-     */
-    public static final int
-            MSGID_ACI_SYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID =
-            CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 93;
-
-     /**
-     * The message ID for the message that will be used the ACI handler cannot
-     * decode an geteffectiverights control. This takes one argument, the
-     * message from the decode exception.
-     */
-    public static final int
-            MSGID_ACI_SYNTAX_DECODE_EFFECTIVERIGHTS_FAIL =
-            CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 94;
-
-    /**
-     * The message ID for the message that will be used if an "aci" attribute
-     * type value parse failed because an extop keyword expression
-     * did not parse.  This takes one argument, which is the extop
-     * expression from the ACI.
-     */
-
-     public static final int MSGID_ACI_SYNTAX_INVALID_TARGEXTOP_EXPRESSION =
-         CATEGORY_MASK_ACCESS_CONTROL | SEVERITY_MASK_SEVERE_WARNING | 95;
-
-  /**
-     * Associates a set of generic messages with the message IDs defined in
-     * this class.
-     */
-    public static void registerMessages() {
-
-        registerMessage(MSGID_ACI_SYNTAX_GENERAL_PARSE_FAILED,
-                "The provided string  \"%s\" could not be parsed as a valid " +
-                "Access Control Instruction (ACI) because it failed "+
-                "general ACI syntax evaluation");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVAILD_VERSION,
-                "The provided Access Control Instruction (ACI) version " +
-                "value  \"%s\" is invalid, only the version 3.0 is " +
-                "supported");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_ACCESS_TYPE_VERSION,
-                "The provided Access Control Instruction access " +
-                "type value  \"%s\" is invalid. A valid access type " +
-                "value is either allow or deny");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_RIGHTS_SYNTAX,
-                "The provided Access Control Instruction (ACI) rights " +
-                "values \"%s\" are invalid. The rights must be a " +
-                "list of 1 to 6 comma-separated keywords enclosed in " +
-                "parentheses");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_RIGHTS_KEYWORD,
-                "The provided Access Control Instruction (ACI) rights " +
-                "keyword values \"%s\" are invalid. The valid rights " +
-                "keyword values are one or more of the following: read, " +
-                "write, add, delete, search, compare or the single value " +
-                "all");
-
-        registerMessage(MSGID_ACI_SYNTAX_BIND_RULE_MISSING_CLOSE_PAREN,
-                "The provided Access Control Instruction (ACI) bind " +
-                "rule value \"%s\" is invalid because it is missing a " +
-                "close parenthesis that corresponded to the initial open " +
-                "parenthesis");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_BIND_RULE_SYNTAX,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "value \"%s\" is invalid. A valid bind rule value must " +
-                "be in the following form: " +
-                "keyword operator \"expression\"");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "keyword value \"%s\" is invalid. A valid keyword value is" +
-                " one of the following: userdn, groupdn, roledn, userattr," +
-                "ip, dns, dayofweek, timeofday or authmethod");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_BIND_RULE_OPERATOR ,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "operator value  \"%s\" is invalid. A valid bind rule " +
-                "operator value is either '=' or \"!=\"");
-
-        registerMessage(MSGID_ACI_SYNTAX_MISSING_BIND_RULE_EXPRESSION ,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "expression value corresponding to the keyword value " +
-                "\"%s\" is missing an expression. A valid bind rule value " +
-                "must be in the following form:" +
-                " keyword operator \"expression\"");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_BIND_RULE_BOOLEAN_OPERATOR ,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "boolean operator value \"%s\" is invalid. A valid bind" +
-                "rule boolean operator value is either \"OR\" or \"AND\"");
-
-        registerMessage(
-                MSGID_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD_OPERATOR_COMBO,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "keyword string  \"%s\" is invalid for the bind rule " +
-                "operator string \"%s\"");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_USERDN_URL,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "userdn expression failed to URL decode for " +
-                "the following reason: %s");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_ROLEDN_EXPRESSION,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "roledn expression value \"%s\" is invalid. A valid roledn " +
-                "keyword expression value requires one or more LDAP URLs " +
-                "in the following format: " +
-                "ldap:///dn [|| ldap:///dn] ... [|| ldap:///dn]");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_ROLEDN_URL,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "roledn expression failed to URL decode for " +
-                "the following reason: %s");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_GROUPDN_EXPRESSION,
-         "The provided Access Control Instruction (ACI) bind rule " +
-          "groupdn expression value \"%s\" is invalid. A valid groupdn " +
-         "keyword expression  value requires one or more LDAP URLs in the" +
-         " following format: " +
-         "ldap:///groupdn [|| ldap:///groupdn] ... [|| ldap:///groupdn]");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_GROUPDN_URL,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "groupdn expression value failed to URL decode for " +
-                "the following reason: %s");
-
-        registerMessage(MSGID_ACI_SYNTAX_ADDRESS_FAMILY_MISMATCH,
-                "The network mask value \"%s\" is not valid for " +
-                "the ip expression network address \"%s\"");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_NETWORK_BIT_MATCH,
-                "The bit mask for address type value \"%s\" is not valid." +
-                "%s");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_IP_CRITERIA_DECODE,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "ip expression value failed to decode for " +
-                "the following reason: %s");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_IP_EXPRESSION,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "ip expression value \"%s\" is invalid. A valid ip " +
-                "keyword expression requires one or more " +
-                "comma-separated elements of a valid IP address list" +
-                " expression");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_DNS_EXPRESSION,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "dns expression value \"%s\" is invalid. A valid dns " +
-                "keyword expression value requires a valid fully qualified"+
-                " DNS domain name");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_DNS_WILDCARD,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "dns expression value \"%s\" is invalid, because a wild-card" +
-                " pattern was found in the wrong position. A valid dns " +
-                "keyword wild-card expression value requires the '*' " +
-                "character only be in the leftmost position of the " +
-                "domain name");
-        registerMessage(MSGID_ACI_LOCALHOST_DOESNT_MATCH_CANONICAL_VALUE,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "dns expression value \"%s\" references hostname %s, but " +
-                "the canonical representation for that hostname is " +
-                "configured to be %s.  The server will attempt to " +
-                "automatically interpret the correct localhost value");
-        registerMessage(MSGID_ACI_HOSTNAME_DOESNT_MATCH_CANONICAL_VALUE,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "dns expression value \"%s\" references hostname %s, which " +
-                "resolves to IP address %s, but the canonical hostname for " +
-                "that IP address is %s.  This likely means that the " +
-                "provided hostname will never match any clients");
-        registerMessage(MSGID_ACI_ERROR_CHECKING_CANONICAL_HOSTNAME,
-                "An error occurred while attempting to determine whether " +
-                "hostname %s referenced in dns expression bind rule \"%s\" " +
-                "used the correct canonical representation:  %s.  This " +
-                "likely means that the provided hostname will never match " +
-                "any clients");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_DAYOFWEEK,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "dayofweek expression value \"%s\" is invalid, because of " +
-                "an invalid day of week value. A valid dayofweek value " +
-                "is one of the following English three-letter abbreviations" +
-                "for the days of the week: sun, mon, tue, wed, thu, " +
-                "fri, or sat");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TIMEOFDAY,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "timeofday expression value \"%s\" is invalid. A valid " +
-                "timeofday value is expressed as four digits representing " +
-                "hours and minutes in the 24-hour clock (0 to 2359)");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TIMEOFDAY_RANGE,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "timeofday expression value \"%s\" is not in the valid" +
-                 " range. A valid timeofday value is expressed as four" +
-                 " digits representing hours and minutes in the 24-hour" +
-                 " clock (0 to 2359)");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_AUTHMETHOD_EXPRESSION,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "authmethod expression value \"%s\" is invalid. A valid " +
-                "authmethod value is one of the following: none, simple," +
-                "SSL, or \"sasl mechanism\", where mechanism is one of the" +
-                "supported SASL mechanisms including CRAM-MD5, DIGEST-MD5, " +
-                "and GSSAPI");
-
-        registerMessage(MSGID_ACI_SYNTAX_DUBIOUS_AUTHMETHOD_SASL_MECHANISM,
-                "The SASL mechanism \"%s\" provided in the Access Control " +
-                "Instruction (ACI) bind rule authmethod expression is not " +
-                "one of the currently registered mechanisms in the server");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_USERATTR_EXPRESSION,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "userattr expression value \"%s\" is invalid");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_USERATTR_KEYWORD,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "userattr expression value \"%s\" is not supported");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_USERATTR_INHERITANCE_PATTERN,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "userattr expression inheritance pattern value \"%s\" is " +
-                "invalid. A valid inheritance pattern value must have" +
-                "the following format:" +
-                " parent[inheritance_level].attribute#bindType");
-
-        registerMessage(
-                MSGID_ACI_SYNTAX_MAX_USERATTR_INHERITANCE_LEVEL_EXCEEDED,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "userattr expression inheritance pattern value \"%s\" is " +
-                "invalid. The inheritance level value cannot exceed the" +
-                "max level limit of %s");
-
-        registerMessage(
-                MSGID_ACI_SYNTAX_INVALID_INHERITANCE_VALUE,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "userattr expression inheritance pattern value \"%s\" is" +
-                " invalid because it is non-numeric");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGET_SYNTAX,
-                "The provided Access Control Instruction (ACI) target rule" +
-                "value \"%s\" is invalid. A valid target rule value must" +
-                "be in the following form: " +
-                "keyword operator \"expression\"");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGET_KEYWORD,
-                "The provided Access Control Instruction (ACI) target " +
-                "keyword value \"%s\" is invalid. A valid target keyword" +
-                " value is one of the following: target, targetscope, " +
-                "targetfilter, targetattr or targetattrfilters");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGETS_OPERATOR,
-                "The provided Access Control Instruction (ACI) target " +
-                "keyword operator value  \"%s\" is invalid. A valid target" +
-                "keyword operator value is either '=' or \"!=\"");
-
-        registerMessage(MSGID_ACI_SYNTAX_TARGET_KEYWORD_NOT_SUPPORTED,
-                "The provided Access Control Instruction (ACI) " +
-                "target keyword value \"%s\" is not supported at this time");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS,
-                "The provided Access Control Instruction (ACI) " +
-                "target keyword value \"%s\" was seen multiple times in" +
-                " the ACI \"%s\"");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGET_NOT_OPERATOR,
-                "The provided Access Control Instruction (ACI) target" +
-                " operator value \"%s\" is invalid. The only valid" +
-                "target operator value for the \"%s\" keyword is '='");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGETSCOPE_EXPRESSION,
-                "The provided Access Control Instruction (ACI) targetscope" +
-                " expression operator value  \"%s\" is invalid. A valid" +
-                " targetscope expression value is one of the following: one," +
-                " onelevel or subtree");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGETKEYWORD_EXPRESSION,
-                "The provided Access Control Instruction (ACI)" +
-                " target expression value \"%s\" is invalid. A valid target" +
-                " keyword expression  value requires a LDAP URL in the" +
-                " following format: ldap:///distinguished_name_pattern");
-
-        registerMessage(MSGID_ACI_SYNTAX_TARGET_DN_NOT_DESCENDENTOF,
-                "The provided Access Control Instruction (ACI) " +
-                "target expression DN value \"%s\" is invalid. The target " +
-                "expression DN value must be a descendant of the ACI entry" +
-                " DN \"%s\", if no wild-card is specified in the target" +
-                "expression DN");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGETATTRKEYWORD_EXPRESSION,
-                "The provided Access Control Instruction (ACI) " +
-                "targetattr expression value \"%s\" is invalid. A valid " +
-                "targetattr keyword expression value requires one or more " +
-                "valid attribute type names in the following format: " +
-                "attribute1 [|| attribute1] ... [|| attributen]");
-
-        registerMessage(
-                MSGID_ACI_SYNTAX_INVALID_TARGETFILTERKEYWORD_EXPRESSION,
-                "The provided Access Control Instruction (ACI)" +
-                " targetfilter expression value \"%s\" is invalid because it" +
-                " is not a valid LDAP filter");
-
-        registerMessage(MSGID_ACI_ADD_FAILED_PRIVILEGE,
-                "An attempt to add the entry \"%s\" containing" +
-                " an aci attribute type failed, because the authorization DN" +
-                " \"%s\" lacked modify-acl privileges");
-
-        registerMessage(MSGID_ACI_MODIFY_FAILED_PRIVILEGE,
-                "An attempt to modify an aci "+
-                "attribute type in the entry \"%s\" failed, because the" +
-                "authorization DN \"%s\" lacked modify-acl privileges");
-
-        registerMessage(MSGID_ACI_ADD_FAILED_DECODE,
-                "An attempt to add the entry \"%s\" containing" +
-                " an aci attribute type failed because of the following" +
-                " reason: %s");
-
-        registerMessage(MSGID_ACI_MODIFY_FAILED_DECODE,
-               "An attempt to modify an aci "+
-               "attribute type in the entry \"%s\" failed "+
-               "because of the following reason: %s");
-
-        registerMessage(MSGID_ACI_ADD_LIST_FAILED_DECODE,
-                " \"%s\", located in the entry \"%s\", " +
-                "because of the following reason: %s");
-
-        registerMessage(MSGID_ACI_ADD_LIST_NO_ACIS,
-                "No Access Control Instruction (ACI) attribute types were" +
-                " found in context \"%s\"");
-
-        registerMessage(MSGID_ACI_ADD_LIST_ACIS,
-                "Added %s Access Control Instruction (ACI) attribute types" +
-                " found in context \"%s\" to the access" +
-                "control evaluation engine");
-
-        registerMessage(
-                MSGID_ACI_SYNTAX_INVALID_USERATTR_ROLEDN_INHERITANCE_PATTERN,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "userattr expression inheritance pattern value " +
-                "\"%s\" is invalid for the roledn keyword because it starts " +
-                        "with the string \"parent[\"");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_OPERATION,
-                "The provided Access Control Instruction (ACI) " +
-                "targattrfilter expression value " +
-                "%s is invalid because %s");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION,
-                "The provided Access Control Instruction (ACI) " +
-                "targattrfilter expression value " +
-                "%s is invalid because it is not in the correct format." +
-                "A valid targattrsfilters expression value must be in " +
-                "the following format: "+
-               "\"add=attr1: F1 && attr2: F2 ... && attrn: Fn" +
-                ",del= attr1: F1 && attr2: F2 ... && attrn: Fn\"");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_OPS_MATCH,
-                "The provided Access Control Instruction (ACI) " +
-                   "targattrfilter expression value " +
-                   "%s is invalid because the both operation tokens " +
-                   "match in the two filter lists");
-
-        registerMessage(
-                MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_MAX_FILTER_LISTS,
-                "The provided Access Control Instruction (ACI) " +
-                     "targattrfilters expression value " +
-                     "%s is invalid because there are more than two" +
-                      "filter list statements");
-
-        registerMessage(
-                MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LIST_FORMAT,
-                "The provided Access Control Instruction (ACI) " +
-                "targattrfilters expression value " +
-                "%s is invalid because the provided filter list string " +
-                "is in the wrong format. A valid targattrfilters filter " +
-                "list must be in the following format: " +
-                "add=attr1: F1 && attr2: F2 ... && attrn: Fn ");
-
-        registerMessage(
-             MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_FILTER,
-             "The provided Access Control Instruction (ACI) " +
-             "targattrfilters expression value " +
-             "%s is invalid because one or more of the specified " +
-             "filters are invalid for the following reason: " +
-             "%s");
-
-        registerMessage(
-             MSGID_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_ATTR_FILTER,
-             "The provided Access Control Instruction (ACI) " +
-             "targattrfilters expression value " +
-             "%s is invalid because one or more of the specified " +
-             "filters are invalid because of non-matching attribute" +
-             "type names in the filter");
-
-        registerMessage(
-             MSGID_ACI_SYNTAX_INVALID_ATTRIBUTE_TYPE_NAME,
-             "The provided Access Control Instruction (ACI) " +
-             "attribute name value " +
-             "%s is invalid. A valid attribute type name must begin " +
-             "with an ASCII letter and must contain only ASCII letters," +
-              "digits or the \"-\" character");
-
-        registerMessage(MSGID_ACI_DESCRIPTION_GLOBAL_ACI,
-             "Specifies a global Access Control Instruction (ACI) "  +
-             "attribute type that can be used to defined ACIs that have " +
-             "global scope accross naming contexts");
-
-        registerMessage(MSGID_ACI_ADD_LIST_NO_GLOBAL_ACIS,
-            "No Global Access Control Instruction (ACI) attribute types were" +
-           " found");
-
-        registerMessage(MSGID_ACI_ADD_LIST_GLOBAL_ACIS,
-                "Added %s Global Access Control Instruction (ACI) attribute " +
-                "types to the access control evaluation engine");
-
-        registerMessage(MSGID_ACI_HANDLER_FAIL_PROCESS_GLOBAL_ACI,
-         "An unexpected error occurred while processing the " +
-         ATTR_AUTHZ_GLOBAL_ACI + " attribute in configuration entry %s");
-
-        registerMessage(MSGID_ACI_HANDLER_FAIL_PROCESS_ACI,
-         "An unexpected error occurred while processing the " +
-          " aci attributes in the configuration system");
-
-        registerMessage(MSGID_PATTERN_DN_CONSECUTIVE_WILDCARDS_IN_VALUE,
-          "The pattern DN %s is not valid because it contains two " +
-               "consecutive wildcards in an attribute value");
-
-        registerMessage(MSGID_PATTERN_DN_TYPE_CONTAINS_SUBSTRINGS,
-          "The pattern DN %s is not valid because it uses wildcards for " +
-               "substring matching on an attribute type.  A single wildcard " +
-               "is allowed in place of an attribute type");
-
-        registerMessage(MSGID_PATTERN_DN_TYPE_WILDCARD_IN_MULTIVALUED_RDN,
-          "The pattern DN %s is not valid because it contains a wildcard in " +
-               "an attribute type in a multi-valued RDN");
-
-      registerMessage(MSGID_ACI_HANDLER_CANNOT_LOCK_NEW_SUPERIOR_USER,
-          "Unable to obtain a lock on the ModifyDN new superior entry %s");
-
-      registerMessage(MSGID_ACI_NOT_VALID_DN,
-          "Selfwrite check skipped because an attribute \"%s\" with a " +
-          "distinguished name syntax was not a valid DN");
-
-      registerMessage(MSGID_ACI_TARGETATTR_INVALID_ATTR_TOKEN,
-              "The provided Access Control Instruction (ACI) " +
-              "targetattr expression value \"%s\" is invalid because" +
-              " the expression contains invalid or duplicate tokens");
-
-
-      registerMessage(MSGID_ACI_SYNTAX_ROLEDN_NOT_SUPPORTED,
-              "The provided Access Control Instruction (ACI) expression " +
-              "value \"%s\" is invalid because it contains" +
-              " the roledn keyword, which is not supported,  replace it with " +
-              "the groupdn keyword");
-
-        registerMessage(MSGID_ACI_SERVER_DECODE_FAILED,
-                "Failed to decode the Access Control " +
-                "Instruction (ACI)%s");
-
-        registerMessage(MSGID_ACI_ENTER_LOCKDOWN_MODE,
-                "The server is being put into lockdown mode because " +
-                "invalid ACIs rules were detected either when the server " +
-                "was started or during a backend initialization");
-
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_USERATTR_URL,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "userattr expression value failed to URL decode for " +
-                "the following reason: %s");
-
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_USERATTR_BASEDN_URL,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "userattr expression value failed to parse because the " +
-                "ldap URL \"%s\" contains an empty base DN");
-
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_USERATTR_ATTR_URL,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "userattr expression value failed to parse because the " +
-                "attribute field of the ldap URL \"%s\" either contains more " +
-                "than one description or the field is empty");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_PREFIX_FORMAT,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                 "IP address expression failed to parse because the " +
-                 "prefix part of the expression \"%s\" has an invalid format");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_PREFIX_VALUE,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                "IP address expression failed to parse because the " +
-                "prefix value of the expression \"%s\" was an invalid" +
-                " value. All values must greater than or equal to 0 and " +
-                "either less than or equal 32 for IPV4 addresses or less than" +
-                " or equal to 128 for IPV6 addresses");
-
-        registerMessage(MSGID_ACI_SYNTAX_PREFIX_NOT_NUMERIC,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                 "IP address expression failed to parse because the " +
-                 "prefix part of the expression \"%s\" has an non-numeric" +
-                 " value");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_IPV4_FORMAT,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                 "IP address expression failed to parse because the " +
-                 "the IPv4 address expression \"%s\" format was invalid");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_IPV4_VALUE,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                 "IP address expression failed to parse because the " +
-                 " IPv4 address expression \"%s\" contains an invalid value." +
-                 "All values of the address must be between 0 and 255");
-
-        registerMessage(MSGID_ACI_SYNTAX_IPV4_NOT_NUMERIC,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                 "IP address expression failed to parse because the " +
-                 "the IPv4 address expression \"%s\" contains a non-numeric" +
-                 " value");
-
-        registerMessage(MSGID_ACI_SYNTAX_IPV6_WILDCARD_INVALID,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                 "IP address expression failed to parse because the " +
-                 "the IPv6 address expression \"%s\" contains an illegal" +
-                 " wildcard character. Wildcards are not supported when " +
-                 "using IPv6 addresses in a IP bind rule expression");
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_IPV6_FORMAT,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                 "IP address expression \"%s\" failed to parse for the " +
-                 "following reason: \"%s\"");
-
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_NETMASK_FORMAT,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                 "IP address expression failed to parse because the " +
-                 "netmask part of the expression \"%s\" has an invalid format");
-
-
-        registerMessage(MSGID_ACI_SYNTAX_INVALID_NETMASK,
-                "The provided Access Control Instruction (ACI) bind rule " +
-                 "IP address expression failed to parse because the " +
-                 "netmask part of the expression \"%s\" has an invalid value");
-
-
-      registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGETCONTROL_EXPRESSION,
-              "The provided Access Control Instruction (ACI) " +
-              "targetcontrol expression value \"%s\" is invalid. A valid " +
-              "targetcontrol keyword expression value requires one or more " +
-              "valid control OID strings in the following format: " +
-              "oid [|| oid1] ... [|| oidn]");
-
-        registerMessage(MSGID_ACI_SYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID,
-                "The provided Access Control Instruction (ACI) " +
-                "targetcontrol OID value \"%s\" could not be parsed " +
-                 " because the value contained an illegal character %s " +
-                 "at position %d");
-
-        registerMessage(MSGID_ACI_SYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID,
-                "The provided Access Control Instruction (ACI) " +
-                "targetcontrol OID value \"%s\" could not be parsed " +
-               " because the numeric OID " +
-               "contained two consecutive periods at position %d");
-
-        registerMessage(MSGID_ACI_SYNTAX_DECODE_EFFECTIVERIGHTS_FAIL,
-                "The access control check failed because a" +
-                " geteffectiverights control could not be" +
-                " decoded because of the following reason: \"%s\"");
-
-      registerMessage(MSGID_ACI_SYNTAX_INVALID_TARGEXTOP_EXPRESSION,
-              "The provided Access Control Instruction (ACI) " +
-              "extop expression value \"%s\" is invalid. A valid " +
-              "extop keyword expression value requires one or more " +
-              "valid extended operation request OID strings in the following" +
-              " format: oid [|| oid1] ... [|| oidn]");
-
-    }
-}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/AdminMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/AdminMessages.java
deleted file mode 100644
index 309ab20..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/AdminMessages.java
+++ /dev/null
@@ -1,850 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the server-side administration framework.
- * <p>
- * FIXME: At the moment these error messages are just temporary and will be
- * replaced in time with more specific detailed messages.
- */
-public final class AdminMessages {
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to get the base entry for a configuration listener. This takes two
-   * arguments: the DN of the base entry, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_ADMIN_CANNOT_GET_LISTENER_BASE =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 1;
-
-  /**
-   * The message ID for the message that will be used if the base entry for a
-   * configuration listener does not exist in the server. This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_ADMIN_LISTENER_BASE_DOES_NOT_EXIST =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 2;
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to get the configuration entry associated with a managed object.
-   * This takes two arguments: the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_ADMIN_CANNOT_GET_MANAGED_OBJECT =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 3;
-
-  /**
-   * The message ID for the message that will be used if the configuration entry
-   * associated with a managed object does not exist in the server. This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 4;
-
-  /**
-   * The message ID for the message that will be used if a managed cannot be
-   * successfully decoded from its associated configuration entry. This takes
-   * two arguments: the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 5;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to load and instantiate a configuration object. This takes three
-   * arguments, which are the name of the class, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_ADMIN_CANNOT_INSTANTIATE_CLASS =
-       CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 6;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to initialize a configuration object. This takes three
-   * arguments, which are the name of the class, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_ADMIN_CANNOT_INITIALIZE_COMPONENT =
-       CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 7;
-
-  /**
-   * The message ID for the message that will be used if a component
-   * has been explicitly disabled.  This takes a single argument,
-   * which is the DN of the configuration entry.
-   */
-  public static final int MSGID_ADMIN_COMPONENT_DISABLED =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_MILD_WARNING | 8;
-
-  /**
-   * The message ID for the message that will be used if an error
-   * occurs while trying to open a file for reading. This takes three
-   * arguments, which are the name of the jar file, the path to the
-   * jar directory, and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_ADMIN_CANNOT_OPEN_JAR_FILE =
-       CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 9;
-
-  /**
-   * The message ID for the message that will be used if an error
-   * occurs while trying to load a core administration configuration
-   * definition class. This takes two arguments, which are the name of
-   * the manifest file, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_ADMIN_CANNOT_LOAD_CLASS_FROM_CORE_MANIFEST =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 10;
-
-  /**
-   * The message ID for the message that will be used if an error
-   * occurs while trying to load a administration configuration
-   * definition class from an extension. This takes three arguments,
-   * which are the name of the manifest file, the name of the
-   * extension jar file, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int
-      MSGID_ADMIN_CANNOT_LOAD_CLASS_FROM_EXTENSION_MANIFEST =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 11;
-
-  /**
-   * The message ID for the message that will be used if the
-   * extensions directory does not exist. This takes a single
-   * argument, which is the path to the extensions directory.
-   */
-  public static final int MSGID_ADMIN_NO_EXTENSIONS_DIR =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_MILD_ERROR | 12;
-
-  /**
-   * The message ID for the message that will be used if the
-   * extensions directory is not a directory. This takes a single
-   * argument, which is the path to the extensions directory.
-   */
-  public static final int MSGID_ADMIN_EXTENSIONS_DIR_NOT_DIRECTORY =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 13;
-
-  /**
-   * The message ID for the message that will be used if an error
-   * occurs while trying to list the files in the extensions
-   * directory. This takes two arguments, which are the path to the
-   * extensions directory and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_ADMIN_EXTENSIONS_CANNOT_LIST_FILES =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 14;
-
-  /**
-   * The message ID for the message that will be used if the core
-   * administration configuration definition manifest file cannot be
-   * located. This takes a single argument, which is the name of the
-   * manifest file.
-   */
-  public static final int MSGID_ADMIN_CANNOT_FIND_CORE_MANIFEST =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 15;
-
-  /**
-   * The message ID for the message that will be used if the core
-   * administration configuration definition manifest file cannot be
-   * read. This takes two arguments, which are the name of the
-   * manifest file and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_ADMIN_CANNOT_READ_CORE_MANIFEST =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 16;
-
-  /**
-   * The message ID for the message that will be used if the
-   * administration configuration definition manifest file contained
-   * in a extension cannot be read. This takes three arguments, which
-   * are the name of the manifest file, the name of the extension jar
-   * file, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_ADMIN_CANNOT_READ_EXTENSION_MANIFEST =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 17;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * dsservice tool.  This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_TOOL_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 18;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * create-group subcommand part of dsservice tool.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_CREATE_GROUP_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 19;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * "description" argument.  This does take one argument.
-   */
-  public static final int MSGID_ADMIN_ARG_DESCRIPTION_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 20;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * modify-group subcommand part of dsservice tool.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_MODIFY_GROUP_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 21;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * new "description" argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_ARG_NEW_DESCRIPTION_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 22;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * new "groupid" argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_ARG_NEW_GROUPNAME_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 23;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * delete-group subcommand part of dsservice tool.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_DELETE_GROUP_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 24;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * list-groups subcommand part of dsservice tool.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_LIST_GROUPS_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 25;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * add-to-group subcommand part of dsservice tool.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_ADD_TO_GROUP_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 26;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * added "member-id" argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_ARG_ADD_MEMBERNAME_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 27;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * remove-from-group subcommand part of dsservice tool.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_REMOVE_FROM_GROUP_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 28;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * removed "member-id" argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_ARG_REMOVE_MEMBERNAME_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 29;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * list-members subcommand part of dsservice tool.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_LIST_MEMBERS_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 30;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * list-members subcommand part of dsservice tool.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_LIST_MEMBERSHIP_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 31;
-
-  /**
-   * The message ID for the message that will be used if the
-   * client CLI cannot contact the ADS. This does one take argument.
-   */
-  public static final int MSGID_ADMIN_CANNOT_CONNECT_TO_ADS =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 32;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * create-ads subcommand part of dsservice tool.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_CREATE_ADS_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 33;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * delete-ads subcommand part of dsservice tool.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_DELETE_ADS_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 34;
-
-  /**
-   * The message ID for the message that will be used if the hostname of
-   * the ADS is missing.
-   */
-  public static final int MSGID_ADMIN_MISSING_HOSTNAME=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 35;
-
-  /**
-   * The message ID for the message that will be used if the hostname of
-   * the ADS is not valid.
-   */
-  public static final int MSGID_ADMIN_NOVALID_HOSTNAME=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 36;
-
-  /**
-   * The message ID for the message that will be used if the ipath of
-   * the ADS is missing.
-   */
-  public static final int MSGID_ADMIN_MISSING_IPATH=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 37;
-
-  /**
-   * The message ID for the message that will be used if the ipath of
-   * the ADS is not valid.
-   */
-  public static final int MSGID_ADMIN_NOVALID_IPATH=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 38;
-
-  /**
-   * The message ID for the message that will be used if we have an
-   * access permission error.
-   */
-  public static final int MSGID_ADMIN_ACCESS_PERMISSION=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 39;
-
-  /**
-   * The message ID for the message that will be used if the element is
-   * already registered in the ADS.
-   */
-  public static final int MSGID_ADMIN_ALREADY_REGISTERED=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 40;
-
-  /**
-   * The message ID for the message that will be used if the ADS is
-   * bot valid.
-   */
-  public static final int MSGID_ADMIN_BROKEN_INSTALL=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 41;
-
-  /**
-   * The message ID for the message that will be used if ADS is not
-   * defined in the instance and if we try to perform an admin operation.
-   */
-  public static final int MSGID_ADMIN_NOT_YET_REGISTERED=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 42;
-
-  /**
-   * The message ID for the message that will be used if the port of
-   * the ADS is missing.
-   */
-  public static final int MSGID_ADMIN_MISSING_PORT=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 43;
-
-  /**
-   * The message ID for the message that will be used if the port of
-   * the ADS is not valid.
-   */
-  public static final int MSGID_ADMIN_NOVALID_PORT=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 44;
-
-  /**
-   * The message ID for the message that will be used if the name of
-   * an element is missing.
-   */
-  public static final int MSGID_ADMIN_MISSING_NAME=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 45;
-
-  /**
-   * The message ID for the message that will be used if the admin uid name
-   * is missing.
-   */
-  public static final int MSGID_ADMIN_MISSING_ADMIN_UID=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 46;
-
-  /**
-   * The message ID for the message that will be used if the admin password
-   * is missing.
-   */
-  public static final int MSGID_ADMIN_MISSING_ADMIN_PASSWORD=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 47;
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs.
-   */
-  public static final int MSGID_ADMIN_ERROR_UNEXPECTED=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 48;
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * message is an error message.
-   */
-  public static final int MSGID_ADMIN_ERROR=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 49;
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * operation is successful.
-   */
-  public static final int MSGID_ADMIN_SUCCESSFUL=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 50;
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * operation is successful, but nothing was performed.
-   */
-  public static final int MSGID_ADMIN_SUCCESSFUL_NOP=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 51;
-
-  /**
-   * The message ID which indicate that no message is required.
-   */
-  public static final int MSGID_ADMIN_NO_MESSAGE =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 52;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the "groupName" argument of the create-group
-   * subcommand. This does take one argument.
-   */
-  public static final int MSGID_ADMIN_ARG_CREATE_GROUP_GROUPNAME_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 53;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * "groupName" argument.  This does take one argument.
-   */
-  public static final int MSGID_ADMIN_ARG_GROUPNAME_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 54;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * "memberName" argument.  This does take one argument.
-   */
-  public static final int MSGID_ADMIN_ARG_MEMBERNAME_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 55;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * "backend-name" argument.  This does take one argument.
-   */
-  public static final int MSGID_ADMIN_ARG_BACKENDNAME_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 56;
-
-  /**
-   * The message ID for the message that will be used if an add or
-   * delete listener cannot be registered because the base entry does
-   * not exist and it does not have any ancestor entries. This takes a
-   * single argument which is the name of the base entry.
-   */
-  public static final int MSGID_ADMIN_UNABLE_TO_REGISTER_LISTENER =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_SEVERE_ERROR | 57;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the create-group subcommand part of dsservice
-   * tool. This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_REGISTER_SERVER_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 58;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the create-group subcommand part of dsservice
-   * tool. This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_UNREGISTER_SERVER_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 59;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the "server-name" argument. This does take one
-   * argument.
-   */
-  public static final int MSGID_ADMIN_ARG_SERVERNAME_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 60;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the list-server-properties subcommand part of
-   * dsservice tool. This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_LIST_SERVER_PROPS_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 61;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the list-servers subcommand part of dsservice
-   * tool. This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_LIST_SERVERS_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 62;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the get-server-properties subcommand part of
-   * dsservice tool. This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_GET_SERVER_PROPERTIES_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 63;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the set-server-properties subcommand part of
-   * dsservice tool. This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_SET_SERVER_PROPERTIES_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 64;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the "server-host" argument. This does take one
-   * argument.
-   */
-  public static final int MSGID_ADMIN_ARG_SERVERID_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 65;
-
-  /**
-   * The message ID for the message that will be used server that the user
-   * wants to add in a group is not yet register in the ADS.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SERVER_NOT_REGISTERED=
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_FATAL_ERROR | 66;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the create-admin-user subcommand part of
-   * dsservice tool. This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_CREATE_ADMIN_USER_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 67;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the delete-admin-user subcommand part of
-   * dsservice tool. This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_DELETE_ADMIN_USER_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 68;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the list-admin-user subcommand part of
-   * dsservice tool. This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_SUBCMD_LIST_ADMIN_USER_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 69;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the get-admin-user-properties subcommand part of
-   * dsservice tool. This does not take any arguments.
-   */
-  public static final int
-  MSGID_ADMIN_SUBCMD_GET_ADMIN_USER_PROPERTIES_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 70;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the set-admin-user-properties subcommand part of
-   * dsservice tool. This does not take any arguments.
-   */
-  public static final int
-  MSGID_ADMIN_SUBCMD_SET_ADMIN_USER_PROPERTIES_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 71;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description for the list-admin-user-properties subcommand part of
-   * dsservice tool. This does not take any arguments.
-   */
-  public static final int
-  MSGID_ADMIN_SUBCMD_LIST_ADMIN_USER_PROPERTIES_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 72;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the "userId" argument. This does not take any arguments.
-   */
-  public static final int MSGID_ADMIN_ARG_USERID_DESCRIPTION =
-    CATEGORY_MASK_ADMIN | SEVERITY_MASK_INFORMATIONAL | 73;
-
-  // Prevent instantiation.
-  private AdminMessages() {
-    // Do nothing.
-  }
-
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages() {
-    registerMessage(MSGID_ADMIN_CANNOT_GET_LISTENER_BASE,
-        "An error occurred while trying to "
-            + "retrieve relation configuration entry %s: %s");
-
-    registerMessage(MSGID_ADMIN_LISTENER_BASE_DOES_NOT_EXIST,
-        "The relation entry %s does not appear to exist in the "
-            + "Directory Server configuration. This is a required entry");
-
-    registerMessage(MSGID_ADMIN_CANNOT_GET_MANAGED_OBJECT,
-        "An error occurred while trying to "
-            + "retrieve the managed object configuration entry %s: %s");
-
-    registerMessage(MSGID_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST,
-        "The managed object configuration entry %s does not "
-            + "appear to exist in the Directory Server "
-            + "configuration. This is a required entry");
-
-    registerMessage(MSGID_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM,
-        "An error occurred while trying to "
-            + "decode the managed object configuration entry %s: %s");
-
-    registerMessage(MSGID_ADMIN_CANNOT_INSTANTIATE_CLASS,
-        "The Directory Server was unable to load class %s and "
-            + "use it to create a component instance as "
-            + "defined in configuration entry %s.  The error that "
-            + "occurred was:  %s.  This component will be " + "disabled");
-
-    registerMessage(MSGID_ADMIN_CANNOT_INITIALIZE_COMPONENT,
-        "An error occurred while trying to initialize a " +
-        "component instance loaded from class %s with the " +
-        "information in configuration entry %s:  %s.  This " +
-        "component will be disabled");
-
-    registerMessage(MSGID_ADMIN_COMPONENT_DISABLED,
-        "The Directory Server component configured in " +
-        "entry %s has been disabled");
-
-    registerMessage(MSGID_ADMIN_CANNOT_OPEN_JAR_FILE,
-        "The Directory Server jar file %s in directory %s cannot be " +
-        "loaded because an unexpected error occurred while " +
-        "trying to open the file for reading:  %s");
-
-    registerMessage(MSGID_ADMIN_NO_EXTENSIONS_DIR,
-        "The extensions directory %s does not exist, therefore no " +
-        "extensions will be loaded");
-
-    registerMessage(MSGID_ADMIN_EXTENSIONS_DIR_NOT_DIRECTORY,
-        "Unable to read the Directory Server extensions " +
-        "because the extensions directory %s exists but is not a " +
-        "directory");
-
-    registerMessage(MSGID_ADMIN_EXTENSIONS_CANNOT_LIST_FILES,
-        "Unable to read the Directory Server extensions " +
-        "from directory %s because an unexpected error occurred " +
-        "while trying to list the files in that directory:  %s");
-
-    registerMessage(MSGID_ADMIN_CANNOT_LOAD_CLASS_FROM_CORE_MANIFEST,
-        "A core configuration definition class could not be loaded " +
-        "from the core manifest file %s because an unexpected error " +
-        "occurred while trying to initialize it:  %s");
-
-    registerMessage(MSGID_ADMIN_CANNOT_LOAD_CLASS_FROM_EXTENSION_MANIFEST,
-        "A configuration definition class could not be loaded " +
-        "from the extension manifest file %s in extensions %s because an " +
-        "unexpected error occurred while trying to initialize it:  %s");
-
-    registerMessage(MSGID_ADMIN_CANNOT_FIND_CORE_MANIFEST,
-        "The core administration manifest file %s cannot be located");
-
-    registerMessage(MSGID_ADMIN_CANNOT_READ_CORE_MANIFEST,
-        "The core administration manifest file %s cannot be " +
-        "loaded because an unexpected error occurred while " +
-        "trying to read it:  %s");
-
-    registerMessage(MSGID_ADMIN_CANNOT_READ_EXTENSION_MANIFEST,
-        "The administration manifest file %s associated with the " +
-        "extension %s cannot be loaded because an unexpected error " +
-        "occurred while trying to read it:  %s");
-
-    registerMessage(MSGID_ADMIN_TOOL_DESCRIPTION,
-        "This utility may be used to perform " +
-        "operations in the Directory Server administration framework");
-    registerMessage(MSGID_ADMIN_SUBCMD_CREATE_GROUP_DESCRIPTION,
-        "Create a new server group");
-    registerMessage(MSGID_ADMIN_ARG_DESCRIPTION_DESCRIPTION,
-        "The server group description. If not specified, " +
-        "the description will be empty");
-    registerMessage(MSGID_ADMIN_SUBCMD_MODIFY_GROUP_DESCRIPTION,
-        "Modify a server group's properties");
-    registerMessage(MSGID_ADMIN_ARG_NEW_DESCRIPTION_DESCRIPTION,
-        "If specified, the new description");
-    registerMessage(MSGID_ADMIN_ARG_NEW_GROUPNAME_DESCRIPTION,
-        "If specified, the new server group's identifier");
-    registerMessage(MSGID_ADMIN_SUBCMD_DELETE_GROUP_DESCRIPTION,
-        "Delete an existing server group" );
-    registerMessage(MSGID_ADMIN_SUBCMD_LIST_GROUPS_DESCRIPTION,
-        "List server groups that have been defined" );
-    registerMessage(MSGID_ADMIN_SUBCMD_ADD_TO_GROUP_DESCRIPTION,
-        "Add a server to a server group" );
-    registerMessage(MSGID_ADMIN_ARG_ADD_MEMBERNAME_DESCRIPTION,
-        "The server to add. This is a required argument" );
-    registerMessage(MSGID_ADMIN_SUBCMD_REMOVE_FROM_GROUP_DESCRIPTION,
-        "Remove a server from a server group" );
-    registerMessage(MSGID_ADMIN_ARG_REMOVE_MEMBERNAME_DESCRIPTION,
-        "The server to remove. This is a required argument" );
-    registerMessage(MSGID_ADMIN_SUBCMD_LIST_MEMBERS_DESCRIPTION,
-        "List servers of the specified server group" );
-    registerMessage(MSGID_ADMIN_SUBCMD_LIST_MEMBERSHIP_DESCRIPTION,
-        "List server groups in which the specified server is a member" );
-    registerMessage(MSGID_ADMIN_CANNOT_CONNECT_TO_ADS,
-        "Could not connect to %s. Check that the "+
-        "server is running and that the provided credentials are valid");
-    registerMessage(MSGID_ADMIN_SUBCMD_CREATE_ADS_DESCRIPTION,
-        "Create a new ADS DN");
-    registerMessage(MSGID_ADMIN_SUBCMD_DELETE_ADS_DESCRIPTION,
-         "Delete an existing ADS DN");
-    registerMessage(MSGID_ADMIN_MISSING_HOSTNAME,
-        "The host name is missing");
-    registerMessage(MSGID_ADMIN_NOVALID_HOSTNAME,
-        "The host name is not valid");
-    registerMessage(MSGID_ADMIN_MISSING_IPATH,
-        "The installation path is missing");
-    registerMessage(MSGID_ADMIN_NOVALID_IPATH,
-        "The installation path is not valid");
-    registerMessage(MSGID_ADMIN_ACCESS_PERMISSION,
-        "An access permission error occurs");
-    registerMessage(MSGID_ADMIN_ALREADY_REGISTERED,
-        "The entity is already registered");
-    registerMessage(MSGID_ADMIN_BROKEN_INSTALL,
-        "The administrative repository is broken");
-    registerMessage(MSGID_ADMIN_NOT_YET_REGISTERED,
-        "The entity is not yet registered");
-    registerMessage(MSGID_ADMIN_MISSING_PORT,
-        "The port is missing");
-    registerMessage(MSGID_ADMIN_NOVALID_PORT,
-        "The port is not valid");
-    registerMessage(MSGID_ADMIN_MISSING_NAME,
-        "The name is missing");
-    registerMessage(MSGID_ADMIN_MISSING_ADMIN_UID,
-        "The administration UID is missing");
-    registerMessage(MSGID_ADMIN_MISSING_ADMIN_PASSWORD,
-        "The administrator password is missing");
-    registerMessage(MSGID_ADMIN_ERROR_UNEXPECTED,
-        "An unexpected error occurs");
-    registerMessage(MSGID_ADMIN_ERROR,
-        "[error] ");
-    registerMessage(MSGID_ADMIN_SUCCESSFUL,
-        "The operation has been successfully completed");
-    registerMessage(MSGID_ADMIN_SUCCESSFUL_NOP,
-       "The operation has been successfully completed, "+
-       "but no action was required");
-    registerMessage(MSGID_ADMIN_NO_MESSAGE,"");
-    registerMessage(MSGID_ADMIN_ARG_CREATE_GROUP_GROUPNAME_DESCRIPTION,
-       "The new group's identifier. This is a required argument");
-    registerMessage(MSGID_ADMIN_ARG_GROUPNAME_DESCRIPTION,
-       "The group's identifier. This is a required argument");
-    registerMessage(MSGID_ADMIN_ARG_MEMBERNAME_DESCRIPTION,
-       "The member's identifier. This is a required argument");
-    registerMessage(MSGID_ADMIN_ARG_BACKENDNAME_DESCRIPTION,
-        "The name of the backend in which the admin data will be stored. " +
-        "This is a required argument");
-    registerMessage(MSGID_ADMIN_SUBCMD_REGISTER_SERVER_DESCRIPTION,
-        "Register a server into the administrative domain");
-    registerMessage(MSGID_ADMIN_SUBCMD_UNREGISTER_SERVER_DESCRIPTION,
-        "Unregister a server from the administrative domain");
-    registerMessage(MSGID_ADMIN_ARG_SERVERNAME_DESCRIPTION,
-        "The server's identifier. This is a required argument");
-    registerMessage(MSGID_ADMIN_SUBCMD_LIST_SERVER_PROPS_DESCRIPTION,
-        "Describes server properties");
-    registerMessage(MSGID_ADMIN_SUBCMD_LIST_SERVERS_DESCRIPTION,
-        "List servers that have been defined");
-    registerMessage(MSGID_ADMIN_SUBCMD_GET_SERVER_PROPERTIES_DESCRIPTION,
-        "Shows server properties");
-    registerMessage(MSGID_ADMIN_SUBCMD_SET_SERVER_PROPERTIES_DESCRIPTION,
-        "Modifies server properties");
-    registerMessage(MSGID_ADMIN_UNABLE_TO_REGISTER_LISTENER,
-        "Unable to register an add/delete listener against the entry \"%s\" " +
-        "because it does not exist in the configuration");
-    registerMessage(MSGID_ADMIN_SUBCMD_REGISTER_SERVER_DESCRIPTION,
-        "Register a server into the administrative domain");
-    registerMessage(MSGID_ADMIN_SUBCMD_UNREGISTER_SERVER_DESCRIPTION,
-        "Unregister a server from the administrative domain");
-    registerMessage(MSGID_ADMIN_ARG_SERVERNAME_DESCRIPTION,
-        "The server's identifier. This is a required argument");
-    registerMessage(MSGID_ADMIN_SUBCMD_LIST_SERVER_PROPS_DESCRIPTION,
-        "Describes server properties");
-    registerMessage(MSGID_ADMIN_SUBCMD_LIST_SERVERS_DESCRIPTION,
-        "List servers that have been defined");
-    registerMessage(MSGID_ADMIN_SUBCMD_GET_SERVER_PROPERTIES_DESCRIPTION,
-        "Shows server properties");
-    registerMessage(MSGID_ADMIN_SUBCMD_SET_SERVER_PROPERTIES_DESCRIPTION,
-        "Modifies server properties");
-    registerMessage(MSGID_ADMIN_ARG_SERVERID_DESCRIPTION,
-        "The registered server's unique identifier. " +
-        "This is a required argument");
-    registerMessage(MSGID_ADMIN_SERVER_NOT_REGISTERED,
-        "The provided serverId is not registered");
-    registerMessage(MSGID_ADMIN_SUBCMD_CREATE_ADMIN_USER_DESCRIPTION,
-        "Creates a new administrator");
-    registerMessage(MSGID_ADMIN_SUBCMD_DELETE_ADMIN_USER_DESCRIPTION,
-        "Deletes an existing administrator");
-    registerMessage(MSGID_ADMIN_SUBCMD_LIST_ADMIN_USER_DESCRIPTION,
-        "Lists administrators that have been defined");
-    registerMessage(MSGID_ADMIN_SUBCMD_GET_ADMIN_USER_PROPERTIES_DESCRIPTION,
-        "Shows administrator's properties");
-    registerMessage(MSGID_ADMIN_SUBCMD_SET_ADMIN_USER_PROPERTIES_DESCRIPTION,
-        "Modifies administrator's properties");
-    registerMessage(MSGID_ADMIN_SUBCMD_LIST_ADMIN_USER_PROPERTIES_DESCRIPTION,
-        "Describes administrator's properties");
-    registerMessage(MSGID_ADMIN_ARG_USERID_DESCRIPTION,
-        "The administrator's unique identifier. " +
-        "This is a required argument");
-  }
-}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/BackendMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/BackendMessages.java
deleted file mode 100644
index c0f7e13..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/BackendMessages.java
+++ /dev/null
@@ -1,4421 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the server backends.
- */
-public class BackendMessages
-{
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * de-register a sub-suffix that has multiple base DNs.  This takes two
-   * arguments, which are the DN of the sub-suffix to deregister and the DN of
-   * the parent suffix with which the sub-suffix is associated.
-   */
-  public static final int MSGID_BACKEND_CANNOT_REMOVE_MULTIBASE_SUB_SUFFIX =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_FATAL_ERROR | 1;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * initialize the root DSE backend without providing a configuration entry.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ROOTDSE_CONFIG_ENTRY_NULL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_FATAL_ERROR | 2;
-
-
-
-  /**
-   * The message ID for the string that will be used as the description of the
-   * root DSE subordinate base DN attribute. This does not take any arguments.
-   */
-  public static final int MSGID_ROOTDSE_SUBORDINATE_BASE_DESCRIPTION =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 3;
-
-
-
-  /**
-   * The message ID for the message that will be used if a subordinate base DN
-   * is defined for the root DSE that is not associated with any backend.  This
-   * takes a single argument, which is the specified subordinate base DN.
-   */
-  public static final int MSGID_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_WARNING | 4;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * while trying to determine the set of subordinate base DNs to use for the
-   * root DSE.  This takes a single argument, which is a string representation
-   * of the exception that was thrown.
-   */
-  public static final int MSGID_ROOTDSE_SUBORDINATE_BASE_EXCEPTION =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_WARNING | 5;
-
-
-
-  /**
-   * The message ID for the message that will be used if the root DSE backend is
-   * asked to retrieve an entry other than the root DSE.  This takes a single
-   * argument, which is the DN of the entry that it was asked to retrieve.
-   */
-  public static final int MSGID_ROOTDSE_GET_ENTRY_NONROOT =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_WARNING | 6;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add operation is
-   * attempted in the root DSE backend.  This takes a single argument, which is
-   * the DN of the entry to add.
-   */
-  public static final int MSGID_ROOTDSE_ADD_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 7;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete operation is
-   * attempted in the root DSE backend.  This takes a single argument, which is
-   * the DN of the entry to delete.
-   */
-  public static final int MSGID_ROOTDSE_DELETE_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify operation is
-   * attempted in the root DSE backend.  This takes two arguments, which are the
-   * DN of the entry that the user attempted to modify and the DN of the
-   * configuration entry for the root DSE backend.
-   */
-  public static final int MSGID_ROOTDSE_MODIFY_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 9;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify DN operation
-   * is attempted in the root DSE backend.  This takes a single argument, which
-   * is the DN of the entry to rename.
-   */
-  public static final int MSGID_ROOTDSE_MODIFY_DN_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 10;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * process a search in the root DSE backend with a base that is not the DN of
-   * the root DSE.  This takes three arguments, which are the connection ID and
-   * operation ID for the search operation, and the requested base DN.
-   */
-  public static final int MSGID_ROOTDSE_INVALID_SEARCH_BASE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 11;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected exception
-   * is encountered while attempting to process a search below the root DSE.
-   * This takes three arguments, which are the connection ID and
-   * operation ID for the search operation, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_ROOTDSE_UNEXPECTED_SEARCH_FAILURE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 12;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search operation
-   * below the root DSE specifies an invalid scope.  This takes three arguments,
-   * which are the connection ID and operation ID for the search operation, and
-   * a string representation of the search scope.
-   */
-  public static final int MSGID_ROOTDSE_INVALID_SEARCH_SCOPE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 13;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to open the LDIF writer to export the root DSE.  This
-   * takes a single argument, which is a stack trace of the exception that was
-   * caught.
-   */
-  public static final int MSGID_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 14;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to write the root DSE entry to LDIF.  This takes a
-   * single argument, which is a stack trace of the exception that was caught.
-   */
-  public static final int MSGID_ROOTDSE_UNABLE_TO_EXPORT_DSE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 15;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDIF import is
-   * attempted for the root DSE backend.  This does not take any arguments.
-   */
-  public static final int MSGID_ROOTDSE_IMPORT_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 16;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup or restore
-   * operation is attempted for the root DSE backend.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 17;
-
-
-
-  /**
-   * The message ID for the message that will be used if the root DSE
-   * configuration is updated so that it will use the default set of suffixes
-   * for searches below the root DSE.  This does not take any arguments.
-   */
-  public static final int MSGID_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 18;
-
-
-
-  /**
-   * The message ID for the message that will be used if the root DSE
-   * configuration is updated so that it will use a new set of base DNs for
-   * searches below the root DSE.  This takes a single argument, which is a
-   * string representation of the new set of base DNs.
-   */
-  public static final int MSGID_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 19;
-
-
-
-  /**
-   * The message ID for the message that will be used if the root DSE
-   * configuration is updated so that it will use a new set of user-defined
-   * attributes when returning the root DSE.  This does not take any arguments.
-   */
-  public static final int MSGID_ROOTDSE_USING_NEW_USER_ATTRS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 20;
-
-
-
-  /**
-   * The message ID for the message that will be used if no configuration entry
-   * is provided when attempting to initialize the monitor backend.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_MONITOR_CONFIG_ENTRY_NULL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 21;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the base DN for the server monitor information.  This
-   * takes a single argument, which is a stack trace of the exception that was
-   * caught.
-   */
-  public static final int MSGID_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 22;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add operation is
-   * attempted in the monitor backend.  This takes a single argument, which is
-   * the DN of the entry to add.
-   */
-  public static final int MSGID_MONITOR_ADD_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 23;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete operation is
-   * attempted in the monitor backend.  This takes a single argument, which is
-   * the DN of the entry to delete.
-   */
-  public static final int MSGID_MONITOR_DELETE_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 24;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify operation is
-   * attempted in the monitor backend.  This takes two arguments, which are the
-   * DN of the entry that the user attempted to modify and the DN of the
-   * configuration entry for the monitor backend.
-   */
-  public static final int MSGID_MONITOR_MODIFY_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 25;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify DN operation
-   * is attempted in the monitor backend.  This takes a single argument, which
-   * is the DN of the entry to rename.
-   */
-  public static final int MSGID_MONITOR_MODIFY_DN_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 26;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * attempting to export the base monitor entry.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_MONITOR_UNABLE_TO_EXPORT_BASE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 27;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * attempting to export an entry generated from a monitor provider.  This
-   * takes two arguments, which are the name of the monitor provider and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 28;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDIF import is
-   * attempted for the monitor backend.  This does not take any arguments.
-   */
-  public static final int MSGID_MONITOR_IMPORT_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 29;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup or restore
-   * operation is attempted for the monitor backend.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 30;
-
-
-
-  /**
-   * The message ID for the message that will be used if the monitor
-   * configuration is updated so that it will use a new set of user-defined
-   * attributes when returning the base monitor entry.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_MONITOR_USING_NEW_USER_ATTRS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 31;
-
-
-
-  /**
-   * The message ID for the message that will be used if the monitor backend is
-   * requested to retrieve an entry with a null DN.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_MONITOR_GET_ENTRY_NULL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 32;
-
-
-
-  /**
-   * The message ID for the message that will be used if the monitor backend is
-   * requested to retrieve an entry DN that is too deep.  This takes two
-   * arguments, which are the DN of the requested entry and the DN of the base
-   * monitor entry.
-   */
-  public static final int MSGID_MONITOR_BASE_TOO_DEEP =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 33;
-
-
-
-  /**
-   * The message ID for the message that will be used if the monitor backend is
-   * requested to retrieve an entry not below the monitor base.  This takes two
-   * arguments, which are the DN of the requested entry and the DN of the base
-   * monitor entry.
-   */
-  public static final int MSGID_MONITOR_INVALID_BASE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 34;
-
-
-
-  /**
-   * The message ID for the message that will be used if the monitor backend is
-   * requested to retrieve an entry with a multivalued RDN.  This takes a single
-   * argument, which is the DN of the requested entry.
-   */
-  public static final int MSGID_MONITOR_MULTIVALUED_RDN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 35;
-
-
-
-  /**
-   * The message ID for the message that will be used if the monitor backend is
-   * requested to retrieve monitor entry with an RDN value that is not the name
-   * of a monitor provider.  This takes a single argument, which is the
-   * requested provider name.
-   */
-  public static final int MSGID_MONITOR_NO_SUCH_PROVIDER =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 36;
-
-
-
-  /**
-   * The message ID for the string that will be used to represent the server
-   * uptime in a human-readable string.  This takes four arguments, which are
-   * the number of days, hours, minutes, and seconds that the server has been
-   * online.
-   */
-  public static final int MSGID_MONITOR_UPTIME =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 37;
-
-
-
-  /**
-   * The message ID for the message that will be used if no configuration entry
-   * is provided when attempting to initialize the schema backend.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_SCHEMA_CONFIG_ENTRY_NULL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 38;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * configuration attribute that is used to specify the base DN(s) for the
-   * schema entries.  This does not take any arguments.
-   */
-  public static final int MSGID_SCHEMA_DESCRIPTION_ENTRY_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 39;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the base DN(s) for the schema entries.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_CANNOT_DETERMINE_BASE_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 40;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add operation is
-   * attempted in the schema backend.  This takes a single argument, which is
-   * the DN of the entry to add.
-   */
-  public static final int MSGID_SCHEMA_ADD_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 41;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete operation is
-   * attempted in the schema backend.  This takes a single argument, which is
-   * the DN of the entry to delete.
-   */
-  public static final int MSGID_SCHEMA_DELETE_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 42;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify operation is
-   * attempted in the schema backend.  This takes two arguments, which are the
-   * DN of the entry that the user attempted to modify and the DN of the
-   * configuration entry for the schema backend.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 43;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify DN operation
-   * is attempted in the schema backend.  This takes a single argument, which is
-   * the DN of the entry to rename.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DN_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 44;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * attempting to export the base schema entry.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_UNABLE_TO_EXPORT_BASE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 45;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDIF import is
-   * attempted for the schema backend.  This does not take any arguments.
-   */
-  public static final int MSGID_SCHEMA_IMPORT_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 46;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup or restore
-   * operation is attempted for the schema backend.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SCHEMA_BACKUP_AND_RESTORE_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 47;
-
-
-
-  /**
-   * The message ID for the message that will be used if the schema backend is
-   * requested to retrieve an entry that is not one of the schema entries.  This
-   * takes two arguments, which are the DN of the requested entry and the DN of
-   * the base schema entry.
-   */
-  public static final int MSGID_SCHEMA_INVALID_BASE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 48;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to open the LDIF writer to export the schema.  This
-   * takes a single argument, which is a stack trace of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 49;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an entry
-   * has been successfully deregistered as a base DN for the schema information.
-   * This takes a single argument, which is the DN that was deregistered.
-   */
-  public static final int MSGID_SCHEMA_DEREGISTERED_BASE_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 50;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to deregister a base DN for the schema information.  This takes
-   * two arguments, which are the DN to deregister and string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_CANNOT_DEREGISTER_BASE_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 51;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an entry
-   * has been successfully registered as a base DN for the schema information.
-   * This takes a single argument, which is the DN that was registered.
-   */
-  public static final int MSGID_SCHEMA_REGISTERED_BASE_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 52;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to register a base DN for the schema information.  This takes
-   * two arguments, which are the DN to register and string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_CANNOT_REGISTER_BASE_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 53;
-
-
-
-  /**
-   * The message ID for the message that will be used if the schema
-   * configuration is updated so that it will use a new set of user-defined
-   * attributes when returning the schema entry.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SCHEMA_USING_NEW_USER_ATTRS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 54;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain an entry lock in the backend code.  This takes a
-   * single argument, which is the DN of the entry for which to obtain the lock.
-   */
-  public static final int MSGID_BACKEND_CANNOT_LOCK_ENTRY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_FATAL_ERROR | 55;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain the MAC provider for the schema backup.  This takes
-   * two arguments, which are the name of the desired MAC algorithm and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_BACKUP_CANNOT_GET_MAC =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 56;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain the message digest for the schema backup.  This takes
-   * two arguments, which are the name of the desired digest algorithm and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_BACKUP_CANNOT_GET_DIGEST =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 57;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to create the archive file for a schema backup.  This takes
-   * three arguments, which are the name of the archive file, the path to the
-   * archive directory, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SCHEMA_BACKUP_CANNOT_CREATE_ARCHIVE_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 58;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain the cipher for the schema backup.  This takes two
-   * arguments, which are the name of the desired cipher algorithm and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_BACKUP_CANNOT_GET_CIPHER =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 59;
-
-
-
-  /**
-   * The message ID for the message that will be used for the message containing
-   * the comment to include in the schema archive zip.  This takes two
-   * arguments, which are the Directory Server product name and the backup ID.
-   */
-  public static final int MSGID_SCHEMA_BACKUP_ZIP_COMMENT =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 60;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain a list of the schema files to include in the backup.
-   * This takes two arguments, which are the path to the directory containing
-   * the schema files and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SCHEMA_BACKUP_CANNOT_LIST_SCHEMA_FILES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 61;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to back up a schema file.  This takes two arguments, which are
-   * the name of the schema file and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_SCHEMA_BACKUP_CANNOT_BACKUP_SCHEMA_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 62;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to close the output stream for the schema archive.  This takes
-   * three arguments, which are the name of the schema archive file, the path
-   * to the directory containing that file, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_BACKUP_CANNOT_CLOSE_ZIP_STREAM =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 63;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the backup descriptor with information about the
-   * schema backup.  This takes two arguments, which are the path to the backup
-   * descriptor file and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SCHEMA_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 64;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * restore schema backup but the requested backup could not be found.  This
-   * takes two arguments, which are the backup ID and the path to the backup
-   * directory.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_NO_SUCH_BACKUP =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 65;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * restore schema backup but it cannot be determined which archive file holds
-   * that backup.  This takes two arguments, which are the backup ID and the
-   * path to the backup directory.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_NO_BACKUP_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 66;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * restore schema backup but the archive file does not exist.  This takes two
-   * arguments, which are the backup ID and the expected path to the archive
-   * file.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_NO_SUCH_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 67;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether the backup archive exists.  This takes three
-   * arguments, which are the backup ID, the expected path to the backup
-   * archive, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_CHECK_FOR_ARCHIVE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 68;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema backup is
-   * hashed but the digest algorithm is not known.  This takes a single
-   * argument, which is the backup ID.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_UNKNOWN_DIGEST =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 69;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema backup has a
-   * hash with an unknown or unsupported digest algorithm.  This takes two
-   * arguments, which are the backup ID and the digest algorithm.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_GET_DIGEST =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 70;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema backup is
-   * signed but the MAC algorithm is not known.  This takes a single argument,
-   * which is the backup ID.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_UNKNOWN_MAC =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 71;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema backup has a
-   * signature with an unknown or unsupported MAC algorithm.  This takes two
-   * arguments, which are the backup ID and the MAC algorithm.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_GET_MAC =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 72;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to open the file containing the backup archive.  This takes three
-   * arguments, which are the backup ID, the path to the backup file, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_OPEN_BACKUP_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 73;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema backup is
-   * encrypted but the cipher is not known.  This takes a single argument, which
-   * is the backup ID.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_UNKNOWN_CIPHER =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 74;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema backup is
-   * encrypted with an unknown or unsupported cipher.  This takes two arguments,
-   * which are the backup ID and the cipher algorithm.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_GET_CIPHER =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 75;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to rename the existing backup directory.  This takes four arguments,
-   * which are the backup ID, the path to the current backup directory, the path
-   * to which it was to be renamed, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 76;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * the schema restore process but the original schema was restored to its
-   * original location.  This takes a single argument, which is the path to the
-   * schema directory.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_NOTICE | 77;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * the schema restore process and the original schema files could not be
-   * moved back into place.  This takes a single argument, which is the path
-   * to the directory containing the original schema files.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 78;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a new directory to hold the restored schema files.  This
-   * takes three arguments, which are the backup ID, the desired path for the
-   * schema directory, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_CREATE_SCHEMA_DIRECTORY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 79;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * the schema restore process but the old schema files were saved in an
-   * alternate directory.  This takes a single argument, which is the path
-   * to the directory containing the original schema files.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_OLD_SCHEMA_SAVED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 80;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read the next entry from the schema archive.  This takes three
-   * arguments, which are the backup ID, the path to the schema archive, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_GET_ZIP_ENTRY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 81;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a schema file from the backup archive.  This takes three
-   * arguments, which are the backup ID, the path to the file that could not be
-   * created, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_CREATE_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 82;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to read a schema file from the archive or write it to disk.
-   * This takes three arguments, which are the backup ID, the name of the file
-   * being processed, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 83;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to close the zip stream used to read from the archive.  This takes
-   * three arguments, which are the backup ID, the path to the backup archive,
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 84;
-
-
-
-  /**
-   * The message ID for the message that will be used if the unsigned hash of
-   * the schema backup matches the expected value.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_UNSIGNED_HASH_VALID =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_NOTICE | 85;
-
-
-
-  /**
-   * The message ID for the message that will be used if the unsigned hash of
-   * the schema backup does not match the expected value.  This takes a single
-   * argument, which is the backup ID.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_UNSIGNED_HASH_INVALID =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 86;
-
-
-
-  /**
-   * The message ID for the message that will be used if the signed hash of the
-   * schema backup matches the expected value.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_SIGNED_HASH_VALID =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_NOTICE | 87;
-
-
-
-  /**
-   * The message ID for the message that will be used if the signed hash of the
-   * schema backup does not match the expected value.  This takes a single
-   * argument, which is the backup ID.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_SIGNED_HASH_INVALID =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 88;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * backup verification process completed successfully.  This takes two
-   * arguments, which are the backup ID and the path to the backup directory.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_VERIFY_SUCCESSFUL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_NOTICE | 89;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * backup verification process completed successfully.  This takes two
-   * arguments, which are the backup ID and the path to the backup directory.
-   */
-  public static final int MSGID_SCHEMA_RESTORE_SUCCESSFUL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_NOTICE | 90;
-
-
-
-  /**
-   * The message ID for the message that will be used if a task entry has an
-   * invalid task state.  This takes two arguments, which are the DN of the
-   * task entry and the invalid state value.
-   */
-  public static final int MSGID_TASK_INVALID_STATE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 91;
-
-
-
-  /**
-   * The message ID for the message that will be used if a task entry has an
-   * invalid scheduled start time.  This takes two arguments, which are the
-   * provided scheduled start time value and the DN of the task entry.
-   */
-  public static final int MSGID_TASK_CANNOT_PARSE_SCHEDULED_START_TIME =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 92;
-
-
-
-  /**
-   * The message ID for the message that will be used if a task entry has an
-   * invalid actual start time.  This takes two arguments, which are the
-   * provided actual start time value and the DN of the task entry.
-   */
-  public static final int MSGID_TASK_CANNOT_PARSE_ACTUAL_START_TIME =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 93;
-
-
-
-  /**
-   * The message ID for the message that will be used if a task entry has an
-   * invalid completion time.  This takes two arguments, which are the
-   * provided completion time value and the DN of the task entry.
-   */
-  public static final int MSGID_TASK_CANNOT_PARSE_COMPLETION_TIME =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 94;
-
-
-
-  /**
-   * The message ID for the message that will be used if a task entry is missing
-   * a required attribute.  This takes two arguments, which are the DN of the
-   * task entry and the name of the missing attribute.
-   */
-  public static final int MSGID_TASK_MISSING_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 95;
-
-
-
-  /**
-   * The message ID for the message that will be used if a task entry contains
-   * multiple attributes for a given attribute type.  This takes two arguments,
-   * which are the attribute name and the DN of the task entry.
-   */
-  public static final int MSGID_TASK_MULTIPLE_ATTRS_FOR_TYPE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 96;
-
-
-
-  /**
-   * The message ID for the message that will be used if a task entry does not
-   * have any values for a required attribute.  This takes two arguments, which
-   * are the attribute name and the DN of the task entry.
-   */
-  public static final int MSGID_TASK_NO_VALUES_FOR_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 97;
-
-
-
-  /**
-   * The message ID for the message that will be used if a task entry contains
-   * a single-valued attribute with multiple values.  This takes two arguments,
-   * which are the attribute name and the DN of the task entry.
-   */
-  public static final int MSGID_TASK_MULTIPLE_VALUES_FOR_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 98;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to execute a task.  This takes two arguments, which is the DN of
-   * the task entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_TASK_EXECUTE_FAILED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 99;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * does not contain the recurring task ID attribute.  This takes a single
-   * argument, which is the name of the recurring task ID attribute.
-   */
-  public static final int MSGID_RECURRINGTASK_NO_ID_ATTRIBUTE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 100;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * contains multiple attributes with the recurring task ID type.  This takes a
-   * single argument, which is the name of the recurring task ID attribute.
-   */
-  public static final int MSGID_RECURRINGTASK_MULTIPLE_ID_TYPES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 101;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * does not contain any recurring task ID value.  This takes a single
-   * argument, which is the name of the recurring task ID attribute.
-   */
-  public static final int MSGID_RECURRINGTASK_NO_ID =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 102;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * contains multiple recurring task ID values.  This takes a single argument,
-   * which is the name of the recurring task ID attribute.
-   */
-  public static final int MSGID_RECURRINGTASK_MULTIPLE_ID_VALUES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 103;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * does not contain the class name attribute.  This takes a single argument,
-   * which is the name of the class name attribute.
-   */
-  public static final int MSGID_RECURRINGTASK_NO_CLASS_ATTRIBUTE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 104;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * contains multiple attributes with the class name type.  This takes a single
-   * argument, which is the name of the class name attribute.
-   */
-  public static final int MSGID_RECURRINGTASK_MULTIPLE_CLASS_TYPES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 105;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * does not contain any class name value.  This takes a single
-   * argument, which is the name of the class name attribute.
-   */
-  public static final int MSGID_RECURRINGTASK_NO_CLASS_VALUES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 106;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * contains multiple class name values.  This takes a single argument, which
-   * is the name of the recurring task ID attribute.
-   */
-  public static final int MSGID_RECURRINGTASK_MULTIPLE_CLASS_VALUES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 107;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to load a class for use in a recurring task.  This takes three
-   * arguments, which are the name of the class, the name of the attribute that
-   * holds the class name, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_RECURRINGTASK_CANNOT_LOAD_CLASS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 108;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to instantiate a task class.  This takes two arguments, which are
-   * the name of the specified class and the name of the class that should be
-   * the superclass for all Directory Server tasks.
-   */
-  public static final int MSGID_RECURRINGTASK_CANNOT_INSTANTIATE_CLASS_AS_TASK =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 109;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to initialize a task instance.  This takes two arguments, which are
-   * the name of the task class and the error message from the initialization
-   * failure.
-   */
-  public static final int MSGID_RECURRINGTASK_CANNOT_INITIALIZE_INTERNAL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 110;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration entry
-   * provided when initializing the task backend is null.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_TASKBE_CONFIG_ENTRY_NULL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 111;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration entry
-   * provided when initializing the task backend does not contain any base DNs.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_TASKBE_NO_BASE_DNS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 112;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration entry
-   * provided when initializing the task backend contains multiple base DNs.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_TASKBE_MULTIPLE_BASE_DNS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 113;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the string representation of the recurring tasks parent
-   * DN as an actual DN.  This takes two arguments, which are a string
-   * representation of the DN to decode and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_TASKBE_CANNOT_DECODE_RECURRING_TASK_BASE_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 114;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the string representation of the scheduled tasks parent
-   * DN as an actual DN.  This takes two arguments, which are a string
-   * representation of the DN to decode and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_TASKBE_CANNOT_DECODE_SCHEDULED_TASK_BASE_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 115;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * task retention time configuration attribute.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_TASKBE_DESCRIPTION_RETENTION_TIME =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 116;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to initialize the task retention time.  This takes a single
-   * argument, which is a string representation of the stack trace that was
-   * caught.
-   */
-  public static final int MSGID_TASKBE_CANNOT_INITIALIZE_RETENTION_TIME =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 117;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * task backing file configuration attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_TASKBE_DESCRIPTION_BACKING_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 118;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to initialize the task backing file.  This takes a single
-   * argument, which is a string representation of the stack trace that was
-   * caught.
-   */
-  public static final int MSGID_TASKBE_CANNOT_INITIALIZE_BACKING_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 119;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration change
-   * is made to the task backend but the resulting entry doesn't contain a path
-   * for the backing file.  This takes a single argument, which is the name of
-   * the attribute that holds the path to the backing file.
-   */
-  public static final int MSGID_TASKBE_NO_BACKING_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 120;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration change
-   * is made to the task backend to provide a new backing file path but it
-   * references a file that already exists.  This takes a single argument, which
-   * is the provided path for the backing file.
-   */
-  public static final int MSGID_TASKBE_BACKING_FILE_EXISTS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 121;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration change
-   * is made to the task backend to provide a new backing file path but the
-   * given path is invalid.  This takes a single argument, which is the provided
-   * path for the backing file.
-   */
-  public static final int MSGID_TASKBE_INVALID_BACKING_FILE_PATH =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 122;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration change
-   * is made to the task backend to provide a new backing file path but the
-   * parent directory for that file does not exist.  This takes two arguments,
-   * which are the path to the missing parent directory and the backing file.
-   */
-  public static final int MSGID_TASKBE_BACKING_FILE_MISSING_PARENT =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 123;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration change
-   * is made to the task backend to provide a new backing file path but the
-   * parent for that file exists but is not a directory.  This takes two
-   * arguments, which are the path to the parent and the backing file.
-   */
-  public static final int MSGID_TASKBE_BACKING_FILE_PARENT_NOT_DIRECTORY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 124;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration change
-   * is made to the task backend but there is an error getting the path to the
-   * backing file.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_TASKBE_ERROR_GETTING_BACKING_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 125;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration change
-   * is made to the task backend but the resulting entry doesn't contain a
-   * completed task retention time.  This takes a single argument, which is the
-   * name of the attribute that holds the retention time.
-   */
-  public static final int MSGID_TASKBE_NO_RETENTION_TIME =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 126;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration change
-   * is made to the task backend but there is an error getting the completed
-   * task retention time.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_TASKBE_ERROR_GETTING_RETENTION_TIME =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 127;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * completed task retention time has been updated.  This takes a single
-   * argument, which is the new retention time.
-   */
-  public static final int MSGID_TASKBE_UPDATED_RETENTION_TIME =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 128;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the task
-   * backing file path has been updated.  This takes a single argument, which is
-   * the new backing file path.
-   */
-  public static final int MSGID_TASKBE_UPDATED_BACKING_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 129;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new entry to the task backend but the new entry is not immediately
-   * below the scheduled task base or the recurring task base.  This takes two
-   * arguments, which are the DN of the scheduled task base and the DN of the
-   * recurring task base.
-   */
-  public static final int MSGID_TASKBE_ADD_DISALLOWED_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 130;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a modify DN operation in the task backend.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_TASKBE_MODIFY_DN_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 131;
-
-
-
-  /**
-   * The message ID for the message that will be used as the header for the task
-   * data backing file to indicate that it should not be directly edited.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_TASKBE_BACKING_FILE_HEADER =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 132;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a recurring task with the same ID as another recurring task.  This
-   * takes a single argument, which is the recurring task ID.
-   */
-  public static final int MSGID_TASKSCHED_DUPLICATE_RECURRING_ID =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 133;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a task with the same ID as another task.  This takes a single argument,
-   * which is the task ID.
-   */
-  public static final int MSGID_TASKSCHED_DUPLICATE_TASK_ID =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 134;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task cannot
-   * be found to schedule the next iteration when the previous iteration has
-   * completed.  This takes two arguments, which are the task ID of the
-   * completed task and the recurring task ID of the recurring task.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_FIND_RECURRING_TASK =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 135;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to schedule the next iteration of a recurring task.  This takes
-   * two arguments, which are the recurring task ID and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_TASKSCHED_ERROR_SCHEDULING_RECURRING_ITERATION =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 136;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recoverable error
-   * occurs while parsing the tasks data backing file.  This takes three
-   * arguments, which are the path to the tasks backing file, the line number on
-   * which the problem occurred, and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_PARSE_ENTRY_RECOVERABLE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 137;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unrecoverable error
-   * occurs while parsing the tasks data backing file.  This takes three
-   * arguments, which are the path to the tasks backing file, the line number on
-   * which the problem occurred, and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_PARSE_ENTRY_FATAL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_FATAL_ERROR | 138;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry is read from
-   * the backing file that does not have a parent and is not the tasks root
-   * entry.  This takes two arguments, which are the DN of the entry read and
-   * the DN of the tasks root entry.
-   */
-  public static final int MSGID_TASKSCHED_ENTRY_HAS_NO_PARENT =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 139;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to parse an entry as a recurring task and add it to the
-   * scheduler.  This takes two arguments, which are the DN of the entry and
-   * a message explaining the problem that occurred.
-   */
-  public static final int
-       MSGID_TASKSCHED_CANNOT_SCHEDULE_RECURRING_TASK_FROM_ENTRY =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 140;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to parse an entry as a task and add it to the scheduler.  This
-   * takes two arguments, which are the DN of the entry and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_SCHEDULE_TASK_FROM_ENTRY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 141;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry has a DN that
-   * is not valid for a task or recurring task.  This takes two arguments, which
-   * are the DN of the entry and the path to the tasks backing file.
-   */
-  public static final int MSGID_TASKSCHED_INVALID_TASK_ENTRY_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 142;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read the tasks data backing file.  This takes two arguments,
-   * which are the path to the backing file and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_TASKSCHED_ERROR_READING_TASK_BACKING_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 143;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create the tasks data backing file.  This takes two arguments,
-   * which are the path to the tasks backing file and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_CREATE_BACKING_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 144;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * does not contain the class name attribute.  This takes a single argument,
-   * which is the name of the class name attribute.
-   */
-  public static final int MSGID_TASKSCHED_NO_CLASS_ATTRIBUTE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 145;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * contains multiple attributes with the class name type.  This takes a single
-   * argument, which is the name of the class name attribute.
-   */
-  public static final int MSGID_TASKSCHED_MULTIPLE_CLASS_TYPES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 146;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * does not contain any class name value.  This takes a single
-   * argument, which is the name of the class name attribute.
-   */
-  public static final int MSGID_TASKSCHED_NO_CLASS_VALUES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 147;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recurring task entry
-   * contains multiple class name values.  This takes a single argument, which
-   * is the name of the recurring task ID attribute.
-   */
-  public static final int MSGID_TASKSCHED_MULTIPLE_CLASS_VALUES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 148;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to load a class for use in a recurring task.  This takes three
-   * arguments, which are the name of the class, the name of the attribute that
-   * holds the class name, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_LOAD_CLASS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 149;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to instantiate a task class.  This takes two arguments, which are
-   * the name of the specified class and the name of the class that should be
-   * the superclass for all Directory Server tasks.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_INSTANTIATE_CLASS_AS_TASK =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 150;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to initialize a task instance.  This takes two arguments, which are
-   * the name of the task class and the error message from the initialization
-   * failure.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_INITIALIZE_INTERNAL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 151;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to rename the current tasks backing file to save it for future
-   * reference.  This takes three arguments, which are the path to the current
-   * file, the path to the save file, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_WARNING | 152;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to rename the new tasks backing file into place.  This takes three
-   * arguments, which are the path to the new backing file, the path to the
-   * current backing file, and a string representation of the  exception that
-   * was caught.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 153;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to write a new tasks backing file to reflect an updated
-   * configuration.  This takes two arguments, which are the path to the new
-   * file it was trying to create and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_TASKSCHED_CANNOT_WRITE_BACKING_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 154;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDIF import is
-   * attempted for the task backend.  This does not take any arguments.
-   */
-  public static final int MSGID_TASKBE_IMPORT_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 155;
-
-
-
-  /**
-   * The message ID for the message that will be used as the shutdown message
-   * for task threads when the task scheduler is being stopped.
-   */
-  public static final int MSGID_TASKBE_INTERRUPTED_BY_SHUTDOWN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 156;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * configuration attribute that indicates whether to treat all root DSE
-   * attributes as user attributes.  It does not take any arguments.
-   */
-  public static final int MSGID_ROOTDSE_DESCRIPTION_SHOW_ALL_ATTRIBUTES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 157;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the value of the configuration attribute that controls
-   * whether to treat all root DSE attributes as user attributes.  It takes two
-   * arguments, which are the name of the attribute and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_ROOTDSE_CANNOT_DETERMINE_ALL_USER_ATTRIBUTES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 158;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * configuration setting controlling whether root DSE attributes will all be
-   * treated as user attributes has been updated.  This takes two arguments,
-   * which are the name of the configuration attribute and a string
-   * representation of the new value.
-   */
-  public static final int MSGID_ROOTDSE_UPDATED_SHOW_ALL_ATTRS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 159;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a recurring task when an existing iteration is already scheduled.
-   * This takes two arguments, which are the recurring task ID and the scheduled
-   * task ID.
-   */
-  public static final int MSGID_TASKSCHED_REMOVE_RECURRING_EXISTING_ITERATION =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 160;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a pending task when there is no such task.  This takes a single
-   * argument, which is the task ID of the task.
-   */
-  public static final int MSGID_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 161;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a pending task but the specified task is not pending.  This takes a
-   * single argument, which is the task ID of the task.
-   */
-  public static final int MSGID_TASKSCHED_REMOVE_PENDING_NOT_PENDING =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 162;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a completed task, but there is no such task in the completed list.
-   * This takes a single argument, which is the task ID for the task.
-   */
-  public static final int MSGID_TASKSCHED_REMOVE_COMPLETED_NO_SUCH_TASK =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 163;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove an entry from the task backend with a DN that is not valid for the
-   * tasks backend.  This takes a single argument, which is the provided DN.
-   */
-  public static final int MSGID_TASKBE_DELETE_INVALID_ENTRY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 164;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a scheduled task from the server when no such task exists.  This
-   * takes a single argument, which is the DN of the task entry.
-   */
-  public static final int MSGID_TASKBE_DELETE_NO_SUCH_TASK =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 165;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a scheduled task that is currently running.  This takes a single
-   * argument, which is the DN of the task entry.
-   */
-  public static final int MSGID_TASKBE_DELETE_RUNNING =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 166;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a recurring task from the server when no such recurring task exists.
-   * This takes a single argument, which is the DN of the recurring task entry.
-   */
-  public static final int MSGID_TASKBE_DELETE_NO_SUCH_RECURRING_TASK =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 167;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a search operation in the tasks backend using an invalid base DN.
-   * This takes a single argument, which is the specified base DN.
-   */
-  public static final int MSGID_TASKBE_SEARCH_INVALID_BASE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 168;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a search operation in the tasks backend using a base DN below the
-   * scheduled tasks parent entry but that does not refer to an existing task.
-   * This takes a single argument, which is the specified base DN.
-   */
-  public static final int MSGID_TASKBE_SEARCH_NO_SUCH_TASK =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 169;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a search operation in the tasks backend using a base DN below the
-   * recurring tasks parent entry but that does not refer to an existing
-   * recurring task.  This takes a single argument, which is the specified base
-   * DN.
-   */
-  public static final int MSGID_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 170;
-
-
-
-  /**
-   * The message ID for the message that will be used if the config entry is
-   * null when trying to initialize the backup backend.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_BACKUP_CONFIG_ENTRY_NULL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 171;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the backup root DN.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 172;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * backup directory list configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_BACKUP_DESCRIPTION_BACKUP_DIR_LIST =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 173;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the backup directory list.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_BACKUP_CANNOT_DETERMINE_BACKUP_DIR_LIST =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 174;
-
-
-
-  /**
-   * The message ID for the message that will be used if the backup DN is
-   * requested to retrieve a null entry.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUP_GET_ENTRY_NULL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 175;
-
-
-
-  /**
-   * The message ID for the message that will be used if the backup DN is
-   * requested to retrieve an entry with a DN that is not valid for entries in
-   * the backend.  This takes a single argument, which is the requested DN.
-   */
-  public static final int MSGID_BACKUP_INVALID_BASE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 176;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup directory DN
-   * does not specify the directory location.  This takes a single argument,
-   * which is the requested DN.
-   */
-  public static final int MSGID_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 177;
-
-
-
-  /**
-   * The message ID for the message that will be used if requested backup
-   * directory is invalid.  This takes two arguments, which are the DN of the
-   * backup directory entry and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_BACKUP_INVALID_BACKUP_DIRECTORY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 178;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to load the backup directory descriptor.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_BACKUP_ERROR_GETTING_BACKUP_DIRECTORY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 179;
-
-
-
-  /**
-   * The message ID for the message that will be used if a requested backup
-   * entry does not include the backup ID in the DN.  This takes a single
-   * argument, which is the requested backup entry DN.
-   */
-  public static final int MSGID_BACKUP_NO_BACKUP_ID_IN_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 180;
-
-
-
-  /**
-   * The message ID for the message that will be used if a requested backup
-   * entry does not have a parent DN.  This takes a single argument, which is
-   * the requested backup entry DN.
-   */
-  public static final int MSGID_BACKUP_NO_BACKUP_PARENT_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 181;
-
-
-
-  /**
-   * The message ID for the message that will be used if a requested backup
-   * entry does not include the backup directory in the DN.  This takes a single
-   * argument, which is the requested backup ID.
-   */
-  public static final int MSGID_BACKUP_NO_BACKUP_DIR_IN_DN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 182;
-
-
-
-  /**
-   * The message ID for the message that will be used if a requested backup does
-   * not exist.  This takes two arguments, which are the backup ID and the
-   * backup directory path.
-   */
-  public static final int MSGID_BACKUP_NO_SUCH_BACKUP =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 183;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform an add operation in the backup backend.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_BACKUP_ADD_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 184;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a delete operation in the backup backend.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_BACKUP_DELETE_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 185;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a modify operation in the backup backend.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_BACKUP_MODIFY_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 186;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a modify DN operation in the backup backend.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_BACKUP_MODIFY_DN_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 187;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search operation
-   * specifies an invalid base DN.  This takes a single argument, which is the
-   * requested base DN.
-   */
-  public static final int MSGID_BACKUP_NO_SUCH_ENTRY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 188;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform an LDIF export in the backup backend.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_BACKUP_EXPORT_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 189;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform an LDIF import in the backup backend.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_BACKUP_IMPORT_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 190;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a backup or restore operation in the backup backend.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 191;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * initialize a memory backend with zero or multiple base DNs.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 192;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an entry that already exists.  This takes a single argument, which is
-   * the DN of the target entry.
-   */
-  public static final int MSGID_MEMORYBACKEND_ENTRY_ALREADY_EXISTS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 193;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an entry that doesn't belong in the backend.  This takes a single
-   * argument, which is the DN of the target entry.
-   */
-  public static final int MSGID_MEMORYBACKEND_ENTRY_DOESNT_BELONG =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 194;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * added because the parent does not exist.  This takes two arguments, which
-   * are the entry DN and the parent DN.
-   */
-  public static final int MSGID_MEMORYBACKEND_PARENT_DOESNT_EXIST =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 195;
-
-
-
-  /**
-   * The message ID for the message that will be used if an operation targets an
-   * entry that doesn't exist.  This takes a single argument, which is the DN of
-   * the entry.
-   */
-  public static final int MSGID_MEMORYBACKEND_ENTRY_DOESNT_EXIST =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 196;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * delete an entry that has one or more children.  This takes a single
-   * argument, which is the DN of the entry.
-   */
-  public static final int
-       MSGID_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 197;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform an unsupported modify DN operation.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_MEMORYBACKEND_MODDN_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 198;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * creating an LDIF writer.  This takes a single argument, which is a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 199;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * writing an entry to LDIF.  This takes two arguments, which are the entry DN
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 200;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * creating an LDIF reader.  This takes a single argument, which is a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_MEMORYBACKEND_CANNOT_CREATE_LDIF_READER =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 201;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * reading an entry from LDIF.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_MEMORYBACKEND_ERROR_READING_LDIF =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 202;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * an LDIF import.  This takes a single argument, which is a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_MEMORYBACKEND_ERROR_DURING_IMPORT =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 203;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that backup
-   * and restore operations are not supported in the memory-based backend.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 204;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an entry
-   * cannot be renamed if it has children.  This takes a single argument, which
-   * is the DN of the target entry.
-   */
-  public static final int MSGID_MEMORYBACKEND_CANNOT_RENAME_ENRY_WITH_CHILDREN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 205;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an entry
-   * cannot be renamed if it would move to another backend.  This takes a single
-   * argument, which is the DN of the target entry.
-   */
-  public static final int MSGID_MEMORYBACKEND_CANNOT_RENAME_TO_ANOTHER_BACKEND =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 206;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an entry
-   * cannot be renamed because the new parent doesn't exist.  This takes two
-   * arguments, which are the current DN and the new parent DN.
-   */
-  public static final int MSGID_MEMORYBACKEND_RENAME_PARENT_DOESNT_EXIST =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 207;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * configuration attribute that is used to indicate whether all attributes
-   * in the subschema entry should be shown even if they are marked operational.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_SCHEMA_DESCRIPTION_SHOW_ALL_ATTRIBUTES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 208;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to treat all subschema attributes as user
-   * attributes.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SCHEMA_CANNOT_DETERMINE_SHOW_ALL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 209;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to register a base DN for use in the server.  This takes two
-   * arguments, which are the base DN and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_BACKEND_CANNOT_REGISTER_BASEDN =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_FATAL_ERROR | 210;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify operation
-   * attempts to delete existing schema elements, which is not currently
-   * supported.  This does not take any arguments.
-   */
-  public static final int MSGID_SCHEMA_DELETE_MODTYPE_NOT_SUPPORTED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 211;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify operation
-   * attempts to replace or increment schema elements, which is not allowed.
-   * This takes a single argument, which is the name of the attempted
-   * modification type.
-   */
-  public static final int MSGID_SCHEMA_INVALID_MODIFICATION_TYPE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 212;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify operation
-   * attempts to modify an attribute type that cannot be changed.  This takes a
-   * single argument, which is the name of the target attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 213;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode a new attribute type.  This takes two arguments, which
-   * are the attribute type string and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 214;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new attribute type with a name or OID that conflicts with an existing
-   * attribute type.  This takes two arguments, which are the name of the new
-   * attribute type and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_ATTRTYPE_ALREADY_EXISTS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 215;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode a new objectclass.  This takes two arguments, which
-   * are the objectclass string and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 216;
-
-
-
-  /**
-   * The message ID for the message that will be used if a new objectclass
-   * references an undefined superior class.  This takes two arguments, which
-   * are the name of the new objectclass and the name of the undefined superior
-   * class.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_OBJECTCLASS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 217;
-
-
-
-  /**
-   * The message ID for the message that will be used if a new objectclass
-   * references an undefined required attribute.  This takes two arguments,
-   * which are the name of the new objectclass and the name of the undefined
-   * attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_OC_UNDEFINED_REQUIRED_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 218;
-
-
-
-  /**
-   * The message ID for the message that will be used if a new objectclass
-   * references an undefined optional attribute.  This takes two arguments,
-   * which are the name of the new objectclass and the name of the undefined
-   * attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_OC_UNDEFINED_OPTIONAL_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 219;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new objectclass type with a name or OID that conflicts with an
-   * existing objectclass.  This takes two arguments, which are the name of the
-   * new objectclass and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_OBJECTCLASS_ALREADY_EXISTS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 220;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to read the contents of an existing schema file so that it may
-   * be updated.  This takes two arguments, which are the path to the schema
-   * file and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CANNOT_READ_EXISTING_USER_SCHEMA =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 221;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to write an updated schema file.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CANNOT_WRITE_NEW_SCHEMA =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 222;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode a new name form.  This takes two arguments, which
-   * are the name form string and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 223;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode a new DIT content rule.  This takes two arguments,
-   * which are the DIT content rule string and a message explaining the problem
-   * that occurred.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CANNOT_DECODE_DCR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 224;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode a new DIT structure rule.  This takes two arguments,
-   * which are the DIT structure rule string and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CANNOT_DECODE_DSR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 225;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode a new matching rule use.  This takes two arguments,
-   * which are the matching rule use string and a message explaining the problem
-   * that occurred.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 226;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove all values for a given attribute type.  This takes a single
-   * argument, which is the name of that attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DELETE_NO_VALUES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 227;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new attribute type that conflicts with multiple existing attribute
-   * types.  This takes three arguments, which are the name or OID of the new
-   * attribute type, and the name or OID of the two attribute types that were
-   * found to conflict with the new type.
-   */
-  public static final int
-       MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_ATTRTYPE =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 228;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new attribute type that references an undefined superior attribute
-   * type.  This takes two arguments, which are the name or OID of the new
-   * attribute type and the name or OID of the superior attribute type.
-   */
-  public static final int
-       MSGID_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_ATTRIBUTE_TYPE =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 229;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new objectclas that conflicts with multiple existing objectclasses.
-   * This takes three arguments, which are the name or OID of the new
-   * objectclass, and the name or OID of the two objectclasses that were found
-   * to conflict with the new objectclass.
-   */
-  public static final int
-       MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_OBJECTCLASS =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 230;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new name form that conflicts with multiple existing name forms.  This
-   * takes three arguments, which are the name or OID of the new name form, and
-   * the name or OID of the two name forms that were found to conflict with the
-   * new name form.
-   */
-  public static final int
-       MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_NAME_FORM =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 231;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new name form that references an undefined structural objectclass.
-   * This takes two arguments, which are the name or OID of the new name form
-   * and the name or OID of the undefined objectclass.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_NF_UNDEFINED_STRUCTURAL_OC =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 232;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new name form that references an undefined required attribute type.
-   * This takes two arguments, which are the name or OID of the new name form
-   * and the name or OID of the undefined attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_NF_UNDEFINED_REQUIRED_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 233;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new name form that references an undefined optional attribute type.
-   * This takes two arguments, which are the name or OID of the new name form
-   * and the name or OID of the undefined attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_NF_UNDEFINED_OPTIONAL_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 234;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT content rule that conflicts with multiple existing DIT
-   * content rules.  This takes three arguments, which are the name of the new
-   * DIT content rule, and the names of the two DIT content rules that were
-   * found to conflict with the new DIT content rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DCR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 235;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT content rule that references a structural objectclass which
-   * is already referenced by an existing DIT copntent rule.  This takes three
-   * arguments, which are the name of the new DIT content rule, the name or OID
-   * of the structural objectclass, and the name of the conflicting DIT content
-   * rule.
-   */
-  public static final int
-       MSGID_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_DCR =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 236;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT content rule that references a structural objectclass which
-   * is not defined in the server schema.  This takes two arguments, which are
-   * the name of the new DIT content rule and the name or OID of the undefined
-   * objectclass.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_STRUCTURAL_OC =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 237;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT content rule that references an auxiliary objectclass which
-   * is not defined in the server schema.  This takes two arguments, which are
-   * the name of the new DIT content rule and the name or OID of the undefined
-   * objectclass.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_AUXILIARY_OC =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 238;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT content rule that references a required attribute type
-   * which is not defined in the server schema.  This takes two arguments, which
-   * are the name of the new DIT content rule and the name or OID of the
-   * undefined attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_REQUIRED_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 239;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT content rule that references an optional attribute type
-   * which is not defined in the server schema.  This takes two arguments, which
-   * are the name of the new DIT content rule and the name or OID of the
-   * undefined attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_OPTIONAL_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 240;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT content rule that references a prohibited attribute type
-   * which is not defined in the server schema.  This takes two arguments, which
-   * are the name of the new DIT content rule and the name or OID of the
-   * undefined attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_PROHIBITED_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 241;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT structure rule that conflicts with multiple existing DIT
-   * structure rules.  This takes three arguments, which are the name or rule ID
-   * of the new DIT structure rule, and the names or rule IDs of the two DIT
-   * structure rules that were found to conflict with the new DIT structure
-   * rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DSR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 242;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT structure rule that references a name form that is already
-   * referenced by another DIT structure rule.  This takes three arguemnts,
-   * which are the name or rule ID of the new DIT structure rule, the name or
-   * OID of the name form, and the name or rule ID of the conflicting DIT
-   * structure rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_NAME_FORM_CONFLICT_FOR_ADD_DSR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 243;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT structure rule that references a name form that is not
-   * defined in the server schema.  This takes two arguments, which are the name
-   * or rule ID of the new DIT structure rule and the name or OID of the
-   * undefined name form.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DSR_UNDEFINED_NAME_FORM =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 244;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new matching rule use that conflicts with multiple existing matching
-   * rule uses.  This takes three arguments, which are the name of the new
-   * matching rule use, and the names of the two matching rule uses that were
-   * found to conflict with the new matching rule use.
-   */
-  public static final int
-       MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_MR_USE =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 245;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new matching rule use that references a matching rule that is already
-   * associated with another matching rule use.  This takes three arguments,
-   * which are the name of the new matching rule use, the name or OID of the
-   * matching rule, and the name of the conflicting matching rule use.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_MR_CONFLICT_FOR_ADD_MR_USE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 246;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new matching rule use that references an attribute type that is not
-   * defined in the server schema.  This takes two arguments, which are the
-   * name of the new matching rule use and the name or OID of the undefined
-   * attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_MRU_UNDEFINED_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 247;
-
-
-
-  /**
-   * The message ID for the message that will be used if a circular reference
-   * is detected in the superior chain for an attribute type.  This takes a
-   * single argument, which is the name or OID of the attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CIRCULAR_REFERENCE_AT =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 248;
-
-
-
-  /**
-   * The message ID for the message that will be used if a circular reference
-   * is detected in the superior chain for an objectclass.  This takes a single
-   * argument, which is the name or OID of the objectclass.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CIRCULAR_REFERENCE_OC =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 249;
-
-
-
-  /**
-   * The message ID for the message that will be used if a circular reference
-   * is detected in the superior chain for a DIT structure rule.  This takes a
-   * single argument, which is the name or rule ID of the DIT structure rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CIRCULAR_REFERENCE_DSR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 250;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create copies of the current schema files, but the server was
-   * able to properly clean up after itself.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_CLEANED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 251;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create copies of the current schema files, and the server was
-   * not able to properly clean up after itself.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_NOT_CLEANED =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 252;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to write the new schema files, but the server was able to properly
-   * clean up after itself.  This takes a single argument,  which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_RESTORED =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 253;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to write the new schema files, and the server was not able to
-   * properly clean up after itself.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_NOT_RESTORED =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 254;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * an attribute type from the schema fails because there is no such attribute
-   * type defined.  This takes a single argument, which is the name or OID of
-   * the attribute type to remove.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_ATTRIBUTE_TYPE =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 255;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * an attribute type from the schema fails because it is the superior type for
-   * another attribute type.  This takes two arguments, which are the name or
-   * OID of the attribute type to remove, and the name or OID of the subordinate
-   * attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_AT_SUPERIOR_TYPE =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 256;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * an attribute type from the schema fails because the attribute type is
-   * referenced by an objectclass.  This takes two arguments, which are the name
-   * or OID of the attribute type and the name or OID of the objectclass.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_OC =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 257;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * an attribute type from the schema fails because the attribute type is
-   * referenced by a name form.  This takes two arguments, which are the name or
-   * OID of the attribute type and the name or OID of the name form.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_NF =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 258;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * an attribute type from the schema fails because the attribute type is
-   * referenced by a DIT content rule.  This takes two arguments, which are the
-   * name or OID of the attribute type and the name of the DIT content rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_DCR =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 259;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * an attribute type from the schema fails because the attribute type is
-   * referenced by a matching rule use.  This takes two arguments, which are the
-   * name or OID of the attribute type and the name of the matching rule use.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_MR_USE =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 260;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * an objectclass from the schema fails because there is no such objectclass
-   * defined.  This takes a single argument, which is the name or OID of the
-   * objectclass to remove.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_OBJECTCLASS =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 261;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * an objectclass from the schema fails because it is the superior class for
-   * another objectclass.  This takes two arguments, which are the name or OID
-   * of the objectclass to remove, and the name or OID of the subordinate
-   * objectclass.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_OC_SUPERIOR_CLASS =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 262;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * an objectclass from the schema fails because the objectclass is referenced
-   * by a name form.  This takes two arguments, which are the name or OID of the
-   * objectclass and the name or OID of the name form.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_OC_IN_NF =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 263;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * an objectclass from the schema fails because the objectclass is referenced
-   * by a DIT content rule.  This takes two arguments, which are the name or OID
-   * of the objectclass and the name of the DIT content rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_OC_IN_DCR =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 264;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * a name form from the schema fails because there is no such name form
-   * defined.  This takes a single argument, which is the name or OID of the
-   * name form to remove.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_NAME_FORM =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 265;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * a name form from the schema fails because the name form is referenced by a
-   * DIT structure rule.  This takes two arguments, which are the name or OID
-   * of the name form and the name or rule ID of the DIT structure rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_NF_IN_DSR =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 266;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * a DIT content rule from the schema fails because there is no such DIT
-   * content rule defined.  This takes a single argument, which is the name of
-   * the DIT content rule to remove.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_DCR =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 267;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * a DIT structure rule from the schema fails because there is no such DIT
-   * structure rule defined.  This takes a single argument, which is the name or
-   * rule ID of the DIT structure rule to remove.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_DSR =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 268;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * a DIT structure rule from the schema fails because it is the superior rule
-   * for another DIT structure rule.  This takes two arguments, which are the
-   * name or rule ID of the DIT structure rule to remove, and the name or rule
-   * ID of the subordinate rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_DSR_SUPERIOR_RULE =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 269;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to remove
-   * a matching rule use from the schema fails because there is no such matching
-   * rule use defined.  This takes a single argument, which is the name of the
-   * matching rule use to remove.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_MR_USE =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 270;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new name form that references an objectclass that is not structural.
-   * This takes two arguments, which are the name or OID of the new name form
-   * and the name or OID of the objectclass.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_NF_OC_NOT_STRUCTURAL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 271;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new DIT content rule that references an objectclass that is not
-   * structural.  This takes two arguments, which are the name of the new DIT
-   * content rule and the name or OID of the objectclass.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_OC_NOT_STRUCTURAL =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 272;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new name form that references a structural objectclass which is
-   * already referenced by an existing name form.  This takes three arguments,
-   * which are the name or OID of the new name form, the name or OID of the
-   * structural objectclass, and the name or OID of the conflicting name form.
-   */
-  public static final int
-       MSGID_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_NF =
-            CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 273;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an attribute type whose superior type is OBSOLETE.  This takes two
-   * arguments, which are the name or OID of the attribute type and the name or
-   * OID of the superior type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_ATTRIBUTE_TYPE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 274;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an attribute type with a matching rule that is OBSOLETE.  This takes
-   * two arguments, which are the name or OID of the attribute type and the name
-   * or OID of the matching rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 275;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an object class whose superior class is OBSOLETE.  This takes two
-   * arguments, which are the name or OID of the object class and the name or
-   * OID of the superior class.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_OBJECTCLASS =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 276;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an object class that requires an OBSOLETE attribute type.  This takes
-   * two arguments, which are the name or OID of the object class and the name
-   * or OID of the required attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_OC_OBSOLETE_REQUIRED_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 277;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an object class that allows an OBSOLETE attribute type.  This takes
-   * two arguments, which are the name or OID of the object class and the name
-   * or OID of the optional attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_OC_OBSOLETE_OPTIONAL_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 278;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a name form whose structural object class is marked OBSOLETE.  This
-   * takes two arguments, which are the name or OID of the name form and the
-   * name or OID of the structural object class.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_NF_OC_OBSOLETE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 279;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a name form that requires an attribute type which is marked OBSOLETE.
-   * This takes two arguments, which are the name or OID of the name form and
-   * the name or OID of the required attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_NF_OBSOLETE_REQUIRED_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 280;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a name form that allows an attribute type which is marked OBSOLETE.
-   * This takes two arguments, which are the name or OID of the name form and
-   * the  name or OID of the optional attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_NF_OBSOLETE_OPTIONAL_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 281;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a DIT content rule whose structural object class is marked OBSOLETE.
-   * This takes two arguments, which are the name of the DIT content rule and
-   * the name or OID of the structural object class.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_STRUCTURAL_OC_OBSOLETE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 282;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a DIT content rule with an auxiliary object class that is not declared
-   * auxiliary.  This takes two arguments, which are the name of the DIT content
-   * rule and the name or OID of the object class.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_OC_NOT_AUXILIARY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 283;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a DIT content rule with an AUXILIARY object class that is marked
-   * OBSOLETE.  This takes two arguments, which are the name of the DIT content
-   * rule and the name or OID of the auxiliary object class.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_AUXILIARY_OC_OBSOLETE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 284;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a DIT content rule that requires an attribute type that is marked
-   * OBSOLETE.  This takes two arguments, which are the name of the DIT content
-   * rule and the name or OID of the attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_REQUIRED_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 285;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a DIT content rule that allows an attribute type that is marked
-   * OBSOLETE.  This takes two arguments, which are the name of the DIT content
-   * rule and the name or OID of the attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_OPTIONAL_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 286;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a DIT content rule that prohibits an attribute type that is marked
-   * OBSOLETE.  This takes two arguments, which are the name of the DIT content
-   * rule and the name or OID of the attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_PROHIBITED_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 287;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a DIT structure rule whose associated name form is marked OBSOLETE.
-   * This takes two arguments, which are the name or rule ID of the DIT
-   * structure rule and the name or OID of the name form.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DSR_OBSOLETE_NAME_FORM =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 288;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a DIT structure rule with a superior rule that is marked OBSOLETE.
-   * This takes two arguments, which are the name or rule ID of the DIT
-   * structure rule and the name or rule ID of the superior rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DSR_OBSOLETE_SUPERIOR_RULE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 289;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a matching rule use with a matching rule that is marked OBSOLETE.  This
-   * takes two arguments, which are the name of the matching rule use and the
-   * name or OID of the matching rule.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_MRU_OBSOLETE_MR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 290;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a matching rule use with an attribute type that is marked OBSOLETE.
-   * This takes two arguments, which are the name of the matching rule use and
-   * the name or OID of the attribute type.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_MRU_OBSOLETE_ATTR =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 291;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a DIT content rule with an auxiliary object class that is declared
-   * OBSOLETE.  This takes two arguments, which are the name of the DIT content
-   * rule and the name or OID of the object class.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_AUXILIARY_OC =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 292;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user attempts to
-   * modify the server schema without the appropriate privilege.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_SCHEMA_MODIFY_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_MILD_ERROR | 293;
-
-
-
-  /**
-   * The message ID for the message that will be used if the schema backend is
-   * unable to find a file containing the concatenated schema definitions.  This
-   * takes three arguments, which are the path to the directory in which the
-   * file should have been found, the name of the most recent concatenated
-   * schema file, and the name of the base concatenated schema file shipped with
-   * the server.
-   */
-  public static final int MSGID_SCHEMA_CANNOT_FIND_CONCAT_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 294;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting determine whether there were any changes made to the server
-   * schema while the server was offline.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_ERROR_DETERMINING_SCHEMA_CHANGES =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 295;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to write a file containing the concatenated server schema.  This
-   * takes two arguments, which are the path to the file being written and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SCHEMA_CANNOT_WRITE_CONCAT_SCHEMA_FILE =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 296;
-
-
-
-  /**
-   * The message ID for the message that will be used if the JE
-   * backend throws a RunRecoveryException and marks the Environment
-   * unusable. This takes one argument, which is the backend id throwing the
-   * exception.
-   */
-  public static final int MSGID_BACKEND_ENVIRONMENT_UNUSABLE =
-         CATEGORY_MASK_BACKEND | SEVERITY_MASK_NOTICE | 297;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * schedule a task that is not included in the set of allowed tasks.  This
-   * takes a single argument, which is the name of the target class.
-   */
-  public static final int MSGID_TASKSCHED_NOT_ALLOWED_TASK =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_SEVERE_ERROR | 298;
-
-
-
-  /**
-   * The message ID for the message that will be used as the body of the
-   * notification e-mail message sent when a task is completed.  It takes
-   * five arguments, which are string representations of the task ID, task
-   * state, scheduled start date, actual start date, and completion date.
-   */
-  public static final int MSGID_TASK_COMPLETION_BODY =
-       CATEGORY_MASK_BACKEND | SEVERITY_MASK_INFORMATIONAL | 299;
-
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_BACKEND_CANNOT_REMOVE_MULTIBASE_SUB_SUFFIX,
-                    "An attempt was made to de-register sub-suffix \"%s\" "+
-                    "from the backend with suffix \"%s\".  However, the " +
-                    "subordinate backend containing that sub-suffix also " +
-                    "contains additional sub-suffixes and may not be " +
-                    "de-registered.  It may be possible to remove this " +
-                    "sub-suffix by editing the configuration for the " +
-                    "subordinate backend with which it is associated");
-    registerMessage(MSGID_BACKEND_CANNOT_LOCK_ENTRY,
-                    "The Directory Server was unable to obtain a lock on " +
-                    "entry %s after multiple attempts.  This could mean that " +
-                    "the entry is already locked by a long-running operation " +
-                    "or that the entry has previously been locked but was " +
-                    "not properly unlocked");
-    registerMessage(MSGID_BACKEND_CANNOT_REGISTER_BASEDN,
-                    "An error occurred while attempting to register base DN " +
-                    "in the Directory Server:  %s");
-
-
-    registerMessage(MSGID_ROOTDSE_CONFIG_ENTRY_NULL,
-                    "An attempt was made to configure the root DSE backend " +
-                    "without providing a configuration entry.  This is not " +
-                    "allowed");
-    registerMessage(MSGID_ROOTDSE_SUBORDINATE_BASE_DESCRIPTION,
-                    "Specifies the set of base DNs that will be used for " +
-                    "singleLevel, wholeSubtree, and subordinateSubtree " +
-                    "searches based at the root DSE.  If this is not " +
-                    "provided, then the set of all user-defined suffixes " +
-                    "will be used");
-    registerMessage(MSGID_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE,
-                    "Base DN \"%s\" is configured as one of the subordinate " +
-                    "base DNs to use for searches below the root DSE.  " +
-                    "However, this base DN is not handled by any suffix " +
-                    "registered with the Directory Server and will therefore " +
-                    "not be used");
-    registerMessage(MSGID_ROOTDSE_SUBORDINATE_BASE_EXCEPTION,
-                    "An unexpected problem occurred while trying to " +
-                    "determine the set of subordinate base DNs to use for " +
-                    "searches below the root DSE:  %s");
-    registerMessage(MSGID_ROOTDSE_DESCRIPTION_SHOW_ALL_ATTRIBUTES,
-                    "Indicates whether all attributes in the root DSE should " +
-                    "be treated like user attributes (and therefore returned " +
-                    "to clients by default) regardless of the Directory " +
-                    "Server schema configuration");
-    registerMessage(MSGID_ROOTDSE_CANNOT_DETERMINE_ALL_USER_ATTRIBUTES,
-                    "An error occurred while trying to determine the value " +
-                    "of the %s configuration attribute, which controls " +
-                    "whether to treat all root DSE attributes like user " +
-                    "attributes:  %s.  The attributes in the root DSE will " +
-                    "be treated based on their definition in the server " +
-                    "schema");
-    registerMessage(MSGID_ROOTDSE_GET_ENTRY_NONROOT,
-                    "The root DSE backend was asked to retrieve entry with " +
-                    "DN \"%s\".  This backend should only be asked to " +
-                    "retrieve the root DSE itself.  However, it will check " +
-                    "with the defined subordinate backends and see if it " +
-                    "can find the requested entry");
-    registerMessage(MSGID_ROOTDSE_ADD_NOT_SUPPORTED,
-                    "Unwilling to add entry \"%s\" because add operations " +
-                    "are not supported in the root DSE backend");
-    registerMessage(MSGID_ROOTDSE_DELETE_NOT_SUPPORTED,
-                    "Unwilling to remove entry \"%s\" because delete " +
-                    "operations are not supported in the root DSE backend");
-    registerMessage(MSGID_ROOTDSE_MODIFY_NOT_SUPPORTED,
-                    "Unwilling to update entry \"%s\" because modify " +
-                    "operations are not supported in the root DSE backend.  " +
-                    "If you wish to alter the contents of the root DSE " +
-                    "itself, then it may be possible to do so by modifying " +
-                    "the \"%s\" entry in the configuration");
-    registerMessage(MSGID_ROOTDSE_MODIFY_DN_NOT_SUPPORTED,
-                    "Unwilling to rename entry \"%s\" because modify DN " +
-                    "operations are not supported in the root DSE backend");
-    registerMessage(MSGID_ROOTDSE_INVALID_SEARCH_BASE,
-                    "Unwilling to perform a search (connection ID %d, " +
-                    "operation ID %d) with a base DN of \"%s\" in the root " +
-                    "DSE backend.  The base DN for searches in this backend " +
-                    "must be the DN of the root DSE itself");
-    registerMessage(MSGID_ROOTDSE_UNEXPECTED_SEARCH_FAILURE,
-                    "An unexpected failure occurred while trying to process " +
-                    "a search operation (connection ID %d, operation ID %d) " +
-                    "in the root DSE backend:  %s");
-    registerMessage(MSGID_ROOTDSE_INVALID_SEARCH_SCOPE,
-                    "Unable to process the search with connection ID %d and " +
-                    "operation ID %d because it had an invalid scope of %s");
-    registerMessage(MSGID_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER,
-                    "An unexpected error occurred while trying to open the " +
-                    "LDIF writer for the root DSE backend:  %s");
-    registerMessage(MSGID_ROOTDSE_UNABLE_TO_EXPORT_DSE,
-                    "An unexpected error occurred while trying to export the " +
-                    "root DSE entry to the specified LDIF target: %s");
-    registerMessage(MSGID_ROOTDSE_IMPORT_NOT_SUPPORTED,
-                    "The root DSE backend does not support LDIF import " +
-                    "operations");
-    registerMessage(MSGID_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED,
-                    "The root DSE backend does not provide a facility for " +
-                    "backup and restore operations.  The contents of the " +
-                    "root DSE should be backed up as part of the Directory " +
-                    "Server configuration");
-    registerMessage(MSGID_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS,
-                    "The root DSE configuration has been updated so that it " +
-                    "will now use the defined set of Directory Server " +
-                    "suffixes when performing searches below the root DSE");
-    registerMessage(MSGID_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS,
-                    "The root DSE configuration has been updated so that it " +
-                    "will now use the base DN set %s when performing " +
-                    "below the root DSE");
-    registerMessage(MSGID_ROOTDSE_UPDATED_SHOW_ALL_ATTRS,
-                    "The root DSE configuration has been updated so that " +
-                    "configuration attribute %s will now use a value of %s");
-    registerMessage(MSGID_ROOTDSE_USING_NEW_USER_ATTRS,
-                    "The root DSE configuration has been updated so that it " +
-                    "will now use a new set of user-defined attributes");
-
-
-    registerMessage(MSGID_MONITOR_CONFIG_ENTRY_NULL,
-                    "An attempt was made to configure the monitor backend " +
-                    "without providing a configuration entry.  This is not " +
-                    "allowed, and no monitor information will be available " +
-                    "over protocol");
-    registerMessage(MSGID_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN,
-                    "An unexpected error occurred while attempting to decode " +
-                    DN_MONITOR_ROOT + " as the base DN for the Directory " +
-                    "Server monitor information:  %s.  No monitor " +
-                    "information will be available over protocol");
-    registerMessage(MSGID_MONITOR_ADD_NOT_SUPPORTED,
-                    "Unwilling to add entry \"%s\" because add operations " +
-                    "are not supported in the monitor backend");
-    registerMessage(MSGID_MONITOR_DELETE_NOT_SUPPORTED,
-                    "Unwilling to remove entry \"%s\" because delete " +
-                    "operations are not supported in the monitor backend");
-    registerMessage(MSGID_MONITOR_MODIFY_NOT_SUPPORTED,
-                    "Unwilling to update entry \"%s\" because modify " +
-                    "operations are not supported in the monitor backend.  " +
-                    "If you wish to alter the contents of the base monitor " +
-                    "entry itself, then it may be possible to do so by " +
-                    "modifying the \"%s\" entry in the configuration");
-    registerMessage(MSGID_MONITOR_MODIFY_DN_NOT_SUPPORTED,
-                    "Unwilling to rename entry \"%s\" because modify DN " +
-                    "operations are not supported in the monitor backend");
-    registerMessage(MSGID_MONITOR_UNABLE_TO_EXPORT_BASE,
-                    "An error occurred while attempting to export the base " +
-                    "monitor entry:  %s");
-    registerMessage(MSGID_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY,
-                    "An error occurred while attempting to export the " +
-                    "monitor entry for monitor provider %s:  %s");
-    registerMessage(MSGID_MONITOR_IMPORT_NOT_SUPPORTED,
-                    "The monitor backend does not support LDIF import " +
-                    "operations");
-    registerMessage(MSGID_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED,
-                    "The monitor backend does not provide a facility for " +
-                    "backup and restore operations");
-    registerMessage(MSGID_MONITOR_USING_NEW_USER_ATTRS,
-                    "The monitor configuration has been updated so that it " +
-                    "will now use a new set of user-defined attributes");
-    registerMessage(MSGID_MONITOR_GET_ENTRY_NULL,
-                    "Unable to retrieve the requested entry from the monitor " +
-                    "backend because the provided DN was null");
-    registerMessage(MSGID_MONITOR_BASE_TOO_DEEP,
-                    "Unable to retrieve the requested entry %s from the " +
-                    "monitor backend because the DN is too deep.  Monitor " +
-                    "entries may not be more than one level below %s");
-    registerMessage(MSGID_MONITOR_INVALID_BASE,
-                    "Unable to retrieve the requested entry %s from the " +
-                    "monitor backend because the DN is not below the monitor " +
-                    "base of %s");
-    registerMessage(MSGID_MONITOR_MULTIVALUED_RDN,
-                    "Unable to retrieve the requested entry %s from the " +
-                    "monitor backend because monitor entries may not contain " +
-                    "multivalued RDNs");
-    registerMessage(MSGID_MONITOR_NO_SUCH_PROVIDER,
-                    "Unable to retrieve the requested entry from the monitor " +
-                    "backend because there is no monitor provider \"%s\" " +
-                    "registered with the Directory Server");
-    registerMessage(MSGID_MONITOR_UPTIME,
-                    "%d days %d hours %d minutes %d seconds");
-
-
-    registerMessage(MSGID_SCHEMA_CONFIG_ENTRY_NULL,
-                    "An attempt was made to configure the schema backend " +
-                    "without providing a configuration entry.  This is not " +
-                    "allowed, and no schema information will be available " +
-                    "over protocol");
-    registerMessage(MSGID_SCHEMA_DESCRIPTION_ENTRY_DN,
-                    "Specifies the DN or set of DNs for the entries that may " +
-                    "be retrieved in order to retrieve the Directory Server " +
-                    "schema information.  Multiple values may be provided " +
-                    "if the schema is to be available in multiple " +
-                    "locations for compatibility purposes.  If no value is " +
-                    "provided, a default of \"" + DN_DEFAULT_SCHEMA_ROOT +
-                    "\" will be used");
-    registerMessage(MSGID_SCHEMA_DESCRIPTION_SHOW_ALL_ATTRIBUTES,
-                    "Indicates whether to treat attributes in the subschema " +
-                    "entry as user attributes even if they are marked " +
-                    "operational.  This may provide compatibility with some " +
-                    "applications that expect schema attributes like " +
-                    "attributeType and objectClasses to be included by " +
-                    "default even if they are not requested.  Note that the " +
-                    "ldapSyntaxes attribute will always be treated as " +
-                    "operational in order to avoid problems with attempts to " +
-                    "modify the schema over protocol");
-    registerMessage(MSGID_SCHEMA_CANNOT_DETERMINE_BASE_DN,
-                    "An error occurred while trying to determine the base " +
-                    "DNs to use when publishing the Directory Server schema " +
-                    "information, as specified in the " + ATTR_SCHEMA_ENTRY_DN +
-                    " attribute of configuration entry %s:  %s.  The default " +
-                    "schema base DN of " + DN_DEFAULT_SCHEMA_ROOT +
-                    " will be used");
-    registerMessage(MSGID_SCHEMA_CANNOT_DETERMINE_SHOW_ALL,
-                    "An error occurred while trying to determine whether to " +
-                    "treat all subschema entry attributes as user attributes " +
-                    "regardless of the way they are defined in the schema, " +
-                    "as specified in the " + ATTR_SCHEMA_SHOW_ALL_ATTRIBUTES +
-                    " attribute of configuration entry %s:  %s.  The default " +
-                    "behavior, which is to treat the attribute types as " +
-                    "defined in the server schema, will be used");
-    registerMessage(MSGID_SCHEMA_CANNOT_FIND_CONCAT_FILE,
-                    "Unable to find a file containing concatenated schema " +
-                    "element definitions in order to determine if any schema " +
-                    "changes were made with the server offline.  The " +
-                    "file was expected in the %s directory and should have " +
-                    "been named either %s or %s");
-    registerMessage(MSGID_SCHEMA_ERROR_DETERMINING_SCHEMA_CHANGES,
-                    "An error occurred while attempting to determine whether " +
-                    "any schema changes had been made by directly editing " +
-                    "the schema files with the server offline:  %s");
-    registerMessage(MSGID_SCHEMA_CANNOT_WRITE_CONCAT_SCHEMA_FILE,
-                    "An error occurred while attempting to write file %s " +
-                    "containing a concatenated list of all server schema " +
-                    "elements:  %s.  The server may not be able to " +
-                    "accurately identify any schema changes made with the " +
-                    "server offline");
-    registerMessage(MSGID_SCHEMA_ADD_NOT_SUPPORTED,
-                    "Unwilling to add entry \"%s\" because add operations " +
-                    "are not supported in the schema backend");
-    registerMessage(MSGID_SCHEMA_DELETE_NOT_SUPPORTED,
-                    "Unwilling to remove entry \"%s\" because delete " +
-                    "operations are not supported in the schema backend");
-    registerMessage(MSGID_SCHEMA_MODIFY_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to modify the " +
-                    "Directory Server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_NOT_SUPPORTED,
-                    "Unwilling to update entry \"%s\" because modify " +
-                    "operations are not yet supported in the schema " +
-                    "backend.  If you wish to alter the contents of the base " +
-                    "schema entry itself, then it may be possible to do so " +
-                    "by modifying the \"%s\" entry in the configuration");
-    registerMessage(MSGID_SCHEMA_DELETE_MODTYPE_NOT_SUPPORTED,
-                    "The schema backend does not currently support removing " +
-                    "existing schema elements");
-    registerMessage(MSGID_SCHEMA_INVALID_MODIFICATION_TYPE,
-                    "The schema backend does not support the %s modification " +
-                    "type");
-    registerMessage(MSGID_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE,
-                    "The schema backend does not support the modification of " +
-                    "the %s attribute type.  Only attribute types, object " +
-                    "classes, name forms, DIT content rules, DIT structure " +
-                    "rules, and matching rule uses may be modified");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE,
-                    "An error occurred while attempting to decode the " +
-                    "attribute type \"%s\":  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_ATTRTYPE_ALREADY_EXISTS,
-                    "Unable to add attribute type  %s to the server schema " +
-                    "because there is an existing attribute type with a " +
-                    "conflicting name or OID:  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS,
-                    "An error occurred while attempting to decode the object " +
-                    "class \"%s\":  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM,
-                    "An error occurred while attempting to decode the name " +
-                    "form \"%s\":  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_DECODE_DCR,
-                    "An error occurred while attempting to decode the DIT " +
-                    "content rule \"%s\":  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_DECODE_DSR,
-                    "An error occurred while attempting to decode the DIT " +
-                    "structure rule \"%s\":  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE,
-                    "An error occurred while attempting to decode the " +
-                    "matching rule use \"%s\":  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_DELETE_NO_VALUES,
-                    "The server will not allow removing all values for the " +
-                    "%s attribute type in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_OBJECTCLASS,
-                    "Unable to add objectclass %s because its superior " +
-                    "class of %s is not defined in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_OC_UNDEFINED_REQUIRED_ATTR,
-                    "Unable to add objectclass %s because it requires " +
-                    "attribute %s which is not defined in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_OC_UNDEFINED_OPTIONAL_ATTR,
-                    "Unable to add objectclass %s because it allows " +
-                    "attribute %s which is not defined in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_OBJECTCLASS_ALREADY_EXISTS,
-                    "Unable to add objectclass %s to the server schema " +
-                    "because there is an existing objectclass with a " +
-                    "conflicting name or OID:  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_READ_EXISTING_USER_SCHEMA,
-                    "An error occurred while attempting to read the contents " +
-                    "of schema file %s:  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_WRITE_NEW_SCHEMA,
-                    "An error occurred while attepting to write the updated " +
-                    "schema:  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_DN_NOT_SUPPORTED,
-                    "Unwilling to rename entry \"%s\" because modify DN " +
-                    "operations are not supported in the schema backend");
-    registerMessage(MSGID_SCHEMA_UNABLE_TO_EXPORT_BASE,
-                    "An error occurred while attempting to export the base " +
-                    "schema entry:  %s");
-    registerMessage(MSGID_SCHEMA_IMPORT_NOT_SUPPORTED,
-                    "The schema backend does not support LDIF import " +
-                    "operations");
-    registerMessage(MSGID_SCHEMA_BACKUP_AND_RESTORE_NOT_SUPPORTED,
-                    "The schema backend does not yet provide a facility for " +
-                    "backup and restore operations");
-    registerMessage(MSGID_SCHEMA_INVALID_BASE,
-                    "Unable to retrieve the requested entry %s from the " +
-                    "schema backend because the DN is equal to one of the " +
-                    "schema entry DNs");
-    registerMessage(MSGID_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER,
-                    "An unexpected error occurred while trying to open the " +
-                    "LDIF writer for the schema backend:  %s");
-    registerMessage(MSGID_SCHEMA_DEREGISTERED_BASE_DN,
-                    "Successfully deregistered DN %s so that it will no " +
-                    "longer be available as a schema entry DN");
-    registerMessage(MSGID_SCHEMA_CANNOT_DEREGISTER_BASE_DN,
-                    "An error occurred while trying to deregister %s as a " +
-                    "schema entry DN:  %s");
-    registerMessage(MSGID_SCHEMA_REGISTERED_BASE_DN,
-                    "Successfully registered DN %s as a new schema entry DN");
-    registerMessage(MSGID_SCHEMA_CANNOT_REGISTER_BASE_DN,
-                    "An error occurred while trying to register %s as a " +
-                    "schema entry DN:  %s");
-    registerMessage(MSGID_SCHEMA_USING_NEW_USER_ATTRS,
-                    "The schema configuration has been updated so that it " +
-                    "will now use a new set of user-defined attributes");
-    registerMessage(MSGID_SCHEMA_BACKUP_CANNOT_GET_MAC,
-                    "An error occurred while attempting to obtain the %s MAC " +
-                    "provider to create the signed hash for the backup:  %s");
-    registerMessage(MSGID_SCHEMA_BACKUP_CANNOT_GET_DIGEST,
-                    "An error occurred while attempting to obtain the %s " +
-                    "message digest to create the hash for the backup:  %s");
-    registerMessage(MSGID_SCHEMA_BACKUP_CANNOT_CREATE_ARCHIVE_FILE,
-                    "An error occurred while trying to create the schema " +
-                    "archive file %s in directory %s:  %s");
-    registerMessage(MSGID_SCHEMA_BACKUP_CANNOT_GET_CIPHER,
-                    "An error occurred while attempting to obtain the %s " +
-                    "cipher to use to encrypt the backup:  %s");
-    registerMessage(MSGID_SCHEMA_BACKUP_ZIP_COMMENT,
-                    "%s schema backup %s");
-    registerMessage(MSGID_SCHEMA_BACKUP_CANNOT_LIST_SCHEMA_FILES,
-                    "An error occurred while attempting to obtain a list " +
-                    "of the files in directory %s to include in the schema " +
-                    "backup:  %s");
-    registerMessage(MSGID_SCHEMA_BACKUP_CANNOT_BACKUP_SCHEMA_FILE,
-                    "An error occurred while attempting to back up schema " +
-                    "file %s:  %s");
-    registerMessage(MSGID_SCHEMA_BACKUP_CANNOT_CLOSE_ZIP_STREAM,
-                    "An error occurred while trying to close the schema " +
-                    "archive file %s in directory %s:  %s");
-    registerMessage(MSGID_SCHEMA_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR,
-                    "An error occurred while attempting to update the backup " +
-                    "descriptor file %s with information about the schema " +
-                    "backup:  %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_ATTRTYPE,
-                    "Unable to add attribute type %s because it conflicts " +
-                    "with multiple existing attribute types (%s and " +
-                    "%s)");
-    registerMessage(MSGID_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_ATTRIBUTE_TYPE,
-                    "Unable to add attribute type %s because it references " +
-                    "superior attribute type %s which is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_OBJECTCLASS,
-                    "Unable to add objectclass %s because it conflicts with " +
-                    "multiple existing objectclasses (%s and %s)");
-    registerMessage(MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_NAME_FORM,
-                    "Unable to add name form %s because it conflicts with " +
-                    "multiple existing name forms (%s and %s)");
-    registerMessage(MSGID_SCHEMA_MODIFY_NF_UNDEFINED_STRUCTURAL_OC,
-                    "Unable to add name form %s because it references " +
-                    "structural objectclass %s which is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_NF_OC_NOT_STRUCTURAL,
-                    "Unable to add name form %s because it references " +
-                    "objectclass %s which is defined in the server schema " +
-                    "but is not a structural objectclass");
-    registerMessage(MSGID_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_NF,
-                    "Unable to add name form %s because it references " +
-                    "structural objectclass %s which is already associated " +
-                    "with another name form %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_NF_UNDEFINED_REQUIRED_ATTR,
-                    "Unable to add name form %s because it references " +
-                    "required attribute type %s which is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_NF_UNDEFINED_OPTIONAL_ATTR,
-                    "Unable to add name form %s because it references " +
-                    "optional attribute type %s which is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DCR,
-                    "Unable to add DIT content rule %s because it conflicts " +
-                    "with multiple existing DIT content rules (%s and %s)");
-    registerMessage(MSGID_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_DCR,
-                    "Unable to add DIT content rule %s because it " +
-                    "references structural objectclass %s which is already " +
-                    "associated with another DIT content rule %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_STRUCTURAL_OC,
-                    "Unable to add DIT content rule %s because it " +
-                    "references structural objectclass %s which is not " +
-                    "defined in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_OC_NOT_STRUCTURAL,
-                    "Unable to add DIT content rule %s because it " +
-                    "references structural objectclass %s which is defined " +
-                    "in the server schema but is not structural");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_AUXILIARY_OC,
-                    "Unable to add DIT content rule %s because it " +
-                    "references auxiliary objectclass %s which is not " +
-                    "defined in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_REQUIRED_ATTR,
-                    "Unable to add DIT content rule %s because it " +
-                    "references required attribute type %s which is not " +
-                    "defined in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_OPTIONAL_ATTR,
-                    "Unable to add DIT content rule %s because it " +
-                    "references optional attribute type %s which is not " +
-                    "defined in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_UNDEFINED_PROHIBITED_ATTR,
-                    "Unable to add DIT content rule %s because it " +
-                    "references prohibited attribute type %s which is not " +
-                    "defined in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DSR,
-                    "Unable to add DIT structure rule %s because it " +
-                    "conflicts with multiple existing DIT structure rules " +
-                    "(%s and %s)");
-    registerMessage(MSGID_SCHEMA_MODIFY_NAME_FORM_CONFLICT_FOR_ADD_DSR,
-                    "Unable to add DIT structure rule %s because it " +
-                    "references name form %s which is already associated " +
-                    "with another DIT structure rule %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_DSR_UNDEFINED_NAME_FORM,
-                    "Unable to add DIT structure rule %s because it " +
-                    "references name form %s which is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_MR_USE,
-                    "Unable to add matching rule use %s because it " +
-                    "conflicts with multiple existing matching rule uses " +
-                    "(%s and %s)");
-    registerMessage(MSGID_SCHEMA_MODIFY_MR_CONFLICT_FOR_ADD_MR_USE,
-                    "Unable to add matching rule use %s because it " +
-                    "references matching rule %s which is already associated " +
-                    "with another matching rule use %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_MRU_UNDEFINED_ATTR,
-                    "Unable to add matching rule use %s because it " +
-                    "references attribute type %s which is not defined in " +
-                    "the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_CIRCULAR_REFERENCE_AT,
-                    "Circular reference detected for attribute type %s in " +
-                    "which the superior type chain references the " +
-                    "attribute type itself");
-    registerMessage(MSGID_SCHEMA_MODIFY_CIRCULAR_REFERENCE_OC,
-                    "Circular reference detected for objectclass %s in which " +
-                    "the superior class chain references the objectclass " +
-                    "itself");
-    registerMessage(MSGID_SCHEMA_MODIFY_CIRCULAR_REFERENCE_DSR,
-                    "Circular reference detected for DIT structure rule %s " +
-                    "in which the superior rule chain references the DIT " +
-                    "structure rule itself");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_CLEANED,
-                    "An error occurred while attempting to create copies " +
-                    "of the existing schema files before applying the " +
-                    "updates:  %s.  The server was able to restore the " +
-                    "original schema configuration, so no additional " +
-                    "cleanup should be required");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_NOT_CLEANED,
-                    "An error occurred while attempting to create copies " +
-                    "of the existing schema files before applying the " +
-                    "updates:  %s.  A problem also occurred when attempting " +
-                    "to restore the original schema configuration, so the " +
-                    "server may be left in an inconsistent state and could " +
-                    "require manual cleanup");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_RESTORED,
-                    "An error occurred while attempting to write new " +
-                    "versions of the server schema files:  %s.   The server " +
-                    "was able to restore the original schema configuration, " +
-                    "so no additional cleanup should be required");
-    registerMessage(MSGID_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_NOT_RESTORED,
-                    "An error occrred while attempting to write new " +
-                    "versions of the server schema files:  %s.  A problem " +
-                    "also occurred when attempting to restore the original " +
-                    "schema configuration, so the server may be left in an " +
-                    "inconsistent state and could require manual cleanup");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_ATTRIBUTE_TYPE,
-                    "Unable to remove attribute type %s from the server " +
-                    "schema because no such attribute type is defined");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_AT_SUPERIOR_TYPE,
-                    "Unable to remove attribute type %s from the server " +
-                    "schema because it is referenced as the superior type " +
-                    "for attribute type %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_OC,
-                    "Unable to remove attribute type %s from the server " +
-                    "schema because it is referenced as a required or " +
-                    "optional attribute type in objectclass %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_NF,
-                    "Unable to remove attribute type %s from the server " +
-                    "schema because it is referenced as a required or " +
-                    "optional attribute type in name form %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_DCR,
-                    "Unable to remove attribute type %s from the server " +
-                    "schema because it is referenced as a required, " +
-                    "optional, or prohibited attribute type in DIT content " +
-                    "rule %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_AT_IN_MR_USE,
-                    "Unable to remove attribute type %s from the server " +
-                    "schema because it is referenced by matching rule use %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_OBJECTCLASS,
-                    "Unable to remove objectclass %s from the server schema " +
-                    "because no such objectclass is defined");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_OC_SUPERIOR_CLASS,
-                    "Unable to remove objectclass %s from the server schema " +
-                    "because it is referenced as the superior class for " +
-                    "objectclass %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_OC_IN_NF,
-                    "Unable to remove objectclass %s from the server schema " +
-                    "because it is referenced as the structural class for " +
-                    "name form %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_OC_IN_DCR,
-                    "Unable to remove objectclass %s from the server schema " +
-                    "because it is referenced as a structural or auxiliary " +
-                    "class for DIT content rule %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_NAME_FORM,
-                    "Unable to remove name form %s from the server schema " +
-                    "because no such name form is defined");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_NF_IN_DSR,
-                    "Unable to remove name form %s from the server schema " +
-                    "because it is referenced by DIT structure rule %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_DCR,
-                    "Unable to remove DIT content rule %s from the server " +
-                    "schema because no such DIT content rule is defined");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_DSR,
-                    "Unable to remove DIT structure rule %s from the server " +
-                    "schema because no such DIT structure rule is defined");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_DSR_SUPERIOR_RULE,
-                    "Unable to remove DIT structure rule %s from the server " +
-                    "schema because it is referenced as a superior rule for " +
-                    "DIT structure rule %s");
-    registerMessage(MSGID_SCHEMA_MODIFY_REMOVE_NO_SUCH_MR_USE,
-                    "Unable to remove matching rule use %s from the server " +
-                    "schema because no such matching rule use is defined");
-    registerMessage(MSGID_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_ATTRIBUTE_TYPE,
-                    "Unable to add attribute type %s because the superior " +
-                    "type %s is marked as OBSOLETE in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR,
-                    "Unable to add attribute type %s because the associated " +
-                    "matching rule %s is marked as OBSOLETE in the server " +
-                    "schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_OBJECTCLASS,
-                    "Unable to add object class %s because the superior " +
-                    "class %s is marked as OBSOLETE in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_OC_OBSOLETE_REQUIRED_ATTR,
-                    "Unable to add object class %s because required " +
-                    "attribute %s is marked as OBSOLETE in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_OC_OBSOLETE_OPTIONAL_ATTR,
-                    "Unable to add object class %s because optional " +
-                    "attribute %s is marked as OBSOLETE in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_NF_OC_OBSOLETE,
-                    "Unable to add name form %s because its structural " +
-                    "object class %s is marked as OBSOLETE in the server " +
-                    "schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_NF_OBSOLETE_REQUIRED_ATTR,
-                    "Unable to add name form %s because it requires " +
-                    "attribute type %s which is marked as OBSOLETE in the " +
-                    "server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_NF_OBSOLETE_OPTIONAL_ATTR,
-                    "Unable to add name form %s because it allows " +
-                    "attribute type %s which is marked as OBSOLETE in the " +
-                    "server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_STRUCTURAL_OC_OBSOLETE,
-                    "Unable to add DIT content rule %s because its " +
-                    "structural object class %s is marked as OBSOLETE in " +
-                    "the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_OC_NOT_AUXILIARY,
-                    "Unable to add DIT content rule %s because it references " +
-                    "auxiliary object class %s which is defined in the " +
-                    "server schema but is not an auxiliary class");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_AUXILIARY_OC,
-                    "Unable to add DIT content rule %s because it references " +
-                    "auxiliary object class %s which is marked as OBSOLETE " +
-                    "in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_AUXILIARY_OC_OBSOLETE,
-                    "Unable to add DIT content rule %s because it allows " +
-                    "auxiliary object class %s which is marked as OBSOLETE " +
-                    "in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_REQUIRED_ATTR,
-                    "Unable to add DIT content rule %s because it requires " +
-                    "attribute type %s which is marked as OBSOLETE in the " +
-                    "server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_OPTIONAL_ATTR,
-                    "Unable to add DIT content rule %s because it allows " +
-                    "attribute type %s which is marked as OBSOLETE in the " +
-                    "server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DCR_OBSOLETE_PROHIBITED_ATTR,
-                    "Unable to add DIT content rule %s because it prohibits " +
-                    "attribute type %s which is marked as OBSOLETE in the " +
-                    "server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DSR_OBSOLETE_NAME_FORM,
-                    "Unable to add DIT structure rule %s because its name " +
-                    "form %s is marked OBSOLETE in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_DSR_OBSOLETE_SUPERIOR_RULE,
-                    "Unable to add DIT structure rule %s because it " +
-                    "references superior rule %s whihc is marked as OBSOLETE " +
-                    "in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_MRU_OBSOLETE_MR,
-                    "Unable to add matching rule use %s because its matching " +
-                    "rule %s is marked OBSOLETE in the server schema");
-    registerMessage(MSGID_SCHEMA_MODIFY_MRU_OBSOLETE_ATTR,
-                    "Unable to add matching rule use %s because it " +
-                    "references attribute type %s which is marked as " +
-                    "OBSOLETE in the server schema");
-
-
-    registerMessage(MSGID_SCHEMA_RESTORE_NO_SUCH_BACKUP,
-                    "Unable to restore or verify schema backup %s in " +
-                    "directory %s because no such backup exists");
-    registerMessage(MSGID_SCHEMA_RESTORE_NO_BACKUP_FILE,
-                    "Unable to restore or verify schema backup %s in " +
-                    "directory %s because the archive filename could not be " +
-                    "determined");
-    registerMessage(MSGID_SCHEMA_RESTORE_NO_SUCH_FILE,
-                    "Unable to restore or verify schema backup %s because " +
-                    "the specified archive file %s does not exist");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_CHECK_FOR_ARCHIVE,
-                    "Unable to restore or verify schema backup %s because " +
-                    "an error occurred while trying to determine whether " +
-                    "backup archive %s exists:  %s");
-    registerMessage(MSGID_SCHEMA_RESTORE_UNKNOWN_DIGEST,
-                    "Unable to restore or verify schema backup %s because " +
-                    "an unsigned hash of this backup is available but the " +
-                    "server cannot determine the digest algorithm used to " +
-                    "generate this hash");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_GET_DIGEST,
-                    "Unable to restore or verify schema backup %s because " +
-                    "it has an unsigned hash that uses an unknown or " +
-                    "unsupported digest algorithm of %s");
-    registerMessage(MSGID_SCHEMA_RESTORE_UNKNOWN_MAC,
-                    "Unable to restore or verify schema backup %s because " +
-                    "a signed hash of this backup is available but the " +
-                    "server cannot determine the MAC algorithm used to " +
-                    "generate this hash");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_GET_MAC,
-                    "Unable to restore or verify schema backup %s because " +
-                    "it has a signed hash that uses an unknown or " +
-                    "unsupported MAC algorithm of %s");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_OPEN_BACKUP_FILE,
-                    "Unable to restore or verify schema backup %s because " +
-                    "an error occurred while attempting to open the backup " +
-                    "archive file %s:  %s");
-    registerMessage(MSGID_SCHEMA_RESTORE_UNKNOWN_CIPHER,
-                    "Unable to restore or verify schema backup %s because " +
-                    "it is encrypted but the server cannot determine the " +
-                    "cipher used to perform this encryption");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_GET_CIPHER,
-                    "Unable to restore or verify schema backup %s because " +
-                    "it is encrypted using an unknown or unsupported cipher " +
-                    "of %s");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY,
-                    "Unable to restore schema backup %s because an error " +
-                    "occurred while attempting to rename the current " +
-                    "schema directory from %s to %s:  %s");
-    registerMessage(MSGID_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA,
-                    "An error occurred that prevented the schema backup from " +
-                    "being properly restored.  However, the original schema " +
-                    "files that were in place before the start of the " +
-                    "restore process have been preserved and are now in " +
-                    "their original location of %s");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA,
-                    "An error occurred that prevented the schema backup from " +
-                    "being properly restored.  The original schema files " +
-                    "that were in place before the start of the restore " +
-                    "process have been preserved and are contained in the %s " +
-                    "directory");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_CREATE_SCHEMA_DIRECTORY,
-                    "Unable to restore schema backup %s because an error " +
-                    "occurred while attempting to create a new empty " +
-                    "directory %s into which the files should be restored:  " +
-                    "%s");
-    registerMessage(MSGID_SCHEMA_RESTORE_OLD_SCHEMA_SAVED,
-                    "An error occurred that prevented the schema backup from " +
-                    "being properly restored.  The original schema files " +
-                    "that were in place before the start of the restore " +
-                    "process have been preserved in the %s directory");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_GET_ZIP_ENTRY,
-                    "Unable to restore or verify schema backup %s because " +
-                    "an error occurred while trying to read the next entry " +
-                    "from the archive file %s:  %s");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_CREATE_FILE,
-                    "Unable to restore schema backup %s because an error " +
-                    "occurred while trying to recreate file %s:  %s");
-    registerMessage(MSGID_SCHEMA_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE,
-                    "Unable to restore or verify schema backup %s because " +
-                    "an error occurred while processing archived file %s:  " +
-                    "%s");
-    registerMessage(MSGID_SCHEMA_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE,
-                    "Unable to restore or verify schema backup %s because an " +
-                    "unexpected error occurred while trying to close the " +
-                    "archive file %s:  %s");
-    registerMessage(MSGID_SCHEMA_RESTORE_UNSIGNED_HASH_VALID,
-                    "The message digest calculated from the backup archive " +
-                    "matches the digest stored with the backup information");
-    registerMessage(MSGID_SCHEMA_RESTORE_UNSIGNED_HASH_INVALID,
-                    "Unable to restore or verify schema backup %s because " +
-                    "the message digest calculated from the backup archive " +
-                    "does not match the digest stored with the backup " +
-                    "information");
-    registerMessage(MSGID_SCHEMA_RESTORE_SIGNED_HASH_VALID,
-                    "The signed digest calculated from the backup archive " +
-                    "matches the signature stored with the backup " +
-                    "information");
-    registerMessage(MSGID_SCHEMA_RESTORE_SIGNED_HASH_INVALID,
-                    "Unable to restore or verify schema backup %s because " +
-                    "the signed digest calculated from the backup archive " +
-                    "does not match the signature stored with the backup " +
-                    "information");
-    registerMessage(MSGID_SCHEMA_RESTORE_VERIFY_SUCCESSFUL,
-                    "All tests performed on schema backup %s from directory " +
-                    "%s show that the archive appears to be valid");
-    registerMessage(MSGID_SCHEMA_RESTORE_SUCCESSFUL,
-                    "Schema backup %s was successfully restored from the " +
-                    "archive in directory %s");
-
-
-    registerMessage(MSGID_TASK_INVALID_STATE,
-                    "The task defined in entry %s is invalid because it has " +
-                    "an invalid state %s");
-    registerMessage(MSGID_TASK_CANNOT_PARSE_SCHEDULED_START_TIME,
-                    "An error occurred while trying to parse the scheduled " +
-                    "start time value %s from task entry %s");
-    registerMessage(MSGID_TASK_CANNOT_PARSE_ACTUAL_START_TIME,
-                    "An error occurred while trying to parse the actual " +
-                    "start time value %s from task entry %s");
-    registerMessage(MSGID_TASK_CANNOT_PARSE_COMPLETION_TIME,
-                    "An error occurred while trying to parse the completion " +
-                    "time value %s from task entry %s");
-    registerMessage(MSGID_TASK_MISSING_ATTR,
-                    "Task entry %s is missing required attribute %s");
-    registerMessage(MSGID_TASK_MULTIPLE_ATTRS_FOR_TYPE,
-                    "There are multiple instances of attribute %s in task " +
-                    "entry %s");
-    registerMessage(MSGID_TASK_NO_VALUES_FOR_ATTR,
-                    "There are no values for attribute %s in task entry %s");
-    registerMessage(MSGID_TASK_MULTIPLE_VALUES_FOR_ATTR,
-                    "There are multiple values for attribute %s in task " +
-                    "entry %s");
-    registerMessage(MSGID_TASK_EXECUTE_FAILED,
-                    "An error occurred while executing the task defined in " +
-                    "entry %s:  %s");
-    registerMessage(MSGID_TASK_COMPLETION_BODY,
-                    "Task ID:  %s\r\n" +
-                    "Task State:  %s\r\n" +
-                    "Scheduled Start Time:  %s\r\n" +
-                    "Actual Start Time:  %s\r\n" +
-                    "Completion Time:  %s\r\n" +
-                    "\r\n" +
-                    "Log Messages:\r\n");
-
-
-    registerMessage(MSGID_RECURRINGTASK_NO_ID_ATTRIBUTE,
-                    "The provided recurring task entry does not contain " +
-                    "attribute %s which is needed to hold the recurring task " +
-                    "ID");
-    registerMessage(MSGID_RECURRINGTASK_MULTIPLE_ID_TYPES,
-                    "The provided recurring task entry contains multiple " +
-                    "attributes with type %s, which is used to hold the " +
-                    "recurring task ID, but only a single instance is " +
-                    "allowed");
-    registerMessage(MSGID_RECURRINGTASK_NO_ID,
-                    "The provided recurring task entry does not contain any " +
-                    "values for the %s attribute, which is used to specify " +
-                    "the recurring task ID");
-    registerMessage(MSGID_RECURRINGTASK_MULTIPLE_ID_VALUES,
-                    "The provided recurring task entry contains multiple " +
-                    "values for the %s attribute, which is used to specify " +
-                    "the recurring task ID, but only a single value is " +
-                    "allowed");
-    registerMessage(MSGID_RECURRINGTASK_NO_CLASS_ATTRIBUTE,
-                    "The provided recurring task entry does not contain " +
-                    "attribute %s which is needed to specify the " +
-                    "fully-qualified name of the class providing the task " +
-                    "logic");
-    registerMessage(MSGID_RECURRINGTASK_MULTIPLE_CLASS_TYPES,
-                    "The provided recurring task entry contains multiple " +
-                    "attributes with type %s, which is used to hold the " +
-                    "task class name, but only a single instance is allowed");
-    registerMessage(MSGID_RECURRINGTASK_NO_CLASS_VALUES,
-                    "The provided recurring task entry does not contain any " +
-                    "values for the %s attribute, which is used to specify " +
-                    "the fully-qualified name of the class providing the " +
-                    "task logic");
-    registerMessage(MSGID_RECURRINGTASK_MULTIPLE_CLASS_VALUES,
-                    "The provided recurring task entry contains multiple " +
-                    "values for the %s attribute, which is used to specify " +
-                    "the task class name, but only a single value is allowed");
-    registerMessage(MSGID_RECURRINGTASK_CANNOT_LOAD_CLASS,
-                    "An error occurred while attempting to load class %s " +
-                    "specified in attribute %s of the provided recurring " +
-                    "task entry:  %s.  Does this class exist in the " +
-                    "Directory Server classpath?");
-    registerMessage(MSGID_RECURRINGTASK_CANNOT_INSTANTIATE_CLASS_AS_TASK,
-                    "An error occurred while trying to create an instance " +
-                    "of class %s as a Directory Server task.  Is this class " +
-                    "a subclass of %s?");
-    registerMessage(MSGID_RECURRINGTASK_CANNOT_INITIALIZE_INTERNAL,
-                    "An error occurred while attempting to perform internal " +
-                    "initialization on an instance of class %s with the " +
-                    "information contained in the provided entry:  %s");
-
-
-    registerMessage(MSGID_TASKBE_CONFIG_ENTRY_NULL,
-                    "The configuration entry provided when attempting to " +
-                    "initialize the task backend was null");
-    registerMessage(MSGID_TASKBE_NO_BASE_DNS,
-                    "The task backend configuration entry does not contain " +
-                    "any base DNs.  There must be exactly one base DN for " +
-                    "task information in the Directory Server");
-    registerMessage(MSGID_TASKBE_MULTIPLE_BASE_DNS,
-                    "The task backend configuration entry contains multiple " +
-                    "base DNs.  There must be exactly one base DN for task " +
-                    "information in the Directory Server");
-    registerMessage(MSGID_TASKBE_CANNOT_DECODE_RECURRING_TASK_BASE_DN,
-                    "An error occurred while attempting to decode recurring " +
-                    "task base %s as a DN:  %s");
-    registerMessage(MSGID_TASKBE_CANNOT_DECODE_SCHEDULED_TASK_BASE_DN,
-                    "An error occurred while attempting to decode scheduled " +
-                    "task base %s as a DN:  %s");
-    registerMessage(MSGID_TASKBE_DESCRIPTION_RETENTION_TIME,
-                    "Specifies the length of time in seconds that task " +
-                    "information should be retained after processing on that " +
-                    "task has completed.  Once this period has passed, the " +
-                    "task information will be automatically removed to " +
-                    "conserve memory and disk space");
-    registerMessage(MSGID_TASKBE_CANNOT_INITIALIZE_RETENTION_TIME,
-                    "An unexpected error occurred while attempting to " +
-                    "initialize the task retention time configuration:  %s");
-    registerMessage(MSGID_TASKBE_DESCRIPTION_BACKING_FILE,
-                    "Specifies the path to the backing file for the task " +
-                    "backend.  This LDIF file will hold all the " +
-                    "configuration for the defined scheduled tasks and " +
-                    "recurring tasks");
-    registerMessage(MSGID_TASKBE_CANNOT_INITIALIZE_BACKING_FILE,
-                    "An unexpected error occurred while attempting to " +
-                    "initialize the task backing file configuration:  %s");
-    registerMessage(MSGID_TASKBE_NO_BACKING_FILE,
-                    "The updated configuration entry does not have a value " +
-                    "for the required %s attribute, which specifies the " +
-                    "path to the task data backing file");
-    registerMessage(MSGID_TASKBE_BACKING_FILE_EXISTS,
-                    "The specified task data backing file %s already exists " +
-                    "and the Directory Server will not attempt to overwrite " +
-                    "it.  Please delete or rename the existing file before " +
-                    "attempting to use that path for the new backing file, " +
-                    "or choose a new path");
-    registerMessage(MSGID_TASKBE_INVALID_BACKING_FILE_PATH,
-                    "The specified path %s for the new task data backing " +
-                    "file appears to be an invalid path.  Please choose a " +
-                    "new path for the task data backing file");
-    registerMessage(MSGID_TASKBE_BACKING_FILE_MISSING_PARENT,
-                    "The parent directory %s for the new task data backing " +
-                    "file %s does not exist.  Please create this directory " +
-                    "before attempting to use this path for the new backing " +
-                    "file or choose a new path");
-    registerMessage(MSGID_TASKBE_BACKING_FILE_PARENT_NOT_DIRECTORY,
-                    "The parent directory %s for the new task data backing " +
-                    "file %s exists but is not a directory.  Please choose a " +
-                    "new path for the task data backing file");
-    registerMessage(MSGID_TASKBE_ERROR_GETTING_BACKING_FILE,
-                    "An error occurred while attempting to determine the " +
-                    "new path to the task data backing file:  %s");
-    registerMessage(MSGID_TASKBE_NO_RETENTION_TIME,
-                    "The updated configuration entry does not have a value " +
-                    "for the required %s attribute, which specifies the " +
-                    "length of time in seconds that information about " +
-                    "completed tasks should be retained before they are " +
-                    "cleaned up");
-    registerMessage(MSGID_TASKBE_ERROR_GETTING_RETENTION_TIME,
-                    "An error occurred while attempting to determine the " +
-                    "completed task retention time:  %s");
-    registerMessage(MSGID_TASKBE_UPDATED_RETENTION_TIME,
-                    "The completed task retention time has been updated to " +
-                    "%d seconds.  This will take effect immediately");
-    registerMessage(MSGID_TASKBE_UPDATED_BACKING_FILE,
-                    "The path to the task data backing file has been changed " +
-                    "to %s.  A snapshot of the current task configuration " +
-                    "has been written to that file and it will continue to " +
-                    "be used for future updates");
-    registerMessage(MSGID_TASKBE_ADD_DISALLOWED_DN,
-                    "New entries in the task backend may only be added " +
-                    "immediately below %s for scheduled tasks or immediately " +
-                    "below %s for recurring tasks");
-    registerMessage(MSGID_TASKBE_DELETE_INVALID_ENTRY,
-                    "Unable to remove entry %s from the task backend because " +
-                    "its DN is either not appropriate for that backend or it " +
-                    "is not below the scheduled or recurring tasks base entry");
-    registerMessage(MSGID_TASKBE_DELETE_NO_SUCH_TASK,
-                    "Unable to remove entry %s from the task backend because " +
-                    "there is no scheduled task associated with that entry " +
-                    "DN");
-    registerMessage(MSGID_TASKBE_DELETE_RUNNING,
-                    "Unable to delete entry %s from the task backend because " +
-                    "the associated task is currently running");
-    registerMessage(MSGID_TASKBE_DELETE_NO_SUCH_RECURRING_TASK,
-                    "Unable to remove entry %s from the task backend because " +
-                    "there is no recurring task associated with that entry " +
-                    "DN");
-    registerMessage(MSGID_TASKBE_MODIFY_DN_NOT_SUPPORTED,
-                    "Modify DN operations are not supported in the task " +
-                    "backend");
-    registerMessage(MSGID_TASKBE_SEARCH_INVALID_BASE,
-                    "Unable to process the search operation in the task " +
-                    "backend because the provided base DN %s is not valid " +
-                    "for entries in the task backend");
-    registerMessage(MSGID_TASKBE_SEARCH_NO_SUCH_TASK,
-                    "Unable to process the search operation in the task " +
-                    "backend because there is no scheduled task associated " +
-                    "with the provided search base entry %s");
-    registerMessage(MSGID_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK,
-                    "Unable to process the search operation in the task " +
-                    "backend because there is no recurring task associated " +
-                    "with the provided search base entry %s");
-    registerMessage(MSGID_TASKBE_BACKING_FILE_HEADER,
-                    "This file contains the data used by the Directory " +
-                    "Server task scheduler backend.  Do not edit this file " +
-                    "directly, as there is a risk that those changes will be " +
-                    "lost.  Scheculed and recurring task definitions should " +
-                    "only be edited using the administration utilities " +
-                    "provided with the Directory Server");
-    registerMessage(MSGID_TASKBE_IMPORT_NOT_SUPPORTED,
-                    "The task backend does not support LDIF import " +
-                    "operations");
-    registerMessage(MSGID_TASKBE_INTERRUPTED_BY_SHUTDOWN,
-                    "The tasks backend is being shut down");
-
-
-    registerMessage(MSGID_TASKSCHED_DUPLICATE_RECURRING_ID,
-                    "Unable to add recurring task %s to the task scheduler " +
-                    "because another recurring task already exists with the " +
-                    "same ID");
-    registerMessage(MSGID_TASKSCHED_REMOVE_RECURRING_EXISTING_ITERATION,
-                    "Unable to remove recurring task %s because there is " +
-                    "already a scheduled iteration of that task with ID %s " +
-                    "that must be removed first");
-    registerMessage(MSGID_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK,
-                    "Unable to remove pending task %s because no such task " +
-                    "exists");
-    registerMessage(MSGID_TASKSCHED_REMOVE_PENDING_NOT_PENDING,
-                    "Unable to remove pending task %s because the task is " +
-                    "no longer pending");
-    registerMessage(MSGID_TASKSCHED_REMOVE_COMPLETED_NO_SUCH_TASK,
-                    "Unable to remove completed task %s because no such " +
-                    "task exists in the list of completed tasks");
-    registerMessage(MSGID_TASKSCHED_DUPLICATE_TASK_ID,
-                    "Unable to schedule task %s because another task already " +
-                    "exists with the same ID");
-    registerMessage(MSGID_TASKSCHED_CANNOT_FIND_RECURRING_TASK,
-                    "Task %s has completed processing and indicates that it " +
-                    "is associated with recurring task %s but no recurring " +
-                    "task with that ID is currently defined so it is not " +
-                    "possible to schedule the next iteration");
-    registerMessage(MSGID_TASKSCHED_ERROR_SCHEDULING_RECURRING_ITERATION,
-                    "An error occurred while attempting to schedule the next " +
-                    "iteration of recurring task %s:  %s");
-    registerMessage(MSGID_TASKSCHED_CANNOT_PARSE_ENTRY_RECOVERABLE,
-                    "An error occurred while attempting to read an entry " +
-                    "from the tasks backing file %s on or near line %d:  " +
-                    "%s.  This is not a fatal error, so the task scheduler " +
-                    "will attempt to continue parsing the file and schedule " +
-                    "any additional tasks that it contains");
-    registerMessage(MSGID_TASKSCHED_CANNOT_PARSE_ENTRY_FATAL,
-                    "An error occurred while attempting to read an entry " +
-                    "from the tasks backing file %s on or near line %d:  " +
-                    "%s.  This is an unrecoverable error, and parsing " +
-                    "cannot continue");
-    registerMessage(MSGID_TASKSCHED_ENTRY_HAS_NO_PARENT,
-                    "Entry %s read from the tasks backing file is invalid " +
-                    "because it has no parent and does not match the task " +
-                    "root DN of %s");
-    registerMessage(MSGID_TASKSCHED_CANNOT_SCHEDULE_RECURRING_TASK_FROM_ENTRY,
-                    "An error occurred while attempting to parse entry %s " +
-                    "as a recurring task and add it to the scheduler:  %s");
-    registerMessage(MSGID_TASKSCHED_CANNOT_SCHEDULE_TASK_FROM_ENTRY,
-                    "An error occurred while attempting to parse entry %s " +
-                    "as a task and add it to the scheduler:  %s");
-    registerMessage(MSGID_TASKSCHED_INVALID_TASK_ENTRY_DN,
-                    "Entry %s read from the tasks backing file %s has a DN " +
-                    "which is not valid for a task or recurring task " +
-                    "definition and will be ignored");
-    registerMessage(MSGID_TASKSCHED_ERROR_READING_TASK_BACKING_FILE,
-                    "An error occurred while attempting to read from the " +
-                    "tasks data backing file %s:  %s");
-    registerMessage(MSGID_TASKSCHED_CANNOT_CREATE_BACKING_FILE,
-                    "An error occurred while attempting to create a new " +
-                    "tasks backing file %s for use with the task " +
-                    "scheduler:  %s");
-    registerMessage(MSGID_TASKSCHED_NO_CLASS_ATTRIBUTE,
-                    "The provided task entry does not contain attribute %s " +
-                    "which is needed to specify the fully-qualified name of " +
-                    "the class providing the task logic");
-    registerMessage(MSGID_TASKSCHED_MULTIPLE_CLASS_TYPES,
-                    "The provided task entry contains multiple attributes " +
-                    "with type %s, which is used to hold the task class " +
-                    "name, but only a single instance is allowed");
-    registerMessage(MSGID_TASKSCHED_NO_CLASS_VALUES,
-                    "The provided task entry does not contain any values for " +
-                    "the %s attribute, which is used to specify the " +
-                    "fully-qualified name of the class providing the task " +
-                    "logic");
-    registerMessage(MSGID_TASKSCHED_MULTIPLE_CLASS_VALUES,
-                    "The provided task entry contains multiple values for " +
-                    "the %s attribute, which is used to specify the task " +
-                    "class name, but only a single value is allowed");
-    registerMessage(MSGID_TASKSCHED_NOT_ALLOWED_TASK,
-                    "The Directory Server is not configured to allow task " +
-                    "%s to be invoked");
-    registerMessage(MSGID_TASKSCHED_CANNOT_LOAD_CLASS,
-                    "An error occurred while attempting to load class %s " +
-                    "specified in attribute %s of the provided task entry:  " +
-                    "%s.  Does this class exist in the Directory Server " +
-                    "classpath?");
-    registerMessage(MSGID_TASKSCHED_CANNOT_INSTANTIATE_CLASS_AS_TASK,
-                    "An error occurred while trying to create an instance " +
-                    "of class %s as a Directory Server task.  Is this class " +
-                    "a subclass of %s?");
-    registerMessage(MSGID_TASKSCHED_CANNOT_INITIALIZE_INTERNAL,
-                    "An error occurred while attempting to perform internal " +
-                    "initialization on an instance of class %s with the " +
-                    "information contained in the provided entry:  %s");
-    registerMessage(MSGID_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE,
-                    "An error occurred while attempting to rename the " +
-                    "current tasks backing file from %s to %s:  %s.  The " +
-                    "previous task configuration (which does not reflect the " +
-                    "latest update) may be lost");
-    registerMessage(MSGID_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE,
-                    "An error occurred while attempting to rename the " +
-                    "new tasks backing file from %s to %s:  %s.  If the " +
-                    "Directory Server is restarted, then the task scheduler " +
-                    "may not be able to ");
-    registerMessage(MSGID_TASKSCHED_CANNOT_WRITE_BACKING_FILE,
-                    "An error occurred while attempting to write the new " +
-                    "tasks data backing file %s:  %s.  Configuration " +
-                    "information reflecting the latest update may be lost");
-
-
-    registerMessage(MSGID_BACKUP_CONFIG_ENTRY_NULL,
-                    "Unable to initialize the backup backend because the " +
-                    "provided configuration entry is null");
-    registerMessage(MSGID_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN,
-                    "Unable to initialize the backup backend because an " +
-                    "error occurred while attempting to decode the base DN " +
-                    "for the backend:  %s");
-    registerMessage(MSGID_BACKUP_DESCRIPTION_BACKUP_DIR_LIST,
-                    "Specifies the set of directories that will be accessed " +
-                    "by default for search operations in the backup " +
-                    "backend.  Backup directories not in this list may still " +
-                    "be accessed by directly specifying the backup directory " +
-                    "in the search base DN.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_BACKUP_CANNOT_DETERMINE_BACKUP_DIR_LIST,
-                    "An error occurred while attempting to determine the " +
-                    "backup directory list:  %s.  Initialization of the " +
-                    "backup backend cannot continue");
-    registerMessage(MSGID_BACKUP_GET_ENTRY_NULL,
-                    "Unable to retrieve an entry from the backup backend " +
-                    "because the requested entry was null");
-    registerMessage(MSGID_BACKUP_INVALID_BASE,
-                    "Requested entry %s does not exist in the backup backend");
-    registerMessage(MSGID_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY,
-                    "Unable to retrieve entry %s from the backup backend " +
-                    "because the requested DN is one level below the " +
-                    "base DN but does not specify a backup directory");
-    registerMessage(MSGID_BACKUP_INVALID_BACKUP_DIRECTORY,
-                    "Unable to retrieve entry %s from the backup backend " +
-                    "because the requested backup directory is invalid:  %s");
-    registerMessage(MSGID_BACKUP_ERROR_GETTING_BACKUP_DIRECTORY,
-                    "An error occurred while attempting to examine the " +
-                    "requested backup directory:  %s");
-    registerMessage(MSGID_BACKUP_NO_BACKUP_ID_IN_DN,
-                    "Unable to retrieve entry %s from the backup backend " +
-                    "because the requested DN is two levels below the " +
-                    "base DN but does not specify a backup ID");
-    registerMessage(MSGID_BACKUP_NO_BACKUP_PARENT_DN,
-                    "Unable to retrieve entry %s from the backup backend " +
-                    "because it does not have a parent");
-    registerMessage(MSGID_BACKUP_NO_BACKUP_DIR_IN_DN,
-                    "Unable to retrieve entry %s from the backup backend " +
-                    "because the DN does not contain the backup directory " +
-                    "in which the requested backup should reside");
-    registerMessage(MSGID_BACKUP_NO_SUCH_BACKUP,
-                    "Backup %s does not exist in backup directory %s");
-    registerMessage(MSGID_BACKUP_ADD_NOT_SUPPORTED,
-                    "Add operations are not supported in the backup backend");
-    registerMessage(MSGID_BACKUP_DELETE_NOT_SUPPORTED,
-                    "Delete operations are not supported in the backup " +
-                    "backend");
-    registerMessage(MSGID_BACKUP_MODIFY_NOT_SUPPORTED,
-                    "Modify operations are not supported in the backup " +
-                    "backend");
-    registerMessage(MSGID_BACKUP_MODIFY_DN_NOT_SUPPORTED,
-                    "Modify DN operations are not supported in the backup " +
-                    "backend");
-    registerMessage(MSGID_BACKUP_NO_SUCH_ENTRY,
-                    "The requested entry %s does not exist in the backup " +
-                    "backend");
-    registerMessage(MSGID_BACKUP_EXPORT_NOT_SUPPORTED,
-                    "LDIF export operations are not supported in the backup " +
-                    "backend");
-    registerMessage(MSGID_BACKUP_IMPORT_NOT_SUPPORTED,
-                    "LDIF import operations are not supported in the backup " +
-                    "backend");
-    registerMessage(MSGID_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED,
-                    "Backup and restore operations are not supported in " +
-                    "the backup backend");
-
-
-    registerMessage(MSGID_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE,
-                    "Exactly one base DN must be provided for use with the " +
-                    "memory-based backend");
-    registerMessage(MSGID_MEMORYBACKEND_ENTRY_ALREADY_EXISTS,
-                    "Entry %s already exists in the memory-based backend");
-    registerMessage(MSGID_MEMORYBACKEND_ENTRY_DOESNT_BELONG,
-                    "Entry %s does not belong in the memory-based backend");
-    registerMessage(MSGID_MEMORYBACKEND_PARENT_DOESNT_EXIST,
-                    "Unable to add entry %s because its parent entry %s does " +
-                    "not exist in the memory-based backend");
-    registerMessage(MSGID_MEMORYBACKEND_ENTRY_DOESNT_EXIST,
-                    "Entry %s does not exist in the memory-based backend");
-    registerMessage(MSGID_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN,
-                    "Cannot delete entry %s because it has one or more " +
-                    "subordinate entries");
-    registerMessage(MSGID_MEMORYBACKEND_MODDN_NOT_SUPPORTED,
-                    "Modify DN operations are not supported in the " +
-                    "memory-based backend");
-    registerMessage(MSGID_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER,
-                    "Unable to create an LDIF writer:  %s");
-    registerMessage(MSGID_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF,
-                    "Cannot write entry %s to LDIF:  %s");
-    registerMessage(MSGID_MEMORYBACKEND_CANNOT_CREATE_LDIF_READER,
-                    "Unable to create an LDIF reader:  %s");
-    registerMessage(MSGID_MEMORYBACKEND_ERROR_READING_LDIF,
-                    "An unrecoverable error occurred while reading from " +
-                    "LDIF:  %s");
-    registerMessage(MSGID_MEMORYBACKEND_ERROR_DURING_IMPORT,
-                    "An unexpected error occurred while processing the " +
-                    "import:  %s");
-    registerMessage(MSGID_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED,
-                    "The memory-based backend does not support backup or " +
-                    "restore operations");
-    registerMessage(MSGID_MEMORYBACKEND_CANNOT_RENAME_ENRY_WITH_CHILDREN,
-                    "Cannot rename entry %s because it has one or more " +
-                    "subordinate entries");
-    registerMessage(MSGID_MEMORYBACKEND_CANNOT_RENAME_TO_ANOTHER_BACKEND,
-                    "Cannot rename entry %s because the target entry is in a " +
-                    "different backend");
-    registerMessage(MSGID_MEMORYBACKEND_RENAME_PARENT_DOESNT_EXIST,
-                    "Cannot rename entry %s because the new parent entry %s " +
-                    "doesn't exist");
-    registerMessage(MSGID_BACKEND_ENVIRONMENT_UNUSABLE,
-                    "JE Database Environment corresponding to backend id %s " +
-                    "is corrupt. Restart the Directory Server to reopen the " +
-                    "Environment");
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/ConfigMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/ConfigMessages.java
deleted file mode 100644
index 87be0ee..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/ConfigMessages.java
+++ /dev/null
@@ -1,10074 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the server configuration.
- */
-public class ConfigMessages
-{
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * update a required attribute so that it would have no values.  This takes a
-   * single string argument, which is the name of the attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_IS_REQUIRED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 1;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * assign or add a set of values to a configuration attribute in which one of
-   * the values was not acceptable.  This takes three arguments, which are the
-   * rejected value for the configuration attribute, the name of the attribute,
-   * and the reason that the value was rejected.
-   */
-  public static final int MSGID_CONFIG_ATTR_REJECTED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 2;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * assign multiple values to a single-valued attribute.  This takes a single
-   * argument, which is the name of the configuration attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 3;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add one or more values to a single-valued attribute such that it would
-   * contain multiple values.  This takes a single argument, which is the name
-   * of the configuration attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_ADD_VALUES_IS_SINGLE_VALUED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 4;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add one or more values to a configuration attribute in which one of the
-   * values already exists.  This takes a single argument, which is the name of
-   * the configuration attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 5;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a value a configuration attribute that does not contain that value.
-   * This takes two arguments, which are the value to remove and the name of the
-   * attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_NO_SUCH_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 6;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * assign an inappropriate value to a boolean attribute.  This takes a two
-   * arguments, which are the attribute name and the provided invalid value.
-   */
-  public static final int MSGID_CONFIG_ATTR_INVALID_BOOLEAN_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 7;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * retrieve the int or long value of an integer attribute that does not have
-   * any values.  This takes a single argument, which is the name of the
-   * attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_NO_INT_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * retrieve the int or long value of an integer attribute that has multiple
-   * values.  This takes a single argument, which is the name of the attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_MULTIPLE_INT_VALUES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 9;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * retrieve the value of an integer attribute as a Java <CODE>int</CODE> but
-   * the value was not within the acceptable range for an <CODE>int</CODE>.
-   * This takes a single argument, which is the name of the configuration
-   * attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 10;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * assign an inappropriate value to an integer attribute.  This takes two
-   * arguments, which are the invalid value that was provided and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ATTR_INVALID_INT_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 11;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * assign a value to an integer configuration attribute that is below the
-   * lower bound configured for that attribute.  This takes three arguments,
-   * which are the name of the attribute, the provided value, and the lower
-   * bound.
-   */
-  public static final int MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 12;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * assign a value to an integer configuration attribute that is above the
-   * upper bound configured for that attribute.  This takes three arguments,
-   * which are the name of the attribute, the provided value, and the upper
-   * bound.
-   */
-  public static final int MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 13;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * parse a value string for an integer configuration attribute that cannot be
-   * decoded as a long.  This takes three arguments, which are the value that
-   * could not be parsed, the name of the configuration attribute, and the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ATTR_INT_COULD_NOT_PARSE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 14;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * retrieve the value of a string attribute that does not have any values.
-   * This takes a single argument, which is the name of the attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_NO_STRING_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 15;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * retrieve the value of a string attribute that has multiple values.  This
-   * takes a single argument, which is the name of the attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_MULTIPLE_STRING_VALUES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 16;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * include a null or empty value in the set of values for a string
-   * configuration attribute.  This takes a single argument, which is the name
-   * of the attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 17;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * set the value of a multi-choice parameter to include a value that is not
-   * allowed.  This takes two arguments, which are the value and the name of the
-   * configuration attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_VALUE_NOT_ALLOWED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 18;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * set the value of an integer with unit parameter to include a unit that is
-   * not allowed.  This takes two arguments, which are the name of the unit and
-   * the name of the configuration attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_INVALID_UNIT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 19;
-
-
-
-  /**
-   * The message ID for the message that will be used if the delimiter between
-   * an integer value and an associated unit could not be found.  This takes two
-   * arguments, which are the value and name of the configuration attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_NO_UNIT_DELIMITER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 20;
-
-
-
-  /**
-   * The message ID for the message that will be used if it was not possible to
-   * decode the integer component of an integer with unit attribute.  This takes
-   * three arguments, which are the value and name of the configuration
-   * attribute and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 21;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an integer with unit parameter.  This takes three arguments,
-   * which are the value, the name of the configuration attribute, and the
-   * reason that the value is not acceptable.
-   */
-  public static final int MSGID_CONFIG_ATTR_INVALID_VALUE_WITH_UNIT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 22;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a child to a configuration entry that already has a child with the same
-   * DN.  This takes two arguments, which are the DN of the child entry and the
-   * DN of the entry with that conflicting child.
-   */
-  public static final int MSGID_CONFIG_ENTRY_CONFLICTING_CHILD =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 23;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a child entry below a configuration entry that does not have a child
-   * with the specified DN.  This takes two arguments, which are the DN of the
-   * child entry that was to be removed and the DN of the entry that should have
-   * contained that child.
-   */
-  public static final int MSGID_CONFIG_ENTRY_NO_SUCH_CHILD =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 24;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a child entry below a configuration entry but that child was not a
-   * leaf entry.  This takes two arguments, which are the DN of the child entry
-   * that was to be removed and the DN of the entry that contained that child.
-   */
-  public static final int MSGID_CONFIG_ENTRY_CANNOT_REMOVE_NONLEAF =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 25;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified
-   * configuration file does not exist.  This takes a single argument, which is
-   * the path to the configuration file that the server attempted to access.
-   */
-  public static final int MSGID_CONFIG_FILE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 26;
-
-
-
-  /**
-   * The message ID for the message that will be used an error occurs while
-   * attempting to verify whether the configuration file exists.  This takes two
-   * arguments, which are the path to the configuration file and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_CANNOT_VERIFY_EXISTENCE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 27;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration
-   * handler cannot open the configuration file for reading.  This takes two
-   * arguments, which are the path to the configuration file and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_CANNOT_OPEN_FOR_READ =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 28;
-
-
-
-  /**
-   * The message ID for the message that will be used if an I/O error occurs
-   * while attempting to read from the configuration file.  This takes two
-   * arguments, which are the path to the configuration file and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_READ_ERROR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 29;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute with one
-   * or more invalid attribute options is encountered while interacting with the
-   * Directory Server configuration.  This takes two arguments, which are the DN
-   * of the entry and the name of the attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_OPTIONS_NOT_ALLOWED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 30;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry in the
-   * configuration file cannot be parsed as a valid LDIF entry.  This takes
-   * three arguments, which are the approximate line number in the LDIF file,
-   * the path to the LDIF file, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_INVALID_LDIF_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 31;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration LDIF
-   * file appears to be empty (or at least not contain any entries).  This takes
-   * a single argument, which is the path to the configuration file.
-   */
-  public static final int MSGID_CONFIG_FILE_EMPTY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 32;
-
-
-
-  /**
-   * The message ID for the message that will be used if the first entry read
-   * from the LDIF configuration file did not have the expected DN.  This takes
-   * three arguments, which are the path to the LDIF file, the DN of the first
-   * entry read from the file, and the expected configuration root DN.
-   */
-  public static final int MSGID_CONFIG_FILE_INVALID_BASE_DN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 33;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while attempting to process the LDIF configuration file.  This takes
-   * two arguments, which are the path to the configuration file and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_GENERIC_ERROR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 34;
-
-
-
-  /**
-   * The message ID for the message that will be used if a duplicate entry is
-   * detected in the configuration.  This takes three arguments, which are the
-   * DN of the duplicate entry, the starting line number for the duplicate
-   * entry, and the path to the LDIF configuration file.
-   */
-  public static final int MSGID_CONFIG_FILE_DUPLICATE_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 35;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry is read from
-   * the configuration that does not have a parent.  This takes four arguments,
-   * which are the DN of the entry with no parent, the starting line number for
-   * that entry, the path to the LDIF configuration file, and the expected
-   * parent DN.
-   */
-  public static final int MSGID_CONFIG_FILE_NO_PARENT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 36;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * determine the appropriate parent DN for a given configuration entry.  This
-   * takes three arguments, which are the DN of the entry, the starting line
-   * number for that entry, and the path to the LDIF configuration file.
-   */
-  public static final int MSGID_CONFIG_FILE_UNKNOWN_PARENT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 37;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * determine the server root directory for this instance of the Directory
-   * Server.  This takes a single argument, which is the name of the environment
-   * variable that may be set to specify the server root.
-   */
-  public static final int MSGID_CONFIG_CANNOT_DETERMINE_SERVER_ROOT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 38;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to write an entry to an LDIF source.  This takes two
-   * arguments, which are the DN of the entry and string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_WRITE_ERROR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 39;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to close an LDIF writer.  This takes a single argument,
-   * which is the string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_CLOSE_ERROR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 40;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made
-   * to import the Directory Server configuration from an existing LDIF other
-   * than reading it at startup.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_FILE_UNWILLING_TO_IMPORT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 41;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the logger base entry from the configuration.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_CONFIG_LOGGER_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 42;
-
-
-
-  /**
-   * The message ID for the message that will be used if the logger
-   * base entry does not exist in the Directory Server configuration.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIG_LOGGER_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 43;
-
-
-
-  /**
-   * The message ID for the message that will be used if there are no active
-   * access loggers defined in the Directory Server configuration.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_ACTIVE_ACCESS_LOGGERS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 44;
-
-
-
-  /**
-   * The message ID for the message that will be used if there are no active
-   * error loggers defined in the Directory Server configuration.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_ACTIVE_ERROR_LOGGERS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 45;
-
-
-
-  /**
-   * The message ID for the message that will be used if there are no active
-   * debug loggers defined in the Directory Server configuration.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_ACTIVE_DEBUG_LOGGERS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_WARNING | 46;
-
-
-
-  /**
-   * The message ID for the message that will be used if a logger configuration
-   * entry does not contain an acceptable logger configuration.  This takes two
-   * arguments, which are the DN of the configuration entry and the reason that
-   * it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_LOGGER_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 47;
-
-
-
-  /**
-   * The message ID for the message that will be used as an unacceptable reason
-   * whenever an actual reason cannot be determined.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_UNKNOWN_UNACCEPTABLE_REASON =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 48;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a logger from a configuration entry.  This takes two
-   * arguments, which are the DN of the configuration entry and a message that
-   * explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_LOGGER_CANNOT_CREATE_LOGGER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 49;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * logger base does not contain a valid logger objectclass.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_LOGGER_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 50;
-
-
-
-  /**
-   * The message ID for the description of the logger class name configuration
-   * attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_LOGGER_DESCRIPTION_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 51;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * logger base does not contain a value for the logger class name.  This takes
-   * a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 52;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * logger base contains an invalid value for the class name.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_LOGGER_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 53;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server access logger but the associated class cannot be
-   * instantiated as an access logger.  This takes three arguments, which are
-   * the logger class name, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 54;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server error logger but the associated class cannot be
-   * instantiated as an error logger.  This takes three arguments, which are the
-   * logger class name, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 55;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server debug logger but the associated class cannot be
-   * instantiated as a debug logger.  This takes three arguments, which are the
-   * logger class name, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 56;
-
-
-
-  /**
-   * The message ID for the description of the logger enabled configuration
-   * attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_LOGGER_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 57;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * logger base does not contain a value for the enabled attribute.  This takes
-   * a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 58;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * logger base has an invalid value for the enabled attribute.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_LOGGER_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 59;
-
-
-
-  /**
-   * The message ID for the description of the allow attribute name exceptions
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CORE_DESCRIPTION_ALLOW_ATTR_EXCEPTIONS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 60;
-
-
-
-  /**
-   * The message ID for the message that will be used if the allow attribute
-   * name exceptions configuration attribute has an invalid value.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_ALLOW_EXCEPTIONS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 61;
-
-
-
-  /**
-   * The message ID for the description of the configuration attribute used to
-   * specify the behavior for attributes that do not conform to the associated
-   * syntax.  This does not take any arguments.
-   */
-  public static final int
-       MSGID_CONFIG_CORE_DESCRIPTION_INVALID_SYNTAX_BEHAVIOR =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 62;
-
-
-
-  /**
-   * The message ID for the message that will be used if the invalid syntax
-   * behavior attribute has an invalid value.  This takes two arguments, which
-   * are the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_ENFORCE_STRICT_SYNTAX =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 63;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration
-   * attribute contains more than one pending value set.  This takes a single
-   * argument, which is the name of the configuration attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 64;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration
-   * attribute contains more than one active value set.  This takes a single
-   * argument, which is the name of the configuration attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 65;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration
-   * attribute does not have an active value set.  This takes a single argument,
-   * which is the name of the configuration attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_NO_ACTIVE_VALUE_SET =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 66;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode an object as an integer value but the object was of an invalid
-   * type.  This takes three arguments, which are a string representation of the
-   * provided value, the name of the configuration attribute and the object
-   * type for the provided value.
-   */
-  public static final int MSGID_CONFIG_ATTR_INT_INVALID_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 67;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode an object as an array of integer values but the object was an array
-   * with an invalid component type.  This takes two arguments, which are the
-   * name of the configuration attribute and the component type for the
-   * provided array.
-   */
-  public static final int MSGID_CONFIG_ATTR_INT_INVALID_ARRAY_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 68;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode an object as a string value but an error occurred in the process.
-   * This takes three arguments, which are a string representation of the
-   * provided value, the name of the configuration attribute and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ATTR_INVALID_STRING_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 69;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode an object as a string value but the object was of an invalid type.
-   * This takes three arguments, which are a string representation of the
-   * provided value, the name of the configuration attribute and the object
-   * type for the provided value.
-   */
-  public static final int MSGID_CONFIG_ATTR_STRING_INVALID_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 70;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode an object as an array of string values but the object was an array
-   * with an invalid component type.  This takes two arguments, which are the
-   * name of the configuration attribute and the component type for the
-   * provided array.
-   */
-  public static final int MSGID_CONFIG_ATTR_STRING_INVALID_ARRAY_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 71;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode an object as an integer with unit value but the object was of an
-   * invalid type.  This takes three arguments, which are a string
-   * representation of the provided value, the name of the configuration
-   * attribute and the object type for the provided value.
-   */
-  public static final int MSGID_CONFIG_ATTR_INT_WITH_UNIT_INVALID_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 72;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * retrieve a JMX attribute from a configuration entry but that attribute does
-   * not have an active value.  This takes two arguments, which are the DN of
-   * the configuration entry and the name of the attribute.
-   */
-  public static final int MSGID_CONFIG_JMX_ATTR_NO_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 73;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * retrieve a JMX attribute from a configuration entry that does not manage
-   * that attribute through JMX.  This takes two arguments, which are the DN of
-   * the configuration entry and the name of the attribute.
-   */
-  public static final int MSGID_CONFIG_JMX_ATTR_NO_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 74;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to retrieve
-   * the configuration entry associated with a JMX MBean fails for some reason.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_JMX_CANNOT_GET_CONFIG_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 75;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to update a
-   * configuration attribute over JMX would have resulted in an invalid value
-   * for that attribute.  This takes three arguments, which are the name of the
-   * attribute with the invalid value, the DN of the associated configuration
-   * entry, and the message or exception associated with the failure.
-   */
-  public static final int MSGID_CONFIG_JMX_ATTR_INVALID_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 76;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to update
-   * a configuration entry over JMX would have resulted in that entry having an
-   * unacceptable configuration.  This takes two arguments, which are the DN of
-   * the configuration entry and the message explaining the problem(s) with the
-   * update(s).
-   */
-  public static final int MSGID_CONFIG_JMX_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 77;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * invoke a JMX method for a component that does not have any method matching
-   * the given signature.  This takes two arguments, which are the signature of
-   * the method that should have been invoked and the DN of the configuration
-   * entry with which the invokable component is associated.
-   */
-  public static final int MSGID_CONFIG_JMX_NO_METHOD =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 78;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * attempting to retrieve a specified configuration entry.  This takes two
-   * arguments, which are the DN of the requested configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CANNOT_GET_CONFIG_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 79;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a
-   * configuration attribute has been updated.  This takes three arguments,
-   * which are the name of the attribute, a string representation of the value,
-   * and the DN of the configuration entry in which the attribute resides.
-   */
-  public static final int MSGID_CONFIG_SET_ATTRIBUTE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 80;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * attempting to apply a change to a configurable component such that not all
-   * of the changes were applied successfully.  This takes two arguments, which
-   * are the DN of the associated configuration entry and a message detailing
-   * the problem(s) encountered.
-   */
-  public static final int MSGID_CONFIG_CHANGE_NOT_SUCCESSFUL =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 81;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * logger base does not contain a value for the logger file name. This takes
-   * a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_FILE_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 82;
-
-
-
-  /**
-   * The message ID for the string that will be used if the Directory Server
-   * cannot register an MBean with the MBean server.  This takes two arguments,
-   * which are the DN of the configuration entry for the component associated
-   * with the MBean and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_JMX_CANNOT_REGISTER_MBEAN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 83;
-
-
-
-  /**
-   * The message ID for the string that will be used if a problem occurs while
-   * attempting to export the configuration to LDIF.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_LDIF_WRITE_ERROR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 84;
-
-
-
-  /**
-   * The message ID for the description of the configuration attribute that
-   * specifies the number of worker threads.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_NUM_THREADS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 85;
-
-
-
-  /**
-   * The message ID for the description of the configuration attribute that
-   * specifies the maximum work queue capacity.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_MAX_CAPACITY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 86;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the number of worker threads to use.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_NUM_WORKER_THREADS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 87;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the maximum work queue capacity.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_QUEUE_CAPACITY =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 88;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid value is
-   * specified for the number of worker threads to use to service the work
-   * queue.  This takes two arguments, which are the DN of the configuration
-   * entry and the specified number of worker threads.
-   */
-  public static final int MSGID_CONFIG_WORK_QUEUE_NUM_THREADS_INVALID_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 89;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid value is
-   * specified for the maximum work queue capacity.  This takes two arguments,
-   * which are the DN of the configuration entry and the specified capacity.
-   */
-  public static final int MSGID_CONFIG_WORK_QUEUE_CAPACITY_INVALID_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 90;
-
-
-
-  /**
-   * The message ID for the message that will be used if the number of worker
-   * threads is increased while the server is online.  This takes two arguments,
-   * which are the number of new threads that have been created and the total
-   * number of worker threads after the change.
-   */
-  public static final int MSGID_CONFIG_WORK_QUEUE_CREATED_THREADS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 91;
-
-
-
-  /**
-   * The message ID for the message that will be used if the number of worker
-   * threads is decreased while the server is online.  This takes two arguments,
-   * which are the number of new threads that will be destroyed and the total
-   * number of worker threads after the change.
-   */
-  public static final int MSGID_CONFIG_WORK_QUEUE_DESTROYING_THREADS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 92;
-
-
-
-  /**
-   * The message ID for the message that will be used if the work queue capacity
-   * is changed while the server is online.  This takes a single argument, which
-   * is the new capacity for the work queue.
-   */
-  public static final int MSGID_CONFIG_WORK_QUEUE_NEW_CAPACITY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 93;
-
-
-
-  /**
-   * The message ID for the message that will be used if a worker thread
-   * experiences too many unexpected failures while waiting for operations to
-   * process.  This takes three arguments, which are the name of the worker
-   * thread, the number of failures experienced, and the maximum number of
-   * failures allowed.
-   */
-  public static final int MSGID_CONFIG_WORK_QUEUE_TOO_MANY_FAILURES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 94;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to create a monitor provider to publish information about the state
-   * of the work queue.  This takes two arguments, which are the fully-qualified
-   * class name of the monitor provider and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 95;
-
-
-
-  /** The message ID used to describe the backend directory configuration
-   * attribute.
-   */
-  public static final int MSGID_CONFIG_DESCRIPTION_BACKEND_DIRECTORY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 96;
-
-
-
-  /**
-   * The message ID used when there is no valid backend directory provided.
-   */
-  public static final int MSGID_CONFIG_BACKEND_NO_DIRECTORY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 97;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * include a null value in the set of values for a DN configuration attribute.
-   * This takes a single argument, which is the name of the attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_DN_NULL =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 98;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the value of a configuration attribute as a DN.  This takes
-   * three arguments, which are the provided value, the name of the attribute,
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ATTR_DN_CANNOT_PARSE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 99;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode an object as a DN value but an error occurred in the process.  This
-   * takes three arguments, which are a string representation of the provided
-   * value, the name of the configuration attribute and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ATTR_INVALID_DN_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 100;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode an object as a DN value but the object was of an invalid type.  This
-   * takes three arguments, which are a string representation of the provided
-   * value, the name of the configuration attribute and the object type for the
-   * provided value.
-   */
-  public static final int MSGID_CONFIG_ATTR_DN_INVALID_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 101;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode an object as an array of DN values but the object was an array with
-   * an invalid component type.  This takes two arguments, which are the name of
-   * the configuration attribute and the component type for the provided array.
-   */
-  public static final int MSGID_CONFIG_ATTR_DN_INVALID_ARRAY_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 102;
-
-
-
-  /**
-   * The message ID for the message that will be used if the config handler
-   * cannot register its base DN as a private suffix.  This takes two arguments,
-   * which are the suffix DN that was attempted to be registered, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CANNOT_REGISTER_AS_PRIVATE_SUFFIX =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 103;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to get the base entry for the server backends.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_BACKEND_CANNOT_GET_CONFIG_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 104;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration base
-   * entry for the set of backends does not exist in the server.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_CONFIG_BACKEND_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 105;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * below the backend config base does not appear to contain a backend
-   * configuration.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int
-       MSGID_CONFIG_BACKEND_ENTRY_DOES_NOT_HAVE_BACKEND_CONFIG =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 106;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to interact with a backend configuration entry.  This
-   * takes two arguments, which are the DN of the backend configuration entry
-   * and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 107;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that controls whether a backend is enabled.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 108;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that specifies the class name for a backend
-   * implementation.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 109;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backend configuration
-   * entry does not contain an attribute to indicate whether the backend is
-   * enabled or disabled.  This takes a single argument, which is the DN of the
-   * backend configuration entry.
-   */
-  public static final int MSGID_CONFIG_BACKEND_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 110;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backend configuration
-   * entry is marked disabled and therefore will not be processed.  This takes a
-   * single argument, which is the DN of the backend configuration entry.
-   */
-  public static final int MSGID_CONFIG_BACKEND_DISABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 111;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * occurs while attempting to determine whether a backend should be enabled.
-   * This takes two arguments, which are the DN of the backend configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_BACKEND_UNABLE_TO_DETERMINE_ENABLED_STATE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 112;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backend configuration
-   * entry does not contain the name of the class providing the backend
-   * implementation.  This takes a single argument, which is the DN of the
-   * backend configuration entry.
-   */
-  public static final int MSGID_CONFIG_BACKEND_NO_CLASS_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 113;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the name of the class to use for a backend
-   * implementation.  This takes two arguments, which are the DN of the backend
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_BACKEND_CANNOT_GET_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 114;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to load and instantiate a backend class.  This takes three
-   * arguments, which are the name of the backend class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_BACKEND_CANNOT_INSTANTIATE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 115;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to initialize a backend from a configuration entry.  This takes
-   * three arguments, which are the name of the backend class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_BACKEND_CANNOT_INITIALIZE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 116;
-
-
-
-  /**
-   * The message ID for the message that will be used if class defined for a
-   * backend does not contain an actual backend implementation.  This takes two
-   * arguments, which are the name of the class and the DN of the configuration
-   * entry.
-   */
-  public static final int MSGID_CONFIG_BACKEND_CLASS_NOT_BACKEND =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 117;
-
-
-
-  /**
-   * The message ID for the message that will be used if the class for a backend
-   * is changed while that backend is online to indicate that the change will
-   * not take effect immediately.  This takes three arguments, which are the DN
-   * of the configuration entry, the name of the class that is currently
-   * providing the backend implementation, and the name of the new class to use
-   * for the backend implementation.
-   */
-  public static final int MSGID_CONFIG_BACKEND_ACTION_REQUIRED_TO_CHANGE_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_NOTICE | 118;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a backend that contains one or more subordinate backends.  This
-   * takes a single argument, which is the DN of the configuration entry with
-   * which the backend is associated.
-   */
-  public static final int
-       MSGID_CONFIG_BACKEND_CANNOT_REMOVE_BACKEND_WITH_SUBORDINATES =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_NOTICE | 119;
-
-
-
-  /**
-   * The message ID for the description of the max allowed client connections
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int
-       MSGID_CONFIG_CORE_DESCRIPTION_MAX_ALLOWED_CONNECTIONS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 120;
-
-
-
-  /**
-   * The message ID for the message that will be used if the max allowed client
-   * connections configuration attribute has an invalid value.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_MAX_ALLOWED_CONNECTIONS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 121;
-
-
-
-  /**
-   * The message ID for the message that will be used if the logger class has
-   * changed and will require administrative action to take effect.  This takes
-   * three arguments, which are the old class name, the new class name, and the
-   * DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_LOGGER_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 122;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new logger with a DN that matches the DN of a logger that already
-   * exists.  This takes a single argument, which is the DN of the logger
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_LOGGER_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 123;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server access logger.  This takes three arguments,
-   * which are the class name for the logger class, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_LOGGER_ACCESS_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 124;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server error logger.  This takes three arguments,
-   * which are the class name for the logger class, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_LOGGER_ERROR_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 125;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server debug logger.  This takes three arguments,
-   * which are the class name for the logger class, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_LOGGER_DEBUG_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 126;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the monitor base entry from the configuration.
-   * This takes a single argument, which is a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_MONITOR_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 127;
-
-
-
-  /**
-   * The message ID for the message that will be used if the monitor base entry
-   * does not exist in the Directory Server configuration.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_CONFIG_MONITOR_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 128;
-
-
-
-  /**
-   * The message ID for the message that will be used if a monitor configuration
-   * entry does not contain an acceptable monitor configuration.  This takes two
-   * arguments, which are the DN of the configuration entry and the reason that
-   * it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_MONITOR_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 129;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a monitor from a configuration entry.  This takes two
-   * arguments, which are the DN of the configuration entry and a message that
-   * explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_MONITOR_CANNOT_CREATE_MONITOR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 130;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * monitor base does not contain a valid monitor objectclass.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_MONITOR_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 131;
-
-
-
-  /**
-   * The message ID for the description of the monitor class name configuration
-   * attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 132;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * monitor base does not contain a value for the logger class name.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_MONITOR_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 133;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * monitor base contains an invalid value for the class name.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 134;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server monitor but the associated class cannot be
-   * instantiated as a monitor provider.  This takes three arguments, which are
-   * the monitor class name, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_MONITOR_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 135;
-
-
-
-  /**
-   * The message ID for the description of the monitor enabled configuration
-   * attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_MONITOR_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 136;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * monitor base does not contain a value for the enabled attribute.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_MONITOR_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 137;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * monitor base has an invalid value for the enabled attribute.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_MONITOR_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 138;
-
-
-
-  /**
-   * The message ID for the message that will be used if the monitor class has
-   * changed and will require administrative action to take effect.  This takes
-   * three arguments, which are the old class name, the new class name, and the
-   * DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_MONITOR_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 139;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server monitor provider.  This takes three
-   * arguments, which are the class name for the monitor class, the DN of
-   * the configuration entry, and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_CONFIG_MONITOR_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 140;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new monitor provider with a DN that matches the DN of a monitor that
-   * already exists.  This takes a single argument, which is the DN of the
-   * monitor configuration entry.
-   */
-  public static final int MSGID_CONFIG_MONITOR_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 141;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to get the base entry for the server connection handlers.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_CANNOT_GET_CONFIG_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 142;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration base
-   * entry for the set of connection handlers does not exist in the server.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 143;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * below the connection handler config base does not appear to contain a
-   * connection handler configuration.  This takes a single argument, which is
-   * the DN of the configuration entry.
-   */
-  public static final int
-       MSGID_CONFIG_CONNHANDLER_ENTRY_DOES_NOT_HAVE_CONNHANDLER_CONFIG =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 144;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to interact with a connection handler configuration
-   * entry.  This takes two arguments, which are the DN of the connection
-   * handler configuration entry and a string representation of the exception
-   * that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_CONNHANDLER_ERROR_INTERACTING_WITH_CONNHANDLER_ENTRY =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 145;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that controls whether a connection handler is
-   * enabled.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_ATTR_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 146;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that specifies the class name for a connection
-   * handler implementation.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_ATTR_DESCRIPTION_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 147;
-
-
-
-  /**
-   * The message ID for the message that will be used if a connection handler
-   * configuration entry does not contain an attribute to indicate whether the
-   * connection handler is enabled or disabled.  This takes a single argument,
-   * which is the DN of the connection handler configuration entry.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 148;
-
-
-
-  /**
-   * The message ID for the message that will be used if a connection handler
-   * configuration entry is marked disabled and therefore will not be processed.
-   * This takes a single argument, which is the DN of the connection handler
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_DISABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 149;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * occurs while attempting to determine whether a connection handler should be
-   * enabled.  This takes two arguments, which are the DN of the connection
-   * handler configuration entry and a string representation of the exception
-   * that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_CONNHANDLER_UNABLE_TO_DETERMINE_ENABLED_STATE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 150;
-
-
-
-  /**
-   * The message ID for the message that will be used if a connection handler
-   * configuration entry does not contain the name of the class providing the
-   * connection handler implementation.  This takes a single argument, which is
-   * the DN of the connection handler configuration entry.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_NO_CLASS_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 151;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the name of the class to use for a connection handler
-   * implementation.  This takes two arguments, which are the DN of the
-   * connection handler configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_CANNOT_GET_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 152;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * load and instantiate a connection handler class.  This takes three
-   * arguments, which are the name of the connection handler class, the DN of
-   * the configuration entry, and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_CANNOT_INSTANTIATE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 153;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initialize a connection handler from a configuration entry.  This takes
-   * three arguments, which are the name of the connection handler class, the DN
-   * of the configuration entry, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_CANNOT_INITIALIZE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 154;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration handler
-   * entry contains an unacceptable configuration but does not provide any
-   * specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 155;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backend entry
-   * contains an unacceptable configuration but does not provide any specific
-   * details about the nature of the problem.  This takes a single argument,
-   * which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_BACKEND_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 156;
-
-
-
-  /**
-   * The message ID for the message that will be used if a monitor provider
-   * entry contains an unacceptable configuration but does not provide any
-   * specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_MONITOR_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 157;
-
-
-
-  /**
-   * The message ID for the message that will be used if a logger entry contains
-   * an unacceptable configuration but does not provide any specific details
-   * about the nature of the problem.  This takes a single argument, which is
-   * the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_LOGGER_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 158;
-
-
-
-  /**
-   * The message ID for the message that will be used if class defined for a
-   * connection handler does not contain an actual connection handler
-   * implementation.  This takes two arguments, which are the name of the class
-   * and the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_CONNHANDLER_CLASS_NOT_CONNHANDLER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 159;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to get the base entry for the server matching rules.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_GET_MR_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 160;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration base
-   * entry for the set of matching rules does not exist in the server.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 161;
-
-
-
-  /**
-   * The message ID for the message that will be used if there are no entries
-   * below the matching rule base entry.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_NO_MATCHING_RULES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 162;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * below the matching rule config base does not appear to contain a matching
-   * rule configuration.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_ENTRY_DOES_NOT_HAVE_MR_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 163;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that controls whether a matching rule is enabled.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_ATTR_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 164;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that specifies the class name for a matching rule
-   * implementation.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_ATTR_DESCRIPTION_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 165;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * configuration entry does not contain an attribute to indicate whether the
-   * matching rule is enabled or disabled.  This takes a single argument, which
-   * is the DN of the matching rule configuration entry.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 166;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * configuration entry is marked disabled and therefore will not be processed.
-   * This takes a single argument, which is the DN of the matching rule
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_DISABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 167;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * occurs while attempting to determine whether a matching rule should be
-   * enabled.  This takes two arguments, which are the DN of the matching rule
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_CONFIG_SCHEMA_MR_UNABLE_TO_DETERMINE_ENABLED_STATE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 168;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * configuration entry does not contain the name of the class providing the
-   * matching rule implementation.  This takes a single argument, which is
-   * the DN of the matching rule configuration entry.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_NO_CLASS_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 169;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the name of the class to use for a matching rule
-   * implementation.  This takes two arguments, which are the DN of the matching
-   * rule configuration entry and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_CANNOT_GET_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 170;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * load and instantiate a matching rule class.  This takes three arguments,
-   * which are the name of the matching rule class, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_CANNOT_INSTANTIATE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 171;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initialize a matching rule from a configuration entry.  This takes three
-   * arguments, which are the name of the matching rule class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_CANNOT_INITIALIZE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 172;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule read
-   * from the server configuration conflicts with a matching rule already read
-   * from another configuration entry.  This takes two arguments, which are the
-   * DN of the configuration entry from which the matching rule configuration
-   * was read, and a message explaining the nature of the conflict.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_CONFLICTING_MR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 173;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to get the base entry for the server syntaxes.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_GET_SYNTAX_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 174;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration base
-   * entry for the set of syntaxes does not exist in the server.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 175;
-
-
-
-  /**
-   * The message ID for the message that will be used if there are no entries
-   * below the syntax base entry.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_NO_SYNTAXES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 176;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * below the syntax config base does not appear to contain an attribute syntax
-   * configuration.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int
-       MSGID_CONFIG_SCHEMA_ENTRY_DOES_NOT_HAVE_SYNTAX_CONFIG =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 177;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that controls whether a syntax is enabled.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_ATTR_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 178;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that specifies the class name for an attribute
-   * syntax implementation.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_ATTR_DESCRIPTION_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 179;
-
-
-
-  /**
-   * The message ID for the message that will be used if a syntax configuration
-   * entry does not contain an attribute to indicate whether the syntax is
-   * enabled or disabled.  This takes a single argument, which is the DN of the
-   * syntax configuration entry.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 180;
-
-
-
-  /**
-   * The message ID for the message that will be used if a syntax configuration
-   * entry is marked disabled and therefore will not be processed.  This takes a
-   * single argument, which is the DN of the syntax configuration entry.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_DISABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 181;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * occurs while attempting to determine whether a syntax should be enabled.
-   * This takes two arguments, which are the DN of the syntax configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_SCHEMA_SYNTAX_UNABLE_TO_DETERMINE_ENABLED_STATE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 182;
-
-
-
-  /**
-   * The message ID for the message that will be used if a syntax configuration
-   * entry does not contain the name of the class providing the syntax
-   * implementation.  This takes a single argument, which is the DN of the
-   * syntax configuration entry.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_NO_CLASS_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 183;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the name of the class to use for a syntax
-   * implementation.  This takes two arguments, which are the DN of the syntax
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_CANNOT_GET_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 184;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * load and instantiate a syntax class.  This takes three arguments, which are
-   * the name of the syntax class, the DN of the configuration entry, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_CANNOT_INSTANTIATE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 185;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initialize an attribute syntax from a configuration entry.  This takes
-   * three arguments, which are the name of the syntax class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_CANNOT_INITIALIZE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 186;
-
-
-
-  /**
-   * The message ID for the message that will be used if a syntax read from the
-   * server configuration conflicts with a syntax already read from another
-   * configuration entry.  This takes two arguments, which are the DN of the
-   * configuration entry from which the syntax configuration was read, and a
-   * message explaining the nature of the conflict.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 187;
-
-
-
-  /**
-   * The message ID for the message that will be used if the schema directory
-   * does not exist.  This takes a single argument, which is the path to the
-   * schema directory.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_NO_SCHEMA_DIR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 188;
-
-
-
-  /**
-   * The message ID for the message that will be used if the schema directory
-   * is not a directory.  This takes a single argument, which is the path to the
-   * schema directory.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_DIR_NOT_DIRECTORY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 189;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to list the files in the schema directory.  This takes two
-   * arguments, which are the path to the schema directory and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_LIST_FILES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 190;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to open a schema file for reading.  This takes three arguments,
-   * which are the name of the schema file, the path to the schema directory,
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_OPEN_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 191;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read an LDIF entry from a schema file.  This takes three
-   * arguments, which are the name of the schema file, the path to the schema
-   * directory, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_READ_LDIF_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 192;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse an attribute type definition.  This takes two arguments,
-   * which are the name of the file from which the attribute type was read, and
-   * a message explaining the problem that was encountered.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 193;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * conflicts with another attribute type already read into the schema.  This
-   * takes two arguments, which are the name of the file from which the
-   * attribute type was read, and a message explaining the conflict.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CONFLICTING_ATTR_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 194;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse an objectclass definition.  This takes two arguments, which
-   * are the name of the file from which the objectclass was read, and a message
-   * explaining the problem that was encountered.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_PARSE_OC =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 196;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * conflicts with another objectclass already read into the schema.  This
-   * takes two arguments, which are the name of the file from which the
-   * objectclass was read, and a message explaining the conflict.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CONFLICTING_OC =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 195;
-
-
-
-  /**
-   * The message ID for the description of the configuration attribute used to
-   * specify the behavior for entries that do not contain exactly one structural
-   * objectclass.  This does not take any arguments.
-   */
-  public static final int
-       MSGID_CONFIG_CORE_DESCRIPTION_STRUCTURAL_CLASS_BEHAVIOR =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 196;
-
-
-
-  /**
-   * The message ID for the message that will be used if the single structural
-   * objectclass behavior attribute has an invalid value.  This takes two
-   * arguments, which  are the DN of the configuration entry and a string
-   * representation of the  exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_STRUCTURAL_CLASS_BEHAVIOR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 197;
-
-
-
-  /**
-   * The message ID for the description of the check schema configuration
-   * attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CORE_DESCRIPTION_CHECK_SCHEMA =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 198;
-
-
-
-  /**
-   * The message ID for the message that will be used if the check schema
-   * configuration attribute has an invalid value.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_CHECK_SCHEMA =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 199;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to install the default entry cache.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_CANNOT_INSTALL_DEFAULT_CACHE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 200;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the entry cache configuration entry.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_CANNOT_GET_CONFIG_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 201;
-
-
-
-  /**
-   * The message ID for the message that will be used if the entry cache
-   * configuration entry does not exist.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_NO_CONFIG_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 202;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to register to watch for the entry cache configuration entry to
-   * be created.  This takes a single argument, which is a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_CANNOT_REGISTER_ADD_LISTENER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 203;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to register to watch for the entry cache configuration entry to
-   * be removed.  This takes a single argument, which is a string representation
-   * of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_ENTRYCACHE_CANNOT_REGISTER_DELETE_LISTENER =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 204;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * entry cache enabled attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_DESCRIPTION_CACHE_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 205;
-
-
-
-  /**
-   * The message ID for the message that will be used if the entry cache
-   * configuration entry does not contain an enabled attribute.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 206;
-
-
-
-  /**
-   * The message ID for the message that will be used if the entry cache has
-   * been explicitly disabled.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_DISABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 207;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine whether the entry cache should be enabled.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_ENTRYCACHE_UNABLE_TO_DETERMINE_ENABLED_STATE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 208;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * entry cache class attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_DESCRIPTION_CACHE_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 209;
-
-
-
-  /**
-   * The message ID for the message that will be used if the entry cache
-   * configuration entry does not contain a class name attribute.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_NO_CLASS_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 210;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine the class to use for the entry cache.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_CANNOT_DETERMINE_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 211;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to load the entry cache class.  This takes two arguments, which
-   * are the class name and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_CANNOT_LOAD_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 212;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to instantiate the entry cache class.  This takes two arguments,
-   * which are the class name and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_CANNOT_INSTANTIATE_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 213;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to initialize the entry cache.  This takes two arguments, which
-   * are the class name and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_CANNOT_INITIALIZE_CACHE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 214;
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to remove a child of a configuration entry.  This takes
-   * three arguments, which are the DN of the child entry, the DN of the parent
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ENTRY_CANNOT_REMOVE_CHILD =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 215;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a name form definition.  This takes two arguments, which
-   * are the name of the file from which the name form was read, and a
-   * message explaining the problem that was encountered.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 216;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form conflicts
-   * with another name form already read into the schema.  This takes two
-   * arguments, which are the name of the file from which the name form was
-   * read, and a message explaining the conflict.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CONFLICTING_NAME_FORM =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 217;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a DIT content rule definition.  This takes two arguments,
-   * which are the name of the file from which the DIT content rule was read,
-   * and a message explaining the problem that was encountered.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_PARSE_DCR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 218;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * conflicts with another DIT content rule already read into the schema.  This
-   * takes two arguments, which are the name of the file from which the DIT
-   * content rule was read, and a message explaining the conflict.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CONFLICTING_DCR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 219;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a DIT structure rule definition.  This takes two arguments,
-   * which are the name of the file from which the DIT structure rule was read,
-   * and a message explaining the problem that was encountered.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_PARSE_DSR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 220;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * conflicts with another DIT structure rule already read into the schema.
-   * This takes two arguments, which are the name of the file from which the DIT
-   * structure rule was read, and a message explaining the conflict.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CONFLICTING_DSR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 221;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a matching rule use definition.  This takes two arguments,
-   * which are the name of the file from which the matching rule use was read,
-   * and a message explaining the problem that was encountered.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_PARSE_MRU =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 222;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * conflicts with another matching rule use already read into the schema.
-   * This takes two arguments, which are the name of the file from which the
-   * matching rule use was read, and a message explaining the conflict.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CONFLICTING_MRU =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 223;
-
-
-  /**
-   * The message ID for the message that will be used if no log rotation
-   * policy is specified.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_ROTATION_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 224;
-
-
-  /**
-   * The message ID for the message that will be used if the size based
-   * rotation policy is specified and no size limit is defined.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_SIZE_LIMIT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 225;
-
-
-  /**
-   * The message ID for the message that will be used if the time limit based
-   * rotation policy is specified and no time limit is defined.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_TIME_LIMIT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 226;
-
-
-  /**
-   * The message ID for the message that will be used if an invalid
-   * rotation policy is specified.
-   */
-  public static final int MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 227;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * alter the value of a read-only configuration attribute.  This takes a
-   * single argument, which is the name of the attribute.
-   */
-  public static final int MSGID_CONFIG_ATTR_READ_ONLY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 228;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to get the base entry for the server plugins.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_CANNOT_GET_CONFIG_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 229;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration base
-   * entry for the set of plugins does not exist in the server.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 230;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * below the plugin config base does not appear to contain a plugin
-   * configuration.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int
-       MSGID_CONFIG_PLUGIN_ENTRY_DOES_NOT_HAVE_PLUGIN_CONFIG =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 231;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to interact with a plugin configuration entry.  This
-   * takes two arguments, which are the DN of the plugin configuration entry
-   * and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_PLUGIN_ERROR_INTERACTING_WITH_PLUGIN_ENTRY =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 232;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that controls whether a plugin is enabled.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_ATTR_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 233;
-
-
-
-  /**
-   * The message ID for the message that will be used if a plugin configuration
-   * entry does not contain an attribute to indicate whether the plugin is
-   * enabled or disabled.  This takes a single argument, which is the DN of the
-   * plugin configuration entry.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 234;
-
-
-
-  /**
-   * The message ID for the message that will be used if a plugin configuration
-   * entry is marked disabled and therefore will not be processed.  This takes a
-   * single argument, which is the DN of the plugin configuration entry.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_DISABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 235;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * occurs while attempting to determine whether a plugin should be enabled.
-   * This takes two arguments, which are the DN of the plugin configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_PLUGIN_UNABLE_TO_DETERMINE_ENABLED_STATE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 236;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that specifies the plugin type for a plugin
-   * implementation.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_ATTR_DESCRIPTION_PLUGIN_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 237;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that specifies the class name for a plugin
-   * implementation.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_ATTR_DESCRIPTION_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 238;
-
-
-
-  /**
-   * The message ID for the message that will be used if a plugin configuration
-   * entry does not contain a set of plugin types.  This takes a single
-   * argument, which is the DN of the plugin configuration entry.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_NO_PLUGIN_TYPES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 239;
-
-
-
-  /**
-   * The message ID for the message that will be used if a plugin configuration
-   * entry contains an invalid plugin type.  This takes two arguments, which are
-   * the DN of the plugin configuration entry and the invalid plugin type.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_INVALID_PLUGIN_TYPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 240;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the set of plugin types for a plugin definition.  This
-   * takes two arguments, which are the DN of the plugin configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_CANNOT_GET_PLUGIN_TYPES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 241;
-
-
-
-  /**
-   * The message ID for the message that will be used if a plugin configuration
-   * entry does not contain the name of the class providing the plugin
-   * implementation.  This takes a single argument, which is the DN of the
-   * plugin configuration entry.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_NO_CLASS_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 242;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the name of the class to use for a plugin
-   * implementation.  This takes two arguments, which are the DN of the plugin
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_CANNOT_GET_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 243;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to load and instantiate a plugin class.  This takes three arguments,
-   * which are the name of the plugin class, the DN of the configuration entry,
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_CANNOT_INSTANTIATE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 244;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to initialize a plugin from a configuration entry.  This takes three
-   * arguments, which are the name of the plugin class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_CANNOT_INITIALIZE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 245;
-
-
-
-  /**
-   * The message ID for the description of the notify abandoned operations
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int
-       MSGID_CONFIG_CORE_DESCRIPTION_NOTIFY_ABANDONED_OPERATIONS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 246;
-
-
-
-  /**
-   * The message ID for the message that will be used if the notify abandoned
-   * operations configuration attribute has an invalid value.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_CORE_INVALID_NOTIFY_ABANDONED_OPERATIONS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 247;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the extended operation handler base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_CANNOT_GET_BASE =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 248;
-
-
-
-  /**
-   * The message ID for the message that will be used if the extended operation
-   * handler base entry does not exist in the Directory Server configuration.
-   * This does not take any arguments.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_BASE_DOES_NOT_EXIST =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 249;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extended operation
-   * handler configuration entry does not contain an acceptable handler
-   * configuration.  This takes two arguments, which are the DN of the
-   * configuration entry and the reason that it is not acceptable.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_ENTRY_UNACCEPTABLE =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 250;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create an extended operation handler from a configuration entry.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * message that explains the problem that occurred.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_CANNOT_CREATE_HANDLER =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 251;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * extended operation does not contain a valid objectclass.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_INVALID_OBJECTCLASS =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 252;
-
-
-
-  /**
-   * The message ID for the description of the extended operation handler class
-   * name configuration attribute.  This does not take any arguments.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_DESCRIPTION_CLASS_NAME =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 253;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * extended operation base does not contain a value for the class name.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_NO_CLASS_NAME =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 254;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * extended operation base contains an invalid value for the class name.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_INVALID_CLASS_NAME =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 255;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server extended operation but the associated class
-   * cannot be instantiated as an extended operation handler.  This takes three
-   * arguments, which are the handler class name, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_EXTOP_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 256;
-
-
-
-  /**
-   * The message ID for the description of the extended operation handler
-   * enabled configuration attribute.  This does not take any arguments.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_DESCRIPTION_ENABLED =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 257;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * extended operation base does not contain a value for the enabled attribute.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_NO_ENABLED_ATTR =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 258;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * extended operation base has an invalid value for the enabled attribute.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_INVALID_ENABLED_VALUE =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 259;
-
-
-
-  /**
-   * The message ID for the message that will be used if the extended operation
-   * handler class has changed and will require administrative action to take
-   * effect.  This takes three arguments, which are the old class name, the new
-   * class name, and the DN of the associated configuration entry.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_CLASS_ACTION_REQUIRED =
-//            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 260;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server extended operation handler.  This takes
-   * three arguments, which are the class name for the handler class, the DN of
-   * the configuration entry, and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_CONFIG_EXTOP_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 261;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new extended operation handler with a DN that matches the DN of a
-   * handler that already exists.  This takes a single argument, which is the DN
-   * of the handler configuration entry.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_EXISTS =
-//            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 262;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extended operation
-   * handler entry contains an unacceptable configuration but does not provide
-   * any specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-//  public static final int MSGID_CONFIG_EXTOP_UNACCEPTABLE_CONFIG =
-//       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 263;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the SASL mechanism handler base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SASL_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 264;
-
-
-
-  /**
-   * The message ID for the message that will be used if the SASL mechanism
-   * handler base entry does not exist in the Directory Server configuration.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SASL_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 265;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL mechanism
-   * handler configuration entry does not contain an acceptable handler
-   * configuration.  This takes two arguments, which are the DN of the
-   * configuration entry and the reason that it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_SASL_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 266;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a SASL mechanism handler from a configuration entry.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_SASL_CANNOT_CREATE_HANDLER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 267;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the SASL
-   * mechanism does not contain a valid objectclass.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_SASL_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 268;
-
-
-
-  /**
-   * The message ID for the description of the SASL mechanism handler class name
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SASL_DESCRIPTION_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 269;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the SASL
-   * mechanism base does not contain a value for the class name.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_SASL_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 270;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the SASL
-   * mechanism base contains an invalid value for the class name.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SASL_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 271;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server SASL mechanism but the associated class cannot
-   * be instantiated as a SASL mechanism handler.  This takes three arguments,
-   * which are the handler class name, the DN of the configuration entry, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SASL_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 272;
-
-
-
-  /**
-   * The message ID for the description of the SASL mechanism handler enabled
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SASL_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 273;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the SASL
-   * mechanism base does not contain a value for the enabled attribute.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_SASL_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 274;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the SASL
-   * mechanism base has an invalid value for the enabled attribute.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SASL_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 275;
-
-
-
-  /**
-   * The message ID for the message that will be used if the SASL mechanism
-   * handler class has changed and will require administrative action to take
-   * effect.  This takes three arguments, which are the old class name, the new
-   * class name, and the DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_SASL_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 276;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server SASL mechanism handler.  This takes three
-   * arguments, which are the class name for the handler class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_SASL_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 277;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new SASL mechanism handler with a DN that matches the DN of a
-   * handler that already exists.  This takes a single argument, which is the DN
-   * of the handler configuration entry.
-   */
-  public static final int MSGID_CONFIG_SASL_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 278;
-
-
-
-  /**
-   * The message ID for the message that will be used if an SASL mechanism
-   * handler entry contains an unacceptable configuration but does not provide
-   * any specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_SASL_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 279;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new configuration entry with a DN that already exists.  This takes a
-   * single argument, which is the DN of the entry to add.
-   */
-  public static final int MSGID_CONFIG_FILE_ADD_ALREADY_EXISTS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 280;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new configuration entry with a DN that does not have a parent.  This
-   * takes a single argument, which is the DN of the entry to add.
-   */
-  public static final int MSGID_CONFIG_FILE_ADD_NO_PARENT_DN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 281;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new configuration entry for which the parent entry does not exist.
-   * This takes two arguments, which are the DN of the entry to add and the DN
-   * of its parent.
-   */
-  public static final int MSGID_CONFIG_FILE_ADD_NO_PARENT=
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 282;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to add a new
-   * configuration entry is rejected by one of the add listeners.  This takes
-   * three arguments, which are the DN of the entry to add, the DN of its
-   * parent, and the unacceptable reason given by the add listener.
-   */
-  public static final int MSGID_CONFIG_FILE_ADD_REJECTED_BY_LISTENER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 283;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * occurs while attempting to add a new configuration entry.  This takes three
-   * arguments, which are the DN of the entry to add, the DN of its  parent, and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_ADD_FAILED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 284;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request is made to
-   * delete a nonexistent config entry.  This takes a single argument, which is
-   * the DN of the target entry.
-   */
-  public static final int MSGID_CONFIG_FILE_DELETE_NO_SUCH_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 285;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request is made to
-   * delete config entry that has one or more children.  This takes a single
-   * argument, which is the DN of the target entry.
-   */
-  public static final int MSGID_CONFIG_FILE_DELETE_HAS_CHILDREN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 286;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request is made to
-   * delete a config entry that does not have a parent.  This takes a single
-   * argument, which is the DN of the target entry.
-   */
-  public static final int MSGID_CONFIG_FILE_DELETE_NO_PARENT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 287;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration delete
-   * is rejected by one of the parent's delete listeners.  This takes three
-   * arguments, which are the DN of the target entry, the DN of its parent, and
-   * the unacceptable reason.
-   */
-  public static final int MSGID_CONFIG_FILE_DELETE_REJECTED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 288;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * occurs while attempting to remove a configuration entry.  This takes three
-   * arguments, which are the DN of the entry to remove, the DN of its  parent,
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_DELETE_FAILED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 289;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request is made to
-   * modify a nonexistent config entry.  This takes a single argument, which is
-   * the DN of the target entry.
-   */
-  public static final int MSGID_CONFIG_FILE_MODIFY_NO_SUCH_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 290;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration modify
-   * is rejected by one of its change listeners.  This takes two arguments,
-   * which are the DN of the target entry and the unacceptable reason.
-   */
-  public static final int MSGID_CONFIG_FILE_MODIFY_REJECTED_BY_CHANGE_LISTENER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 291;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration modify
-   * is rejected by one of the registered configurable components.  This takes
-   * two arguments, which are the DN of the target entry and the unacceptable
-   * reason.
-   */
-  public static final int MSGID_CONFIG_FILE_MODIFY_REJECTED_BY_COMPONENT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 292;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration search
-   * fails because the base entry does not exist.  This takes a single argument,
-   * which is the base DN.
-   */
-  public static final int MSGID_CONFIG_FILE_SEARCH_NO_SUCH_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 293;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration search
-   * fails because it has an invalid scope.  This takes a single argument, which
-   * is a string representation of the invalid scope.
-   */
-  public static final int MSGID_CONFIG_FILE_SEARCH_INVALID_SCOPE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 294;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to create a temporary file to hold the updated configuration
-   * archive.  This takes two arguments, which are the name of the temporary
-   * archive file and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_WRITE_CANNOT_CREATE_TEMP_ARCHIVE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 295;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to copy the previous archived configurations into the new
-   * archive.  This takes three arguments, which are the name of the previous
-   * archive, the name of the temporary archive file, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_WRITE_CANNOT_COPY_EXISTING_ARCHIVE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 296;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to copy the running configuration into the new archive.  This
-   * takes three arguments, which are the name of the temporary archive file,
-   * the path of the running configuration file, and a string  representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_WRITE_CANNOT_COPY_CURRENT_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 297;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to rename the temporary archived configuration file with the
-   * permanent name.  This takes two arguments, which are the temporary and
-   * permanent names of the archived configurations.
-   */
-  public static final int MSGID_CONFIG_FILE_WRITE_CANNOT_RENAME_TEMP_ARCHIVE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 298;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to replace the archived configuration.  This takes three
-   * arguments, which are the temporary and permanent names of the archived
-   * configurations, a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_WRITE_CANNOT_REPLACE_ARCHIVE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 299;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to write the new configuration to a temporary file.  This takes
-   * two arguments, which are the path of the temporary file and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_WRITE_CANNOT_EXPORT_NEW_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 300;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to rename the temporary copy of the new configuration to the
-   * permanent name.  This takes three arguments, which are the temporary and
-   * permanent names of the configuration, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_WRITE_CANNOT_RENAME_NEW_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 301;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user attempts to
-   * perform a modify DN in the configuration.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_FILE_MODDN_NOT_ALLOWED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 302;
-
-
-  /**
-   * The message ID for the suppress internal operations attribute.
-   */
-  public static final int MSGID_CONFIG_LOGGER_SUPPRESS_INTERNAL_OPERATIONS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 303;
-
-  /**
-   * The message ID for invalid suppress internal operations values.
-   */
-  public static final int
-    MSGID_CONFIG_LOGGER_INVALID_SUPPRESS_INT_OPERATION_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 304;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * configuration attribute that specifies the set of base DNs for a backend.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 305;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backend configuration
-   * entry does not specify the set of base DNs for that backend.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_BACKEND_NO_BASE_DNS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 306;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * occurs while attempting to determine the set of base DNs for a backend.
-   * This takes two arguments, which are the DN of the backend configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_BACKEND_UNABLE_TO_DETERMINE_BASE_DNS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 307;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * key manager provider enabled attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 313;
-
-
-
-  /**
-   * The message ID for the message that will be used if the key manager
-   * provider configuration entry does not contain an enabled attribute.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 314;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * key manager provider class attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_DESCRIPTION_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 317;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * trust manager provider enabled attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 328;
-
-
-
-  /**
-   * The message ID for the message that will be used if the trust manager
-   * provider configuration entry does not contain an enabled attribute.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 329;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * trust manager provider class attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_DESCRIPTION_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 332;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * certificate mapper enabled attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 347;
-
-
-
-  /**
-   * The message ID for the message that will be used if the certificate mapper
-   * configuration entry does not contain an enabled attribute.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 348;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * certificate mapper class attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_DESCRIPTION_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 351;
-
-
-
-  /**
-   * The message ID for the message that will be used if no log retention
-   * policy is specified.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_RETENTION_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_WARNING | 357;
-
-
-  /**
-   * The message ID for the message that will be used if an invalid retention
-   * policy is specified.
-   */
-  public static final int MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 358;
-
-
-  /**
-   * The message ID for the message that will be used if no number of files
-   * are specified.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_NUMBER_OF_FILES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 359;
-
-  /**
-   * The message ID for the message that will be used if no disk space needed
-   * is specified.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_DISK_SPACE_USED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 360;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the password storage scheme base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 363;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password storage
-   * scheme base entry does not exist in the Directory Server configuration.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 364;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password storage
-   * scheme configuration entry does not contain an acceptable configuration.
-   * This takes two arguments, which are the DN of the configuration entry and
-   * the reason that it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 365;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a password storage scheme from a configuration entry.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_CANNOT_CREATE_SCHEME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 366;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password storage scheme base does not contain a valid storage scheme
-   * objectclass.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 367;
-
-
-
-  /**
-   * The message ID for the description of the password storage scheme class
-   * name configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_DESCRIPTION_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 368;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password storage scheme base does not contain a value for the class name.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 369;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password storage scheme base contains an invalid value for the class name.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 370;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server password storage scheme but the associated class
-   * cannot be instantiated as a password storage scheme.  This takes three
-   * arguments, which are the storage scheme class name, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 371;
-
-
-
-  /**
-   * The message ID for the description of the password storage scheme enabled
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 372;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password storage scheme base does not contain a value for the enabled
-   * attribute.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 373;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password storage scheme base has an invalid value for the enabled
-   * attribute.  This takes two arguments, which are the DN of the configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 374;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password storage
-   * scheme class has changed and will require administrative action to take
-   * effect.  This takes three arguments, which are the old class name, the new
-   * class name, and the DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 375;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server password storage scheme.  This takes three
-   * arguments, which are the class name for the storage scheme class, the DN of
-   * the configuration entry, and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 376;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new password storage scheme with a DN that matches the DN of a scheme
-   * that already exists.  This takes a single argument, which is the DN of the
-   * storage scheme configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 377;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password storage
-   * scheme entry contains an unacceptable configuration but does not provide
-   * any specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 378;
-
-
-
-  /**
-   * The message ID for the message that will be used if the plugin class has
-   * changed and will require administrative action to take effect.  This takes
-   * three arguments, which are the old class name, the new class name, and the
-   * DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 379;
-
-
-  /**
-   * The message ID for the message that will be used if the free disk based
-   * retention policy is specified and no size limit is defined.
-   */
-  public static final int MSGID_CONFIG_LOGGER_NO_FREE_DISK_SPACE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 380;
-
-
-  /**
-   * The message ID for the message that will be used if the free disk based
-   * retention policy is and the server is not running on Java 6.
-   */
-  public static final int MSGID_CONFIG_LOGGER_INVALID_JAVA5_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 381;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that holds the backend ID.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 382;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backend configuration
-   * entry does not contain the backend ID attribute.  This takes a single
-   * argument, which is the DN of the backend configuration entry.
-   */
-  public static final int MSGID_CONFIG_BACKEND_NO_BACKEND_ID =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 383;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backend configuration
-   * entry contains a backend ID that conflicts with the ID for another backend.
-   * This takes a single argument, which is the DN of the backend configuration
-   * entry.
-   */
-  public static final int MSGID_CONFIG_BACKEND_DUPLICATE_BACKEND_ID =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 384;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * occurs while attempting to determine the backend ID for a backend.  This
-   * takes two arguments, which are the DN of the backend configuration entry
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_BACKEND_UNABLE_TO_DETERMINE_BACKEND_ID =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 385;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain the MAC provider for the config backup.  This takes
-   * two arguments, which are the name of the desired MAC algorithm and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_BACKUP_CANNOT_GET_MAC =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 386;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain the message digest for the config backup.  This takes
-   * two arguments, which are the name of the desired digest algorithm and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_BACKUP_CANNOT_GET_DIGEST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 387;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to create the archive file for a config backup.  This takes
-   * three arguments, which are the name of the archive file, the path to the
-   * archive directory, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_BACKUP_CANNOT_CREATE_ARCHIVE_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 388;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain the cipher for the config backup.  This takes two
-   * arguments, which are the name of the desired cipher algorithm and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_BACKUP_CANNOT_GET_CIPHER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 389;
-
-
-
-  /**
-   * The message ID for the message that will be used for the message containing
-   * the comment to include in the config archive zip.  This takes two
-   * arguments, which are the Directory Server product name and the backup ID.
-   */
-  public static final int MSGID_CONFIG_BACKUP_ZIP_COMMENT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 390;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine the path to the configuration file.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_CONFIG_BACKUP_CANNOT_DETERMINE_CONFIG_FILE_LOCATION =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 391;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to back up a config file.  This takes two arguments, which are
-   * the name of the config file and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_CONFIG_BACKUP_CANNOT_BACKUP_CONFIG_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 392;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to back up the archived configs.  This takes two arguments,
-   * which are the name of the config file and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_BACKUP_CANNOT_BACKUP_ARCHIVED_CONFIGS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 393;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to close the output stream for the config archive.  This takes
-   * three arguments, which are the name of the config archive file, the path
-   * to the directory containing that file, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_BACKUP_CANNOT_CLOSE_ZIP_STREAM =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 394;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the backup descriptor with information about the
-   * config backup.  This takes two arguments, which are the path to the backup
-   * descriptor file and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 395;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * restore config backup but the requested backup could not be found.  This
-   * takes two arguments, which are the backup ID and the path to the backup
-   * directory.
-   */
-  public static final int MSGID_CONFIG_RESTORE_NO_SUCH_BACKUP =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 396;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * restore config backup but it cannot be determined which archive file holds
-   * that backup.  This takes two arguments, which are the backup ID and the
-   * path to the backup directory.
-   */
-  public static final int MSGID_CONFIG_RESTORE_NO_BACKUP_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 397;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * restore config backup but the archive file does not exist.  This takes two
-   * arguments, which are the backup ID and the expected path to the archive
-   * file.
-   */
-  public static final int MSGID_CONFIG_RESTORE_NO_SUCH_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 398;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether the backup archive exists.  This takes three
-   * arguments, which are the backup ID, the expected path to the backup
-   * archive, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_CHECK_FOR_ARCHIVE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 399;
-
-
-
-  /**
-   * The message ID for the message that will be used if a config backup is
-   * hashed but the digest algorithm is not known.  This takes a single
-   * argument, which is the backup ID.
-   */
-  public static final int MSGID_CONFIG_RESTORE_UNKNOWN_DIGEST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 400;
-
-
-
-  /**
-   * The message ID for the message that will be used if a config backup has a
-   * hash with an unknown or unsupported digest algorithm.  This takes two
-   * arguments, which are the backup ID and the digest algorithm.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_GET_DIGEST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 401;
-
-
-
-  /**
-   * The message ID for the message that will be used if a config backup is
-   * signed but the MAC algorithm is not known.  This takes a single argument,
-   * which is the backup ID.
-   */
-  public static final int MSGID_CONFIG_RESTORE_UNKNOWN_MAC =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 402;
-
-
-
-  /**
-   * The message ID for the message that will be used if a config backup has a
-   * signature with an unknown or unsupported MAC algorithm.  This takes two
-   * arguments, which are the backup ID and the MAC algorithm.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_GET_MAC =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 403;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to open the file containing the backup archive.  This takes three
-   * arguments, which are the backup ID, the path to the backup file, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_OPEN_BACKUP_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 404;
-
-
-
-  /**
-   * The message ID for the message that will be used if a config backup is
-   * encrypted but the cipher is not known.  This takes a single argument, which
-   * is the backup ID.
-   */
-  public static final int MSGID_CONFIG_RESTORE_UNKNOWN_CIPHER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 405;
-
-
-
-  /**
-   * The message ID for the message that will be used if a config backup is
-   * encrypted with an unknown or unsupported cipher.  This takes two arguments,
-   * which are the backup ID and the cipher algorithm.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_GET_CIPHER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 406;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to backup the current config before the restore.  This takes four
-   * arguments, which are the backup ID, the path to the current config
-   * directory, the path to the backup config directory, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_BACKUP_EXISTING_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 407;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * the config restore process but the original config was restored to its
-   * original location.  This takes a single argument, which is the path to the
-   * config directory.
-   */
-  public static final int MSGID_CONFIG_RESTORE_RESTORED_OLD_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_NOTICE | 408;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * the config restore process and the original config files could not be
-   * moved back into place.  This takes a single argument, which is the path
-   * to the directory containing the original config files.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_RESTORE_OLD_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 409;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a new directory to hold the restored config files.  This
-   * takes three arguments, which are the backup ID, the desired path for the
-   * config directory, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_CREATE_CONFIG_DIRECTORY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 410;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * the config restore process but the old config files were saved in an
-   * alternate directory.  This takes a single argument, which is the path
-   * to the directory containing the original config files.
-   */
-  public static final int MSGID_CONFIG_RESTORE_OLD_CONFIG_SAVED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 411;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read the next entry from the config archive.  This takes three
-   * arguments, which are the backup ID, the path to the config archive, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_GET_ZIP_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 412;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a config file from the backup archive.  This takes three
-   * arguments, which are the backup ID, the path to the file that could not be
-   * created, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_CREATE_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 413;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to read a config file from the archive or write it to disk.
-   * This takes three arguments, which are the backup ID, the name of the file
-   * being processed, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 414;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to close the zip stream used to read from the archive.  This takes
-   * three arguments, which are the backup ID, the path to the backup archive,
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 415;
-
-
-
-  /**
-   * The message ID for the message that will be used if the unsigned hash of
-   * the config backup matches the expected value.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_RESTORE_UNSIGNED_HASH_VALID =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_NOTICE | 416;
-
-
-
-  /**
-   * The message ID for the message that will be used if the unsigned hash of
-   * the config backup does not match the expected value.  This takes a single
-   * argument, which is the backup ID.
-   */
-  public static final int MSGID_CONFIG_RESTORE_UNSIGNED_HASH_INVALID =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 417;
-
-
-
-  /**
-   * The message ID for the message that will be used if the signed hash of the
-   * config backup matches the expected value.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_RESTORE_SIGNED_HASH_VALID =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_NOTICE | 418;
-
-
-
-  /**
-   * The message ID for the message that will be used if the signed hash of the
-   * config backup does not match the expected value.  This takes a single
-   * argument, which is the backup ID.
-   */
-  public static final int MSGID_CONFIG_RESTORE_SIGNED_HASH_INVALID =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 419;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * backup verification process completed successfully.  This takes two
-   * arguments, which are the backup ID and the path to the backup directory.
-   */
-  public static final int MSGID_CONFIG_RESTORE_VERIFY_SUCCESSFUL =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_NOTICE | 420;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * backup verification process completed successfully.  This takes two
-   * arguments, which are the backup ID and the path to the backup directory.
-   */
-  public static final int MSGID_CONFIG_RESTORE_SUCCESSFUL =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_NOTICE | 421;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to acquire a shared lock for a Directory Server backend.  This
-   * takes two arguments, which are the backend ID for the associated backend
-   * and a message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 422;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release a shared lock for a Directory Server backend.  This
-   * takes two arguments, which are the backend ID for the associated backend
-   * and a message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 423;
-
-
-
-  /**
-   * The message ID for the message that will be used as the header written to
-   * the top of the Directory Server configuration file whenever the
-   * configuration is updated.  It does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_FILE_HEADER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 424;
-
-
-
-  /**
-   * The message ID for the description of the add missing RDN attributes
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CORE_DESCRIPTION_ADD_MISSING_RDN_ATTRS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 425;
-
-
-
-  /**
-   * The message ID for the message that will be used if the add missing RDN
-   * attributes configuration attribute has an invalid value.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_ADD_MISSING_RDN_ATTRS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 426;
-
-
-
-  /**
-   * The message ID for the description of the server error result code
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int
-       MSGID_CONFIG_CORE_DESCRIPTION_SERVER_ERROR_RESULT_CODE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 427;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server error result
-   * code configuration attribute has an invalid value.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_SERVER_ERROR_RESULT_CODE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 428;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the identity mapper base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 429;
-
-
-
-  /**
-   * The message ID for the message that will be used if the identity mapper
-   * base entry does not exist in the Directory Server configuration.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 430;
-
-
-
-  /**
-   * The message ID for the message that will be used if an identity mapper
-   * configuration entry does not contain an acceptable configuration.  This
-   * takes two arguments, which are the DN of the configuration entry and the
-   * reason that it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 431;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create an identity mapper from a configuration entry.  This takes
-   * two arguments, which are the DN of the configuration entry and a message
-   * that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_CANNOT_CREATE_MAPPER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 432;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * identity mapper base does not contain a valid identity mapper objectclass.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 433;
-
-
-
-  /**
-   * The message ID for the description of the identity mapper class name
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_DESCRIPTION_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 434;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * identity mapper base does not contain a value for the class name.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 435;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * identity mapper base contains an invalid value for the class name.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 436;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server identity mapper but the associated class cannot
-   * be instantiated as an identity mapper.  This takes three arguments, which
-   * are the identity mapper class name, the DN of the configuration entry, and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 437;
-
-
-
-  /**
-   * The message ID for the description of the identity mapper enabled
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 438;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * identity mapper base does not contain a value for the enabled attribute.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 439;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * identity mapper base has an invalid value for the enabled attribute.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 440;
-
-
-
-  /**
-   * The message ID for the message that will be used if the identity mapper
-   * class has changed and will require administrative action to take effect.
-   * This takes three arguments, which are the old class name, the new class
-   * name, and the DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 441;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server identity mapper.  This takes three
-   * arguments, which are the class name for the identity mapper class, the DN
-   * of the configuration entry, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 442;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new identity mapper with a DN that matches the DN of a mapper that
-   * already exists.  This takes a single argument, which is the DN of the
-   * identity mapper configuration entry.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 443;
-
-
-
-  /**
-   * The message ID for the message that will be used if an identity mapper
-   * entry contains an unacceptable configuration but does not provide any
-   * specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 444;
-
-
-
-  /**
-   * The message ID for the description of the proxied auth identity mapper DN
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CORE_DESCRIPTION_PROXY_MAPPER_DN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 445;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to process the proxied auth identity mapper DN.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_PROXY_MAPPER_DN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 446;
-
-
-
-  /**
-   * The message ID for the message that will be used if there is no identity
-   * mapper entry for the DN specified for use with the proxied auth control.
-   * This takes two arguments, which are the provided identity mapper DN and the
-   * configuration entry DN.
-   */
-  public static final int MSGID_CONFIG_CORE_NO_PROXY_MAPPER_FOR_DN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 447;
-
-
-
-  /**
-   * The message ID for the message that will be used if no proxied
-   * authorization identity mapper is configured in the Directory Server.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_NO_PROXY_MAPPER_DN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 448;
-
-
-
-  /**
-   * The message ID for the message that will be used if the proxied
-   * authorization identity mapper configured for use with the Directory Server
-   * does not reference a valid identity mapper.  This takes a single argument,
-   * which is the DN of the configured identity mapper.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_INVALID_PROXY_MAPPER_DN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 449;
-
-
-
-  /**
-   * The message ID for the description of the server size limit configuration
-   * attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CORE_DESCRIPTION_SIZE_LIMIT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 450;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to process the server size limit.  This takes two arguments, which
-   * are the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_SIZE_LIMIT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 451;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the configuration base entry for the Directory
-   * Server synchronization providers.  This takes a single argument, which is
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SYNCH_CANNOT_GET_CONFIG_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 452;
-
-
-
-  /**
-   * The message ID for the message that will be used if the Directory Server
-   * synchronization provider configuration base entry does not exist.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SYNCH_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 453;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * synchronization provider base does not contain the appropriate objectclass.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int
-       MSGID_CONFIG_SYNCH_ENTRY_DOES_NOT_HAVE_PROVIDER_CONFIG =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 454;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether a synchronization provider had the appropriate
-   * objectclass.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_CONFIG_SYNCH_CANNOT_CHECK_FOR_PROVIDER_CONFIG_OC =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 455;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * enabled configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SYNCH_DESCRIPTION_PROVIDER_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 456;
-
-
-
-  /**
-   * The message ID for the message that will be used if a synchronization
-   * provider entry does not contain the enabled attribute.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_SYNCH_PROVIDER_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 457;
-
-
-
-  /**
-   * The message ID for the message that will be used if a synchronization
-   * provider is configured as disabled.  This takes a single argument, which is
-   * the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_SYNCH_PROVIDER_DISABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 458;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine whether a configuration provider should be enabled.
-   * This takes two arguments, which are the DN of the configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SYNCH_UNABLE_TO_DETERMINE_ENABLED_STATE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 459;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * class attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_SYNCH_DESCRIPTION_PROVIDER_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 460;
-
-
-
-  /**
-   * The message ID for the message that will be used if a synchronization
-   * provider configuration entry does not contain the class attribute.  It
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_SYNCH_NO_CLASS_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 461;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve determine the synchronization provider class.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SYNCH_UNABLE_TO_DETERMINE_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 462;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to load the synchronization provider class.  This takes three
-   * arguments, which are the name of the class, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 463;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to create an instance of a Directory Server configuration
-   * provider.  This takes three arguments, which are the name of the class,
-   * the DN of the configuration entry, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 464;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to initialize the synchronization provider.  This takes two
-   * arguments, which are the DN of the configuration entry and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 465;
-
-
-
-  /**
-   * The message ID for the message that will be used if the synchronization
-   * provider configuration has changed so that it should be disabled on
-   * restart.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_SYNCH_PROVIDER_HAS_BEEN_DISABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 466;
-
-
-
-  /**
-   * The message ID for the message that will be used if the synchronization
-   * provider configuration has changed so that it should use a different class
-   * on restart.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_SYNCH_PROVIDER_CLASS_CHANGED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 467;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that specifies the writability mode for a backend.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_WRITABILITY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 468;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backend configuration
-   * entry does not define a writability mode attribute.  This takes a single
-   * argument, which is the DN of the backend configuration entry.
-   */
-  public static final int MSGID_CONFIG_BACKEND_NO_WRITABILITY_MODE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 469;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backend has an
-   * invalid writability mode.  This takes two arguments, which are the DN of
-   * the backend configuration entry and the invalid writability mode value.
-   */
-  public static final int MSGID_CONFIG_BACKEND_INVALID_WRITABILITY_MODE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 470;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * occurs while attempting to determine the writability mode for a backend.
-   * This takes two arguments, which are the DN of the backend configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_BACKEND_UNABLE_TO_DETERMINE_WRITABILITY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 471;
-
-
-
-  /**
-   * The message ID for the description of the server writability mode
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CORE_DESCRIPTION_WRITABILITY_MODE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 472;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to process the server writability mode.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_WRITABILITY_MODE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 473;
-
-
-
-  /**
-   * The message ID for the description of the server bind with DN requires
-   * password configuration attribute.  This does not take any arguments.
-   */
-  public static final int
-       MSGID_CONFIG_CORE_DESCRIPTION_BIND_WITH_DN_REQUIRES_PW =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 474;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to process the server configuration for simple binds containing a DN
-   * but no password.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_BIND_WITH_DN_REQUIRES_PW =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 475;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the password validator base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 476;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password validator
-   * base entry does not exist in the Directory Server configuration.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 477;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password validator
-   * configuration entry does not contain an acceptable configuration.  This
-   * takes two arguments, which are the DN of the configuration entry and the
-   * reason that it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 478;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a password validator from a configuration entry.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_CANNOT_CREATE_VALIDATOR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 479;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password validator base does not contain a valid validator objectclass.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 480;
-
-
-
-  /**
-   * The message ID for the description of the password validator class name
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_DESCRIPTION_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 481;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password validator base does not contain a value for the class name.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 482;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password validator base contains an invalid value for the class name.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 483;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server password validator but the associated class
-   * cannot be instantiated as a password validator.  This takes three
-   * arguments, which are the validator class name, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 484;
-
-
-
-  /**
-   * The message ID for the description of the password validator enabled
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 485;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password validator base does not contain a value for the enabled attribute.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 486;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password validator base has an invalid value for the enabled attribute.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 487;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password validator
-   * class has changed and will require administrative action to take effect.
-   * This takes three arguments, which are the old class name, the new class
-   * name, and the DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 488;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server password validator.  This takes three
-   * arguments, which are the class name for the validator class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 489;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new password validator with a DN that matches the DN of a scheme that
-   * already exists.  This takes a single argument, which is the DN of the
-   * validator configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 490;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password validator
-   * entry contains an unacceptable configuration but does not provide any
-   * specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 491;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the password generator base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 492;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password generator
-   * base entry does not exist in the Directory Server configuration.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 493;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password generator
-   * configuration entry does not contain an acceptable configuration.  This
-   * takes two arguments, which are the DN of the configuration entry and the
-   * reason that it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 494;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a password generator from a configuration entry.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_CANNOT_CREATE_GENERATOR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 495;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password generator base does not contain a valid generator objectclass.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 496;
-
-
-
-  /**
-   * The message ID for the description of the password generator class name
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_DESCRIPTION_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 497;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password generator base does not contain a value for the class name.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 498;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password generator base contains an invalid value for the class name.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 499;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server password generator but the associated class
-   * cannot be instantiated as a password generator.  This takes three
-   * arguments, which are the generator class name, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 500;
-
-
-
-  /**
-   * The message ID for the description of the password generator enabled
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 501;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password generator base does not contain a value for the enabled attribute.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 502;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * password generator base has an invalid value for the enabled attribute.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 503;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password generator
-   * class has changed and will require administrative action to take effect.
-   * This takes three arguments, which are the old class name, the new class
-   * name, and the DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 504;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server password generator.  This takes three
-   * arguments, which are the class name for the generator class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 505;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new password generator with a DN that matches the DN of a scheme that
-   * already exists.  This takes a single argument, which is the DN of the
-   * generator configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 506;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password generator
-   * entry contains an unacceptable configuration but does not provide any
-   * specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 507;
-
-
-
-  /**
-   * The message ID for the description of the default password policy DN
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int
-       MSGID_CONFIG_CORE_DESCRIPTION_DEFAULT_PWPOLICY_DN =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 508;
-
-
-
-  /**
-   * The message ID for the message that will be used if the root configuration
-   * entry does not specify the DN of the default password policy.  This takes a
-   * single argument, which is the DN of the root configuration entry.
-   */
-  public static final int MSGID_CONFIG_CORE_NO_DEFAULT_PWPOLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 509;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to process the server configuration for the default password policy
-   * DN.  This takes two arguments, which are the DN of the configuration entry
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_DEFAULT_PWPOLICY_DN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 510;
-
-
-
-  /**
-   * The message ID for the message that will be used if the DN specified as
-   * that of the default password policy doesn't refer to a valid policy
-   * configuration entry.  This takes a single argument, which is the provided
-   * default password policy DN.
-   */
-  public static final int MSGID_CONFIG_CORE_NO_SUCH_PWPOLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 511;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the password policy base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_PWPOLICY_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 512;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password policy
-   * base entry does not exist in the Directory Server configuration.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWPOLICY_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 513;
-
-
-
-  /**
-   * The message ID for the message that will be used if no password policy
-   * configuration entries have been defined.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWPOLICY_NO_POLICIES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 514;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password policy
-   * configuration entry is invalid.  This takes two arguments, which are the DN
-   * of the invalid password policy configuration entry and a message that
-   * explains the problem with the entry.
-   */
-  public static final int MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 515;
-
-
-
-  /**
-   * The message ID for the message that will be used if the default password
-   * policy entry does not exist in the configuration.  This takes a single
-   * argument, which is the DN of the configuration entry for the default
-   * password policy.
-   */
-  public static final int MSGID_CONFIG_PWPOLICY_MISSING_DEFAULT_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 516;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove the default password policy configuration entry.  This takes a
-   * single argument, which is the DN of the entry to remove.
-   */
-  public static final int MSGID_CONFIG_PWPOLICY_CANNOT_DELETE_DEFAULT_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 517;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a
-   * password policy configuration entry has been removed.
-   */
-  public static final int MSGID_CONFIG_PWPOLICY_REMOVED_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 518;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs
-   * while attempting to retrieve the access control configuration
-   * entry. This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_CANNOT_GET_ENTRY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 519;
-
-
-
-  /**
-   * The message ID for the message that will be used if the Directory
-   * Server access control configuration entry does not exist. This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_ENTRY_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 520;
-
-
-
-  /**
-   * The message ID for the message that will be used if the access
-   * control configuration entry does not contain the appropriate
-   * objectclass. This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int
-       MSGID_CONFIG_AUTHZ_ENTRY_DOES_NOT_HAVE_OBJECT_CLASS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 521;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description
-   * of the access control enabled configuration attribute. This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 523;
-
-
-
-  /**
-   * The message ID for the message that will be used if the access
-   * control configuration entry does not contain the enabled attribute.
-   * This takes a single argument, which is the DN of the configuration
-   * entry.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 524;
-
-
-
-  /**
-   * The message ID for the message that will be used if access control
-   * is disabled. This message does not have any arguments.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_DISABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 525;
-
-
-
-  /**
-   * The message ID for the message that will be used if access control
-   * is enabled. This takes a single argument, which is the name of the
-   * access control handler class.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_NOTICE | 526;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs
-   * while attempting to determine whether access control should be
-   * enabled. This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception
-   * that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_AUTHZ_UNABLE_TO_DETERMINE_ENABLED_STATE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 527;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description
-   * for the class attribute. This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_DESCRIPTION_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 528;
-
-
-
-  /**
-   * The message ID for the message that will be used if the access
-   * control configuration entry does not contain the class attribute.
-   * It takes a single argument, which is the DN of the configuration
-   * entry.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_NO_CLASS_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 529;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs
-   * while attempting to determine the access control handler class.
-   * This takes two arguments, which are the DN of the configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_UNABLE_TO_DETERMINE_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 530;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs
-   * while attempting to load the access control handler class. This
-   * takes three arguments, which are the name of the class, the DN of
-   * the configuration entry, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_UNABLE_TO_LOAD_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 531;
-
-
-
-  /**
-   * The message ID for the message that will be used if the loaded
-   * access control handler class does not implement the correct
-   * interface. This takes three arguments, which are the name of the
-   * class, the DN of the configuration entry, the name of the access
-   * control handler interface, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_BAD_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 532;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs
-   * while attempting to create an instance of an access control
-   * handler. This takes three arguments, which are the name of the
-   * class, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 533;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs
-   * while attempting to initialize the access control handler. This
-   * takes two arguments, which are the DN of the configuration entry
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_ERROR_INITIALIZING_HANDLER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 534;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the root DN base entry from the configuration.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 535;
-
-
-
-  /**
-   * The message ID for the message that will be used if the root DN base entry
-   * does not exist in the Directory Server configuration.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 536;
-
-
-
-  /**
-   * The message ID for the message that will be used if a root DN configuration
-   * entry does not contain an acceptable root DN configuration.  This takes two
-   * arguments, which are the DN of the configuration entry and the reason that
-   * it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 537;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a root DN definition from a configuration entry.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_CANNOT_CREATE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 538;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * root DN base does not contain a valid root DN objectclass.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 539;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * alternate bind DN configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_DESCRIPTION_ALTERNATE_BIND_DN =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 540;
-
-
-
-  /**
-   * The message ID for the message that will be used if a root DN configuration
-   * entry defines an alternate root DN mapping that conflicts with an existing
-   * mapping for another root user.  This takes three arguments, which are the
-   * conflicting alternate DN, the DN of the new root user for which the mapping
-   * was to be established, and the DN of the existing root user that already
-   * had the mapping.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_CONFLICTING_MAPPING =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 541;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the alternate bind DNs for the root user.  This takes two
-   * arguments, which are the DN of the root user and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_CANNOT_PARSE_ALTERNATE_BIND_DNS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 542;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to register an alternate bind DN for a root user.  This takes three
-   * arguments, which are the alternate bind DN, the DN of the root user, and a
-   * message explaining the problem that occurred.
-   */
-  public static final int
-       MSGID_CONFIG_ROOTDN_CANNOT_REGISTER_ALTERNATE_BIND_DN =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 543;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a root DN user that conflicts with another root DN already registered.
-   * This takes a single argument, which is the DN of the root user being added.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_EXISTS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 544;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the account status notification handler base entry
-   * from the configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 545;
-
-
-
-  /**
-   * The message ID for the message that will be used if the account status
-   * notification handler base entry does not exist in the Directory Server
-   * configuration.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 546;
-
-
-
-  /**
-   * The message ID for the message that will be used if an account status
-   * notification handler configuration entry does not contain an acceptable
-   * configuration.  This takes two arguments, which are the DN of the
-   * configuration entry and the reason that it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 547;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create an account status notification handler from a
-   * configuration entry.  This takes two arguments, which are the DN of the
-   * configuration entry and a message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_CANNOT_CREATE_HANDLER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 548;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * account status notification handler base does not contain a valid handler
-   * objectclass.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 549;
-
-
-
-  /**
-   * The message ID for the description of the account status notification
-   * handler class name configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_DESCRIPTION_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 550;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * account status notification handler base does not contain a value for the
-   * class name.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 551;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * account status notification handler base contains an invalid value for the
-   * class name.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 552;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server account status notification handler but the
-   * associated class cannot be instantiated as a notification handler.  This
-   * takes three arguments, which are the handler class name, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 553;
-
-
-
-  /**
-   * The message ID for the description of the account status notification
-   * handler enabled configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 554;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * account status notification handler base does not contain a value for the
-   * enabled attribute.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 555;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * account status notification handler base has an invalid value for the
-   * enabled attribute.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 556;
-
-
-
-  /**
-   * The message ID for the message that will be used if the account status
-   * notification handler class has changed and will require administrative
-   * action to take effect.  This takes three arguments, which are the old class
-   * name, the new class name, and the DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 557;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server account status notification handler.  This
-   * takes three arguments, which are the class name for the handler class, the
-   * DN of the configuration entry, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 558;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new account status notification handler with a DN that matches the DN
-   * of a handler that already exists.  This takes a single argument, which is
-   * the DN of the notification handler configuration entry.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 559;
-
-
-
-  /**
-   * The message ID for the message that will be used if an account status
-   * notification handler entry contains an unacceptable configuration but does
-   * not provide any specific details about the nature of the problem.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 560;
-
-
-  /**
-   * The message ID for the description of the server lookthrough limit
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CORE_DESCRIPTION_LOOKTHROUGH_LIMIT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 561;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to process the server lookthrough limit.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_LOOKTHROUGH_LIMIT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 562;
-
-
-
-  /**
-   * The message ID for the message that will be used an error occurs while
-   * attempting to apply a set of changes on server startup.  This takes two
-   * arguments, which are the path to the changes file and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_UNABLE_TO_APPLY_STARTUP_CHANGES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 563;
-
-
-
-  /**
-   * The message ID for the message that will be used to report an error that
-   * occurred while processing a startup changes file.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_ERROR_APPLYING_STARTUP_CHANGE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 564;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a problem
-   * occurred while applying the startup changes.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_UNABLE_TO_APPLY_CHANGES_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 565;
-
-
-
-  /**
-   * The message ID used to describe the attribute which configure the
-   * file permissions mode for the database directory.
-   */
-  public static final int MSGID_CONFIG_DESCRIPTION_BACKEND_MODE =
-      CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 566;
-
-
-
-  /**
-   * The message ID for the message that will be used if the backend directory
-   * file permission mode atrribute is not a valid UNIX mode.
-   */
-  public static final int MSGID_CONFIG_BACKEND_MODE_INVALID =
-      CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 567;
-
-
-
-  /**
-   * The message ID of an error indicating that the file permissions for the
-   * database directory will result in an inaccessible database. The orginal or
-   * default value will be used instead.
-   */
-  public static final int MSGID_CONFIG_BACKEND_INSANE_MODE =
-      CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 568;
-
-
-
-  /**
-   * The message ID for the description of the server time limit configuration
-   * attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CORE_DESCRIPTION_TIME_LIMIT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 569;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to process the server time limit.  This takes two arguments, which
-   * are the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_TIME_LIMIT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 570;
-
-
-
-  /**
-   * The message ID for the message that will be used if no default password
-   * policy has been defined.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_PWPOLICY_NO_DEFAULT_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 571;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to register a backend with the Directory Server.  This takes two
-   * arguments, which are the backend ID and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 572;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create the configuration archive directory but no additional
-   * information is available to explain the underlying problem.  This takes a
-   * single argument, which is the path to the archive directory to be created.
-   */
-  public static final int
-       MSGID_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR_NO_REASON =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 573;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create the configuration archive directory.  This takes two
-   * arguments, which are the path to the archive directory to be created and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 574;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to write the current configuration to the configuration archive.
-   * This takes two arguments, which are the path to the archive directory to be
-   * created and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 575;
-
-
-  /**
-   * The message ID for the description of whether the server should
-   * reject unauthenticated requests.  This does not take any arguments.
-   */
-  public static final int
-      MSGID_CONFIG_CORE_DESCRIPTION_REJECT_UNAUTHENTICATED_REQUESTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 576;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to process the server configuration for rejecting the
-   * unauthenticated operations.This takes two arguments, which are the DN of
-   * the configuration entry and a string representation of the exception that
-   * was caught.
-   */
-  public static final int
-      MSGID_CONFIG_CORE_REJECT_UNAUTHENTICATED_REQUESTS_INVALID =
-           CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 577;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the group implementation base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_GROUP_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 578;
-
-
-
-  /**
-   * The message ID for the message that will be used if the group
-   * implementation base entry does not exist in the Directory Server
-   * configuration.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_GROUP_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 579;
-
-
-
-  /**
-   * The message ID for the message that will be used if a group implementation
-   * configuration entry does not contain an acceptable group implementation
-   * configuration.  This takes two arguments, which are the DN of the
-   * configuration entry and the reason that it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_GROUP_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 580;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a group implementation from a configuration entry.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_GROUP_CANNOT_CREATE_IMPLEMENTATION =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 581;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * group implementation base does not contain a valid objectclass.  This takes
-   * a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_GROUP_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 582;
-
-
-
-  /**
-   * The message ID for the description of the group implementation class name
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_GROUP_DESCRIPTION_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 583;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * group implementation base does not contain a value for the class name.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_GROUP_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 584;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * group implementation base contains an invalid value for the class name.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_GROUP_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 585;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server group implementation but the associated class
-   * cannot be instantiated as a group implementation.  This takes three
-   * arguments, which are the handler class name, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_GROUP_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 586;
-
-
-
-  /**
-   * The message ID for the description of the group implementation enabled
-   * configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_GROUP_DESCRIPTION_ENABLED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 587;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * group implementation base does not contain a value for the enabled
-   * attribute.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_CONFIG_GROUP_NO_ENABLED_ATTR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 588;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * group implementation base has an invalid value for the enabled attribute.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_GROUP_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 589;
-
-
-
-  /**
-   * The message ID for the message that will be used if the group
-   * implementation class has changed and will require administrative action to
-   * take effect.  This takes three arguments, which are the old class name, the
-   * new class name, and the DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_GROUP_CLASS_ACTION_REQUIRED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 590;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server group implementation.  This takes three
-   * arguments, which are the class name for the implementation class, the DN of
-   * the configuration entry, and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_CONFIG_GROUP_INITIALIZATION_FAILED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 591;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new group implementation entry with a DN that matches the DN of a
-   * group implementation that already exists.  This takes a single argument,
-   * which is the DN of the handler configuration entry.
-   */
-  public static final int MSGID_CONFIG_GROUP_EXISTS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 592;
-
-
-
-  /**
-   * The message ID for the message that will be used if a group implementation
-   * entry contains an unacceptable configuration but does not provide any
-   * specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_GROUP_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 593;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * default root privilege names configuration attribute.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_DESCRIPTION_ROOT_PRIVILEGE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 594;
-
-
-
-  /**
-   * The message ID for the message that will be used if the set of root
-   * privileges contains an unrecognized privilege.  This takes three arguments,
-   * which are the name of the attribute holding the privilege names, the DN of
-   * the configuration entry, and the name of the unrecognized privilege.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_UNRECOGNIZED_PRIVILEGE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 595;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine the set of root privileges.  This takes a single
-   * argument, which is a stack trace of the exception that was caught.
-   */
-  public static final int
-       MSGID_CONFIG_ROOTDN_ERROR_DETERMINING_ROOT_PRIVILEGES =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 596;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the set
-   * of root privileges has been updated.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_ROOTDN_UPDATED_PRIVILEGES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 597;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform an add operation in the server configuration but the user doesn't
-   * have the necessary privileges to do so.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_FILE_ADD_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 598;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a delete operation in the server configuration but the user doesn't
-   * have the necessary privileges to do so.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_FILE_DELETE_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 599;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a modify operation in the server configuration but the user doesn't
-   * have the necessary privileges to do so.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_FILE_MODIFY_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 600;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a modify DN operation in the server configuration but the user
-   * doesn't have the necessary privileges to do so.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CONFIG_FILE_MODDN_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 601;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a search operation in the server configuration but the user doesn't
-   * have the necessary privileges to do so.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_FILE_SEARCH_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 602;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * modify the set of default root privileges but the user doesn't have the
-   * necessary privileges to do so.  This does not take any arguments.
-   */
-  public static final int
-       MSGID_CONFIG_FILE_MODIFY_PRIVS_INSUFFICIENT_PRIVILEGES =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 603;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the certificate mapper base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 604;
-
-
-
-  /**
-   * The message ID for the message that will be used if the certificate mapper
-   * base entry does not exist in the Directory Server configuration.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 605;
-
-
-
-  /**
-   * The message ID for the message that will be used if a certificate mapper
-   * configuration entry does not contain an acceptable mapper configuration.
-   * This takes two arguments, which are the DN of the configuration entry and
-   * the reason that it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 606;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a certificate mapper from a configuration entry.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_CANNOT_CREATE_MAPPER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 607;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * certificate mapper base does not contain a valid objectclass.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 608;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * certificate mapper base does not contain a value for the class name.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 609;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * certificate mapper base contains an invalid value for the class name.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 610;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server certificate mapper but the associated class
-   * cannot be instantiated as a certificate mapper.  This takes three
-   * arguments, which are the mapper class name, the DN of the configuration
-   * entry, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 611;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * certificate mapper base has an invalid value for the enabled attribute.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 612;
-
-
-
-  /**
-   * The message ID for the message that will be used if the certificate mapper
-   * class has changed and will require administrative action to take effect.
-   * This takes three arguments, which are the old class name, the new class
-   * name, and the DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 613;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server certificate maper.  This takes three
-   * arguments, which are the class name for the mapper class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 614;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new certificate mapper with a DN that matches the DN of a mapper that
-   * already exists.  This takes a single argument, which is the DN of the
-   * mapper configuration entry.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 615;
-
-
-
-  /**
-   * The message ID for the message that will be used if a certificate mapper
-   * entry contains an unacceptable configuration but does not provide any
-   * specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 616;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the key manager provider base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 617;
-
-
-
-  /**
-   * The message ID for the message that will be used if the key manager
-   * provider base entry does not exist in the Directory Server configuration.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 618;
-
-
-
-  /**
-   * The message ID for the message that will be used if a key manager provider
-   * configuration entry does not contain an acceptable provider configuration.
-   * This takes two arguments, which are the DN of the configuration entry and
-   * the reason that it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 619;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a key manager provider from a configuration entry.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_CANNOT_CREATE_PROVIDER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 620;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * key manager provider base does not contain a valid objectclass.  This takes
-   * a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 621;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * key manager provider base does not contain a value for the class name.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 622;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * key manager provider base contains an invalid value for the class name.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 623;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server key manager provider but the associated class
-   * cannot be instantiated as a provider.  This takes three arguments, which
-   * are the provider class name, the DN of the configuration entry, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 624;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * key manager provider base has an invalid value for the enabled attribute.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 625;
-
-
-
-  /**
-   * The message ID for the message that will be used if the key manager
-   * provider class has changed and will require administrative action to take
-   * effect.  This takes three arguments, which are the old class name, the new
-   * class name, and the DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 626;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server key manager provider.  This takes three
-   * arguments, which are the class name for the provider class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 627;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new key manager provider with a DN that matches the DN of a provider
-   * that already exists.  This takes a single argument, which is the DN of the
-   * provider configuration entry.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 628;
-
-
-
-  /**
-   * The message ID for the message that will be used if a key manager provider
-   * entry contains an unacceptable configuration but does not provide any
-   * specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 629;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the trust manager provider base entry from the
-   * configuration.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_CANNOT_GET_BASE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 630;
-
-
-
-  /**
-   * The message ID for the message that will be used if the trust manager
-   * provider base entry does not exist in the Directory Server configuration.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_BASE_DOES_NOT_EXIST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 631;
-
-
-
-  /**
-   * The message ID for the message that will be used if a trust manager
-   * provider configuration entry does not contain an acceptable provider
-   * configuration. This takes two arguments, which are the DN of the
-   * configuration entry and the reason that it is not acceptable.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_ENTRY_UNACCEPTABLE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 632;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a trust manager provider from a configuration entry.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * message that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_CANNOT_CREATE_PROVIDER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 633;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * trust manager provider base does not contain a valid objectclass.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_INVALID_OBJECTCLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 634;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * trust manager provider base does not contain a value for the class name.
-   * This takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_NO_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 635;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * trust manager provider base contains an invalid value for the class name.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_INVALID_CLASS_NAME =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 636;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server trust manager provider but the associated class
-   * cannot be instantiated as a provider.  This takes three arguments, which
-   * are the provider class name, the DN of the configuration entry, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_INVALID_CLASS =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 637;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry below the
-   * trust manager provider base has an invalid value for the enabled attribute.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_INVALID_ENABLED_VALUE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 638;
-
-
-
-  /**
-   * The message ID for the message that will be used if the trust manager
-   * provider class has changed and will require administrative action to take
-   * effect.  This takes three arguments, which are the old class name, the new
-   * class name, and the DN of the associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_CLASS_ACTION_REQUIRED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 639;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server trust manager provider.  This takes three
-   * arguments, which are the class name for the provider class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 640;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a new trust manager provider with a DN that matches the DN of a
-   * provider that already exists.  This takes a single argument, which is the
-   * DN of the provider configuration entry.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_EXISTS =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 641;
-
-
-
-  /**
-   * The message ID for the message that will be used if a trust manager
-   * provider entry contains an unacceptable configuration but does not provide
-   * any specific details about the nature of the problem.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_UNACCEPTABLE_CONFIG =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 642;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * retrieve a JMX attribute.  This takes three arguments, which are the name
-   * of the attribute to retrieve, the DN of the associated configuration entry,
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_JMX_CANNOT_GET_ATTRIBUTE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 643;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * set a JMX attribute because there is no available JMX connection.  This
-   * takes two arguments, which are the name of the attribute and the DN of the
-   * associated configuration entry.
-   */
-  public static final int MSGID_CONFIG_JMX_SET_ATTR_NO_CONNECTION =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 644;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration add,
-   * delete, or change listener or a configurable component return a result of
-   * {@code null} instead of a valid config change result.  This takes three
-   * arguments, which are the class name of the object, the name of the method
-   * that was invoked, and the DN of the target entry.
-   */
-  public static final int MSGID_CONFIG_CHANGE_NO_RESULT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 645;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the configuration as a result of an added, deleted,
-   * or modified configuration entry.  This takes six arguments, which are the
-   * class name of the object that generated the error, the name of the method
-   * that was invoked, the DN of the target entry, the result code generated,
-   * whether administrative action is required to apply the change, and any
-   * messages generated.
-   */
-  public static final int MSGID_CONFIG_CHANGE_RESULT_ERROR =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 646;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration change
-   * requires some kind of administrative action before it will take effect.
-   * This takes four arguments, which are the class name of the object that
-   * indicated the action was required, the name of the method that was invoked,
-   * the DN of the target entry, and any messages generated.
-   */
-  public static final int MSGID_CONFIG_CHANGE_RESULT_ACTION_REQUIRED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 647;
-
-
-
-  /**
-   * The message ID for the message that will be used if a configuration change
-   * was successful and no administrative action is required, but there were
-   * messages generated.  This takes four arguments, which are the name of the
-   * object that performed the processing, the name of the method that was
-   * invoked, the DN of the target entry, and the messages generated.
-   */
-  public static final int MSGID_CONFIG_CHANGE_RESULT_MESSAGES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 648;
-
-
-
-  /**
-   * The message ID for the message that will be used if a virtual attribute
-   * definition has an invalid search filter.  This takes three arguments, which
-   * are the filter string, the configuration entry DN, and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_VATTR_INVALID_SEARCH_FILTER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 649;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to load and/or initialize a class as a virtual attribute provider.
-   * This takes three arguments, which are the class name, the configuration
-   * entry DN, and string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_VATTR_INITIALIZATION_FAILED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 650;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configured
-   * attribute type is single-valued, but the virtual attribute provider may
-   * generate multiple values.  This takes three arguments, which are the DN of
-   * the configuration entry, the name or OID of the attribute type, and the
-   * name of the virtual attribute provider class.
-   */
-  public static final int MSGID_CONFIG_VATTR_SV_TYPE_WITH_MV_PROVIDER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 651;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configured
-   * attribute type is single-valued, but the conflict behavior is to merge the
-   * real and virtual values.  This takes two arguments, which are the DN of
-   * the configuration entry and the name or OID of the attribute type.
-   */
-  public static final int MSGID_CONFIG_VATTR_SV_TYPE_WITH_MERGE_VALUES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 652;
-
-
-
-  /**
-   * The message ID for the message that will be used if a an attempt is made to
-   * modify an entry in the config backend in a manner that will change its
-   * structural object class.
-   */
-  public static final int
-       MSGID_CONFIG_FILE_MODIFY_STRUCTURAL_CHANGE_NOT_ALLOWED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 653;
-
-
-
-  /**
-   * The message ID for the message that will be used an error occurs while
-   * attempting to calculate a digest of the server configuration.  This takes
-   * two arguments, which are the path to the file the server is trying to
-   * digest, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_CANNOT_CALCULATE_DIGEST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_FATAL_ERROR | 654;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server detects that
-   * the configuration has been manually edited while the server is online, but
-   * that the manual edits have been copied off into another file before the
-   * configuration was updated by another change.  This takes two arguments,
-   * which are the path to the live configuration file and the path to the file
-   * containing the manual edits.
-   */
-  public static final int MSGID_CONFIG_MANUAL_CHANGES_DETECTED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 655;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server detects that
-   * the configuration may have been manually edited while the server is online,
-   * but a problem occurred that prevented the manual changes from being copied
-   * before the configuration was overwritten.  This takes two arguments, which
-   * are the path to the live configuration file and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_MANUAL_CHANGES_LOST =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 656;
-
-
-
-   /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server rotation policy but the associated class cannot
-   * be instantiated as a rotation policy.  This takes three arguments, which
-   * are the class name, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_ROTATION_POLICY_INVALID_CLASS =
-      CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 657;
-
-
-  /**
-   * The message ID for the message that will be used if a configuration entry
-   * defines a Directory Server retention policy but the associated class cannot
-   * be instantiated as a retention policy.  This takes three arguments, which
-   * are the class name, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CONFIG_RETENTION_POLICY_INVALID_CLASS =
-      CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 658;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a rotation policy from a configuration entry.  This takes
-   * two arguments, which are the DN of the configuration entry and a message
-   * that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_ROTATION_POLICY_CANNOT_CREATE_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 659;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a retention policy from a configuration entry.  This takes
-   * two arguments, which are the DN of the configuration entry and a message
-   * that explains the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_RETENTION_POLICY_CANNOT_CREATE_POLICY =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 660;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a text writer for a text log publisher.  This takes
-   * two arguments, the DN of the onfiguration entry and a message that explains
-   * the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 661;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema configuration
-   * file is found to have multiple entries.  This takes two arguments, which
-   * are the name of the schema file and the path to the schema directory.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MULTIPLE_ENTRIES_IN_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 662;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema configuration
-   * file is found to have unparseable data after the first entry.  This takes
-   * three arguments, which are the name of the schema file, the path to the
-   * schema directory, and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_UNPARSEABLE_EXTRA_DATA_IN_FILE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 663;
-
-
-
-  /**
-   * The message ID for the message that will be used if a plugin order
-   * definition contains an empty element (i.e., two consecutive commas).  This
-   * takes a single argument, which is the name of the plugin type.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_EMPTY_ELEMENT_IN_ORDER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 664;
-
-
-
-  /**
-   * The message ID for the message that will be used if a plugin order
-   * definition contains multiple wildcard characters.  This takes a single
-   * argument, which is the name of the plugin type.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_MULTIPLE_WILDCARDS_IN_ORDER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 665;
-
-
-
-  /**
-   * The message ID for the message that will be used if a plugin is listed
-   * multiple times in the plugin order.  This takes two arguments, which are
-   * the plugin type and the plugin name.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 666;
-
-
-
-  /**
-   * The message ID for the message that will be used if a plugin order does
-   * not contain a wildcard.  This takes a single argument, which is the name of
-   * the plugin type.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_ORDER_NO_WILDCARD =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 667;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * delete an attribute syntax that is in use by an attribute type.  This takes
-   * two arguments, which is the name of the attribute syntax and the name or
-   * OID of the attribute type that is using that syntax.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_DELETE_SYNTAX_IN_USE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 668;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * disable an attribute syntax that is in use by an attribute type.  This
-   * takes two arguments, which is the name of the attribute syntax and the name
-   * or  OID of the attribute type that is using that syntax.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_SYNTAX_IN_USE =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 669;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule cannot
-   * be removed because it is in use by an existing attribute type.  This takes
-   * two arguments, which are the name of the matching rule and the name or OID
-   * of the attribute type.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 670;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule cannot
-   * be removed because it is in use by an existing matching rule use.  This
-   * takes two arguments, which are the name of the matching rule and the name
-   * of the matching rule use.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_MRU =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 671;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule cannot
-   * be disabled because it is in use by an existing attribute type.  This takes
-   * two arguments, which are the name of the matching rule and the name or OID
-   * of the attribute type.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 672;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule cannot
-   * be disabled because it is in use by an existing matching rule use.  This
-   * takes two arguments, which are the name of the matching rule and the name
-   * of the matching rule use.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_MRU =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_WARNING | 673;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server work queue.  This takes three arguments,
-   * which are the name of the class providing the work queue implementation,
-   * the DN of the configuration entry, and a message explaining the problem
-   * that occurred.
-   */
-  public static final int MSGID_CONFIG_WORK_QUEUE_INITIALIZATION_FAILED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 674;
-
-
-
-  /**
-   * The message ID for the message that indicates the server needs to be
-   * restarted in order for changes to the work queue class to take effect.
-   * This takes two arguments, which are the names of the old and new work queue
-   * class.
-   */
-  public static final int
-       MSGID_CONFIG_WORK_QUEUE_CLASS_CHANGE_REQUIRES_RESTART =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_INFORMATIONAL | 675;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred when
-   * attempting to apply configuration changes after an entry had been added to
-   * the server configuration.  This takes a single argument, which is a message
-   * explaining the problem(s) that occurred.
-   */
-  public static final int MSGID_CONFIG_FILE_ADD_APPLY_FAILED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 676;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred when
-   * attempting to apply configuration changes after an entry had been removed
-   * from the server configuration.  This takes a single argument, which is a
-   * message explaining the problem(s) that occurred.
-   */
-  public static final int MSGID_CONFIG_FILE_DELETE_APPLY_FAILED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 677;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred when
-   * attempting to apply configuration changes after an entry had been updated
-   * in the server configuration.  This takes a single argument, which is a
-   * message explaining the problem(s) that occurred.
-   */
-  public static final int MSGID_CONFIG_FILE_MODIFY_APPLY_FAILED =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 678;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_KEYMANAGER_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 679;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_TRUSTMANAGER_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 680;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_AUTHZ_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 681;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_ACCTNOTHANDLER_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 682;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_SYNTAX_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 683;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_CERTMAPPER_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 684;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_ENTRYCACHE_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 685;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_GROUP_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 686;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_IDMAPPER_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 687;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_SCHEMA_MR_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 688;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_PWGENERATOR_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 689;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_PWSCHEME_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 690;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_PWVALIDATOR_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 691;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_PLUGIN_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 692;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_SASL_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 693;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_VATTR_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 694;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed
-   * configuration is not acceptable.  This takes two arguments, which are the
-   * DN of the configuration entry and a message explaining why the
-   * configuration is not acceptable.
-   */
-  public static final int MSGID_CONFIG_ALERTHANDLER_CONFIG_NOT_ACCEPTABLE =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 695;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing a Directory Server alert handler.  This takes three arguments,
-   * which are the class name for the identity mapper class, the DN of the
-   * configuration entry, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_CONFIG_ALERTHANDLER_INITIALIZATION_FAILED =
-            CATEGORY_MASK_CONFIG | SEVERITY_MASK_MILD_ERROR | 696;
-
-
-
-  /**
-   * The message ID for the message that will be used if an SMTP server value is
-   * not properly-formed.  This takes a single argument, which is the invalid
-   * server value.
-   */
-  public static final int MSGID_CONFIG_CORE_INVALID_SMTP_SERVER =
-       CATEGORY_MASK_CONFIG | SEVERITY_MASK_SEVERE_ERROR | 697;
-
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_CONFIG_ATTR_IS_REQUIRED,
-                    "Configuration attribute %s is required to have at least " +
-                    "one value but the resulted operation would have removed " +
-                    "all values");
-    registerMessage(MSGID_CONFIG_ATTR_REJECTED_VALUE,
-                    "Provided value %s for configuration attribute %s was " +
-                    "rejected.  The reason provided was:  %s");
-    registerMessage(MSGID_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED,
-                    "Configuration attribute %s is single-valued, but " +
-                    "multiple values were provided");
-    registerMessage(MSGID_CONFIG_ATTR_ADD_VALUES_IS_SINGLE_VALUED,
-                    "Configuration attribute %s is single-valued, but adding " +
-                    "the provided value(s) would have given it multiple " +
-                    "values");
-    registerMessage(MSGID_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS,
-                    "Configuration attribute %s already contains a value %s");
-    registerMessage(MSGID_CONFIG_ATTR_NO_SUCH_VALUE,
-                    "Cannot remove value %s from configuration attribute %s " +
-                    "because the specified value does not exist");
-    registerMessage(MSGID_CONFIG_ATTR_OPTIONS_NOT_ALLOWED,
-                    "Invalid configuration attribute %s detected in entry " +
-                    "%s:  the only attribute option allowed in the Directory " +
-                    "Server configuration is \"" + OPTION_PENDING_VALUES +
-                    "\" to indicate the set of pending values");
-    registerMessage(MSGID_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS,
-                    "Configuration attribute %s appears to contain multiple " +
-                    "pending value sets");
-    registerMessage(MSGID_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS,
-                    "Configuration attribute %s appears to contain multiple " +
-                    "active value sets");
-    registerMessage(MSGID_CONFIG_ATTR_NO_ACTIVE_VALUE_SET,
-                    "Configuration attribute %s does not contain an active " +
-                    "value set");
-    registerMessage(MSGID_CONFIG_CANNOT_GET_CONFIG_ENTRY,
-                    "An error occurred while attempting to retrieve " +
-                    "configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_SET_ATTRIBUTE,
-                    "The value of configuration attribute %s has been set to " +
-                    "%s in configuration entry %s");
-    registerMessage(MSGID_CONFIG_CHANGE_NOT_SUCCESSFUL,
-                    "The attempt to update configuration entry %s was not " +
-                    "successful and one or more problems were encountered:  " +
-                    "%s");
-
-
-    registerMessage(MSGID_CONFIG_ATTR_INVALID_BOOLEAN_VALUE,
-                    "Unable to set the value for Boolean configuration " +
-                    "attribute %s because the provided value %s was not " +
-                    "either 'true' or 'false'");
-
-
-    registerMessage(MSGID_CONFIG_ATTR_NO_INT_VALUE,
-                    "Unable to retrieve the value for configuration " +
-                    "attribute %s as an integer because that attribute does " +
-                    "not have any values");
-    registerMessage(MSGID_CONFIG_ATTR_MULTIPLE_INT_VALUES,
-                    "Unable to retrieve the value for configuration " +
-                    "attribute %s as an integer because that attribute has " +
-                    "multiple values");
-    registerMessage(MSGID_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE,
-                    "Unable to retrieve the value for configuration " +
-                    "attribute %s as a Java int because the value is outside " +
-                    "the allowable range for an int");
-    registerMessage(MSGID_CONFIG_ATTR_INVALID_INT_VALUE,
-                    "Unable to set the value for integer configuration " +
-                    "attribute %s because the provided value %s cannot be " +
-                    "interpreted as an integer value:  %s");
-    registerMessage(MSGID_CONFIG_ATTR_INT_BELOW_LOWER_BOUND,
-                    "Unable to set the value for configuration attribute %s " +
-                    "because the provided value %d is less than the lowest " +
-                    "allowed value of %d");
-    registerMessage(MSGID_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND,
-                    "Unable to set the value for configuration attribute %s " +
-                    "because the provided value %d is greater than the " +
-                    "largest allowed value of %d");
-    registerMessage(MSGID_CONFIG_ATTR_INT_COULD_NOT_PARSE,
-                    "Unable to parse value %s for configuration attribute %s " +
-                    "as an integer value:  %s");
-    registerMessage(MSGID_CONFIG_ATTR_INT_INVALID_TYPE,
-                    "Unable to parse value %s for configuration attribute %s " +
-                    "as an integer value because the element was of an " +
-                    "invalid type (%s)");
-    registerMessage(MSGID_CONFIG_ATTR_INT_INVALID_ARRAY_TYPE,
-                    "Unable to parse value for configuration attribute %s " +
-                    "as a set of integer values because the array contained " +
-                    "elements of an invalid type (%s)");
-
-
-    registerMessage(MSGID_CONFIG_ATTR_NO_STRING_VALUE,
-                    "Unable to retrieve the value for configuration " +
-                    "attribute %s as a string because that attribute does " +
-                    "not have any values");
-    registerMessage(MSGID_CONFIG_ATTR_MULTIPLE_STRING_VALUES,
-                    "Unable to retrieve the value for configuration " +
-                    "attribute %s as a string because that attribute has " +
-                    "multiple values");
-    registerMessage(MSGID_CONFIG_ATTR_EMPTY_STRING_VALUE,
-                    "An empty value string was provided for configuration " +
-                    "attribute %s");
-    registerMessage(MSGID_CONFIG_ATTR_INVALID_STRING_VALUE,
-                    "Unable to parse value %s for configuration attribute %s " +
-                    "as a string value:  %s");
-    registerMessage(MSGID_CONFIG_ATTR_STRING_INVALID_TYPE,
-                    "Unable to parse value %s for configuration attribute %s " +
-                    "as a string value because the element was of an invalid " +
-                    "type (%s)");
-    registerMessage(MSGID_CONFIG_ATTR_STRING_INVALID_ARRAY_TYPE,
-                    "Unable to parse value for configuration attribute %s " +
-                    "as a set of string values because the array contained " +
-                    "elements of an invalid type (%s)");
-
-
-    registerMessage(MSGID_CONFIG_ATTR_VALUE_NOT_ALLOWED,
-                    "The value %s is not included in the list of acceptable " +
-                    "values for configuration attribute %s");
-    registerMessage(MSGID_CONFIG_ATTR_READ_ONLY,
-                    "Configuration attribute %s is read-only and its values " +
-                    "may not be altered");
-
-
-    registerMessage(MSGID_CONFIG_ATTR_INVALID_UNIT,
-                    "'%s' is not a valid unit for configuration attribute %s");
-    registerMessage(MSGID_CONFIG_ATTR_NO_UNIT_DELIMITER,
-                    "Cannot decode %s as an integer value and a unit for " +
-                    "configuration attribute %s because no value/unit " +
-                    "delimiter could be found");
-    registerMessage(MSGID_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT,
-                    "Could not decode the integer portion of value %s for " +
-                    "configuration attribute %s:  %s");
-    registerMessage(MSGID_CONFIG_ATTR_INVALID_VALUE_WITH_UNIT,
-                    "The provided value %s for integer with unit attribute " +
-                    "%s is not allowed:  %s");
-    registerMessage(MSGID_CONFIG_ATTR_INT_WITH_UNIT_INVALID_TYPE,
-                    "Unable to parse value %s for configuration attribute %s " +
-                    "as an integer with unit value because the element was " +
-                    "of an invalid type (%s)");
-
-
-    registerMessage(MSGID_CONFIG_ENTRY_CONFLICTING_CHILD,
-                    "Unable to add configuration entry %s as a child of " +
-                    "configuration entry %s because a child entry was " +
-                    "already found with that DN");
-    registerMessage(MSGID_CONFIG_ENTRY_NO_SUCH_CHILD,
-                    "Unable to remove entry %s as a child of configuration " +
-                    "entry %s because that entry did not have a child with " +
-                    "the specified DN");
-    registerMessage(MSGID_CONFIG_ENTRY_CANNOT_REMOVE_NONLEAF,
-                    "Unable to remove entry %s as a child of configuration " +
-                    "entry %s because that entry had children of its own and " +
-                    "non-leaf entries may not be removed");
-    registerMessage(MSGID_CONFIG_ENTRY_CANNOT_REMOVE_CHILD,
-                    "An unexpected error occurred while attempting to remove " +
-                    "entry %s as a child of configuration entry %s:  %s");
-
-
-    registerMessage(MSGID_CONFIG_FILE_DOES_NOT_EXIST,
-                    "The specified configuration file %s does not exist or " +
-                    "is not readable");
-    registerMessage(MSGID_CONFIG_FILE_CANNOT_VERIFY_EXISTENCE,
-                    "An unexpected error occurred while attempting to " +
-                    "determine whether configuration file %s exists:  %s");
-    registerMessage(MSGID_CONFIG_CANNOT_CALCULATE_DIGEST,
-                    "An error occurred while attempting to calculate a SHA-1 " +
-                    "digest of file %s:  %s");
-    registerMessage(MSGID_CONFIG_UNABLE_TO_APPLY_STARTUP_CHANGES,
-                    "An error occurred while attempting to apply the changes " +
-                    "contained in file %s to the server configuration at " +
-                    "startup:  %s");
-    registerMessage(MSGID_CONFIG_FILE_CANNOT_OPEN_FOR_READ,
-                    "An error occurred while attempting to open the " +
-                    "configuration file %s for reading:  %s");
-    registerMessage(MSGID_CONFIG_FILE_READ_ERROR,
-                    "An error occurred while attempting to read the contents " +
-                    "of configuration file %s:  %s");
-    registerMessage(MSGID_CONFIG_FILE_INVALID_LDIF_ENTRY,
-                    "An error occurred at or near line %d while trying to " +
-                    "parse the configuration from LDIF file %s:  %s");
-    registerMessage(MSGID_CONFIG_FILE_EMPTY,
-                    "The specified configuration file %s does not appear to " +
-                    "contain any configuration entries");
-    registerMessage(MSGID_CONFIG_FILE_INVALID_BASE_DN,
-                    "The first entry read from LDIF configuration file %s " +
-                    "had a DN of \"%s\" rather than the expected \"%s\" " +
-                    "which should be used as the Directory Server " +
-                    "configuration root");
-    registerMessage(MSGID_CONFIG_FILE_GENERIC_ERROR,
-                    "An unexpected error occurred while attempting to " +
-                    "process the Directory Server configuration file %s:  %s");
-    registerMessage(MSGID_CONFIG_FILE_DUPLICATE_ENTRY,
-                    "Configuration entry %s starting at or near line %s in " +
-                    "the LDIF configuration file %s has the same DN as " +
-                    "another entry already read from that file");
-    registerMessage(MSGID_CONFIG_FILE_NO_PARENT,
-                    "Configuration entry %s starting at or near line %d in " +
-                    "the configuration LDIF file %s does not appear to have " +
-                    "a parent entry (expected parent DN was %s)");
-    registerMessage(MSGID_CONFIG_FILE_UNKNOWN_PARENT,
-                    "The Directory Server was unable to determine the parent " +
-                    "DN for configuration entry %s starting at or near line " +
-                    "%d in the configuration LDIF file %s");
-    registerMessage(MSGID_CONFIG_CANNOT_DETERMINE_SERVER_ROOT,
-                    "Unable to determine the Directory Server instance root " +
-                    "from either an environment variable or based on the " +
-                    "location of the configuration file.  Please set an " +
-                    "environment variable named %s with a value containing " +
-                    "the absolute path to the server installation root");
-    registerMessage(MSGID_CONFIG_LDIF_WRITE_ERROR,
-                    "An unexpected error occurred while trying to export " +
-                    "the Directory Server configuration to LDIF:  %s");
-    registerMessage(MSGID_CONFIG_FILE_WRITE_ERROR,
-                    "An unexpected error occurred while trying to write " +
-                    "configuration entry %s to LDIF:  %s");
-    registerMessage(MSGID_CONFIG_FILE_CLOSE_ERROR,
-                    "An unexpected error occurred while trying to close " +
-                    "the LDIF writer:  %s");
-    registerMessage(MSGID_CONFIG_FILE_UNWILLING_TO_IMPORT,
-                    "The Directory Server configuration may not be altered " +
-                    "by importing a new configuration from LDIF");
-    registerMessage(MSGID_CONFIG_CANNOT_REGISTER_AS_PRIVATE_SUFFIX,
-                    "An unexpected error occurred while trying to register " +
-                    "the configuration handler base DN \"%s\" as a private " +
-                    "suffix with the Directory Server:  %s");
-    registerMessage(MSGID_CONFIG_ERROR_APPLYING_STARTUP_CHANGE,
-                    "Unable to apply a change at server startup:  %s");
-    registerMessage(MSGID_CONFIG_UNABLE_TO_APPLY_CHANGES_FILE,
-                    "One or more errors occurred while applying changes on " +
-                    "server startup");
-    registerMessage(MSGID_CONFIG_FILE_ADD_ALREADY_EXISTS,
-                    "Entry %s cannot be added to the Directory Server " +
-                    "configuration because another configuration entry " +
-                    "already exists with that DN");
-    registerMessage(MSGID_CONFIG_FILE_ADD_NO_PARENT_DN,
-                    "Entry %s cannot be added to the Directory Server " +
-                    "configuration because that DN does not have a parent");
-    registerMessage(MSGID_CONFIG_FILE_ADD_NO_PARENT,
-                    "Entry %s cannot be added to the Directory Server " +
-                    "configuration because its parent entry %s does not " +
-                    "exist");
-    registerMessage(MSGID_CONFIG_FILE_ADD_REJECTED_BY_LISTENER,
-                    "The Directory Server is unwilling to add configuration " +
-                    "entry %s because one of the add listeners registered " +
-                    "with the parent entry %s rejected this change with " +
-                    "the message:  %s");
-    registerMessage(MSGID_CONFIG_FILE_ADD_FAILED,
-                    "An unexpected error occurred while attempting to add " +
-                    "configuration entry %s as a child of entry %s:  %s");
-    registerMessage(MSGID_CONFIG_FILE_DELETE_NO_SUCH_ENTRY,
-                    "Entry %s cannot be removed from the Directory Server " +
-                    "configuration because the specified entry does not " +
-                    "exist");
-    registerMessage(MSGID_CONFIG_FILE_DELETE_HAS_CHILDREN,
-                    "Entry %s cannot be removed from the Directory Server " +
-                    "configuration because the specified entry has one or " +
-                    "more subordinate entries");
-    registerMessage(MSGID_CONFIG_FILE_DELETE_NO_PARENT,
-                    "Entry %s cannot be removed from the Directory Server " +
-                    "configuration because the entry does not have a parent " +
-                    "and removing the configuration root entry is not " +
-                    "allowed");
-    registerMessage(MSGID_CONFIG_FILE_DELETE_REJECTED,
-                    "Entry %s cannot be removed from the Directory Server " +
-                    "configuration because one of the delete listeners " +
-                    "registered with the parent entry %s rejected this " +
-                    "change with the message:  %s");
-    registerMessage(MSGID_CONFIG_FILE_DELETE_FAILED,
-                    "An unexpected error occurred while attempting to remove " +
-                    "configuration entry %s as a child of entry %s:  %s");
-    registerMessage(MSGID_CONFIG_FILE_MODIFY_NO_SUCH_ENTRY,
-                    "Entry %s cannot be modified because the specified entry " +
-                    "does not exist");
-    registerMessage(MSGID_CONFIG_FILE_MODIFY_STRUCTURAL_CHANGE_NOT_ALLOWED,
-                    "Configuration entry %s cannot be modified because the " +
-                    "change would alter its structural object class");
-    registerMessage(MSGID_CONFIG_FILE_MODIFY_REJECTED_BY_CHANGE_LISTENER,
-                    "Entry %s cannot be modified because one of the " +
-                    "configuration change listeners registered for that " +
-                    "entry rejected the change:  %s");
-    registerMessage(MSGID_CONFIG_FILE_MODIFY_REJECTED_BY_COMPONENT,
-                    "Entry %s cannot be modified because one of the " +
-                    "configurable components registered for that entry " +
-                    "rejected the change:  %s");
-    registerMessage(MSGID_CONFIG_FILE_SEARCH_NO_SUCH_BASE,
-                    "The search operation cannot be processed because base " +
-                    "entry %s does not exist");
-    registerMessage(MSGID_CONFIG_FILE_SEARCH_INVALID_SCOPE,
-                    "The search operation cannot be processed because the " +
-                    "specified search scope %s is invalid");
-    registerMessage(MSGID_CONFIG_FILE_WRITE_CANNOT_CREATE_TEMP_ARCHIVE,
-                    "An error occurred while attempting to create a " +
-                    "temporary file %s to hold the archived versions of " +
-                    "previous Directory Server configurations as a result of " +
-                    "a configuration change:  %s");
-    registerMessage(MSGID_CONFIG_FILE_WRITE_CANNOT_COPY_EXISTING_ARCHIVE,
-                    "An error occurred while attempting to copy the " +
-                    "archived configurations from %s to temporary file %s:  " +
-                    "%s");
-    registerMessage(MSGID_CONFIG_FILE_WRITE_CANNOT_COPY_CURRENT_CONFIG,
-                    "An error occurred while attempting to update the " +
-                    "archived configurations in file %s to include the " +
-                    "running configuration from file %s:  %s");
-    registerMessage(MSGID_CONFIG_FILE_WRITE_CANNOT_RENAME_TEMP_ARCHIVE,
-                    "The attempt to rename the archived configuration data " +
-                    "from %s to %s failed, but the underlying reason for the " +
-                    "failure could not be determined");
-    registerMessage(MSGID_CONFIG_FILE_WRITE_CANNOT_REPLACE_ARCHIVE,
-                    "The updated archive containing previous Directory " +
-                    "Server configurations could not be renamed from %s to " +
-                    "%s:  %s");
-    registerMessage(MSGID_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR_NO_REASON,
-                    "An error occurred while trying to create the " +
-                    "configuration archive directory %s");
-    registerMessage(MSGID_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR,
-                    "An error occurred while trying to create the " +
-                    "configuration archive directory %s:  %s");
-    registerMessage(MSGID_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE,
-                    "An error occurred while trying to write the current " +
-                    "configuration to the configuration archive:  %s");
-    registerMessage(MSGID_CONFIG_MANUAL_CHANGES_DETECTED,
-                    "The Directory Server has detected that one or more " +
-                    "external changes have been made to the configuration " +
-                    "file %s while the server was online, but another change " +
-                    "has caused the server configuration to be overwritten.  " +
-                    "The manual changes have not been applied, but they have " +
-                    "been preserved in file %s");
-    registerMessage(MSGID_CONFIG_MANUAL_CHANGES_LOST,
-                    "The Directory Server encountered an error while " +
-                    "attempting to determine whether the configuration file " +
-                    "%s has been externally edited with the server online, " +
-                    "and/or trying to preserve such changes:  %s.  Any " +
-                    "manual changes made to that file may have been lost");
-    registerMessage(MSGID_CONFIG_FILE_WRITE_CANNOT_EXPORT_NEW_CONFIG,
-                    "An error occurred while attempting to export the new " +
-                    "Directory Server configuration to file %s:  %s");
-    registerMessage(MSGID_CONFIG_FILE_WRITE_CANNOT_RENAME_NEW_CONFIG,
-                    "An error occurred while attempting to rename the new " +
-                    "Directory Server configuration from file %s to %s:  %s");
-    registerMessage(MSGID_CONFIG_FILE_MODDN_NOT_ALLOWED,
-                    "Modify DN operations are not allowed in the Directory " +
-                    "Server configuration");
-    registerMessage(MSGID_CONFIG_FILE_HEADER,
-                    "This file contains the primary Directory Server " +
-                    "configuration.  It must not be directly edited while " +
-                    "the server is online.  The server configuration should " +
-                    "only be managed using the administration utilities " +
-                    "provided with the Directory Server");
-    registerMessage(MSGID_CONFIG_FILE_ADD_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to perform add " +
-                    "operations in the Directory Server configuration");
-    registerMessage(MSGID_CONFIG_FILE_DELETE_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to perform delete " +
-                    "operations in the Directory Server configuration");
-    registerMessage(MSGID_CONFIG_FILE_MODIFY_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to perform modify " +
-                    "operations in the Directory Server configuration");
-    registerMessage(MSGID_CONFIG_FILE_MODIFY_PRIVS_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to change the set " +
-                    "of default root privileges");
-    registerMessage(MSGID_CONFIG_FILE_MODDN_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to perform modify " +
-                    "DN operations in the Directory Server configuration");
-    registerMessage(MSGID_CONFIG_FILE_SEARCH_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to perform search " +
-                    "operations in the Directory Server configuration");
-
-
-    registerMessage(MSGID_CONFIG_LOGGER_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "base logger entry " + DN_LOGGER_BASE + " from the " +
-                    "Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_LOGGER_BASE_DOES_NOT_EXIST,
-                    "The logger configuration base " + DN_LOGGER_BASE +
-                    " does not exist in the Directory Server configuration.  " +
-                    "Logging facilities will not be available until this " +
-                    "entry is created and the Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_ACTIVE_ACCESS_LOGGERS,
-                    "There are no active access loggers defined in the " +
-                    "Directory Server configuration.  No access logging will " +
-                    "be performed");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_ACTIVE_ERROR_LOGGERS,
-                    "There are no active error loggers defined in the " +
-                    "Directory Server configuration.  No error logging will " +
-                    "be performed");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_ACTIVE_DEBUG_LOGGERS,
-                    "There are no active debug loggers defined in the " +
-                    "Directory Server configuration.  No debug logging will " +
-                    "be performed");
-    registerMessage(MSGID_CONFIG_LOGGER_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid logger " +
-                    "configuration:  %s.  It will be ignored");
-    registerMessage(MSGID_CONFIG_LOGGER_CANNOT_CREATE_LOGGER,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server logger from the information in " +
-                    "configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_LOGGER_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain a valid " +
-                    "objectclass for a Directory Server access, error, or " +
-                    "debug logger definition");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_LOGGER_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated logger");
-    registerMessage(MSGID_CONFIG_LOGGER_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_LOGGER_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_LOGGER_INVALID_ACCESS_LOGGER_CLASS,
-                    "Class %s specified in attribute " + ATTR_LOGGER_CLASS +
-                    " of configuration entry %s cannot be instantiated as " +
-                    "a Directory Server access logger:  %s");
-    registerMessage(MSGID_CONFIG_LOGGER_INVALID_ERROR_LOGGER_CLASS,
-                    "Class %s specified in attribute " + ATTR_LOGGER_CLASS +
-                    " of configuration entry %s cannot be instantiated as " +
-                    "a Directory Server error logger:  %s");
-    registerMessage(MSGID_CONFIG_LOGGER_INVALID_DEBUG_LOGGER_CLASS,
-                    "Class %s specified in attribute " + ATTR_LOGGER_CLASS +
-                    " of configuration entry %s cannot be instantiated as " +
-                    "a Directory Server debug logger:  %s");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_ENABLED_ATTR,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_LOGGER_ENABLED +
-                    " which indicates whether the logger should be enabled " +
-                    "for use in the Directory Server");
-    registerMessage(MSGID_CONFIG_LOGGER_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_LOGGER_ENABLED + ":  %s");
-    registerMessage(MSGID_CONFIG_LOGGER_DESCRIPTION_CLASS_NAME,
-                    "The fully-qualified name of the Java class that defines " +
-                    "the Directory Server logger.  If this is altered while " +
-                    "the associated logger is enabled, then that logger must " +
-                    "be disabled and re-enabled for the change to take " +
-                    "effect");
-    registerMessage(MSGID_CONFIG_LOGGER_DESCRIPTION_ENABLED,
-                    "Indicates whether this Directory Server logger should " +
-                    "be enabled.  Changes to this attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_FILE_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_LOGGER_FILE +
-                    " which specifies the log file name for " +
-                    "the associated logger");
-    registerMessage(MSGID_CONFIG_LOGGER_CLASS_ACTION_REQUIRED,
-                    "The requested change in the logger class name from %s " +
-                    "to %s in configuration entry %s cannot be dynamically " +
-                    "applied.  This change will not take effect until the " +
-                    "logger is disabled and re-enabled or the Directory " +
-                    "Server is restarted");
-    registerMessage(MSGID_CONFIG_LOGGER_EXISTS,
-                    "Unable to add a new logger entry with DN %s because " +
-                    "there is already a logger registered with that DN");
-    registerMessage(MSGID_CONFIG_LOGGER_ACCESS_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as an access logger as defined in " +
-                    "configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_LOGGER_ERROR_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as an error logger as defined in " +
-                    "configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_LOGGER_DEBUG_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as a debug logger as defined in " +
-                    "configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_LOGGER_UNACCEPTABLE_CONFIG,
-                    "The configuration for the logger defined in " +
-                    "configuration entry %s was not acceptable according to " +
-                    "its internal validation.  However, no specific " +
-                    "information is available regarding the problem(s) with " +
-                    "the entry");
-
-
-    registerMessage(MSGID_CONFIG_UNKNOWN_UNACCEPTABLE_REASON,
-                    "Unknown unacceptable reason");
-
-
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_ADD_MISSING_RDN_ATTRS,
-                    "Indicates whether the Directory Server should " +
-                    "automatically add missing RDN attributes to an entry " +
-                    "when it is added.  By default, entries added that do " +
-                    "not contain the RDN attribute values in their attribute " +
-                    "lists will be rejected because they are in violation " +
-                    "of the LDAP specification.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_ADD_MISSING_RDN_ATTRS,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " +
-                    ATTR_ADD_MISSING_RDN_ATTRS + " (it should be a Boolean " +
-                    "value of true or false):  %s");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_ALLOW_ATTR_EXCEPTIONS,
-                    "Indicates whether to allow some flexibility in the " +
-                    "characters that may be used in attribute names.  By " +
-                    "default, attribute names may only contain ASCII " +
-                    "alphabetic letters, numeric digits, and dashes, and " +
-                    "they must begin with a letter.  If attribute name " +
-                    "exceptions are enabled, then the underscore character " +
-                    "will also be allowed and the attribute name may also " +
-                    "start with a digit.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_ALLOW_EXCEPTIONS,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " +
-                    ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS + " (it should be a " +
-                    "Boolean value of true or false):  %s");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_SERVER_ERROR_RESULT_CODE,
-                    "Specifies the result code that should be used for " +
-                    "responses in which the operation fails because of an " +
-                    "internal server error.  The value should be the " +
-                    "integer equivalent of the corresponding LDAP result " +
-                    "code.  Changes to this configuration attribute will " +
-                    "take effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_SERVER_ERROR_RESULT_CODE,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " +
-                    ATTR_SERVER_ERROR_RESULT_CODE + " (it should be an " +
-                    "integer value greater than or equal to 1):  %s");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_INVALID_SYNTAX_BEHAVIOR,
-                    "Specifies the behavior that the Directory Server should " +
-                    "exhibit if it discovers an attribute whose value does " +
-                    "not conform to the syntax for that attribute.  " +
-                    "Acceptable values for this attribute are \"reject\" to " +
-                    "reject the invalid value, \"warn\" to accept the " +
-                    "invalid value but log a warning message, or \"accept\" " +
-                    "to accept the invalid value with no warning.  Changes " +
-                    "to this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_ENFORCE_STRICT_SYNTAX,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_INVALID_SYNTAX_BEHAVIOR +
-                    " (it should be one of \"accept\", \"reject\", or " +
-                    "\"warn\" ):  %s");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_MAX_ALLOWED_CONNECTIONS,
-                    "The maximum number of client connections that may be " +
-                    "established to the Directory Server at any given time.  " +
-                    "a value that is less than or equal to zero indicates " +
-                    "that there should be no limit.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_MAX_ALLOWED_CONNECTIONS,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_MAX_ALLOWED_CONNS +
-                    " (it should be an integer value)");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_STRUCTURAL_CLASS_BEHAVIOR,
-                    "Specifies the behavior that the Directory Server should " +
-                    "exhibit if it discovers an entry that does not have " +
-                    "exactly one structural objectclass.  Acceptable values " +
-                    "are \"reject\" to reject the entry, \"warn\" to accept " +
-                    "the entry but log a warning message, or \"accept\" to " +
-                    "accept the invalid entry with no warning.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_STRUCTURAL_CLASS_BEHAVIOR,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " +
-                    ATTR_SINGLE_STRUCTURAL_CLASS_BEHAVIOR +
-                    " (it should be one of \"accept\", \"reject\", or " +
-                    "\"warn\" ):  %s");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_CHECK_SCHEMA,
-                    "Indicates whether the Directory Server should perform " +
-                    "schema checking for update operations to ensure that " +
-                    "entries are valid according to the server's schema " +
-                    "configuration (e.g., all required attributes are " +
-                    "included and no prohibited attributes are present).  " +
-                    "Disabling schema checking is generally not recommended " +
-                    "because it may allow invalid entries to be included in " +
-                    "the server.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_CHECK_SCHEMA,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_CHECK_SCHEMA +
-                    " (it should be a Boolean value of true or false):  %s");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_NOTIFY_ABANDONED_OPERATIONS,
-                    "Indicates whether the Directory Server should send a " +
-                    "response to operations that have been abandoned to " +
-                    "the client to know that the server has completed " +
-                    "processing on them.  The LDAP specification prohibits " +
-                    "sending a response in such cases, but some clients may " +
-                    "not behave properly if they are waiting on a response " +
-                    "for an operation when there will not be one because it " +
-                    "has been abandoned.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_PROXY_MAPPER_DN,
-                    "Specifies the DN of the configuration entry for the " +
-                    "identity mapper that the Directory Server should use in " +
-                    "conjunction with the proxied authorization V2 control.  " +
-                    "Changes to this configuration attribute will take " +
-                    "effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_NOTIFY_ABANDONED_OPERATIONS,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_NOTIFY_ABANDONED_OPS +
-                    " (it should be a Boolean value of true or false):  %s");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_SMTP_SERVER,
-                    "The provided SMTP server value '%s' is invalid.  An " +
-                    "SMTP server value must have an IP address or a " +
-                    "resolvable name, and it may optionally be followed by a " +
-                    "colon and an integer value between 1 and 65535 to " +
-                    "specify the server port number");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_PROXY_MAPPER_DN,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_PROXY_MAPPER_DN +
-                    " (it should be the DN of a valid identity mapper " +
-                    "configuration entry):  %s");
-    registerMessage(MSGID_CONFIG_CORE_NO_PROXY_MAPPER_FOR_DN,
-                    "The proxied authorization identity mapper DN %s " +
-                    "specified in configuration entry %s does not refer to a " +
-                    "valid identity mapper configuration entry");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_SIZE_LIMIT,
-                    "Specifies the default maximum number of entries that " +
-                    "should be returned to a client when processing a search " +
-                    "operation.  This may be overridden on a per-user basis " +
-                    "by including the " + OP_ATTR_USER_SIZE_LIMIT +
-                    " operational attribute in the user's entry.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_SIZE_LIMIT,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_SIZE_LIMIT +
-                    " (It should be a positive integer value specifying " +
-                    "the size limit to use, or a value of 0 or -1 to " +
-                    "indicate that no limit should be enforced):  %s");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_TIME_LIMIT,
-                    "Specifies the default maximum length of time that " +
-                    "should be allowed when processing a search operation.  " +
-                    "This may be overridden on a per-user basis by including " +
-                    "the " + OP_ATTR_USER_TIME_LIMIT + " operational " +
-                    "attribute in the user's entry.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_TIME_LIMIT,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_TIME_LIMIT +
-                    " (it should be an integer value followed by a space " +
-                    "and a time unit of seconds, minutes, hours, days, or " +
-                    "weeks):  %s");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_WRITABILITY_MODE,
-                    "Specifies the writability mode for the Directory " +
-                    "Server.  The value may be one of \"enabled\", " +
-                    "\"disabled\", or \"internal-only\".  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_WRITABILITY_MODE,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_WRITABILITY_MODE +
-                    " (the value should be one of \"enabled\", \"disabled\", " +
-                    "or \"internal-only\"):  %s");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_BIND_WITH_DN_REQUIRES_PW,
-                    "Indicates whether simple binds that contain a DN will " +
-                    "also be required to contain a password.  If this is " +
-                    "disabled, then binds with no password will always be " +
-                    "treated as anonymous, even if they contain a bind DN, " +
-                    "which can create a security hole for some kinds of " +
-                    "applications.  With this option enabled, then any " +
-                    "simple bind request that contains a DN but no password " +
-                    "will be rejected rather than defaulting to anonymous " +
-                    "authentication.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_DEFAULT_PWPOLICY_DN,
-                    "Specifies the DN of the configuration entry that " +
-                    "defines the default password policy for the Directory " +
-                    "Server, which will be applied for all users for which a " +
-                    "custom password policy is not defined.  This entry must " +
-                    "exist and must specify a valid password policy " +
-                    "configuration.  Changes to this configuration attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_BIND_WITH_DN_REQUIRES_PW,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_BIND_WITH_DN_REQUIRES_PW +
-                    " (the value should be either \"TRUE\" or \"FALSE\"):  " +
-                    "%s");
-    registerMessage(MSGID_CONFIG_CORE_NO_DEFAULT_PWPOLICY,
-                    "No default password policy was configured for the " +
-                    "Directory Server.  This must be specified by the " +
-                    ATTR_DEFAULT_PWPOLICY_DN + " attribute in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_DEFAULT_PWPOLICY_DN,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_DEFAULT_PWPOLICY_DN +
-                    " (the value should a DN specifying the default " +
-                    "password policy configuration entry):  %s");
-    registerMessage(MSGID_CONFIG_CORE_NO_SUCH_PWPOLICY,
-                    "The value %s for configuration attribute " +
-                    ATTR_DEFAULT_PWPOLICY_DN + " does not refer to a valid " +
-                    "password policy configuration entry");
-
-
-    registerMessage(MSGID_CONFIG_JMX_ATTR_NO_VALUE,
-                    "Configuration entry %s does not contain a value for " +
-                    "attribute %s");
-    registerMessage(MSGID_CONFIG_JMX_ATTR_NO_ATTR,
-                    "Configuration entry %s does not contain attribute %s " +
-                    "(or that attribute exists but is not accessible using " +
-                    "JMX)");
-    registerMessage(MSGID_CONFIG_JMX_CANNOT_GET_CONFIG_ENTRY,
-                    "Unable to retrieve configuration entry %s for access " +
-                    "through JMX:  %s");
-    registerMessage(MSGID_CONFIG_JMX_ATTR_INVALID_VALUE,
-                    "Attempted update to attribute %s of configuration entry " +
-                    "%s over JMX would have resulted in an invalid value:  " +
-                    "%s");
-    registerMessage(MSGID_CONFIG_JMX_UNACCEPTABLE_CONFIG,
-                    "Update to configuration entry %s over JMX would have " +
-                    "resulted in an invalid configuration:  %s");
-    registerMessage(MSGID_CONFIG_JMX_NO_METHOD,
-                    "There is no method %s for any invokable component " +
-                    "registered with configuration entry %s");
-    registerMessage(MSGID_CONFIG_JMX_CANNOT_REGISTER_MBEAN,
-                    "The Directory Server could not register a JMX MBean for " +
-                    "the component associated with configuration entry %s:  " +
-                    "%s ");
-    registerMessage(MSGID_CONFIG_JMX_CANNOT_GET_ATTRIBUTE,
-                    "Unable to retrieve JMX attribute %s associated with " +
-                    "configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_JMX_SET_ATTR_NO_CONNECTION,
-                    "Unable to set the value of JMX attribute %s associated " +
-                    "with configuration entry %s because no JMX connection " +
-                    "is avaialble");
-
-
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_NUM_THREADS,
-                    "Specifies the number of worker threads that should " +
-                    "be used to process requests, which controls the number " +
-                    "of operations that the server may process " +
-                    "concurrently.  The optimal value depends on the type of " +
-                    "system on which the server is running and the workload " +
-                    "it needs to handle, and may best be determined by " +
-                    "performance testing.  Changes to this attribute will " +
-                    "take effect immediately");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_DESCRIPTION_MAX_CAPACITY,
-                    "Specifies the maximum number of pending requests that " +
-                    "may be held in the work queue at any one time while all " +
-                    "worker threads are busy processing other operations.  " +
-                    "If this limit is reached, then any new requests will be " +
-                    "rejected.  A value of 0 indicates that there is no " +
-                    "limit.  Changes to this attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_NUM_WORKER_THREADS,
-                    "An error occurred while attempting to retrieve the " +
-                    "value of the " + ATTR_NUM_WORKER_THREADS + " attribute " +
-                    "from the %s entry, which is used to specify the number " +
-                    "of worker threads to service the work queue:  %s.  The " +
-                    "Directory Server will use the default value of " +
-                    DEFAULT_NUM_WORKER_THREADS + "");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_CANNOT_DETERMINE_QUEUE_CAPACITY,
-                    "An error occurred while attempting to retrieve the " +
-                    "value of the " + ATTR_MAX_WORK_QUEUE_CAPACITY +
-                    " attribute from the %s entry, which is used to specify " +
-                    "the maximum number of pending operations that may be " +
-                    "held in the work queue:  %s.  The Directory Server will " +
-                    "use the default value of " +
-                    DEFAULT_MAX_WORK_QUEUE_CAPACITY + "");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_NUM_THREADS_INVALID_VALUE,
-                    "The value of configuration attribute " +
-                    ATTR_NUM_WORKER_THREADS + " in configuration entry %s " +
-                    "has an invalid value (%d).  This attribute requires " +
-                    "an integer value greater than zero");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_CAPACITY_INVALID_VALUE,
-                    "The value of configuration attribute " +
-                    ATTR_MAX_WORK_QUEUE_CAPACITY + " in configuration entry " +
-                    "%s has an invalid value (%d).  This attribute requires " +
-                    "an integer value greater than or equal to zero");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_CREATED_THREADS,
-                    "%d additional worker threads have been created to bring " +
-                    "the total number of available threads to %d");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_DESTROYING_THREADS,
-                    "%d worker threads will terminate as soon as it is " +
-                    "convenient to do so (it may take a couple of seconds " +
-                    "for the threads to actually exit) to bring the total " +
-                    "number of available threads to %d");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_NEW_CAPACITY,
-                    "The work queue capacity has been updated to use a new "+
-                    "value of %d");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_TOO_MANY_FAILURES,
-                    "Worker thread \"%s\" has experienced too many repeated " +
-                    "failures while attempting to retrieve the next " +
-                    "operation from the work queue (%d failures experienced, " +
-                    "maximum of %d failures allowed).  This worker thread " +
-                    "will be destroyed");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR,
-                    "A problem occurred while trying to create and start an " +
-                    "instance of class %s to use as a monitor provider for " +
-                    "the Directory Server work queue:  %s.  No monitor " +
-                    "information will be available for the work queue");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_INITIALIZATION_FAILED,
-                    "Unable to initialize an instance of class %s as a work " +
-                    "queue as specified in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_WORK_QUEUE_CLASS_CHANGE_REQUIRES_RESTART,
-                    "The class used to provide the Directory Server work " +
-                    "queue implementation has been changed from %s to %s, " +
-                    "but this change will not take effect until the server " +
-                    "is restarted");
-
-
-   registerMessage(MSGID_CONFIG_DESCRIPTION_BACKEND_DIRECTORY,
-                   "The name of the directory in which backend database " +
-                   "files are stored");
-   registerMessage(MSGID_CONFIG_BACKEND_NO_DIRECTORY,
-                   "Configuration entry %s does not contain a valid value " +
-                   "for configuration attribute " +
-                   ATTR_BACKEND_DIRECTORY);
-
-
-    registerMessage(MSGID_CONFIG_ATTR_DN_NULL,
-                    "A null value was provided for DN configuration " +
-                    "attribute %s");
-    registerMessage(MSGID_CONFIG_ATTR_DN_CANNOT_PARSE,
-                    "An error occurred while trying to parse value \"%s\" of " +
-                    "attribute %s as a DN:  %s");
-    registerMessage(MSGID_CONFIG_ATTR_INVALID_DN_VALUE,
-                    "Unable to parse value %s for configuration attribute %s " +
-                    "as a DN:  %s");
-    registerMessage(MSGID_CONFIG_ATTR_DN_INVALID_TYPE,
-                    "Unable to parse value %s for configuration attribute %s " +
-                    "as a DN because the element was of an invalid type (%s)");
-    registerMessage(MSGID_CONFIG_ATTR_DN_INVALID_ARRAY_TYPE,
-                    "Unable to parse value for configuration attribute %s " +
-                    "as a set of DN values because the array contained " +
-                    "elements of an invalid type (%s)");
-
-
-    registerMessage(MSGID_CONFIG_BACKEND_CANNOT_GET_CONFIG_BASE,
-                    "An error occurred while trying to retrieve " +
-                    "configuration entry " + DN_BACKEND_BASE + " in order to " +
-                    "initialize the Directory Server backends:  %s");
-    registerMessage(MSGID_CONFIG_BACKEND_BASE_DOES_NOT_EXIST,
-                    "The entry " + DN_BACKEND_BASE +  " does not appear to " +
-                    "exist in the Directory Server configuration.  This is a " +
-                    "required entry");
-    registerMessage(MSGID_CONFIG_BACKEND_ENTRY_DOES_NOT_HAVE_BACKEND_CONFIG,
-                    "Configuration entry %s exists below the backend " +
-                    "configuration root of " + DN_BACKEND_BASE + " but does " +
-                    "not have objectclass " + OC_BACKEND + " that is " +
-                    "required for a Directory Server backend.  This " +
-                    "configuration entry will be ignored");
-    registerMessage(MSGID_CONFIG_BACKEND_ERROR_INTERACTING_WITH_BACKEND_ENTRY,
-                    "An unexpected error occurred while interacting with " +
-                    "backend configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_ENABLED,
-                    "Indicates whether this backend should be enabled for " +
-                    "use in the Directory Server.  This may be altered while " +
-                    "the Directory Server is online, but if a backend is " +
-                    "disabled, then it will not be available for use");
-    registerMessage(MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID,
-                    "Specifies the unique identifier for this backend.  " +
-                    "Changes to this configuration attribute will not take " +
-                    "effect until the backend is disabled and re-enabled or " +
-                    "the server is restarted");
-    registerMessage(MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_WRITABILITY,
-                    "Specifies the writability mode for this backend.  The " +
-                    "value may be \"enabled\" if all write operations will " +
-                    "be allowed, \"disabled\" if all write operations will " +
-                    "be rejected, or \"internal-only\" if only internal " +
-                    "write operations and synchronization updates will be " +
-                    "allowed.  Changes to this configuration attribute will " +
-                    "take effect immediately");
-    registerMessage(MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that should provide the core logic for this backend " +
-                    "implementation.  Changes to this configuration " +
-                    "attribute will not take effect until the backend is "+
-                    "disabled and re-enabled or the server is restarted");
-    registerMessage(MSGID_CONFIG_BACKEND_NO_ENABLED_ATTR,
-                    "Backend configuration entry %s does not contain " +
-                    "attribute " + ATTR_BACKEND_ENABLED + ", which is used " +
-                    "to indicate whether the backend should be enabled or " +
-                    "disabled.  Without this attribute, it will default to " +
-                    "being disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_DISABLED,
-                    "The backend defined in configuration entry %s is " +
-                    "marked as disabled and therefore will not be used");
-    registerMessage(MSGID_CONFIG_BACKEND_UNABLE_TO_DETERMINE_ENABLED_STATE,
-                    "An unexpected error occurred while attempting to " +
-                    "determine whether the backend associated with " +
-                    "configuration entry %s should be enabled or disabled:  " +
-                    "%s.  It will be disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_NO_BACKEND_ID,
-                    "Backend configuration entry %s does not contain " +
-                    "attribute " + ATTR_BACKEND_ID + ", which is used " +
-                    "to provide a unique identifier for the backend.  The " +
-                    "backend will be disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_DUPLICATE_BACKEND_ID,
-                    "The backend defined in configuration entry %s has a " +
-                    "backend ID of %s that conflicts with the backend ID for " +
-                    "another backend in the server.  The backend will be " +
-                    "disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_UNABLE_TO_DETERMINE_BACKEND_ID,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the backend ID for the backend defined in " +
-                    "configuration entry %s:  %s.  The backend will be " +
-                    "disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_NO_WRITABILITY_MODE,
-                    "The backend defined in configuration entry %s does not " +
-                    "have a value for configuration attribute " +
-                    ATTR_BACKEND_WRITABILITY_MODE + " which indicates the " +
-                    "writability mode for that backend.  The backend will be " +
-                    "disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_INVALID_WRITABILITY_MODE,
-                    "The backend defined in configuration entry %s has an " +
-                    "invalid writability mode of %s.  The backend will be " +
-                    "disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_UNABLE_TO_DETERMINE_WRITABILITY,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the writability mode for the backend defined " +
-                    "in configuration entry %s:  %s.  The backend will be " +
-                    "disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_NO_CLASS_ATTR,
-                    "Backend configuration entry %s does not contain " +
-                    "attribute " + ATTR_BACKEND_CLASS + ", which is used to " +
-                    "specify the name of the class used to provide the " +
-                    "backend implementation.  The backend associated with " +
-                    "this configuration entry will be disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_CANNOT_GET_CLASS,
-                    "An unexpected error occurred while trying to determine " +
-                    "the name of the Java class that contains the " +
-                    "implementation for backend %s:  %s.  This backend will " +
-                    "be disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_CANNOT_INSTANTIATE,
-                    "The Directory Server was unable to load class %s and " +
-                    "use it to create a backend instance as defined in " +
-                    "configuration entry %s.  The error that occurred was:  " +
-                    "%s.  This backend will be disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK,
-                    "The Directory Server was unable to acquire a shared " +
-                    "lock for backend %s:  %s.  This generally means that " +
-                    "the backend is in use by a process that requires an " +
-                    "exclusive lock (e.g., importing from LDIF or restoring " +
-                    "a backup).  This backend will be disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_CANNOT_INITIALIZE,
-                    "An error occurred while trying to initialize a backend " +
-                    "loaded from class %s with the information in " +
-                    "configuration entry %s:  %s.  This backend will be " +
-                    "disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK,
-                    "An error occurred while attempting to release a shared " +
-                    "lock for backend %s:  %s.  This may interfere with " +
-                    "operations that require exclusive access, including " +
-                    "LDIF import and restoring a backup");
-    registerMessage(MSGID_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND,
-                    "An error occurred while attempting to register backend " +
-                    "%s with the Directory Server:  %s");
-    registerMessage(MSGID_CONFIG_BACKEND_CLASS_NOT_BACKEND,
-                    "The class %s specified in configuration entry %s does " +
-                    "not contain a valid Directory Server backend " +
-                    "implementation");
-    registerMessage(MSGID_CONFIG_BACKEND_ACTION_REQUIRED_TO_CHANGE_CLASS,
-                    "The requested change to configuration entry %s would " +
-                    "cause the class for the associated backend to change " +
-                    "from %s to %s.  This change will not take effect until " +
-                    "the backend is disabled and re-enabled, or until the " +
-                    "Directory Server is restarted");
-    registerMessage(
-         MSGID_CONFIG_BACKEND_CANNOT_REMOVE_BACKEND_WITH_SUBORDINATES,
-         "The backend defined in configuration entry %s has one or more " +
-         "subordinate backends.  A backend may not be removed if it has " +
-         "subordinate backends");
-    registerMessage(MSGID_CONFIG_BACKEND_UNACCEPTABLE_CONFIG,
-                    "The configuration for the backend defined in " +
-                    "configuration entry %s was not acceptable according to " +
-                    "its internal validation.  However, no specific " +
-                    "information is available regarding the problem(s) with " +
-                    "the entry");
-    registerMessage(MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS,
-                    "Specifies the set of base DNs that should be used for " +
-                    "this backend.  It is up to the backend implementation " +
-                    "as to whether changes to this attribute will " +
-                    "automatically take effect");
-    registerMessage(MSGID_CONFIG_BACKEND_NO_BASE_DNS,
-                    "Backend configuration entry %s does not contain " +
-                    "attribute " + ATTR_BACKEND_BASE_DN + ", which is used " +
-                    "to specify the set of base DNs for the backend.  This " +
-                    "is a required attribute, and therefore the backend will " +
-                    "be disabled");
-    registerMessage(MSGID_CONFIG_BACKEND_UNABLE_TO_DETERMINE_BASE_DNS,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the set of base DNs associated with the " +
-                    "backend defined in configuration entry %s:  %s.  This " +
-                    "backend will be disabled");
-
-
-    registerMessage(MSGID_CONFIG_MONITOR_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "base monitor entry " + DN_MONITOR_CONFIG_BASE +
-                    " from the Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_MONITOR_BASE_DOES_NOT_EXIST,
-                    "The monitor configuration base " + DN_MONITOR_CONFIG_BASE +
-                    " does not exist in the Directory Server configuration.  " +
-                    "Only limited monitoring information will be available");
-    registerMessage(MSGID_CONFIG_MONITOR_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid monitor " +
-                    "provider configuration:  %s.  It will be ignored");
-    registerMessage(MSGID_CONFIG_MONITOR_CANNOT_CREATE_MONITOR,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server monitor provider from the information " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_MONITOR_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_MONITOR_PROVIDER + " objectclass, which is required " +
-                    "for monitor provider definitions");
-    registerMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_CLASS_NAME,
-                    "The fully-qualified name of the Java class that defines " +
-                    "the Directory Server monitor provider.  If this is " +
-                    "altered while the associated monitor is enabled, then " +
-                    "that monitor must be disabled and re-enabled for the " +
-                    "change to take effect");
-    registerMessage(MSGID_CONFIG_MONITOR_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_MONITOR_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated monitor provider");
-    registerMessage(MSGID_CONFIG_MONITOR_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_MONITOR_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_MONITOR_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid monitor provider implementation:  %s");
-    registerMessage(MSGID_CONFIG_MONITOR_DESCRIPTION_ENABLED,
-                    "Indicates whether this Directory Server monitor " +
-                    "provider should be enabled.  Changes to this attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_CONFIG_MONITOR_NO_ENABLED_ATTR,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_MONITOR_ENABLED +
-                    " which indicates whether the monitor provider should be " +
-                    "enabled for use in the Directory Server");
-    registerMessage(MSGID_CONFIG_MONITOR_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_MONITOR_ENABLED + ":  %s");
-    registerMessage(MSGID_CONFIG_MONITOR_CLASS_ACTION_REQUIRED,
-                    "The requested change in the monitor class name from %s " +
-                    "to %s in configuration entry %s cannot be dynamically " +
-                    "applied.  This change will not take effect until the " +
-                    "monitor provider is disabled and re-enabled or the " +
-                    "Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_MONITOR_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as a monitor provider as defined " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_MONITOR_EXISTS,
-                    "Unable to add a new monitor provider entry with DN %s " +
-                    "because there is already a monitor provider registered " +
-                    "with that DN");
-    registerMessage(MSGID_CONFIG_MONITOR_UNACCEPTABLE_CONFIG,
-                    "The configuration for the monitor provider defined in " +
-                    "configuration entry %s was not acceptable according to " +
-                    "its internal validation.  However, no specific " +
-                    "information is available regarding the problem(s) with " +
-                    "the entry");
-
-
-    registerMessage(MSGID_CONFIG_CONNHANDLER_CANNOT_GET_CONFIG_BASE,
-                    "An error occurred while trying to retrieve " +
-                    "configuration entry " + DN_CONNHANDLER_BASE +
-                    " in order to initialize the Directory Server backends:  " +
-                    "%s");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_BASE_DOES_NOT_EXIST,
-                    "The entry " + DN_CONNHANDLER_BASE +  " does not appear " +
-                    "to exist in the Directory Server configuration.  This " +
-                    "is a required entry");
-    registerMessage(
-         MSGID_CONFIG_CONNHANDLER_ENTRY_DOES_NOT_HAVE_CONNHANDLER_CONFIG,
-         "Configuration entry %s exists below the connection handler " +
-         "configuration root of " + DN_CONNHANDLER_BASE + " but does not " +
-         "have objectclass " + OC_CONNECTION_HANDLER + " that is required " +
-         "for a Directory Server connection handler.  This configuration " +
-         "entry will be ignored");
-    registerMessage(
-         MSGID_CONFIG_CONNHANDLER_ERROR_INTERACTING_WITH_CONNHANDLER_ENTRY,
-         "An unexpected error occurred while interacting with connection " +
-         "handler configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_ATTR_DESCRIPTION_ENABLED,
-                    "Indicates whether this connection handler should be " +
-                    "enabled for use in the Directory Server.  This may be " +
-                    "altered while the Directory Server is online, but if a " +
-                    "connection handler is disabled, then it will not be " +
-                    "available for use");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_ATTR_DESCRIPTION_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that should provide the core logic for this connection " +
-                    "handler implementation.  Changes to this configuration " +
-                    "attribute will not take effect until the connection " +
-                    "handler is disabled and re-enabled or the server is " +
-                    "restarted");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_NO_ENABLED_ATTR,
-                    "Connection handler configuration entry %s does not " +
-                    "contain attribute " + ATTR_CONNECTION_HANDLER_ENABLED +
-                    ", which is used to indicate whether the connection " +
-                    "handler should be enabled or disabled.  Without this " +
-                    "attribute, it will default to being disabled");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_DISABLED,
-                    "The connection handler defined in configuration entry " +
-                    "%s is marked as disabled and therefore will not be used");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_UNABLE_TO_DETERMINE_ENABLED_STATE,
-                    "An unexpected error occurred while attempting to " +
-                    "determine whether the connection handler associated " +
-                    "with configuration entry %s should be enabled or " +
-                    "disabled:  %s.  It will be disabled");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_NO_CLASS_ATTR,
-                    "Connection handler configuration entry %s does not " +
-                    "contain attribute " + ATTR_CONNECTION_HANDLER_CLASS +
-                    ", which is used to specify the name of the class used " +
-                    "to provide the connection handler implementation.  The " +
-                    "connection handler associated with this configuration " +
-                    "entry will be disabled");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_CANNOT_GET_CLASS,
-                    "An unexpected error occurred while trying to determine " +
-                    "the name of the Java class that contains the " +
-                    "implementation for connection handler %s:  %s.  This " +
-                    "connection handler will be disabled");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_CANNOT_INSTANTIATE,
-                    "The Directory Server was unable to load class %s and " +
-                    "use it to create a connection handler instance as " +
-                    "defined in configuration entry %s.  The error that " +
-                    "occurred was:  %s.  This connection handler will be " +
-                    "disabled");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_CANNOT_INITIALIZE,
-                    "An error occurred while trying to initialize a " +
-                    "connection handler loaded from class %s with the " +
-                    "information in configuration entry %s:  %s.  This " +
-                    "connection handler will be disabled");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_UNACCEPTABLE_CONFIG,
-                    "The configuration for the connection handler defined in " +
-                    "configuration entry %s was not acceptable according to " +
-                    "its internal validation.  However, no specific " +
-                    "information is available regarding the problem(s) with " +
-                    "the entry");
-    registerMessage(MSGID_CONFIG_CONNHANDLER_CLASS_NOT_CONNHANDLER,
-                    "The class %s specified in configuration entry %s does " +
-                    "not contain a valid Directory Server connection handler " +
-                    "implementation");
-
-
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_GET_MR_BASE,
-                    "An error occurred while trying to retrieve " +
-                    "configuration entry " + DN_MATCHING_RULE_CONFIG_BASE +
-                    " in order to initialize the Directory Server matching " +
-                    "rules:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_BASE_DOES_NOT_EXIST,
-                    "The entry " + DN_MATCHING_RULE_CONFIG_BASE +
-                    " does not appear to exist in the Directory Server " +
-                    "configuration.  This is a required entry");
-    registerMessage(MSGID_CONFIG_SCHEMA_NO_MATCHING_RULES,
-                    "No child entries were found below the entry " +
-                    DN_MATCHING_RULE_CONFIG_BASE + " to define the matching " +
-                    "rules for use in the Directory Server.  This is an " +
-                    "error, because the Directory Server must have matching " +
-                    "rules defined to function properly");
-    registerMessage(MSGID_CONFIG_SCHEMA_ENTRY_DOES_NOT_HAVE_MR_CONFIG,
-                    "Configuration entry %s exists below the matching rule " +
-                    "configuration root of " + DN_MATCHING_RULE_CONFIG_BASE +
-                    " but does not have objectclass " + OC_MATCHING_RULE +
-                    " that is required for a Directory Server matching " +
-                    "rule.  This configuration entry will be ignored");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_ATTR_DESCRIPTION_ENABLED,
-                    "Indicates whether this matching rule should be enabled " +
-                    "for use in the Directory Server.  This may be altered " +
-                    "while the Directory Server is online, but if a matching " +
-                    "rule is disabled, after it has been used for one or " +
-                    "more attributes then matching may no longer function " +
-                    "as expected for those attributes");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_NO_ENABLED_ATTR,
-                    "Matching rule configuration entry %s does not contain " +
-                    "attribute " + ATTR_MATCHING_RULE_ENABLED + ", which is " +
-                    "used to indicate whether the matching rule should be " +
-                    "enabled or disabled.  Without this attribute, it will " +
-                    "default to being disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_DISABLED,
-                    "The matching rule defined in configuration entry " +
-                    "%s is marked as disabled and therefore will not be " +
-                    "used.  If it has been used in the past for one or more " +
-                    "attributes, then matching may no longer function for " +
-                    "values of those attributes");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_UNABLE_TO_DETERMINE_ENABLED_STATE,
-                    "An unexpected error occurred while attempting to " +
-                    "determine whether the matching rule associated with " +
-                    "configuration entry %s should be enabled or disabled:  " +
-                    "%s.  It will be disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_ATTR_DESCRIPTION_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that should provide the core logic for this matching " +
-                    "rule implementation.  Changes to this configuration " +
-                    "attribute will not take effect until the matching rule " +
-                    "is disabled and re-enabled or the server is " +
-                    "restarted.  Also, changes to the matching rule class " +
-                    "for matching rules that have already been used for one " +
-                    "or more attributes may cause unexpected results when " +
-                    "performing matching for those attributes");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_NO_CLASS_ATTR,
-                    "Matching rule configuration entry %s does not contain " +
-                    "attribute " + ATTR_MATCHING_RULE_CLASS + ", which is " +
-                    "used to specify the name of the class used to provide " +
-                    "the matching rule implementation.  The matching rule " +
-                    "associated with this configuration entry will be " +
-                    "disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_CANNOT_GET_CLASS,
-                    "An unexpected error occurred while trying to determine " +
-                    "the name of the Java class that contains the " +
-                    "implementation for matching rule %s:  %s.  This " +
-                    "matching rule will be disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_CANNOT_INSTANTIATE,
-                    "The Directory Server was unable to load class %s and " +
-                    "use it to create a matching rule instance as defined in " +
-                    "configuration entry %s.  The error that occurred was:  " +
-                    "%s.  This matching rule will be disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_CANNOT_INITIALIZE,
-                    "An error occurred while trying to initialize a matching " +
-                    "rule loaded from class %s with the information in " +
-                    "configuration entry %s:  %s.  This matching rule will " +
-                    "be disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_CONFLICTING_MR,
-                    "The matching rule defined in configuration entry %s " +
-                    "conflicts with another matching rule defined in the " +
-                    "server configuration:  %s.  This matching rule will not " +
-                    "be used");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT,
-                    "Matching rule %s cannot be deleted from the server " +
-                    "because it is in use by attribute type %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_MRU,
-                    "Matching rule %s cannot be deleted from the server " +
-                    "because it is in use by matching rule use %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT,
-                    "Matching rule %s cannot be disabled because it is in " +
-                    "use by attribute type %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_MRU,
-                    "Matching rule %s cannot be disabled because it is in " +
-                    "use by matching rule use %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_MR_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the matching rule defined in " +
-                    "configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_GET_SYNTAX_BASE,
-                    "An error occurred while trying to retrieve " +
-                    "configuration entry " + DN_SYNTAX_CONFIG_BASE +
-                    " in order to initialize the Directory Server attribute " +
-                    "syntaxes:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_BASE_DOES_NOT_EXIST,
-                    "The entry " + DN_SYNTAX_CONFIG_BASE +
-                    " does not appear to exist in the Directory Server " +
-                    "configuration.  This is a required entry");
-    registerMessage(MSGID_CONFIG_SCHEMA_NO_SYNTAXES,
-                    "No child entries were found below the entry " +
-                    DN_SYNTAX_CONFIG_BASE + " to define the attribute " +
-                    "syntaxes for use in the Directory Server.  This is an " +
-                    "error, because the Directory Server must have syntaxes " +
-                    "defined to function properly");
-    registerMessage(MSGID_CONFIG_SCHEMA_ENTRY_DOES_NOT_HAVE_SYNTAX_CONFIG,
-                    "Configuration entry %s exists below the attribute " +
-                    "syntax configuration root of " + DN_SYNTAX_CONFIG_BASE +
-                    " but does not have objectclass " + OC_ATTRIBUTE_SYNTAX +
-                    " that is required for a Directory Server attribute " +
-                    "syntax.  This configuration entry will be ignored");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_ATTR_DESCRIPTION_ENABLED,
-                    "Indicates whether this attribute syntax should be " +
-                    "enabled for use in the Directory Server.  This may be " +
-                    "altered while the Directory Server is online, but if a " +
-                    "syntax is disabled, after it has been used for one or " +
-                    "more attributes then matching may no longer function " +
-                    "as expected for those attributes");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_NO_ENABLED_ATTR,
-                    "Attribute syntax configuration entry %s does not " +
-                    "contain attribute " + ATTR_SYNTAX_ENABLED + ", which is " +
-                    "used to indicate whether the syntax should be enabled " +
-                    "or disabled.  Without this attribute, it will default " +
-                    "to being disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_DISABLED,
-                    "The attribute syntax defined in configuration entry " +
-                    "%s is marked as disabled and therefore will not be " +
-                    "used.  If it has been used in the past for one or more " +
-                    "attributes, then matching may no longer function for " +
-                    "values of those attributes");
-    registerMessage(
-         MSGID_CONFIG_SCHEMA_SYNTAX_UNABLE_TO_DETERMINE_ENABLED_STATE,
-         "An unexpected error occurred while attempting to determine whether " +
-         "the attribute syntax associated with configuration entry %s should " +
-         "be enabled or disabled:  %s.  It will be disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_ATTR_DESCRIPTION_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that should provide the core logic for this attribute " +
-                    "syntax implementation.  Changes to this configuration " +
-                    "attribute will not take effect until the syntax is " +
-                    "disabled and re-enabled or the server is restarted.  " +
-                    "Also, changes to the syntax class for attribute " +
-                    "syntaxes that have already been used for one or more " +
-                    "attributes may cause unexpected results when performing " +
-                    "matching for those attributes");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_NO_CLASS_ATTR,
-                    "Matching rule configuration entry %s does not contain " +
-                    "attribute " + ATTR_SYNTAX_CLASS + ", which is used to " +
-                    "specify the name of the class used to provide the " +
-                    "attribute syntax implementation.  The syntax associated " +
-                    "with this configuration entry will be disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_CANNOT_GET_CLASS,
-                    "An unexpected error occurred while trying to determine " +
-                    "the name of the Java class that contains the " +
-                    "implementation for attribute syntax %s:  %s.  This " +
-                    "syntax will be disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_CANNOT_INSTANTIATE,
-                    "The Directory Server was unable to load class %s and " +
-                    "use it to create an attribute syntax instance as " +
-                    "defined in configuration entry %s.  The error that " +
-                    "occurred was:  %s.  This syntax will be disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_CANNOT_INITIALIZE,
-                    "An error occurred while trying to initialize an " +
-                    "attribute syntax loaded from class %s with the " +
-                    "information in configuration entry %s:  %s.  This " +
-                    "syntax will be disabled");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX,
-                    "The attribute syntax defined in configuration entry %s " +
-                    "conflicts with another syntax defined in the server " +
-                    "configuration:  %s.  This attribute syntax will not be " +
-                    "used");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_DELETE_SYNTAX_IN_USE,
-                    "Attribute syntax %s cannot be deleted from the server " +
-                    "because it is in use by attribute type %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_DISABLE_SYNTAX_IN_USE,
-                    "Attribute syntax %s cannot be disabled because it is in " +
-                    "use by attribute type %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_SYNTAX_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the attribute syntax defined in " +
-                    "configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_SCHEMA_NO_SCHEMA_DIR,
-                    "Unable to read the Directory Server schema definitions " +
-                    "because the schema directory %s does not exist");
-    registerMessage(MSGID_CONFIG_SCHEMA_DIR_NOT_DIRECTORY,
-                    "Unable to read the Directory Server schema definitions " +
-                    "because the schema directory %s exists but is not a " +
-                    "directory");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_LIST_FILES,
-                    "Unable to read the Directory Server schema definitions " +
-                    "from directory %s because an unexpected error occurred " +
-                    "while trying to list the files in that directory:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_OPEN_FILE,
-                    "Schema configuration file %s in directory %s cannot be " +
-                    "parsed because an unexpected error occurred while " +
-                    "trying to open the file for reading:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_READ_LDIF_ENTRY,
-                    "Schema configuration file %s in directory %s cannot be " +
-                    "parsed because an unexpected error occurred while " +
-                    "trying to read its contents as an LDIF entry:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_MULTIPLE_ENTRIES_IN_FILE,
-                    "Schema configuration file %s in directory %s contains " +
-                    "more than one entry.  Only the first entry will be " +
-                    "examined, and the additional entries will be ignored");
-    registerMessage(MSGID_CONFIG_SCHEMA_UNPARSEABLE_EXTRA_DATA_IN_FILE,
-                    "Schema configuration file %s in directory %s contains " +
-                    "additional data after the schema entry that cannot be " +
-                    "parsed by the LDIF reader:  %s.  The first entry will " +
-                    "be processed, but the remaining data will be ignored");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE,
-                    "Unable to parse an attribute type definition from " +
-                    "schema configuration file %s:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CONFLICTING_ATTR_TYPE,
-                    "An attribute type read from schema configuration file " +
-                    "%s conflicts with another attribute type already read " +
-                    "into the schema:  %s.  The later attribute type " +
-                    "definition will be used");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_PARSE_OC,
-                    "Unable to parse an objectclass definition from schema " +
-                    "configuration file %s:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CONFLICTING_OC,
-                    "An objectclass read from schema configuration file %s " +
-                    "conflicts with another objectclass already read into " +
-                    "the schema:  %s.  The later objectclass definition will " +
-                    "be used");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM,
-                    "Unable to parse a name form definition from schema " +
-                    "configuration file %s:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CONFLICTING_NAME_FORM,
-                    "A name form read from schema configuration file %s " +
-                    "conflicts with another name form already read into " +
-                    "the schema:  %s.  The later name form definition will " +
-                    "be used");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_PARSE_DCR,
-                    "Unable to parse a DIT content rule definition from " +
-                    "schema configuration file %s:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CONFLICTING_DCR,
-                    "A DIT content rule read from schema configuration file " +
-                    "%s conflicts with another DIT content rule already read " +
-                    "into the schema:  %s.  The later DIT content rule " +
-                    "definition will be used");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_PARSE_DSR,
-                    "Unable to parse a DIT structure rule definition from " +
-                    "schema configuration file %s:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CONFLICTING_DSR,
-                    "A DIT structure rule read from schema configuration " +
-                    "file %s conflicts with another DIT structure rule " +
-                    "already read into the schema:  %s.  The later DIT " +
-                    "structure rule definition will be used");
-    registerMessage(MSGID_CONFIG_SCHEMA_CANNOT_PARSE_MRU,
-                    "Unable to parse a matching rule use definition from " +
-                    "schema configuration file %s:  %s");
-    registerMessage(MSGID_CONFIG_SCHEMA_CONFLICTING_MRU,
-                    "A matching rule use read from schema configuration " +
-                    "file %s conflicts with another matching rule use " +
-                    "already read into the schema:  %s.  The later matching " +
-                    "rule use definition will be used");
-
-
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_CANNOT_INSTALL_DEFAULT_CACHE,
-                    "An unexpected error occurred that prevented the server " +
-                    "from installing a temporary default entry cache for " +
-                    "use until the actual cache could be created from the " +
-                    "configuration:  %s");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_CANNOT_GET_CONFIG_ENTRY,
-                    "An unexpected error occurred while attempting to get " +
-                    "the \"" + DN_ENTRY_CACHE_CONFIG + "\" entry, which " +
-                    "holds the entry cache configuration:  %s.  No entry " +
-                    "cache will be available");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_NO_CONFIG_ENTRY,
-                    "The entry cache configuration entry \"" +
-                    DN_ENTRY_CACHE_CONFIG + "\" does not exist in the " +
-                    "Directory Server configuration.  No entry cache will " +
-                    "be available until this entry is created with a valid " +
-                    "entry cache configuration");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_CANNOT_REGISTER_ADD_LISTENER,
-                    "An error occurred while attempting to register an " +
-                    "add listener to watch for the entry cache configuration " +
-                    "entry to be created:  %s.  If an entry cache " +
-                    "configuration is added while the server is online, it " +
-                    "will not be detected until the server is restarted");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_CANNOT_REGISTER_DELETE_LISTENER,
-                    "An error occurred while attempting to register a " +
-                    "delete listener to watch for the entry cache " +
-                    "configuration entry to be deleted: %s.  If the entry " +
-                    "cache configuration entry is deleted while the server " +
-                    "is online, it will not be detected until the server is " +
-                    "restarted");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_DESCRIPTION_CACHE_ENABLED,
-                    "Indicates whether the Directory Server entry cache " +
-                    "should be enabled.  If the entry cache is enabled, it " +
-                    "may significantly improve performance by allowing " +
-                    "previously-accessed entries to be retrieved from memory " +
-                    "rather than needing to access the backend repository.  " +
-                    "Changes to this configuration attribute will take " +
-                    "effect immediately, but will have the side effect " +
-                    "of clearing the cache contents, which may result in " +
-                    "degraded performance for a period of time");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_NO_ENABLED_ATTR,
-                    "Configuration entry \"" + DN_ENTRY_CACHE_CONFIG +
-                    "\" does not contain a value for attribute " +
-                    ATTR_ENTRYCACHE_ENABLED + ", which indicates whether " +
-                    "the entry cache is enabled for use in the server.  As a " +
-                    "result, the cache will be disabled");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_DISABLED,
-                    "The Directory Server entry cache configured in entry \"" +
-                    DN_ENTRY_CACHE_CONFIG + "\" has been disabled.  No entry " +
-                    "cache will be available within the server");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_UNABLE_TO_DETERMINE_ENABLED_STATE,
-                    "An unexpected error occurred while attempting to " +
-                    "determine whether the entry cache configured in entry \"" +
-                    DN_ENTRY_CACHE_CONFIG + "\" is enabled:  %s.  As a " +
-                    "result, the entry cache will be disabled");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_DESCRIPTION_CACHE_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that should provide the entry cache implementation.  " +
-                    "Changes to this configuration attribute will take " +
-                    "effect immediately, but will have the side effect of " +
-                    "clearing the cache contents, which may result in " +
-                    "degraded performance for a period of time");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_NO_CLASS_ATTR,
-                    "Configuration entry \"" + DN_ENTRY_CACHE_CONFIG +
-                    "\" does not contain a value for attribute " +
-                    ATTR_ENTRYCACHE_CLASS + "\", which specifies the class " +
-                    "name for the entry cache implementation.  As a result, " +
-                    "the entry cache will be disabled");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_CANNOT_DETERMINE_CLASS,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_ENTRYCACHE_CLASS +
-                    " attribute in configuration entry \"" +
-                    DN_ENTRY_CACHE_CONFIG + "\":  %s.  The entry cache will " +
-                    "be disabled");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_CANNOT_LOAD_CLASS,
-                    "The class %s defined in attribute " +
-                    ATTR_ENTRYCACHE_CLASS + " of configuration entry \"" +
-                    DN_ENTRY_CACHE_CONFIG + "\" could not be loaded:  %s.  " +
-                    "The entry cache will be disabled");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_CANNOT_INSTANTIATE_CLASS,
-                    "The class %s defined in attribute " +
-                    ATTR_ENTRYCACHE_CLASS + " of configuration entry \"" +
-                    DN_ENTRY_CACHE_CONFIG + "\" could not be instantiated " +
-                    "as a Directory Server entry cache:  %s.  As a result, " +
-                    "the entry cache will be disabled");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_CANNOT_INITIALIZE_CACHE,
-                    "An error occurred while attempting to initialize " +
-                    "an instance of class %s for use as the Directory Server " +
-                    "entry cache:  %s.  As a result, the entry cache will be " +
-                    "disabled");
-    registerMessage(MSGID_CONFIG_ENTRYCACHE_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the entry cache defined in " +
-                    "configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_LOGGER_NO_ROTATION_POLICY,
-                    "No file rotation policy has been defined in " +
-                    "configuration entry %s. No log rotation will take place");
-    registerMessage(MSGID_CONFIG_LOGGER_INVALID_ROTATION_POLICY,
-                    "An invalid file rotation policy %s has been defined in " +
-                    "configuration entry %s");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_SIZE_LIMIT,
-                    "No size limit has been defined for the size based file " +
-                    "rotation policy in the configuration entry %s");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_TIME_LIMIT,
-                    "No time limit has been defined for the time based file " +
-                    "rotation policy in the configuration entry %s");
-
-    registerMessage(MSGID_CONFIG_LOGGER_NO_RETENTION_POLICY,
-                    "No file retention policy has been defined in " +
-                    "configuration entry %s. No log files will be deleted");
-    registerMessage(MSGID_CONFIG_LOGGER_INVALID_RETENTION_POLICY,
-                    "An invalid file retention policy %s has been defined in " +
-                    "configuration entry %s");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_NUMBER_OF_FILES,
-                    "No file number limit has been defined for the " +
-                    "retention policy in the configuration entry %s");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_DISK_SPACE_USED,
-                    "No disk space limit has been defined for the " +
-                    "retention policy in the configuration entry %s");
-    registerMessage(MSGID_CONFIG_LOGGER_NO_FREE_DISK_SPACE,
-                    "No disk space limit has been defined for the " +
-                    "retention policy in the configuration entry %s");
-    registerMessage(MSGID_CONFIG_LOGGER_INVALID_JAVA5_POLICY,
-                    "The free disk space based retention policy " +
-                    "in the configuration entry %s. is not allowed for " +
-                    "the Directory Server when running on pre Java 6 VMs");
-
-    registerMessage(MSGID_CONFIG_PLUGIN_CANNOT_GET_CONFIG_BASE,
-                    "An error occurred while trying to retrieve " +
-                    "configuration entry " + DN_PLUGIN_BASE + " in order to " +
-                    "initialize the Directory Server plugins:  %s");
-    registerMessage(MSGID_CONFIG_PLUGIN_BASE_DOES_NOT_EXIST,
-                    "The entry " + DN_PLUGIN_BASE +  " does not appear to " +
-                    "exist in the Directory Server configuration.  This is a " +
-                    "required entry");
-    registerMessage(MSGID_CONFIG_PLUGIN_ENTRY_DOES_NOT_HAVE_PLUGIN_CONFIG,
-                    "Configuration entry %s exists below the plugin " +
-                    "configuration root of " + DN_PLUGIN_BASE + " but does " +
-                    "not have objectclass " + OC_BACKEND + " that is " +
-                    "required for a Directory Server plugin.  This " +
-                    "configuration entry will be ignored");
-    registerMessage(MSGID_CONFIG_PLUGIN_ERROR_INTERACTING_WITH_PLUGIN_ENTRY,
-                    "An unexpected error occurred while interacting with " +
-                    "backend configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_PLUGIN_ATTR_DESCRIPTION_ENABLED,
-                    "Indicates whether this plugin should be enabled for " +
-                    "use in the Directory Server.  This may be altered while " +
-                    "the Directory Server is online, and will take effect " +
-                    "immediately");
-    registerMessage(MSGID_CONFIG_PLUGIN_NO_ENABLED_ATTR,
-                    "Plugin configuration entry %s does not contain " +
-                    "attribute " + ATTR_PLUGIN_ENABLED + ", which is used " +
-                    "to indicate whether the plugin should be enabled or " +
-                    "disabled.  Without this attribute, it will default to " +
-                    "being disabled");
-    registerMessage(MSGID_CONFIG_PLUGIN_DISABLED,
-                    "The plugin defined in configuration entry %s is " +
-                    "marked as disabled and therefore will not be used");
-    registerMessage(MSGID_CONFIG_PLUGIN_UNABLE_TO_DETERMINE_ENABLED_STATE,
-                    "An unexpected error occurred while attempting to " +
-                    "determine whether the plugin associated with " +
-                    "configuration entry %s should be enabled or disabled:  " +
-                    "%s.  It will be disabled");
-    registerMessage(MSGID_CONFIG_PLUGIN_ATTR_DESCRIPTION_PLUGIN_TYPE,
-                    "Specifies the plugin type(s) for this plugin, which "+
-                    "control the times when this plugin will be invoked " +
-                    "during processing.  This value is only read when " +
-                    "the plugin is loaded and initialized, so changes to " +
-                    "this attribute will not take effect until the plugin " +
-                    "is disabled and re-enabled, or until the server is " +
-                    "restarted");
-    registerMessage(MSGID_CONFIG_PLUGIN_NO_PLUGIN_TYPES,
-                    "Plugin configuration entry %s does not contain " +
-                    "attribute " + ATTR_PLUGIN_TYPE + ", which is used to " +
-                    "specify the name(s) of the plugin type(s) for the " +
-                    "plugin.  This is a required attribute, so this plugin " +
-                    "will be disabled");
-    registerMessage(MSGID_CONFIG_PLUGIN_INVALID_PLUGIN_TYPE,
-                    "Plugin configuration entry %s has an invalid value %s " +
-                    "for attribute " + ATTR_PLUGIN_TYPE + " that does not " +
-                    "name a valid plugin type.  This plugin will be disabled");
-    registerMessage(MSGID_CONFIG_PLUGIN_CANNOT_GET_PLUGIN_TYPES,
-                    "An unexpected error occurred while trying to " +
-                    "determine the set of plugin types for the plugin " +
-                    "defined in configuration entry %s:  %s.  This plugin " +
-                    "will be disabled");
-    registerMessage(MSGID_CONFIG_PLUGIN_ATTR_DESCRIPTION_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that should provide the core logic for this plugin " +
-                    "implementation.  Changes to this configuration " +
-                    "attribute will not take effect until the plugin is "+
-                    "disabled and re-enabled or the server is restarted");
-    registerMessage(MSGID_CONFIG_PLUGIN_NO_CLASS_ATTR,
-                    "Plugin configuration entry %s does not contain " +
-                    "attribute " + ATTR_PLUGIN_CLASS + ", which is used to " +
-                    "specify the name of the class used to provide the " +
-                    "plugin implementation.  The plugin associated with " +
-                    "this configuration entry will be disabled");
-    registerMessage(MSGID_CONFIG_PLUGIN_CANNOT_GET_CLASS,
-                    "An unexpected error occurred while trying to determine " +
-                    "the name of the Java class that contains the " +
-                    "implementation for plugin %s:  %s.  This plugin will " +
-                    "be disabled");
-    registerMessage(MSGID_CONFIG_PLUGIN_CANNOT_INSTANTIATE,
-                    "The Directory Server was unable to load class %s and " +
-                    "use it to create a plugin instance as defined in " +
-                    "configuration entry %s.  The error that occurred was:  " +
-                    "%s.  This plugin will be disabled");
-    registerMessage(MSGID_CONFIG_PLUGIN_CANNOT_INITIALIZE,
-                    "An error occurred while attempting to initialize an " +
-                    "instance of class %s as a Directory Server plugin using " +
-                    "the information in configuration entry %s:  %s.  This " +
-                    "plugin will be disabled");
-    registerMessage(MSGID_CONFIG_PLUGIN_EMPTY_ELEMENT_IN_ORDER,
-                    "The plugin order definition for plugins of type %s " +
-                    "contains an empty element.  This may cause the plugin " +
-                    "order to be evaluated incorrectly");
-    registerMessage(MSGID_CONFIG_PLUGIN_MULTIPLE_WILDCARDS_IN_ORDER,
-                    "The plugin order definition for plugins of type %s " +
-                    "contains multiple wildcard characters.  All plugin " +
-                    "definitions should contain exactly one wildcard element " +
-                    "to indicate where unmatched plugins should be included " +
-                    "in the order, and including multiple wildcards may " +
-                    "cause the plugin order to be evaluated incorrectly");
-    registerMessage(MSGID_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES,
-                    "The plugin order definition for plugins of type %s " +
-                    "includes multiple references to the '%s' plugin.  This " +
-                    "may cause the plugin order to be evaluated incorrectly");
-    registerMessage(MSGID_CONFIG_PLUGIN_ORDER_NO_WILDCARD,
-                    "The plugin order definition for plugins of type %s " +
-                    "does not include a wildcard element to indicate where " +
-                    "unmatched plugins should be included in the order.  The " +
-                    "server will default to invoking all unnamed plugins " +
-                    "after set of named plugins");
-    registerMessage(MSGID_CONFIG_PLUGIN_CLASS_ACTION_REQUIRED,
-                    "The requested change in the plugin class name from %s " +
-                    "to %s in configuration entry %s cannot be dynamically " +
-                    "applied.  This change will not take effect until the " +
-                    "plugin is disabled and re-enabled or the Directory " +
-                    "Server is restarted");
-    registerMessage(MSGID_CONFIG_PLUGIN_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the plugin defined in " +
-                    "configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_EXTOP_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid extended operation handler " +
-                    "implementation:  %s");
-    registerMessage(MSGID_CONFIG_EXTOP_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as an extended operation handler " +
-                    "as defined in configuration entry %s:  %s");
-
-
-    registerMessage(MSGID_CONFIG_SASL_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the SASL " +
-                    "mechanism handler base entry " +
-                    DN_SASL_CONFIG_BASE +
-                    " from the Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_SASL_BASE_DOES_NOT_EXIST,
-                    "The SASL mechanism configuration base " +
-                    DN_SASL_CONFIG_BASE + " does not exist in the " +
-                    "Directory Server configuration.  This entry must be " +
-                    "present for the server to function properly");
-    registerMessage(MSGID_CONFIG_SASL_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid SASL " +
-                    "mechanism handler configuration:  %s.  It will be " +
-                    "ignored");
-    registerMessage(MSGID_CONFIG_SASL_CANNOT_CREATE_HANDLER,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server SASL mechanism handler from the " +
-                    "information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_SASL_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_SASL_MECHANISM_HANDLER + " objectclass, which is " +
-                    "required for SASL mechanism handler definitions");
-    registerMessage(MSGID_CONFIG_SASL_DESCRIPTION_CLASS_NAME,
-                    "The fully-qualified name of the Java class that defines " +
-                    "the Directory Server SASL mechanism handler.  If this " +
-                    "is altered while the associated handler is enabled, " +
-                    "then that handler must be disabled and re-enabled for " +
-                    "the change to take effect");
-    registerMessage(MSGID_CONFIG_SASL_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_SASL_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated SASL mechanism handler");
-    registerMessage(MSGID_CONFIG_SASL_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_SASL_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_SASL_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid SASL mechanism handler implementation:  " +
-                    "%s");
-    registerMessage(MSGID_CONFIG_SASL_DESCRIPTION_ENABLED,
-                    "Indicates whether this Directory Server SASL mechanism " +
-                    "handler should be enabled.  Changes to this attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_CONFIG_SASL_NO_ENABLED_ATTR,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_SASL_ENABLED +
-                    " which indicates whether the SASL mechanism handler " +
-                    "should be enabled for use in the Directory Server");
-    registerMessage(MSGID_CONFIG_SASL_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_SASL_ENABLED + ":  %s");
-    registerMessage(MSGID_CONFIG_SASL_CLASS_ACTION_REQUIRED,
-                    "The requested change in the SASL mechanism handler " +
-                    "class name from %s to %s in configuration entry %s " +
-                    "cannot be dynamically applied.  This change will not " +
-                    "take effect until the handler is disabled and " +
-                    "re-enabled or the Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_SASL_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as a SASL mechanism handler as " +
-                    "defined in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_SASL_EXISTS,
-                    "Unable to add a new SASL mechanism handler entry with " +
-                    "DN %s because there is already a handler registered " +
-                    "with that DN");
-    registerMessage(MSGID_CONFIG_SASL_UNACCEPTABLE_CONFIG,
-                    "The configuration for the SASL mechanism handler " +
-                    "defined in configuration entry %s was not acceptable " +
-                    "according to its internal validation.  However, no " +
-                    "specific information is available regarding the " +
-                    "problem(s) with the entry");
-    registerMessage(MSGID_CONFIG_SASL_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the SASL mechanism handler " +
-                    "defined in configuration entry %s was not acceptable:  " +
-                    "%s");
-
-
-    registerMessage(MSGID_CONFIG_LOGGER_INVALID_SUPPRESS_INT_OPERATION_VALUE,
-        "Invalid value specified for attribute %s. " +
-        "Allowed values are true or false");
-    registerMessage(MSGID_CONFIG_LOGGER_SUPPRESS_INTERNAL_OPERATIONS,
-                    "Indicates whether messages for internal operations " +
-                    "should be excluded from the access log file");
-
-
-    registerMessage(MSGID_CONFIG_KEYMANAGER_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the key " +
-                    "manager provider base entry " +
-                    DN_KEYMANAGER_PROVIDER_CONFIG_BASE +
-                    " from the Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_BASE_DOES_NOT_EXIST,
-                    "The key manager provider configuration base " +
-                    DN_KEYMANAGER_PROVIDER_CONFIG_BASE + " does not exist in " +
-                    "the Directory Server configuration.  This entry must be " +
-                    "present for the server to function properly");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid key " +
-                    "manager provider configuration:  %s.  It will be " +
-                    "ignored");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_CANNOT_CREATE_PROVIDER,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server key manager provider from the " +
-                    "information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_KEY_MANAGER_PROVIDER + " objectclass, which is " +
-                    "required for key manager provider definitions");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_KEYMANAGER_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated key manager provider");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_KEYMANAGER_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid key manager provider implementation:  " +
-                    "%s");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_DESCRIPTION_ENABLED,
-                    "Indicates whether the Directory Server key manager " +
-                    "provider should be enabled.  A key manager provider is " +
-                    "required for operations that require access to a " +
-                    "key manager (e.g., communication over SSL).  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately, but will only impact future attempts to " +
-                    "access the key manager");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_NO_ENABLED_ATTR,
-                    "Configuration entry \"%s\" does not contain a value for " +
-                    "attribute " + ATTR_KEYMANAGER_ENABLED +
-                    ", which indicates whether the key manager provider is " +
-                    "enabled for use in the server");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_KEYMANAGER_ENABLED + ":  %s");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_DESCRIPTION_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that includes the key manager provider implementation.  " +
-                    "Changes to this configuration attribute will not take " +
-                    "effect until the key manager provider has been disabled " +
-                    "and then re-enabled, or until the server is restarted");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_CLASS_ACTION_REQUIRED,
-                    "The requested change in the key manager provider class " +
-                    "name from %s to %s in configuration entry %s cannot be " +
-                    "dynamically applied.  This change will not take effect " +
-                    "until the provider is disabled and re-enabled or the " +
-                    "Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as a key manager provider as " +
-                    "defined in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_EXISTS,
-                    "Unable to add a new key manager provider entry with DN " +
-                    "%s because there is already a provider registered with " +
-                    "that DN");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_UNACCEPTABLE_CONFIG,
-                    "The configuration for the key manager provider defined " +
-                    "in configuration entry %s was not acceptable according " +
-                    "to its internal validation.  However, no specific " +
-                    "information is available regarding the problem(s) with " +
-                    "the entry");
-    registerMessage(MSGID_CONFIG_KEYMANAGER_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the key manager provider defined " +
-                    "in configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "trust manager provider base entry " +
-                    DN_TRUSTMANAGER_PROVIDER_CONFIG_BASE +
-                    " from the Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_BASE_DOES_NOT_EXIST,
-                    "The trust manager provider configuration base " +
-                    DN_TRUSTMANAGER_PROVIDER_CONFIG_BASE + " does not exist " +
-                    "in the Directory Server configuration.  This entry must " +
-                    "be present for the server to function properly");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid trust " +
-                    "manager provider configuration:  %s.  It will be " +
-                    "ignored");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_CANNOT_CREATE_PROVIDER,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server trust manager provider from the " +
-                    "information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_TRUST_MANAGER_PROVIDER + " objectclass, which is " +
-                    "required for trust manager provider definitions");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_TRUSTMANAGER_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated trust manager provider");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_TRUSTMANAGER_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid trust manager provider implementation:  " +
-                    "%s");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_DESCRIPTION_ENABLED,
-                    "Indicates whether the Directory Server trust manager " +
-                    "provider should be enabled.  A trust manager provider " +
-                    "is required for operations that require access to a " +
-                    "trust manager (e.g., communication over SSL).  Changes " +
-                    "to this configuration attribute will take effect " +
-                    "immediately, but will only impact future attempts to " +
-                    "access the trust manager");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_NO_ENABLED_ATTR,
-                    "Configuration entry \"%s\" does not contain a value for " +
-                    "attribute " + ATTR_TRUSTMANAGER_ENABLED +
-                    ", which indicates whether the trust manager provider is " +
-                    "enabled for use in the server");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_TRUSTMANAGER_ENABLED + ":  %s");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_DESCRIPTION_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that includes the trust manager provider " +
-                    "implementation.  Changes to this configuration " +
-                    "attribute will not take effect until the trust manager " +
-                    "provider has been disabled and then re-enabled, or " +
-                    "until the server is restarted");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_CLASS_ACTION_REQUIRED,
-                    "The requested change in the trust manager provider " +
-                    "class name from %s to %s in configuration entry %s " +
-                    "cannot be dynamically applied.  This change will not " +
-                    "take effect until the provider is disabled and " +
-                    "re-enabled or the Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as a trust manager provider as " +
-                    "defined in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_EXISTS,
-                    "Unable to add a new trust manager provider entry with " +
-                    "DN %s because there is already a provider registered " +
-                    "with that DN");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_UNACCEPTABLE_CONFIG,
-                    "The configuration for the trust manager provider " +
-                    "defined in configuration entry %s was not acceptable " +
-                    "according to its internal validation.  However, no " +
-                    "specific information is available regarding the " +
-                    "problem(s) with the entry");
-    registerMessage(MSGID_CONFIG_TRUSTMANAGER_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the trust manager provider " +
-                    "defined in configuration entry %s was not acceptable:  " +
-                    "%s");
-
-
-    registerMessage(MSGID_CONFIG_CERTMAPPER_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "certificate mapper base entry " +
-                    DN_CERTMAPPER_CONFIG_BASE +
-                    " from the Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_BASE_DOES_NOT_EXIST,
-                    "The certificate mapper configuration base " +
-                    DN_CERTMAPPER_CONFIG_BASE + " does not exist in the " +
-                    "Directory Server configuration.  This entry must be " +
-                    "present for the server to function properly");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid " +
-                    "certificate mapper configuration:  %s.  It will be " +
-                    "ignored");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_CANNOT_CREATE_MAPPER,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server certificate mapper from the " +
-                    "information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_CERTIFICATE_MAPPER + " objectclass, which is required " +
-                    "for certificate mapper definitions");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_CERTMAPPER_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated certificate mapper");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_CERTMAPPER_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid certificate mapper implementation:  %s");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_DESCRIPTION_ENABLED,
-                    "Indicates whether the Directory Server certificate " +
-                    "mapper should be enabled.  A certificate mapper is " +
-                    "used to establish a mapping between a client " +
-                    "certificate chain and a user entry in the Directory " +
-                    "Server for SASL EXTERNAL authentication and similar " +
-                    "purposes.  Changes to this configuration attribute will " +
-                    "take effect immediately");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_NO_ENABLED_ATTR,
-                    "Configuration entry \"%s\" does not contain a value for " +
-                    "attribute " + ATTR_CERTMAPPER_ENABLED +
-                    ", which indicates whether the certificate mapper is " +
-                    "enabled for use in the server");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_CERTMAPPER_ENABLED + ":  %s");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_DESCRIPTION_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that includes the certificate mapper implementation.  " +
-                    "Changes to this configuration attribute will not take " +
-                    "effect until the certificate mapper has been disabled " +
-                    "and then re-enabled, or until the server is restarted");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_CLASS_ACTION_REQUIRED,
-                    "The requested change in the certificate mapper class " +
-                    "name from %s to %s in configuration entry %s cannot be " +
-                    "dynamically applied.  This change will not take effect " +
-                    "until the mapper is disabled and re-enabled or the " +
-                    "Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as a certificate mapper as defined " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_EXISTS,
-                    "Unable to add a new certificate mapper entry with DN %s " +
-                    "because there is already a mapper registered with that " +
-                    "DN");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_UNACCEPTABLE_CONFIG,
-                    "The configuration for the certificate mapper defined in " +
-                    "configuration entry %s was not acceptable according to " +
-                    "its internal validation.  However, no specific " +
-                    "information is available regarding the problem(s) with " +
-                    "the entry");
-    registerMessage(MSGID_CONFIG_CERTMAPPER_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the certificate mapper defined in " +
-                    "configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_PWSCHEME_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "password storage scheme base entry " +
-                    DN_PWSCHEME_CONFIG_BASE + " from the Directory Server " +
-                    "configuration:  %s");
-    registerMessage(MSGID_CONFIG_PWSCHEME_BASE_DOES_NOT_EXIST,
-                    "The password storage scheme configuration base " +
-                    DN_PWSCHEME_CONFIG_BASE + " does not exist in the " +
-                    "Directory Server configuration.  This entry must be " +
-                    "present for the server to function properly");
-    registerMessage(MSGID_CONFIG_PWSCHEME_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid " +
-                    "password storage scheme configuration:  %s.  It will be " +
-                    "ignored");
-    registerMessage(MSGID_CONFIG_PWSCHEME_CANNOT_CREATE_SCHEME,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server password storage scheme from the " +
-                    "information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_PWSCHEME_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_PASSWORD_STORAGE_SCHEME + " objectclass, which is " +
-                    "required for password storage scheme definitions");
-    registerMessage(MSGID_CONFIG_PWSCHEME_DESCRIPTION_CLASS_NAME,
-                    "The fully-qualified name of the Java class that defines " +
-                    "the Directory Server password storage scheme.  If this " +
-                    "is altered while the associated scheme is enabled, " +
-                    "then that storage scheme must be disabled and " +
-                    "re-enabled for the change to take effect");
-    registerMessage(MSGID_CONFIG_PWSCHEME_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_PWSCHEME_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated password storage scheme");
-    registerMessage(MSGID_CONFIG_PWSCHEME_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_PWSCHEME_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_PWSCHEME_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid password storage scheme " +
-                    "implementation:  %s");
-    registerMessage(MSGID_CONFIG_PWSCHEME_DESCRIPTION_ENABLED,
-                    "Indicates whether this Directory Server password " +
-                    "storage scheme should be enabled.  Changes to this " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_PWSCHEME_NO_ENABLED_ATTR,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_PWSCHEME_ENABLED +
-                    " which indicates whether the password storage scheme " +
-                    "should be enabled for use in the Directory Server");
-    registerMessage(MSGID_CONFIG_PWSCHEME_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_PWSCHEME_ENABLED + ":  %s");
-    registerMessage(MSGID_CONFIG_PWSCHEME_CLASS_ACTION_REQUIRED,
-                    "The requested change in the password storage scheme " +
-                    "class name from %s to %s in configuration entry %s " +
-                    "cannot be dynamically applied.  This change will not " +
-                    "take effect until the storage scheme is disabled and " +
-                    "re-enabled or the Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_PWSCHEME_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as a password storage scheme as " +
-                    "defined in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_PWSCHEME_EXISTS,
-                    "Unable to add a new password storage scheme entry with " +
-                    "DN %s because there is already a storage scheme " +
-                    "registered with that DN");
-    registerMessage(MSGID_CONFIG_PWSCHEME_UNACCEPTABLE_CONFIG,
-                    "The configuration for the password storage scheme " +
-                    "defined in configuration entry %s was not acceptable " +
-                    "according to its internal validation.  However, no " +
-                    "specific information is available regarding the " +
-                    "problem(s) with the entry");
-    registerMessage(MSGID_CONFIG_PWSCHEME_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the password storage scheme " +
-                    "defined in configuration entry %s was not acceptable:  " +
-                    "%s");
-
-
-    registerMessage(MSGID_CONFIG_BACKUP_CANNOT_GET_MAC,
-                    "An error occurred while attempting to obtain the %s MAC " +
-                    "provider to create the signed hash for the backup:  %s");
-    registerMessage(MSGID_CONFIG_BACKUP_CANNOT_GET_DIGEST,
-                    "An error occurred while attempting to obtain the %s " +
-                    "message digest to create the hash for the backup:  %s");
-    registerMessage(MSGID_CONFIG_BACKUP_CANNOT_CREATE_ARCHIVE_FILE,
-                    "An error occurred while trying to create the config " +
-                    "archive file %s in directory %s:  %s");
-    registerMessage(MSGID_CONFIG_BACKUP_CANNOT_GET_CIPHER,
-                    "An error occurred while attempting to obtain the %s " +
-                    "cipher to use to encrypt the backup:  %s");
-    registerMessage(MSGID_CONFIG_BACKUP_ZIP_COMMENT,
-                    "%s config backup %s");
-    registerMessage(MSGID_CONFIG_BACKUP_CANNOT_DETERMINE_CONFIG_FILE_LOCATION,
-                    "An error occurred while attempting to determine the " +
-                    "path to the Directory Server configuration file so that " +
-                    "it could be archived:  %s");
-    registerMessage(MSGID_CONFIG_BACKUP_CANNOT_BACKUP_CONFIG_FILE,
-                    "An error occurred while attempting to back up " +
-                    "configuration file %s:  %s");
-    registerMessage(MSGID_CONFIG_BACKUP_CANNOT_BACKUP_ARCHIVED_CONFIGS,
-                    "An error occurred while attempting to back up the " +
-                    "archived previous configurations from file %s:  %s");
-    registerMessage(MSGID_CONFIG_BACKUP_CANNOT_CLOSE_ZIP_STREAM,
-                    "An error occurred while trying to close the config " +
-                    "archive file %s in directory %s:  %s");
-    registerMessage(MSGID_CONFIG_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR,
-                    "An error occurred while attempting to update the backup " +
-                    "descriptor file %s with information about the " +
-                    "configuration backup:  %s");
-
-
-    registerMessage(MSGID_CONFIG_RESTORE_NO_SUCH_BACKUP,
-                    "Unable to restore or verify configuration backup %s in " +
-                    "directory %s because no such backup exists");
-    registerMessage(MSGID_CONFIG_RESTORE_NO_BACKUP_FILE,
-                    "Unable to restore or verify configuration backup %s in " +
-                    "directory %s because the archive filename could not be " +
-                    "determined");
-    registerMessage(MSGID_CONFIG_RESTORE_NO_SUCH_FILE,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because the specified archive file %s does not exist");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_CHECK_FOR_ARCHIVE,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because an error occurred while trying to determine " +
-                    "whether backup archive %s exists:  %s");
-    registerMessage(MSGID_CONFIG_RESTORE_UNKNOWN_DIGEST,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because an unsigned hash of this backup is available " +
-                    "but the server cannot determine the digest algorithm " +
-                    "used to generate this hash");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_GET_DIGEST,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because it has an unsigned hash that uses an unknown or " +
-                    "unsupported digest algorithm of %s");
-    registerMessage(MSGID_CONFIG_RESTORE_UNKNOWN_MAC,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because a signed hash of this backup is available but " +
-                    "the server cannot determine the MAC algorithm used to " +
-                    "generate this hash");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_GET_MAC,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because it has a signed hash that uses an unknown or " +
-                    "unsupported MAC algorithm of %s");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_OPEN_BACKUP_FILE,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because an error occurred while attempting to open the " +
-                    "backup archive file %s:  %s");
-    registerMessage(MSGID_CONFIG_RESTORE_UNKNOWN_CIPHER,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because it is encrypted but the server cannot determine " +
-                    "the cipher used to perform this encryption");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_GET_CIPHER,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because it is encrypted using an unknown or unsupported " +
-                    "cipher of %s");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_BACKUP_EXISTING_CONFIG,
-                    "Unable to restore configuration backup %s because an " +
-                    "error occurred while attempting to temporarily back up " +
-                    "the current configuration files from %s to %s:  %s");
-    registerMessage(MSGID_CONFIG_RESTORE_RESTORED_OLD_CONFIG,
-                    "An error occurred that prevented the configuration " +
-                    "backup from being properly restored.  However, the " +
-                    "original configuration files that were in place before " +
-                    "the start of the restore process have been preserved " +
-                    "and are now in their original location of %s");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_RESTORE_OLD_CONFIG,
-                    "An error occurred that prevented the configuration " +
-                    "backup from being properly restored.  The original " +
-                    "configuration files that were in place before the start " +
-                    "of the restore process have been preserved and are " +
-                    "contained in the %s directory");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_CREATE_CONFIG_DIRECTORY,
-                    "Unable to restore configuration backup %s because an " +
-                    "error occurred while attempting to create a new empty " +
-                    "directory %s into which the files should be restored:  " +
-                    "%s");
-    registerMessage(MSGID_CONFIG_RESTORE_OLD_CONFIG_SAVED,
-                    "An error occurred that prevented the configuration " +
-                    "backup from being properly restored.  The original " +
-                    "configuration files that were in place before the start " +
-                    "of the restore process have been preserved in the %s " +
-                    "directory");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_GET_ZIP_ENTRY,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because an error occurred while trying to read the next " +
-                    "entry from the archive file %s:  %s");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_CREATE_FILE,
-                    "Unable to restore configuration backup %s because an " +
-                    "error occurred while trying to recreate file %s:  %s");
-    registerMessage(MSGID_CONFIG_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because an error occurred while processing archived " +
-                    "file %s:  %s");
-    registerMessage(MSGID_CONFIG_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because an unexpected error occurred while trying to " +
-                    "close the archive file %s:  %s");
-    registerMessage(MSGID_CONFIG_RESTORE_UNSIGNED_HASH_VALID,
-                    "The message digest calculated from the backup archive " +
-                    "matches the digest stored with the backup information");
-    registerMessage(MSGID_CONFIG_RESTORE_UNSIGNED_HASH_INVALID,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because the message digest calculated from the backup " +
-                    "archive does not match the digest stored with the " +
-                    "backup information");
-    registerMessage(MSGID_CONFIG_RESTORE_SIGNED_HASH_VALID,
-                    "The signed digest calculated from the backup archive " +
-                    "matches the signature stored with the backup " +
-                    "information");
-    registerMessage(MSGID_CONFIG_RESTORE_SIGNED_HASH_INVALID,
-                    "Unable to restore or verify configuration backup %s " +
-                    "because the signed digest calculated from the backup " +
-                    "archive does not match the signature stored with the " +
-                    "backup information");
-    registerMessage(MSGID_CONFIG_RESTORE_VERIFY_SUCCESSFUL,
-                    "All tests performed on configuration backup %s from " +
-                    "directory %s show that the archive appears to be valid");
-    registerMessage(MSGID_CONFIG_RESTORE_SUCCESSFUL,
-                    "Configuration backup %s was successfully restored from " +
-                    "the archive in directory %s");
-
-
-    registerMessage(MSGID_CONFIG_IDMAPPER_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "identity mapper base entry " + DN_IDMAPPER_CONFIG_BASE +
-                    " from the Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_IDMAPPER_BASE_DOES_NOT_EXIST,
-                    "The identity mapper configuration base " +
-                    DN_IDMAPPER_CONFIG_BASE + " does not exist in the " +
-                    "Directory Server configuration.  This entry must be " +
-                    "present for the server to function properly");
-    registerMessage(MSGID_CONFIG_IDMAPPER_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid " +
-                    "identity mapper configuration:  %s.  It will be ignored");
-    registerMessage(MSGID_CONFIG_IDMAPPER_CANNOT_CREATE_MAPPER,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server identity mapper from the information " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_IDMAPPER_NO_PROXY_MAPPER_DN,
-                    "The Directory Server does not have any identity mapper " +
-                    "configured for use in conjunction with proxied " +
-                    "authorization V2 operations.  The Directory Server " +
-                    "will not be able to process requests containing the " +
-                    "proxied authorization control with a username-based " +
-                    "authorization ID");
-    registerMessage(MSGID_CONFIG_IDMAPPER_INVALID_PROXY_MAPPER_DN,
-                    "The configured proxied authorization identity mapper DN " +
-                    "%s does not refer to an active identity mapper.  The " +
-                    "Directory Server will not be able to process requests " +
-                    "containing the proxied authorization control with a " +
-                    "username-based authorization ID");
-    registerMessage(MSGID_CONFIG_IDMAPPER_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_IDENTITY_MAPPER + " objectclass, which is " +
-                    "required for identity mapper definitions");
-    registerMessage(MSGID_CONFIG_IDMAPPER_DESCRIPTION_CLASS_NAME,
-                    "The fully-qualified name of the Java class that defines " +
-                    "a Directory Server identity mapper.  If this is altered " +
-                    "while the associated identity mapper is enabled, then " +
-                    "that mapper must be disabled and re-enabled for the " +
-                    "change to take effect");
-    registerMessage(MSGID_CONFIG_IDMAPPER_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_IDMAPPER_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated identity mapper");
-    registerMessage(MSGID_CONFIG_IDMAPPER_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_IDMAPPER_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_IDMAPPER_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid identity mapper implementation:  %s");
-    registerMessage(MSGID_CONFIG_IDMAPPER_DESCRIPTION_ENABLED,
-                    "Indicates whether this Directory Server identity mapper " +
-                    "should be enabled.  Changes to this attribute will take " +
-                    "effect immediately");
-    registerMessage(MSGID_CONFIG_IDMAPPER_NO_ENABLED_ATTR,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_IDMAPPER_ENABLED +
-                    " which indicates whether the identity mapper should be " +
-                    "enabled for use in the Directory Server");
-    registerMessage(MSGID_CONFIG_IDMAPPER_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_IDMAPPER_ENABLED + ":  %s");
-    registerMessage(MSGID_CONFIG_IDMAPPER_CLASS_ACTION_REQUIRED,
-                    "The requested change in the identity mapper class name " +
-                    "from %s to %s in configuration entry %s cannot be " +
-                    "dynamically applied.  This change will not take effect " +
-                    "until the identity mapper is disabled and re-enabled or " +
-                    "the Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_IDMAPPER_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as an identity mapper as defined " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_IDMAPPER_EXISTS,
-                    "Unable to add a new identity mapper entry with DN %s " +
-                    "because there is already an identity mapper registered " +
-                    "with that DN");
-    registerMessage(MSGID_CONFIG_IDMAPPER_UNACCEPTABLE_CONFIG,
-                    "The configuration for the identity mapper defined in " +
-                    "configuration entry %s was not acceptable according to " +
-                    "its internal validation.  However, no specific " +
-                    "information is available regarding the problem(s) with " +
-                    "the entry");
-    registerMessage(MSGID_CONFIG_IDMAPPER_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the identity mapper defined in " +
-                    "configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_SYNCH_CANNOT_GET_CONFIG_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "Directory Server synchronization provider configuration " +
-                    "base entry " + DN_SYNCHRONIZATION_PROVIDER_BASE +
-                    ":  %s");
-    registerMessage(MSGID_CONFIG_SYNCH_BASE_DOES_NOT_EXIST,
-                    "The Directory Server synchronization provider " +
-                    "base entry " + DN_SYNCHRONIZATION_PROVIDER_BASE +
-                    " does not exist.  This entry must be  present in the " +
-                    "Directory Server configuration");
-    registerMessage(MSGID_CONFIG_SYNCH_ENTRY_DOES_NOT_HAVE_PROVIDER_CONFIG,
-                    "Configuration entry %s exists below the Directory " +
-                    "Server synchronization provider root but does not " +
-                    "contain attribute " + OC_SYNCHRONIZATION_PROVIDER +
-                    " which must be present in all synchronization provider " +
-                    "configuration entries");
-    registerMessage(MSGID_CONFIG_SYNCH_CANNOT_CHECK_FOR_PROVIDER_CONFIG_OC,
-                    "An error occurred while attempting to determine whether " +
-                    "configuration entry %s was a valid Directory Server " +
-                    "synchronization provider:  %s");
-    registerMessage(MSGID_CONFIG_SYNCH_DESCRIPTION_PROVIDER_ENABLED,
-                    "Indicates whether the associated Directory Server " +
-                    "synchronization provider is enabled and should be used " +
-                    "by the server.  This attribute must be present in all " +
-                    "synchronization provider entries and may not be changed " +
-                    "while the Directory Server is running");
-    registerMessage(MSGID_CONFIG_SYNCH_PROVIDER_NO_ENABLED_ATTR,
-                    "Synchronization provider configuration entry %s does " +
-                    "not contain attribute " +
-                    ATTR_SYNCHRONIZATION_PROVIDER_ENABLED +
-                    " which indicates whether the synchronization provider " +
-                    "is enabled for use");
-    registerMessage(MSGID_CONFIG_SYNCH_PROVIDER_DISABLED,
-                    "The Directory Server synchronization provider defined " +
-                    "in configuration entry %s is disabled.  This " +
-                    "provider will not be used");
-    registerMessage(MSGID_CONFIG_SYNCH_UNABLE_TO_DETERMINE_ENABLED_STATE,
-                    "An error occurred while attempting to determine whether " +
-                    "the Directory Server synchronization provider defined " +
-                    "in configuration entry %s should be enabled:  %s");
-    registerMessage(MSGID_CONFIG_SYNCH_DESCRIPTION_PROVIDER_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that will provide the logic for the Directory Server " +
-                    "synchronization provider.  This attribute must be " +
-                    "present in all synchronization provider entries and may " +
-                    "not be changed while the Directory Server is running");
-    registerMessage(MSGID_CONFIG_SYNCH_NO_CLASS_ATTR,
-                    "Synchronization provider configuration entry %s does " +
-                    "not contain attribute " +
-                    ATTR_SYNCHRONIZATION_PROVIDER_CLASS +
-                    " which specifies the name of the class that implements " +
-                    "the synchronization provider logic");
-    registerMessage(MSGID_CONFIG_SYNCH_UNABLE_TO_DETERMINE_CLASS,
-                    "An error occurred while attempting to determine the " +
-                    "name of the class used to provide the Directory Server " +
-                    "synchronization provider logic from configuration " +
-                    "entry %s:  %s");
-    registerMessage(MSGID_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS,
-                    "An error occurred while attempting to load class %s " +
-                    "referenced in synchronization provider configuration " +
-                    "entry %s:  %s");
-    registerMessage(MSGID_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER,
-                    "An error occurred while attempting to instantiate " +
-                    "class %s referenced in synchronization provider " +
-                    "configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server synchronization provider referenced " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_SYNCH_PROVIDER_HAS_BEEN_DISABLED,
-                    "The synchronization provider defined in configuration " +
-                    "entry %s is currently enabled but the configuration has " +
-                    "changed so that it should be disabled.  This will not " +
-                    "take effect until the Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_SYNCH_PROVIDER_CLASS_CHANGED,
-                    "The Java class providing the logic for the " +
-                    "synchronization provider defined in configuration entry " +
-                    "%s has changed from %s to %s.  This will not take " +
-                    "effect until the Directory Server is restarted");
-
-
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "password validator base entry " +
-                    DN_PWVALIDATOR_CONFIG_BASE + " from the Directory Server " +
-                    "configuration:  %s");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_BASE_DOES_NOT_EXIST,
-                    "The password validator configuration base " +
-                    DN_PWVALIDATOR_CONFIG_BASE + " does not exist in the " +
-                    "Directory Server configuration.  This entry must be " +
-                    "present for the server to function properly");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid " +
-                    "password validator configuration:  %s.  It will be " +
-                    "ignored");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_CANNOT_CREATE_VALIDATOR,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server password validator from the " +
-                    "information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_PASSWORD_VALIDATOR + " objectclass, which is required " +
-                    "for password validator definitions");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_DESCRIPTION_CLASS_NAME,
-                    "The fully-qualified name of the Java class that defines " +
-                    "the Directory Server password validator.  If this is " +
-                    "altered while the associated validator is enabled, then " +
-                    "that validator must be disabled and re-enabled for the " +
-                    "change to take effect");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_PWVALIDATOR_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated password validator");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_PWVALIDATOR_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid password validator implementation:  %s");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_DESCRIPTION_ENABLED,
-                    "Indicates whether this Directory Server password " +
-                    "validator should be enabled.  Changes to this attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_NO_ENABLED_ATTR,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_PWVALIDATOR_ENABLED +
-                    " which indicates whether the password validator should " +
-                    "be enabled for use in the Directory Server");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_PWVALIDATOR_ENABLED + ":  %s");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_CLASS_ACTION_REQUIRED,
-                    "The requested change in the password validator class " +
-                    "name from %s to %s in configuration entry %s cannot be " +
-                    "dynamically applied.  This change will not take effect " +
-                    "until the validator is disabled and re-enabled or the " +
-                    "Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as a password validator as defined " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_EXISTS,
-                    "Unable to add a new password validator entry with DN %s " +
-                    "because there is already a validator registered with " +
-                    "that DN");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_UNACCEPTABLE_CONFIG,
-                    "The configuration for the password validator defined in " +
-                    "configuration entry %s was not acceptable according to " +
-                    "its internal validation.  However, no specific " +
-                    "information is available regarding the problem(s) with " +
-                    "the entry");
-    registerMessage(MSGID_CONFIG_PWVALIDATOR_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the password validator defined in " +
-                    "configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_PWGENERATOR_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "password generator base entry " +
-                    DN_PWGENERATOR_CONFIG_BASE + " from the Directory Server " +
-                    "configuration:  %s");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_BASE_DOES_NOT_EXIST,
-                    "The password generator configuration base " +
-                    DN_PWGENERATOR_CONFIG_BASE + " does not exist in the " +
-                    "Directory Server configuration.  This entry must be " +
-                    "present for the server to function properly");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid " +
-                    "password generator configuration:  %s.  It will be " +
-                    "ignored");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_CANNOT_CREATE_GENERATOR,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server password generator from the " +
-                    "information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_PASSWORD_GENERATOR + " objectclass, which is required " +
-                    "for password generator definitions");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_DESCRIPTION_CLASS_NAME,
-                    "The fully-qualified name of the Java class that defines " +
-                    "the Directory Server password generator.  If this is " +
-                    "altered while the associated generator is enabled, then " +
-                    "that generator must be disabled and re-enabled for the " +
-                    "change to take effect");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_PWGENERATOR_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated password generator");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_PWGENERATOR_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid password generator implementation:  %s");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_DESCRIPTION_ENABLED,
-                    "Indicates whether this Directory Server password " +
-                    "generator should be enabled.  Changes to this attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_NO_ENABLED_ATTR,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " + ATTR_PWGENERATOR_ENABLED +
-                    " which indicates whether the password generator should " +
-                    "be enabled for use in the Directory Server");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_PWGENERATOR_ENABLED + ":  %s");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_CLASS_ACTION_REQUIRED,
-                    "The requested change in the password generator class " +
-                    "name from %s to %s in configuration entry %s cannot be " +
-                    "dynamically applied.  This change will not take effect " +
-                    "until the generator is disabled and re-enabled or the " +
-                    "Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as a password generator as defined " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_EXISTS,
-                    "Unable to add a new password generator entry with DN %s " +
-                    "because there is already a generator registered with " +
-                    "that DN");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_UNACCEPTABLE_CONFIG,
-                    "The configuration for the password generator defined in " +
-                    "configuration entry %s was not acceptable according to " +
-                    "its internal validation.  However, no specific " +
-                    "information is available regarding the problem(s) with " +
-                    "the entry");
-    registerMessage(MSGID_CONFIG_PWGENERATOR_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the password generator defined in " +
-                    "configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_PWPOLICY_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "password policy base entry " + DN_PWPOLICY_CONFIG_BASE +
-                    " from the Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_PWPOLICY_BASE_DOES_NOT_EXIST,
-                    "The password policy configuration base " +
-                    DN_PWPOLICY_CONFIG_BASE + " does not exist in the " +
-                    "Directory Server configuration.  This entry must be " +
-                    "present for the server to function properly");
-    registerMessage(MSGID_CONFIG_PWPOLICY_NO_POLICIES,
-                    "No password policies have been defined below the " +
-                    DN_PWPOLICY_CONFIG_BASE + " entry in the Directory " +
-                    "Server configuration.  At least one password policy " +
-                    "configuration must be defined");
-    registerMessage(MSGID_CONFIG_PWPOLICY_NO_DEFAULT_POLICY,
-                    "No default password policy is configured for the " +
-                    "Directory Server.  The default password policy must be " +
-                    "specified by the " + ATTR_DEFAULT_PWPOLICY_DN +
-                    " attribute in the " + DN_CONFIG_ROOT + " entry");
-    registerMessage(MSGID_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG,
-                    "The password policy defined in configuration entry %s " +
-                    "is invalid:  %s");
-    registerMessage(MSGID_CONFIG_PWPOLICY_MISSING_DEFAULT_POLICY,
-                    "The Directory Server default password policy is " +
-                    "defined as %s, but that entry does not exist or is not " +
-                    "below the password policy configuration base " +
-                    DN_PWPOLICY_CONFIG_BASE + "");
-    registerMessage(MSGID_CONFIG_PWPOLICY_CANNOT_DELETE_DEFAULT_POLICY,
-                    "The specified entry %s is currently defined as the " +
-                    "configuration entry for the default password policy.  " +
-                    "The default password policy configuration entry may not " +
-                    "be removed");
-    registerMessage(MSGID_CONFIG_PWPOLICY_REMOVED_POLICY,
-                    "Password policy entry %s has been removed from the " +
-                    "Directory Server configuration.  Any user entries that " +
-                    "explicitly reference this password policy will no " +
-                    "longer be allowed to authenticate");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_CANNOT_GET_ENTRY,
-        "An error occurred while attempting to retrieve the "
-            + "Directory Server access control configuration entry "
-            + DN_AUTHZ_HANDLER_CONFIG + ":  %s");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_ENTRY_DOES_NOT_EXIST,
-        "The Directory Server access control configuration entry "
-            + DN_AUTHZ_HANDLER_CONFIG
-            + " does not exist.  This entry must be present in the "
-            + "Directory Server configuration");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_ENTRY_DOES_NOT_HAVE_OBJECT_CLASS,
-        "The Directory Server access control configuration entry "
-            + DN_AUTHZ_HANDLER_CONFIG
-            + " does not have the correct object class.  This entry must"
-            + " have the object class " + OC_AUTHZ_HANDLER_CONFIG
-            + " in order to be valid");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_DESCRIPTION_ENABLED,
-        "Indicates whether access control is enabled and should be used "
-            + "by the server.  This attribute is mandatory");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_NO_ENABLED_ATTR,
-        "The access control configuration entry %s does "
-            + "not contain attribute " + ATTR_AUTHZ_HANDLER_ENABLED
-            + " which indicates whether the access control "
-            + "is enabled for use");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_DISABLED,
-        "Access control has been disabled");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_ENABLED,
-        "Access control has been enabled and will use the %s "
-            + "implementation");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_UNABLE_TO_DETERMINE_ENABLED_STATE,
-        "An error occurred while attempting to determine whether "
-            + "the Directory Server access control as defined "
-            + "in configuration entry %s should be enabled:  %s");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_DESCRIPTION_CLASS,
-        "Specifies the fully-qualified name of the Java class "
-            + "that will provide the access control implementation for "
-            + "the Directory Server. This attribute is mandatory");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_NO_CLASS_ATTR,
-        "The access control configuration entry %s does "
-            + "not contain attribute "
-            + ATTR_AUTHZ_HANDLER_CLASS
-            + " which specifies the name of the Java class providing"
-            + " the access control implementation for the Directory Server");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_UNABLE_TO_DETERMINE_CLASS,
-        "An error occurred while attempting to determine the "
-            + "name of the class used to provide the Directory Server "
-            + "access control implementation from configuration "
-            + "entry %s:  %s");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_UNABLE_TO_LOAD_CLASS,
-        "An error occurred while attempting to load class %s "
-            + "referenced in the access control configuration "
-            + "entry %s:  %s");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_BAD_CLASS,
-        "The access control implementation class %s "
-            + "referenced in the access control configuration "
-            + "entry %s does not implement the %s interface:  %s");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER,
-        "An error occurred while attempting to instantiate "
-            + "class %s referenced in the access control configuration "
-            + "entry %s:  %s");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_ERROR_INITIALIZING_HANDLER,
-        "An error occurred while attempting to initialize the "
-            + "Directory Server access control implementation referenced "
-            + "in configuration entry %s:  %s");
-
-    registerMessage(MSGID_CONFIG_AUTHZ_CONFIG_NOT_ACCEPTABLE,
-        "The configuration for the trust manager provider defined in "
-            + "configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_ROOTDN_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "root DN base entry " + DN_ROOT_DN_CONFIG_BASE +
-                    " from the Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_ROOTDN_BASE_DOES_NOT_EXIST,
-                    "The password policy configuration base " +
-                    DN_ROOT_DN_CONFIG_BASE + " does not exist in the " +
-                    "Directory Server configuration.  This entry must be " +
-                    "present for the server to function properly");
-    registerMessage(MSGID_CONFIG_ROOTDN_DESCRIPTION_ROOT_PRIVILEGE,
-                    "Specifies the set of privileges that should " +
-                    "automatically be assigned to root users when they " +
-                    "authenticate to the server");
-    registerMessage(MSGID_CONFIG_ROOTDN_UNRECOGNIZED_PRIVILEGE,
-                    "The set of default root privileges contained in " +
-                    "configuration attribute %s of entry %s contains an " +
-                    "unrecognized privilege %s");
-    registerMessage(MSGID_CONFIG_ROOTDN_ERROR_DETERMINING_ROOT_PRIVILEGES,
-                    "An error occurred while attempting to determine the " +
-                    "set of privileges that root users should be granted by " +
-                    "default:  %s");
-    registerMessage(MSGID_CONFIG_ROOTDN_UPDATED_PRIVILEGES,
-                    "The set of privileges that will automatically be " +
-                    "assigned to root users has been updated.  This new " +
-                    "privilege set will not apply to any existing " +
-                    "connection already authenticated as a root user, but " +
-                    "will used for any subsequent root user authentications");
-    registerMessage(MSGID_CONFIG_ROOTDN_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid root DN " +
-                    "configuration:  %s.  It will be ignored");
-    registerMessage(MSGID_CONFIG_ROOTDN_CANNOT_CREATE,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server root DN from the information in " +
-                    "configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_ROOTDN_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_ROOT_DN + " objectclass, which is required for " +
-                    "Directory Server root DN definitions");
-    registerMessage(MSGID_CONFIG_ROOTDN_DESCRIPTION_ALTERNATE_BIND_DN,
-                    "Specifies one or more alternate bind DNs that may be " +
-                    "used to authenticate as the associated root DN, in " +
-                    "addition to the actual DN of the root DN configuration " +
-                    "entry.  Alternate bind DNs must not conflict with the " +
-                    "DNs of any other entries in the directory, nor can they " +
-                    "conflict with other alternate bind DNs configured for " +
-                    "other root DNs.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_ROOTDN_CONFLICTING_MAPPING,
-                    "Unable to register \"%s\" as an alternate bind DN for " +
-                    "user \"%s\" because it is already registered as an " +
-                    "alternate bind DN for root user \"%s\"");
-    registerMessage(MSGID_CONFIG_ROOTDN_CANNOT_PARSE_ALTERNATE_BIND_DNS,
-                    "An error occurred while trying to parse the set of " +
-                    "alternate bind DNs for root user %s:  %s");
-    registerMessage(MSGID_CONFIG_ROOTDN_CANNOT_REGISTER_ALTERNATE_BIND_DN,
-                    "An error occurred while trying to register\"%s\" as an " +
-                    "alternate bind DN for root user \"%s\":  %s");
-    registerMessage(MSGID_CONFIG_ROOTDN_EXISTS,
-                    "Unable to add root DN entry %s because another root " +
-                    "user is already registered with that DN");
-
-
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "account status notification handler base entry " +
-                    DN_ACCT_NOTIFICATION_HANDLER_CONFIG_BASE +
-                    " from the Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_BASE_DOES_NOT_EXIST,
-                    "The account status notification handler configuration " +
-                    "base " + DN_ACCT_NOTIFICATION_HANDLER_CONFIG_BASE +
-                    " does not exist in the Directory Server configuration.  " +
-                    "This entry must be present for the server to function " +
-                    "properly");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid " +
-                    "account status notification handler configuration:  " +
-                    "%s.  It will be ignored");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_CANNOT_CREATE_HANDLER,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server account status notification handler " +
-                    "from the information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_ACCT_NOTIFICATION_HANDLER + " objectclass, which is " +
-                    "required for account status notification handler " +
-                    "definitions");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_DESCRIPTION_CLASS_NAME,
-                    "The fully-qualified name of the Java class that defines " +
-                    "the Directory Server account status notification " +
-                    "handler.  If this is altered while the associated " +
-                    "notification handler is enabled, then that handler must " +
-                    "be disabled and re-enabled for the change to take " +
-                    "effect");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " +
-                    ATTR_ACCT_NOTIFICATION_HANDLER_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated account status notification handler");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_ACCT_NOTIFICATION_HANDLER_CLASS +
-                    ":  %s");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid account status notification handler " +
-                    "implementation:  %s");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_DESCRIPTION_ENABLED,
-                    "Indicates whether this Directory Server account status " +
-                    "notification handler should be enabled.  Changes to " +
-                    "this attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_NO_ENABLED_ATTR,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " +
-                    ATTR_ACCT_NOTIFICATION_HANDLER_ENABLED +
-                    " which indicates whether the account status " +
-                    "notification handler should be enabled for use in the " +
-                    "Directory Server");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_ACCT_NOTIFICATION_HANDLER_ENABLED +
-                    ":  %s");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_CLASS_ACTION_REQUIRED,
-                    "The requested change in the account status notification " +
-                    "handler class name from %s to %s in configuration entry " +
-                    "%s cannot be dynamically applied.  This change will not " +
-                    "take effect until the notification handler is disabled " +
-                    "and re-enabled or the Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as an account status notification " +
-                    "handler as defined in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_EXISTS,
-                    "Unable to add a new account status notification handler " +
-                    "entry with DN %s because there is already a " +
-                    "notification handler registered with that DN");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_UNACCEPTABLE_CONFIG,
-                    "The configuration for the account status notification " +
-                    "handler defined in configuration entry %s was not " +
-                    "acceptable according to its internal validation.  " +
-                    "However, no specific information is available regarding " +
-                    "the problem(s) with the entry");
-    registerMessage(MSGID_CONFIG_ACCTNOTHANDLER_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the account status notification " +
-                    "handler defined in configuration entry %s was not " +
-                    "acceptable:  %s");
-
-
-    registerMessage(MSGID_CONFIG_CORE_DESCRIPTION_LOOKTHROUGH_LIMIT,
-                    "Specifies the default maximum number of candidate " +
-                    "entries checked for matches when processing a search " +
-                    "operation.  This may be overridden on a per-user basis " +
-                    "by including the " + OP_ATTR_USER_LOOKTHROUGH_LIMIT +
-                    " operational attribute in the user's entry.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_CONFIG_CORE_INVALID_LOOKTHROUGH_LIMIT,
-                    "Configuration entry %s has an invalid value for " +
-                    "configuration attribute " + ATTR_LOOKTHROUGH_LIMIT +
-                    " (It should be a positive integer value specifying " +
-                    "the lookthrough limit to use, or a value of 0 or -1 to " +
-                    "indicate that no limit should be enforced):  %s");
-    registerMessage(MSGID_CONFIG_DESCRIPTION_BACKEND_MODE,
-                    "The permissions used for the directory containing the " +
-                    "backend database files");
-    registerMessage(MSGID_CONFIG_BACKEND_MODE_INVALID,
-                   "Configuration entry %s does not contain a valid value " +
-                   "for configuration attribute " + ATTR_BACKEND_MODE +
-                   " (It should be an UNIX permission mode in three-digit " +
-                   "octal notation.)");
-    registerMessage(MSGID_CONFIG_BACKEND_INSANE_MODE,
-                   "Unable to set the requested file permissions to the " +
-                   "backend database directory. The requested permissions " +
-                   "will result in an inaccessible database");
-
-
-    registerMessage(MSGID_CONFIG_GROUP_CANNOT_GET_BASE,
-                    "An error occurred while attempting to retrieve the " +
-                    "group implementation base entry " +
-                    DN_GROUP_IMPLEMENTATION_CONFIG_BASE +
-                    " from the Directory Server configuration:  %s");
-    registerMessage(MSGID_CONFIG_GROUP_BASE_DOES_NOT_EXIST,
-                    "The group implementation configuration base " +
-                    DN_GROUP_IMPLEMENTATION_CONFIG_BASE + " does not exist " +
-                    "in the Directory Server configuration.  This entry must " +
-                    "be present for the server to function properly");
-    registerMessage(MSGID_CONFIG_GROUP_ENTRY_UNACCEPTABLE,
-                    "Configuration entry %s does not contain a valid " +
-                    "group implementation configuration:  %s.  It will be " +
-                    "ignored");
-    registerMessage(MSGID_CONFIG_GROUP_CANNOT_CREATE_IMPLEMENTATION,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server group implementation from the " +
-                    "information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_GROUP_INVALID_OBJECTCLASS,
-                    "Configuration entry %s does not contain the " +
-                    OC_GROUP_IMPLEMENTATION + " objectclass, which is " +
-                    "required for group implementation definitions");
-    registerMessage(MSGID_CONFIG_GROUP_DESCRIPTION_CLASS_NAME,
-                    "The fully-qualified name of the Java class that defines " +
-                    "the Directory Server group implementation.  If this is " +
-                    "while the associated implementation is enabled, then " +
-                    "that group implementation must be disabled and " +
-                    "re-enabled for the change to take effect");
-    registerMessage(MSGID_CONFIG_GROUP_NO_CLASS_NAME,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " +
-                    ATTR_GROUP_IMPLEMENTATION_CLASS +
-                    " which specifies the fully-qualified class name for " +
-                    "the associated group implementation");
-    registerMessage(MSGID_CONFIG_GROUP_INVALID_CLASS_NAME,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_GROUP_IMPLEMENTATION_CLASS + ":  %s");
-    registerMessage(MSGID_CONFIG_GROUP_INVALID_CLASS,
-                    "Class %s specified in configuration entry %s does not " +
-                    "contain a valid group implementation:  %s");
-    registerMessage(MSGID_CONFIG_GROUP_DESCRIPTION_ENABLED,
-                    "Indicates whether this Directory Server group " +
-                    "implementation should be enabled.  Changes to this " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_CONFIG_GROUP_NO_ENABLED_ATTR,
-                    "Configuration entry %s does not contain a valid value " +
-                    "for configuration attribute " +
-                    ATTR_GROUP_IMPLEMENTATION_ENABLED +
-                    " which indicates whether the group implementation " +
-                    "should be enabled for use in the Directory Server");
-    registerMessage(MSGID_CONFIG_GROUP_INVALID_ENABLED_VALUE,
-                    "Configuration entry %s has an invalid value for " +
-                    "attribute " + ATTR_GROUP_IMPLEMENTATION_ENABLED +
-                    ":  %s");
-    registerMessage(MSGID_CONFIG_GROUP_CLASS_ACTION_REQUIRED,
-                    "The requested change in the group implementation class " +
-                    "name from %s to %s in configuration entry %s cannot be " +
-                    "dynamically applied.  This change will not take effect " +
-                    "until the group implementation is disabled and " +
-                    "re-enabled or the Directory Server is restarted");
-    registerMessage(MSGID_CONFIG_GROUP_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as a group implementation as " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_GROUP_EXISTS,
-                    "Unable to add a new group implementation entry with DN " +
-                    "%s because there is already a group implementation " +
-                    "registered with that DN");
-    registerMessage(MSGID_CONFIG_GROUP_UNACCEPTABLE_CONFIG,
-                    "The configuration for the group implementation defined " +
-                    "in configuration entry %s was not acceptable according " +
-                    "to its internal validation.  However, no specific " +
-                    "information is available regarding the problem(s) with " +
-                    "the entry");
-    registerMessage(MSGID_CONFIG_GROUP_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the group implementation defined " +
-                    "in configuration entry %s was not acceptable:  %s");
-
-
-    registerMessage(
-        MSGID_CONFIG_CORE_DESCRIPTION_REJECT_UNAUTHENTICATED_REQUESTS,
-                    "Indicates whether the Directory Server should reject  " +
-                    "requests from unauthenticated clients. If this is set " +
-                    "to \"true\", then unauthenticated clients will only be "+
-                    "allowed to send bind and StartTLS requests. Changes to "+
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_CONFIG_CORE_REJECT_UNAUTHENTICATED_REQUESTS_INVALID,
-                    "Configuration entry %s has an invalid value for" +
-                    "configuration attribute " +
-                    ATTR_REJECT_UNAUTHENTICATED_REQ + "(the value should " +
-                    "be either true or false)");
-
-
-    registerMessage(MSGID_CONFIG_CHANGE_NO_RESULT,
-                    "%s.%s returned a result of null for entry %s");
-    registerMessage(MSGID_CONFIG_CHANGE_RESULT_ERROR,
-                    "%s.%s failed for entry %s:  result code=%s, admin " +
-                    "action required=%b, messages=\"%s\"");
-    registerMessage(MSGID_CONFIG_CHANGE_RESULT_ACTION_REQUIRED,
-                    "%s.%s indicated that administrative action is required " +
-                    "for entry %s:  messages=\"%s\"");
-    registerMessage(MSGID_CONFIG_CHANGE_RESULT_MESSAGES,
-                    "%s.%s succeeded but generated the following messages " +
-                    "for entry %s:  %s");
-
-
-    registerMessage(MSGID_CONFIG_VATTR_INVALID_SEARCH_FILTER,
-                    "Unable to parse value \"%s\" from config entry \"%s\" " +
-                    "as a valid search filter:  %s");
-    registerMessage(MSGID_CONFIG_VATTR_SV_TYPE_WITH_MV_PROVIDER,
-                    "The virtual attribute configuration in entry \"%s\" is " +
-                    "not valid because attribute type %s is single-valued " +
-                    "but provider %s may generate multiple values");
-    registerMessage(MSGID_CONFIG_VATTR_SV_TYPE_WITH_MERGE_VALUES,
-                    "The virtual attribute configuration in entry \"%s\" is " +
-                    "not valid because attribute type %s is single-valued " +
-                    "but the conflict behavior is configured to merge real " +
-                    "and virtual values");
-    registerMessage(MSGID_CONFIG_VATTR_INITIALIZATION_FAILED,
-                    "An error occurred while trying to load an instance " +
-                    "of class %s referenced in configuration entry %s as a " +
-                    "virtual attribute provider:  %s");
-    registerMessage(MSGID_CONFIG_VATTR_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the virtual attribute provider " +
-                    "defined in configuration entry %s was not acceptable:  " +
-                    "%s");
-
-
-    registerMessage(MSGID_CONFIG_ROTATION_POLICY_INVALID_CLASS,
-                    "Class %s specified in attribute " + ATTR_LOGGER_CLASS +
-                    " of configuration entry %s cannot be instantiated as " +
-                    "a Directory Server log rotation policy:  %s");
-    registerMessage(MSGID_CONFIG_RETENTION_POLICY_INVALID_CLASS,
-                    "Class %s specified in attribute " + ATTR_LOGGER_CLASS +
-                    " of configuration entry %s cannot be instantiated as " +
-                    "a Directory Server log retention policy:  %s");
-    registerMessage(MSGID_CONFIG_ROTATION_POLICY_CANNOT_CREATE_POLICY,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server log rotation policy from the " +
-                    "information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_RETENTION_POLICY_CANNOT_CREATE_POLICY,
-                    "An error occurred while attempting to create a " +
-                    "Directory Server log retention policy from the " +
-                    "information in configuration entry %s:  %s");
-    registerMessage(MSGID_CONFIG_LOGGING_CANNOT_CREATE_WRITER,
-                    "An error occurred while attempting create a text writer " +
-                    "for a Directory Server logger from the information " +
-                    "in configuration entry %s:  %s");
-
-
-    registerMessage(MSGID_CONFIG_FILE_ADD_APPLY_FAILED,
-                    "The attempt to apply the configuration add failed.  The " +
-                    "preliminary checks were all successful and the entry " +
-                    "was added to the server configuration, but at least one " +
-                    "of the configuration add listeners reported an error " +
-                    "when attempting to apply the change:  %s");
-    registerMessage(MSGID_CONFIG_FILE_DELETE_APPLY_FAILED,
-                    "The attempt to apply the configuration delete failed.  " +
-                    "The preliminary checks were all successful and the " +
-                    "entry was removed from the server configuration, but at " +
-                    "least one of the configuration delete listeners " +
-                    "reported an error when attempting to apply the change:  " +
-                    "%s");
-    registerMessage(MSGID_CONFIG_FILE_MODIFY_APPLY_FAILED,
-                    "The attempt to apply the configuration modification " +
-                    "failed.  The preliminary checks were all successful and " +
-                    "the modified entry was written to the server " +
-                    "configuration, but at least one of the configuration " +
-                    "change listeners reported an error when attempting to " +
-                    "apply the change:  %s");
-
-
-    registerMessage(MSGID_CONFIG_ALERTHANDLER_CONFIG_NOT_ACCEPTABLE,
-                    "The configuration for the alert handler defined in " +
-                    "configuration entry %s was not acceptable:  %s");
-    registerMessage(MSGID_CONFIG_ALERTHANDLER_INITIALIZATION_FAILED,
-                    "An error occurred while trying to initialize an " +
-                    "instance of class %s as an alert handler as defined " +
-                    "in configuration entry %s:  %s");
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/CoreMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/CoreMessages.java
deleted file mode 100644
index 9f906cf..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/CoreMessages.java
+++ /dev/null
@@ -1,8825 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.schema.SchemaConstants.*;
-import static org.opends.server.util.ServerConstants.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the core of the Directory Server.
- */
-public class CoreMessages
-{
-  /**
-   * The message ID for the message that will be used if a request attempts to
-   * cancel an abandon operation.
-   */
-  public static final int MSGID_CANNOT_CANCEL_ABANDON =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 1;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request attempts to
-   * cancel a bind operation.
-   */
-  public static final int MSGID_CANNOT_CANCEL_BIND =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 2;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request attempts to
-   * cancel an unbind operation.
-   */
-  public static final int MSGID_CANNOT_CANCEL_UNBIND =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 3;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because the client issued an unbind request.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_UNBIND =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 4;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because the client disconnected from the server.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_CLIENT_CLOSURE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 5;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because the server rejected the connection.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_REJECTED_CLIENT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 6;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because of an I/O error while trying to interact with
-   * the client.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_IO_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 7;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because of an unrecoverable protocol error while
-   * interacting with the client.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_PROTOCOL_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because the Directory Server was shutting down.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_SERVER_SHUTDOWN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 9;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was terminated by an administrator.
-   */
-  public static final int MSGID_DISCONNECT_BY_ADMINISTRATOR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 10;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because of some kind of security problem.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_SECURITY_PROBLEM =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 11;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because the maximum request size was exceeded.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_MAX_REQUEST_SIZE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 12;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because an administrative limit was exceeded.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_ADMIN_LIMIT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 13;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because an idle time limit was exceeded.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_IDLE_TIME_LIMIT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 14;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because an I/O timeout occurred.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_IO_TIMEOUT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 15;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed by a plugin.
-   */
-  public static final int MSGID_DISCONNECT_BY_PLUGIN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 16;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed for some reason not covered bya predefined condition.
-   */
-  public static final int MSGID_DISCONNECT_OTHER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 17;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to access control processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_ACCESS_CONTROL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 39;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to backend processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_BACKEND =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 40;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to configuration processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_CONFIG =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 41;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to connection handling.
-   */
-  public static final int MSGID_ERROR_CATEGORY_CONNECTION_HANDLING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 42;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to core server processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_CORE_SERVER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 43;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to extended operation processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_EXTENDED_OPERATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 45;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to plugin processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_PLUGIN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 46;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to request handling.
-   */
-  public static final int MSGID_ERROR_CATEGORY_REQUEST_HANDLING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 47;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to SASL bind processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_SASL_MECHANISM =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 48;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to the Directory Server shutdown.
-   */
-  public static final int MSGID_ERROR_CATEGORY_SHUTDOWN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 49;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to the Directory Server startup.
-   */
-  public static final int MSGID_ERROR_CATEGORY_STARTUP =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 50;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to synchronization processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_SYNCHRONIZATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 51;
-
-
-  /**
-   * The message ID for the string that will be used for the error message
-   * severity for fatal error messages.
-   */
-  public static final int MSGID_ERROR_SEVERITY_FATAL_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 54;
-
-
-  /**
-   * The message ID for the string that will be used for the error message
-   * severity for informational messages.
-   */
-  public static final int MSGID_ERROR_SEVERITY_INFORMATIONAL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 56;
-
-
-  /**
-   * The message ID for the string that will be used for the error message
-   * severity for mild error messages.
-   */
-  public static final int MSGID_ERROR_SEVERITY_MILD_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 57;
-
-
-  /**
-   * The message ID for the string that will be used for the error message
-   * severity for mild warning messages.
-   */
-  public static final int MSGID_ERROR_SEVERITY_MILD_WARNING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 58;
-
-
-  /**
-   * The message ID for the string that will be used for the error message
-   * severity for severe error messages.
-   */
-  public static final int MSGID_ERROR_SEVERITY_SEVERE_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 59;
-
-
-  /**
-   * The message ID for the string that will be used for the error message
-   * severity for severe warning messages.
-   */
-  public static final int MSGID_ERROR_SEVERITY_SEVERE_WARNING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 60;
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for successful operations.
-   */
-  public static final int MSGID_RESULT_SUCCESS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 63;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because of an internal error.
-   */
-  public static final int MSGID_RESULT_OPERATIONS_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 64;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because of an protocol error.
-   */
-  public static final int MSGID_RESULT_PROTOCOL_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 65;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the operation time limit was
-   * exceeded.
-   */
-  public static final int MSGID_RESULT_TIME_LIMIT_EXCEEDED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 66;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the operation size limit was
-   * exceeded.
-   */
-  public static final int MSGID_RESULT_SIZE_LIMIT_EXCEEDED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 67;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for compare operations in which the assertion is false.
-   */
-  public static final int MSGID_RESULT_COMPARE_FALSE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 68;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for compare operations in which the assertion is true.
-   */
-  public static final int MSGID_RESULT_COMPARE_TRUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 69;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the requested authentication
-   * method is not supported.
-   */
-  public static final int MSGID_RESULT_AUTH_METHOD_NOT_SUPPORTED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 70;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the requested operation requires
-   * strong authentication.
-   */
-  public static final int MSGID_RESULT_STRONG_AUTH_REQUIRED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 71;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that encountered a referral during processing.
-   */
-  public static final int MSGID_RESULT_REFERRAL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 72;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because an administrative limit was
-   * exceeded.
-   */
-  public static final int MSGID_RESULT_ADMIN_LIMIT_EXCEEDED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 73;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because a requested control is not
-   * available for the operation but was designated critical.
-   */
-  public static final int MSGID_RESULT_UNAVAILABLE_CRITICAL_EXTENSION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 74;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the requested operation requires
-   * confidentiality between the client and the server.
-   */
-  public static final int MSGID_RESULT_CONFIDENTIALITY_REQUIRED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 75;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for SASL bind operations that require multiple steps and have not
-   * yet completed the sequence.
-   */
-  public static final int MSGID_RESULT_SASL_BIND_IN_PROGRESS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 76;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because a requested attribute does not
-   * exist.
-   */
-  public static final int MSGID_RESULT_NO_SUCH_ATTRIBUTE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 77;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because a requested attribute type is
-   * not defined in the server schema.
-   */
-  public static final int MSGID_RESULT_UNDEFINED_ATTRIBUTE_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 78;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the client requested an
-   * inappropriate type of matching against the server.
-   */
-  public static final int MSGID_RESULT_INAPPROPRIATE_MATCHING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 79;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because a server constraint would have
-   * been violated.
-   */
-  public static final int MSGID_RESULT_CONSTRAINT_VIOLATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 80;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because an attribute or value conflict
-   * was detected.
-   */
-  public static final int MSGID_RESULT_ATTRIBUTE_OR_VALUE_EXISTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 81;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the request included an invalid
-   * attribute syntax.
-   */
-  public static final int MSGID_RESULT_INVALID_ATTRIBUTE_SYNTAX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 82;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the request targeted an entry
-   * that does not exist.
-   */
-  public static final int MSGID_RESULT_NO_SUCH_OBJECT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 83;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because an alias was encountered for an
-   * inappropriate type of operation.
-   */
-  public static final int MSGID_RESULT_ALIAS_PROBLEM =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 84;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the request included a malformed
-   * DN.
-   */
-  public static final int MSGID_RESULT_INVALID_DN_SYNTAX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 85;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because a problem was encountered while
-   * dereferencing an alias while processing a search.
-   */
-  public static final int MSGID_RESULT_ALIAS_DEREFERENCING_PROBLEM =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 86;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for bind operations that failed because the request attempted a
-   * type of authentication that is not appropriate for the target user.
-   */
-  public static final int MSGID_RESULT_INAPPROPRIATE_AUTHENTICATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 87;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for bind operations that failed because the client did not provide
-   * valid credentials for the target user.
-   */
-  public static final int MSGID_RESULT_INVALID_CREDENTIALS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 88;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the client did not have
-   * permission to perform the requested operation.
-   */
-  public static final int MSGID_RESULT_INSUFFICIENT_ACCESS_RIGHTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 89;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the server was too busy to
-   * process the request.
-   */
-  public static final int MSGID_RESULT_BUSY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 90;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because one or more resources needed to
-   * process the request were unavailable.
-   */
-  public static final int MSGID_RESULT_UNAVAILABLE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 91;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the server was unwilling to
-   * perform the requested operation.
-   */
-  public static final int MSGID_RESULT_UNWILLING_TO_PERFORM =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 92;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the server detected a referral
-   * or chaining loop.
-   */
-  public static final int MSGID_RESULT_LOOP_DETECT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 93;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the request would have violated
-   * the naming configuration for the server.
-   */
-  public static final int MSGID_RESULT_NAMING_VIOLATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 94;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the request would have resulted
-   * in an entry that violated the server schema.
-   */
-  public static final int MSGID_RESULT_OBJECTCLASS_VIOLATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 95;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the requested operation is not
-   * allowed on non-leaf entries.
-   */
-  public static final int MSGID_RESULT_NOT_ALLOWED_ON_NONLEAF =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 96;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the requested operation is not
-   * allowed on an RDN attribute.
-   */
-  public static final int MSGID_RESULT_NOT_ALLOWED_ON_RDN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 97;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the request would have resulted
-   * in an entry that conflicts with an entry that already exists.
-   */
-  public static final int MSGID_RESULT_ENTRY_ALREADY_EXISTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 98;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the request attempted to alter
-   * the set of objectclasses for an entry that is not permitted.
-   */
-  public static final int MSGID_RESULT_OBJECTCLASS_MODS_PROHIBITED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 99;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the request would have impacted
-   * information in multiple servers or repositories.
-   */
-  public static final int MSGID_RESULT_AFFECTS_MULTIPLE_DSAS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 100;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that were canceled.
-   */
-  public static final int MSGID_RESULT_CANCELED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 101;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for cases in which an attempted cancel operation failed because the
-   * requested operation could not be found.
-   */
-  public static final int MSGID_RESULT_NO_SUCH_OPERATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 102;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for cases in which an attempted cancel operation failed because the
-   * requested operation had already reached a point at which it was too late to
-   * cancel.
-   */
-  public static final int MSGID_RESULT_TOO_LATE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 103;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for cases in which a cancel attempt failed because the server could
-   * not cancel the specified operation.
-   */
-  public static final int MSGID_RESULT_CANNOT_CANCEL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 104;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for results that do not apply to any of the other result codes that
-   * have been defined.
-   */
-  public static final int MSGID_RESULT_OTHER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 105;
-
-
-
-  /**
-   * The message ID for the warning that will be logged if it is not possible to
-   * determine the attribute usage for an attribute type.
-   */
-  public static final int MSGID_UNKNOWN_ATTRIBUTE_USAGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_WARNING | 106;
-
-
-
-  /**
-   * The message ID for the response message that will be sent to a client if
-   * an operation is canceled because the Directory Server is shutting down.
-   */
-  public static final int MSGID_CANCELED_BY_SHUTDOWN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 107;
-
-
-
-  /**
-   * The message ID for the error message that will be written if a worker
-   * thread catches an exception while processing an operation that wasn't
-   * caught higher in the call stack.  This message should have three arguments,
-   * which are the name of the worker thread, a string representations of the
-   * operation being processed, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_UNCAUGHT_WORKER_THREAD_EXCEPTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 108;
-
-
-
-  /**
-   * The message ID for the error message that will be written if a worker
-   * thread exits for any reason other than a Directory Server shutdown.  This
-   * message should take a single string argument, which is the name of the
-   * worker thread that is exiting.
-   */
-  public static final int MSGID_UNEXPECTED_WORKER_THREAD_EXIT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 109;
-
-
-
-  /**
-   * The message ID for the error message that will be written if the server
-   * cannot create a worker thread for some reason.  This should take a single
-   * string argument, which is a string representation of the exception that
-   * was caught when trying to create the thread.
-   */
-  public static final int MSGID_CANNOT_CREATE_WORKER_THREAD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 110;
-
-
-
-  /**
-   * The message ID for the message that will be used if the work queue rejects
-   * a new operation because the directory server has already started its
-   * shutdown process.  It does not take any arguments.
-   */
-  public static final int MSGID_OP_REJECTED_BY_SHUTDOWN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_WARNING | 111;
-
-
-
-  /**
-   * The message ID for the message that will be used if the work queue rejects
-   * a new operation because the queue already contains the maximum allowed
-   * number of pending requests.  It should take a single integer argument,
-   * which is the maximum number of pending requests.
-   */
-  public static final int MSGID_OP_REJECTED_BY_QUEUE_FULL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 112;
-
-
-
-  /**
-   * The message ID for the message that will be logged if a worker thread that
-   * is waiting for work gets interrupted for any reason other than a Directory
-   * Server shutdown.  It takes two string arguments, which are the name of
-   * the worker thread that was interrupted and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_WORKER_INTERRUPTED_WITHOUT_SHUTDOWN =
-      CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 113;
-
-
-
-  /**
-   * The message ID for the message that will be logged if an unexpected
-   * exception is caught while a worker thread is waiting for more work.  It
-   * takes two string arguments, which are the name of the worker thread and the
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_WORKER_WAITING_UNCAUGHT_EXCEPTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 114;
-
-
-
-  /**
-   * The message DI for the message that will be logged if the work queue
-   * catches an exception while trying to cancel a pending operation because
-   * the server is shutting down.  It should take two string arguments, which
-   * are string representations of the operation to cancel and of the exception
-   * that was caught.
-   */
-  public static final int MSGID_QUEUE_UNABLE_TO_CANCEL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_WARNING | 115;
-
-
-
-  /**
-   * The message DI for the message that will be logged if the work queue
-   * catches an exception while trying to notify a worker thread that the server
-   * is shutting down.  It should take two string arguments, which is the name
-   * of the worker thread it was trying to notify and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_QUEUE_UNABLE_TO_NOTIFY_THREAD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_WARNING | 116;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * connection was closed because of an internal error within the server.
-   */
-  public static final int MSGID_DISCONNECT_DUE_TO_SERVER_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 117;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * bootstrap the Directory Server configuration while the server is running.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_CANNOT_BOOTSTRAP_WHILE_RUNNING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 118;
-
-
-
-  /**
-   * The message ID for the message that will be used if the class specified as
-   * the configuration handler cannot be loaded.  This takes two arguments,
-   * which are the name of the configuration class and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_CANNOT_LOAD_CONFIG_HANDLER_CLASS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 119;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server cannot
-   * create an instance of the configuration handler class.  This takes two
-   * arguments,  which are the name of the configuration class and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CANNOT_INSTANTIATE_CONFIG_HANDLER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 120;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration
-   * handler cannot be initialized.  This takes three arguments,  which are the
-   * name of the configuration class, the path to the configuration file, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CANNOT_INITIALIZE_CONFIG_HANDLER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 121;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * start the server before it has been bootstrapped.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CANNOT_START_BEFORE_BOOTSTRAP =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 122;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * start the server while another instance is already running.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_CANNOT_START_WHILE_RUNNING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 123;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to schema processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_SCHEMA =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 124;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * normalize the value for an attribute type that does not have an equality
-   * matching rule.  This takes two arguments, which are the value to normalize
-   * and the name of the attribute type.
-   */
-  public static final int MSGID_ATTR_TYPE_NORMALIZE_NO_MR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 125;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry is missing an
-   * attribute that is required by one of its objectclasses.  This takes three
-   * arguments, which are the DN of the entry, the name of the missing
-   * attribute, and the name of the objectclass that requires that attribute.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_OC =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 126;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry includes a
-   * user attribute that is not allowed by any of the associated objectclasses.
-   * This takes two arguments, which are the DN of the entry and the name of the
-   * attribute.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_DISALLOWED_USER_ATTR_FOR_OC =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 127;
-
-
-
-  /**
-   * The message ID for the string that will be used if an error occurs while
-   * attempting to bootstrap an attribute matching rule.  This takes two
-   * arguments, which are the class name of the matching rule class and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 129;
-
-
-
-  /**
-   * The message ID for the string that will be used if an error occurs while
-   * attempting to bootstrap an attribute syntax.  This takes two arguments,
-   * which are the class name of the matching rule class and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CANNOT_BOOTSTRAP_SYNTAX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 130;
-
-
-  /**
-   * The message ID for the string that will be used for the error message
-   * severity for the most important informational messages.
-   */
-  public static final int MSGID_ERROR_SEVERITY_NOTICE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 131;
-
-
-
-  /**
-   * The message ID for the message that will be used when the Directory Server
-   * is beginning its bootstrap process.  This takes a single argument, which is
-   * the Directory Server version string.
-   */
-  public static final int MSGID_DIRECTORY_BOOTSTRAPPING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 132;
-
-
-
-  /**
-   * The message ID for the message that will be used when the Directory Server
-   * has completed the bootstrap process.  This does not take any arguments.
-   */
-  public static final int MSGID_DIRECTORY_BOOTSTRAPPED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 133;
-
-
-
-  /**
-   * The message ID for the message that will be used when the Directory Server
-   * is beginning the startup process.  This takes a single argument, which is
-   * the directory server version string.
-   */
-  public static final int MSGID_DIRECTORY_SERVER_STARTING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_NOTICE | 134;
-
-
-
-  /**
-   * The message ID for the message that will be used when the Directory Server
-   * has completed its startup process.  This does not take any arguments.
-   */
-  public static final int MSGID_DIRECTORY_SERVER_STARTED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_NOTICE | 135;
-
-
-
-  /**
-   * The message ID for the string that will be used for error messages related
-   * to processing in server extensions.
-   */
-  public static final int MSGID_ERROR_CATEGORY_EXTENSIONS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 137;
-
-
-
-  /**
-   * The message ID for the string that will be used if an error occurs while
-   * attempting to create the JMX MBean server.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_CANNOT_CREATE_MBEAN_SERVER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 138;
-
-
-
-  /**
-   * The message ID for the string that will be used if the server sends an
-   * alert notification.  This takes four arguments, which are the class name of
-   * the alert generator, the alert type, the alert ID, and the alert message.
-   */
-  public static final int MSGID_SENT_ALERT_NOTIFICATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_NOTICE | 139;
-
-
-
-  /**
-   * The message ID for the string that will be used if a thread generates an
-   * uncaught exception that would have caused it to terminate abnormally.  This
-   * takes two arguments, which are the name of the thread that threw the
-   * exception and a detailed stack trace for that exception.
-   */
-  public static final int MSGID_UNCAUGHT_THREAD_EXCEPTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 140;
-
-
-
-  /**
-   * The message ID for the string that will be used when the Directory Server
-   * begins its shutdown process.  This takes two arguments, which are the name
-   * of the class that initiated the shutdown and the reason for the shutdown.
-   */
-  public static final int MSGID_SERVER_SHUTDOWN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_NOTICE | 141;
-
-
-
-  /**
-   * The message ID for the string that will be used if the Directory Server
-   * shutdown process is initiated by the shutdown hook.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SHUTDOWN_DUE_TO_SHUTDOWN_HOOK =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 142;
-
-
-  /**
-   * The message ID for the string that will be used if a filter string cannot
-   * be decoded as a search filter because the string was null or empty.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_SEARCH_FILTER_NULL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 143;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter string cannot
-   * be decoded as a search filter because an unexpected exception was caught.
-   * This takes two arguments, which are the filter string and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SEARCH_FILTER_UNCAUGHT_EXCEPTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 144;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter string cannot
-   * be decoded as a search filter because it contained a parenthesis mismatch.
-   * This takes three arguments, which are the filter string and the lower and
-   * upper bounds of the substring containing the mismatch.
-   */
-  public static final int MSGID_SEARCH_FILTER_MISMATCHED_PARENTHESES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 145;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter string cannot
-   * be decoded as a search filter because a simple component did not have an
-   * equal sign.  This takes three arguments, which are the filter string and
-   * the lower and upper bounds of the substring containing the mismatch.
-   */
-  public static final int MSGID_SEARCH_FILTER_NO_EQUAL_SIGN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 146;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter string cannot
-   * be decoded as a search filter because it had a value with a backslash that
-   * was not followed by two hex characters.  This takes two arguments, which
-   * are the filter string and the position of the invalid escaped character.
-   */
-  public static final int MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 147;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter string cannot
-   * be decoded as a search filter because the first element did not start with
-   * a parenthesis or the last element did not end with a parenthesis.  This
-   * takes three arguments, which are the filter string, the beginning of the
-   * compound filter, and the end of the compound filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_COMPOUND_MISSING_PARENTHESES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 148;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter string cannot
-   * be decoded as a search filter because it had a close parenthesis without
-   * a corresponding open parenthesis.  This takes two arguments, which are the
-   * filter string and the position of the unmatched close parenthesis.
-   */
-  public static final int
-       MSGID_SEARCH_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 149;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter string cannot
-   * be decoded as a search filter because it had an open parenthesis without
-   * a corresponding close parenthesis.  This takes two arguments, which are the
-   * filter string and the position of the unmatched open parenthesis.
-   */
-  public static final int
-       MSGID_SEARCH_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 150;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter string cannot
-   * be decoded as a search filter because a substring component did not have
-   * any wildcard characters in the value.  This takes three arguments, which
-   * are  the filter string and the beginning and end positions for the value.
-   */
-  public static final int MSGID_SEARCH_FILTER_SUBSTRING_NO_ASTERISKS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 151;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter string cannot
-   * be decoded as a search filter because an extensible match component did not
-   * have a colon to denote the end of the attribute type.  This takes two
-   * arguments, which are  the filter string and the start position for the
-   * extensible match filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_COLON =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 152;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because it had an invalid filter type.  This
-   * takes three arguments, which are the DN of the entry, a string
-   * representation of the filter, and the name of the invalid filter type.
-   */
-  public static final int MSGID_SEARCH_FILTER_INVALID_FILTER_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 153;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the evaluation returned an invalid
-   * result type.  This takes three arguments, which are the DN of the entry, a
-   * string representation of the filter, and the name of the invalid result
-   * type.
-   */
-  public static final int MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 154;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included a compound filter
-   * type in which the set of subcomponents was null.  This takes three
-   * arguments, which are the DN of the entry, a string representation of the
-   * filter, and the filter type containing the set of null elements.
-   */
-  public static final int MSGID_SEARCH_FILTER_COMPOUND_COMPONENTS_NULL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 155;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter had too many levels of
-   * nesting.  This takes two arguments, which are the DN of the entry and a
-   * string representation of the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_NESTED_TOO_DEEP =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 156;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included a NOT filter in
-   * which the subcomponent was null.  This takes two arguments, which are the
-   * DN of the entry and a string representation of the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_NOT_COMPONENT_NULL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 157;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included an equality
-   * component in which the attribute type was null.  This takes two arguments,
-   * which are the DN of the entry and a string representation of the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_EQUALITY_NO_ATTRIBUTE_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 158;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included an equality
-   * component in which the assertion value was null.  This takes three
-   * arguments, which are the DN of the entry, a string representation of the
-   * filter, and the name of the attribute type in the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_EQUALITY_NO_ASSERTION_VALUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 159;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included a substring
-   * component in which the attribute type was null.  This takes two arguments,
-   * which are the DN of the entry and a string representation of the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_SUBSTRING_NO_ATTRIBUTE_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 160;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included a substring
-   * component without any subInitial/subAny/subFinal elements.  This takes
-   * three arguments, which are the DN of the entry, a string representation of
-   * the filter, and the name of the attribute type in the filter.
-   */
-  public static final int
-       MSGID_SEARCH_FILTER_SUBSTRING_NO_SUBSTRING_COMPONENTS =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 161;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included a greater-or-equal
-   * component in which the attribute type was null.  This takes two arguments,
-   * which are the DN of the entry and a string representation of the filter.
-   */
-  public static final int
-       MSGID_SEARCH_FILTER_GREATER_OR_EQUAL_NO_ATTRIBUTE_TYPE =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 162;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included a greater-or-equal
-   * component in which the assertion value was null.  This takes three
-   * arguments, which are the DN of the entry, a string representation of the
-   * filter, and the name of the attribute type in the filter.
-   */
-  public static final int
-       MSGID_SEARCH_FILTER_GREATER_OR_EQUAL_NO_VALUE =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 163;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included a less-or-equal
-   * component in which the attribute type was null.  This takes two arguments,
-   * which are the DN of the entry and a string representation of the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_LESS_OR_EQUAL_NO_ATTRIBUTE_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 164;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included a less-or-equal
-   * component in which the assertion value was null.  This takes three
-   * arguments, which are the DN of the entry, a string representation of the
-   * filter, and the name of the attribute type in the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_LESS_OR_EQUAL_NO_ASSERTION_VALUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 165;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included a presence component
-   * in which the attribute type was null.  This takes two arguments, which are
-   * the DN of the entry and a string representation of the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_PRESENCE_NO_ATTRIBUTE_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 166;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included an approximate
-   * component in which the attribute type was null.  This takes two arguments,
-   * which are the DN of the entry and a string representation of the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_APPROXIMATE_NO_ATTRIBUTE_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 167;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included an approximate
-   * component in which the assertion value was null.  This takes three
-   * arguments, which are the DN of the entry, a string representation of the
-   * filter, and the name of the attribute type in the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_APPROXIMATE_NO_ASSERTION_VALUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 168;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included an extensibleMatch
-   * component that did not have either an assertion value.  This takes two
-   * arguments, which are the DN of the entry and a string representation of the
-   * filter.
-   */
-  public static final int
-       MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_ASSERTION_VALUE =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 169;
-
-
-
-  /**
-   * The message ID for the string that will be used if a filter cannot be
-   * evaluated against an entry because the filter included an extensibleMatch
-   * component that did not have either an attribute type or matching rule ID.
-   * This takes two arguments, which are the DN of the entry and a string
-   * representation of the filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_RULE_OR_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 170;
-
-
-
-  /**
-   * The message ID for the string that will be used if an attempt is made to
-   * decode a null or empty string as an RDN.  This does not take any arguments.
-   */
-  public static final int MSGID_RDN_DECODE_NULL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 171;
-
-
-
-  /**
-   * The message ID for the string that will be used if an attempt is made to
-   * decode a string as an RDN but that string ended with the attribute type but
-   * did not have an equal sign or value.  This takes two arguments, which are
-   * the RDN string to decode and the parsed attribute type.
-   */
-  public static final int MSGID_RDN_END_WITH_ATTR_NAME =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 172;
-
-
-
-  /**
-   * The message ID for the string that will be used if an attempt is made to
-   * decode a string as an RDN but an unexpected character was encountered where
-   * an equal sign should have been.  This takes four arguments, which are
-   * the RDN string to decode, and the parsed attribute type, the illegal
-   * character found instead of an equal sign, and the position of that illegal
-   * character.
-   */
-  public static final int MSGID_RDN_NO_EQUAL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 173;
-
-
-
-  /**
-   * The message ID for the string that will be used if an attempt is
-   * made to decode a string as an RDN but that string contained an
-   * unexpected plus, comma, or semicolon. This takes two arguments,
-   * which are the RDN string to decode and the position of the
-   * illegal plus, comma, or semicolon.
-   */
-  public static final int MSGID_RDN_UNEXPECTED_COMMA =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 174;
-
-
-
-  /**
-   * The message ID for the string that will be used if an attempt is made to
-   * decode a string as an RDN but that string contained an illegal character
-   * between RDN components.  This takes three arguments, which are the RDN
-   * string to decode, the illegal character, and the position of that
-   * character.
-   */
-  public static final int MSGID_RDN_ILLEGAL_CHARACTER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 175;
-
-
-
-  /**
-   * The message ID for the message that will be used if a failure occurs while
-   * trying to create the work queue.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_CANNOT_CREATE_WORK_QUEUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 176;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a backend with a suffix that is already in use.  This takes two
-   * arguments, which are the DN of the suffix that is being registered, and the
-   * fully-qualified name of the class that defines the existing backend for
-   * that suffix.
-   */
-  public static final int MSGID_CANNOT_REGISTER_DUPLICATE_SUFFIX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 180;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a backend with a suffix that is already in use as a sub-suffix of
-   * an existing suffix.  This takes two arguments, which are the DN of the
-   * suffix that is being registered, and the DN of the suffix with which the
-   * existing sub-suffix is associated.
-   */
-  public static final int MSGID_CANNOT_REGISTER_DUPLICATE_SUBSUFFIX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 181;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a private suffix as a sub-suffix below a non-private backend. This
-   * takes two arguments, which are the DN of the suffix that is being
-   * registered, and the DN of the non-private suffix that would be superior to
-   * the private suffix.
-   */
-  public static final int
-       MSGID_CANNOT_REGISTER_PRIVATE_SUFFIX_BELOW_USER_PARENT =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 182;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to retrieve the configuration entry from the root DSE.  This takes
-   * a single argument, which is a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_CANNOT_GET_ROOT_DSE_CONFIG_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 183;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register an attribute type with the server schema with an OID that
-   * conflicts with the OID of an existing attribute type.  This takes three
-   * arguments, which are the primary name for the rejected attribute type, the
-   * conflicting OID, and the primary name for the existing attribute type.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_ATTRIBUTE_OID =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 184;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register an attribute type with the server schema with a name that
-   * conflicts with the name of an existing attribute type.  This takes three
-   * arguments, which are the primary name for the rejected attribute type, the
-   * conflicting name, and the primary name for the existing attribute type.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_ATTRIBUTE_NAME =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 185;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register an objectclass with the server schema with an OID that conflicts
-   * with the OID of an existing objectclass.  This takes three arguments, which
-   * are the primary name for the rejected objectclass, the conflicting OID, and
-   * the primary name for the existing objectclass.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_OBJECTCLASS_OID =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 186;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register an attribute type with the server schema with a name that
-   * conflicts with the name of an existing attribute type.  This takes three
-   * arguments, which are the primary name for the rejected attribute type, the
-   * conflicting name, and the primary name for the existing attribute type.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_OBJECTCLASS_NAME =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 187;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register an attribute syntax with the server schema with an OID that
-   * conflicts with the OID of an existing syntax.  This takes three arguments,
-   * which are the primary name for the rejected attribute syntax, the
-   * conflicting OID, and the primary name for the existing syntax.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_SYNTAX_OID =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 188;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a matching rule with the server schema with an OID that conflicts
-   * with the OID of an existing rule.  This takes three arguments, which are
-   * the name for the rejected matching rule, the conflicting OID, and the name
-   * for the existing matching rule.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_MR_OID =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 189;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a matching rule with the server schema with a name that conflicts
-   * with the name of an existing rule.  This takes three arguments, which are
-   * the OID for the rejected matching rule, the conflicting name, and the OID
-   * for the existing matching rule.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_MR_NAME =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 190;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a matching rule use with the server schema with a matching rule
-   * that conflicts with the matching rule for an existing matching rule use.
-   * This takes three arguments, which are the name for the rejected matching
-   * rule use, the name of the conflicting matching rule, and the name of the
-   * existing matching rule use.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_MATCHING_RULE_USE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 191;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a DIT content rule with the server schema with an objectclass that
-   * conflicts with the objectclass for an existing DIT content rule.  This
-   * takes three arguments, which are the name for the rejected DIT content
-   * rule, the name of the conflicting objectclass, and the name of the existing
-   * DIT content rule.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_DIT_CONTENT_RULE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 192;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a DIT structure rule with the server schema with a name form that
-   * conflicts with the name form for an existing DIT structure rule.  This
-   * takes three arguments, which are the name for the rejected DIT structure
-   * rule, the name of the conflicting name form, and the name of the existing
-   * DIT structure rule.
-   */
-  public static final int
-       MSGID_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_NAME_FORM =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 193;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a DIT structure rule with the server schema with a rule ID that
-   * conflicts with the rule ID for an existing DIT structure rule.  This takes
-   * three arguments, which are the name for the rejected DIT structure rule,
-   * the conflicting rule ID, and the name of the existing DIT structure rule.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_ID =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 194;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a name form with the server schema with an objectclass that
-   * conflicts with the objectclass for an existing name form.  This takes three
-   * arguments, which are the name for the rejected name form, the name of the
-   * conflicting objectclass, and the name of the existing name form.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_NAME_FORM_OC =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 195;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a name form with the server schema with an OID that conflicts with
-   * the OID for an existing name form.  This takes three arguments, which are
-   * the name for the rejected name form, the conflicting OID, and the name of
-   * the existing name form.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_NAME_FORM_OID =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 196;
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a name form with the server schema with a name that conflicts with
-   * the name for an existing name form.  This takes three arguments, which are
-   * the name for the rejected name form, the conflicting name, and the name of
-   * the existing name form.
-   */
-  public static final int MSGID_SCHEMA_CONFLICTING_NAME_FORM_NAME =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 197;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry includes
-   * multiple structural objectclasses.  This takes three arguments, which are
-   * the DN of the entry, and the names of two of the conflicting structural
-   * objectclasses.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_MULTIPLE_STRUCTURAL_CLASSES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 198;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry does not
-   * include a structural objectclass.  This takes a single argument, which is
-   * the DN of the entry.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_NO_STRUCTURAL_CLASS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 199;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an entry with an attribute value that is invalid according to the
-   * syntax for that attribute.  This takes four arguments, which are the DN of
-   * the entry, the invalid value, the name of the attribute, and the reason
-   * that the value is invalid.
-   */
-  public static final int MSGID_ADD_OP_INVALID_SYNTAX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 200;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a compare request with an attribute type that does not exist in the
-   * specified entry.  This takes two arguments, which are the DN of the entry
-   * and the name of the attribute.
-   */
-  public static final int MSGID_COMPARE_OP_NO_SUCH_ATTR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 201;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a compare request with an attribute type that does not exist in the
-   * specified entry (or that exists but does not contain the requested set of
-   * options).  This takes two arguments, which are the DN of the entry and the
-   * name of the attribute.
-   */
-  public static final int MSGID_COMPARE_OP_NO_SUCH_ATTR_WITH_OPTIONS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 202;
-
-
-
-  /**
-   * The message ID for the string that will be used when the Directory Server
-   * has essentially completed its shutdown process (with only the error and
-   * debug loggers remaining to be stopped).  This does not take any arguments.
-   */
-  public static final int MSGID_SERVER_STOPPED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_NOTICE | 203;
-
-
-
-  /**
-   * The message ID for the message that will be logged if a worker thread is
-   * stopped because the Directory Server thread count has been reduced.  This
-   * takes a single argument, which is the name of the worker thread that is
-   * being stopped.
-   */
-  public static final int MSGID_WORKER_STOPPED_BY_REDUCED_THREADNUMBER =
-      CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 204;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry includes a
-   * single-valued attribute that contains more than one value.  This takes two
-   * arguments, which are the DN of the entry and the name of the attribute.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_ATTR_SINGLE_VALUED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 205;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry has an RDN
-   * that is missing an attribute that is required by a name form definition.
-   * This takes three arguments, which are the DN of the entry, the name or OID
-   * of the missing required attribute, and the name or OID of the name form
-   * that requires that attribute.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_RDN_MISSING_REQUIRED_ATTR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 206;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry has an RDN
-   * that contains an attribute that is not allowed by a name form definition.
-   * This takes three arguments, which are the DN of the entry, the name or OID
-   * of the disallowed attribute, and the name or OID of the name form that does
-   * not allow that attribute.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_RDN_DISALLOWED_ATTR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 207;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry is missing an
-   * attribute that is required by a DIT content rule.  This takes three
-   * arguments, which are the DN of the entry, the name of the missing
-   * attribute, and the name of the DIT content rule that requires that
-   * attribute.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_DCR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 208;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry contains an
-   * attribute that is prohibited by a DIT content rule.  This takes three
-   * arguments, which are the DN of the entry, the name of the prohibited
-   * attribute, and the name of the DIT content rule that requires that
-   * attribute.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_PROHIBITED_ATTR_FOR_DCR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 209;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry includes a
-   * user attribute that is not allowed by the entry's DIT content rule.  This
-   * takes three arguments, which are the DN of the entry, the name of the
-   * attribute, and the name of the DIT content rule.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_DISALLOWED_USER_ATTR_FOR_DCR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 210;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry includes an
-   * auxiliary objectclass that is not allowed by the entry's DIT content rule.
-   * This takes three arguments, which are the DN of the entry, the name of the
-   * attribute, and the name of the DIT content rule.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_DISALLOWED_AUXILIARY_CLASS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 211;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry could not be
-   * checked against a DIT structure rule because the server was unable to
-   * obtain a read lock on the parent entry.  This takes two arguments, which
-   * are the DN of the entry and the DN of the parent entry.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_DSR_COULD_NOT_LOCK_PARENT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 212;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry could not be
-   * checked against a DIT structure rule because the server was unable to
-   * retrieve its parent entry.  This takes two arguments, which are the DN of
-   * the entry and the DN of the parent entry.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_DSR_NO_PARENT_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 213;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry could not be
-   * checked against a DIT structure rule because its parent entry did not
-   * contain a single structural objectclass.  This takes two arguments, which
-   * are the DN of the entry and the DN of the parent entry.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_DSR_NO_PARENT_OC =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 214;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry was not in
-   * compliance with the DIT structure rule definition.  This takes four
-   * arguments, which are the DN of the entry, the name of the DIT structure
-   * rule, the structural objectclass of the entry being checked, and the
-   * structural objectclass of that entry's parent.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_DSR_DISALLOWED_SUPERIOR_OC =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 215;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while attempting to evaluate a DIT structure rule for an entry.
-   * This takes three arguments, which are the DN of the entry, the name of the
-   * DIT structure rule, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_COULD_NOT_CHECK_DSR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 216;
-
-
-
-  /**
-   * The message ID for the response message that will be sent to a client if
-   * an operation is canceled because the client initiated a bind on the
-   * connection.  This does not take any arguments.
-   */
-  public static final int MSGID_CANCELED_BY_BIND_REQUEST =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 217;
-
-
-
-  /**
-   * The message ID for the response message that will be sent to a client if
-   * an attempt is made to perform a bind as a user that does not exist in the
-   * server.  This takes a single argument, which is the bind DN.
-   */
-  public static final int MSGID_BIND_OPERATION_UNKNOWN_USER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 218;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a bind
-   * operation fails because the attempt to lock the user entry fails after
-   * multiple attempts.  This takes a single argument, which is the bind DN.
-   */
-  public static final int MSGID_BIND_OPERATION_CANNOT_LOCK_USER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 219;
-
-
-
-  /**
-   * The message ID for the message that will be used if a startup plugin fails
-   * and indicates that the startup process should be aborted.  This takes two
-   * arguments, which are the error message from the startup plugin and the
-   * unique ID for that message.
-   */
-  public static final int MSGID_STARTUP_PLUGIN_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 220;
-
-
-
-  /**
-   * The message ID for the response message that will be sent to a client if
-   * an attempt is made to perform a bind as a user that does not have a
-   * password.  This takes a single argument, which is the bind DN.
-   */
-  public static final int MSGID_BIND_OPERATION_NO_PASSWORD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 221;
-
-
-
-  /**
-   * The message ID for the response message that will be sent to a client if
-   * an attempt is made to perform a bind with an unknown or unsupported SASL
-   * mechanism.  This takes a single argument, which is the bind DN.
-   */
-  public static final int MSGID_BIND_OPERATION_UNKNOWN_SASL_MECHANISM =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 222;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * abandon an operation that the server doesn't know anything about.  This
-   * takes a single argument, which is the message ID of the operation to
-   * abandon.
-   */
-  public static final int MSGID_ABANDON_OP_NO_SUCH_OPERATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 223;
-
-
-
-  /**
-   * The message ID for the response message that will be used if an operation
-   * is canceled because the client connection was terminated by a pre-parse
-   * plugin.  This does not take any arguments.
-   */
-  public static final int MSGID_CANCELED_BY_PREPARSE_DISCONNECT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 224;
-
-
-
-  /**
-   * The message ID for the response message that will be used if an operation
-   * is canceled because the client connection was terminated by a pre-operation
-   * plugin.  This does not take any arguments.
-   */
-  public static final int MSGID_CANCELED_BY_PREOP_DISCONNECT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 225;
-
-
-
-  /**
-   * The message ID for the response message that will be used if an operation
-   * is canceled because the client connection was terminated by a
-   * post-operation plugin.  This does not take any arguments.
-   */
-  public static final int MSGID_CANCELED_BY_POSTOP_DISCONNECT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 226;
-
-
-
-  /**
-   * The message ID for the response message that will be used if it is not
-   * possible to obtain a read lock on an entry for a compare operation.  This
-   * takes a single argument, which is the DN of the entry that could not be
-   * locked.
-   */
-  public static final int MSGID_COMPARE_CANNOT_LOCK_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 227;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a compare
-   * operation fails because the requested entry does not exist.  This takes a
-   * single argument, which is the DN of the requested entry.
-   */
-  public static final int MSGID_COMPARE_NO_SUCH_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 228;
-
-
-
-  /**
-   * The message ID for the response message that will be sent to a client if
-   * an operation is canceled because the client requested that the operation be
-   * abandoned.  This does not take any arguments.
-   */
-  public static final int MSGID_CANCELED_BY_ABANDON_REQUEST =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 229;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an entry with a null DN.  This does not take any arguments.
-   */
-  public static final int MSGID_ADD_CANNOT_ADD_ROOT_DSE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 230;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an entry with a DN that does not have a parent and is not defined as
-   * a suffix in the server.  This takes a single argument, which is the DN of
-   * the entry to add.
-   */
-  public static final int MSGID_ADD_ENTRY_NOT_SUFFIX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 231;
-
-
-
-  /**
-   * The message ID for the message that will be used if the attempt to lock the
-   * parent entry fails when trying to perform an add.  This takes two
-   * arguments, which are the DN of the entry to add and the DN of its parent.
-   */
-  public static final int MSGID_ADD_CANNOT_LOCK_PARENT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 232;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an entry when the parent does not exist.  This takes two arguments,
-   * which are the DN of the entry to add and the DN of its parent.
-   */
-  public static final int MSGID_ADD_NO_PARENT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 233;
-
-
-
-  /**
-   * The message ID for the message that will be used if the attempt to lock the
-   * target entry fails when trying to perform an add.  This takes a single
-   * argument, which is the DN of the entry to add.
-   */
-  public static final int MSGID_ADD_CANNOT_LOCK_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 234;
-
-
-
-  /**
-   * The message ID for the message that will be used if the attempt to lock the
-   * target entry fails when trying to perform a delete.  This takes a single
-   * argument, which is the DN of the entry to delete.
-   */
-  public static final int MSGID_DELETE_CANNOT_LOCK_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 235;
-
-
-
-  /**
-   * The message ID for the response message that will be used if an operation
-   * is canceled because the client connection was terminated by a search result
-   * entry plugin.  This does not take any arguments.
-   */
-  public static final int MSGID_CANCELED_BY_SEARCH_ENTRY_DISCONNECT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 236;
-
-
-
-  /**
-   * The message ID for the response message that will be used if an operation
-   * is canceled because the client connection was terminated by a search result
-   * reference plugin.  This does not take any arguments.
-   */
-  public static final int MSGID_CANCELED_BY_SEARCH_REF_DISCONNECT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 237;
-
-
-
-  /**
-   * The message ID for the response message that will be used if search
-   * operation processing is stopped prematurely because the time limit was
-   * reached.  This takes a single argument, which is the effective time limit
-   * for the search.
-   */
-  public static final int MSGID_SEARCH_TIME_LIMIT_EXCEEDED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 238;
-
-
-
-  /**
-   * The message ID for the response message that will be used if search
-   * operation processing is stopped prematurely because the size limit was
-   * reached.  This takes a single argument, which is the effective size limit
-   * for the search.
-   */
-  public static final int MSGID_SEARCH_SIZE_LIMIT_EXCEEDED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 239;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a search
-   * request includes a base DN that is not associated with any backend.  This
-   * takes a single argument, which is the search base DN.
-   */
-  public static final int MSGID_SEARCH_BASE_DOESNT_EXIST =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 240;
-
-
-
-  /**
-   * The message ID for the response message that will be used if an entry
-   * cannot be deleted because it is not suitable for any of the backends in the
-   * server.  This takes a single argument, which is the DN of the entry to
-   * delete.
-   */
-  public static final int MSGID_DELETE_NO_SUCH_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 241;
-
-
-
-  /**
-   * The message ID for the response message that will be used if an entry
-   * cannot be deleted because the backend that contains it has a subordinate
-   * backend with a base DN that is below the target DN.  This takes two
-   * arguments, which are the DN of the entry to delete and the base DN of the
-   * subordinate backend.
-   */
-  public static final int MSGID_DELETE_HAS_SUB_BACKEND =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 242;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a modify DN
-   * operation fails because the new entry would not have a parent.  This takes
-   * a single argument, which is the DN of the current entry.
-   */
-  public static final int MSGID_MODDN_NO_PARENT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 243;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a modify DN
-   * operation fails because there is no backend for the current DN.  This takes
-   * a single argument, which is the DN of the current entry.
-   */
-  public static final int MSGID_MODDN_NO_BACKEND_FOR_CURRENT_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 244;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a modify DN
-   * operation fails because there is no backend for the new DN.  This takes two
-   * arguments, which are the DN of the current entry and the DN of the new
-   * entry.
-   */
-  public static final int MSGID_MODDN_NO_BACKEND_FOR_NEW_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 245;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a modify DN
-   * operation fails because the current and new DNs are in different backends.
-   * This takes two arguments, which are the DN of the current entry and the DN
-   * of the new entry.
-   */
-  public static final int MSGID_MODDN_DIFFERENT_BACKENDS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 246;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a modify DN
-   * operation fails because the server cannot obtain a write lock on the
-   * current DN.  This takes a single argument, which is the DN of the current
-   * entry.
-   */
-  public static final int MSGID_MODDN_CANNOT_LOCK_CURRENT_DN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 247;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a modify DN
-   * operation fails because an exception is encountered while attempting to
-   * lock the new DN for the entry.  This takes three arguments, which are the
-   * DN of the current entry, the DN of the new entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_MODDN_EXCEPTION_LOCKING_NEW_DN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 248;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a modify DN
-   * operation fails because the server cannot obtain a write lock on the new
-   * DN.  This takes two arguments, which are the DN of the current entry and
-   * the DN of the new entry.
-   */
-  public static final int MSGID_MODDN_CANNOT_LOCK_NEW_DN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 249;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a modify DN
-   * operation fails because the current entry does not exist.  This takes a
-   * single argument, which is the DN of the current entry.
-   */
-  public static final int MSGID_MODDN_NO_CURRENT_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 250;
-
-
-
-  /**
-   * The message ID for the message that will be used if the attempt to lock the
-   * target entry fails when trying to perform a modify.  This takes a single
-   * argument, which is the DN of the entry to modify.
-   */
-  public static final int MSGID_MODIFY_CANNOT_LOCK_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 251;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because it does not exist.  This takes a single argument, which is
-   * the DN of the target entry.
-   */
-  public static final int MSGID_MODIFY_NO_SUCH_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 252;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because an add modification does not contain any values.  This
-   * takes two arguments, which are the DN of the target entry and the name of
-   * the attribute to add.
-   */
-  public static final int MSGID_MODIFY_ADD_NO_VALUES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 253;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because an add modification includes values that violate the
-   * associated attribute syntax.  This takes four arguments, which are the DN
-   * of the target entry, the name of the attribute, the invalid value, and the
-   * reason that the value is invalid.
-   */
-  public static final int MSGID_MODIFY_ADD_INVALID_SYNTAX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 254;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because an add modification includes one or more values that are
-   * already present in the entry.  This takes three arguments, which are the DN
-   * of the entry, the name of the attribute, and the list of pre-existing
-   * values.
-   */
-  public static final int MSGID_MODIFY_ADD_DUPLICATE_VALUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 255;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because a delete modification would have removed an RDN value.
-   * This takes two arguments, which are the DN of the entry and the name of the
-   * RDN attribute.
-   */
-  public static final int MSGID_MODIFY_DELETE_RDN_ATTR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 256;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because a delete modification attempted to remove one or more
-   * values that were not present in the entry.  This takes three arguments,
-   * which are the DN of the entry, the name of the attribute, and the list of
-   * missing values.
-   */
-  public static final int MSGID_MODIFY_DELETE_MISSING_VALUES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 257;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because a delete modification attempted to remove values from an
-   * attribute that does not exist.  This takes two arguments, which are the DN
-   * of the entry and the name of the attribute.
-   */
-  public static final int MSGID_MODIFY_DELETE_NO_SUCH_ATTR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 258;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because a replace modification attempted to use one or more values
-   * that were invalid according to the associated syntax.  This takes four
-   * arguments, which are the DN of the entry, the name of the attribute, the
-   * invalid value, and a message explaining the reason that value is invalid.
-   */
-  public static final int MSGID_MODIFY_REPLACE_INVALID_SYNTAX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 259;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because an increment modification attempted to update an RDN
-   * attribute for the entry.  This takes two arguments, which are the DN of the
-   * entry and the name of the RDN attribute.
-   */
-  public static final int MSGID_MODIFY_INCREMENT_RDN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 260;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because an increment modification did not include a value.  This
-   * takes two arguments, which are the DN of the entry and the name of the
-   * attribute to increment.
-   */
-  public static final int MSGID_MODIFY_INCREMENT_REQUIRES_VALUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 261;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because an increment modification contained multiple values.  This
-   * takes two arguments, which are the DN of the entry and the name of the
-   * attribute to increment.
-   */
-  public static final int MSGID_MODIFY_INCREMENT_REQUIRES_SINGLE_VALUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 262;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because an increment modification included a value that was not
-   * an integer.  This takes three arguments, which are the DN of the entry, the
-   * name of the attribute to increment, and the invalid value.
-   */
-  public static final int MSGID_MODIFY_INCREMENT_PROVIDED_VALUE_NOT_INTEGER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 263;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because an increment modification targeted an attribute that did
-   * not exist in the entry.  This takes two arguments, which are the DN of the
-   * entry and the name of the attribute to increment.
-   */
-  public static final int MSGID_MODIFY_INCREMENT_REQUIRES_EXISTING_VALUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 264;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because an increment modification targeted an attribute that had a
-   * value that could not be parsed as an integer.  This takes three arguments,
-   * which are the DN of the entry, the name of the attribute to increment, and
-   * the invalid value.
-   */
-  public static final int MSGID_MODIFY_INCREMENT_REQUIRES_INTEGER_VALUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 265;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because the resulting change would have violated the schema.  This
-   * takes two arguments, which are the DN of the entry and the reason that the
-   * entry is v
-   */
-  public static final int MSGID_MODIFY_VIOLATES_SCHEMA =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 266;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because there is no backend that handles the targeted entry.
-   * This takes a single argument, which is the DN of the entry.
-   */
-  public static final int MSGID_MODIFY_NO_BACKEND_FOR_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 267;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extended operation
-   * cannot be processed because there is no corresponding extended operation
-   * handler.  This takes a single argument, which is the OID of the extended
-   * request.
-   */
-  public static final int MSGID_EXTENDED_NO_HANDLER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 268;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry has an unknown
-   * objectclass.  This takes two arguments, which are the DN of the entry and
-   * the name or OID of the unrecognized objectclass.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_UNKNOWN_OC =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 269;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * during backend search processing.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SEARCH_BACKEND_EXCEPTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 270;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a modify DN
-   * operation fails because the new entry would not be valid according to the
-   * server schema.  This takes two arguments, which are the DN of the current
-   * entry and the reason that the new entry would be invalid.
-   */
-  public static final int MSGID_MODDN_VIOLATES_SCHEMA =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 271;
-
-
-
-  /**
-   * The message ID for the message that will be used if a connection handler is
-   * finalized because the Directory Server is shutting down.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_CONNHANDLER_CLOSED_BY_SHUTDOWN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 272;
-
-
-
-  /**
-   * The message ID for the message that will be used if a connection handler is
-   * finalized because it has been interactively disabled.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_CONNHANDLER_CLOSED_BY_DISABLE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 273;
-
-
-
-  /**
-   * The message ID for the message that will be used if a connection handler is
-   * finalized because it has been removed.  This does not take any arguments.
-   */
-  public static final int MSGID_CONNHANDLER_CLOSED_BY_DELETE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 274;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * include an undefined objectclass in an entry.  This takes two arguments,
-   * which are the name of the objectclass and the DN of the entry.
-   */
-  public static final int MSGID_ENTRY_SET_UNKNOWN_OC =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 275;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an undefined objectclass to an entry.  This takes two arguments, which
-   * are the name of the objectclass and the DN of the entry.
-   */
-  public static final int MSGID_ENTRY_ADD_UNKNOWN_OC =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 276;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a duplicate objectclass to an entry.  This takes two arguments, which
-   * are the name of the objectclass and the DN of the entry.
-   */
-  public static final int MSGID_ENTRY_ADD_DUPLICATE_OC =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 277;
-
-
-
-  /**
-   * The message ID for the error message that will be logged if an attempt is
-   * made to perform a bind by a user with a password using an unknown storage
-   * scheme.  This takes two arguments, which are the unknown storage scheme and
-   * the DN of the user.
-   */
-  public static final int MSGID_BIND_OPERATION_UNKNOWN_STORAGE_SCHEME =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 278;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user attempts to bind
-   * with the wrong password.  This does not take any arguments.
-   */
-  public static final int MSGID_BIND_OPERATION_WRONG_PASSWORD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 279;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to validate the user's password.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_BIND_OPERATION_PASSWORD_VALIDATION_EXCEPTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 280;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * configClass command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_DESCRIPTION_CONFIG_CLASS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 281;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * configFile command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_DESCRIPTION_CONFIG_FILE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 282;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * version command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_DESCRIPTION_VERSION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 283;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * fullVersion command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_DESCRIPTION_FULLVERSION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 284;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * systemInfo command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_DESCRIPTION_SYSINFO =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 285;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * dumpMessages command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_DESCRIPTION_DUMPMESSAGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 286;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * usage command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_DESCRIPTION_USAGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 287;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to initialize the command-line arguments.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_DSCORE_CANNOT_INITIALIZE_ARGS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 288;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to parse the command-line arguments.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_DSCORE_ERROR_PARSING_ARGS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 289;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to bootstrap the Directory Server.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_DSCORE_CANNOT_BOOTSTRAP =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 290;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to start the Directory Server.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_DSCORE_CANNOT_START =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 291;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup information
-   * structure contains a line with no equal sign.  This takes two arguments,
-   * which are the line that was read and the path to the directory with this
-   * information.
-   */
-  public static final int MSGID_BACKUPINFO_NO_DELIMITER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 292;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup information
-   * structure contains a line with no property name.  This takes two arguments,
-   * which are the line that was read and the path to the directory with this
-   * information.
-   */
-  public static final int MSGID_BACKUPINFO_NO_NAME =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 293;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup information
-   * structure contains multiple backup IDs.  This takes three arguments, which
-   * are the path to the backup directory, the first backup ID, and the second
-   * backup ID.
-   */
-  public static final int MSGID_BACKUPINFO_MULTIPLE_BACKUP_IDS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 294;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup information
-   * structure contains a line with an unknown property.  This takes three
-   * arguments, which are the path to the backup directory, the name of the
-   * unknown property, and the provided value for that property.
-   */
-  public static final int MSGID_BACKUPINFO_UNKNOWN_PROPERTY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 295;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to decode a backup info structure.  This takes two
-   * arguments, which are the path to the backup directory and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_BACKUPINFO_CANNOT_DECODE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 296;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup information
-   * structure does not contain a backup ID.  This takes a single argument,
-   * which is the path to the backup directory.
-   */
-  public static final int MSGID_BACKUPINFO_NO_BACKUP_ID =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 297;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup information
-   * structure does not contain a backup date.  This takes two arguments, which
-   * are the backup ID and the path to the backup directory.
-   */
-  public static final int MSGID_BACKUPINFO_NO_BACKUP_DATE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 298;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a backup to a backup directory with the same ID as an existing backup.
-   * This takes two arguments, which are the conflicting backup ID and the path
-   * to the backup directory.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_ADD_DUPLICATE_ID =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 299;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup cannot be
-   * removed from a backup directory because it does not exist.  This takes
-   * two arguments, which are the provided backup ID and the path to the backup
-   * directory.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_NO_SUCH_BACKUP =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 300;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup cannot be
-   * removed because another backup is dependent on it.  This takes three
-   * arguments, which are the provided backup ID, the path to the backup
-   * directory, and the backup ID of the backup that depends on the specified
-   * backup.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_UNRESOLVED_DEPENDENCY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 301;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create the directory to hold the backup descriptor.  This takes
-   * two arguments, which are the path to the directory and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_CANNOT_CREATE_DIRECTORY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 302;
-
-
-
-  /**
-   * The message ID for the message that will be used if the backup directory
-   * path exists but is not a directory.  This takes a single argument, which is
-   * the path to the specified directory.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_NOT_DIRECTORY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 303;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to delete the saved backup descriptor so that the current
-   * descriptor can be renamed to it.  This takes four arguments, which are the
-   * path to the saved descriptor, a string representation of the exception that
-   * was caught, the path to the new descriptor, and the path to which the new
-   * descriptor should be renamed.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_CANNOT_DELETE_SAVED_DESCRIPTOR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 304;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to rename the current backup descriptor so that a new one can be
-   * used in its place.  This takes five arguments, which are the path to the
-   * current descriptor file, the path to which it was to be renamed, a string
-   * representation of the exception that was caught, the path of the new
-   * descriptor file, and the path to which the new descriptor file should be
-   * renamed.
-   */
-  public static final int
-       MSGID_BACKUPDIRECTORY_CANNOT_RENAME_CURRENT_DESCRIPTOR =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 305;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to rename the new descriptor with the correct name.  This takes
-   * three arguments, which are the path to the new descriptor, the path to
-   * which it should be renamed, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_CANNOT_RENAME_NEW_DESCRIPTOR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 306;
-
-
-
-  /**
-   * The message ID for the message that will be used the backup directory
-   * descriptor file does not exist.  This takes a single argument, which is the
-   * path to the specified file.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_NO_DESCRIPTOR_FILE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 307;
-
-
-
-  /**
-   * The message ID for the message that will be used the first line of the
-   * backup directory descriptor file is blank or null rather than the config
-   * entry DN.  This takes a single argument, which is the path to the
-   * descriptor file.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_CANNOT_READ_CONFIG_ENTRY_DN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 308;
-
-
-
-  /**
-   * The message ID for the message that will be used the first line of the
-   * backup directory descriptor file contains something other than the backend
-   * config entry DN.  This takes two arguments, which are the path to the
-   * descriptor file and the contents of the first line from that file.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_FIRST_LINE_NOT_DN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 309;
-
-
-
-  /**
-   * The message ID for the message that will be used the value on the first
-   * line of the backup directory descriptor file cannot be parsed as a DN.
-   * This takes three arguments, which are the value that could not be decoded,
-   * the path to the descriptor file, and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_BACKUPDIRECTORY_CANNOT_DECODE_DN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 310;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to acquire
-   * a shared file lock is rejected because an exclusive lock is already held by
-   * the same JVM.  This takes a single argument, which is the path to the file
-   * that was to be locked.
-   */
-  public static final int MSGID_FILELOCKER_LOCK_SHARED_REJECTED_BY_EXCLUSIVE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 311;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to create a
-   * lock file failed.  This takes two arguments, which are the path to the file
-   * that was to be created and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_FILELOCKER_LOCK_SHARED_FAILED_CREATE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 312;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to open a
-   * lock file failed.  This takes two arguments, which are the path to the file
-   * that was to be opened and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_FILELOCKER_LOCK_SHARED_FAILED_OPEN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 313;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to lock a
-   * file failed.  This takes two arguments, which are the path to the file
-   * that was to be locked and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_FILELOCKER_LOCK_SHARED_FAILED_LOCK =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 314;
-
-
-
-  /**
-   * The message ID for the message that will be used if a shared lock is not
-   * granted on a requested file.  This takes a single argument, which is the
-   * path to the file that was to be locked.
-   */
-  public static final int MSGID_FILELOCKER_LOCK_SHARED_NOT_GRANTED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 315;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to acquire
-   * an exclusive file lock is rejected because an exclusive lock is already
-   * held by the same JVM.  This takes a single argument, which is the path to
-   * the file that was to be locked.
-   */
-  public static final int
-       MSGID_FILELOCKER_LOCK_EXCLUSIVE_REJECTED_BY_EXCLUSIVE =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 316;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to acquire
-   * an exclusive file lock is rejected because a shared lock is already held by
-   * the same JVM.  This takes a single argument, which is the path to the file
-   * that was to be locked.
-   */
-  public static final int MSGID_FILELOCKER_LOCK_EXCLUSIVE_REJECTED_BY_SHARED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 317;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to create a
-   * lock file failed.  This takes two arguments, which are the path to the file
-   * that was to be created and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_FILELOCKER_LOCK_EXCLUSIVE_FAILED_CREATE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 318;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to open a
-   * lock file failed.  This takes two arguments, which are the path to the file
-   * that was to be opened and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_FILELOCKER_LOCK_EXCLUSIVE_FAILED_OPEN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 319;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to lock a
-   * file failed.  This takes two arguments, which are the path to the file
-   * that was to be locked and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_FILELOCKER_LOCK_EXCLUSIVE_FAILED_LOCK =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 320;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exclusive lock is
-   * not granted on a requested file.  This takes a single argument, which is
-   * the path to the file that was to be locked.
-   */
-  public static final int MSGID_FILELOCKER_LOCK_EXCLUSIVE_NOT_GRANTED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 321;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release an exclusive lock.  This takes two arguments, which
-   * are the path to the lock file and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_FILELOCKER_UNLOCK_EXCLUSIVE_FAILED_RELEASE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 322;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release a shared lock.  This takes two arguments, which are
-   * the path to the lock file and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_FILELOCKER_UNLOCK_SHARED_FAILED_RELEASE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 323;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request is received
-   * to unlock a file for which no lock was believed to be held.  This takes a
-   * single argument, which is the path to the specified lock file.
-   */
-  public static final int MSGID_FILELOCKER_UNLOCK_UNKNOWN_FILE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 324;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when an established connection is lost.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_SERVER_DOWN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 325;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when a client-side error occurs.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_LOCAL_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 326;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when an error occurs when attempting to encode a request.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_ENCODING_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 327;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when an error occurs when attempting to decode a
-   * response.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_DECODING_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 328;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when an operation times out.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_TIMEOUT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 329;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when the client requests an unknown or unsupported
-   * authentication mechanism.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_AUTH_UNKNOWN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 330;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when the user provided a malformed search filter.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_FILTER_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 331;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when the user cancelled an operation.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_USER_CANCELLED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 332;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when there is a problem with the provided parameter(s).
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_PARAM_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 333;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when the client runs out of memory.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_NO_MEMORY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 334;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when an error occurs while trying to establish a
-   * connection.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_CONNECT_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 335;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when a requested operation is not supported.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_NOT_SUPPORTED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 336;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when an expected control is not found.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_CONTROL_NOT_FOUND =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 337;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when no results were returned for an operation that
-   * expected them.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_NO_RESULTS_RETURNED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 338;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when there are more results to be processed.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_MORE_RESULTS_TO_RETURN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 339;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when a client referral loop is detected.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_CLIENT_LOOP =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 340;
-
-
-
-  /**
-   * The message ID for the string representation of the client-side result code
-   * that will be used when a referral hop limit is reached.
-   */
-  public static final int MSGID_RESULT_CLIENT_SIDE_REFERRAL_LIMIT_EXCEEDED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 341;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release a shared lock for a Directory Server backend during
-   * the server shutdown process.  This takes two arguments, which are the
-   * backend ID for the associated backend and a message that explains the
-   * problem that occurred.
-   */
-  public static final int MSGID_SHUTDOWN_CANNOT_RELEASE_SHARED_BACKEND_LOCK =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 342;
-
-
-
-  /**
-   * The message ID for the message that will be used if the Directory Server
-   * cannot acquire an exclusive lock for the server process.  This takes two
-   * arguments, which are the path to the lock file and a message explaining why
-   * the lock could not be acquired.
-   */
-  public static final int MSGID_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 343;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release the exclusive server lock.  This takes two arguments,
-   * which are the path to the lock file and a message explaining why the lock
-   * could not be released.
-   */
-  public static final int MSGID_CANNOT_RELEASE_EXCLUSIVE_SERVER_LOCK =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 344;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to task processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_TASK =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 345;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because one of the targeted attributes was marked
-   * no-user-modification.  This takes two arguments, which are the DN of the
-   * target entry and the name of the attribute that cannot be modified.
-   */
-  public static final int MSGID_MODIFY_ATTR_IS_NO_USER_MOD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 346;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * added because one of the included attributes was marked
-   * no-user-modification.  This takes two arguments, which are the DN of the
-   * target entry and the name of the attribute that cannot be modified.
-   */
-  public static final int MSGID_ADD_ATTR_IS_NO_USER_MOD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 347;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * renamed because one of the attributes in the old RDN was marked
-   * no-user-modification.  This takes two arguments, which are the DN of the
-   * target entry and the name of the attribute that cannot be modified.
-   */
-  public static final int MSGID_MODDN_OLD_RDN_ATTR_IS_NO_USER_MOD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 348;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * renamed because one of the attributes in the old RDN was marked
-   * no-user-modification.  This takes two arguments, which are the DN of the
-   * target entry and the name of the attribute that cannot be modified.
-   */
-  public static final int MSGID_MODDN_NEW_RDN_ATTR_IS_NO_USER_MOD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 349;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to increment
-   * an attribute by a pre-operation modify DN plugin fails because there is no
-   * such attribute in the target entry.  This takes two arguments, which are
-   * the DN of the entry and the name of the attribute that could not be
-   * incremented.
-   */
-  public static final int MSGID_MODDN_PREOP_INCREMENT_NO_ATTR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 350;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to increment
-   * an attribute by a pre-operation modify DN plugin fails because there are
-   * multiple values for that attribute in the target entry.  This takes two
-   * arguments, which are the DN of the entry and the name of the attribute that
-   * could not be incremented.
-   */
-  public static final int MSGID_MODDN_PREOP_INCREMENT_MULTIPLE_VALUES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 351;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to increment
-   * an attribute by a pre-operation modify DN plugin fails because the value of
-   * the specified attribute is not an integer.  This takes two arguments, which
-   * are the DN of the entry and the name of the attribute that could not be
-   * incremented.
-   */
-  public static final int MSGID_MODDN_PREOP_INCREMENT_VALUE_NOT_INTEGER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 352;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to increment
-   * an attribute by a pre-operation modify DN plugin fails because there is no
-   * value for the increment amount.  This takes two arguments, which are the DN
-   * of the entry and the name of the attribute that could not be incremented.
-   */
-  public static final int MSGID_MODDN_PREOP_INCREMENT_NO_AMOUNT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 353;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to increment
-   * an attribute by a pre-operation modify DN plugin fails because there are
-   * multiple increment amount values.  This takes two arguments, which are the
-   * DN of the entry and the name of the attribute that could not be
-   * incremented.
-   */
-  public static final int MSGID_MODDN_PREOP_INCREMENT_MULTIPLE_AMOUNTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 354;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to increment
-   * an attribute by a pre-operation modify DN plugin fails because the provided
-   * increment amount value is not an integer.  This takes two arguments, which
-   * are the DN of the entry and the name of the attribute that could not be
-   * incremented.
-   */
-  public static final int MSGID_MODDN_PREOP_INCREMENT_AMOUNT_NOT_INTEGER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 355;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to alter the
-   * target entry during a pre-operation modify plugin would have caused that
-   * entry to violate the server schema.  This takes two arguments, which are
-   * the DN of the entry and a message explaining the violation that occurred.
-   */
-  public static final int MSGID_MODDN_PREOP_VIOLATES_SCHEMA =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 356;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify request
-   * contains an LDAP assertion control and the associated filter does not match
-   * the target entry.  This takes a single argument, which is the DN of the
-   * target entry.
-   */
-  public static final int MSGID_MODIFY_ASSERTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 357;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify request
-   * contains an LDAP assertion control but a problem occurred while trying to
-   * compare the associated filter against the target entry.  This takes two
-   * arguments, which are the DN of the target entry and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_MODIFY_CANNOT_PROCESS_ASSERTION_FILTER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 358;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify request
-   * contains a critical control that is not supported by the core server or the
-   * associated backend.  This takes two arguments, which are the DN of the
-   * target entry and the OID of the unsupported control.
-   */
-  public static final int MSGID_MODIFY_UNSUPPORTED_CRITICAL_CONTROL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 359;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete request
-   * contains the LDAP assertion control but an error occurred while attempting
-   * to retrieve the target entry for comparison.  This takes two arguments,
-   * which are the DN of the target entry and a message explaining the problem
-   * that occurred.
-   */
-  public static final int MSGID_DELETE_CANNOT_GET_ENTRY_FOR_ASSERTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 360;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete request
-   * contains the LDAP assertion control but the target entry does not exist.
-   * This takes a single argument, which is the DN of the target entry.
-   */
-  public static final int MSGID_DELETE_NO_SUCH_ENTRY_FOR_ASSERTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 361;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete request
-   * contains an LDAP assertion control and the associated filter does not match
-   * the target entry.  This takes a single argument, which is the DN of the
-   * target entry.
-   */
-  public static final int MSGID_DELETE_ASSERTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 362;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete request
-   * contains an LDAP assertion control but a problem occurred while trying to
-   * compare the associated filter against the target entry.  This takes two
-   * arguments, which are the DN of the target entry and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_DELETE_CANNOT_PROCESS_ASSERTION_FILTER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 363;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete request
-   * contains a critical control that is not supported by the core server or the
-   * associated backend.  This takes two arguments, which are the DN of the
-   * target entry and the OID of the unsupported control.
-   */
-  public static final int MSGID_DELETE_UNSUPPORTED_CRITICAL_CONTROL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 364;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify DN request
-   * contains an LDAP assertion control and the associated filter does not match
-   * the target entry.  This takes a single argument, which is the DN of the
-   * target entry.
-   */
-  public static final int MSGID_MODDN_ASSERTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 365;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify DN request
-   * contains an LDAP assertion control but a problem occurred while trying to
-   * compare the associated filter against the target entry.  This takes two
-   * arguments, which are the DN of the target entry and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_MODDN_CANNOT_PROCESS_ASSERTION_FILTER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 366;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify DN request
-   * contains a critical control that is not supported by the core server or the
-   * associated backend.  This takes two arguments, which are the DN of the
-   * target entry and the OID of the unsupported control.
-   */
-  public static final int MSGID_MODDN_UNSUPPORTED_CRITICAL_CONTROL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 367;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add request contains
-   * an LDAP assertion control and the associated filter does not match the
-   * provided entry.  This takes a single argument, which is the DN of the
-   * provided entry.
-   */
-  public static final int MSGID_ADD_ASSERTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 368;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add request contains
-   * an LDAP assertion control but a problem occurred while trying to compare
-   * the associated filter against the provided entry.  This takes two
-   * arguments, which are the DN of the provided entry and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_ADD_CANNOT_PROCESS_ASSERTION_FILTER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 369;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add request contains
-   * a critical control that is not supported by the core server or the
-   * associated backend.  This takes two arguments, which are the DN of the
-   * provided entry and the OID of the unsupported control.
-   */
-  public static final int MSGID_ADD_UNSUPPORTED_CRITICAL_CONTROL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 370;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search request
-   * contains the LDAP assertion control but an error occurred while attempting
-   * to retrieve the base entry for comparison.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_SEARCH_CANNOT_GET_ENTRY_FOR_ASSERTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 371;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search request
-   * contains the LDAP assertion control but the base entry does not exist.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_SEARCH_NO_SUCH_ENTRY_FOR_ASSERTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 372;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search request
-   * contains an LDAP assertion control and the associated filter does not match
-   * the target entry.  This does not take any arguments.
-   */
-  public static final int MSGID_SEARCH_ASSERTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 373;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search request
-   * contains an LDAP assertion control but a problem occurred while trying to
-   * compare the associated filter against the base entry.  This takes a single
-   * arguments, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_SEARCH_CANNOT_PROCESS_ASSERTION_FILTER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 374;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search request
-   * contains a critical control that is not supported by the core server or the
-   * associated backend.  This takes a single argument, which is the OID of the
-   * unsupported control.
-   */
-  public static final int MSGID_SEARCH_UNSUPPORTED_CRITICAL_CONTROL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 375;
-
-
-
-  /**
-   * The message ID for the message that will be used if a compare request
-   * contains an LDAP assertion control and the associated filter does not match
-   * the target entry.  This takes a single argument, which is the DN of the
-   * target entry.
-   */
-  public static final int MSGID_COMPARE_ASSERTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 376;
-
-
-
-  /**
-   * The message ID for the message that will be used if a compare request
-   * contains an LDAP assertion control but a problem occurred while trying to
-   * compare the associated filter against the target entry.  This takes two
-   * arguments, which are the DN of the target entry and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_COMPARE_CANNOT_PROCESS_ASSERTION_FILTER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 377;
-
-
-
-  /**
-   * The message ID for the message that will be used if a compare request
-   * contains a critical control that is not supported by the core server or the
-   * associated backend.  This takes two arguments, which are the DN of the
-   * target entry and the OID of the unsupported control.
-   */
-  public static final int MSGID_COMPARE_UNSUPPORTED_CRITICAL_CONTROL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 378;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add operation was
-   * not actually performed in the backend because the LDAP no-op control was
-   * included in the request from the client.  This does not take any arguments.
-   */
-  public static final int MSGID_ADD_NOOP =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 379;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete operation was
-   * not actually performed in the backend because the LDAP no-op control was
-   * included in the request from the client.  This does not take any arguments.
-   */
-  public static final int MSGID_DELETE_NOOP =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 380;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add operation was
-   * not actually performed in the backend because the LDAP no-op control was
-   * included in the request from the client.  This does not take any arguments.
-   */
-  public static final int MSGID_MODIFY_NOOP =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 381;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add operation was
-   * not actually performed in the backend because the LDAP no-op control was
-   * included in the request from the client.  This does not take any arguments.
-   */
-  public static final int MSGID_MODDN_NOOP =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 382;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete request
-   * contains an LDAP pre-read request control but the target entry does not
-   * exist.  This takes a single argument, which is the DN of the target entry.
-   */
-  public static final int MSGID_DELETE_PREREAD_NO_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 383;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used if a proxied authorization request is refused.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_RESULT_AUTHORIZATION_DENIED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 384;
-
-
-
-  /**
-   * The message ID for the message that will be used if the entry being added
-   * is missing one or more of the RDN attributes.  This takes two arguments,
-   * which are the DN of the entry to add and the name of the missing RDN
-   * attribute.
-   */
-  public static final int MSGID_ADD_MISSING_RDN_ATTRIBUTE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 385;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * notifying a change listener.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_ADD_ERROR_NOTIFYING_CHANGE_LISTENER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 386;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * notifying a persistent search.  This takes two arguments, which are a
-   * string representation of the persistent search and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_ADD_ERROR_NOTIFYING_PERSISTENT_SEARCH =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 387;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * notifying a change listener.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_DELETE_ERROR_NOTIFYING_CHANGE_LISTENER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 388;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * notifying a persistent search.  This takes two arguments, which are a
-   * string representation of the persistent search and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_DELETE_ERROR_NOTIFYING_PERSISTENT_SEARCH =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 389;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * notifying a change listener.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_MODIFY_ERROR_NOTIFYING_CHANGE_LISTENER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 390;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * notifying a persistent search.  This takes two arguments, which are a
-   * string representation of the persistent search and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_MODIFY_ERROR_NOTIFYING_PERSISTENT_SEARCH =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 391;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * notifying a change listener.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_MODDN_ERROR_NOTIFYING_CHANGE_LISTENER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 392;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * notifying a persistent search.  This takes two arguments, which are a
-   * string representation of the persistent search and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_MODDN_ERROR_NOTIFYING_PERSISTENT_SEARCH =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 393;
-
-
-
-  /**
-   * The message ID for the message that will be used if a bind request contains
-   * a critical control that is not supported.  This takes a single argument,
-   * which is the OID of the control.
-   */
-  public static final int MSGID_BIND_UNSUPPORTED_CRITICAL_CONTROL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 394;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user entry contains
-   * multiple values for the user-specific size limit attribute.  This takes a
-   * single argument, which is the DN of the user entry.
-   */
-  public static final int MSGID_BIND_MULTIPLE_USER_SIZE_LIMITS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 395;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a user-specific size limit value as an integer.  This takes
-   * two arguments, which are the provided size limit value and the DN of the
-   * user entry.
-   */
-  public static final int MSGID_BIND_CANNOT_PROCESS_USER_SIZE_LIMIT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 396;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user entry contains
-   * multiple values for the user-specific time limit attribute.  This takes a
-   * single argument, which is the DN of the user entry.
-   */
-  public static final int MSGID_BIND_MULTIPLE_USER_TIME_LIMITS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 397;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a user-specific time limit value as an integer.  This takes
-   * two arguments, which are the provided time limit value and the DN of the
-   * user entry.
-   */
-  public static final int MSGID_BIND_CANNOT_PROCESS_USER_TIME_LIMIT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 398;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for cases in which a request is rejected because the associated
-   * assertion failed to match the target entry.
-   */
-  public static final int MSGID_RESULT_ASSERTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 399;
-
-
-
-  /**
-   * The message ID for the message that will be used if the target entry of an
-   * add operation already exists.  This takes a single argument, which is the
-   * DN of the entry to add.
-   */
-  public static final int MSGID_ADD_ENTRY_ALREADY_EXISTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 400;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * preoperation synchronization processing for an add operation.  This takes
-   * three arguments, which are the connection ID, operation ID, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_ADD_SYNCH_PREOP_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 401;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * postoperation synchronization processing for an add operation.  This takes
-   * three arguments, which are the connection ID, operation ID, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_ADD_SYNCH_POSTOP_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 402;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * preoperation synchronization processing for a delete operation.  This takes
-   * three arguments, which are the connection ID, operation ID, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_DELETE_SYNCH_PREOP_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 403;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * postoperation synchronization processing for a delete operation.  This
-   * takes three arguments, which are the connection ID, operation ID, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_DELETE_SYNCH_POSTOP_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 404;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * preoperation synchronization processing for a modify operation.  This takes
-   * three arguments, which are the connection ID, operation ID, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_MODIFY_SYNCH_PREOP_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 405;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * postoperation synchronization processing for a modify operation.  This
-   * takes three arguments, which are the connection ID, operation ID, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_MODIFY_SYNCH_POSTOP_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 406;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * preoperation synchronization processing for a modify DN operation.  This
-   * takes three arguments, which are the connection ID, operation ID, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_MODDN_SYNCH_PREOP_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 407;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * postoperation synchronization processing for a modify DN operation.  This
-   * takes three arguments, which are the connection ID, operation ID, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_MODDN_SYNCH_POSTOP_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 408;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * conflict resolution synchronization processing for an add operation.  This
-   * takes three arguments, which are the connection ID, operation ID, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_ADD_SYNCH_CONFLICT_RESOLUTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 409;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * conflict resolution synchronization processing for a delete operation.
-   * This takes three arguments, which are the connection ID, operation ID, and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_DELETE_SYNCH_CONFLICT_RESOLUTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 410;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * conflict resolution synchronization processing for a modify operation.
-   * This takes three arguments, which are the connection ID, operation ID, and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_MODIFY_SYNCH_CONFLICT_RESOLUTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 411;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * conflict resolution synchronization processing for a modify DN operation.
-   * This takes three arguments, which are the connection ID, operation ID, and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_MODDN_SYNCH_CONFLICT_RESOLUTION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 412;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add operation is
-   * refused because the server is read-only.  This takes a single argument,
-   * which is the DN of the entry to add.
-   */
-  public static final int MSGID_ADD_SERVER_READONLY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 413;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add operation is
-   * refused because the backend is read-only.  This takes a single argument,
-   * which is the DN of the entry to add.
-   */
-  public static final int MSGID_ADD_BACKEND_READONLY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 414;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete operation is
-   * refused because the server is read-only.  This takes a single argument,
-   * which is the DN of the entry to delete.
-   */
-  public static final int MSGID_DELETE_SERVER_READONLY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 415;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delete operation is
-   * refused because the backend is read-only.  This takes a single argument,
-   * which is the DN of the entry to delete.
-   */
-  public static final int MSGID_DELETE_BACKEND_READONLY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 416;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify operation is
-   * refused because the server is read-only.  This takes a single argument,
-   * which is the DN of the entry to modify.
-   */
-  public static final int MSGID_MODIFY_SERVER_READONLY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 417;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify operation is
-   * refused because the backend is read-only.  This takes a single argument,
-   * which is the DN of the entry to modify.
-   */
-  public static final int MSGID_MODIFY_BACKEND_READONLY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 418;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify DN operation
-   * is refused because the server is read-only.  This takes a single argument,
-   * which is the DN of the entry to rename.
-   */
-  public static final int MSGID_MODDN_SERVER_READONLY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 419;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify DN operation
-   * is refused because the backend is read-only.  This takes a single argument,
-   * which is the DN of the entry to rename.
-   */
-  public static final int MSGID_MODDN_BACKEND_READONLY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 420;
-
-
-
-  /**
-   * The message ID for the message that will be used if a simple bind request
-   * contains a DN but does not contain a password.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_BIND_DN_BUT_NO_PASSWORD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 421;
-
-
-
-  /**
-   * The message ID for the message that will be used if the default password
-   * policy entry does not contain a password attribute.  This takes a single
-   * argument, which is the DN of the password policy configuration entry.
-   */
-  public static final int MSGID_PWPOLICY_NO_PASSWORD_ATTRIBUTE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 422;
-
-
-
-  /**
-   * The message ID for the message that will be used if the default password
-   * policy entry does not contain any default storage schemes.  This takes a
-   * single argument, which is the DN of the password policy configuration
-   * entry.
-   */
-  public static final int MSGID_PWPOLICY_NO_DEFAULT_STORAGE_SCHEMES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 423;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * password configuration attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_PW_ATTR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 424;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password attribute
-   * is not defined in the server schema.  This takes two arguments, which are
-   * the DN of the password policy configuration entry and the name of the
-   * undefined attribute.
-   */
-  public static final int MSGID_PWPOLICY_UNDEFINED_PASSWORD_ATTRIBUTE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 425;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password attribute
-   * has an invalid syntax.  This takes three arguments, which are the DN of
-   * the password policy configuration entry, the name of the password policy
-   * attribute, and the syntax OID for that attribute.
-   */
-  public static final int MSGID_PWPOLICY_INVALID_PASSWORD_ATTRIBUTE_SYNTAX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 426;
-
-
-
-  /**
-   * The message ID for the message that will be used if the an error occurs
-   * while trying to determine the password attribute.  This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_PASSWORD_ATTRIBUTE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 427;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * default storage schemes configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_DEFAULT_STORAGE_SCHEMES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 428;
-
-
-
-  /**
-   * The message ID for the message that will be used if a requested default
-   * storage scheme is not defined in the server.  This takes two arguments,
-   * which are the DN of the password policy configuration entry and the name
-   * of the requested storage scheme.
-   */
-  public static final int MSGID_PWPOLICY_NO_SUCH_DEFAULT_SCHEME =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 429;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the default storage schemes.  This takes two arguments,
-   * which are the DN of the password policy configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_DEFAULT_STORAGE_SCHEMES =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 430;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * deprecated storage schemes configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int
-       MSGID_PWPOLICY_DESCRIPTION_DEPRECATED_STORAGE_SCHEMES =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 431;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the deprecated storage schemes.  This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_DEPRECATED_STORAGE_SCHEMES =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 432;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * password validators configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_PASSWORD_VALIDATORS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 433;
-
-
-
-  /**
-   * The message ID for the message that will be used if a requested password
-   * validator is not defined in the server.  This takes two arguments, which
-   * are the DN of the password policy configuration entry and the DN of the
-   * requested password validator.
-   */
-  public static final int MSGID_PWPOLICY_NO_SUCH_VALIDATOR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 434;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the set of password validators.  This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_PASSWORD_VALIDATORS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 435;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * notification handlers configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_NOTIFICATION_HANDLERS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 436;
-
-
-
-  /**
-   * The message ID for the message that will be used if a requested account
-   * status notification handler is not defined in the server.  This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * the DN of the requested notification handler.
-   */
-  public static final int MSGID_PWPOLICY_NO_SUCH_NOTIFICATION_HANDLER =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 437;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the set of account status notification handlers.  This
-   * takes two arguments, which are the DN of the password policy configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_NOTIFICATION_HANDLERS =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 438;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * allow user password changes configuration attribute.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_ALLOW_USER_PW_CHANGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 439;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to allow user password changes.  This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_ALLOW_USER_PW_CHANGES =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 440;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * require current password configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_REQUIRE_CURRENT_PW =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 441;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to require the current password for password
-   * changes.  This takes two arguments, which are the DN of the password policy
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_REQUIRE_CURRENT_PW =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 442;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * force change on reset configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_FORCE_CHANGE_ON_RESET =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 443;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to force a password change on administrative
-   * reset.  This takes two arguments, which are the DN of the password policy
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_FORCE_CHANGE_ON_RESET =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 444;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * skip validation for administrators configuration attribute.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_SKIP_ADMIN_VALIDATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 445;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to skip admin validation.  This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_SKIP_ADMIN_VALIDATION =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 446;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * password generator configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_PASSWORD_GENERATOR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 447;
-
-
-
-  /**
-   * The message ID for the message that will be used if a requested password
-   * generator does not exist.  This takes two arguments, which are the DN of
-   * the password policy configuration entry and the DN of the requested
-   * password generator configuration entry.
-   */
-  public static final int MSGID_PWPOLICY_NO_SUCH_GENERATOR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 448;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the password generator. This takes two arguments, which
-   * are the DN of the password policy configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_PASSWORD_GENERATOR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 449;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * require secure authentication configuration attribute.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_REQUIRE_SECURE_AUTH =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 450;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to require secure authentication. This takes
-   * two arguments, which are the DN of the password policy configuration entry
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_REQUIRE_SECURE_AUTH =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 451;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * require secure password changes configuration attribute.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_REQUIRE_SECURE_CHANGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 452;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to require secure password changes. This takes
-   * two arguments, which are the DN of the password policy configuration entry
-   * and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_REQUIRE_SECURE_CHANGES =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 453;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * allow pre-encoded passwords configuration attribute.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_ALLOW_PREENCODED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 454;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to allow pre-encoded passwords. This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_ALLOW_PREENCODED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 455;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * minimum password age configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_MIN_AGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 456;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the minimum password age. This takes two arguments,
-   * which are the DN of the password policy configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_MIN_AGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 457;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * maximum password age configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_MAX_AGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 458;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the maximum password age. This takes two arguments,
-   * which are the DN of the password policy configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_MAX_AGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 459;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * maximum password reset age configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_MAX_RESET_AGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 460;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the maximum password reset age. This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_MAX_RESET_AGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 461;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * expiration warning interval configuration attribute.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_WARNING_INTERVAL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 462;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the expiration warning interval. This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_WARNING_INTERVAL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 463;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * expire without warning configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_EXPIRE_WITHOUT_WARNING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 464;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the expire without warning setting. This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_EXPIRE_WITHOUT_WARNING =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 465;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * allow expired password changes configuration attribute.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_ALLOW_EXPIRED_CHANGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 466;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the allow expired password changes setting. This takes
-   * two arguments, which are the DN of the password policy configuration entry
-   * and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_ALLOW_EXPIRED_CHANGES =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 467;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * grace login count configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_GRACE_LOGIN_COUNT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 468;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the grace login count. This takes two arguments, which
-   * are the DN of the password policy configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_GRACE_LOGIN_COUNT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 469;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * lockout failure count configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_LOCKOUT_FAILURE_COUNT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 470;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the lockout failure count. This takes two arguments,
-   * which are the DN of the password policy configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_LOCKOUT_FAILURE_COUNT =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 471;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * lockout duration configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_LOCKOUT_DURATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 472;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the lockout duration. This takes two arguments, which
-   * are the DN of the password policy configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_LOCKOUT_DURATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 473;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * lockout failure expiration interval configuration attribute.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_FAILURE_EXPIRATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 474;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the lockout failure expiration interval. This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_FAILURE_EXPIRATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 475;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * require change time configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_REQUIRE_CHANGE_BY_TIME =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 476;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the require change time. This takes two arguments,
-   * which are the DN of the password policy configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_REQUIRE_CHANGE_BY_TIME =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 477;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * last login time attribute configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_LAST_LOGIN_TIME_ATTR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 478;
-
-
-
-  /**
-   * The message ID for the message that will be used if the last login time
-   * attribute is not defined in the server schema.  This takes two arguments,
-   * which are the DN of the password policy configuration entry and the name
-   * of the requested attribute type.
-   */
-  public static final int MSGID_PWPOLICY_UNDEFINED_LAST_LOGIN_TIME_ATTRIBUTE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 479;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the last login time attribute. This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_LAST_LOGIN_TIME_ATTR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 480;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * last login time format configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_LAST_LOGIN_TIME_FORMAT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 481;
-
-
-
-  /**
-   * The message ID for the message that will be used if the last login time
-   * format string is invalid.  This takes two arguments, which are the DN of
-   * the password policy configuration entry and the invalid format string.
-   */
-  public static final int MSGID_PWPOLICY_INVALID_LAST_LOGIN_TIME_FORMAT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 482;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the last login time format. This takes two arguments,
-   * which are the DN of the password policy configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_LAST_LOGIN_TIME_FORMAT =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 483;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * previous last login time format configuration attribute.  This does not
-   * take any arguments.
-   */
-  public static final int
-       MSGID_PWPOLICY_DESCRIPTION_PREVIOUS_LAST_LOGIN_TIME_FORMAT =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 484;
-
-
-
-  /**
-   * The message ID for the message that will be used if a previous last login
-   * time format string is invalid.  This takes two arguments, which are the DN
-   * of the password policy configuration entry and the invalid format string.
-   */
-  public static final int
-       MSGID_PWPOLICY_INVALID_PREVIOUS_LAST_LOGIN_TIME_FORMAT =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 485;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the previous last login time formats. This takes two
-   * arguments, which are the DN of the password policy configuration entry and
-   * a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_PREVIOUS_LAST_LOGIN_TIME_FORMAT =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 486;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * idle lockout duration configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_IDLE_LOCKOUT_INTERVAL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 487;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the idle lockout duration. This takes two arguments,
-   * which are the DN of the password policy configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_IDLE_LOCKOUT_INTERVAL =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 488;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * password policy has been updated.  This takes a single argument, which is
-   * the DN of the password policy configuration entry.
-   */
-  public static final int MSGID_PWPOLICY_UPDATED_POLICY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 489;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password policy
-   * subentry DN specified in an entry is invalid.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_ADD_INVALID_PWPOLICY_DN_SYNTAX =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 490;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry references a
-   * password policy that doesn't exist.  This takes a single argument, which is
-   * the DN of the password policy subentry.
-   */
-  public static final int MSGID_ADD_NO_SUCH_PWPOLICY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 491;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * force change on add configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_FORCE_CHANGE_ON_ADD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 492;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to force a password change on first
-   * authentication.  This takes two arguments, which are the DN of the password
-   * policy configuration entry and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_PWPOLICY_CANNOT_DETERMINE_FORCE_CHANGE_ON_ADD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 493;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * allow multiple password values configuration attribute.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_PWPOLICY_DESCRIPTION_ALLOW_MULTIPLE_PW_VALUES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 494;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether a user entry may have multiple password values.
-   * This takes two arguments, which are the DN of the password policy
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_PWPOLICY_CANNOT_DETERMINE_ALLOW_MULTIPLE_PW_VALUES =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 495;
-
-
-
-  /**
-   * The message ID for the message that will be used if attempt is made to
-   * use attribute options with the password attribute.  This takes a single
-   * argument, which is the name of the password attribute.
-   */
-  public static final int MSGID_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 496;
-
-
-
-  /**
-   * The message ID for the message that will be used if attempt is made to use
-   * multiple password values.  This takes a single argument, which is the name
-   * of the password attribute.
-   */
-  public static final int MSGID_PWPOLICY_MULTIPLE_PW_VALUES_NOT_ALLOWED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 497;
-
-
-
-  /**
-   * The message ID for the message that will be used if attempt is made to use
-   * a pre-encoded password value.  This takes a single argument, which is the
-   * name of the password attribute.
-   */
-  public static final int MSGID_PWPOLICY_PREENCODED_NOT_ALLOWED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 498;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the password
-   * validators rejected the provided password.  This takes two arguments, which
-   * are the name of the password attribute and a message explaining the
-   * failure.
-   */
-  public static final int MSGID_PWPOLICY_VALIDATION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 499;
-
-
-
-  /**
-   * The message ID for the message that will be used if expire without warning
-   * is disabled but there is no warning interval.  This takes a single
-   * argument, which is the DN of the password policy configuration entry.
-   */
-  public static final int
-       MSGID_PWPOLICY_MUST_HAVE_WARNING_IF_NOT_EXPIRE_WITHOUT_WARNING =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 500;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * request an operation on a client connection while a bind is in progress for
-   * that connection.  This does not take any arguments.
-   */
-  public static final int MSGID_ENQUEUE_BIND_IN_PROGRESS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 501;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * request an operation other than a password change when the user's account
-   * is in a forced change mode.  This does not take any arguments.
-   */
-  public static final int MSGID_ENQUEUE_MUST_CHANGE_PASSWORD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 502;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode a password policy subentry value as a DN.  This takes
-   * three arguments, which are the password policy subentry value, the DN of
-   * the user's entry, and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_DECODE_SUBENTRY_VALUE_AS_DN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 504;
-
-
-
-  /**
-   * The message ID for the message that will be used if a requested password
-   * policy is not defined in the Directory Server.  This takes two arguments,
-   * which are the user DN and the DN of the password policy subentry.
-   */
-  public static final int MSGID_PWPSTATE_NO_SUCH_POLICY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 505;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode an attribute value according to the generalized time
-   * syntax.  This takes four arguments, which are the provided value, the
-   * name of the attribute, the DN of the user entry, and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 506;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode an attribute value as a Boolean.  This takes three
-   * arguments, which are the provided value, the name of the attribute, and
-   * the DN of the user entry.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_DECODE_BOOLEAN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 507;
-
-
-
-  /**
-   * The message ID for the message that will be used if an add
-   * operation cannot be processed due to insufficient access rights.
-   * This message takes a single argument, the name of the entry that
-   * could not be added.
-   */
-  public static final int MSGID_ADD_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 508;
-
-  /**
-   * The message ID for the message that will be used if a bind
-   * operation cannot be processed due to insufficient access rights.
-   * This message takes a single argument, the name of the entry/user
-   * attempting to bind.
-   */
-  public static final int MSGID_BIND_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 509;
-
-  /**
-   * The message ID for the message that will be used if a compare
-   * operation cannot be processed due to insufficient access rights.
-   * This message takes a single argument, the name of the entry that
-   * could not be compared.
-   */
-  public static final int MSGID_COMPARE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 510;
-
-  /**
-   * The message ID for the message that will be used if a delete
-   * operation cannot be processed due to insufficient access rights.
-   * This message takes a single argument, the name of the entry that
-   * could not be deleted.
-   */
-  public static final int MSGID_DELETE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 511;
-
-  /**
-   * The message ID for the message that will be used if an extended
-   * operation cannot be processed due to insufficient access rights.
-   * This message takes a single argument, the OID of the extended
-   * operation.
-   */
-  public static final int MSGID_EXTENDED_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 512;
-
-  /**
-   * The message ID for the message that will be used if a modify DN
-   * operation cannot be processed due to insufficient access rights.
-   * This message takes a single argument, the name of the entry that
-   * could not be renamed.
-   */
-  public static final int MSGID_MODDN_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 513;
-
-  /**
-   * The message ID for the message that will be used if a modify
-   * operation cannot be processed due to insufficient access rights.
-   * This message takes a single argument, the name of the entry that
-   * could not be modified.
-   */
-  public static final int MSGID_MODIFY_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 514;
-
-  /**
-   * The message ID for the message that will be used if a search
-   * operation cannot be processed due to insufficient access rights.
-   * This message takes a single argument, the name of the search
-   * operation's base entry.
-   */
-  public static final int MSGID_SEARCH_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 515;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user tries to
-   * authenticate using an insecure simple bind in violation of the password
-   * policy.  This takes a single argument, which is the DN of the user.
-   */
-  public static final int MSGID_BIND_OPERATION_INSECURE_SIMPLE_BIND =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 516;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user tries to
-   * authenticate using a disabled account.  This takes a single argument, which
-   * is the DN of the user.
-   */
-  public static final int MSGID_BIND_OPERATION_ACCOUNT_DISABLED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 517;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user tries to
-   * authenticate using a failure locked account.  This takes a single argument,
-   * which is the DN of the user.
-   */
-  public static final int MSGID_BIND_OPERATION_ACCOUNT_FAILURE_LOCKED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 518;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user tries to
-   * authenticate using a reset locked account.  This takes a single argument,
-   * which is the DN of the user.
-   */
-  public static final int MSGID_BIND_OPERATION_ACCOUNT_RESET_LOCKED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 519;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user tries to
-   * authenticate using an idle locked account.  This takes a single argument,
-   * which is the DN of the user.
-   */
-  public static final int MSGID_BIND_OPERATION_ACCOUNT_IDLE_LOCKED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 520;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user tries to
-   * authenticate using an expired password.  This takes a single argument,
-   * which is the DN of the user.
-   */
-  public static final int MSGID_BIND_OPERATION_PASSWORD_EXPIRED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 521;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to perform an internal modification to update the user's entry
-   * with password policy state information.  This takes two arguments, which
-   * are the DN of the user and the error message from the modify operation.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_UPDATE_USER_ENTRY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 522;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user tries to
-   * authenticate using an insecure simple bind in violation of the password
-   * policy.  This takes two arguments, which are the name of the SASL mechanism
-   * and the DN of the user.
-   */
-  public static final int MSGID_BIND_OPERATION_INSECURE_SASL_BIND =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 523;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to parse the DN for the work queue configuration entry.  This
-   * takes two arguments, which are the DN and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_WORKQ_CANNOT_PARSE_DN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 524;
-
-
-
-  /**
-   * The message ID for the message that will be used if the work queue
-   * configuration entry does not exist.  This takes a single argument, which is
-   * the DN of the entry.
-   */
-  public static final int MSGID_WORKQ_NO_CONFIG =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 525;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * class configuration attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_WORKQ_DESCRIPTION_CLASS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 526;
-
-
-
-  /**
-   * The message ID for the message that will be used if the work queue
-   * configuration entry does not specify the class name.  This takes two
-   * arguments, which are the DN of the configuration entry and the name of the
-   * missing attribute.
-   */
-  public static final int MSGID_WORKQ_NO_CLASS_ATTR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 527;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to load the work queue class.  This takes two arguments, which are
-   * the name of the class and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_WORKQ_CANNOT_LOAD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 528;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to instantiate the work queue.  This takes two arguments, which are
-   * the name of the class and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_WORKQ_CANNOT_INSTANTIATE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 529;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register an alternate root bind DN with a DN that is already in use.  This
-   * takes two arguments, which are the alternate bind DN and the real DN of the
-   * user to which the mapping is established.
-   */
-  public static final int
-       MSGID_CANNOT_REGISTER_DUPLICATE_ALTERNATE_ROOT_BIND_DN =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 530;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user tries to
-   * authenticate using an expired account.  This takes a single argument, which
-   * is the DN of the user.
-   */
-  public static final int MSGID_BIND_OPERATION_ACCOUNT_EXPIRED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 531;
-
-
-
-  /**
-   * The message ID for the message that will be used if a change to the
-   * password attribute included one or more attribute options.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_MODIFY_PASSWORDS_CANNOT_HAVE_OPTIONS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 532;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user password change
-   * is refused because users cannot change their own passwords.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_MODIFY_NO_USER_PW_CHANGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 533;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because it was not attempted over a secure channel.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_MODIFY_REQUIRE_SECURE_CHANGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 534;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because the password was within the minimum age.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_MODIFY_WITHIN_MINIMUM_AGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 535;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because multiple password values were provided.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_MODIFY_MULTIPLE_VALUES_NOT_ALLOWED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 536;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because the password was pre-encoded.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_MODIFY_NO_PREENCODED_PASSWORDS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 537;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because it included an invalid modification type on the password
-   * attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_MODIFY_INVALID_MOD_TYPE_FOR_PASSWORD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 538;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to delete a
-   * user password value is rejected because there are no existing passwords in
-   * the user's entry.  This does not take any arguments.
-   */
-  public static final int MSGID_MODIFY_NO_EXISTING_VALUES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 539;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode a user password.  This takes a single argument, which
-   * is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_MODIFY_CANNOT_DECODE_PW =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 540;
-
-
-
-  /**
-   * The message ID for the message that will be used if a provided password to
-   * delete does not match any passwords in the user's entry.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_MODIFY_INVALID_PASSWORD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 541;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user did not
-   * provide the current password.  This does not take any arguments.
-   */
-  public static final int MSGID_MODIFY_PW_CHANGE_REQUIRES_CURRENT_PW =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 542;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password change
-   * would result in multiple passwords.  This does not take any arguments.
-   */
-  public static final int MSGID_MODIFY_MULTIPLE_PASSWORDS_NOT_ALLOWED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 543;
-
-
-
-  /**
-   * The message ID for the message that will be used if password validation
-   * fails.  This takes a single argument, which is a message explaining the
-   * rejection.
-   */
-  public static final int MSGID_MODIFY_PW_VALIDATION_FAILED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 544;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user's password
-   * needs to be changed but the modification doesn't update the password.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_MODIFY_MUST_CHANGE_PASSWORD =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 545;
-
-
-
-  /**
-   * The message ID for the string that will be used for the error log category
-   * for messages related to password policy processing.
-   */
-  public static final int MSGID_ERROR_CATEGORY_PASSWORD_POLICY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 546;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user's password is
-   * about to expire.  This takes a single argument, which is the length of time
-   * until the password expires.
-   */
-  public static final int MSGID_BIND_PASSWORD_EXPIRING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_WARNING | 547;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user's account
-   * becomes temporarily locked due to too many failed attempts.  This takes a
-   * single argument, which is a string representation of the length of time
-   * until the account is unlocked.
-   */
-  public static final int MSGID_BIND_ACCOUNT_TEMPORARILY_LOCKED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 548;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user's account
-   * becomes permanently locked due to too many failed attempts.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_BIND_ACCOUNT_PERMANENTLY_LOCKED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 549;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * modify the account disabled attribute using an invalid value.  This takes
-   * two arguments, which are the name of the attribute and a message explaining
-   * the reason the value was invalid.
-   */
-  public static final int MSGID_MODIFY_INVALID_DISABLED_VALUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 550;
-
-
-
-  /**
-   * The message ID for the message that will be used in the account status
-   * notification indicating that a user's password has been changed.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_MODIFY_PASSWORD_CHANGED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 551;
-
-
-
-  /**
-   * The message ID for the message that will be used in the account status
-   * notification indicating that a user's password has been reset by an
-   * administrator.  This does not take any arguments.
-   */
-  public static final int MSGID_MODIFY_PASSWORD_RESET =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 552;
-
-
-
-  /**
-   * The message ID for the message that will be used in the account status
-   * notification indicating that a user's account has been enabled.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_MODIFY_ACCOUNT_ENABLED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 553;
-
-
-
-  /**
-   * The message ID for the message that will be used in the account status
-   * notification indicating that a user's account has been disabled.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_MODIFY_ACCOUNT_DISABLED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 554;
-
-
-
-  /**
-   * The message ID for the message that will be used in the account status
-   * notification indicating that a user's account has been unlocked.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_MODIFY_ACCOUNT_UNLOCKED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 555;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a password that already exists.  This does not take any arguments.
-   */
-  public static final int MSGID_MODIFY_PASSWORD_EXISTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 556;
-
-
-   /**
-   * The message ID for the message that will be used if a user entry contains
-   * multiple values for the user-specific lookthrough limit attribute.
-    * This takes a single argument, which is the DN of the user entry.
-   */
-  public static final int MSGID_BIND_MULTIPLE_USER_LOOKTHROUGH_LIMITS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 557;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a user-specific lookthrough value as an integer. This takes
-   * two arguments, which are the provided lookthrough limit value and the DN
-   * of the user entry.
-   */
-  public static final int MSGID_BIND_CANNOT_PROCESS_USER_LOOKTHROUGH_LIMIT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 558;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an attribute with one or more values that conflict with existing
-   * values.  This takes a single argument, which is the name of the attribute.
-   */
-  public static final int MSGID_ENTRY_DUPLICATE_VALUES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 559;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove an attribute value that doesn't exist in the entry.  This takes a
-   * single argument, which is the name of the attribute.
-   */
-  public static final int MSGID_ENTRY_NO_SUCH_VALUE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 560;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform an increment on the objectClass attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_ENTRY_OC_INCREMENT_NOT_SUPPORTED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 561;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a modify with an unknown modification type.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_ENTRY_UNKNOWN_MODIFICATION_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 562;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * increment an attribute that has multiple values.  This takes a single
-   * argument, which is the name of the attribute.
-   */
-  public static final int MSGID_ENTRY_INCREMENT_MULTIPLE_VALUES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 563;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform an increment but there was not exactly one value in the provided
-   * modification. This takes a single argument, which is the name of the
-   * attribute.
-   */
-  public static final int MSGID_ENTRY_INCREMENT_INVALID_VALUE_COUNT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 564;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform an increment but either the current value or the increment cannot
-   * be parsed as an integer.  This takes a single argument, which is the name
-   * of the attribute.
-   */
-  public static final int MSGID_ENTRY_INCREMENT_CANNOT_PARSE_AS_INT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 565;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify operation does
-   * not contain any modifications.  This takes a single argument, which is the
-   * DN of the entry to modify.
-   */
-  public static final int MSGID_MODIFY_NO_MODIFICATIONS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 566;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * noDetach command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_DESCRIPTION_NODETACH =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 567;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * increment an attribute that does not exist.  This takes a single argument,
-   * which is the name of the attribute.
-   */
-  public static final int MSGID_ENTRY_INCREMENT_NO_SUCH_ATTRIBUTE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 568;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * start-ds tool.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_TOOL_DESCRIPTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 569;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extended operation
-   * cannot be processed because it contains an unsupported critical control.
-   * This takes two arguments, which are the OID of the extended request and the
-   * OID of the unsupported control.
-   */
-  public static final int MSGID_EXTENDED_UNSUPPORTED_CRITICAL_CONTROL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 570;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a backend with an ID that is already registered.  This takes a
-   * single argument, which is the conflicting backend ID.
-   */
-  public static final int MSGID_REGISTER_BACKEND_ALREADY_EXISTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 571;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a base DN that is already registered.  This takes three arguments,
-   * which are the base DN, the backend ID for the new backend, and the backend
-   * ID for the already-registered backend.
-   */
-  public static final int MSGID_REGISTER_BASEDN_ALREADY_EXISTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 572;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a base DN with a backend that already has another base DN that
-   * contains conflicting hierarchy.  This takes three arguments, which are the
-   * base DN to be registered, the backend ID, and the already-registered base
-   * DN.
-   */
-  public static final int MSGID_REGISTER_BASEDN_HIERARCHY_CONFLICT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 573;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a base DN with a backend that already contains other base DNs
-   * that do not share the same parent base DN.  This takes three arguments,
-   * which are the base DN to be registered, the backend ID, and the
-   * already-registered base DN.
-   */
-  public static final int MSGID_REGISTER_BASEDN_DIFFERENT_PARENT_BASES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 574;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a base DN with a backend that already contains other base DNs
-   * that are subordinate to a backend whereas the new base DN is not
-   * subordinate to any backend.  This takes three arguments, which are the base
-   * DN to be registered, the backend ID, and the backend ID of the parent
-   * backend.
-   */
-  public static final int MSGID_REGISTER_BASEDN_NEW_BASE_NOT_SUBORDINATE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 575;
-
-
-
-  /**
-   * The message ID for the message that will be used if a newly-registered
-   * backend has a base DN for which a corresponding entry already exists in the
-   * server.  This takes three arguments, which are the backend ID for the
-   * existing backend, the base DN for the new backend, and the backend ID for
-   * the new backend.
-   */
-  public static final int MSGID_REGISTER_BASEDN_ENTRIES_IN_MULTIPLE_BACKENDS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 576;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * deregister a base DN that is not registered.  This takes a single argument,
-   * which is the base DN to deregister.
-   */
-  public static final int MSGID_DEREGISTER_BASEDN_NOT_REGISTERED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 577;
-
-
-
-  /**
-   * The message ID for the message that will be used if a base DN containing
-   * both superior and subordinate backends is deregistered, leaving the
-   * possibility for missing entries in the data hierarchy.  This takes two
-   * arguments, which are the base DN that has been deregistered and the backend
-   * ID of the associated backend.
-   */
-  public static final int MSGID_DEREGISTER_BASEDN_MISSING_HIERARCHY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 578;
-
-
-  /**
-   * The message ID for the message that will be used if a circular reference is
-   * detected when attempting to rebuild schema element dependencies.  This
-   * takes a single argument, which is the definition string for the schema
-   * element that triggered the circular reference error.
-   */
-  public static final int MSGID_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 579;
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * do certain operations using an unauthenticated connection.
-   */
-  public static final int MSGID_REJECT_UNAUTHENTICATED_OPERATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 580;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an entry with an attribute type that is marked OBSOLETE.  This takes
-   * two arguments, which are the DN of the entry and the name of the attribute
-   * type.
-   */
-  public static final int MSGID_ADD_ATTR_IS_OBSOLETE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 581;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an entry with an objectclass that is marked OBSOLETE.  This takes two
-   * arguments, which are the DN of the entry and the name of the objectclass.
-   */
-  public static final int MSGID_ADD_OC_IS_OBSOLETE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 582;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because one of the targeted attributes was marked OBSOLETE.  This
-   * takes two arguments, which are the DN of the target entry and the name of
-   * the attribute.
-   */
-  public static final int MSGID_MODIFY_ATTR_IS_OBSOLETE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 583;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an OBSOLETE objectclass to an entry.  This takes two arguments, which
-   * are the name of the objectclass and the DN of the entry.
-   */
-  public static final int MSGID_ENTRY_ADD_OBSOLETE_OC =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 584;
-
-
-
-  /**
-   * The message ID for the response message that will be used if a modify DN
-   * operation fails because the new RDN contains an attribute type which is
-   * marked OBSOLETE in the server schema.  This takes two arguments, which are
-   * the DN of the current entry and the name or OID of the obsolete attribute
-   * type.
-   */
-  public static final int MSGID_MODDN_NEWRDN_ATTR_IS_OBSOLETE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 585;
-
-
-
-  /**
-   * The message ID for the message that will be used if there was no DIT
-   * structure rule associated with an entry, but there was a DIT structure rule
-   * for its parent.  This takes two arguments, which are the DN of the entry
-   * and the DN of the parent entry.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_VIOLATES_PARENT_DSR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 586;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while attempting to evaluate a DIT structure rule for an entry's
-   * parent.  This takes two arguments, which are the DN of the entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_COULD_NOT_CHECK_PARENT_DSR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 587;
-
-
-
-  /**
-   * The message ID for the message that will be used if a client connection is
-   * terminated because the associated authentication or authorization entry was
-   * removed from the server.  It takes a single argument, which is the DN of
-   * the entry that has been removed.
-   */
-  public static final int MSGID_CLIENTCONNECTION_DISCONNECT_DUE_TO_DELETE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_WARNING | 588;
-
-
-
-  /**
-   * The message ID for the message that will be used if a modify request
-   * includes an attempt to reset another user's password by an individual that
-   * does not have the appropriate privileges.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_MODIFY_PWRESET_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 589;
-
-
-
-  /**
-   * The message ID for the message that will be used if a compare request
-   * targets the server configuration but the requester doesn't have the
-   * appropriate privileges.  This does not take any arguments.
-   */
-  public static final int MSGID_COMPARE_CONFIG_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 590;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an entry with one or more privileges but the user doesn't have
-   * sufficient privilege to update privileges.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_ADD_CHANGE_PRIVILEGE_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 591;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * modify the set of privileges contained in an entry but the user doesn't
-   * have sufficient privileges to make that change.  This does not take any
-   * arguments.
-   */
-  public static final int
-       MSGID_MODIFY_CHANGE_PRIVILEGE_INSUFFICIENT_PRIVILEGES =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 592;
-
-
-
-  /**
-   * The message ID for the audit message that will be generated when a client
-   * attempts to perform a privileged operation that requires a single
-   * privilege.  This takes five arguments, which are the connection ID, the
-   * operation ID, the authentication DN, the name of the requested privilege,
-   * and the result of the determination.
-   */
-  public static final int MSGID_CLIENTCONNECTION_AUDIT_HASPRIVILEGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 593;
-
-
-
-  /**
-   * The message ID for the audit message that will be generated when a client
-   * attempts to perform a privileged operation that requires a multiple
-   * privileges.  This takes five arguments, which are the connection ID, the
-   * operation ID, the authentication DN, a formatted list of the names of the
-   * requested privileges, and the result of the determination.
-   */
-  public static final int MSGID_CLIENTCONNECTION_AUDIT_HASPRIVILEGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 594;
-
-
-
-  /**
-   * The message ID for the message that will be used when a client attempts to
-   * use the proxied authorization control without sufficient privileges.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 595;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * checkStartability command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_DESCRIPTION_CHECK_STARTABILITY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 596;
-
-  /**
-   * The message ID for the message that will be used if an entry includes an
-   * attribute with no values.  This takes two arguments, which are the DN of
-   * the entry and the name of the attribute.
-   */
-  public static final int MSGID_ENTRY_SCHEMA_ATTR_NO_VALUES =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 597;
-
-
-  /**
-   * The message ID for the message that will be used when the user asks to run
-   * the server in no-detach mode and the server is configured to run as a
-   * service.  This message does not take arguments.
-   */
-  public static final int MSGID_DSCORE_ERROR_NODETACH_AND_WINDOW_SERVICE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 598;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * windowsNetStart command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DSCORE_DESCRIPTION_WINDOWS_NET_START =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 599;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry is encoded
-   * with a version number that we don't support.  This takes a single argument,
-   * which is a hexadecimal representation of the version number byte.
-   */
-  public static final int MSGID_ENTRY_DECODE_UNRECOGNIZED_VERSION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 600;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is caught
-   * while attempting to decode an entry.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_ENTRY_DECODE_EXCEPTION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 601;
-
-
-
-  /**
-   * The message ID for the message that will be used if a NOT filter does not
-   * contain exactly one filter component.  This takes three arguments, which
-   * are the filter string and the start and end position of the NOT filter.
-   */
-  public static final int MSGID_SEARCH_FILTER_NOT_EXACTLY_ONE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 602;
-
-
-
-  /**
-   * The message ID for the message that will be used if a sort key string
-   * has an invalid order indicator.  This takes a single argument, which is the
-   * sort key string.
-   */
-  public static final int MSGID_SORTKEY_INVALID_ORDER_INDICATOR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 603;
-
-
-
-  /**
-   * The message ID for the message that will be used if a sort key string
-   * has an undefined attribute type.  This takes two arguments, which are the
-   * sort key string and the name of the attribute type.
-   */
-  public static final int MSGID_SORTKEY_UNDEFINED_TYPE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 604;
-
-
-
-  /**
-   * The message ID for the message that will be used if a sort key string
-   * has an attribute type with no ordering matching rule.  This takes two
-   * arguments, which are the sort key string and the name of the attribute
-   * type.
-   */
-  public static final int MSGID_SORTKEY_NO_ORDERING_RULE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 605;
-
-
-
-  /**
-   * The message ID for the message that will be used if a sort key string
-   * has an undefined ordering rule.  This takes two arguments, which are the
-   * sort key string and the name of the ordering rule.
-   */
-  public static final int MSGID_SORTKEY_UNDEFINED_ORDERING_RULE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 606;
-
-
-
-  /**
-   * The message ID for the message that will be used if a sort order string
-   * does not include any sort keys.  This takes a single argument, which is the
-   * sort order string.
-   */
-  public static final int MSGID_SORTORDER_DECODE_NO_KEYS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 607;
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for search operations containing the VLV request control that do
-   * not also include the server-side sort control.
-   */
-  public static final int MSGID_RESULT_SORT_CONTROL_MISSING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 608;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for search operations containing the VLV request control with an
-   * invalid offset or target count.
-   */
-  public static final int MSGID_RESULT_OFFSET_RANGE_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 609;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the request would have impacted
-   * information in multiple servers or repositories.
-   */
-  public static final int MSGID_RESULT_VIRTUAL_LIST_VIEW_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 610;
-
-
-  /**
-   * The message ID for the message that will be used if a request control
-   * cannot be used due to insufficient access rights. This message takes a
-   * single argument, which is the OID string of the control being used.
-   */
-  public static final
-  int MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 611;
-
-
-  /**
-   * The message ID for the message that will be used if a connection handler
-   * has a host port already in use by another connection handler.  This takes
-   * two parameters: the connection handler name and the host port that
-   * is trying to be used twice.
-   */
-  public static final int MSGID_HOST_PORT_ALREADY_SPECIFIED =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 612;
-
-
-  /**
-   * The message ID for the message that will be used if a connection handler
-   * has a host port that we could not use.  This takes two parameters: the host
-   * port and the connection handler name.
-   */
-  public static final int MSGID_HOST_PORT_CANNOT_BE_USED =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 613;
-
-  /**
-   * The message ID for the message that will be used if no connection handler
-   * was enabled and we are not in the mode where we start
-   * the server with no connection handlers.  This does not take any arguments.
-   */
-  public static final int MSGID_NOT_AVAILABLE_CONNECTION_HANDLERS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 614;
-
-
-  /**
-   * The message ID for the message that will be used if no connection handler
-   * could be properly started and we are not in the mode where we start
-   * the server with no connection handlers.  This does not take any arguments.
-   */
-  public static final int MSGID_ERROR_STARTING_CONNECTION_HANDLERS =
-    CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 615;
-
-
-
-  /**
-   * The message ID for the message that will be used if a bind is rejected '
-   * because the server is in lockdown mode and the client was not a root user.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_BIND_REJECTED_LOCKDOWN_MODE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 616;
-
-
-
-  /**
-   * The message ID for the message that will be used as the alert message
-   * string when the server enters lockdown mode.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_DIRECTORY_SERVER_ENTERING_LOCKDOWN_MODE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 617;
-
-
-
-  /**
-   * The message ID for the message that will be as used the alert message
-   * string when the server leaves lockdown mode.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_DIRECTORY_SERVER_LEAVING_LOCKDOWN_MODE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_NOTICE | 618;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unauthorized client
-   * tries to submit a request with the server in lockdown mode.
-   */
-  public static final int MSGID_REJECT_OPERATION_IN_LOCKDOWN_MODE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_NOTICE | 619;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute used an
-   * undefined token.  This takes a single argument, which is the hex
-   * representation of the token bytes.
-   */
-  public static final int MSGID_COMPRESSEDSCHEMA_UNRECOGNIZED_AD_TOKEN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 620;
-
-
-
-  /**
-   * The message ID for the message that will be used if an object class set
-   * used an undefined token.  This takes a single argument, which is the hex
-   * representation of the token bytes.
-   */
-  public static final int MSGID_COMPRESSEDSCHEMA_UNKNOWN_OC_TOKEN =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 621;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to write the updated compressed schema definitions.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_COMPRESSEDSCHEMA_CANNOT_WRITE_UPDATED_DATA =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 622;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode an entry encode config object because it had an invalid
-   * length.  This does not take any arguments.
-   */
-  public static final int MSGID_ENTRYENCODECFG_INVALID_LENGTH =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 623;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used to indicate no action was taken as a result of the LDAP no-op
-   * control.  This does not take any arguments.
-   */
-  public static final int MSGID_RESULT_NO_OPERATION =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 624;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * create an extensible match search filter without providing either an
-   * attribute type or a matching rule ID.  This does not take any arguments.
-   */
-  public static final int
-       MSGID_SEARCH_FILTER_CREATE_EXTENSIBLE_MATCH_NO_AT_OR_MR =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 625;
-
-
-
-  /**
-   * The message ID for the message that will be used if a filter string cannot
-   * be decoded because it contained an extensible match component that did not
-   * include either an attribute description or a matching rule ID.  This takes
-   * two arguments, which are the filter string and the start position of the
-   * extensible match component within that filter string.
-   */
-  public static final int MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 626;
-
-
-
-  /**
-   * The message ID for the message that will be used if a filter string cannot
-   * be decoded because it contained an extensible match component that
-   * referenced an unknown matching rule ID.  This takes three arguments, which
-   * are the filter string, the start position of the extensible match component
-   * within that filter string, and the unknown matching rule ID.
-   */
-  public static final int MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_SUCH_MR =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 627;
-
-
-
-  /**
-   * The message ID for the message that will be used if a bind attempt is
-   * rejected because either the entire server or the user's backend has a
-   * writability mode of "disabled" and the server would not be able to update
-   * the authentication failure count or the last login time.  This takes a
-   * single argument, which is the target user DN.
-   */
-  public static final int MSGID_BIND_OPERATION_WRITABILITY_DISABLED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 628;
-
-
-
-  /**
-   * The message ID for the message that will be used if a new password is found
-   * in the password history.  This does not take any arguments.
-   */
-  public static final int MSGID_MODIFY_PW_IN_HISTORY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 629;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user entry contains
-   * multiple values for the user-specific idle time limit attribute.  This
-   * takes a single argument, which is the DN of the user entry.
-   */
-  public static final int MSGID_BIND_MULTIPLE_USER_IDLE_TIME_LIMITS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 630;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a user-specific idle time limit value as an integer.  This
-   * takes two arguments, which are the provided time limit value and the DN of
-   * the user entry.
-   */
-  public static final int MSGID_BIND_CANNOT_PROCESS_USER_IDLE_TIME_LIMIT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_WARNING | 631;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the idle
-   * time limit has been exceeded for a client connection.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_IDLETIME_LIMIT_EXCEEDED =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_INFORMATIONAL | 632;
-
-
-  /**
-   * The message ID for the message that will be used if the maximum password
-   * age is enabled, but the warning interval is longer than the maximum age.
-   * This takes a single argument, which is the DN of the password policy
-   * configuration entry.
-   */
-  public static final int MSGID_PWPOLICY_WARNING_INTERVAL_LARGER_THAN_MAX_AGE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 633;
-
-
-
-  /**
-   * The message ID for the message that will be used if the maximum password
-   * age is enabled, but the sum of the warning interval and the minimum age is
-   * greater than the maximum age.  This takes a single argument, which is the
-   * DN of the password policy configuration entry.
-   */
-  public static final int
-       MSGID_PWPOLICY_MIN_AGE_PLUS_WARNING_GREATER_THAN_MAX_AGE =
-            CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 634;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a workflow with an ID that is already registered with the server.
-   * This takes a single argument, which is the conflicting workflow ID.
-   */
-  public static final int MSGID_REGISTER_WORKFLOW_ALREADY_EXISTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 635;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a workflow node with an ID that is already registered with a
-   * network group.  This takes two arguments, which are the conflicting
-   * workflow ID and the network group ID.
-   */
-  public static final int MSGID_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 636;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a network group with an ID that is already registered.  This
-   * takes a single argument, which is the conflicting network group ID.
-   */
-  public static final int MSGID_REGISTER_NETWORK_GROUP_ALREADY_EXISTS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 637;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred while
-   * trying to terminate a client connection.  It takes two arguments, which are
-   * the connection ID and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_IDLETIME_DISCONNECT_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_MILD_ERROR | 638;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurred in the time thread.  It takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_IDLETIME_UNEXPECTED_ERROR =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 639;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * change the directory environment configuration while the server is running.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_DIRCFG_SERVER_ALREADY_RUNNING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 640;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid server root
-   * directory is specified.  This takes a single argument, which is the invalid
-   * server root directory.
-   */
-  public static final int MSGID_DIRCFG_INVALID_SERVER_ROOT =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 641;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid
-   * configuration file is specified.  This takes a single argument, which is
-   * the invalid configuration file.
-   */
-  public static final int MSGID_DIRCFG_INVALID_CONFIG_FILE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 642;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid config
-   * handler class is specified.  This takes a single argument, which is the
-   * fully-qualified class name.
-   */
-  public static final int MSGID_DIRCFG_INVALID_CONFIG_CLASS =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 643;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid schema
-   * directory is specified.  This takes a single argument, which is the invalid
-   * schema directory.
-   */
-  public static final int MSGID_DIRCFG_INVALID_SCHEMA_DIRECTORY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 644;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid lock
-   * directory is specified.  This takes a single argument, which is the invalid
-   * lock directory.
-   */
-  public static final int MSGID_DIRCFG_INVALID_LOCK_DIRECTORY =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 645;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid concurrency
-   * level is specified.  This takes a single argument, which is the invalid
-   * concurrency level.
-   */
-  public static final int MSGID_DIRCFG_INVALID_CONCURRENCY_LEVEL =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 646;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid lock table
-   * size is specified.  This takes a single argument, which is the invalid lock
-   * table size.
-   */
-  public static final int MSGID_DIRCFG_INVALID_LOCK_TABLE_SIZE =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_SEVERE_ERROR | 647;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * alter the server environment configuration while the server is running.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_CANNOT_SET_ENVIRONMENT_CONFIG_WHILE_RUNNING =
-       CATEGORY_MASK_CORE | SEVERITY_MASK_FATAL_ERROR | 648;
-
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined
-   * in this class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_CANNOT_CANCEL_ABANDON,
-                    "Abandon requests cannot be canceled");
-    registerMessage(MSGID_CANNOT_CANCEL_BIND,
-                    "Bind requests cannot be canceled");
-    registerMessage(MSGID_CANNOT_CANCEL_UNBIND,
-                    "Unbind requests cannot be canceled");
-
-
-    registerMessage(MSGID_DISCONNECT_DUE_TO_UNBIND, "Client Unbind");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_CLIENT_CLOSURE,
-                    "Client Disconnect");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_REJECTED_CLIENT,
-                    "Client Connection Rejected");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_IO_ERROR, "I/O Error");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_PROTOCOL_ERROR, "Protocol Error");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_SERVER_SHUTDOWN, "Server Shutdown");
-    registerMessage(MSGID_DISCONNECT_BY_ADMINISTRATOR,
-                    "Administrative Termination");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_SECURITY_PROBLEM,
-                    "Security Problem");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_MAX_REQUEST_SIZE,
-                    "Maximum Request Size Exceeded");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_ADMIN_LIMIT,
-                    "Administrative Limit Exceeded");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_IDLE_TIME_LIMIT,
-                    "Idle Time Limit Exceeded");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_IO_TIMEOUT, "I/O Timeout");
-    registerMessage(MSGID_DISCONNECT_BY_PLUGIN, "Connection Closed by Plugin");
-    registerMessage(MSGID_DISCONNECT_OTHER, "Unknown Closure Reason");
-    registerMessage(MSGID_DISCONNECT_DUE_TO_SERVER_ERROR, "Server Error");
-
-
-    registerMessage(MSGID_ERROR_CATEGORY_ACCESS_CONTROL,
-                    ERROR_CATEGORY_ACCESS_CONTROL);
-    registerMessage(MSGID_ERROR_CATEGORY_BACKEND, ERROR_CATEGORY_BACKEND);
-    registerMessage(MSGID_ERROR_CATEGORY_CONFIG, ERROR_CATEGORY_CONFIG);
-    registerMessage(MSGID_ERROR_CATEGORY_CONNECTION_HANDLING,
-                    ERROR_CATEGORY_CONNECTION_HANDLING);
-    registerMessage(MSGID_ERROR_CATEGORY_CORE_SERVER,
-                    ERROR_CATEGORY_CORE_SERVER);
-    registerMessage(MSGID_ERROR_CATEGORY_EXTENDED_OPERATION,
-                    ERROR_CATEGORY_EXTENDED_OPERATION);
-    registerMessage(MSGID_ERROR_CATEGORY_EXTENSIONS, ERROR_CATEGORY_EXTENSIONS);
-    registerMessage(MSGID_ERROR_CATEGORY_PASSWORD_POLICY,
-                    ERROR_CATEGORY_PASSWORD_POLICY);
-    registerMessage(MSGID_ERROR_CATEGORY_PLUGIN, ERROR_CATEGORY_PLUGIN);
-    registerMessage(MSGID_ERROR_CATEGORY_REQUEST_HANDLING,
-                    ERROR_CATEGORY_REQUEST);
-    registerMessage(MSGID_ERROR_CATEGORY_SASL_MECHANISM,
-                    ERROR_CATEGORY_SASL_MECHANISM);
-    registerMessage(MSGID_ERROR_CATEGORY_SCHEMA, ERROR_CATEGORY_SCHEMA);
-    registerMessage(MSGID_ERROR_CATEGORY_SHUTDOWN, ERROR_CATEGORY_SHUTDOWN);
-    registerMessage(MSGID_ERROR_CATEGORY_STARTUP, ERROR_CATEGORY_STARTUP);
-    registerMessage(MSGID_ERROR_CATEGORY_SYNCHRONIZATION,
-                    ERROR_CATEGORY_SYNCHRONIZATION);
-    registerMessage(MSGID_ERROR_CATEGORY_TASK, ERROR_CATEGORY_TASK);
-
-
-    registerMessage(MSGID_ERROR_SEVERITY_FATAL_ERROR, ERROR_SEVERITY_FATAL);
-    registerMessage(MSGID_ERROR_SEVERITY_INFORMATIONAL,
-                    ERROR_SEVERITY_INFORMATIONAL);
-    registerMessage(MSGID_ERROR_SEVERITY_MILD_ERROR,
-                    ERROR_SEVERITY_MILD_ERROR);
-    registerMessage(MSGID_ERROR_SEVERITY_MILD_WARNING,
-                    ERROR_SEVERITY_MILD_WARNING);
-    registerMessage(MSGID_ERROR_SEVERITY_NOTICE, ERROR_SEVERITY_NOTICE);
-    registerMessage(MSGID_ERROR_SEVERITY_SEVERE_ERROR,
-                    ERROR_SEVERITY_SEVERE_ERROR);
-    registerMessage(MSGID_ERROR_SEVERITY_SEVERE_WARNING,
-                    ERROR_SEVERITY_SEVERE_WARNING);
-
-
-    registerMessage(MSGID_RESULT_SUCCESS, "Success");
-    registerMessage(MSGID_RESULT_OPERATIONS_ERROR, "Operations Error");
-    registerMessage(MSGID_RESULT_PROTOCOL_ERROR, "Protocol Error");
-    registerMessage(MSGID_RESULT_TIME_LIMIT_EXCEEDED, "Time Limit Exceeded");
-    registerMessage(MSGID_RESULT_SIZE_LIMIT_EXCEEDED, "Size Limit Exceeded");
-    registerMessage(MSGID_RESULT_COMPARE_FALSE, "Compare False");
-    registerMessage(MSGID_RESULT_COMPARE_TRUE, "Compare True");
-    registerMessage(MSGID_RESULT_AUTH_METHOD_NOT_SUPPORTED,
-                    "Authentication Method Not Supported");
-    registerMessage(MSGID_RESULT_STRONG_AUTH_REQUIRED,
-                    "Strong Authentication Required");
-    registerMessage(MSGID_RESULT_REFERRAL, "Referral");
-    registerMessage(MSGID_RESULT_ADMIN_LIMIT_EXCEEDED,
-                    "Administrative Limit Exceeded");
-    registerMessage(MSGID_RESULT_UNAVAILABLE_CRITICAL_EXTENSION,
-                    "Unavailable Critical Extension");
-    registerMessage(MSGID_RESULT_CONFIDENTIALITY_REQUIRED,
-                    "Confidentiality Required");
-    registerMessage(MSGID_RESULT_SASL_BIND_IN_PROGRESS,
-                    "SASL Bind in Progress");
-    registerMessage(MSGID_RESULT_NO_SUCH_ATTRIBUTE, "No Such Attribute");
-    registerMessage(MSGID_RESULT_UNDEFINED_ATTRIBUTE_TYPE,
-                    "Undefined Attribute Type");
-    registerMessage(MSGID_RESULT_INAPPROPRIATE_MATCHING,
-                    "Inappropriate Matching");
-    registerMessage(MSGID_RESULT_CONSTRAINT_VIOLATION, "Constraint Violation");
-    registerMessage(MSGID_RESULT_ATTRIBUTE_OR_VALUE_EXISTS,
-                    "Attribute or Value Exists");
-    registerMessage(MSGID_RESULT_INVALID_ATTRIBUTE_SYNTAX,
-                    "Invalid Attribute Syntax");
-    registerMessage(MSGID_RESULT_NO_SUCH_OBJECT, "No Such Entry");
-    registerMessage(MSGID_RESULT_ALIAS_PROBLEM, "Alias Problem");
-    registerMessage(MSGID_RESULT_INVALID_DN_SYNTAX, "Invalid DN Syntax");
-    registerMessage(MSGID_RESULT_ALIAS_DEREFERENCING_PROBLEM,
-                    "Alias Dereferencing Problem");
-    registerMessage(MSGID_RESULT_INAPPROPRIATE_AUTHENTICATION,
-                    "Inappropriate Authentication");
-    registerMessage(MSGID_RESULT_INVALID_CREDENTIALS, "Invalid Credentials");
-    registerMessage(MSGID_RESULT_INSUFFICIENT_ACCESS_RIGHTS,
-                    "Insufficient Access Rights");
-    registerMessage(MSGID_RESULT_BUSY, "Busy");
-    registerMessage(MSGID_RESULT_UNAVAILABLE, "Unavailable");
-    registerMessage(MSGID_RESULT_UNWILLING_TO_PERFORM, "Unwilling to Perform");
-    registerMessage(MSGID_RESULT_LOOP_DETECT, "Loop Detected");
-    registerMessage(MSGID_RESULT_SORT_CONTROL_MISSING, "Sort Control Missing");
-    registerMessage(MSGID_RESULT_OFFSET_RANGE_ERROR, "Offset Range Error");
-    registerMessage(MSGID_RESULT_NAMING_VIOLATION, "Naming Violation");
-    registerMessage(MSGID_RESULT_OBJECTCLASS_VIOLATION,
-                    "ObjectClass Violation");
-    registerMessage(MSGID_RESULT_NOT_ALLOWED_ON_NONLEAF,
-                    "Not Allowed on Non-Leaf");
-    registerMessage(MSGID_RESULT_NOT_ALLOWED_ON_RDN, "Not Allowed on RDN");
-    registerMessage(MSGID_RESULT_ENTRY_ALREADY_EXISTS, "Entry Already Exists");
-    registerMessage(MSGID_RESULT_OBJECTCLASS_MODS_PROHIBITED,
-                    "ObjectClass Modifications Prohibited");
-    registerMessage(MSGID_RESULT_AFFECTS_MULTIPLE_DSAS,
-                    "Affects Multiple DSAs");
-    registerMessage(MSGID_RESULT_VIRTUAL_LIST_VIEW_ERROR,
-                    "Virtual List View Error");
-    registerMessage(MSGID_RESULT_OTHER, "Other");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_SERVER_DOWN,
-                            "Server Connection Closed");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_LOCAL_ERROR, "Local Error");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_ENCODING_ERROR, "Encoding Error");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_DECODING_ERROR, "Decoding Error");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_TIMEOUT, "Client-Side Timeout");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_AUTH_UNKNOWN,
-                    "Unknown Authentication Mechanism");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_FILTER_ERROR, "Filter Error");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_USER_CANCELLED,
-                    "Cancelled by User");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_PARAM_ERROR, "Parameter Error");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_NO_MEMORY, "Out of Memory");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_CONNECT_ERROR, "Connect Error");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_NOT_SUPPORTED,
-                    "Operation Not Supported");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_CONTROL_NOT_FOUND,
-                    "Control Not Found");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_NO_RESULTS_RETURNED,
-                    "No Results Returned");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_MORE_RESULTS_TO_RETURN,
-                    "More Results to Return");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_CLIENT_LOOP,
-                    "Referral Loop Detected");
-    registerMessage(MSGID_RESULT_CLIENT_SIDE_REFERRAL_LIMIT_EXCEEDED,
-                    "Referral Hop Limit Exceeded");
-    registerMessage(MSGID_RESULT_CANCELED, "Canceled");
-    registerMessage(MSGID_RESULT_NO_SUCH_OPERATION, "No Such Operation");
-    registerMessage(MSGID_RESULT_TOO_LATE, "Too Late");
-    registerMessage(MSGID_RESULT_CANNOT_CANCEL, "Cannot Cancel");
-    registerMessage(MSGID_RESULT_ASSERTION_FAILED, "Assertion Failed");
-    registerMessage(MSGID_RESULT_AUTHORIZATION_DENIED, "Authorization Denied");
-    registerMessage(MSGID_RESULT_NO_OPERATION, "No Operation");
-
-
-    registerMessage(MSGID_UNKNOWN_ATTRIBUTE_USAGE,
-                    "Unable to determine the attribute usage type for " +
-                    "attribute %s.  The server will assume that it is " +
-                    "user-defined");
-    registerMessage(MSGID_ATTR_TYPE_NORMALIZE_NO_MR,
-                    "Unable to normalize value %s for attribute type %s " +
-                    "because no equality matching rule is defined for that " +
-                    "attribute");
-
-
-    registerMessage(MSGID_CANCELED_BY_SHUTDOWN,
-                    "Processing on this operation has been canceled because " +
-                    "the Directory Server is shutting down");
-    registerMessage(MSGID_UNCAUGHT_WORKER_THREAD_EXCEPTION,
-                    "%s encountered an uncaught exception while processing " +
-                    "operation %s:  %s");
-    registerMessage(MSGID_UNEXPECTED_WORKER_THREAD_EXIT,
-                    "%s is unexpectedly exiting when the Directory Server " +
-                    "is not in the process of shutting down.  This likely " +
-                    "indicates that the thread encountered an unexpected " +
-                    "error");
-    registerMessage(MSGID_CANNOT_CREATE_WORKER_THREAD,
-                    "An unexpected error occurred while trying to create a " +
-                    "worker thread:  %s");
-    registerMessage(MSGID_OP_REJECTED_BY_SHUTDOWN,
-                    "The request to process this operation has been rejected " +
-                    "because the Directory Server has already started its " +
-                    "shutdown process");
-    registerMessage(MSGID_OP_REJECTED_BY_QUEUE_FULL,
-                    "The request to process this operation has been rejected " +
-                    "because the work queue has already reached its maximum " +
-                    "capacity of %d pending operations");
-    registerMessage(MSGID_WORKER_INTERRUPTED_WITHOUT_SHUTDOWN,
-                    "%s was interrupted while waiting for new work:  %s.  " +
-                    "This should not happen, but the thread will resume " +
-                    "waiting for new work so there should be no adverse " +
-                    "effects");
-    registerMessage(MSGID_WORKER_WAITING_UNCAUGHT_EXCEPTION,
-                    "An unexpected exception was caught while %s was waiting " +
-                    "for new work:  %s.  This should not happen, but the " +
-                    "thread will resume waiting for new work so there should " +
-                    "be no adverse effects");
-    registerMessage(MSGID_QUEUE_UNABLE_TO_CANCEL,
-                    "The work queue caught an exception while trying to " +
-                    "cancel pending operation %s when the Directory Server " +
-                    "was shutting down:  %s");
-    registerMessage(MSGID_QUEUE_UNABLE_TO_NOTIFY_THREAD,
-                    "The work queue caught an exception while trying to " +
-                    "notify %s that the Directory Server was shutting " +
-                    "down:  %s");
-    registerMessage(MSGID_WORKER_STOPPED_BY_REDUCED_THREADNUMBER,
-                    "%s has been stopped because the total number of worker " +
-                    "threads in the Directory Server was reduced");
-
-
-    registerMessage(MSGID_CANNOT_SET_ENVIRONMENT_CONFIG_WHILE_RUNNING,
-                    "The Directory Server is currently running.  The " +
-                    "environment configuration may not be altered while the " +
-                    "server is online");
-    registerMessage(MSGID_CANNOT_BOOTSTRAP_WHILE_RUNNING,
-                    "The Directory Server is currently running.  The " +
-                    "configuration may not be bootstrapped while the server " +
-                    "is online");
-    registerMessage(MSGID_DIRECTORY_BOOTSTRAPPING,
-                    "The Directory Server is beginning the configuration " +
-                    "bootstrapping process");
-    registerMessage(MSGID_DIRECTORY_BOOTSTRAPPED,
-                    "The Directory Server has completed the configuration " +
-                    "bootstrapping process");
-    registerMessage(MSGID_CANNOT_LOAD_CONFIG_HANDLER_CLASS,
-                    "Unable to load class %s to serve as the Directory " +
-                    "Server configuration handler:  %s");
-    registerMessage(MSGID_CANNOT_INSTANTIATE_CONFIG_HANDLER,
-                    "Unable to create an instance of class %s to serve as " +
-                    "the Directory Server configuration handler: %s");
-    registerMessage(MSGID_CANNOT_INITIALIZE_CONFIG_HANDLER,
-                    "An error occurred while trying to initialize the " +
-                    "configuration handler %s using configuration file %s:  " +
-                    "%s");
-    registerMessage(MSGID_CANNOT_START_BEFORE_BOOTSTRAP,
-                    "The Directory Server may not be started before the " +
-                    "configuration has been bootstrapped");
-    registerMessage(MSGID_CANNOT_START_WHILE_RUNNING,
-                    "The Directory Server may not be started while it is " +
-                    "already running.   Please stop the running instance " +
-                    "before attempting to start it again");
-    registerMessage(MSGID_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK,
-                    "The Directory Server could not acquire an exclusive " +
-                    "lock on file %s:  %s.  This generally means that " +
-                    "another instance of this server is already running");
-    registerMessage(MSGID_CANNOT_BOOTSTRAP_MATCHING_RULE,
-                    "An error occurred while attempting to bootstrap the " +
-                    "matching rule defined in class %s:  %s");
-    registerMessage(MSGID_CANNOT_BOOTSTRAP_SYNTAX,
-                    "An error occurred while attempting to bootstrap the " +
-                    "attribute syntax defined in class %s:  %s");
-    registerMessage(MSGID_DIRECTORY_SERVER_STARTING, "%s starting up");
-    registerMessage(MSGID_DIRECTORY_SERVER_STARTED,
-                    "The Directory Server has started successfully");
-    registerMessage(MSGID_CANNOT_CREATE_MBEAN_SERVER,
-                    "An error occurred while attempting to create the JMX " +
-                    "MBean server that will be used for monitoring, " +
-                    "notification, and configuration interaction within the " +
-                    "Directory Server:  %s");
-    registerMessage(MSGID_SENT_ALERT_NOTIFICATION,
-                    "The Directory Server has sent an alert notification " +
-                    "generated by class %s (alert type %s, alert ID %s):  %s");
-    registerMessage(MSGID_UNCAUGHT_THREAD_EXCEPTION,
-                    "An uncaught exception during processing for thread %s " +
-                    "has caused it to terminate abnormally.  The stack trace " +
-                    "for that exception is:  %s");
-    registerMessage(MSGID_SERVER_SHUTDOWN,
-                    "The Directory Server has started the shutdown process.  " +
-                    "The shutdown was initiated by an instance of class %s " +
-                    "and the reason provided for the shutdown was %s");
-    registerMessage(MSGID_SHUTDOWN_CANNOT_RELEASE_SHARED_BACKEND_LOCK,
-                    "An error occurred while attempting to release a shared " +
-                    "lock for backend %s:  %s.  This lock should be " +
-                    "automatically cleaned when the Directory Server process " +
-                    "exits, so no additional action should be necessary");
-    registerMessage(MSGID_CANNOT_RELEASE_EXCLUSIVE_SERVER_LOCK,
-                    "An error occurred while attempting to release the " +
-                    "exclusive server lock held on file %s:  %s.  This lock " +
-                    "should be automatically cleaned when the Directory " +
-                    "Server process exits, so no additional action should be " +
-                    "necessary");
-    registerMessage(MSGID_SHUTDOWN_DUE_TO_SHUTDOWN_HOOK,
-                    "The Directory Server shutdown hook detected that the " +
-                    "JVM is shutting down.  This generally indicates that " +
-                    "JVM received an external request to stop (e.g., through " +
-                    "a kill signal)");
-    registerMessage(MSGID_SERVER_STOPPED,
-                    "The Directory Server is now stopped");
-    registerMessage(MSGID_CANNOT_CREATE_WORK_QUEUE,
-                    "An error occurred while trying to create the Directory " +
-                    "Server work queue:  %s.  This is an unrecoverable error " +
-                    "and the startup process will not be able to continue");
-    registerMessage(MSGID_CANNOT_REGISTER_DUPLICATE_ALTERNATE_ROOT_BIND_DN,
-                    "The alternate root bind DN \"%s\" is already registered " +
-                    "with the Directory Server for actual root entry DN " +
-                    "\"%s\"");
-    registerMessage(MSGID_CANNOT_REGISTER_DUPLICATE_SUFFIX,
-                    "The suffix \"%s\" is already registered with the " +
-                    "Directory Server with a backend of type %s");
-    registerMessage(MSGID_CANNOT_REGISTER_DUPLICATE_SUBSUFFIX,
-                    "The suffix \"%s\" is already registered with the " +
-                    "Directory Server as a sub-suffix of the backend for " +
-                    "suffix \"%s\"");
-    registerMessage(MSGID_CANNOT_REGISTER_PRIVATE_SUFFIX_BELOW_USER_PARENT,
-                    "The private suffix \"%s\" is below a non-private suffix " +
-                    "defined with a base DN of \"%s\".  A private sub-suffix " +
-                    "may not exist below a non-private suffix");
-    registerMessage(MSGID_CANNOT_GET_ROOT_DSE_CONFIG_ENTRY,
-                    "An error occurred while trying to retrieve the root " +
-                    "DSE configuration entry (" + DN_ROOT_DSE_CONFIG +
-                    ") from the Directory Server configuration:  %s");
-    registerMessage(MSGID_STARTUP_PLUGIN_ERROR,
-                    "A fatal error occurred when executing one of the " +
-                    "Directory Server startup plugins:  %s (error ID %d).  " +
-                    "The Directory Server startup process has been aborted");
-
-
-    registerMessage(MSGID_ENTRY_SCHEMA_UNKNOWN_OC,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it contains an unknown " +
-                    "objectclass %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_OC,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it is missing attribute %s " +
-                    "which is required by objectclass %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_DISALLOWED_USER_ATTR_FOR_OC,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it includes attribute %s which is " +
-                    "not allowed by any of the objectclasses defined in that " +
-                    "entry");
-    registerMessage(MSGID_ENTRY_SCHEMA_ATTR_NO_VALUES,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it includes attribute %s without " +
-                    "any values");
-    registerMessage(MSGID_ENTRY_SCHEMA_ATTR_SINGLE_VALUED,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it includes multiple values for " +
-                    "attribute %s, which is defined as a single-valued " +
-                    "attribute");
-    registerMessage(MSGID_ENTRY_SCHEMA_MULTIPLE_STRUCTURAL_CLASSES,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it includes multiple conflicting " +
-                    "structural objectclasses %s and %s.  Only a single " +
-                    "structural objectclass is allowed in an entry");
-    registerMessage(MSGID_ENTRY_SCHEMA_NO_STRUCTURAL_CLASS,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it does not include a structural " +
-                    "objectclass.  All entries must contain a structural " +
-                    "objectclass");
-    registerMessage(MSGID_ENTRY_SCHEMA_RDN_MISSING_REQUIRED_ATTR,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because its RDN does not contain " +
-                    "attribute %s that is required by name form %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_RDN_DISALLOWED_ATTR,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because its RDN contains attribute %s " +
-                    "that is not allowed by name form %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_DCR,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it is missing attribute %s " +
-                    "which is required by DIT content rule %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_PROHIBITED_ATTR_FOR_DCR,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it contains attribute %s which is " +
-                    "prohibited by DIT content rule %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_DISALLOWED_USER_ATTR_FOR_DCR,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it includes attribute %s which is " +
-                    "not in the list of allowed or required attributes for " +
-                    "DIT content rule %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_DISALLOWED_AUXILIARY_CLASS,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because it includes auxiliary objectClass " +
-                    "%s that is not allowed by DIT content rule %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_DSR_COULD_NOT_LOCK_PARENT,
-                    "The Directory Server was unable to evaluate entry %s to " +
-                    "determine whether it was compliant with the DIT " +
-                    "structure rule configuration because it was unable to " +
-                    "obtain a read lock on parent entry %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_DSR_NO_PARENT_ENTRY,
-                    "The Directory Server was unable to evaluate entry %s to " +
-                    "determine whether it was compliant with the DIT " +
-                    "structure rule configuration because parent entry %s " +
-                    "either does not exist or could not be retrieved");
-    registerMessage(MSGID_ENTRY_SCHEMA_DSR_NO_PARENT_OC,
-                    "The Directory Server was unable to evaluate entry %s to " +
-                    "determine whether it was compliant with the DIT " +
-                    "rule configuration because the parent entry %s does not " +
-                    "appear to contain a valid structural objectclass");
-    registerMessage(MSGID_ENTRY_SCHEMA_VIOLATES_PARENT_DSR,
-                    "Entry %s is invalid according to the server schema " +
-                    "because there is no DIT structure rule that applies " +
-                    "to that entry, but there is a DIT structure rule for " +
-                    "the parent entry %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_DSR_DISALLOWED_SUPERIOR_OC,
-                    "Entry %s violates the Directory Server schema " +
-                    "configuration because DIT structure rule %s does not " +
-                    "allow entries of type %s to be placed immediately below " +
-                    "entries of type %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_COULD_NOT_CHECK_DSR,
-                    "An unexpected error occurred while attempting to check " +
-                    "entry %s against DIT structure rule %s:  %s");
-    registerMessage(MSGID_ENTRY_SCHEMA_COULD_NOT_CHECK_PARENT_DSR,
-                    "An unexpected error occurred while attempting to " +
-                    "perform DIT structure rule processing for the parent of " +
-                    "entry %s:  %s");
-    registerMessage(MSGID_ENTRY_SET_UNKNOWN_OC,
-                    "Objectclass %s cannot be used in entry %s because that " +
-                    "class is not defined in the Directory Server schema");
-    registerMessage(MSGID_ENTRY_ADD_UNKNOWN_OC,
-                    "Objectclass %s cannot be added to entry %s because that " +
-                    "class is not defined in the Directory Server schema");
-    registerMessage(MSGID_ENTRY_ADD_DUPLICATE_OC,
-                    "Objectclass %s is already present in entry %s and " +
-                    "cannot be added a second time");
-    registerMessage(MSGID_ENTRY_ADD_OBSOLETE_OC,
-                    "Objectclass %s added to entry %s is marked OBSOLETE in " +
-                    "the server schema");
-    registerMessage(MSGID_ENTRY_DUPLICATE_VALUES,
-                    "Unable to add one or more values to attribute %s " +
-                    "because at least one of the values already exists");
-    registerMessage(MSGID_ENTRY_NO_SUCH_VALUE,
-                    "Unable to remove one or more values from attribute %s " +
-                    "because at least one of the attributes does not exist " +
-                    "in the entry");
-    registerMessage(MSGID_ENTRY_OC_INCREMENT_NOT_SUPPORTED,
-                    "The increment operation is not supported for the " +
-                    "objectClass attribute");
-    registerMessage(MSGID_ENTRY_UNKNOWN_MODIFICATION_TYPE,
-                    "Unknown modification type %s requested");
-    registerMessage(MSGID_ENTRY_INCREMENT_NO_SUCH_ATTRIBUTE,
-                    "Unable to increment the value of attribute %s because " +
-                    "that attribute does not exist in the entry");
-    registerMessage(MSGID_ENTRY_INCREMENT_MULTIPLE_VALUES,
-                    "Unable to increment the value of attribute %s because " +
-                    "there are multiple values for that attribute");
-    registerMessage(MSGID_ENTRY_INCREMENT_INVALID_VALUE_COUNT,
-                    "Unable to increment the value of attribute %s because " +
-                    "the provided modification did not have exactly one " +
-                    "value to use as the increment");
-    registerMessage(MSGID_ENTRY_INCREMENT_CANNOT_PARSE_AS_INT,
-                    "Unable to increment the value of attribute %s because " +
-                    "either the current value or the increment could not " +
-                    "be parsed as an integer");
-    registerMessage(MSGID_ENTRY_DECODE_UNRECOGNIZED_VERSION,
-                    "Unable to decode an entry because it had an unsupported " +
-                    "entry version byte value of %s");
-    registerMessage(MSGID_ENTRY_DECODE_EXCEPTION,
-                    "Unable to decode an entry because an unexpected " +
-                    "exception was caught during processing:  %s");
-
-
-    registerMessage(MSGID_SEARCH_FILTER_CREATE_EXTENSIBLE_MATCH_NO_AT_OR_MR,
-                    "Unable to create an extensible match search filter " +
-                    "using the provided information because it did not " +
-                    "contain either an attribute type or a matching rule " +
-                    "ID.  At least one of these must be provided");
-    registerMessage(MSGID_SEARCH_FILTER_NULL,
-                    "Unable to decode the provided filter string as a search " +
-                    "filter because the provided string was empty or null");
-    registerMessage(MSGID_SEARCH_FILTER_UNCAUGHT_EXCEPTION,
-                    "An unexpected error occurred while attempting to decode " +
-                    "the string \"%s\" as a search filter:  %s");
-    registerMessage(MSGID_SEARCH_FILTER_MISMATCHED_PARENTHESES,
-                    "The provided search filter \"%s\" had mismatched " +
-                    "parentheses around the portion between positions %d and " +
-                    "%d");
-    registerMessage(MSGID_SEARCH_FILTER_NO_EQUAL_SIGN,
-                    "The provided search filter \"%s\" was missing an equal " +
-                    "sign in the suspected simple filter component between " +
-                    "positions %d and %d");
-    registerMessage(MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE,
-                    "The provided search filter \"%s\" had an invalid " +
-                    "escaped byte value at position %d.  A backslash in a " +
-                    "value must be followed by two hexadecimal characters " +
-                    "that define the byte that has been encoded");
-    registerMessage(MSGID_SEARCH_FILTER_COMPOUND_MISSING_PARENTHESES,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the compound filter between positions %d and %d " +
-                    "did not start with an open parenthesis and end with a " +
-                    "close parenthesis (they may be parentheses for " +
-                    "different filter components)");
-    registerMessage(MSGID_SEARCH_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the closing parenthesis at position %d did not " +
-                    "have a corresponding open parenthesis");
-    registerMessage(MSGID_SEARCH_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the closing parenthesis at position %d did not " +
-                    "have a corresponding close parenthesis");
-    registerMessage(MSGID_SEARCH_FILTER_SUBSTRING_NO_ASTERISKS,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the assumed substring filter value between " +
-                    "positions %d and %d did not have any asterisk wildcard " +
-                    "characters");
-    registerMessage(MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_COLON,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the extensible match component starting at " +
-                    "position %d did not have a colon to denote the end of " +
-                    "the attribute type name");
-    registerMessage(MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the extensible match component starting at " +
-                    "position %d did not contain either an attribute " +
-                    "description or a matching rule ID.  At least one of " +
-                    "these must be provided");
-    registerMessage(MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_SUCH_MR,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the extensible match component starting at " +
-                    "position %d referenced an unknown matching rule %s");
-    registerMessage(MSGID_SEARCH_FILTER_NOT_EXACTLY_ONE,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the NOT filter between positions %d and %d " +
-                    "did not contain exactly one filter component");
-    registerMessage(MSGID_SEARCH_FILTER_INVALID_FILTER_TYPE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because it contained an unknown filter type %s");
-    registerMessage(MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because the internal check returned an unknown " +
-                    "result type \"%s\"");
-    registerMessage(MSGID_SEARCH_FILTER_COMPOUND_COMPONENTS_NULL,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because the set of filter components for an %s " +
-                    "component was NULL");
-    registerMessage(MSGID_SEARCH_FILTER_NESTED_TOO_DEEP,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because the filter was nested beyond the maximum " +
-                    "allowed depth of " + MAX_NESTED_FILTER_DEPTH + " levels");
-    registerMessage(MSGID_SEARCH_FILTER_NOT_COMPONENT_NULL,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because the NOT filter component did not include " +
-                    "a subcomponent");
-    registerMessage(MSGID_SEARCH_FILTER_EQUALITY_NO_ATTRIBUTE_TYPE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because an equality component had a NULL " +
-                    "attribute type");
-    registerMessage(MSGID_SEARCH_FILTER_EQUALITY_NO_ASSERTION_VALUE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because an equality component for attribute %s " +
-                    "had a NULL assertion value");
-    registerMessage(MSGID_SEARCH_FILTER_SUBSTRING_NO_ATTRIBUTE_TYPE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because a substring component had a NULL " +
-                    "attribute type");
-    registerMessage(MSGID_SEARCH_FILTER_SUBSTRING_NO_SUBSTRING_COMPONENTS,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because a substring component for attribute %s " +
-                    "did not have any subInitial, subAny, or subFinal " +
-                    "elements");
-    registerMessage(MSGID_SEARCH_FILTER_GREATER_OR_EQUAL_NO_ATTRIBUTE_TYPE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because a greater-or-equal component had a NULL " +
-                    "attribute type");
-    registerMessage(MSGID_SEARCH_FILTER_GREATER_OR_EQUAL_NO_VALUE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because a greater-or-equal component for " +
-                    "attribute %s had a NULL assertion value");
-    registerMessage(MSGID_SEARCH_FILTER_LESS_OR_EQUAL_NO_ATTRIBUTE_TYPE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because a less-or-equal component had a NULL " +
-                    "attribute type");
-    registerMessage(MSGID_SEARCH_FILTER_LESS_OR_EQUAL_NO_ASSERTION_VALUE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because a less-or-equal component for attribute " +
-                    "%s had a NULL assertion value");
-    registerMessage(MSGID_SEARCH_FILTER_PRESENCE_NO_ATTRIBUTE_TYPE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because a presence component had a NULL " +
-                    "attribute type");
-    registerMessage(MSGID_SEARCH_FILTER_APPROXIMATE_NO_ATTRIBUTE_TYPE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because an approximate component had a NULL " +
-                    "attribute type");
-    registerMessage(MSGID_SEARCH_FILTER_APPROXIMATE_NO_ASSERTION_VALUE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because an approximate component for attribute " +
-                    "%s had a NULL assertion value");
-    registerMessage(MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_ASSERTION_VALUE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because a contained extensible match filter did " +
-                    "not have an assertion value");
-    registerMessage(MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_RULE_OR_TYPE,
-                    "Unable to determine whether entry \"%s\" matches filter " +
-                    "\"%s\" because a contained extensible match filter did " +
-                    "not have either an attribute type or a matching rule ID");
-    registerMessage(MSGID_SEARCH_BACKEND_EXCEPTION,
-                    "An unexpected error was encountered while processing " +
-                    "a search in one of the Directory Server backends:  %s");
-
-
-    registerMessage(MSGID_RDN_DECODE_NULL,
-                    "Unable to decode the provided string as a relative " +
-                    "distinguished name because the provided string was " +
-                    "empty or null");
-    registerMessage(MSGID_RDN_END_WITH_ATTR_NAME,
-                    "Unable to decode the provided string \"%s\" as a " +
-                    "relative distinguished name because the string ended " +
-                    "with an attribute type name (%s)");
-    registerMessage(MSGID_RDN_NO_EQUAL,
-                    "Unable to decode the provided string \"%s\" as a " +
-                    "relative distinguished name because the first non-blank " +
-                    "character after the attribute type %s was not an " +
-                    "equal sign (character read was %c)");
-    registerMessage(MSGID_RDN_UNEXPECTED_COMMA,
-                    "Unable to decode the provided string \"%s\" as a " +
-                    "relative distinguished name because it contained an " +
-                    "unexpected plus, comma, or semicolon at position %d, "+
-                    "which is not allowed in an RDN");
-    registerMessage(MSGID_RDN_ILLEGAL_CHARACTER,
-                    "Unable to decode the provided string \"%s\" as a " +
-                    "relative distinguished name because an illegal " +
-                    "character %c was found at position %d, where either the " +
-                    "end of the string or a '+' sign were expected");
-
-
-    registerMessage(MSGID_SCHEMA_CONFLICTING_ATTRIBUTE_OID,
-                    "Unable to register attribute type %s with the server " +
-                    "schema because its OID %s conflicts with the OID of an " +
-                    "existing attribute type %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_ATTRIBUTE_NAME,
-                    "Unable to register attribute type %s with the server " +
-                    "schema because its name %s conflicts with the name of " +
-                    "an existing attribute type %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_OBJECTCLASS_OID,
-                    "Unable to register objectclass %s with the server " +
-                    "schema because its OID %s conflicts with the OID of an " +
-                    "existing objectclass %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_OBJECTCLASS_NAME,
-                    "Unable to register objectclass %s with the server " +
-                    "schema because its name %s conflicts with the name of " +
-                    "an existing objectclass %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_SYNTAX_OID,
-                    "Unable to register attribute syntax %s with the server " +
-                    "schema because its OID %s conflicts with the OID of an " +
-                    "existing syntax %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_MR_OID,
-                    "Unable to register matching rule %s with the server " +
-                    "schema because its OID %s conflicts with the OID of an " +
-                    "existing matching rule %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_MR_NAME,
-                    "Unable to register matching rule %s with the server " +
-                    "schema because its name %s conflicts with the name of " +
-                    "an existing matching rule %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_MATCHING_RULE_USE,
-                    "Unable to register matching rule use %s with the server " +
-                    "schema because its matching rule %s conflicts with the " +
-                    "matching rule for an existing matching rule use %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_DIT_CONTENT_RULE,
-                    "Unable to register DIT content rule %s with the server " +
-                    "schema because its structural objectclass %s conflicts " +
-                    "with the structural objectclass for an existing DIT " +
-                    "content rule %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_NAME_FORM,
-                    "Unable to register DIT structure rule %s with the " +
-                    "server schema because its name form %s conflicts with " +
-                    "the name form for an existing DIT structure rule %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_ID,
-                    "Unable to register DIT structure rule %s with the " +
-                    "server schema because its rule ID %d conflicts with the " +
-                    "rule ID for an existing DIT structure rule %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_NAME_FORM_OC,
-                    "Unable to register name form %s with the server schema " +
-                    "because its structural objectclass %s conflicts with " +
-                    "the structural objectclass for an existing name form %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_NAME_FORM_OID,
-                    "Unable to register name form %s with the server schema " +
-                    "because its OID %s conflicts with the OID for an " +
-                    "existing name form %s");
-    registerMessage(MSGID_SCHEMA_CONFLICTING_NAME_FORM_NAME,
-                    "Unable to register name form %s with the server schema " +
-                    "because its name %s conflicts with the name for an " +
-                    "existing name form %s");
-    registerMessage(MSGID_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE,
-                    "Unable to update the schema element with definition " +
-                    "\"%s\" because a circular reference was identified " +
-                    "when attempting to rebuild other schema elements " +
-                    "dependent upon it");
-
-
-    registerMessage(MSGID_ADD_OP_INVALID_SYNTAX,
-                    "Entry \"%s\" contains a value \"%s\" for attribute %s " +
-                    "that is invalid according to the syntax for that " +
-                    "attribute:  %s");
-    registerMessage(MSGID_ADD_ATTR_IS_OBSOLETE,
-                    "Entry \"%s\" cannot be added because it contains " +
-                    "attribute type %s which is declared OBSOLETE in the " +
-                    "server schema");
-    registerMessage(MSGID_ADD_OC_IS_OBSOLETE,
-                    "Entry \"%s\" cannot be added because it contains " +
-                    "objectclass %s which is declared OBSOLETE in the server " +
-                    "schema");
-    registerMessage(MSGID_ADD_INVALID_PWPOLICY_DN_SYNTAX,
-                    "Entry \"%s\" cannot be added because it contains an " +
-                    "invalid password policy subentry DN:  %s");
-    registerMessage(MSGID_ADD_NO_SUCH_PWPOLICY,
-                    "Entry \"%s\" cannot be added because it references " +
-                    "password policy subentry %s that does not exist or does " +
-                    "not contain a valid password policy subentry definition");
-    registerMessage(MSGID_ADD_ASSERTION_FAILED,
-                    "Entry %s cannot be added because the request contained " +
-                    "an LDAP assertion control and the associated filter did " +
-                    "not match the contents of the provided entry");
-    registerMessage(MSGID_ADD_CANNOT_PROCESS_ASSERTION_FILTER,
-                    "Entry %s cannot be added because the request contained " +
-                    "an LDAP assertion control, but an error occurred while " +
-                    "attempting to compare the provided entry against the " +
-                    "filter contained in that control:  %s");
-    registerMessage(MSGID_ADD_UNSUPPORTED_CRITICAL_CONTROL,
-                    "Entry %s cannot be added because the request contained " +
-                    "a critical control with OID %s that is not supported by " +
-                    "the Directory Server for this type of operation");
-    registerMessage(MSGID_ADD_ATTR_IS_NO_USER_MOD,
-                    "Entry %s cannot be added because it includes attribute " +
-                    "%s which is defined as NO-USER-MODIFICATION in the " +
-                    "server schema");
-    registerMessage(MSGID_ADD_CANNOT_ADD_ROOT_DSE,
-                    "The provided entry cannot be added because it contains " +
-                    "a null DN.  This DN is reserved for the root DSE, and " +
-                    "that entry may not be added over protocol");
-    registerMessage(MSGID_ADD_ENTRY_NOT_SUFFIX,
-                    "The provided entry %s cannot be added because it does " +
-                    "not have a parent and is not defined as one of the " +
-                    "suffixes within the Directory Server");
-    registerMessage(MSGID_ADD_CANNOT_LOCK_PARENT,
-                    "Entry %s cannot be added because the server failed to " +
-                    "obtain a read lock on the parent entry %s after " +
-                    "multiple attempts");
-    registerMessage(MSGID_ADD_NO_PARENT,
-                    "Entry %s cannot be added because its parent entry %s " +
-                    "does not exist in the server");
-    registerMessage(MSGID_ADD_CANNOT_LOCK_ENTRY,
-                    "Entry %s cannot be added because the server failed " +
-                    "to obtain a write lock for this entry after multiple " +
-                    "attempts");
-    registerMessage(MSGID_ADD_MISSING_RDN_ATTRIBUTE,
-                    "Entry %s cannot be added because it is missing " +
-                    "attribute %s that is contained in the entry's RDN.  " +
-                    "All attributes used in the RDN must also be provided in " +
-                    "the attribute list for the entry");
-    registerMessage(MSGID_ADD_CHANGE_PRIVILEGE_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to add entries " +
-                    "that include privileges");
-    registerMessage(MSGID_ADD_NOOP,
-                    "The add operation was not actually performed in the " +
-                    "Directory Server backend because the LDAP no-op control " +
-                    "was present in the request");
-    registerMessage(MSGID_ADD_ERROR_NOTIFYING_CHANGE_LISTENER,
-                    "An unexpected error occurred while notifying a change " +
-                    "notification listener of an add operation:  %s");
-    registerMessage(MSGID_ADD_ERROR_NOTIFYING_PERSISTENT_SEARCH,
-                    "An unexpected error occurred while notifying persistent " +
-                    "search %s of an add operation:  %s.  The persistent " +
-                    "search has been terminated");
-
-
-    registerMessage(MSGID_COMPARE_OP_NO_SUCH_ATTR,
-                    "Entry \"%s\" does not contain any values for attribute " +
-                    "\"%s\"");
-    registerMessage(MSGID_COMPARE_OP_NO_SUCH_ATTR_WITH_OPTIONS,
-                    "Entry \"%s\" does not contain any values for attribute " +
-                    "\"%s\" with the specified set of options");
-
-
-    registerMessage(MSGID_CANCELED_BY_BIND_REQUEST,
-                    "Processing on this operation has been canceled because " +
-                    "the Directory Server received a bind request on this " +
-                    "connection, which requires that all operations in " +
-                    "progress to be abandoned");
-    registerMessage(MSGID_BIND_OPERATION_UNKNOWN_USER,
-                    "Unable to bind to the Directory Server as user %s " +
-                    "because no such user exists in the server");
-    registerMessage(MSGID_BIND_UNSUPPORTED_CRITICAL_CONTROL,
-                    "Unable to process the bind request because it " +
-                    "contained a control with OID %s that was marked " +
-                    "critical but this control is not supported for the bind " +
-                    "operation");
-    registerMessage(MSGID_BIND_REJECTED_LOCKDOWN_MODE,
-                    "Unable to process the non-root bind because the server " +
-                    "is in lockdown mode");
-    registerMessage(MSGID_BIND_DN_BUT_NO_PASSWORD,
-                    "Unable to process the simple bind request because it " +
-                    "contained a bind DN but no password, which is forbidden " +
-                    "by the server configuration");
-    registerMessage(MSGID_BIND_OPERATION_CANNOT_LOCK_USER,
-                    "Unable to process the bind because the server was " +
-                    "unable to obtain a read lock on the entry %s");
-    registerMessage(MSGID_BIND_OPERATION_NO_PASSWORD,
-                    "Unable to bind to the Directory Server as user %s " +
-                    "using simple authentication because that user does " +
-                    "not have a password");
-    registerMessage(MSGID_BIND_OPERATION_UNKNOWN_SASL_MECHANISM,
-                    "Unable to process the bind request because it attempted " +
-                    "to use an unknown SASL mechanism %s that is not " +
-                    "available in the Directory Server");
-    registerMessage(MSGID_BIND_OPERATION_UNKNOWN_STORAGE_SCHEME,
-                    "Password with unknown storage scheme %s included in " +
-                    "user entry %s will be ignored");
-    registerMessage(MSGID_BIND_MULTIPLE_USER_SIZE_LIMITS,
-                    "There are multiple user-specific size limit values " +
-                    "contained in user entry %s.  The default server size " +
-                    "limit will be used");
-    registerMessage(MSGID_BIND_CANNOT_PROCESS_USER_SIZE_LIMIT,
-                    "The user-specific size limit value %s contained in " +
-                    "user entry %s could not be parsed as an integer.  The " +
-                    "default server size limit will be used");
-    registerMessage(MSGID_BIND_MULTIPLE_USER_TIME_LIMITS,
-                    "There are multiple user-specific time limit values " +
-                    "contained in user entry %s.  The default server time " +
-                    "limit will be used");
-    registerMessage(MSGID_BIND_CANNOT_PROCESS_USER_TIME_LIMIT,
-                    "The user-specific time limit value %s contained in " +
-                    "user entry %s could not be parsed as an integer.  The " +
-                    "default server time limit will be used");
-    registerMessage(MSGID_BIND_MULTIPLE_USER_IDLE_TIME_LIMITS,
-                    "There are multiple user-specific idle time limit values " +
-                    "contained in user entry %s.  The default server idle " +
-                    "time limit will be used");
-    registerMessage(MSGID_BIND_CANNOT_PROCESS_USER_IDLE_TIME_LIMIT,
-                    "The user-specific idle time limit value %s contained in " +
-                    "user entry %s could not be parsed as an integer.  The " +
-                    "default server idle time limit will be used");
-    registerMessage(MSGID_BIND_PASSWORD_EXPIRING,
-                    "The user password is about to expire (time to " +
-                    "expiration:  %s)");
-    registerMessage(MSGID_BIND_OPERATION_WRONG_PASSWORD,
-                    "The password provided by the user did not match any " +
-                    "password(s) stored in the user's entry");
-    registerMessage(MSGID_BIND_ACCOUNT_TEMPORARILY_LOCKED,
-                    "The account has been locked as a result of too many " +
-                    "failed authentication attempts (time to unlock:  %s)");
-    registerMessage(MSGID_BIND_ACCOUNT_PERMANENTLY_LOCKED,
-                    "The account has been locked as a result of too many " +
-                    "failed authentication attempts.  It may only be " +
-                    "unlocked by an administrator");
-    registerMessage(MSGID_BIND_OPERATION_PASSWORD_VALIDATION_EXCEPTION,
-                    "An unexpected error occurred while attempting to " +
-                    "validate the provided password:  %s");
-
-
-    registerMessage(MSGID_ABANDON_OP_NO_SUCH_OPERATION,
-                    "Unable to abandon the operation with message ID %d " +
-                    "because no information is available about that " +
-                    "operation.  This could mean that the target operation " +
-                    "has already completed or was never requested");
-    registerMessage(MSGID_CANCELED_BY_ABANDON_REQUEST,
-                    "The operation was canceled because the client issued " +
-                    "an abandon request (message ID %d) for this operation");
-
-
-    registerMessage(MSGID_CANCELED_BY_PREPARSE_DISCONNECT,
-                    "The operation was canceled because the client " +
-                    "connection was terminated by a pre-parse plugin");
-    registerMessage(MSGID_CANCELED_BY_PREOP_DISCONNECT,
-                    "The operation was canceled because the client " +
-                    "connection was terminated by a pre-operation plugin");
-    registerMessage(MSGID_CANCELED_BY_POSTOP_DISCONNECT,
-                    "The operation was canceled because the client " +
-                    "connection was terminated by a post-operation plugin");
-    registerMessage(MSGID_CANCELED_BY_SEARCH_ENTRY_DISCONNECT,
-                    "The operation was canceled because the client " +
-                    "connection was terminated by a search result entry " +
-                    "plugin working on entry %s");
-    registerMessage(MSGID_CANCELED_BY_SEARCH_REF_DISCONNECT,
-                    "The operation was canceled because the client " +
-                    "connection was terminated by a search result reference " +
-                    "plugin working on referral %s");
-
-
-    registerMessage(MSGID_COMPARE_CONFIG_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to access the " +
-                    "server configuration");
-    registerMessage(MSGID_COMPARE_CANNOT_LOCK_ENTRY,
-                    "The Directory Server was unable to obtain a read " +
-                    "lock on entry %s after multiple attempts.  Processing " +
-                    "on this operation cannot continue");
-    registerMessage(MSGID_COMPARE_NO_SUCH_ENTRY,
-                    "The specified entry %s does not exist in the " +
-                    "Directory Server");
-    registerMessage(MSGID_COMPARE_ASSERTION_FAILED,
-                    "Cannot perform the compare operation on entry %s " +
-                    "because the request contained an LDAP assertion control " +
-                    "and the associated filter did not match the contents of " +
-                    "the that entry");
-    registerMessage(MSGID_COMPARE_CANNOT_PROCESS_ASSERTION_FILTER,
-                    "Cannot perform the compare operation on entry %s " +
-                    "because the request contained an LDAP assertion " +
-                    "control, but an error occurred while attempting to " +
-                    "compare the target entry against the filter contained " +
-                    "in that control:  %s");
-    registerMessage(MSGID_COMPARE_UNSUPPORTED_CRITICAL_CONTROL,
-                    "Cannot perform the compare operation on entry %s " +
-                    "because the request contained a critical control with " +
-                    "OID %s that is not supported by the Directory Server " +
-                    "for this type of operation");
-
-
-    registerMessage(MSGID_DELETE_CANNOT_LOCK_ENTRY,
-                    "Entry %s cannot be removed because the server failed " +
-                    "to obtain a write lock for this entry after multiple " +
-                    "attempts");
-    registerMessage(MSGID_DELETE_CANNOT_GET_ENTRY_FOR_ASSERTION,
-                    "Entry %s cannot be removed because the delete request " +
-                    "contains an LDAP assertion control and an error " +
-                    "occurred while trying to retrieve the target entry to " +
-                    "compare it against the associated filter:  %s");
-    registerMessage(MSGID_DELETE_NO_SUCH_ENTRY_FOR_ASSERTION,
-                    "Entry %s cannot be removed because it was determined " +
-                    "that the target entry does not exist while attempting " +
-                    "to process it against the LDAP assertion control " +
-                    "contained in the request");
-    registerMessage(MSGID_DELETE_ASSERTION_FAILED,
-                    "Entry %s cannot be removed because the request " +
-                    "contained an LDAP assertion control and the associated " +
-                    "filter did not match the contents of the that entry");
-    registerMessage(MSGID_DELETE_CANNOT_PROCESS_ASSERTION_FILTER,
-                    "Entry %s cannot be removed because the request " +
-                    "contained an LDAP assertion control, but an error " +
-                    "occurred while attempting to compare the target entry " +
-                    "against the filter contained in that control:  %s");
-    registerMessage(MSGID_DELETE_PREREAD_NO_ENTRY,
-                    "Entry %s cannot be removed because it was determined " +
-                    "that the target entry does not exist while attempting " +
-                    "to process it against the LDAP pre-read request control");
-    registerMessage(MSGID_DELETE_UNSUPPORTED_CRITICAL_CONTROL,
-                    "Entry %s cannot be removed because the request " +
-                    "contained a critical control with OID %s that is not " +
-                    "supported by the Directory Server for this type of " +
-                    "operation");
-    registerMessage(MSGID_DELETE_NO_SUCH_ENTRY,
-                    "Entry %s does not exist in the Directory Server");
-    registerMessage(MSGID_DELETE_HAS_SUB_BACKEND,
-                    "Entry %s cannot be removed because the backend that " +
-                    "should contain that entry has a subordinate backend " +
-                    "with a base DN of %s that is below the target DN");
-    registerMessage(MSGID_DELETE_NOOP,
-                    "The delete operation was not actually performed in the " +
-                    "Directory Server backend because the LDAP no-op control " +
-                    "was present in the request");
-    registerMessage(MSGID_DELETE_ERROR_NOTIFYING_CHANGE_LISTENER,
-                    "An unexpected error occurred while notifying a change " +
-                    "notification listener of a delete operation:  %s");
-    registerMessage(MSGID_DELETE_ERROR_NOTIFYING_PERSISTENT_SEARCH,
-                    "An unexpected error occurred while notifying persistent " +
-                    "search %s of a delete operation:  %s.  The persistent " +
-                    "search has been terminated");
-
-
-    registerMessage(MSGID_SEARCH_TIME_LIMIT_EXCEEDED,
-                    "The maximum time limit of %d seconds for processing " +
-                    "this search operation has expired");
-    registerMessage(MSGID_SEARCH_SIZE_LIMIT_EXCEEDED,
-                    "This search operation has sent the maximum of %d " +
-                    "entries to the client");
-    registerMessage(MSGID_SEARCH_CANNOT_GET_ENTRY_FOR_ASSERTION,
-                    "The search request cannot be processed because it " +
-                    "contains an LDAP assertion control and an error " +
-                    "occurred while trying to retrieve the base entry to " +
-                    "compare it against the assertion filter:  %s");
-    registerMessage(MSGID_SEARCH_NO_SUCH_ENTRY_FOR_ASSERTION,
-                    "The search request cannot be processed because it " +
-                    "contains an LDAP assertion control but the search base " +
-                    "entry does not exist");
-    registerMessage(MSGID_SEARCH_ASSERTION_FAILED,
-                    "The search request cannot be processed because it " +
-                    "contains an LDAP assertion control and the assertion " +
-                    "filter did not match the contents of the base entry");
-    registerMessage(MSGID_SEARCH_CANNOT_PROCESS_ASSERTION_FILTER,
-                    "The search request cannot be processed because it " +
-                    "contains an LDAP assertion control, but an error " +
-                    "occurred while attempting to compare the base entry " +
-                    "against the assertion filter:  %s");
-    registerMessage(MSGID_SEARCH_UNSUPPORTED_CRITICAL_CONTROL,
-                    "The search request cannot be processed because it " +
-                    "contains a critical control with OID %s that is not " +
-                    "supported by the Directory Server for this type of " +
-                    "operation");
-    registerMessage(MSGID_SEARCH_BASE_DOESNT_EXIST,
-                    "The entry %s specified as the search base does not " +
-                    "exist in the Directory Server");
-
-
-    registerMessage(MSGID_MODDN_NO_PARENT,
-                    "A modify DN operation cannot be performed on entry %s " +
-                    "because the new RDN would not have a parent DN");
-    registerMessage(MSGID_MODDN_NO_BACKEND_FOR_CURRENT_ENTRY,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because no backend is registered to handle " +
-                    "that DN");
-    registerMessage(MSGID_MODDN_NO_BACKEND_FOR_NEW_ENTRY,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because no backend is registered to handle " +
-                    "the new DN %s");
-    registerMessage(MSGID_MODDN_DIFFERENT_BACKENDS,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because the backend holding the current entry " +
-                    "is different from the backend used to handle the new DN " +
-                    "%s.  Modify DN operations may not span multiple " +
-                    "backends");
-    registerMessage(MSGID_MODDN_CANNOT_LOCK_CURRENT_DN,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because the server was unable to obtain a " +
-                    "write lock for that DN");
-    registerMessage(MSGID_MODDN_EXCEPTION_LOCKING_NEW_DN,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because an exception was caught while " +
-                    "attempting to obtain a write lock for new DN %s:  %s");
-    registerMessage(MSGID_MODDN_CANNOT_LOCK_NEW_DN,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because the server was unable to obtain a " +
-                    "write lock for the new DN %s");
-    registerMessage(MSGID_MODDN_NO_CURRENT_ENTRY,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because that entry does not exist in the " +
-                    "server");
-    registerMessage(MSGID_MODDN_ASSERTION_FAILED,
-                    "Entry %s cannot be renamed because the request " +
-                    "contained an LDAP assertion control and the associated " +
-                    "filter did not match the contents of the that entry");
-    registerMessage(MSGID_MODDN_CANNOT_PROCESS_ASSERTION_FILTER,
-                    "Entry %s cannot be renamed because the request " +
-                    "contained an LDAP assertion control, but an error " +
-                    "occurred while attempting to compare the target entry " +
-                    "against the filter contained in that control:  %s");
-    registerMessage(MSGID_MODDN_UNSUPPORTED_CRITICAL_CONTROL,
-                    "Entry %s cannot be renamed because the request " +
-                    "contained a critical control with OID %s that is not " +
-                    "supported by the Directory Server for this type of " +
-                    "operation");
-    registerMessage(MSGID_MODDN_OLD_RDN_ATTR_IS_NO_USER_MOD,
-                    "Entry %s cannot be renamed because the current DN " +
-                    "includes attribute %s which is defined as " +
-                    "NO-USER-MODIFICATION in the server schema and the " +
-                    "deleteOldRDN flag was set in the modify DN request");
-    registerMessage(MSGID_MODDN_NEW_RDN_ATTR_IS_NO_USER_MOD,
-                    "Entry %s cannot be renamed because the new RDN " +
-                    "includes attribute %s which is defined as " +
-                    "NO-USER-MODIFICATION in the server schema, and the " +
-                    "target value for that attribute is not already " +
-                    "included in the entry");
-    registerMessage(MSGID_MODDN_VIOLATES_SCHEMA,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because the change would have violated the " +
-                    "server schema:  %s");
-    registerMessage(MSGID_MODDN_NEWRDN_ATTR_IS_OBSOLETE,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because the new RDN includes attribute type " +
-                    "%s which is declared OBSOLETE in the server schema");
-    registerMessage(MSGID_MODDN_PREOP_INCREMENT_NO_ATTR,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because a pre-operation plugin attempted to " +
-                    "increment attribute %s but that attribute does not " +
-                    "exist in the target entry");
-    registerMessage(MSGID_MODDN_PREOP_INCREMENT_MULTIPLE_VALUES,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because a pre-operation plugin attempted to " +
-                    "increment attribute %s but that attribute has multiple " +
-                    "values in the target entry");
-    registerMessage(MSGID_MODDN_PREOP_INCREMENT_VALUE_NOT_INTEGER,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because a pre-operation plugin attempted to " +
-                    "increment attribute %s but the value of that attribute " +
-                    "is not an integer");
-    registerMessage(MSGID_MODDN_PREOP_INCREMENT_NO_AMOUNT,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because a pre-operation plugin attempted to " +
-                    "increment attribute %s but no increment amount was " +
-                    "provided");
-    registerMessage(MSGID_MODDN_PREOP_INCREMENT_MULTIPLE_AMOUNTS,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because a pre-operation plugin attempted to " +
-                    "increment attribute %s but multiple increment amount " +
-                    "values were provided");
-    registerMessage(MSGID_MODDN_PREOP_INCREMENT_AMOUNT_NOT_INTEGER,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because a pre-operation plugin attempted to " +
-                    "increment attribute %s but the increment amount value " +
-                    "was not an integer");
-    registerMessage(MSGID_MODDN_PREOP_VIOLATES_SCHEMA,
-                    "The modify DN operation for entry %s cannot be " +
-                    "performed because a pre-operation plugin modified the " +
-                    "entry in a way that caused it to violate the server " +
-                    "schema:  %s");
-    registerMessage(MSGID_MODDN_NOOP,
-                    "The modify DN operation was not actually performed in " +
-                    "the Directory Server backend because the LDAP no-op " +
-                    "control was present in the request");
-    registerMessage(MSGID_MODDN_ERROR_NOTIFYING_CHANGE_LISTENER,
-                    "An unexpected error occurred while notifying a change " +
-                    "notification listener of a modify DN operation:  %s");
-    registerMessage(MSGID_MODDN_ERROR_NOTIFYING_PERSISTENT_SEARCH,
-                    "An unexpected error occurred while notifying persistent " +
-                    "search %s of a modify DN operation:  %s.  The " +
-                    "persistent search has been terminated");
-
-
-    registerMessage(MSGID_MODIFY_NO_MODIFICATIONS,
-                    "Entry %s cannot be updated because the request did not " +
-                    "contain any modifications");
-    registerMessage(MSGID_MODIFY_CANNOT_LOCK_ENTRY,
-                    "Entry %s cannot be modified because the server failed " +
-                    "to obtain a write lock for this entry after multiple " +
-                    "attempts");
-    registerMessage(MSGID_MODIFY_NO_SUCH_ENTRY,
-                    "Entry %s cannot be modified because no such entry " +
-                    "exists in the server");
-    registerMessage(MSGID_MODIFY_ASSERTION_FAILED,
-                    "Entry %s cannot be modified because the request " +
-                    "contained an LDAP assertion control and the associated " +
-                    "filter did not match the contents of the that entry");
-    registerMessage(MSGID_MODIFY_CANNOT_PROCESS_ASSERTION_FILTER,
-                    "Entry %s cannot be modified because the request " +
-                    "contained an LDAP assertion control, but an error " +
-                    "occurred while attempting to compare the target entry " +
-                    "against the filter contained in that control:  %s");
-    registerMessage(MSGID_MODIFY_UNSUPPORTED_CRITICAL_CONTROL,
-                    "Entry %s cannot be modified because the request " +
-                    "contained a critical control with OID %s that is not " +
-                    "supported by the Directory Server for this type of " +
-                    "operation");
-    registerMessage(MSGID_MODIFY_PWRESET_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to reset user " +
-                    "passwords");
-    registerMessage(MSGID_MODIFY_MUST_CHANGE_PASSWORD,
-                    "You must change your password before you will be " +
-                    "allowed to perform any other operations");
-    registerMessage(MSGID_MODIFY_ATTR_IS_NO_USER_MOD,
-                    "Entry %s cannot be modified because the modification " +
-                    "attempted to update attribute %s which is defined as " +
-                    "NO-USER-MODIFICATION in the server schema");
-    registerMessage(MSGID_MODIFY_ATTR_IS_OBSOLETE,
-                    "Entry %s cannot be modified because the modification " +
-                    "attempted to set one or more new values for attribute " +
-                    "%s which is marked OBSOLETE in the server schema");
-    registerMessage(MSGID_MODIFY_CHANGE_PRIVILEGE_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to modify the " +
-                    "set of privileges contained in an entry");
-    registerMessage(MSGID_MODIFY_PASSWORDS_CANNOT_HAVE_OPTIONS,
-                    "Attributes used to hold user passwords are not allowed " +
-                    "to have any attribute options");
-    registerMessage(MSGID_MODIFY_NO_USER_PW_CHANGES,
-                    "Users are not allowed to change their own passwords");
-    registerMessage(MSGID_MODIFY_REQUIRE_SECURE_CHANGES,
-                    "Password changes must be performed over a secure " +
-                    "authentication channel");
-    registerMessage(MSGID_MODIFY_WITHIN_MINIMUM_AGE,
-                    "The password cannot be changed because it has not been " +
-                    "long enough since the last password change");
-    registerMessage(MSGID_MODIFY_MULTIPLE_VALUES_NOT_ALLOWED,
-                    "Multiple password values are not allowed in user " +
-                    "entries");
-    registerMessage(MSGID_MODIFY_NO_PREENCODED_PASSWORDS,
-                    "User passwords may not be provided in pre-encoded form");
-    registerMessage(MSGID_MODIFY_PASSWORD_EXISTS,
-                    "The specified password value already exists in the " +
-                    "user entry");
-    registerMessage(MSGID_MODIFY_NO_EXISTING_VALUES,
-                    "The user entry does not have any existing passwords to " +
-                    "remove");
-    registerMessage(MSGID_MODIFY_CANNOT_DECODE_PW,
-                    "An error occurred while attempting to decode an " +
-                    "existing user password:  %s");
-    registerMessage(MSGID_MODIFY_INVALID_PASSWORD,
-                    "The provided user password does not match any password " +
-                    "in the user's entry");
-    registerMessage(MSGID_MODIFY_INVALID_MOD_TYPE_FOR_PASSWORD,
-                    "Invalid modification type %s attempted on password " +
-                    "attribute %s");
-    registerMessage(MSGID_MODIFY_INVALID_DISABLED_VALUE,
-                    "Invalid value provided for operational attribute %s:  " +
-                    "%s");
-    registerMessage(MSGID_MODIFY_ADD_NO_VALUES,
-                    "Entry %s cannot be modified because the modification " +
-                    "contained an add component for attribute %s but no " +
-                    "values were provided");
-    registerMessage(MSGID_MODIFY_ADD_INVALID_SYNTAX,
-                    "When attempting to modify entry %s to add one or more " +
-                    "values for attribute %s, value \"%s\" was found to be " +
-                    "invalid according to the associated syntax:  %s");
-    registerMessage(MSGID_MODIFY_ADD_DUPLICATE_VALUE,
-                    "Entry %s cannot be modified because it would have " +
-                    "resulted in one or more duplicate values for attribute " +
-                    "%s:  %s");
-    registerMessage(MSGID_MODIFY_DELETE_RDN_ATTR,
-                    "Entry %s cannot be modified because the change to " +
-                    "attribute %s would have removed a value used in the RDN");
-    registerMessage(MSGID_MODIFY_DELETE_MISSING_VALUES,
-                    "Entry %s cannot be modified because the attempt to " +
-                    "update attribute %s would have removed one or more " +
-                    "values from the attribute that were not present:  %s");
-    registerMessage(MSGID_MODIFY_DELETE_NO_SUCH_ATTR,
-                    "Entry %s cannot be modified because an attempt was made " +
-                    "to remove one or more values from attribute %s but this " +
-                    "attribute is not present in the entry");
-    registerMessage(MSGID_MODIFY_REPLACE_INVALID_SYNTAX,
-                    "When attempting to modify entry %s to replace the set " +
-                    "of values for attribute %s, value \"%s\" was found to " +
-                    "be invalid according to the associated syntax:  %s");
-    registerMessage(MSGID_MODIFY_INCREMENT_RDN,
-                    "Entry %s cannot be modified because an attempt was made " +
-                    "to increment the value of attribute %s which is used as " +
-                    "an RDN attribute for the entry");
-    registerMessage(MSGID_MODIFY_INCREMENT_REQUIRES_VALUE,
-                    "Entry %s cannot be modified because an attempt was made " +
-                    "to increment the value of attribute %s but the request " +
-                    "did not include a value for that attribute specifying " +
-                    "the amount by which to increment the value");
-    registerMessage(MSGID_MODIFY_INCREMENT_REQUIRES_SINGLE_VALUE,
-                    "Entry %s cannot be modified because an attempt was made " +
-                    "to increment the value of attribute %s but the request " +
-                    "contained multiple values, where only a single integer " +
-                    "value is allowed");
-    registerMessage(MSGID_MODIFY_INCREMENT_PROVIDED_VALUE_NOT_INTEGER,
-                    "Entry %s cannot be modified because an attempt was made " +
-                    "to increment the value of attribute %s but the value " +
-                    "\"%s\" contained in the request could not be parsed as " +
-                    "an integer");
-    registerMessage(MSGID_MODIFY_INCREMENT_REQUIRES_EXISTING_VALUE,
-                    "Entry %s cannot be modified because an attempt was made " +
-                    "to increment the value of attribute %s but that " +
-                    "attribute did not have any values in the target entry");
-    registerMessage(MSGID_MODIFY_PW_CHANGE_REQUIRES_CURRENT_PW,
-                    "The password policy requires that user password changes " +
-                    "include the current password in the request");
-    registerMessage(MSGID_MODIFY_MULTIPLE_PASSWORDS_NOT_ALLOWED,
-                    "The password change would result in multiple password " +
-                    "values in the user entry, which is not allowed");
-    registerMessage(MSGID_MODIFY_PW_VALIDATION_FAILED,
-                    "The provided password value was rejected by a password " +
-                    "validator:  %s");
-    registerMessage(MSGID_MODIFY_PW_IN_HISTORY,
-                    "The provided new password was found in the password " +
-                    "history for the user");
-    registerMessage(MSGID_MODIFY_INCREMENT_REQUIRES_INTEGER_VALUE,
-                    "Entry %s cannot be modified because an attempt was " +
-                    "made to increment the value of attribute %s but the " +
-                    "value \"%s\" could not be parsed as an integer");
-    registerMessage(MSGID_MODIFY_VIOLATES_SCHEMA,
-                    "Entry %s cannot not be modified because the resulting " +
-                    "entry would have violated the server schema:  %s");
-    registerMessage(MSGID_MODIFY_NO_BACKEND_FOR_ENTRY,
-                    "Entry %s cannot be modified because there is no backend " +
-                    "registered to handle operations for that entry");
-    registerMessage(MSGID_MODIFY_NOOP,
-                    "The modify operation was not actually performed in the " +
-                    "Directory Server backend because the LDAP no-op control " +
-                    "was present in the request");
-    registerMessage(MSGID_MODIFY_PASSWORD_CHANGED,
-                    "The user password has been changed");
-    registerMessage(MSGID_MODIFY_PASSWORD_RESET,
-                    "The user password has been administratively reset");
-    registerMessage(MSGID_MODIFY_ACCOUNT_ENABLED,
-                    "The user account has been administratively enabled");
-    registerMessage(MSGID_MODIFY_ACCOUNT_DISABLED,
-                    "The user account has been administratively disabled");
-    registerMessage(MSGID_MODIFY_ACCOUNT_UNLOCKED,
-                    "The user account has been administratively unlocked");
-    registerMessage(MSGID_MODIFY_ERROR_NOTIFYING_CHANGE_LISTENER,
-                    "An unexpected error occurred while notifying a change " +
-                    "notification listener of a modify operation:  %s");
-    registerMessage(MSGID_MODIFY_ERROR_NOTIFYING_PERSISTENT_SEARCH,
-                    "An unexpected error occurred while notifying persistent " +
-                    "search %s of a modify operation:  %s.  The persistent " +
-                    "search has been terminated");
-
-
-    registerMessage(MSGID_EXTENDED_NO_HANDLER,
-                    "There is no extended operation handler registered with " +
-                    "the Directory Server for handling extended operations " +
-                    "with a request OID of %s");
-    registerMessage(MSGID_EXTENDED_UNSUPPORTED_CRITICAL_CONTROL,
-                    "Unable to process the request for extended operation %s " +
-                    "because it contained an unsupported critical control " +
-                    "with OID %s");
-
-
-    registerMessage(MSGID_CONNHANDLER_CLOSED_BY_SHUTDOWN,
-                    "The Directory Server is shutting down");
-    registerMessage(MSGID_CONNHANDLER_CLOSED_BY_DISABLE,
-                    "The connection handler that accepted this connection " +
-                    "has been disabled");
-    registerMessage(MSGID_CONNHANDLER_CLOSED_BY_DELETE,
-                    "The connection handler that accepted this connection " +
-                    "has been removed from the server");
-
-
-    registerMessage(MSGID_DSCORE_TOOL_DESCRIPTION,
-                    "This utility may be used to start the Directory Server, " +
-                    "as well as to obtain the server version and other forms " +
-                    "of general server information");
-    registerMessage(MSGID_DSCORE_DESCRIPTION_CONFIG_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "to use as the Directory Server configuration handler");
-    registerMessage(MSGID_DSCORE_DESCRIPTION_CONFIG_FILE,
-                    "Specifies the path to the file containing the " +
-                    "information needed by the configuration handler to " +
-                    "obtain the Directory Server configuration");
-    registerMessage(MSGID_DSCORE_DESCRIPTION_CHECK_STARTABILITY,
-                    "Used to determine whether a server can be started or not" +
-                    "and the mode to be used to start it");
-    registerMessage(MSGID_DSCORE_DESCRIPTION_WINDOWS_NET_START,
-                    "Used by the window service code to inform that start-ds "+
-                    "is being called from the window services after a call "+
-                    "to net start");
-    registerMessage(MSGID_DSCORE_DESCRIPTION_VERSION,
-                    "Display Directory Server version information");
-    registerMessage(MSGID_DSCORE_DESCRIPTION_FULLVERSION,
-                    "Display extended Directory Server version information");
-    registerMessage(MSGID_DSCORE_DESCRIPTION_SYSINFO,
-                    "Display general system information");
-    registerMessage(MSGID_DSCORE_DESCRIPTION_DUMPMESSAGES,
-                    "Dump a list of all defined messages");
-    registerMessage(MSGID_DSCORE_DESCRIPTION_NODETACH,
-                    "Do not detach from the terminal and continue running in " +
-                    "the foreground");
-    registerMessage(MSGID_DSCORE_DESCRIPTION_USAGE,
-                    "Display this usage information");
-    registerMessage(MSGID_DSCORE_CANNOT_INITIALIZE_ARGS,
-                    "An error occurred while attempting to initialize the " +
-                    "command-line arguments:  %s");
-    registerMessage(MSGID_DSCORE_ERROR_PARSING_ARGS,
-                    "An error occurred while attempting to parse the " +
-                    "provided set of command line arguments:  %s");
-    registerMessage(MSGID_DSCORE_ERROR_NODETACH_AND_WINDOW_SERVICE,
-                    "OpenDS is configured to run as a window service and it "+
-                    "cannot run in no-detach mode");
-    registerMessage(MSGID_DSCORE_CANNOT_BOOTSTRAP,
-                    "An error occurred while attempting to bootstrap the " +
-                    "Directory Server:  %s");
-    registerMessage(MSGID_DSCORE_CANNOT_START,
-                    "An error occurred while trying to start the Directory " +
-                    "Server:  %s");
-
-
-    registerMessage(MSGID_BACKUPINFO_NO_DELIMITER,
-                    "The line \"%s\" associated with the backup information " +
-                    "in directory %s could not be parsed because it did not " +
-                    "contain an equal sign to delimit the property name from " +
-                    "the value");
-    registerMessage(MSGID_BACKUPINFO_NO_NAME,
-                    "The line \"%s\" associated with the backup information " +
-                    "in directory %s could not be parsed because it did not " +
-                    "include a property name");
-    registerMessage(MSGID_BACKUPINFO_MULTIPLE_BACKUP_IDS,
-                    "The backup information structure in directory %s could " +
-                    "not be parsed because it contained multiple backup IDs " +
-                    "(%s and %s)");
-    registerMessage(MSGID_BACKUPINFO_UNKNOWN_PROPERTY,
-                    "The backup information structure in directory %s could " +
-                    "not be parsed because it contained an unknown property " +
-                    "%s with value %s");
-    registerMessage(MSGID_BACKUPINFO_CANNOT_DECODE,
-                    "An unexpected error occurred while trying to decode a " +
-                    "backup information structure in directory %s:  %s");
-    registerMessage(MSGID_BACKUPINFO_NO_BACKUP_ID,
-                    "Unable to decode a backup information structure in " +
-                    "directory %s because the structure did not include a " +
-                    "backup ID");
-    registerMessage(MSGID_BACKUPINFO_NO_BACKUP_DATE,
-                    "The backup information structure with backup ID %s in " +
-                    "Unable to decode a backup information structure in " +
-                    "directory %s was not valid because it did not contain " +
-                    "the backup date");
-
-
-    registerMessage(MSGID_BACKUPDIRECTORY_ADD_DUPLICATE_ID,
-                    "Cannot add a backup with ID %s to backup directory %s " +
-                    "because another backup already exists with that ID");
-    registerMessage(MSGID_BACKUPDIRECTORY_NO_SUCH_BACKUP,
-                    "Cannot remove backup %s from backup directory %s " +
-                    "because no backup with that ID exists in that directory");
-    registerMessage(MSGID_BACKUPDIRECTORY_UNRESOLVED_DEPENDENCY,
-                    "Cannot remove backup %s from backup directory %s " +
-                    "because it is listed as a dependency for backup %s");
-    registerMessage(MSGID_BACKUPDIRECTORY_CANNOT_CREATE_DIRECTORY,
-                    "Backup directory %s does not exist and an error " +
-                    "occurred while attempting to create it:  %s");
-    registerMessage(MSGID_BACKUPDIRECTORY_NOT_DIRECTORY,
-                    "The path %s specifies as a backup directory exists but " +
-                    "does not reference a directory");
-    registerMessage(MSGID_BACKUPDIRECTORY_CANNOT_DELETE_SAVED_DESCRIPTOR,
-                    "An error occurred while trying to remove saved backup " +
-                    "descriptor file %s:  %s.  The new backup descriptor " +
-                    "has been written to %s but will not be used until it is " +
-                    "manually renamed to %s");
-    registerMessage(MSGID_BACKUPDIRECTORY_CANNOT_RENAME_CURRENT_DESCRIPTOR,
-                    "An error occurred while trying to rename the current " +
-                    "backup descriptor file %s to %s:  %s.  The new backup " +
-                    "descriptor has been written to %s but will not be used " +
-                    "until it is manually renamed to %s");
-    registerMessage(MSGID_BACKUPDIRECTORY_CANNOT_RENAME_NEW_DESCRIPTOR,
-                    "An error occurred while trying to rename the new backup " +
-                    "descriptor file %s to %s:  %s.  The new backup " +
-                    "descriptor will not be used until it is manually " +
-                    "renamed");
-    registerMessage(MSGID_BACKUPDIRECTORY_NO_DESCRIPTOR_FILE,
-                    "No backup directory descriptor file was found at %s");
-    registerMessage(MSGID_BACKUPDIRECTORY_CANNOT_READ_CONFIG_ENTRY_DN,
-                    "The backup descriptor file %s is invalid because the " +
-                    "first line should have contained the DN of the backend " +
-                    "configuration entry but was blank");
-    registerMessage(MSGID_BACKUPDIRECTORY_FIRST_LINE_NOT_DN,
-                    "The backup descriptor file %s is invalid because the " +
-                    "first line of the file was \"%s\", but the DN of the " +
-                    "backend configuration entry was expected");
-    registerMessage(MSGID_BACKUPDIRECTORY_CANNOT_DECODE_DN,
-                    "An error occurred while trying to decode the value " +
-                    "\"%s\" read from the first line of %s as the DN of " +
-                    "the backend configuration entry:  %s");
-
-
-    registerMessage(MSGID_FILELOCKER_LOCK_SHARED_REJECTED_BY_EXCLUSIVE,
-                    "The attempt to obtain a shared lock on file %s was " +
-                    "rejected because an exclusive lock was already held on " +
-                    "that file");
-    registerMessage(MSGID_FILELOCKER_LOCK_SHARED_FAILED_CREATE,
-                    "The attempt to obtain a shared lock on file %s was " +
-                    "rejected because the attempt to create the lock file " +
-                    "failed:  %s");
-    registerMessage(MSGID_FILELOCKER_LOCK_SHARED_FAILED_OPEN,
-                    "The attempt to obtain a shared lock on file %s was " +
-                    "rejected because the attempt to open the lock file " +
-                    "failed:  %s");
-    registerMessage(MSGID_FILELOCKER_LOCK_SHARED_FAILED_LOCK,
-                    "The attempt to obtain a shared lock on file %s was " +
-                    "rejected because an error occurred while attempting to " +
-                    "acquire the lock:  %s");
-    registerMessage(MSGID_FILELOCKER_LOCK_SHARED_NOT_GRANTED,
-                    "The shared lock requested for file %s was not granted, " +
-                    "which indicates that another process already holds an "+
-                    "exclusive lock on that file");
-    registerMessage(MSGID_FILELOCKER_LOCK_EXCLUSIVE_REJECTED_BY_EXCLUSIVE,
-                    "The attempt to obtain an exclusive lock on file %s was " +
-                    "rejected because an exclusive lock was already held on " +
-                    "that file");
-    registerMessage(MSGID_FILELOCKER_LOCK_EXCLUSIVE_REJECTED_BY_SHARED,
-                    "The attempt to obtain an exclusive lock on file %s was " +
-                    "rejected because a shared lock was already held on that " +
-                    "file");
-    registerMessage(MSGID_FILELOCKER_LOCK_EXCLUSIVE_FAILED_CREATE,
-                    "The attempt to obtain an exclusive lock on file %s was " +
-                    "rejected because the attempt to create the lock file " +
-                    "failed:  %s");
-    registerMessage(MSGID_FILELOCKER_LOCK_EXCLUSIVE_FAILED_OPEN,
-                    "The attempt to obtain an exclusive lock on file %s was " +
-                    "rejected because the attempt to open the lock file " +
-                    "failed:  %s");
-    registerMessage(MSGID_FILELOCKER_LOCK_EXCLUSIVE_FAILED_LOCK,
-                    "The attempt to obtain an exclusive lock on file %s was " +
-                    "rejected because an error occurred while attempting to " +
-                    "acquire the lock:  %s");
-    registerMessage(MSGID_FILELOCKER_LOCK_EXCLUSIVE_NOT_GRANTED,
-                    "The exclusive lock requested for file %s was not " +
-                    "granted, which indicates that another process already " +
-                    "holds a shared or exclusive lock on that file");
-    registerMessage(MSGID_FILELOCKER_UNLOCK_EXCLUSIVE_FAILED_RELEASE,
-                    "The attempt to release the exclusive lock held on %s " +
-                    "failed:  %s");
-    registerMessage(MSGID_FILELOCKER_UNLOCK_SHARED_FAILED_RELEASE,
-                    "The attempt to release the shared lock held on %s " +
-                    "failed:  %s");
-    registerMessage(MSGID_FILELOCKER_UNLOCK_UNKNOWN_FILE,
-                    "The attempt to release the lock held on %s failed " +
-                    "because no record of a lock on that file was found");
-    registerMessage(MSGID_ADD_ENTRY_ALREADY_EXISTS,
-                    "The entry %s cannot be added because an entry with " +
-                    "that name already exists");
-
-
-    registerMessage(MSGID_ADD_SYNCH_CONFLICT_RESOLUTION_FAILED,
-                    "An error occurred during conflict resolution " +
-                    "synchronization processing for the add operation with " +
-                    "connection ID %d and operation ID %d:  %s");
-    registerMessage(MSGID_ADD_SYNCH_PREOP_FAILED,
-                    "An error occurred during preoperation synchronization " +
-                    "processing for the add operation with connection ID %d " +
-                    "and operation ID %d:  %s");
-    registerMessage(MSGID_ADD_SYNCH_POSTOP_FAILED,
-                    "An error occurred during postoperation synchronization " +
-                    "processing for the add operation with connection ID %d " +
-                    "and operation ID %d:  %s");
-    registerMessage(MSGID_DELETE_SYNCH_CONFLICT_RESOLUTION_FAILED,
-                    "An error occurred during conflict resolution " +
-                    "synchronization processing for the delete operation " +
-                    "with connection ID %d and operation ID %d:  %s");
-    registerMessage(MSGID_DELETE_SYNCH_PREOP_FAILED,
-                    "An error occurred during preoperation synchronization " +
-                    "processing for the delete operation with connection ID " +
-                    "%d and operation ID %d:  %s");
-    registerMessage(MSGID_DELETE_SYNCH_POSTOP_FAILED,
-                    "An error occurred during postoperation synchronization " +
-                    "processing for the delete operation with connection ID " +
-                    "%d and operation ID %d:  %s");
-    registerMessage(MSGID_MODIFY_SYNCH_CONFLICT_RESOLUTION_FAILED,
-                    "An error occurred during conflict resolution " +
-                    "synchronization processing for the modify operation " +
-                    "with connection ID %d and operation ID %d:  %s");
-    registerMessage(MSGID_MODIFY_SYNCH_PREOP_FAILED,
-                    "An error occurred during preoperation synchronization " +
-                    "processing for the modify operation with connection ID " +
-                    "%d and operation ID %d:  %s");
-    registerMessage(MSGID_MODIFY_SYNCH_POSTOP_FAILED,
-                    "An error occurred during postoperation synchronization " +
-                    "processing for the modify operation with connection ID " +
-                    "%d and operation ID %d:  %s");
-    registerMessage(MSGID_MODDN_SYNCH_CONFLICT_RESOLUTION_FAILED,
-                    "An error occurred during conflict resolution " +
-                    "synchronization processing for the modify DN operation " +
-                    "with connection ID %d and operation ID %d:  %s");
-    registerMessage(MSGID_MODDN_SYNCH_PREOP_FAILED,
-                    "An error occurred during preoperation synchronization " +
-                    "processing for the modify DN operation with connection " +
-                    "ID %d and operation ID %d:  %s");
-    registerMessage(MSGID_MODDN_SYNCH_POSTOP_FAILED,
-                    "An error occurred during postoperation synchronization " +
-                    "processing for the modify DN operation with connection " +
-                    "ID %d and operation ID %d:  %s");
-
-
-    registerMessage(MSGID_ADD_SERVER_READONLY,
-                    "Unable to add entry %s because the Directory Server " +
-                    "is configured in read-only mode");
-    registerMessage(MSGID_ADD_BACKEND_READONLY,
-                    "Unable to add entry %s because the backend that should " +
-                    "hold that entry is configured in read-only mode");
-    registerMessage(MSGID_DELETE_SERVER_READONLY,
-                    "Unable to delete entry %s because the Directory Server " +
-                    "is configured in read-only mode");
-    registerMessage(MSGID_DELETE_BACKEND_READONLY,
-                    "Unable to delete entry %s because the backend that " +
-                    "holds that entry is configured in read-only mode");
-    registerMessage(MSGID_MODIFY_SERVER_READONLY,
-                    "Unable to modify entry %s because the Directory Server " +
-                    "is configured in read-only mode");
-    registerMessage(MSGID_MODIFY_BACKEND_READONLY,
-                    "Unable to modify entry %s because the backend that " +
-                    "holds that entry is configured in read-only mode");
-    registerMessage(MSGID_MODDN_SERVER_READONLY,
-                    "Unable to rename entry %s because the Directory Server " +
-                    "is configured in read-only mode");
-    registerMessage(MSGID_MODDN_BACKEND_READONLY,
-                    "Unable to rename entry %s because the backend that " +
-                    "holds that entry is configured in read-only mode");
-
-
-    registerMessage(MSGID_PWPOLICY_NO_PASSWORD_ATTRIBUTE,
-                    "The password policy configuration entry \"%s\" does not " +
-                    "contain a value for attribute " +
-                    ATTR_PWPOLICY_PASSWORD_ATTRIBUTE + ", which specifies " +
-                    "the attribute to hold user passwords");
-    registerMessage(MSGID_PWPOLICY_NO_DEFAULT_STORAGE_SCHEMES,
-                    "The password policy configuration entry \"%s\" does not " +
-                    "contain any values for attribute " +
-                    ATTR_PWPOLICY_DEFAULT_SCHEME + ", which specifies " +
-                    "the set of default password storage schemes");
-    registerMessage(MSGID_PWPOLICY_WARNING_INTERVAL_LARGER_THAN_MAX_AGE,
-                    "The password policy configuration entry \"%s\" is " +
-                    "invalid because if a maximum password age is " +
-                    "configured, then the password expiration warning " +
-                    "interval must be shorter than the maximum password age");
-    registerMessage(MSGID_PWPOLICY_MIN_AGE_PLUS_WARNING_GREATER_THAN_MAX_AGE,
-                    "The password policy configuration entry \"%s\" is " +
-                    "invalid because if both a minimum password age and a " +
-                    "maximum password age are configured, then the sum of " +
-                    "the minimum password age and the password expiration " +
-                    "warning interval must be shorter than the maximum " +
-                    "password age");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_PW_ATTR,
-                    "Specifies the attribute type used to hold user " +
-                    "passwords.  This attribute type must be defined in the " +
-                    "server schema.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_UNDEFINED_PASSWORD_ATTRIBUTE,
-                    "The password policy definition contained in " +
-                    "configuration entry \"%s\" is invalid because the " +
-                    "specified password attribute \"%s\" is not defined in " +
-                    "the server schema");
-    registerMessage(MSGID_PWPOLICY_INVALID_PASSWORD_ATTRIBUTE_SYNTAX,
-                    "The password policy definition contained in " +
-                    "configuration entry \"%s\" is invalid because the " +
-                    "specified password attribute \"%s\" has a syntax OID of " +
-                    "%s.  The password attribute must have a syntax OID of " +
-                    "either " + SYNTAX_USER_PASSWORD_OID + " (for the user " +
-                    "password syntax) or " + SYNTAX_AUTH_PASSWORD_OID +
-                    " (for the authentication password syntax)");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_PASSWORD_ATTRIBUTE,
-                    "An error occurred while attempting to determine the " +
-                    "value of attribute " + ATTR_PWPOLICY_PASSWORD_ATTRIBUTE +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_DEFAULT_STORAGE_SCHEMES,
-                    "Specifies the password storage scheme (or set of " +
-                    "schemes) that will be used to encode clear-text " +
-                    "passwords.  If multiple default storage schemes are " +
-                    "defined for a password policy, then the same password " +
-                    "will be encoded using all of those schemes.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWPOLICY_NO_SUCH_DEFAULT_SCHEME,
-                    "The password policy definition contained in " +
-                    "configuration entry \"%s\" is invalid because it " +
-                    "references a default password storage scheme \"%s\" " +
-                    "that is not defined in the server configuration");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_DEFAULT_STORAGE_SCHEMES,
-                    "An error occurred while attempting to determine the " +
-                    "values for attribute " + ATTR_PWPOLICY_DEFAULT_SCHEME +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_DEPRECATED_STORAGE_SCHEMES,
-                    "Specifies the password storage scheme (or set of " +
-                    "schemes) that should be considered deprecated.  If an " +
-                    "authenticating user has a password encoded with one of " +
-                    "these schemes, those passwords will be removed and " +
-                    "replaced with passwords encoded using the default " +
-                    "schemes.  Changes to this configuration attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_DEPRECATED_STORAGE_SCHEMES,
-                    "An error occurred while attempting to determine the " +
-                    "values for attribute " + ATTR_PWPOLICY_DEPRECATED_SCHEME +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_PASSWORD_VALIDATORS,
-                    "Specifies the DN(s) of the password validator(s) that " +
-                    "should be used with the associated password storage " +
-                    "scheme.  Changes to this configuration attribute will " +
-                    "take effect immediately");
-    registerMessage(MSGID_PWPOLICY_NO_SUCH_VALIDATOR,
-                    "The password policy definition contained in " +
-                    "configuration entry \"%s\" is invalid because it " +
-                    "references a password validator \"%s\" that is not " +
-                    "defined in the server configuration");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_PASSWORD_VALIDATORS,
-                    "An error occurred while attempting to determine the " +
-                    "values for attribute " + ATTR_PWPOLICY_PASSWORD_VALIDATOR +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_NOTIFICATION_HANDLERS,
-                    "Specifies the DN(s) of the account status notification " +
-                    "handler(s) that should be used with the associated " +
-                    "password storage scheme.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_NO_SUCH_NOTIFICATION_HANDLER,
-                    "The password policy definition contained in " +
-                    "configuration entry \"%s\" is invalid because it " +
-                    "references account status notification handler \"%s\" " +
-                    "that is not defined in the server configuration");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_NOTIFICATION_HANDLERS,
-                    "An error occurred while attempting to determine the " +
-                    "values for attribute " +
-                    ATTR_PWPOLICY_NOTIFICATION_HANDLER +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_ALLOW_USER_PW_CHANGES,
-                    "Indicates whether users will be allowed to change " +
-                    "their own passwords.  This check is made in addition " +
-                    "to access control evaluation, and therefore both must " +
-                    "allow the password change for it to occur.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_ALLOW_USER_PW_CHANGES,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " + ATTR_PWPOLICY_ALLOW_USER_CHANGE +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_REQUIRE_CURRENT_PW,
-                    "Indicates whether user password changes will be " +
-                    "required to use the password modify extended operation " +
-                    "and include the user's current password before the " +
-                    "change will be allowed.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_REQUIRE_CURRENT_PW,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " + ATTR_PWPOLICY_ALLOW_USER_CHANGE +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_FORCE_CHANGE_ON_ADD,
-                    "Indicates whether users will be forced to change their " +
-                    "passwords upon first authenticating to the Directory " +
-                    "Server after their account has been created.  Changes " +
-                    "to this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_FORCE_CHANGE_ON_ADD,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_FORCE_CHANGE_ON_ADD +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_FORCE_CHANGE_ON_RESET,
-                    "Indicates whether users will be forced to change their " +
-                    "passwords if they are reset by an administrator.  " +
-                    "For this purpose, anyone with permission to change a " +
-                    "given user's password other than that user will be " +
-                    "considered an administrator.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_FORCE_CHANGE_ON_RESET,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_FORCE_CHANGE_ON_RESET +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_SKIP_ADMIN_VALIDATION,
-                    "Indicates whether passwords set by administrators (in " +
-                    "add, modify, or password modify operations) will be " +
-                    "allowed to bypass the password validation process that " +
-                    "will be required for user password changes.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_SKIP_ADMIN_VALIDATION,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_SKIP_ADMIN_VALIDATION +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_PASSWORD_GENERATOR,
-                    "Specifies the DN of the configuration entry that " +
-                    "references the password generator for use with the " +
-                    "associated password policy.  This will be used in " +
-                    "conjunction with the password modify extended operation " +
-                    "to generate a new password for a user when none was " +
-                    "provided in the request.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_NO_SUCH_GENERATOR,
-                    "The password policy definition contained in " +
-                    "configuration entry \"%s\" is invalid because it " +
-                    "references password generator \"%s\" that is not " +
-                    "defined in the server configuration");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_PASSWORD_GENERATOR,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " + ATTR_PWPOLICY_PASSWORD_GENERATOR +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_REQUIRE_SECURE_AUTH,
-                    "Indicates whether users with the associated password " +
-                    "policy will be required to authenticate in a secure " +
-                    "manner.  This could mean either using a secure " +
-                    "communication channel between the client and the " +
-                    "server, or using a SASL mechanism that does not expose " +
-                    "the credentials.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_REQUIRE_SECURE_AUTH,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_REQUIRE_SECURE_AUTHENTICATION +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_REQUIRE_SECURE_CHANGES,
-                    "Indicates whether users with the associated password " +
-                    "policy will be required to change their password in " +
-                    "a secure manner that does not expose the credentials.  " +
-                    "Changes to this configuration attribute will take " +
-                    "effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_REQUIRE_SECURE_CHANGES,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_REQUIRE_SECURE_PASSWORD_CHANGES +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_ALLOW_MULTIPLE_PW_VALUES,
-                    "Indicates whether user entries will be allowed to have " +
-                    "multiple distinct values for the password attribute.  " +
-                    "This is potentially dangerous because many mechanisms " +
-                    "used to change the password do not work well with such " +
-                    "a configuration.  If multiple password values are " +
-                    "allowed, then any of them may be used to authenticate, " +
-                    "and they will all be subject to the same policy " +
-                    "constraints.  Changes to this configuration attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_ALLOW_MULTIPLE_PW_VALUES,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_ALLOW_MULTIPLE_PW_VALUES +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_ALLOW_PREENCODED,
-                    "Indicates whether users will be allowed to change their " +
-                    "passwords by providing a pre-encoded value.  This can " +
-                    "cause a security risk because the clear-text version of " +
-                    "the password is not known and therefore validation " +
-                    "checks cannot be applied to it.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_ALLOW_PREENCODED,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_ALLOW_PRE_ENCODED_PASSWORDS +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_MIN_AGE,
-                    "Specifies the minimum length of time that must pass " +
-                    "after a password change before the user will be allowed " +
-                    "to change the password again.  The value of this " +
-                    "attribute should be an integer followed by a unit of " +
-                    "seconds, minutes, hours, days, or weeks.  This setting " +
-                    "can be used to prevent users from changing their " +
-                    "passwords repeatedly over a short period of time to " +
-                    "flush and old password from the history so that it may " +
-                    "be re-used.  Changes to this configuration attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_MIN_AGE,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_MINIMUM_PASSWORD_AGE +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_MAX_AGE,
-                    "Specifies the maximum length of time that a user may " +
-                    "continue using the same password before it must be " +
-                    "changed (i.e., the password expiration interval).  The " +
-                    "value of this attribute should be an integer followed " +
-                    "by a unit of seconds, minutes, hours, days, or weeks.  " +
-                    "A value of 0 seconds will disable password expiration.  " +
-                    "Changes to this configuration attribute will take " +
-                    "effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_MAX_AGE,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_MAXIMUM_PASSWORD_AGE +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_MAX_RESET_AGE,
-                    "Specifies the maximum length of time that users have to " +
-                    "change passwords after they have been reset by an " +
-                    "administrator before they become locked.  The value " +
-                    "of this attribute should be an integer followed by a " +
-                    "unit of seconds, minutes, hours, days, or weeks.  A " +
-                    "value of 0 seconds will disable this feature.  Changes " +
-                    "to this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_MAX_RESET_AGE,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_MAXIMUM_PASSWORD_RESET_AGE +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_WARNING_INTERVAL,
-                    "Specifies the maximum length of time before a user's " +
-                    "password actually expires that the server will begin " +
-                    "to include warning notifications in bind responses for " +
-                    "that user.  The value of this attribute should be an " +
-                    "integer followed by a unit of seconds, minutes, hours, " +
-                    "days, or weeks.  A value of 0 seconds will disable " +
-                    "the warning interval.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_WARNING_INTERVAL,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " + ATTR_PWPOLICY_WARNING_INTERVAL +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_EXPIRE_WITHOUT_WARNING,
-                    "Indicates whether the Directory Server should allow " +
-                    "a user's password to expire even if that user has " +
-                    "never seen an expiration warning notification.  If " +
-                    "this setting is enabled, then accounts will always be " +
-                    "expired when the expiration time arrives.  If it is " +
-                    "disabled, then the user will always receive at least " +
-                    "one warning notification, and the password expiration " +
-                    "will be set to the warning time plus the warning " +
-                    "interval.  Changes to this configuration attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_EXPIRE_WITHOUT_WARNING,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_EXPIRE_WITHOUT_WARNING +
-                    " in configuration entry %s:  %s");
-    registerMessage(
-         MSGID_PWPOLICY_MUST_HAVE_WARNING_IF_NOT_EXPIRE_WITHOUT_WARNING,
-         "The password policy defined in configuration entry %s is " +
-         "configured to always send at least one warning notification before " +
-         "the password is expired, but no warning interval has been set.  " +
-         "If configuration attribute " + ATTR_PWPOLICY_EXPIRE_WITHOUT_WARNING +
-         " is set to \"false\", then configuration attribute " +
-         ATTR_PWPOLICY_WARNING_INTERVAL + " must have a positive value");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_ALLOW_EXPIRED_CHANGES,
-                    "Indicates whether a user whose password is expired " +
-                    "will still be allowed to change that password using " +
-                    "the password modify extended operation.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_ALLOW_EXPIRED_CHANGES,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_ALLOW_EXPIRED_CHANGES +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_GRACE_LOGIN_COUNT,
-                    "Specifies the number of grace logins that a user will " +
-                    "be allowed after the account has expired to allow that " +
-                    "user to choose a new password.  A value of 0 " +
-                    "indicates that no grace logins will be allowed.  " +
-                    "Changes to this configuration attribute will take " +
-                    "effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_GRACE_LOGIN_COUNT,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " + ATTR_PWPOLICY_GRACE_LOGIN_COUNT +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_LOCKOUT_FAILURE_COUNT,
-                    "Specifies the maximum number of authentication failures " +
-                    "that a user should be allowed before the account is " +
-                    "locked out.  A value of 0 indicates that accounts " +
-                    "should never be locked out due to failed attempts.  " +
-                    "changes to this configuration attribute will take " +
-                    "effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_LOCKOUT_FAILURE_COUNT,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_LOCKOUT_FAILURE_COUNT +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_LOCKOUT_DURATION,
-                    "Specifies the length of time that an account should be " +
-                    "locked after too many authentication failures.  The " +
-                    "value of this attribute should be an integer followed " +
-                    "by a unit of seconds, minutes, hours, days, or weeks.  " +
-                    "A value of 0 seconds indicates that the account should " +
-                    "remain locked until an administrator resets the " +
-                    "password.  Changes to this configuration attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_LOCKOUT_DURATION,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " + ATTR_PWPOLICY_LOCKOUT_DURATION +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_FAILURE_EXPIRATION,
-                    "Specifies the length of time that should pass before " +
-                    "an authentication failure is no longer counted against " +
-                    "a user for the purposes of account lockout.  The " +
-                    "value of this attribute should be an integer followed " +
-                    "by a unit of seconds, minutes, hours, days, or weeks.  " +
-                    "A value of 0 seconds indicates that the authentication " +
-                    "failures should never expire.  The failure count will " +
-                    "always be cleared upon a successful authentication.  " +
-                    "Changes to this configuration attribute will take " +
-                    "effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_FAILURE_EXPIRATION,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_LOCKOUT_FAILURE_EXPIRATION_INTERVAL +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_REQUIRE_CHANGE_BY_TIME,
-                    "Specifies the time by which all users with the " +
-                    "associated password policy must change their " +
-                    "passwords.  The value should be expressed in " +
-                    "a generalized time format.  If this time is equal to " +
-                    "the current time or is in the past, then all users will " +
-                    "be required to change their passwords immediately.  The " +
-                    "behavior of the server in this mode will be identical " +
-                    "to the behavior observed when users are forced to " +
-                    "change their passwords after an administrative reset.  " +
-                    "Changes to this configuration attribute will take " +
-                    "effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_REQUIRE_CHANGE_BY_TIME,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_REQUIRE_CHANGE_BY_TIME +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_LAST_LOGIN_TIME_ATTR,
-                    "Specifies the name or OID of the attribute type that "+
-                    "should be used to hold the last login time for users " +
-                    "with the associated password policy.   This attribute " +
-                    "type must be defined in the Directory Server schema and " +
-                    "must either be defined as an operational attribute or " +
-                    "must be allowed by the set of objectClasses for all " +
-                    "users with the associated password policy.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWPOLICY_UNDEFINED_LAST_LOGIN_TIME_ATTRIBUTE,
-                    "The password policy definition contained in " +
-                    "configuration entry \"%s\" is invalid because the " +
-                    "specified last login time attribute \"%s\" is not " +
-                    "defined in the server schema");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_LAST_LOGIN_TIME_ATTR,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_LAST_LOGIN_TIME_ATTRIBUTE +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_LAST_LOGIN_TIME_FORMAT,
-                    "Specifies the format string that should be used to " +
-                    "generate the last login time value for users with the " +
-                    "associated password policy.  This format string should " +
-                    "conform to the syntax described in the API " +
-                    "documentation for the " +
-                    "<CODE>java.text.SimpleDateFormat</CODE> class.  Changes " +
-                    "to this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWPOLICY_INVALID_LAST_LOGIN_TIME_FORMAT,
-                    "The password policy definition contained in " +
-                    "configuration entry \"%s\" is invalid because the " +
-                    "specified last login time format \"%s\" is not " +
-                    "a valid format string  The last login time format " +
-                    "string should conform to the syntax described in the " +
-                    "API documentation for the " +
-                    "<CODE>java.text.SimpleDateFormat</CODE> class");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_LAST_LOGIN_TIME_FORMAT,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_LAST_LOGIN_TIME_FORMAT +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_PREVIOUS_LAST_LOGIN_TIME_FORMAT,
-                    "Specifies the format string(s) that may have been " +
-                    "used with the last login time at any point in the " +
-                    "past for users associated with the password policy.  " +
-                    "These values are used to make it possible to parse " +
-                    "previous values, but will not be used to set new " +
-                    "values.  These format strings should conform to the " +
-                    "syntax described in the API documentation for the " +
-                    "<CODE>java.text.SimpleDateFormat</CODE> class.  Changes " +
-                    "to this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWPOLICY_INVALID_PREVIOUS_LAST_LOGIN_TIME_FORMAT,
-                    "The password policy definition contained in " +
-                    "configuration entry \"%s\" is invalid because the " +
-                    "specified previous last login time format \"%s\" is not " +
-                    "a valid format string  The previous last login time " +
-                    "format strings should conform to the syntax described " +
-                    "in the API documentation for the " +
-                    "<CODE>java.text.SimpleDateFormat</CODE> class");
-    registerMessage(
-         MSGID_PWPOLICY_CANNOT_DETERMINE_PREVIOUS_LAST_LOGIN_TIME_FORMAT,
-         "An error occurred while attempting to determine the values for " +
-         "attribute " + ATTR_PWPOLICY_PREVIOUS_LAST_LOGIN_TIME_FORMAT +
-         " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_DESCRIPTION_IDLE_LOCKOUT_INTERVAL,
-                    "Specifies the maximum length of time that an account " +
-                    "may remain idle (i.e., the associated user does not" +
-                    "authenticate to the server) before that user is locked " +
-                    "out.  The value of this attribute should be an integer " +
-                    "followed by a unit of seconds, minutes, hours, days, or " +
-                    "weeks.  A value of 0 seconds indicates that idle " +
-                    "accounts should not automatically be locked out.  This " +
-                    "feature will only be available if the last login time " +
-                    "is maintained.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_PWPOLICY_CANNOT_DETERMINE_IDLE_LOCKOUT_INTERVAL,
-                    "An error occurred while attempting to determine the " +
-                    "value for attribute " +
-                    ATTR_PWPOLICY_IDLE_LOCKOUT_INTERVAL +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_PWPOLICY_UPDATED_POLICY,
-                    "The password policy defined in configuration entry %s " +
-                    "has been successfully updated");
-    registerMessage(MSGID_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED,
-                    "Attribute options are not allowed for the password " +
-                    "attribute %s");
-    registerMessage(MSGID_PWPOLICY_MULTIPLE_PW_VALUES_NOT_ALLOWED,
-                    "Only a single value may be provided for the password " +
-                    "attribute %s");
-    registerMessage(MSGID_PWPOLICY_PREENCODED_NOT_ALLOWED,
-                    "Pre-encoded passwords are not allowed for the password " +
-                    "attribute %s");
-    registerMessage(MSGID_PWPOLICY_VALIDATION_FAILED,
-                    "The password value for attribute %s was found to be " +
-                    "unacceptable:  %s");
-
-
-    registerMessage(MSGID_ENQUEUE_BIND_IN_PROGRESS,
-                    "A bind operation is currently in progress on the " +
-                    "associated client connection.  No other requests may " +
-                    "be made on this client connection until the bind " +
-                    "processing has completed");
-    registerMessage(MSGID_ENQUEUE_MUST_CHANGE_PASSWORD,
-                    "You must change your password before you will be " +
-                    "allowed to request any other operations");
-
-
-    registerMessage(MSGID_PWPSTATE_CANNOT_DECODE_SUBENTRY_VALUE_AS_DN,
-                    "An error occurred while attempting to decode the " +
-                    OP_ATTR_PWPOLICY_POLICY_DN + " value \"%s\" in user " +
-                    "entry \"%s\" as a DN:  %s");
-    registerMessage(MSGID_PWPSTATE_NO_SUCH_POLICY,
-                    "User entry %s is configured to use a password policy " +
-                    "subentry of %s but no such password policy has been " +
-                    "defined in the server configuration");
-    registerMessage(MSGID_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME,
-                    "An error occurred while attempting to decode value " +
-                    "\"%s\" for attribute %s in user entry %s in accordance " +
-                    "with the generalized time format:  %s");
-    registerMessage(MSGID_PWPSTATE_CANNOT_DECODE_BOOLEAN,
-                    "Unable to decode value \"%s\" for attribute %s in user " +
-                    "entry %s as a Boolean value");
-    registerMessage(MSGID_PWPSTATE_CANNOT_UPDATE_USER_ENTRY,
-                    "An error occurred while attempting to update password " +
-                    "policy state information for user %s:  %s");
-
-    registerMessage(MSGID_ADD_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS,
-        "The entry %s cannot be added due to insufficient access rights");
-    registerMessage(MSGID_BIND_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS,
-        "The user %s cannot bind due to insufficient access rights");
-    registerMessage(MSGID_COMPARE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS,
-        "The entry %s cannot be compared due to insufficient access rights");
-    registerMessage(MSGID_DELETE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS,
-        "The entry %s cannot be deleted due to insufficient access rights");
-    registerMessage(MSGID_EXTENDED_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS,
-        "The extended operation %s cannot be performed "
-            + "due to insufficient access rights");
-    registerMessage(MSGID_MODDN_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS,
-        "The entry %s cannot be renamed due to insufficient access rights");
-    registerMessage(MSGID_MODIFY_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS,
-        "The entry %s cannot be modified due to insufficient access rights");
-    registerMessage(MSGID_SEARCH_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS,
-        "The entry %s cannot be searched due to insufficient access rights");
-    registerMessage(MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS,
-        "The request control with Object Identifier (OID) \"%s\" cannot be" +
-        " used due to insufficient access rights");
-    registerMessage(MSGID_BIND_OPERATION_INSECURE_SIMPLE_BIND,
-                    "Rejecting a simple bind request for user %s because the " +
-                    "password policy requires secure authentication");
-    registerMessage(MSGID_BIND_OPERATION_WRITABILITY_DISABLED,
-                    "Rejecting a bind request for user %s because either " +
-                    "the entire server or the user's backend has a " +
-                    "writability mode of 'disabled' and password policy " +
-                    "state updates would not be allowed");
-    registerMessage(MSGID_BIND_OPERATION_ACCOUNT_DISABLED,
-                    "Rejecting a bind request for user %s because the " +
-                    "account has been administrative disabled");
-    registerMessage(MSGID_BIND_OPERATION_ACCOUNT_EXPIRED,
-                    "Rejecting a bind request for user %s because the " +
-                    "account has expired");
-    registerMessage(MSGID_BIND_OPERATION_ACCOUNT_FAILURE_LOCKED,
-                    "Rejecting a bind request for user %s because the " +
-                    "account has been locked due to too many failed " +
-                    "authentication attempts");
-    registerMessage(MSGID_BIND_OPERATION_ACCOUNT_RESET_LOCKED,
-                    "Rejecting a bind request for user %s because the " +
-                    "account has been locked after the user's password was " +
-                    "not changed in a timely manner after an administrative " +
-                    "reset");
-    registerMessage(MSGID_BIND_OPERATION_ACCOUNT_IDLE_LOCKED,
-                    "Rejecting a bind request for user %s because the " +
-                    "account has been locked after remaining idle for too " +
-                    "long");
-    registerMessage(MSGID_BIND_OPERATION_PASSWORD_EXPIRED,
-                    "Rejecting a bind request for user %s because that " +
-                    "user's password is expired");
-    registerMessage(MSGID_BIND_OPERATION_INSECURE_SASL_BIND,
-                    "Rejecting a SASL %s bind request for user %s because " +
-                    "the password policy requires secure authentication");
-
-
-    registerMessage(MSGID_WORKQ_CANNOT_PARSE_DN,
-                    "An error occurred while attempting to parse string %s " +
-                    "as the DN of the work queue configuration entry:  %s");
-    registerMessage(MSGID_WORKQ_NO_CONFIG,
-                    "Work queue configuration entry %s does not exist in " +
-                    "the server configuration");
-    registerMessage(MSGID_WORKQ_DESCRIPTION_CLASS,
-                    "Specifies the fully-qualified name of the Java class " +
-                    "that provides the core work queue logic for the " +
-                    "Directory Server.  Changes to this configuration " +
-                    "attribute require that the server be restarted for the " +
-                    "change to take effect");
-    registerMessage(MSGID_WORKQ_NO_CLASS_ATTR,
-                    "Configuration entry %s does not contain required " +
-                    "attribute %s that specifies the fully-qualified class " +
-                    "name for the work queue implementation");
-    registerMessage(MSGID_WORKQ_CANNOT_LOAD,
-                    "An error occurred while trying to load class %s to use " +
-                    "as the Directory Server work queue implementation:  %s");
-    registerMessage(MSGID_WORKQ_CANNOT_INSTANTIATE,
-                    "An error occurred while trying to create an instance " +
-                    "of class %s to use as the Directory Server work queue:  " +
-                    "%s");
-    registerMessage(MSGID_BIND_MULTIPLE_USER_LOOKTHROUGH_LIMITS,
-                    "There are multiple user-specific lookthrough limit " +
-                    "values contained in user entry %s.  The default server " +
-                    "lookthrough limit will be used");
-    registerMessage(MSGID_BIND_CANNOT_PROCESS_USER_LOOKTHROUGH_LIMIT,
-                    "The user-specific lookthrough limit value %s contained " +
-                    "in user entry %s could not be parsed as an integer.  " +
-                    "The default server lookthrough limit will be used");
-
-
-    registerMessage(MSGID_REGISTER_BACKEND_ALREADY_EXISTS,
-                    "Unable to register backend %s with the Directory Server " +
-                    "because another backend with the same backend ID is " +
-                    "already registered");
-    registerMessage(MSGID_REGISTER_BASEDN_ALREADY_EXISTS,
-                    "Unable to register base DN %s with the Directory Server " +
-                    "for backend %s because that base DN is already " +
-                    "registered for backend %s");
-    registerMessage(MSGID_REGISTER_BASEDN_HIERARCHY_CONFLICT,
-                    "Unable to register base DN %s with the Directory Server " +
-                    "for backend %s because that backend already contains " +
-                    "another base DN %s that is within the same hierarchical " +
-                    "path");
-    registerMessage(MSGID_REGISTER_BASEDN_DIFFERENT_PARENT_BASES,
-                    "Unable to register base DN %s with the Directory Server " +
-                    "for backend %s because that backend already contains " +
-                    "another base DN %s that is not subordinate to the same " +
-                    "base DN in the parent backend");
-    registerMessage(MSGID_REGISTER_BASEDN_NEW_BASE_NOT_SUBORDINATE,
-                    "Unable to register base DN %s with the Directory Server " +
-                    "for backend %s because that backend already contains " +
-                    "one or more other base DNs that are subordinate to " +
-                    "backend %s but the new base DN is not");
-    registerMessage(MSGID_REGISTER_BASEDN_ENTRIES_IN_MULTIPLE_BACKENDS,
-                    "Backend %s already contains entry %s which has just " +
-                    "been registered as the base DN for backend %s.  " +
-                    "These conflicting entries may cause unexpected or " +
-                    "errant search results, and both backends should be " +
-                    "reinitialized to ensure that each has the correct " +
-                    "content");
-    registerMessage(MSGID_DEREGISTER_BASEDN_NOT_REGISTERED,
-                    "Unable to de-register base DN %s with the Directory " +
-                    "Server because that base DN is not registered for any " +
-                    "active backend");
-    registerMessage(MSGID_DEREGISTER_BASEDN_MISSING_HIERARCHY,
-                    "Base DN %s has been deregistered from the Directory " +
-                    "Server for backend %s.  This base DN had both superior " +
-                    "and subordinate entries in other backends, and there " +
-                    "may be inconsistent or unexpected behavior when " +
-                    "accessing entries in this portion of the hierarchy " +
-                    "because of the missing entries that had been held in " +
-                    "the de-registered backend");
-    registerMessage(MSGID_REJECT_UNAUTHENTICATED_OPERATION,
-                     "Rejecting the requested operation  " +
-                     "because the connection has not been authenticated");
-
-
-    registerMessage(MSGID_CLIENTCONNECTION_DISCONNECT_DUE_TO_DELETE,
-                    "Terminating the client connection because its " +
-                    "associated authentication or authorization entry %s has " +
-                    "been deleted");
-    registerMessage(MSGID_CLIENTCONNECTION_AUDIT_HASPRIVILEGE,
-                    "hasPrivilege determination for connID=%d opID=%d " +
-                    "requesterDN=\"%s\" privilege=\"%s\" result=%b");
-    registerMessage(MSGID_CLIENTCONNECTION_AUDIT_HASPRIVILEGES,
-                    "hasPrivilege determination for connID=%d opID=%d " +
-                    "requesterDN=\"%s\" privilegeSet=\"%s\" result=%b");
-    registerMessage(MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to use the " +
-                    "proxied authorization control");
-
-    registerMessage(MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to use the " +
-                    "proxied authorization control");
-
-
-    registerMessage(MSGID_SORTKEY_INVALID_ORDER_INDICATOR,
-                    "The provided sort key value %s is invalid because it " +
-                    "does not start with either '+' (to indicate sorting in " +
-                    "ascending order) or '-' (to indicate sorting in " +
-                    "descending order)");
-    registerMessage(MSGID_SORTKEY_UNDEFINED_TYPE,
-                    "The provided sort key value %s is invalid because it " +
-                    "references undefined attribute type %s");
-    registerMessage(MSGID_SORTKEY_NO_ORDERING_RULE,
-                    "The provided sort key value %s is invalid because " +
-                    "attribute type %s does not have a default ordering " +
-                    "matching rule and no specific rule was provided");
-    registerMessage(MSGID_SORTKEY_UNDEFINED_ORDERING_RULE,
-                    "The provided sort key value %s is invalid because " +
-                    "it references undefined ordering matching rule %s");
-
-
-    registerMessage(MSGID_SORTORDER_DECODE_NO_KEYS,
-                    "The provided sort order string \"%s\" is invalid " +
-                    "because it does not contain any sort keys");
-
-    registerMessage(MSGID_HOST_PORT_ALREADY_SPECIFIED,
-                    "The connection handler %s is trying to use the listener " +
-                    "%s which is already in use by another connection handler");
-
-    registerMessage(MSGID_HOST_PORT_CANNOT_BE_USED,
-                    "The server cannot use the listener %s of connection " +
-                    "handler %s because it is already being used by another " +
-                    "process or because it does not have the rights to use it");
-
-    registerMessage(MSGID_NOT_AVAILABLE_CONNECTION_HANDLERS,
-                    "No enabled connection handler available");
-
-    registerMessage(MSGID_ERROR_STARTING_CONNECTION_HANDLERS,
-                    "Could not start connection handlers");
-
-
-    registerMessage(MSGID_REJECT_OPERATION_IN_LOCKDOWN_MODE,
-                    "Rejecting the requested operation because the server " +
-                    "is in lockdown mode and will only accept requests from " +
-                    "root users over loopback connections");
-    registerMessage(MSGID_DIRECTORY_SERVER_ENTERING_LOCKDOWN_MODE,
-                    "The Directory Server is entering lockdown mode, in " +
-                    "which clients will only be allowed to connect via a " +
-                    "loopback address, and only root users will be allowed " +
-                    "to process operations");
-    registerMessage(MSGID_DIRECTORY_SERVER_LEAVING_LOCKDOWN_MODE,
-                    "The Directory Server is leaving lockdown mode and will " +
-                    "resume normal operation");
-
-
-    registerMessage(MSGID_COMPRESSEDSCHEMA_UNRECOGNIZED_AD_TOKEN,
-                    "Unable to decode the provided attribute because it " +
-                    "used an undefined attribute description token %s");
-    registerMessage(MSGID_COMPRESSEDSCHEMA_UNKNOWN_OC_TOKEN,
-                    "Unable to decode the provided object class set because " +
-                    "it used an undefined token %s");
-    registerMessage(MSGID_COMPRESSEDSCHEMA_CANNOT_WRITE_UPDATED_DATA,
-                    "Unable to write the updated compressed schema token " +
-                    "data:  %s");
-
-
-    registerMessage(MSGID_ENTRYENCODECFG_INVALID_LENGTH,
-                    "Unable to decode the provided entry encode " +
-                    "configuration element because it has an invalid length");
-
-
-    registerMessage(MSGID_IDLETIME_LIMIT_EXCEEDED,
-                    "This connection has been teriminated because it has " +
-                    "remained idle for too long");
-    registerMessage(MSGID_IDLETIME_DISCONNECT_ERROR,
-                    "An error occurred while attempting to disconnect " +
-                    "client connection %d:  %s");
-    registerMessage(MSGID_IDLETIME_UNEXPECTED_ERROR,
-                    "An unexpected error occurred in the idle time limit " +
-                    "thread:  %s");
-    registerMessage(MSGID_REGISTER_WORKFLOW_ALREADY_EXISTS,
-                    "Unable to register workflow %s with the Directory " +
-                    "Server because another workflow with the same " +
-                    "workflow ID is already registered");
-    registerMessage(MSGID_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS,
-                    "Unable to register workflow node %s with the network " +
-                    "group %s because another workflow node with the same " +
-                    "workflow node ID is already registered");
-    registerMessage(MSGID_REGISTER_NETWORK_GROUP_ALREADY_EXISTS,
-                    "Unable to register network group %s with the Directory " +
-                    "Server because another network group with the same " +
-                    "network group ID is already registered");
-
-
-    registerMessage(MSGID_DIRCFG_SERVER_ALREADY_RUNNING,
-                    "The Directory Server is currently running.  Environment " +
-                    "configuration changes are not allowed with the server " +
-                    "running");
-    registerMessage(MSGID_DIRCFG_INVALID_SERVER_ROOT,
-                    "The specified server root directory '%s' is invalid.  " +
-                    "The specified path must exist and must be a directory");
-    registerMessage(MSGID_DIRCFG_INVALID_CONFIG_FILE,
-                    "The specified config file path '%s' is invalid.  " +
-                    "The specified path must exist and must be a file");
-    registerMessage(MSGID_DIRCFG_INVALID_CONFIG_CLASS,
-                    "The specified config handler class '%s' is invalid.  " +
-                    "The specified class must be a subclass of the " +
-                    "org.opends.server.api.ConfigHandler superclass");
-    registerMessage(MSGID_DIRCFG_INVALID_SCHEMA_DIRECTORY,
-                    "The specified schema configuration directory '%s' is " +
-                    "invalid.  The specified path must exist and must be a " +
-                    "directory");
-    registerMessage(MSGID_DIRCFG_INVALID_LOCK_DIRECTORY,
-                    "The specified lock directory '%s' is invalid.  The " +
-                    "specified path must exist and must be a directory");
-    registerMessage(MSGID_DIRCFG_INVALID_CONCURRENCY_LEVEL,
-                    "The specified lock table concurrency level %d is " +
-                    "invalid.  It must be an integer value greater than zero");
-    registerMessage(MSGID_DIRCFG_INVALID_LOCK_TABLE_SIZE,
-                    "The specified initial lock table size %d is invalid.  " +
-                    "It must be an integer value greater than zero");
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/ExtensionsMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/ExtensionsMessages.java
deleted file mode 100644
index 78747c5..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/ExtensionsMessages.java
+++ /dev/null
@@ -1,8070 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with Directory Server extensions like password storage
- * schemes, password validators, extended operations, SASL mechanisms, etc.
- */
-public class ExtensionsMessages
-{
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to initialize a message digest.  This takes two arguments, which
-   * are the name of the message digest and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 1;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to base64-decode a value.  This takes two arguments, which
-   * are the string to be base64-decoded and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 2;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * obtain the clear-text password from a password storage scheme that is not
-   * reversible.  This takes a single argument, which is the name of the
-   * password storage scheme.
-   */
-  public static final int MSGID_PWSCHEME_NOT_REVERSIBLE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 3;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * attempting to register the JMX alert handler MBean with the MBean server.
-   * This takes a single argument, which is a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_JMX_ALERT_HANDLER_CANNOT_REGISTER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 4;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to encode a password value.  This takes two arguments, which are
-   * the fully-qualified name of the class implementing the storage scheme, and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 5;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * FIFO-based entry cache max memory percentage configuration attribute.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_FIFOCACHE_DESCRIPTION_MAX_MEMORY_PCT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 6;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the percentage of memory to use for the FIFO-based
-   * entry cache.  This takes three arguments, which are the DN of the
-   * configuration entry, a string representation of the exception that was
-   * caught, and the default percentage value that will be used.
-   */
-  public static final int MSGID_FIFOCACHE_CANNOT_DETERMINE_MAX_MEMORY_PCT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 7;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * FIFO-based entry cache max memory percentage configuration attribute.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_FIFOCACHE_DESCRIPTION_MAX_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the maximum number of entries to hold in the FIFO-based
-   * entry cache.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_FIFOCACHE_CANNOT_DETERMINE_MAX_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 9;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * FIFO-based entry cache lock timeout configuration attribute.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_FIFOCACHE_DESCRIPTION_LOCK_TIMEOUT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 10;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the lock timeout to use for the FIFO-based entry cache.
-   * This takes three arguments, which are the DN of the configuration entry, a
-   * string representation of the exception that was caught, and the default
-   * lock timeout that will be used.
-   */
-  public static final int MSGID_FIFOCACHE_CANNOT_DETERMINE_LOCK_TIMEOUT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 11;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * FIFO-based entry cache include filters configuration attribute.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_FIFOCACHE_DESCRIPTION_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 12;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode an include filter.  This takes three arguments, which are
-   * the invalid filter string, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FIFOCACHE_CANNOT_DECODE_INCLUDE_FILTER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 13;
-
-
-
-  /**
-   * The message ID for the message that will be used if none of the include
-   * filter strings can be parsed.  This takes a single argument, which is the
-   * DN of the configuration entry.
-   */
-  public static final int MSGID_FIFOCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 14;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the include filters to use for the FIFO-based entry
-   * cache.  This takes two arguments, which are the DN of the configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_FIFOCACHE_CANNOT_DETERMINE_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 15;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * FIFO-based entry cache exclude filters configuration attribute.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_FIFOCACHE_DESCRIPTION_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 16;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode an exclude filter.  This takes three arguments, which are
-   * the invalid filter string, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FIFOCACHE_CANNOT_DECODE_EXCLUDE_FILTER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 17;
-
-
-
-  /**
-   * The message ID for the message that will be used if none of the exclude
-   * filter strings can be parsed.  This takes a single argument, which is the
-   * DN of the configuration entry.
-   */
-  public static final int MSGID_FIFOCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 18;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the exclude filters to use for the FIFO-based entry
-   * cache.  This takes two arguments, which are the DN of the configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_FIFOCACHE_CANNOT_DETERMINE_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 19;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid max memory percentage.  This takes two arguments, which are the DN
-   * of the configuration entry and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_FIFOCACHE_INVALID_MAX_MEMORY_PCT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 20;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid max entries.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_FIFOCACHE_INVALID_MAX_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 21;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid lock timeout.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_FIFOCACHE_INVALID_LOCK_TIMEOUT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 22;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid include filter.  This takes three arguments, which are the DN
-   * of the configuration entry, the invalid filter string, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FIFOCACHE_INVALID_INCLUDE_FILTER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 23;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid set of include filters.  This takes two arguments, which are the DN
-   * of the configuration entry and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_FIFOCACHE_INVALID_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 24;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid exclude filter.  This takes three arguments, which are the DN
-   * of the configuration entry, the invalid filter string, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FIFOCACHE_INVALID_EXCLUDE_FILTER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 25;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid set of exclude filters.  This takes two arguments, which are the DN
-   * of the configuration entry and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_FIFOCACHE_INVALID_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 26;
-
-
-
-  /**
-   * The message ID for the message that will be used if entry cache memory
-   * percent has been updated.  This takes two arguments, which are the new
-   * percentage of memory that may be used and the corresponding size in bytes.
-   */
-  public static final int MSGID_FIFOCACHE_UPDATED_MAX_MEMORY_PCT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 27;
-
-
-
-  /**
-   * The message ID for the message that will be used if maximum number of cache
-   * entries has been updated.  This takes a single argument, which is the new
-   * maximum number of entries.
-   */
-  public static final int MSGID_FIFOCACHE_UPDATED_MAX_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 28;
-
-
-
-  /**
-   * The message ID for the message that will be used if the cache lock timeout
-   * has been updated.  This takes a single argument, which is the new lock
-   * timeout.
-   */
-  public static final int MSGID_FIFOCACHE_UPDATED_LOCK_TIMEOUT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 29;
-
-
-
-  /**
-   * The message ID for the message that will be used if the cache include
-   * filter set has been updated.  This does not take any arguments.
-   */
-  public static final int MSGID_FIFOCACHE_UPDATED_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 30;
-
-
-
-  /**
-   * The message ID for the message that will be used if the cache exclude
-   * filter set has been updated.  This does not take any arguments.
-   */
-  public static final int MSGID_FIFOCACHE_UPDATED_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 31;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password modify
-   * extended request sequence contains an element with an invalid type.  This
-   * takes a single argument, which is a string representation of that type.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_ILLEGAL_REQUEST_ELEMENT_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 32;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password modify
-   * extended request sequence cannot be decoded for some reason.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_CANNOT_DECODE_REQUEST =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 33;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password modify
-   * extended request sequence cannot be processed because it did not contain
-   * an authorization ID and the underlying connection is not authenticated.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_NO_AUTH_OR_USERID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 34;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password modify
-   * extended request sequence cannot be processed because the server could not
-   * obtain a write lock on the user's entry.  This takes a single argument,
-   * which is the DN of the user's entry.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_CANNOT_LOCK_USER_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 35;
-
-
-
-  /**
-   * The message ID for the message that will be used if the DN used as the
-   * authorization ID for the password modify operation cannot be decoded.
-   * This takes a single argument, which is the value provided for the
-   * authorization ID.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_CANNOT_DECODE_AUTHZ_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 36;
-
-
-
-  /**
-   * The message ID for the message that will be used if the DN used as the
-   * authorization ID for the password modify operation cannot be decoded.
-   * This takes a single argument, which is the value provided for the
-   * authorization ID.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_INVALID_AUTHZID_STRING =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 37;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * retrieve the entry targeted by DN in a password modify operation.  This
-   * takes a single argument, which is the target DN.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_NO_USER_ENTRY_BY_AUTHZID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 38;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * retrieve the entry targeted by UID in a password modify operation.  This
-   * takes a single argument, which is the target UID.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_NO_DN_BY_AUTHZID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 39;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple entries
-   * matched the provided authorization ID.  This takes a single argument, which
-   * is the target UID.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_MULTIPLE_ENTRIES_BY_AUTHZID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 40;
-
-
-
-  /**
-   * The message ID for the message that will be used if the old password
-   * provided in a password modify request is invalid.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_INVALID_OLD_PASSWORD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 41;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the location of the key manager file.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_DESCRIPTION_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 43;
-
-
-
-  /**
-   * The message ID for the message that will be used if no file is specified
-   * for a file-based keystore.  This takes a single argument, which is the DN
-   * of the configuration entry.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_NO_FILE_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 44;
-
-
-
-  /**
-   * The message ID for the message that will be used if the file specified for
-   * a file-based keystore does not exist.  This takes two arguments, which are
-   * the specified path to the file and the DN of the configuration entry.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_NO_SUCH_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 45;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the path to the keystore file.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 46;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the keystore type.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_DESCRIPTION_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 47;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the keystore type.  This takes two arguments, which are
-   * the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 48;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the Java property containing the
-   * keystore PIN.  This does not take any arguments.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_DESCRIPTION_PIN_PROPERTY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 49;
-
-
-
-  /**
-   * The message ID for the message that will be used if the keystore PIN should
-   * be specified in a Java property but that property is not set.  This takes
-   * two arguments, which are the name of that property and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 50;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the Java property containing the keystore PIN.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_PROPERTY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 51;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the environment variable containing the
-   * keystore PIN.  This does not take any arguments.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_DESCRIPTION_PIN_ENVAR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 52;
-
-
-
-  /**
-   * The message ID for the message that will be used if the keystore PIN should
-   * be specified in an environment variable but that variable is not set.  This
-   * takes two arguments, which are the name of that property and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 53;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the environment variable containing the keystore PIN.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_ENVAR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 54;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the file containing the keystore PIN.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_DESCRIPTION_PIN_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 55;
-
-
-
-  /**
-   * The message ID for the message that will be used if the keystore PIN should
-   * be specified in a file but that file does not exist.  This takes two
-   * arguments, which are the name of that property and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_PIN_NO_SUCH_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 56;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to read the keystore PIN file.  This takes three arguments,
-   * which are the path to the PIN file, the DN of the configuration entry, and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 57;
-
-
-
-  /**
-   * The message ID for the message that will be used if the keystore PIN should
-   * be specified in a file but that file is empty.  This takes two arguments,
-   * which are the name of that property and the DN of the configuration entry.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_PIN_FILE_EMPTY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 58;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the path to the file containing the keystore PIN.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 59;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the keystore PIN. This does not take any
-   * arguments.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_DESCRIPTION_PIN_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 60;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the keystore PIN.  This takes two arguments, which are
-   * the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_FROM_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 60;
-
-
-
-  /**
-   * The message ID for the message that will be used if the key manager
-   * configuration entry does not provide a means of obtaining the PIN.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_NO_PIN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 61;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to load the keystore.  This takes two arguments, which are the
-   * path to the keystore file and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_CANNOT_LOAD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 62;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid keystore
-   * type is specified.  This takes three arguments, which are the provided
-   * keystore type, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_INVALID_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 63;
-
-
-
-  /**
-   * The message ID for the message that will be used if the path to the
-   * keystore file is updated.  This takes two arguments, which are the DN of
-   * the configuration entry and the new path to the keystore file.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_UPDATED_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 64;
-
-
-
-  /**
-   * The message ID for the message that will be used if the keystore type is
-   * updated.  This takes two arguments, which are the DN of the configuration
-   * entry and the new keystore type.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_UPDATED_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 65;
-
-
-
-  /**
-   * The message ID for the message that will be used if the PIN used to access
-   * the keystore is updated.  This does not take any arguments.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_UPDATED_PIN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 66;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the Java property containing the
-   * keystore PIN.  This does not take any arguments.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_DESCRIPTION_PIN_PROPERTY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 67;
-
-
-
-  /**
-   * The message ID for the message that will be used if the keystore PIN should
-   * be specified in a Java property but that property is not set.  This takes
-   * two arguments, which are the name of that property and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 68;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the Java property containing the keystore PIN.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_PROPERTY =
-            CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 69;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the environment variable containing the
-   * keystore PIN.  This does not take any arguments.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_DESCRIPTION_PIN_ENVAR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 70;
-
-
-
-  /**
-   * The message ID for the message that will be used if the keystore PIN should
-   * be specified in an environment variable but that variable is not set.  This
-   * takes two arguments, which are the name of that property and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 71;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the environment variable containing the keystore PIN.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_ENVAR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 72;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the file containing the keystore PIN.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_DESCRIPTION_PIN_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 73;
-
-
-
-  /**
-   * The message ID for the message that will be used if the keystore PIN should
-   * be specified in a file but that file does not exist.  This takes two
-   * arguments, which are the name of that property and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 74;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to read the keystore PIN file.  This takes three arguments,
-   * which are the path to the PIN file, the DN of the configuration entry, and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_PIN_FILE_CANNOT_READ =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 75;
-
-
-
-  /**
-   * The message ID for the message that will be used if the keystore PIN should
-   * be specified in a file but that file is empty.  This takes two arguments,
-   * which are the name of that property and the DN of the configuration entry.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_PIN_FILE_EMPTY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 76;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the path to the file containing the keystore PIN.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 77;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the keystore PIN. This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_DESCRIPTION_PIN_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 78;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the keystore PIN.  This takes two arguments, which are
-   * the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int
-       MSGID_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_FROM_ATTR =
-            CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 79;
-
-
-
-  /**
-   * The message ID for the message that will be used if the key manager
-   * configuration entry does not provide a means of obtaining the PIN.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_NO_PIN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 80;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to load the keystore.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_CANNOT_LOAD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 81;
-
-
-
-  /**
-   * The message ID for the message that will be used if the PIN used to access
-   * the keystore is updated.  This does not take any arguments.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_UPDATED_PIN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 82;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting create a trust factory for the file-based trust store.  This
-   * takes two arguments, which are the name of the trust store file and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_KEYMANAGER_CANNOT_CREATE_FACTORY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 83;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting create a trust factory for the PKCS#11 trust store.  This takes
-   * a single argument, which is a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_PKCS11_KEYMANAGER_CANNOT_CREATE_FACTORY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 84;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the location of the trust manager file.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_DESCRIPTION_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 85;
-
-
-
-  /**
-   * The message ID for the message that will be used if no file is specified
-   * for a file-based trust store.  This takes a single argument, which is the
-   * DN of the configuration entry.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_NO_FILE_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 86;
-
-
-
-  /**
-   * The message ID for the message that will be used if the file specified for
-   * a file-based trust store does not exist.  This takes two arguments, which
-   * are the specified path to the file and the DN of the configuration entry.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_NO_SUCH_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 87;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the path to the trust store file.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 88;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the trust store type.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_DESCRIPTION_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 89;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the trust store type.  This takes two arguments, which
-   * are the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 90;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the Java property containing the
-   * trust store PIN.  This does not take any arguments.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_DESCRIPTION_PIN_PROPERTY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 91;
-
-
-
-  /**
-   * The message ID for the message that will be used if the trust store PIN
-   * should be specified in a Java property but that property is not set.  This
-   * takes two arguments, which are the name of that property and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 92;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the Java property containing the trust store PIN.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_PROPERTY =
-            CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 93;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the environment variable containing the
-   * trust store PIN.  This does not take any arguments.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_DESCRIPTION_PIN_ENVAR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 94;
-
-
-
-  /**
-   * The message ID for the message that will be used if the trust store PIN
-   * should be specified in an environment variable but that variable is not
-   * set.  This takes two arguments, which are the name of that property and the
-   * DN of the configuration entry.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 95;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the environment variable containing the trust store
-   * PIN.  This takes two arguments, which are the DN of the configuration entry
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_ENVAR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 96;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the file containing the trust store PIN.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_DESCRIPTION_PIN_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 97;
-
-
-
-  /**
-   * The message ID for the message that will be used if the trust store PIN
-   * should be specified in a file but that file does not exist.  This takes two
-   * arguments, which are the name of that property and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 98;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to read the trust store PIN file.  This takes three arguments,
-   * which are the path to the PIN file, the DN of the configuration entry, and
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 99;
-
-
-
-  /**
-   * The message ID for the message that will be used if the trust store PIN
-   * should be specified in a file but that file is empty.  This takes two
-   * arguments, which are the name of that property and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_PIN_FILE_EMPTY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 100;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the path to the file containing the trust store PIN.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 101;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the trust store PIN. This does not take
-   * any arguments.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_DESCRIPTION_PIN_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 102;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the trust store PIN.  This takes two arguments, which
-   * are the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int
-       MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_FROM_ATTR =
-            CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 103;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to load the trust store.  This takes two arguments, which are
-   * the path to the trust store file and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_CANNOT_LOAD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 104;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting create a trust factory for the file-based trust store.  This
-   * takes two arguments, which are the name of the trust store file and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_CANNOT_CREATE_FACTORY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 105;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid trust store
-   * type is specified.  This takes three arguments, which are the provided
-   * trust store type, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_INVALID_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 106;
-
-
-
-  /**
-   * The message ID for the message that will be used if the path to the
-   * trust store file is updated.  This takes two arguments, which are the DN of
-   * the configuration entry and the new path to the trust store file.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_UPDATED_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 107;
-
-
-
-  /**
-   * The message ID for the message that will be used if the trust store type is
-   * updated.  This takes two arguments, which are the DN of the configuration
-   * entry and the new trust store type.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_UPDATED_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 108;
-
-
-
-  /**
-   * The message ID for the message that will be used if the PIN used to access
-   * the trust store is updated.  This does not take any arguments.
-   */
-  public static final int MSGID_FILE_TRUSTMANAGER_UPDATED_PIN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 109;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while attempting to read data from a client using the null security
-   * provider.  This takes a single argument, which is a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_NULL_SECURITY_PROVIDER_READ_ERROR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 110;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while attempting to write data to a client using the null security
-   * provider.  This takes a single argument, which is a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_NULL_SECURITY_PROVIDER_WRITE_ERROR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 111;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to initialize the SSL context for the TLS connection security
-   * provider.  This takes a single argument, which is a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_TLS_SECURITY_PROVIDER_CANNOT_INITIALIZE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 112;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected result is
-   * returned to the TLS connection security provider when trying to unwrap SSL
-   * data read from the client.  This takes a single argument, which is a string
-   * representation of the unwrap result that was returned.
-   */
-  public static final int MSGID_TLS_SECURITY_PROVIDER_UNEXPECTED_UNWRAP_STATUS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 113;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error is
-   * encountered while attempting to read data from the client using the TLS
-   * connection security provider.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_TLS_SECURITY_PROVIDER_READ_ERROR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 114;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to write
-   * data to the client cannot be processed because outstanding SSL negotiation
-   * needs to read data from the client and there is none available.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_TLS_SECURITY_PROVIDER_WRITE_NEEDS_UNWRAP =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 115;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected result is
-   * returned to the TLS connection security provider when trying to wrap data
-   * to write to the client.  This takes a single argument, which is a string
-   * representation of the wrap result that was returned.
-   */
-  public static final int MSGID_TLS_SECURITY_PROVIDER_UNEXPECTED_WRAP_STATUS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 116;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error is
-   * encountered while attempting to write data to the client using the TLS
-   * connection security provider.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_TLS_SECURITY_PROVIDER_WRITE_ERROR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 117;
-
-
-
-  /**
-   * The message ID for the message that will be used if the subject equals DN
-   * certificate mapper is asked to map a null or empty certificate chain.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_SEDCM_NO_PEER_CERTIFICATE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 118;
-
-
-
-  /**
-   * The message ID for the message that will be used if the subject equals DN
-   * certificate mapper is asked to map a certificate chain in which the peer
-   * certificate is not an X.509 certificate.  This takes a single argument,
-   * which is the certificate type for the peer certificate.
-   */
-  public static final int MSGID_SEDCM_PEER_CERT_NOT_X509 =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 119;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * the subject equals DN certificate mapper is trying to decode the peer
-   * certificate's subject as a DN.  This takes two arguments, which are a
-   * string representation of the peer's subject and a message that explains the
-   * reason it could not be decoded.
-   */
-  public static final int MSGID_SEDCM_CANNOT_DECODE_SUBJECT_AS_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 120;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * the subject equals DN certificate mapper is trying to retrieve the entry
-   * with a DN equal to the subject DN.  This takes two arguments, which are a
-   * string representation of the peer's subject DN and a message that explains
-   * the reason the entry could not be retrieved.
-   */
-  public static final int MSGID_SEDCM_CANNOT_GET_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 121;
-
-
-
-  /**
-   * The message ID for the message that will be used if the subject equals DN
-   * certificate mapper is asked to map a certificate when no user exists in the
-   * directory with a DN equal to the certificate subject.  This takes a single
-   * argument, which is the subject DN from the peer certificate.
-   */
-  public static final int MSGID_SEDCM_NO_USER_FOR_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 122;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a SASL EXTERNAL bind when no client connection is available.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_SASLEXTERNAL_NO_CLIENT_CONNECTION =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 123;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a SASL EXTERNAL bind using a client connection that does not have a
-   * security provider.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLEXTERNAL_NO_SECURITY_PROVIDER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 124;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a SASL EXTERNAL bind on a client connection that is using a
-   * security provider other than the TLS security provider.  This takes a
-   * single argument, which is the name of the security provider in use.
-   */
-  public static final int MSGID_SASLEXTERNAL_CLIENT_NOT_USING_TLS_PROVIDER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 125;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a SASL EXTERNAL bind over a client connection that did not present
-   * a certificate chain.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLEXTERNAL_NO_CLIENT_CERT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 126;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a SASL EXTERNAL bind but no mapping could be established between
-   * the client certificate chain and a user in the directory.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_SASLEXTERNAL_NO_MAPPING =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 127;
-
-
-
-  /**
-   * The message ID for the message that will be used if a client attempts to
-   * use the StartTLS extended operation but the client connection is not
-   * available.  This does not take any arguments.
-   */
-  public static final int MSGID_STARTTLS_NO_CLIENT_CONNECTION =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 128;
-
-
-
-  /**
-   * The message ID for the message that will be used if a client attempts to
-   * use the StartTLS extended operation but the type of client connection used
-   * does not allow StartTLS.  This does not take any arguments.
-   */
-  public static final int MSGID_STARTTLS_NOT_TLS_CAPABLE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 129;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to enable StartTLS on a client connection.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_STARTTLS_ERROR_ON_ENABLE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 130;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to configure client certificate validation.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_SASLEXTERNAL_DESCRIPTION_VALIDATION_POLICY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 131;
-
-
-
-  /**
-   * The message ID for the message that will be used if the attribute used to
-   * configure client certificate validation policy has an invalid value.  This
-   * takes two arguments, which are the DN of the configuration entry and the
-   * invalid value.
-   */
-  public static final int MSGID_SASLEXTERNAL_INVALID_VALIDATION_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 132;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the client certificate validation policy.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLEXTERNAL_CANNOT_GET_VALIDATION_POLICY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 133;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the attribute holding certificates in user
-   * entries.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLEXTERNAL_DESCRIPTION_CERTIFICATE_ATTRIBUTE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 134;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the attribute to use for certificate validation.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLEXTERNAL_CANNOT_GET_CERT_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 135;
-
-
-
-  /**
-   * The message ID for the message that will be used if the certificate
-   * attribute is not defined in the server schema.  This takes two arguments,
-   * which are the name of the certificate attribute and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_SASLEXTERNAL_UNKNOWN_CERT_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 136;
-
-
-
-  /**
-   * The message ID for the message that will be used if certificate validation
-   * is required but the user entry does not contain any certificates.  This
-   * takes a single argument, which is the DN of the user's entry.
-   */
-  public static final int MSGID_SASLEXTERNAL_NO_CERT_IN_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 137;
-
-
-
-  /**
-   * The message ID for the message that will be used if certificate validation
-   * is required but the user entry does not contain a certificate that matches
-   * the peer certificate.  This takes a single argument, which is the DN of the
-   * user's entry.
-   */
-  public static final int MSGID_SASLEXTERNAL_PEER_CERT_NOT_FOUND =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 138;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to validate the peer certificate against a certificate in the
-   * user's entry.  This takes two arguments, which are the DN of the user's
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLEXTERNAL_CANNOT_VALIDATE_CERT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 139;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the peer
-   * certificate validation policy has been updated.  This takes two arguments,
-   * which are the DN of the configuration entry and the new validation policy.
-   */
-  public static final int MSGID_SASLEXTERNAL_UPDATED_VALIDATION_POLICY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 140;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * certificate attribute for peer validation has been updated.  This takes two
-   * arguments, which are the DN of the configuration entry and the new
-   * attribute type name or OID.
-   */
-  public static final int MSGID_SASLEXTERNAL_UPDATED_CERT_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 141;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the username attribute used to locate entries
-   * when authenticating via SASL PLAIN.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLPLAIN_DESCRIPTION_USERNAME_ATTRIBUTE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 142;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the attribute to use for username lookups.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLPLAIN_CANNOT_GET_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 143;
-
-
-
-  /**
-   * The message ID for the message that will be used if the username attribute
-   * is not defined in the server schema.  This takes two arguments, which are
-   * the name of the username attribute and the DN of the configuration entry.
-   */
-  public static final int MSGID_SASLPLAIN_UNKNOWN_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 144;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the user base DN used to locate entries when
-   * authenticating via SASL PLAIN.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLPLAIN_DESCRIPTION_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 145;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the base DN to use for username lookups.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLPLAIN_CANNOT_GET_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 146;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL PLAIN bind
-   * request does not include any SASL credentials.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SASLPLAIN_NO_SASL_CREDENTIALS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 147;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL PLAIN bind
-   * request does not include null characters in the SASL credentials.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_SASLPLAIN_NO_NULLS_IN_CREDENTIALS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 148;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL PLAIN bind
-   * request does not include a second null character to separate the authcID
-   * from the password.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLPLAIN_NO_SECOND_NULL =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 149;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL PLAIN bind
-   * request included a zero-length authcID.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLPLAIN_ZERO_LENGTH_AUTHCID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 150;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL PLAIN bind
-   * request included a zero-length password.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLPLAIN_ZERO_LENGTH_PASSWORD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 151;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL PLAIN bind
-   * request included an authentication ID that started with "dn:" but the rest
-   * of the value couldn't be decoded as a DN.  This takes two arguments, which
-   * are the provided authentication ID and a message with information about the
-   * DN decoding failure.
-   */
-  public static final int MSGID_SASLPLAIN_CANNOT_DECODE_AUTHCID_AS_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 152;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL PLAIN bind
-   * request included an authentication ID of "dn:" (i.e., a zero-length DN).
-   * This does not take any arguments.
-   */
-  public static final int MSGID_SASLPLAIN_AUTHCID_IS_NULL_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 153;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve an entry by DN for a SASL PLAIN bind request.  This
-   * takes two arguments, which are the DN of the entry and a message with
-   * information about the reason it could not be retrieved.
-   */
-  public static final int MSGID_SASLPLAIN_CANNOT_GET_ENTRY_BY_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 154;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to perform an internal search to resolve an authentication ID to
-   * a user entry.  This takes three arguments, which are the authentication ID,
-   * a string representation of the result code, and the error message from the
-   * search operation.
-   */
-  public static final int MSGID_SASLPLAIN_CANNOT_PERFORM_INTERNAL_SEARCH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 155;
-
-
-
-  /**
-   * The message ID for the message that will be used if an internal search
-   * to resolve the provided username matches multiple entries.  This takes a
-   * single argument, which is the authentication ID.
-   */
-  public static final int MSGID_SASLPLAIN_MULTIPLE_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 156;
-
-
-
-  /**
-   * The message ID for the message that will be used if an internal search
-   * to resolve the provided username does not match any entries.  This takes a
-   * single argument, which is the authentication ID.
-   */
-  public static final int MSGID_SASLPLAIN_NO_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 157;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user entry does not
-   * contain a password attribute.  This takes a single argument, which is the
-   * name or OID of the password attribute.
-   */
-  public static final int MSGID_SASLPLAIN_NO_PW_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 158;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user entry has a
-   * password with an unrecognized storage scheme.  This takes two arguments,
-   * which are the DN of the user and the name of the unknown storage scheme.
-   */
-  public static final int MSGID_SASLPLAIN_UNKNOWN_STORAGE_SCHEME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 159;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL PLAIN
-   * authentication fails because the user provided an invalid password.
-   */
-  public static final int MSGID_SASLPLAIN_INVALID_PASSWORD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 160;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * username attribute for authcID/authzID lookups has been updated.  This
-   * takes two arguments, which are the DN of the configuration entry and the
-   * new attribute type name or OID.
-   */
-  public static final int MSGID_SASLPLAIN_UPDATED_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 161;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the user
-   * base DN for authcID/authzID lookups has been updated.  This takes two
-   * arguments, which are the DN of the configuration entry and the new base DN.
-   */
-  public static final int MSGID_SASLPLAIN_UPDATED_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 162;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * obtain a read lock on an entry targeted by a SASL PLAIN bind request.  This
-   * takes a single argument, which is the DN of the target entry.
-   */
-  public static final int MSGID_SASLPLAIN_CANNOT_LOCK_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 163;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * obtain a read lock on an entry with a DN equal to the certificate subject.
-   * This takes a single argument, which is the DN of the target entry.
-   */
-  public static final int MSGID_SEDCM_CANNOT_LOCK_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 164;
-
-
-
-  /**
-   * The message ID for the message that will be written to the error log if a
-   * client binds using SASL ANONYMOUS and provides trace information in the
-   * request.  This takes three arguments, which are the connection ID for the
-   * client connection, the operation ID for the bind request, and the trace
-   * information from the request.
-   */
-  public static final int MSGID_SASLANONYMOUS_TRACE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 165;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * obtain a message digest for generating MD5 hashes.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_GET_MESSAGE_DIGEST =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 166;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the username attribute used to locate entries
-   * when authenticating via SASL CRAM-MD5.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLCRAMMD5_DESCRIPTION_USERNAME_ATTRIBUTE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 167;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the attribute to use for username lookups.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_GET_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 168;
-
-
-
-  /**
-   * The message ID for the message that will be used if the username attribute
-   * is not defined in the server schema.  This takes two arguments, which are
-   * the name of the username attribute and the DN of the configuration entry.
-   */
-  public static final int MSGID_SASLCRAMMD5_UNKNOWN_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 169;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the user base DN used to locate entries when
-   * authenticating via SASL CRAM-MD5.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLCRAMMD5_DESCRIPTION_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 170;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the base DN to use for username lookups.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_GET_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 171;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL CRAM-MD5
-   * authentication fails because there is no stored challenge to use in
-   * processing a second-stage request.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLCRAMMD5_NO_STORED_CHALLENGE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 172;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL CRAM-MD5
-   * authentication fails because the stored challenge is an invalid type of
-   * object.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLCRAMMD5_INVALID_STORED_CHALLENGE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 173;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL CRAM-MD5
-   * authentication fails because the SASL credentials do not contain a space to
-   * separate the username from the password digest.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SASLCRAMMD5_NO_SPACE_IN_CREDENTIALS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 174;
-
-
-
-  /**
-   * The message ID for the message that will be used if the digest in the SASL
-   * CRAM-MD5 credentials has an invalid length.  This takes two arguments,
-   * which are the length of the provided credentials and the expected length.
-   */
-  public static final int MSGID_SASLCRAMMD5_INVALID_DIGEST_LENGTH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 175;
-
-
-
-  /**
-   * The message ID for the message that will be used if the digest in the SASL
-   * CRAM-MD5 credentials is not comprised entirely of hex characters.  This
-   * takes a single argument, which is an explanation of the problem found.
-   */
-  public static final int MSGID_SASLCRAMMD5_INVALID_DIGEST_CONTENT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 176;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL CRAM-MD5 bind
-   * request included a username that started with "dn:" but the rest of the
-   * value couldn't be decoded as a DN.  This takes two arguments, which are the
-   * are the provided username and a message with information about the DN
-   * decoding failure.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_DECODE_USERNAME_AS_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 177;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL CRAM-MD5 bind
-   * request included a username of "dn:" (i.e., a zero-length DN).  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_SASLCRAMMD5_USERNAME_IS_NULL_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 178;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * obtain a read lock on an entry targeted by a SASL CRAM-MD5 bind request.
-   * This takes a single argument, which is the DN of the target entry.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_LOCK_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 179;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve an entry by DN for a SASL CRAM-MD5 bind request.
-   * This takes two arguments, which are the DN of the entry and a message with
-   * information about the reason it could not be retrieved.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_GET_ENTRY_BY_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 180;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL CRAM-MD5 bind
-   * request included a zero-length username.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLCRAMMD5_ZERO_LENGTH_USERNAME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 181;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to perform an internal search to resolve a username to a user
-   * entry.  This takes three arguments, which are the username, a string
-   * representation of the result code, and the error message from the search
-   * operation.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_PERFORM_INTERNAL_SEARCH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 182;
-
-
-
-  /**
-   * The message ID for the message that will be used if an internal search
-   * to resolve the provided username matches multiple entries.  This takes a
-   * single argument, which is the username.
-   */
-  public static final int MSGID_SASLCRAMMD5_MULTIPLE_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 183;
-
-
-
-  /**
-   * The message ID for the message that will be used if an internal search
-   * to resolve the provided username does not match any entries.  This takes a
-   * single argument, which is the username.
-   */
-  public static final int MSGID_SASLCRAMMD5_NO_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 184;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user entry does not
-   * contain a password attribute.  This takes a single argument, which is the
-   * name or OID of the password attribute.
-   */
-  public static final int MSGID_SASLCRAMMD5_NO_PW_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 185;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user entry has a
-   * password with an unrecognized storage scheme.  This takes two arguments,
-   * which are the DN of the user and the name of the unknown storage scheme.
-   */
-  public static final int MSGID_SASLCRAMMD5_UNKNOWN_STORAGE_SCHEME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 186;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to obtain the clear-text version of a password that is encoded with
-   * what should be a reversible storage scheme.  This takes three arguments,
-   * which are the DN of the user, the name of the storage scheme, and a message
-   * explaining the problem.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_GET_CLEAR_PASSWORD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 187;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL CRAM-MD5
-   * authentication fails because the user provided an invalid password.
-   */
-  public static final int MSGID_SASLCRAMMD5_INVALID_PASSWORD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 188;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL CRAM-MD5
-   * authentication fails because the user entry does not have any passwords
-   * stored in a reversible form.  This takes a single argument, which is the
-   * DN of the user.
-   */
-  public static final int MSGID_SASLCRAMMD5_NO_REVERSIBLE_PASSWORDS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 189;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * attribute for username lookups has been updated.  This takes two arguments,
-   * which are the DN of the configuration entry and the new attribute type name
-   * or OID.
-   */
-  public static final int MSGID_SASLCRAMMD5_UPDATED_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 190;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the base
-   * DN for username lookups has been updated.  This takes two arguments, which
-   * are the DN of the configuration entry and the new base DN.
-   */
-  public static final int MSGID_SASLCRAMMD5_UPDATED_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 191;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * obtain a message digest for generating MD5 hashes.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_GET_MESSAGE_DIGEST =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 192;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the username attribute used to locate entries
-   * when authenticating via SASL DIGEST-MD5.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_DESCRIPTION_USERNAME_ATTRIBUTE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 193;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the attribute to use for username lookups.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_GET_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 194;
-
-
-
-  /**
-   * The message ID for the message that will be used if the username attribute
-   * is not defined in the server schema.  This takes two arguments, which are
-   * the name of the username attribute and the DN of the configuration entry.
-   */
-  public static final int MSGID_SASLDIGESTMD5_UNKNOWN_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 195;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the user base DN used to locate entries when
-   * authenticating via SASL DIGEST-MD5.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_DESCRIPTION_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 196;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the base DN to use for username lookups.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_GET_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 197;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the realm for DIGEST-MD5 authentication.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_DESCRIPTION_REALM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 198;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the realm to advertise for DIGEST-MD5 authentication.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_GET_REALM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 199;
-
-
-
-  /**
-   * The message ID for the message that will be used if the initial challenge
-   * generated by the server is not less than 2048 bytes.  This takes a single
-   * argument, which is the size of the generated challenge.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CHALLENGE_TOO_LONG =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 200;
-
-
-
-  /**
-   * The message ID for the message that will be used if the bind request
-   * did not contain any credentials when the client connection already had
-   * DIGEST-MD5 state information, indicating that it was not an initial
-   * authentication.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_CREDENTIALS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 201;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client provides
-   * SASL credentials but the stored SASL state information isn't appropriate
-   * for DIGEST-MD5 authentication.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_STORED_STATE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 202;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client credentials
-   * cannot be parsed as a string using the ISO-8859-1 character set.  This
-   * takes two arguments, which are the name of the character set used and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_PARSE_ISO_CREDENTIALS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 203;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client credentials
-   * cannot be parsed as a string using the UTF-8 character set.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_PARSE_UTF8_CREDENTIALS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 204;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client credentials
-   * contain a token with no equal sign.  This takes two arguments, which are
-   * the invalid token and the position at which it begins in the credential
-   * string.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 205;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client credentials
-   * specify a character set of anything other than UTF-8.  This takes a single
-   * argument, which is the character set specified by the client.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_CHARSET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 206;
-
-
-
-  /**
-   * The message ID for the message that will be used if the realm provided by
-   * the client is expected to be a DN but cannot be parsed as one.  This takes
-   * two arguments, which are the provided realm value and a message explaining
-   * the problem that was encountered.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_DECODE_REALM_AS_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 207;
-
-
-
-  /**
-   * The message ID for the message that will be used if the realm provided by
-   * the client is not what was expected.  This takes a single argument, which
-   * is the realm that was provided.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_REALM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 208;
-
-
-
-  /**
-   * The message ID for the message that will be used if the nonce provided by
-   * the client does not match the nonce supplied by the server.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_NONCE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 209;
-
-
-
-  /**
-   * The message ID for the message that will be used if the nonce count
-   * provided by the client cannot be decoded as an integer.  This takes a
-   * single argument, which is the provided nonce count.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_DECODE_NONCE_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 210;
-
-
-
-  /**
-   * The message ID for the message that will be used if the nonce count
-   * stored by the server for the client connection cannot be decoded as an
-   * integer.  This takes a single argument, which is a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_DECODE_STORED_NONCE_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 211;
-
-
-
-  /**
-   * The message ID for the message that will be used if the nonce count
-   * provided by the client is different from what was expected.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_NONCE_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 212;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client requests the
-   * unsupported integrity QoP.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INTEGRITY_NOT_SUPPORTED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 213;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client requests the
-   * unsupported confidentiality QoP.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CONFIDENTIALITY_NOT_SUPPORTED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 214;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client requested an
-   * unsupported QoP mechanism.  This takes a single argument, which is the QoP
-   * value requested by the client.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_QOP =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 215;
-
-
-
-  /**
-   * The message ID for the message that will be used if the digest included
-   * in the client credentials could not be parsed.  This takes a single
-   * argument, which is a string representation of the stack trace that was
-   * caught.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_PARSE_RESPONSE_DIGEST =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 216;
-
-
-
-  /**
-   * The message ID for the message that will be used if client credentials
-   * included an invalid token.  This takes a single argument, which is the
-   * name of the invalid token.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_RESPONSE_TOKEN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 217;
-
-
-
-  /**
-   * The message ID for the message that will be used if client credentials
-   * did not include the required "username" token.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_USERNAME_IN_RESPONSE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 218;
-
-
-
-  /**
-   * The message ID for the message that will be used if client credentials
-   * did not include the required "nonce" token.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_NONCE_IN_RESPONSE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 219;
-
-
-
-  /**
-   * The message ID for the message that will be used if client credentials
-   * did not include the required "cnonce" token.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_CNONCE_IN_RESPONSE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 220;
-
-
-
-  /**
-   * The message ID for the message that will be used if client credentials
-   * did not include the required "nc" token.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_NONCE_COUNT_IN_RESPONSE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 221;
-
-
-
-  /**
-   * The message ID for the message that will be used if client credentials
-   * did not include the required "digest-uri" token.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_DIGEST_URI_IN_RESPONSE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 222;
-
-
-
-  /**
-   * The message ID for the message that will be used if client credentials
-   * did not include the required "response" token.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_DIGEST_IN_RESPONSE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 223;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL DIGEST-MD5 bind
-   * request included a username that started with "dn:" but the rest of the
-   * value couldn't be decoded as a DN.  This takes two arguments, which are the
-   * are the provided username and a message with information about the DN
-   * decoding failure.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_DECODE_USERNAME_AS_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 224;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL DIGEST-MD5 bind
-   * request included a username of "dn:" (i.e., a zero-length DN).  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_USERNAME_IS_NULL_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 225;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * obtain a read lock on an entry targeted by a SASL DIGEST-MD5 bind request.
-   * This takes a single argument, which is the DN of the target entry.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_LOCK_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 226;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve an entry by DN for a SASL DIGEST-MD5 bind request.
-   * This takes two arguments, which are the DN of the entry and a message with
-   * information about the reason it could not be retrieved.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_GET_ENTRY_BY_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 227;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL DIGEST-MD5 bind
-   * request included a zero-length username.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_ZERO_LENGTH_USERNAME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 228;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to perform an internal search to resolve a username to a user
-   * entry.  This takes three arguments, which are the username, a string
-   * representation of the result code, and the error message from the search
-   * operation.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_PERFORM_INTERNAL_SEARCH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 229;
-
-
-
-  /**
-   * The message ID for the message that will be used if an internal search
-   * to resolve the provided username matches multiple entries.  This takes a
-   * single argument, which is the username.
-   */
-  public static final int MSGID_SASLDIGESTMD5_MULTIPLE_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 230;
-
-
-
-  /**
-   * The message ID for the message that will be used if an internal search
-   * to resolve the provided username does not match any entries.  This takes a
-   * single argument, which is the username.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 231;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user entry does not
-   * contain a password attribute.  This takes a single argument, which is the
-   * name or OID of the password attribute.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_PW_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 232;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user entry has a
-   * password with an unrecognized storage scheme.  This takes two arguments,
-   * which are the DN of the user and the name of the unknown storage scheme.
-   */
-  public static final int MSGID_SASLDIGESTMD5_UNKNOWN_STORAGE_SCHEME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 233;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to obtain the clear-text version of a password that is encoded with
-   * what should be a reversible storage scheme.  This takes three arguments,
-   * which are the DN of the user, the name of the storage scheme, and a message
-   * explaining the problem.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_GET_CLEAR_PASSWORD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 234;
-
-
-
-  /**
-   * The message ID for the message that will be used the provided DIGEST-MD5
-   * credentials are invalid for the associated user account.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_CREDENTIALS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 235;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL DIGEST-MD5
-   * authentication fails because the user entry does not have any passwords
-   * stored in a reversible form.  This takes a single argument, which is the
-   * DN of the user.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_REVERSIBLE_PASSWORDS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 236;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to generate the DIGEST-MD5 response on the server to compare with
-   * the value provided by the client.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_GENERATE_RESPONSE_DIGEST =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 237;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to generate the DIGEST-MD5 response auth digest.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_SASLDIGESTMD5_CANNOT_GENERATE_RESPONSE_AUTH_DIGEST =
-            CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 238;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client credentials
-   * include a quoted token value in which the closing quote is not followed by
-   * either a comma or the end of the credentials string.  This takes a single
-   * argument, which is the position of the invalid quotation mark.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_CLOSING_QUOTE_POS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 239;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * attribute for username lookups has been updated.  This takes two arguments,
-   * which are the DN of the configuration entry and the new attribute type name
-   * or OID.
-   */
-  public static final int MSGID_SASLDIGESTMD5_UPDATED_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 240;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the base
-   * DN for username lookups has been updated.  This takes two arguments, which
-   * are the DN of the configuration entry and the new base DN.
-   */
-  public static final int MSGID_SASLDIGESTMD5_UPDATED_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 241;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the realm
-   * for DIGEST-MD5 authentication has been updated with a new value.  This
-   * takes two arguments, which are the DN of the configuration entry and the
-   * new realm.
-   */
-  public static final int MSGID_SASLDIGESTMD5_UPDATED_NEW_REALM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 242;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the realm
-   * for DIGEST-MD5 authentication has been updated to have no value.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_SASLDIGESTMD5_UPDATED_NO_REALM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 243;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the username attribute used to locate entries
-   * when authenticating via SASL GSSAPI.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLGSSAPI_DESCRIPTION_USERNAME_ATTRIBUTE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 244;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the attribute to use for username lookups.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_GET_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 245;
-
-
-
-  /**
-   * The message ID for the message that will be used if the username attribute
-   * is not defined in the server schema.  This takes two arguments, which are
-   * the name of the username attribute and the DN of the configuration entry.
-   */
-  public static final int MSGID_SASLGSSAPI_UNKNOWN_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 246;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the user base DN used to locate entries when
-   * authenticating via SASL GSSAPI.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLGSSAPI_DESCRIPTION_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 247;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the base DN to use for username lookups.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_GET_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 248;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the server FQDN used when authenticating via SASL
-   * GSSAPI.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLGSSAPI_DESCRIPTION_SERVER_FQDN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 249;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the server FQDN.  This takes two arguments, which are
-   * the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_GET_SERVER_FQDN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 250;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * attribute for username lookups has been updated.  This takes two arguments,
-   * which are the DN of the configuration entry and the new attribute type name
-   * or OID.
-   */
-  public static final int MSGID_SASLGSSAPI_UPDATED_USERNAME_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 251;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the base
-   * DN for username lookups has been updated.  This takes two arguments, which
-   * are the DN of the configuration entry and the new base DN.
-   */
-  public static final int MSGID_SASLGSSAPI_UPDATED_USER_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 252;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * fully-qualified domain name of the server used for GSSAPI authentication
-   * has been updated with a new value.  This takes two arguments, which are the
-   * DN of the configuration entry and the new FQDN.
-   */
-  public static final int MSGID_SASLGSSAPI_UPDATED_NEW_SERVER_FQDN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 253;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the FQDN
-   * for GSSAPI authentication has been updated to have no value.  This
-   * takes a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_SASLGSSAPI_UPDATED_NO_SERVER_FQDN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 254;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an
-   * unexpected callback has been provided to the SASL server during GSSAPI
-   * authentication.  This takes a single argument, which is a string
-   * representation of the unexpected callback.
-   */
-  public static final int MSGID_SASLGSSAPI_UNEXPECTED_CALLBACK =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 255;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the address of the KDC to use when authenticating
-   * via SASL GSSAPI.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLGSSAPI_DESCRIPTION_KDC_ADDRESS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 256;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the address of the KDC.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_GET_KDC_ADDRESS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 257;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the default realm to use when authenticating via
-   * SASL GSSAPI.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLGSSAPI_DESCRIPTION_REALM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 258;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the default realm for GSSAPI authentication.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_GET_REALM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 259;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * process a GSSAPI bind request when no client connection is associated with
-   * the bind request.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLGSSAPI_NO_CLIENT_CONNECTION =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 260;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to create the SASL server instance to use when processing a
-   * GSSAPI bind.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_CREATE_SASL_SERVER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 261;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to evaluate the client's GSSAPI challenge response.  This takes
-   * a single argument, which is a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_EVALUATE_RESPONSE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 262;
-
-
-
-  /**
-   * The message ID for the message that will be used if the GSSAPI
-   * authentication completes but there is no internal authorization ID that
-   * can be used to map the authenticating user to a Directory Server user.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_SASLGSSAPI_NO_AUTHZ_ID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 263;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to perform an internal search to map the GSSAPI authorization ID
-   * to a Directory Server user.  This takes three arguments, which are the
-   * authorization ID, the result code, and the error message from the internal
-   * search failure.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_PERFORM_INTERNAL_SEARCH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 264;
-
-
-
-  /**
-   * The message ID for the message that will be used if the GSSAPI
-   * authorization ID appears to map to more than one user.  This takes a
-   * single argument, which is the authorization ID.
-   */
-  public static final int MSGID_SASLGSSAPI_MULTIPLE_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 265;
-
-
-
-  /**
-   * The message ID for the message that will be used if the GSSAPI
-   * authorization ID cannot be mapped to any users in the Directory Server.
-   * This takes a single argument, which is the authorization ID.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_MAP_AUTHZID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 266;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the KDC
-   * address used for GSSAPI authentication has been updated with a new value.
-   * This takes two arguments, which are the DN of the configuration entry and
-   * the new KDC address.
-   */
-  public static final int MSGID_SASLGSSAPI_UPDATED_KDC =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 267;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the KDC
-   * address used for GSSAPI authentication has been unset as a system property
-   * and therefore the underlying OS config will be used.  This takes a single
-   * argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_SASLGSSAPI_UNSET_KDC =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 268;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * default realm for GSSAPI authentication has been updated with a new value.
-   * This takes two arguments, which are the DN of the configuration entry and
-   * the new realm.
-   */
-  public static final int MSGID_SASLGSSAPI_UPDATED_REALM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 269;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * default realm used for GSSAPI authentication has been unset as a system
-   * property and therefore the underlying OS config will be used.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_SASLGSSAPI_UNSET_REALM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 270;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a JAAS login context for GSSAPI authentication.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_CREATE_LOGIN_CONTEXT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 271;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to perform server-side authentication needed for processing a GSSAPI
-   * bind request.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_AUTHENTICATE_SERVER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 272;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the path to the Kerberos keytab file.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_SASLGSSAPI_DESCRIPTION_KEYTAB_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 273;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine the path to the keytab file to use for GSSAPI
-   * authentication.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_GET_KEYTAB_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 274;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to write a temporary JAAS configuration file for use when processing
-   * GSSAPI authentication.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 275;
-
-
-
-  /**
-   * The message ID for the message that will be used if the GSSAPI
-   * authorization ID is different from the authentication ID.  This takes
-   * two arguments, which are the authentication ID and the authorization ID.
-   */
-  public static final int MSGID_SASLGSSAPI_DIFFERENT_AUTHID_AND_AUTHZID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 276;
-
-
-
-  /**
-   * The message ID for the message that will be used if a "Who Am I?" request
-   * includes the proxied authorization control and the client doesn't have
-   * permission to use it.  This does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_WHOAMI_PROXYAUTH_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 277;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * soft reference entry cache lock timeout configuration attribute.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_SOFTREFCACHE_DESCRIPTION_LOCK_TIMEOUT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 278;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the lock timeout to use for the soft reference entry
-   * cache.  This takes three arguments, which are the DN of the configuration
-   * entry, a string representation of the exception that was caught, and the
-   * default lock timeout that will be used.
-   */
-  public static final int MSGID_SOFTREFCACHE_CANNOT_DETERMINE_LOCK_TIMEOUT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 279;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * soft reference entry cache include filters configuration attribute.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_SOFTREFCACHE_DESCRIPTION_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 280;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode an include filter.  This takes three arguments, which are
-   * the invalid filter string, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SOFTREFCACHE_CANNOT_DECODE_INCLUDE_FILTER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 281;
-
-
-
-  /**
-   * The message ID for the message that will be used if none of the include
-   * filter strings can be parsed.  This takes a single argument, which is the
-   * DN of the configuration entry.
-   */
-  public static final int MSGID_SOFTREFCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 282;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the include filters to use for the soft reference entry
-   * cache.  This takes two arguments, which are the DN of the configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SOFTREFCACHE_CANNOT_DETERMINE_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 283;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * soft reference entry cache exclude filters configuration attribute.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_SOFTREFCACHE_DESCRIPTION_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 284;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode an exclude filter.  This takes three arguments, which are
-   * the invalid filter string, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SOFTREFCACHE_CANNOT_DECODE_EXCLUDE_FILTER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 285;
-
-
-
-  /**
-   * The message ID for the message that will be used if none of the exclude
-   * filter strings can be parsed.  This takes a single argument, which is the
-   * DN of the configuration entry.
-   */
-  public static final int MSGID_SOFTREFCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 286;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the exclude filters to use for the soft reference entry
-   * cache.  This takes two arguments, which are the DN of the configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SOFTREFCACHE_CANNOT_DETERMINE_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 287;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid lock timeout.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_SOFTREFCACHE_INVALID_LOCK_TIMEOUT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 288;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid include filter.  This takes three arguments, which are the DN
-   * of the configuration entry, the invalid filter string, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SOFTREFCACHE_INVALID_INCLUDE_FILTER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 289;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid set of include filters.  This takes two arguments, which are the DN
-   * of the configuration entry and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_SOFTREFCACHE_INVALID_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 290;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid exclude filter.  This takes three arguments, which are the DN
-   * of the configuration entry, the invalid filter string, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SOFTREFCACHE_INVALID_EXCLUDE_FILTER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 291;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested an
-   * invalid set of exclude filters.  This takes two arguments, which are the DN
-   * of the configuration entry and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_SOFTREFCACHE_INVALID_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 292;
-
-
-
-  /**
-   * The message ID for the message that will be used if the cache lock timeout
-   * has been updated.  This takes a single argument, which is the new lock
-   * timeout.
-   */
-  public static final int MSGID_SOFTREFCACHE_UPDATED_LOCK_TIMEOUT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 293;
-
-
-
-  /**
-   * The message ID for the message that will be used if the cache include
-   * filter set has been updated.  This does not take any arguments.
-   */
-  public static final int MSGID_SOFTREFCACHE_UPDATED_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 294;
-
-
-
-  /**
-   * The message ID for the message that will be used if the cache exclude
-   * filter set has been updated.  This does not take any arguments.
-   */
-  public static final int MSGID_SOFTREFCACHE_UPDATED_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 295;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that specifies which attributes to use when
-   * matching ID strings to users.  This does not take any arguments.
-   */
-  public static final int MSGID_EXACTMAP_DESCRIPTION_MATCH_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 298;
-
-
-
-  /**
-   * The message ID for the message that will be used if there were no values
-   * provided for the match attribute.  This takes a single argument, which is
-   * the DN of the configuration entry.
-   */
-  public static final int MSGID_EXACTMAP_NO_MATCH_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 299;
-
-
-
-  /**
-   * The message ID for the message that will be used if any of the match
-   * attributes is not defined in the server schema.  This takes two arguments,
-   * which are the DN of the configuration entry and the value of the provided
-   * attribute.
-   */
-  public static final int MSGID_EXACTMAP_UNKNOWN_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 300;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine the set of match attributes.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_EXACTMAP_CANNOT_DETERMINE_MATCH_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 301;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that specifies the search bases to use when
-   * matching ID strings to users.  This does not take any arguments.
-   */
-  public static final int MSGID_EXACTMAP_DESCRIPTION_SEARCH_BASE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 302;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine the set of search bases.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_EXACTMAP_CANNOT_DETERMINE_MATCH_BASE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 303;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the set
-   * of match attributes has been updated.  This takes a single argument, which
-   * is the DN of the configuration entry.
-   */
-  public static final int MSGID_EXACTMAP_UPDATED_MATCH_ATTRS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 304;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the set
-   * of search bases has been updated.  This takes a single argument, which is
-   * the DN of the configuration entry.
-   */
-  public static final int MSGID_EXACTMAP_UPDATED_MATCH_BASES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 305;
-
-
-
-  /**
-   * The message ID for the message that will be used if the search to map a
-   * user returned multiple entries.  This takes a single argument, which is the
-   * provided ID string.
-   */
-  public static final int MSGID_EXACTMAP_MULTIPLE_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 306;
-
-
-
-  /**
-   * The message ID for the message that will be used if the search to map a
-   * user could not be processed efficiently.  This two arguments, which are the
-   * provided ID string and the error message from the internal search.
-   */
-  public static final int MSGID_EXACTMAP_INEFFICIENT_SEARCH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 307;
-
-
-
-  /**
-   * The message ID for the message that will be used if the search to map a
-   * user could failed for some reason.  This two arguments, which are the
-   * provided ID string and the error message from the internal search.
-   */
-  public static final int MSGID_EXACTMAP_SEARCH_FAILED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 308;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the DN of the configuration entry that defines
-   * the identity mapper to use in conjunction with the CRAM-MD5 SASL mechanism.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_SASLCRAMMD5_DESCRIPTION_IDENTITY_MAPPER_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 309;
-
-
-
-  /**
-   * The message ID for the message that will be used if the CRAM-MD5 handler
-   * configuration entry does not have an attribute that specifies which
-   * identity mapper should be used.  This takes a single argument, which is the
-   * DN of the SASL CRAM-MD5 configuration entry.
-   */
-  public static final int MSGID_SASLCRAMMD5_NO_IDENTITY_MAPPER_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 310;
-
-
-
-  /**
-   * The message ID for the message that will be used if the identity mapper DN
-   * specified in the CRAM-MD5 handler entry does not refer to an active
-   * identity mapper.  This takes two arguments, which are the DN of the
-   * specified identity mapper and the DN of the SASL CRAM-MD5 configuration
-   * entry.
-   */
-  public static final int MSGID_SASLCRAMMD5_NO_SUCH_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 311;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine which identity mapper to use in conjunction with the
-   * CRAM-MD5 SASL mechanism.  This takes two arguments, which are the DN of
-   * the configuration entry and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_GET_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 312;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to map the CRAM-MD5 username to a user entry.  This takes two
-   * arguments, which are the provided username and a message that explains the
-   * problem that occurred.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_MAP_USERNAME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 313;
-
-
-
-  /**
-   * The message ID for the message that will be used if the identity mapper for
-   * the CRAM-MD5 SASL mechanism is updated.  This takes two arguments, which
-   * are the DN of the configuration entry and the
-   */
-  public static final int MSGID_SASLCRAMMD5_UPDATED_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 314;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the DN of the configuration entry that defines
-   * the identity mapper to use in conjunction with the DIGEST-MD5 SASL
-   * mechanism.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_DESCRIPTION_IDENTITY_MAPPER_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 315;
-
-
-
-  /**
-   * The message ID for the message that will be used if the DIGEST-MD5 handler
-   * configuration entry does not have an attribute that specifies which
-   * identity mapper should be used.  This takes a single argument, which is the
-   * DN of the SASL DIGEST-MD5 configuration entry.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_IDENTITY_MAPPER_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 316;
-
-
-
-  /**
-   * The message ID for the message that will be used if the identity mapper DN
-   * specified in the DIGEST-MD5 handler entry does not refer to an active
-   * identity mapper.  This takes two arguments, which are the DN of the
-   * specified identity mapper and the DN of the SASL DIGEST-MD5 configuration
-   * entry.
-   */
-  public static final int MSGID_SASLDIGESTMD5_NO_SUCH_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 317;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine which identity mapper to use in conjunction with the
-   * DIGEST-MD5 SASL mechanism.  This takes two arguments, which are the DN of
-   * the configuration entry and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_GET_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 318;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to map the DIGEST-MD5 username to a user entry.  This takes two
-   * arguments, which are the provided username and a message that explains the
-   * problem that occurred.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_MAP_USERNAME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 319;
-
-
-
-  /**
-   * The message ID for the message that will be used if the identity mapper for
-   * the DIGEST-MD5 SASL mechanism is updated.  This takes two arguments, which
-   * are the DN of the configuration entry and the
-   */
-  public static final int MSGID_SASLDIGESTMD5_UPDATED_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 320;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the DN of the configuration entry that defines
-   * the identity mapper to use in conjunction with the CRAM-MD5 SASL mechanism.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_SASLPLAIN_DESCRIPTION_IDENTITY_MAPPER_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 321;
-
-
-
-  /**
-   * The message ID for the message that will be used if the CRAM-MD5 handler
-   * configuration entry does not have an attribute that specifies which
-   * identity mapper should be used.  This takes a single argument, which is the
-   * DN of the SASL CRAM-MD5 configuration entry.
-   */
-  public static final int MSGID_SASLPLAIN_NO_IDENTITY_MAPPER_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 322;
-
-
-
-  /**
-   * The message ID for the message that will be used if the identity mapper DN
-   * specified in the CRAM-MD5 handler entry does not refer to an active
-   * identity mapper.  This takes two arguments, which are the DN of the
-   * specified identity mapper and the DN of the SASL CRAM-MD5 configuration
-   * entry.
-   */
-  public static final int MSGID_SASLPLAIN_NO_SUCH_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 323;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine which identity mapper to use in conjunction with the
-   * CRAM-MD5 SASL mechanism.  This takes two arguments, which are the DN of
-   * the configuration entry and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_SASLPLAIN_CANNOT_GET_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 324;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to map the provided username to a user entry.  This takes two
-   * arguments, which are the provided username and a message that explains the
-   * problem that occurred.
-   */
-  public static final int MSGID_SASLPLAIN_CANNOT_MAP_USERNAME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 325;
-
-
-
-  /**
-   * The message ID for the message that will be used if the identity mapper for
-   * the PLAIN SASL mechanism is updated.  This takes two arguments, which
-   * are the DN of the configuration entry and the DN of the identity mapper
-   * entry.
-   */
-  public static final int MSGID_SASLPLAIN_UPDATED_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 326;
-
-
-
-  /**
-   * The message ID for the message that will be used if a cancel request does
-   * not contain a value.  This does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_CANCEL_NO_REQUEST_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 327;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode a cancel request value.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_EXTOP_CANCEL_CANNOT_DECODE_REQUEST_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 328;
-
-
-
-  /**
-   * The message ID for the message that will be used as the cancel reason for
-   * the operation that is to be canceled.  This takes a single argument, which
-   * is the message ID of the cancel request.
-   */
-  public static final int MSGID_EXTOP_CANCEL_REASON =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 329;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * use the authentication password syntax in conjunction with a storage scheme
-   * that does not support that use.  This takes a single argument, which is the
-   * name of the password storage scheme.
-   */
-  public static final int MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 330;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * minimum length configuration attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MIN_LENGTH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 331;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine the minimum password length.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MIN_LENGTH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 332;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * maximum length configuration attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MAX_LENGTH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 333;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine the maximum password length.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MAX_LENGTH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 334;
-
-
-
-  /**
-   * The message ID for the message that will be used if the minimum password
-   * length is greater than the maximum.  This takes two arguments, which are
-   * the minimum and maximum allowed password lengths.
-   */
-  public static final int MSGID_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 335;
-
-
-
-  /**
-   * The message ID for the message that will be used if a provided password is
-   * too short.  This takes a single argument, which is the minimum required
-   * password length.
-   */
-  public static final int MSGID_PWLENGTHVALIDATOR_TOO_SHORT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 336;
-
-
-
-  /**
-   * The message ID for the message that will be used if a provided password is
-   * too short.  This takes a single argument, which is the maximum allowed
-   * password length.
-   */
-  public static final int MSGID_PWLENGTHVALIDATOR_TOO_LONG =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 337;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * minimum password length has been updated.  This takes a single argument,
-   * which is the new minimum length.
-   */
-  public static final int MSGID_PWLENGTHVALIDATOR_UPDATED_MIN_LENGTH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 338;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * maximum password length has been updated.  This takes a single argument,
-   * which is the new maximum length.
-   */
-  public static final int MSGID_PWLENGTHVALIDATOR_UPDATED_MAX_LENGTH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 339;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for
-   * the character set definitions attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_RANDOMPWGEN_DESCRIPTION_CHARSET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 340;
-
-
-
-  /**
-   * The message ID for the message that will be used if no character set
-   * definitions are included.  This takes a single argument, which is the DN of
-   * the configuration entry.
-   */
-  public static final int MSGID_RANDOMPWGEN_NO_CHARSETS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 341;
-
-
-
-  /**
-   * The message ID for the message that will be used if two or more character
-   * sets have the same name.  This takes two arguments, which are the DN of the
-   * entry and the conflicting character set name.
-   */
-  public static final int MSGID_RANDOMPWGEN_CHARSET_NAME_CONFLICT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 342;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to decode the character set definitions.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 343;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for
-   * the character set format attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_RANDOMPWGEN_DESCRIPTION_PWFORMAT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 344;
-
-
-
-  /**
-   * The message ID for the message that will be used if no password format is
-   * provided.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_RANDOMPWGEN_NO_PWFORMAT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 345;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password format
-   * references an unknown character set.  This takes two arguments, which are
-   * the password format string and the name of the unrecognized character set.
-   */
-  public static final int MSGID_RANDOMPWGEN_UNKNOWN_CHARSET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 346;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password format
-   * string does not have a valid syntax.  This takes a single argument, which
-   * is the invalid format string.
-   */
-  public static final int MSGID_RANDOMPWGEN_INVALID_PWFORMAT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 347;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain the password format string.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 348;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * attribute used to specify the DN of the configuration entry that defines
-   * the identity mapper to use in conjunction with the GSSAPI SASL mechanism.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_SASLGSSAPI_DESCRIPTION_IDENTITY_MAPPER_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 349;
-
-
-
-  /**
-   * The message ID for the message that will be used if the GSSAPI handler
-   * configuration entry does not have an attribute that specifies which
-   * identity mapper should be used.  This takes a single argument, which is the
-   * DN of the SASL GSSAPI configuration entry.
-   */
-  public static final int MSGID_SASLGSSAPI_NO_IDENTITY_MAPPER_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 350;
-
-
-
-  /**
-   * The message ID for the message that will be used if the identity mapper DN
-   * specified in the GSSAPI handler entry does not refer to an active identity
-   * mapper.  This takes two arguments, which are the DN of the specified
-   * identity mapper and the DN of the SASL GSSAPI configuration entry.
-   */
-  public static final int MSGID_SASLGSSAPI_NO_SUCH_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 351;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine which identity mapper to use in conjunction with the
-   * DIGEST-MD5 SASL mechanism.  This takes two arguments, which are the DN of
-   * the configuration entry and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_SASLGSSAPI_CANNOT_GET_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 352;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * identity mapper used for GSSAPI authentication has been updated with a new
-   * value.  This takes two arguments, which are the DN of the configuration
-   * entry and the new identity mapper DN.
-   */
-  public static final int MSGID_SASLGSSAPI_UPDATED_IDENTITY_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 353;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve the password policy for the user.  This takes two
-   * arguments, which are the user DN and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_CANNOT_GET_PW_POLICY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 354;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user password change
-   * is rejected because the current password was not provided.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_REQUIRE_CURRENT_PW =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 355;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user password change
-   * is rejected because the current password was provided over an insecure
-   * communication channel.  This does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_SECURE_AUTH_REQUIRED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 356;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user password change
-   * is rejected because users are not allowed to change their passwords.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_USER_PW_CHANGES_NOT_ALLOWED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 357;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because the new password was provided over an insecure
-   * communication channel.  This does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_SECURE_CHANGES_REQUIRED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 358;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user password change
-   * is rejected because the current password is too young.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_IN_MIN_AGE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 359;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user password change
-   * is rejected because the current password is expired.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_PASSWORD_IS_EXPIRED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 360;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because no new password was given and there is no password
-   * generator defined.  This does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_NO_PW_GENERATOR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 361;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to use the password generator to create a new password.  This takes
-   * a single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_CANNOT_GENERATE_PW =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 362;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because the new password provided was pre-encoded.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_PRE_ENCODED_NOT_ALLOWED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 363;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because the new password was rejected by a password validator.
-   * This takes a single argument, which is a message explaining the rejection.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_UNACCEPTABLE_PW =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 364;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because the new password could not be encoded using the default
-   * schemes.  This takes a single argument, which is a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_CANNOT_ENCODE_PASSWORD =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 365;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * identity mapper DN configuration attribute.  This does not take any
-   * arguments.
-   */
-//  public static final int MSGID_EXTOP_PASSMOD_DESCRIPTION_ID_MAPPER =
-//       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 366;
-
-
-
-  /**
-   * The message ID for the message that will be used if no identity mapper DN
-   * is provided for the password modify extended operation.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-//  public static final int MSGID_EXTOP_PASSMOD_NO_ID_MAPPER =
-//       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 367;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified identity
-   * mapper does not exist or is not enabled.  This takes two arguments, which
-   * are the DN of the identity mapper and the DN of the configuration entry.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 368;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the identity mapper.  This takes two arguments, which
-   * are the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 369;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to map a
-   * user by an authorization ID string fails.  This takes a single argument,
-   * which is the provided authorization ID string.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_CANNOT_MAP_USER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 370;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to map a user by an authorization ID string.  This takes two
-   * arguments, which are the provided authorization ID string and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_ERROR_MAPPING_USER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 371;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * notification types configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int
-       MSGID_ERRORLOG_ACCTNOTHANDLER_DESCRIPTION_NOTIFICATION_TYPES =
-            CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 372;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid notification
-   * type is specified.  This takes two arguments, which are the DN of the
-   * configuration entry and the invalid notification type.
-   */
-  public static final int MSGID_ERRORLOG_ACCTNOTHANDLER_INVALID_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 373;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine the account status notification types.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that occurred.
-   */
-  public static final int
-       MSGID_ERRORLOG_ACCTNOTHANDLER_CANNOT_GET_NOTIFICATION_TYPES =
-            CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 374;
-
-
-
-  /**
-   * The message ID for the message that will be written to the error log
-   * whenever an account status notification is generated.  This takes four
-   * arguments, which are the name of the account status notification type, the
-   * user DN, the message ID, and the message string.
-   */
-  public static final int MSGID_ERRORLOG_ACCTNOTHANDLER_NOTIFICATION =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_NOTICE | 375;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL DIGEST-MD5
-   * authentication fails because an error occurred while trying to get the
-   * clear-text password value(s) from a user's entry.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_GET_REVERSIBLE_PASSWORDS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 376;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL CRAM-MD5
-   * authentication fails because an error occurred while trying to get the
-   * clear-text password value(s) from a user's entry.
-   */
-  public static final int MSGID_SASLCRAMMD5_CANNOT_GET_REVERSIBLE_PASSWORDS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 377;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL PLAIN
-   * authentication fails because an error occurred while trying to get the
-   * password policy state.  This takes two arguments, which are the user DN and
-   * a message explaining the problem that occurred.
-   */
-  public static final int MSGID_SASLPLAIN_CANNOT_CHECK_PASSWORD_VALIDITY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 378;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to send the clear-text StartTLS response after initiating TLS
-   * negotiation.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_STARTTLS_ERROR_SENDING_CLEAR_RESPONSE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 379;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * not actually performed because the request contained the LDAP no-op
-   * control.  This does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_NOOP =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_WARNING | 380;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user's account is
-   * disabled.  This does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_ACCOUNT_DISABLED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 381;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user's account is
-   * locked.  This does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_ACCOUNT_LOCKED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 382;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user entry refered
-   * in a static group does not exist.  This takes two arguments, which are the
-   * DN of the target entry and the DN of the static group entry.
-   */
-  public static final int MSGID_STATICMEMBERS_NO_SUCH_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 383;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to retrieve an entry as a potential member of the static group.
-   * This takes three arguments, which are the DN of the target entry, the DN of
-   * the static group entry, and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_STATICMEMBERS_CANNOT_GET_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 384;
-
-
-
-  /**
-   * The message ID for the message that will be used if a potential static
-   * group entry contains both the groupOfNames and groupOfUniqueNames object
-   * classes.  This takes three arguments, which are the DN of the entry, the
-   * name of the groupOfNames object class, and the name of the
-   * groupOfUniqueNames object class.
-   */
-  public static final int MSGID_STATICGROUP_INVALID_OC_COMBINATION =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 385;
-
-
-
-  /**
-   * The message ID for the message that will be used if a potential static
-   * group entry does not contain either the groupOfNames or groupOfUniqueNames
-   * object class.  This takes three arguments, which are the DN of the entry,
-   * the name of the groupOfNames object class, and the name of the
-   * groupOfUniqueNames object class.
-   */
-  public static final int MSGID_STATICGROUP_NO_VALID_OC =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 386;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value for the member
-   * attribute for a static group cannot be parsed as a DN.  This takes four
-   * arguments, which are the provided value, the name of the member attribute,
-   * the DN of the entry, and the reason the value was not a valid DN.
-   */
-  public static final int MSGID_STATICGROUP_CANNOT_DECODE_MEMBER_VALUE_AS_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 387;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a user to a static group that already includes that user.  This takes
-   * two arguments, which is the DN of the user and the DN of the group.
-   */
-  public static final int MSGID_STATICGROUP_ADD_MEMBER_ALREADY_EXISTS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 388;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a user from a static group that does not include that user.  This
-   * takes two arguments, which is the DN of the user and the DN of the group.
-   */
-  public static final int MSGID_STATICGROUP_REMOVE_MEMBER_NO_SUCH_MEMBER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 389;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update a group entry to add a member.  This takes three
-   * arguments, which are the member DN, the group DN, and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_STATICGROUP_ADD_MEMBER_UPDATE_FAILED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 390;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update a group entry to remove a member.  This takes three
-   * arguments, which are the member DN, the group DN, and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_STATICGROUP_REMOVE_MEMBER_UPDATE_FAILED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 391;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password modify
-   * extended operation is requested to reset another user's password by a
-   * client without sufficient privileges.  This does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 392;
-
-
-
-  /**
-   * The message ID for the message that will be used if the DIGEST-MD5 authzid
-   * is the empty string.  This does not take any arguments.
-   */
-  public static final int MSGID_SASLDIGESTMD5_EMPTY_AUTHZID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 393;
-
-
-
-  /**
-   * The message ID for the message that will be used if the DIGEST-MD5 authzid
-   * contained an invalid DN.  This takes two arguments, which are the authzid
-   * and the reason that it was invalid.
-   */
-  public static final int MSGID_SASLDIGESTMD5_AUTHZID_INVALID_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 394;
-
-
-
-  /**
-   * The message ID for the message that will be used if the authenticating user
-   * does not have sufficient privilege to specify an authorization identity
-   * that is different from the authentication identity.  This takes a single
-   * argument, which is the DN of the authentication identity.
-   */
-  public static final int MSGID_SASLDIGESTMD5_AUTHZID_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 395;
-
-
-
-  /**
-   * The message ID for the message that will be used if the DIGEST-MD5 authzid
-   * references an entry that does not exist.  This takes a single argument,
-   * which is the DN of the target entry.
-   */
-  public static final int MSGID_SASLDIGESTMD5_AUTHZID_NO_SUCH_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 396;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to get the entry for the authorization identity.  This takes two
-   * arguments, which are the authorization DN and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_SASLDIGESTMD5_AUTHZID_CANNOT_GET_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 397;
-
-
-
-  /**
-   * The message ID for the message that will be used if the "u:"-form
-   * authorization ID cannot be mapped to a user entry.  This takes a single
-   * argument, which is the authzID string.
-   */
-  public static final int MSGID_SASLDIGESTMD5_AUTHZID_NO_MAPPED_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 398;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to map the "u:"-form authorization ID to a user entry.  This
-   * takes two arguments, which are the authzID string and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_SASLDIGESTMD5_CANNOT_MAP_AUTHZID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 399;
-
-
-
-  /**
-   * The message ID for the message that will be used if the authorization ID is
-   * a malformed DN.  This takes two arguments, which are the authorization ID
-   * string and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_SASLPLAIN_AUTHZID_INVALID_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 400;
-
-
-
-  /**
-   * The message ID for the message that will be used if the authenticating user
-   * attempts to provide an alternate authorization ID but does not have
-   * sufficient privileges to do so.  This takes a single argument, which is the
-   * DN of the authenticating user.
-   */
-  public static final int MSGID_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 401;
-
-
-
-  /**
-   * The message ID for the message that will be used if the authorization ID
-   * contains the DN of an entry that does not exist.  This takes a single
-   * argument, which is the authorization DN.
-   */
-  public static final int MSGID_SASLPLAIN_AUTHZID_NO_SUCH_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 402;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to get the entry for the authorization DN.  This takes two
-   * arguments, which are the authorization DN and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_SASLPLAIN_AUTHZID_CANNOT_GET_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 403;
-
-
-
-  /**
-   * The message ID for the message that will be used if the authorization ID
-   * specifies a username that does not map to an entry.  This takes a single
-   * argument, which is the authorization ID string.
-   */
-  public static final int MSGID_SASLPLAIN_AUTHZID_NO_MAPPED_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 404;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to map the authorization ID username to an entry.  This takes two
-   * arguments, which are the authorization ID string and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_SASLPLAIN_AUTHZID_CANNOT_MAP_AUTHZID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 405;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * certificate mapper DN configuration attribute.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_SASLEXTERNAL_DESCRIPTION_CERT_MAPPER_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 406;
-
-
-
-  /**
-   * The message ID for the message that will be used the SASL EXTERNAL
-   * configuration entry does not specify the certificate mapper DN. This takes
-   * a single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_SASLEXTERNAL_NO_CERTIFICATE_MAPPER_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 407;
-
-
-
-  /**
-   * The message ID for the message that will be used the SASL EXTERNAL
-   * configuration entry contains a certificate mapper DN that does not refer to
-   * a valid certificate mapper. This takes two arguments, which are the DN of
-   * the configuration entry and the certificate mapper DN.
-   */
-  public static final int MSGID_SASLEXTERNAL_INVALID_CERTIFICATE_MAPPER_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 408;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the certificate mapper to use with the SASL EXTERNAL
-   * handler.  This takes two arguments, which are the DN of the configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SASLEXTERNAL_CANNOT_GET_CERT_MAPPER_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 409;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * certificate mapper DN for has been updated.  This takes two arguments,
-   * which are the DN of the configuration entry and the new certificate mapper
-   * DN.
-   */
-  public static final int MSGID_SASLEXTERNAL_UPDATED_CERT_MAPPER_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 410;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * subject attribute type attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_SDTUACM_DESCRIPTION_SUBJECT_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 411;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration entry
-   * does not specify which attribute type should be used to hold certificate
-   * subjects.  This takes two arguments, which are the DN of the configuration
-   * entry and the attribute type that should be used to specify the subject
-   * attribute.
-   */
-  public static final int MSGID_SDTUACM_NO_SUBJECT_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 412;
-
-
-
-  /**
-   * The message ID for the message that will be used if subject attribute type
-   * does not exist in the server schema.  This takes two arguments, which are
-   * the DN of the configuration entry and the name of the specified attribute
-   * type.
-   */
-  public static final int MSGID_SDTUACM_NO_SUCH_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 413;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the subject attribute type.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_SDTUACM_CANNOT_GET_SUBJECT_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 414;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * search base DN attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_SDTUACM_DESCRIPTION_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 415;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the search base DN.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_SDTUACM_CANNOT_GET_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 416;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client did not
-   * present any certificate to the server.  This does not take any arguments.
-   */
-  public static final int MSGID_SDTUACM_NO_PEER_CERTIFICATE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 417;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client certificate
-   * was not an X.509 certificate.  This takes a single argument, which is the
-   * name of the certificate format.
-   */
-  public static final int MSGID_SDTUACM_PEER_CERT_NOT_X509 =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 418;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple user entries
-   * matched the specified certificate subject.  This takes three arguments,
-   * which are the certificate subject and the DNs of the first two users found
-   * to match that subject.
-   */
-  public static final int MSGID_SDTUACM_MULTIPLE_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 419;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * attribute map attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_SATUACM_DESCRIPTION_ATTR_MAP =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 420;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration entry
-   * does not specify which attribute type should be used to map certificate
-   * attributes to user attributes.  This takes two arguments, which are the DN
-   * of the configuration entry and the attribute type that should be used to
-   * specify the mapping.
-   */
-  public static final int MSGID_SATUACM_NO_MAP_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 421;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute map value
-   * has an invalid format.  This takes two arguments, which are the DN of the
-   * configuration entry and the invalid map value.
-   */
-  public static final int MSGID_SATUACM_INVALID_MAP_FORMAT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 422;
-
-
-
-  /**
-   * The message ID for the message that will be used if there are multiple
-   * mappings that target the same certificate attribute.  This takes two
-   * arguments, which are the DN of the configuration entry and the name of the
-   * certificate attribute.
-   */
-  public static final int MSGID_SATUACM_DUPLICATE_CERT_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 423;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute mapping
-   * references a user attribute that is not defined in the server schema.
-   * This takes two argumetns, which are the DN of the configuration entry and
-   * the name of the undefined user attribute.
-   */
-  public static final int MSGID_SATUACM_NO_SUCH_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 424;
-
-
-
-  /**
-   * The message ID for the message that will be used if there are multiple
-   * mappings that target the same user attribute.  This takes two arguments,
-   * which are the DN of the configuration entry and the name of the user
-   * attribute.
-   */
-  public static final int MSGID_SATUACM_DUPLICATE_USER_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 425;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to process the attribute mapping.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_SATUACM_CANNOT_GET_ATTR_MAP =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 426;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * search base DN attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_SATUACM_DESCRIPTION_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 427;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to process the set of base DNs.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_SATUACM_CANNOT_GET_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 428;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client did not
-   * present any certificate to the server.  This does not take any arguments.
-   */
-  public static final int MSGID_SATUACM_NO_PEER_CERTIFICATE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 429;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client certificate
-   * was not an X.509 certificate.  This takes a single argument, which is the
-   * name of the certificate format.
-   */
-  public static final int MSGID_SATUACM_PEER_CERT_NOT_X509 =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 430;
-
-
-
-  /**
-   * The message ID for the message that will be used if the peer certificate
-   * subject cannot be decoded as a DN.  This takes two arguments, which are
-   * the peer certificate subject and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_SATUACM_CANNOT_DECODE_SUBJECT_AS_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 431;
-
-
-
-  /**
-   * The message ID for the message that will be used if a peer certificate
-   * subject does not contain any mappable attributes.  This takes a single
-   * argument, which is the peer certificate subject.
-   */
-  public static final int MSGID_SATUACM_NO_MAPPABLE_ATTRIBUTES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 432;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple user entries
-   * matched the specified certificate subject.  This takes three arguments,
-   * which are the certificate subject and the DNs of the first two users found
-   * to match that subject.
-   */
-  public static final int MSGID_SATUACM_MULTIPLE_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 433;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * fingerprint attribute type attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_FCM_DESCRIPTION_FINGERPRINT_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 434;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration entry
-   * does not specify which attribute type should be used to hold certificate
-   * fingerprints.  This takes two arguments, which are the DN of the
-   * configuration entry and the attribute type that should be used to specify
-   * the fingerprint attribute.
-   */
-  public static final int MSGID_FCM_NO_FINGERPRINT_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 435;
-
-
-
-  /**
-   * The message ID for the message that will be used if the fingerprint
-   * attribute type does not exist in the server schema.  This takes two
-   * arguments, which are the DN of the configuration entry and the name of the
-   * specified attribute type.
-   */
-  public static final int MSGID_FCM_NO_SUCH_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 436;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the fingerprint attribute type.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FCM_CANNOT_GET_FINGERPRINT_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 437;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * fingerprint algorithm attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_FCM_DESCRIPTION_FINGERPRINT_ALGORITHM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 438;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration entry
-   * does not specify which digest algorithm should be used to compute
-   * fingerprints.  This takes two arguments, which are the DN of the
-   * configuration entry and the attribute type that should be used to specify
-   * the fingerprint algorithm.
-   */
-  public static final int MSGID_FCM_NO_FINGERPRINT_ALGORITHM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 439;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the fingerprint algorithm.  This takes two arguments,
-   * which are the DN of the configuration entry and a string  representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_FCM_CANNOT_GET_FINGERPRINT_ALGORITHM =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 440;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * search base DN attribute.  It does not take any arguments.
-   */
-  public static final int MSGID_FCM_DESCRIPTION_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 441;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the search base DN.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_FCM_CANNOT_GET_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 442;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client did not
-   * present any certificate to the server.  This does not take any arguments.
-   */
-  public static final int MSGID_FCM_NO_PEER_CERTIFICATE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 443;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client certificate
-   * was not an X.509 certificate.  This takes a single argument, which is the
-   * name of the certificate format.
-   */
-  public static final int MSGID_FCM_PEER_CERT_NOT_X509 =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 444;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compute the fingerprint for a certificate.  This takes two
-   * arguments, which are the certificate subject and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_FCM_CANNOT_CALCULATE_FINGERPRINT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 445;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple user entries
-   * matched the specified certificate fingerprint.  This takes three arguments,
-   * which are the certificate fingerprint and the DNs of the first two users
-   * found to match that fingerprint.
-   */
-  public static final int MSGID_FCM_MULTIPLE_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 446;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode a memberURL value as an LDAP URL.  This takes three
-   * arguments, which are the value that could not be decoded, the DN of the
-   * entry containing the value, and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_DYNAMICGROUP_CANNOT_DECODE_MEMBERURL =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 447;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * use nesting in conjunction with a dynamic group.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_DYNAMICGROUP_NESTING_NOT_SUPPORTED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 448;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * alter the set of members in a dynamic group.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 449;
-
-
-
-  /**
-   * The message ID for the message that will be used if a dynamic group
-   * includes a member URL with a base DN that doesn't exist.  This takes two
-   * arguments, which are the base DN and the DN of the dynamic group entry.
-   */
-  public static final int MSGID_DYNAMICGROUP_NONEXISTENT_BASE_DN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_WARNING | 450;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * processing an internal search to determine dynamic group membership.  This
-   * takes five arguments, which are the search base DN, the search filter,
-   * the DN of the dynamic group entry, the result code for the search, and the
-   * error message for the search.
-   */
-  public static final int MSGID_DYNAMICGROUP_INTERNAL_SEARCH_FAILED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 451;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to return an entry for a user that matches a set of dynamic group
-   * criteria.  This takes two arguments, which are the DN of the entry that
-   * could not be returned and the DN of the dynamic group entry.
-   */
-  public static final int MSGID_DYNAMICGROUP_CANNOT_RETURN_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 452;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * minimum difference configuration attribute.  It does not take any
-   * arguments.
-   */
-  public static final int
-       MSGID_PWDIFFERENCEVALIDATOR_DESCRIPTION_MIN_DIFFERENCE =
-            CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 453;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to determine the minimum password difference.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_PWDIFFERENCEVALIDATOR_CANNOT_DETERMINE_MIN_DIFFERENCE =
-            CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 454;
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * minimum password length has been updated.  This takes a single argument,
-   * which is the new minimum length.
-   */
-  public static final int MSGID_PWDIFFERENCEVALIDATOR_UPDATED_MIN_DIFFERENCE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 455;
-
-
-  /**
-   * The message ID for the message that will be used if a provided password is
-   * too short.  This takes a single argument, which is the minimum required
-   * password length.
-   */
-  public static final int MSGID_PWDIFFERENCEVALIDATOR_TOO_SMALL =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 456;
-
-
-  /**
-   * The message ID for the message that will be used if the same character
-   * appears too many times in consecutive order in a given password.  This
-   * takes a single argument, which is the maximum number of times a character
-   * may appear in consecutive order.
-   */
-  public static final int MSGID_REPEATEDCHARS_VALIDATOR_TOO_MANY_CONSECUTIVE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 457;
-
-
-  /**
-   * The message ID for the message that will be used if a given password does
-   * not have enough unique characters.  This takes a single argument, which is
-   * the minimum number of unique characters that a password may contain.
-   */
-  public static final int MSGID_UNIQUECHARS_VALIDATOR_NOT_ENOUGH_UNIQUE_CHARS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 458;
-
-
-  /**
-   * The message ID for the message that will be used if a search operation has
-   * a filter targeting the subschemaSubentry virtual attribute, which is not
-   * searchable.  This takes a single argument, which is the name of the
-   * subschemaSubentry attribute type.
-   */
-  public static final int MSGID_SUBSCHEMASUBENTRY_VATTR_NOT_SEARCHABLE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 459;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided password
-   * is contained in the server's dictionary.  This does not take any arguments.
-   */
-  public static final int MSGID_DICTIONARY_VALIDATOR_PASSWORD_IN_DICTIONARY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 460;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided password
-   * dictionary file does not exist.  This takes a single argument, which is the
-   * path to the dictionary file.
-   */
-  public static final int MSGID_DICTIONARY_VALIDATOR_NO_SUCH_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 461;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read the password file.  This takes two arguments, which is the
-   * path to the dictionary file and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_DICTIONARY_VALIDATOR_CANNOT_READ_FILE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 462;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided password
-   * is contained in another attribute in the user's entry.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_ATTRVALUE_VALIDATOR_PASSWORD_IN_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 463;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided password
-   * contains a character not included in any of the defined character sets.
-   * This takes a single argument, which is the illegal character.
-   */
-  public static final int MSGID_CHARSET_VALIDATOR_ILLEGAL_CHARACTER =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 464;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided password
-   * contains too few passwords from a given character set.  This takes two
-   * arguments, which is a string of the characters from that set and the
-   * minimum number of characters from that set which must be used in passwords.
-   */
-  public static final int MSGID_CHARSET_VALIDATOR_TOO_FEW_CHARS_FROM_SET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 465;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided character
-   * set definition does not contain a colon to separate the count from the
-   * character set.  This takes a single argument, which is the provided
-   * definition string.
-   */
-  public static final int MSGID_CHARSET_VALIDATOR_NO_COLON =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 466;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided character
-   * set definition does not contain any characters after the colon.  This takes
-   * a single argument, which is the provided definition string.
-   */
-  public static final int MSGID_CHARSET_VALIDATOR_NO_CHARS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 467;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided character
-   * set definition is invalid because the value before the colon could not be
-   * parsed as positive integer.  This takes a single argument, which is the
-   * provided definition string.
-   */
-  public static final int MSGID_CHARSET_VALIDATOR_INVALID_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 468;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided character
-   * set definition contains a character that has already been used.  This takes
-   * two arguments, which are the provided definition string and the duplicate
-   * character.
-   */
-  public static final int MSGID_CHARSET_VALIDATOR_DUPLICATE_CHAR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 469;
-
-
-
-  /**
-   * The message ID for the message that will be used if the virtual static
-   * group has multiple targets.  This takes a single argument, which is the DN
-   * of the group.
-   */
-  public static final int MSGID_VIRTUAL_STATIC_GROUP_MULTIPLE_TARGETS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 470;
-
-
-
-  /**
-   * The message ID for the message that will be used if the virtual static
-   * group has a target that can't be decoded as a DN.  This takes three
-   * arguments, which are the target group value, the group DN, and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_VIRTUAL_STATIC_GROUP_CANNOT_DECODE_TARGET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 471;
-
-
-
-  /**
-   * The message ID for the message that will be used if the virtual static
-   * group does not have a target group DN.  This takes a single argument, which
-   * is the DN of the group.
-   */
-  public static final int MSGID_VIRTUAL_STATIC_GROUP_NO_TARGET =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 472;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * nest a virtual static group.  This takes a single argument, which is the
-   * DN of the group.
-   */
-  public static final int MSGID_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 473;
-
-
-
-  /**
-   * The message ID for the message that will be used if the target group does
-   * not exist.  This takes two arguments, which is the target group DN and the
-   * virtual static group DN.
-   */
-  public static final int MSGID_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 474;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * alter the membership for a virtual static group.  This takes a single
-   * argument, which is the DN of the group.
-   */
-  public static final int
-       MSGID_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED =
-            CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 475;
-
-
-
-  /**
-   * The message ID for the message that will be used if a virtual static group
-   * target is also a virtual static group.  This takes two arguments, which are
-   * the object group DN and the target group DN.
-   */
-  public static final int MSGID_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL=
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 476;
-
-
-
-  /**
-   * The message ID for the message that will be used if maximum number of cache
-   * entries has been updated.  This takes a single argument, which is the new
-   * maximum number of entries.
-   */
-  public static final int MSGID_FSCACHE_UPDATED_MAX_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 477;
-
-  /**
-   * The message ID for the message that will be used if the cache lock timeout
-   * has been updated.  This takes a single argument, which is the new lock
-   * timeout.
-   */
-  public static final int MSGID_FSCACHE_UPDATED_LOCK_TIMEOUT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 478;
-
-  /**
-   * The message ID for the message that will be used if the cache include
-   * filter set has been updated.  This does not take any arguments.
-   */
-  public static final int MSGID_FSCACHE_UPDATED_INCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 479;
-
-  /**
-   * The message ID for the message that will be used if the cache exclude
-   * filter set has been updated.  This does not take any arguments.
-   */
-  public static final int MSGID_FSCACHE_UPDATED_EXCLUDE_FILTERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 480;
-
-  /**
-   * The message ID for the message that will be used if entry cache memory
-   * size has been updated.  This takes one argument, which is the new size
-   * of memory that may be used, in bytes.
-   */
-  public static final int MSGID_FSCACHE_UPDATED_MAX_MEMORY_SIZE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 481;
-
-  /**
-   * The message ID for the message that will be used if entry cache type
-   * has been changed.  This takes one argument, which is the new entry
-   * cache type.
-   */
-  public static final int MSGID_FSCACHE_UPDATED_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 482;
-
-
-  /**
-   * The message ID for the message that will be used if entry cache JE
-   * cache memory percent has been changed.  This takes one argument,
-   * which is the new percentage of JVM memory that can be utilized.
-   */
-  public static final int MSGID_FSCACHE_UPDATED_JE_MEMORY_PCT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 483;
-
-  /**
-   * The message ID for the message that will be used if entry cache JE
-   * cache memory size has been changed.  This takes one argument,
-   * which is the new maximum size of JVM memory that can be utilized.
-   */
-  public static final int MSGID_FSCACHE_UPDATED_JE_MEMORY_SIZE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 484;
-
-  /**
-   * The message ID for the message that will be used if entry cache
-   * persistence state has been changed.  This takes one argument,
-   * which is the new persistence state.
-   */
-  public static final int MSGID_FSCACHE_UPDATED_IS_PERSISTENT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 485;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to load persistent cache for the FS-based entry cache.
-   * This takes one argument which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_FSCACHE_CANNOT_LOAD_PERSISTENT_DATA =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 486;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to store persistence cache for the FS-based entry cache.
-   * This takes one argument which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_FSCACHE_CANNOT_STORE_PERSISTENT_DATA =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 487;
-
-  /**
-   * The message ID for the message that will be used if a fatal error occurs
-   * while trying to initialize the FS-based entry cache.  This takes one
-   * argument which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_FSCACHE_CANNOT_INITIALIZE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_FATAL_ERROR | 488;
-
-  /**
-   * The message ID for the message that will be used if we are unable to put
-   * a new entry to the cache. This takes one argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FSCACHE_CANNOT_STORE_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 489;
-
-  /**
-   * The message ID for the message that will be used if we are unable to get
-   * an existing entry from the cache. This takes one argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_FSCACHE_CANNOT_RETRIEVE_ENTRY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 490;
-
-  /**
-   * The message ID for the message that will be used if we are unable to set
-   * the JE cache size as percentage. This takes one argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_FSCACHE_CANNOT_SET_JE_MEMORY_PCT =
-      CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 491;
-
-  /**
-   * The message ID for the message that will be used if we are unable to set
-   * the JE cache size in bytes. This takes one argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FSCACHE_CANNOT_SET_JE_MEMORY_SIZE =
-      CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 492;
-
-  /**
-   * The message ID for the message that will be used if a fatal error occurs
-   * while trying to setup the cache db environment home.  This takes one
-   * argument which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_FSCACHE_HOMELESS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_FATAL_ERROR | 493;
-
-  /**
-   * The message ID of an error indicating that the file permissions for the
-   * file system entry cache database directory were not set.
-   */
-  public static final int MSGID_FSCACHE_SET_PERMISSIONS_FAILED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 494;
-
-  /**
-   * The message ID for the message that will be used if recorded offline state
-   * does not match the current offline state for given backend. This takes one
-   * argument which is the backend ID.
-   */
-  public static final int MSGID_FSCACHE_OFFLINE_STATE_FAIL =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 495;
-
-  /**
-   * The message ID for the message that will be used to report the cache
-   * persistent state restoration progress. This takes two arguments which
-   * are the restored entries count and the total number of entries to be
-   * restored.
-   */
-  public static final int MSGID_FSCACHE_RESTORE_PROGRESS_REPORT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 496;
-
-  /**
-   * The message ID for the message that will be used to report the cache
-   * persistent state preservation progress. This takes two arguments which
-   * are the preserved entries count and the total number of entries to be
-   * preserved.
-   */
-  public static final int MSGID_FSCACHE_SAVE_PROGRESS_REPORT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 497;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to load persistent cache index of the FS-based persistent entry
-   * cache. Takes no arguments.
-   */
-  public static final int MSGID_FSCACHE_INDEX_NOT_FOUND =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_INFORMATIONAL | 498;
-
-  /**
-   * The message ID for the message that will be used if persistent cache index
-   * of the FS-based persistent entry cache is empty or damaged in any way we
-   * can detect. Takes no arguments.
-   */
-  public static final int MSGID_FSCACHE_INDEX_IMPAIRED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 499;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search operation has
-   * a filter targeting the entryUUID virtual attribute, which is not
-   * searchable.  This takes a single argument, which is the name of the
-   * entryUUID attribute type.
-   */
-  public static final int MSGID_ENTRYUUID_VATTR_NOT_SEARCHABLE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 501;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user requests the
-   * password policy state extended operation but does not have adequate
-   * privileges to do so.  This does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_NO_PRIVILEGE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 502;
-
-
-
-  /**
-   * The message ID for the message that will be used if a user requests the
-   * password policy state extended operation but does not include a request
-   * value.  This does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_NO_REQUEST_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 503;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode the password policy state extended request value.
-   * This takes a single argument, which is a message explaining the problem
-   * that occurred.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_DECODE_FAILURE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 504;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server finds
-   * multiple entries for a given DN.  This takes a single argument, which is a
-   * string representation of the provided DN.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_MULTIPLE_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 505;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password policy
-   * state request includes an operation with an invalid encoding.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_INVALID_OP_ENCODING =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 506;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the disabled state for an account but does not provide a value.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_NO_DISABLED_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 507;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the disabled state for an account but provides multiple values.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_DISABLED_VALUE_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 508;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the disabled state for an account but provides an invalid value.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_DISABLED_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 509;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the account expiration time but provides multiple values.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_ACCT_EXP_VALUE_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 510;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the account expiration time but provides an invalid value.  This takes
-   * two arguments, which are the provided value and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_ACCT_EXP_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 511;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the password changed time but provides multiple values.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_PWCHANGETIME_VALUE_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 512;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the password changed time but provides an invalid value.  This takes
-   * two arguments, which are the provided value and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_PWCHANGETIME_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 513;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the password warned time but provides multiple values.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_PWWARNEDTIME_VALUE_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 514;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the password warned time but provides an invalid value.  This takes
-   * two arguments, which are the provided value and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_PWWARNEDTIME_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 515;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * add a failure time but provides multiple values.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_ADD_FAILURE_TIME_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 516;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * alter the failure times but provides an invalid value.  This takes two
-   * arguments, which are the provided value and a message explaining the
-   * that occurred.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_AUTH_FAILURE_TIME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 517;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the last login time but provides multiple values.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_LAST_LOGIN_TIME_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 518;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the last login time but provides an invalid value.  This takes two
-   * arguments, which are the provided value and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_LAST_LOGIN_TIME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 519;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the reset state for an account but does not provide a value.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_NO_RESET_STATE_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 520;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the reset state for an account but provides multiple values.  This does
-   * does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_RESET_STATE_VALUE_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 521;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the reset state for an account but provides an invalid value.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_RESET_STATE_VALUE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 522;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * add a grace login time but provides multiple values.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_ADD_GRACE_LOGIN_TIME_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 523;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * alter the grace login times but provides an invalid value.  This takes two
-   * arguments, which are the provided value and a message explaining the
-   * that occurred.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 524;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the required change time but provides multiple values.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_REQUIRED_CHANGE_TIME_COUNT =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 525;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user attempts to
-   * set the required change time but provides an invalid value.  This takes two
-   * arguments, which are the provided value and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_BAD_REQUIRED_CHANGE_TIME =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 526;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password policy
-   * state request includes an operation with an unrecognized type.  This takes
-   * a single argument, which is the provided operation type.
-   */
-  public static final int MSGID_PWPSTATE_EXTOP_UNKNOWN_OP_TYPE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_ERROR | 527;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the password policy state information in the user's
-   * entry.  This takes three arguments, which are the target user DN and the
-   * result code and error message from the internal modify operation attempting
-   * to update the state information.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_CANNOT_UPDATE_PWP_STATE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_WARNING | 528;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client request
-   * included an invalid digest URI.  This takes two arguments, which are the
-   * provided digest URI and the expected digest URI.
-   */
-  public static final int MSGID_SASLDIGESTMD5_INVALID_DIGEST_URI =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 529;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password change is
-   * rejected because the new password was found in the password history.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_EXTOP_PASSMOD_PW_IN_HISTORY =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 530;
-
-
-
-  /**
-   * The message ID for the message that will be used if the Directory Server is
-   * not configured with information about any SMTP servers.  This does not take
-   * any configuration arguments.
-   */
-  public static final int MSGID_SMTPALERTHANDLER_NO_SMTP_SERVERS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 531;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to send an e-mail message.  This takes three arguments, which are
-   * the alert type, the alert message, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_SMTPALERTHANDLER_ERROR_SENDING_MESSAGE =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_SEVERE_WARNING | 532;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided match
-   * pattern cannot be parsed as a valid regular expression.  This takes two
-   * arguments, which are the provided match pattern and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_REGEXMAP_INVALID_MATCH_PATTERN =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 533;
-
-
-
-  /**
-   * The message ID for the message that will be used if any of the match
-   * attributes is not defined in the server schema.  This takes two arguments,
-   * which are the DN of the configuration entry and the value of the provided
-   * attribute.
-   */
-  public static final int MSGID_REGEXMAP_UNKNOWN_ATTR =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 534;
-
-
-
-  /**
-   * The message ID for the message that will be used if the search to map a
-   * user returned multiple entries.  This takes a single argument, which is the
-   * provided ID string.
-   */
-  public static final int MSGID_REGEXMAP_MULTIPLE_MATCHING_ENTRIES =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 535;
-
-
-
-  /**
-   * The message ID for the message that will be used if the search to map a
-   * user could not be processed efficiently.  This two arguments, which are the
-   * provided ID string and the error message from the internal search.
-   */
-  public static final int MSGID_REGEXMAP_INEFFICIENT_SEARCH =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 536;
-
-
-
-  /**
-   * The message ID for the message that will be used if the search to map a
-   * user could failed for some reason.  This two arguments, which are the
-   * provided ID string and the error message from the internal search.
-   */
-  public static final int MSGID_REGEXMAP_SEARCH_FAILED =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 537;
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a nested group to a static group that already includes that nested
-   * group. This takes two arguments, which is the DN of the nested group
-   * being added and the DN of the group.
-   */
-  public static final int MSGID_STATICGROUP_ADD_NESTED_GROUP_ALREADY_EXISTS =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 538;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * remove a nested group from a static group that does not include that group.
-   * This takes two arguments, which is the DN of the nested group being removed
-   * and the DN of the group.
-   */
-  public static final int MSGID_STATICGROUP_REMOVE_NESTED_GROUP_NO_SUCH_GROUP =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 539;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * refresh a static group member list using a group instance that has been
-   * removed from the group manager via a ldap operation. This takes one
-   * arguments, which is the DN of invalid or stale nested group instance.
-   */
-  public static final int MSGID_STATICGROUP_GROUP_INSTANCE_INVALID =
-       CATEGORY_MASK_EXTENSIONS | SEVERITY_MASK_MILD_ERROR | 540;
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST,
-                    "An error occurred while attempting to initialize the " +
-                    "message digest generator for the %s algorithm:  %s");
-    registerMessage(MSGID_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD,
-                    "An error occurred while attempting to base64-decode " +
-                    "the password value %s:  %s");
-    registerMessage(MSGID_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD,
-                    "Password storage scheme %s does not support use with " +
-                    "the authentication password attribute syntax");
-    registerMessage(MSGID_PWSCHEME_NOT_REVERSIBLE,
-                    "The %s password storage scheme is not reversible, so it " +
-                    "is impossible to recover the plaintext version of an " +
-                    "encoded password");
-    registerMessage(MSGID_PWSCHEME_CANNOT_ENCODE_PASSWORD,
-                    "An unexpected error occurred while attempting to encode " +
-                    "a password using the storage scheme defined in class " +
-                    "%s:  %s");
-
-
-    registerMessage(MSGID_JMX_ALERT_HANDLER_CANNOT_REGISTER,
-                    "An error occurred while trying to register the JMX " +
-                    "alert handler with the MBean server:  %s");
-
-
-    registerMessage(MSGID_FIFOCACHE_DESCRIPTION_MAX_MEMORY_PCT,
-                    "Specifies the maximum percentage of available memory " +
-                    "in the JVM that the entry cache should be allowed to " +
-                    "consume.  Its value should be an integer between 1 and " +
-                    "100.  Changes to this configuration attribute will take " +
-                    "effect immediately, although if the value is reduced " +
-                    "to a percentage that is less than the current " +
-                    "consumption in the JVM, it may take some time for " +
-                    "existing cache items to be purged");
-    registerMessage(MSGID_FIFOCACHE_CANNOT_DETERMINE_MAX_MEMORY_PCT,
-                    "An error occurred while attempting to determine the " +
-                    "value of the " + ATTR_FIFOCACHE_MAX_MEMORY_PCT +
-                    " attribute in configuration entry %s:  %s.  The default " +
-                    "of %d will be used");
-    registerMessage(MSGID_FIFOCACHE_DESCRIPTION_MAX_ENTRIES,
-                    "Specifies the maximum number of entries that may be " +
-                    "held in the entry cache, with a value of zero " +
-                    "indicating that there should be no limit to the number " +
-                    "of entries (although the memory percentage will still " +
-                    "be observed).  Changes to this configuration attribute " +
-                    "will take effect immediately, although if it is reduced " +
-                    "to a value that is less than the number of entries " +
-                    "currently held in the cache, it may take some time for " +
-                    "existing cache items to be purged");
-    registerMessage(MSGID_FIFOCACHE_CANNOT_DETERMINE_MAX_ENTRIES,
-                    "An error occurred while attempting to determine the " +
-                    "value of the " + ATTR_FIFOCACHE_MAX_ENTRIES +
-                    " attribute in configuration entry %s:  %s.  No hard " +
-                    "limit on the number of entries will be enforced, but " +
-                    "the value of " + ATTR_FIFOCACHE_MAX_MEMORY_PCT +
-                    " will still be observed");
-    registerMessage(MSGID_FIFOCACHE_DESCRIPTION_LOCK_TIMEOUT,
-                    "Specifies the maximum length of time in milliseconds " +
-                    "that the entry cache should block while attempting " +
-                    "to acquire a lock for an entry.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_FIFOCACHE_CANNOT_DETERMINE_LOCK_TIMEOUT,
-                    "An error occurred while attempting to determine the " +
-                    "value of the " + ATTR_FIFOCACHE_LOCK_TIMEOUT +
-                    " attribute in configuration entry %s:  %s.  The default " +
-                    "of %d will be used");
-    registerMessage(MSGID_FIFOCACHE_DESCRIPTION_INCLUDE_FILTERS,
-                    "Specifies a set of search filters that may be used to " +
-                    "indicate which entries should be included in the entry " +
-                    "cache.  Entries that do not match at least one of these " +
-                    "filters will not be stored in the cache.  If no filters " +
-                    "are provided, then any entry will be accepted.  Changes " +
-                    "to this configuration attribute will take effect " +
-                    "immediately, but will not impact existing entries that " +
-                    "are already held in the cache");
-    registerMessage(MSGID_FIFOCACHE_CANNOT_DECODE_INCLUDE_FILTER,
-                    "An error occurred while attempting to decode the value " +
-                    "\"%s\" from attribute " + ATTR_FIFOCACHE_INCLUDE_FILTER +
-                    " of entry %s:  %s.  This filter will not be used when " +
-                    "determining whether to store an entry in the cache");
-    registerMessage(MSGID_FIFOCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS,
-                    "An error occurred while attempting to decode any of the " +
-                    "values from attribute " + ATTR_FIFOCACHE_INCLUDE_FILTER +
-                    " of entry %s.  All entries will be considered eligible " +
-                    "for inclusion in the cache");
-    registerMessage(MSGID_FIFOCACHE_CANNOT_DETERMINE_INCLUDE_FILTERS,
-                    "An error occurred while attempting to determine the " +
-                    "value of the " + ATTR_FIFOCACHE_INCLUDE_FILTER +
-                    " attribute in configuration entry %s:  %s.  All entries " +
-                    "will be considered eligible for inclusion in the cache");
-    registerMessage(MSGID_FIFOCACHE_DESCRIPTION_EXCLUDE_FILTERS,
-                    "Specifies a set of search filters that may be used to " +
-                    "indicate which entries should be excluded from the " +
-                    "entry cache.  Entries that match any of these filters " +
-                    "will not be stored in the cache.  If no filters are " +
-                    "provided, then any entry will be accepted.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately, but will not impact existing entries that " +
-                    "are already held in the cache");
-    registerMessage(MSGID_FIFOCACHE_CANNOT_DECODE_EXCLUDE_FILTER,
-                    "An error occurred while attempting to decode the value " +
-                    "\"%s\" from attribute " + ATTR_FIFOCACHE_EXCLUDE_FILTER +
-                    " of entry %s:  %s.  This filter will not be used when " +
-                    "determining whether to store an entry in the cache");
-    registerMessage(MSGID_FIFOCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS,
-                    "An error occurred while attempting to decode any of the " +
-                    "values from attribute " + ATTR_FIFOCACHE_EXCLUDE_FILTER +
-                    " of entry %s.  All entries will be considered eligible " +
-                    "for inclusion in the cache");
-    registerMessage(MSGID_FIFOCACHE_CANNOT_DETERMINE_EXCLUDE_FILTERS,
-                    "An error occurred while attempting to determine the " +
-                    "value of the " + ATTR_FIFOCACHE_EXCLUDE_FILTER +
-                    " attribute in configuration entry %s:  %s.  All entries " +
-                    "will be considered eligible for inclusion in the cache");
-    registerMessage(MSGID_FIFOCACHE_INVALID_MAX_MEMORY_PCT,
-                    "The " + ATTR_FIFOCACHE_MAX_MEMORY_PCT + " attribute of " +
-                    "entry %s, which holds the maximum percentage of JVM " +
-                    "memory available for use in the entry cache, has an " +
-                    "invalid value:  %s.  Its value must be an integer " +
-                    "between 1 and 100");
-    registerMessage(MSGID_FIFOCACHE_INVALID_MAX_ENTRIES,
-                    "The " + ATTR_FIFOCACHE_MAX_ENTRIES + " attribute of " +
-                    "entry %s, which specifies the maximum number of entries " +
-                    "that may be held in the entry cache, has an invalid " +
-                    "value:  %s.  Its value must be a positive integer, or " +
-                    "zero to indicate that no limit should be enforced");
-    registerMessage(MSGID_FIFOCACHE_INVALID_LOCK_TIMEOUT,
-                    "The " + ATTR_FIFOCACHE_LOCK_TIMEOUT + " attribute of " +
-                    "entry %s, which specifies the maximum length of time in " +
-                    "milliseconds that the cache should block while " +
-                    "attempting to obtain a lock on an entry, has an invalid " +
-                    "value:  %s.  Its value must be a positive integer, or " +
-                    "zero to indicate that it should never block");
-    registerMessage(MSGID_FIFOCACHE_INVALID_INCLUDE_FILTER,
-                    "The " + ATTR_FIFOCACHE_INCLUDE_FILTER + " attribute of " +
-                    "entry %s, which specifies a set of search filters that " +
-                    "may be used to control which entries are included in " +
-                    "the cache, has an invalid value of \"%s\":  %s");
-    registerMessage(MSGID_FIFOCACHE_INVALID_INCLUDE_FILTERS,
-                    "The " + ATTR_FIFOCACHE_INCLUDE_FILTER + " attribute of " +
-                    "entry %s, which specifies a set of search filters that " +
-                    "may be used to control which entries are included in " +
-                    "the cache, has an invalid value:  %s");
-    registerMessage(MSGID_FIFOCACHE_INVALID_EXCLUDE_FILTER,
-                    "The " + ATTR_FIFOCACHE_EXCLUDE_FILTER + " attribute of " +
-                    "entry %s, which specifies a set of search filters that " +
-                    "may be used to control which entries are excluded from " +
-                    "the cache, has an invalid value of \"%s\":  %s");
-    registerMessage(MSGID_FIFOCACHE_INVALID_EXCLUDE_FILTERS,
-                    "The " + ATTR_FIFOCACHE_EXCLUDE_FILTER + " attribute of " +
-                    "entry %s, which specifies a set of search filters that " +
-                    "may be used to control which entries are excluded from " +
-                    "the cache, has an invalid value:  %s");
-    registerMessage(MSGID_FIFOCACHE_UPDATED_MAX_MEMORY_PCT,
-                    "The amount of memory that may be used for the entry " +
-                    "cache has been updated to %d percent of the total " +
-                    "memory available to the JVM, or approximately %d " +
-                    "bytes.  If this percentage has been reduced, it may " +
-                    "take some time for entries to be purged so that the " +
-                    "current cache memory consumption can reflect this new " +
-                    "setting");
-    registerMessage(MSGID_FIFOCACHE_UPDATED_MAX_ENTRIES,
-                    "The number of entries that may be held in the entry " +
-                    "cache has been updated to %d.  If this value has been " +
-                    "reduced, it may take some time for entries to be purged " +
-                    "so that the cache can reflect this new setting");
-    registerMessage(MSGID_FIFOCACHE_UPDATED_LOCK_TIMEOUT,
-                    "The lock timeout that will be used to determine the " +
-                    "length of time that the cache should block while " +
-                    "attempting to acquire a lock for an entry has been " +
-                    "set to %d milliseconds");
-    registerMessage(MSGID_FIFOCACHE_UPDATED_INCLUDE_FILTERS,
-                    "The set of search filters that will control which " +
-                    "entries may be included in the cache has been updated");
-    registerMessage(MSGID_FIFOCACHE_UPDATED_EXCLUDE_FILTERS,
-                    "The set of search filters that will control which " +
-                    "entries should be be excluded from the cache has been " +
-                    "updated");
-
-
-    registerMessage(MSGID_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER,
-                    "The identity mapper with configuration entry DN %s as " +
-                    "specified for use with the password modify extended " +
-                    "operation defined in entry %s either does not exist or " +
-                    "is not enabled.  The identity mapper is a required " +
-                    "component, and the password modify extended operation " +
-                    "will not be enabled");
-    registerMessage(MSGID_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER,
-                    "An error occurred while attempting to determine the " +
-                    "identity mapper to use in conjunction with the password " +
-                    "modify extended operation defined in configuration " +
-                    "entry %s:  %s.  The password modify extended operation " +
-                    "will not be enabled for use in the server");
-    registerMessage(MSGID_EXTOP_PASSMOD_ILLEGAL_REQUEST_ELEMENT_TYPE,
-                    "The password modify extended request sequence included " +
-                    "an ASN.1 element of an invalid type:  %s");
-    registerMessage(MSGID_EXTOP_PASSMOD_CANNOT_DECODE_REQUEST,
-                    "An unexpected error occurred while attempting to decode " +
-                    "the password modify extended request sequence:  %s");
-    registerMessage(MSGID_EXTOP_PASSMOD_NO_AUTH_OR_USERID,
-                    "The password modify extended request cannot be " +
-                    "processed because it does not contain an authorization " +
-                    "ID and the underlying connection is not authenticated");
-    registerMessage(MSGID_EXTOP_PASSMOD_CANNOT_LOCK_USER_ENTRY,
-                    "The password modify extended request cannot be " +
-                    "processed because the server was unable to obtain a " +
-                    "write lock on user entry %s after multiple attempts");
-    registerMessage(MSGID_EXTOP_PASSMOD_CANNOT_DECODE_AUTHZ_DN,
-                    "The password modify extended request cannot be " +
-                    "processed because the server cannot decode \"%s\" as a " +
-                    "valid DN for use in the authorization ID for the " +
-                    "operation");
-    registerMessage(MSGID_EXTOP_PASSMOD_CANNOT_MAP_USER,
-                    "The provided authorization ID string \"%s\" could not " +
-                    "be mapped to any user in the directory");
-    registerMessage(MSGID_EXTOP_PASSMOD_ERROR_MAPPING_USER,
-                    "An error occurred while attempting to map authorization " +
-                    "ID string \"%s\" to a user entry:  %s");
-    registerMessage(MSGID_EXTOP_PASSMOD_INVALID_AUTHZID_STRING,
-                    "The password modify extended request cannot be " +
-                    "processed because it contained an invalid authorization " +
-                    "ID that did not start with either \"dn:\" or \"u:\".  " +
-                    "The provided authorization ID string was \"%s\"");
-    registerMessage(MSGID_EXTOP_PASSMOD_NO_USER_ENTRY_BY_AUTHZID,
-                    "The password modify extended request cannot be " +
-                    "processed because it was not possible to identify the " +
-                    "user entry to update based on the authorization DN of " +
-                    "\"%s\"");
-    registerMessage(MSGID_EXTOP_PASSMOD_NO_DN_BY_AUTHZID,
-                    "The password modify extended request cannot be " +
-                    "processed because the provided authorization UID of " +
-                    "\"%s\" did not match any entries in the directory");
-    registerMessage(MSGID_EXTOP_PASSMOD_MULTIPLE_ENTRIES_BY_AUTHZID,
-                    "The password modify extended request cannot be " +
-                    "processed because the provided authorization UID of " +
-                    "\"%s\" matched more than one entry in the directory");
-    registerMessage(MSGID_EXTOP_PASSMOD_INVALID_OLD_PASSWORD,
-                    "The password modify extended operation cannot be " +
-                    "processed because the current password provided for the " +
-                    "user is invalid");
-    registerMessage(MSGID_EXTOP_PASSMOD_CANNOT_GET_PW_POLICY,
-                    "An error occurred while attempting to get the " +
-                    "password policy for user %s:  %s");
-    registerMessage(MSGID_EXTOP_PASSMOD_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to perform " +
-                    "password reset operations");
-    registerMessage(MSGID_EXTOP_PASSMOD_ACCOUNT_DISABLED,
-                    "The user account has been administratively disabled");
-    registerMessage(MSGID_EXTOP_PASSMOD_ACCOUNT_LOCKED,
-                    "The user account is locked");
-    registerMessage(MSGID_EXTOP_PASSMOD_REQUIRE_CURRENT_PW,
-                    "The current password must be provided for self password " +
-                    "changes");
-    registerMessage(MSGID_EXTOP_PASSMOD_SECURE_AUTH_REQUIRED,
-                    "Password modify operations that supply the user's " +
-                    "current password must be performed over a secure " +
-                    "communication channel");
-    registerMessage(MSGID_EXTOP_PASSMOD_USER_PW_CHANGES_NOT_ALLOWED,
-                    "End users are not allowed to change their passwords");
-    registerMessage(MSGID_EXTOP_PASSMOD_SECURE_CHANGES_REQUIRED,
-                    "Password changes must be performed over a secure " +
-                    "communication channel");
-    registerMessage(MSGID_EXTOP_PASSMOD_IN_MIN_AGE,
-                    "The password cannot be changed because the previous " +
-                    "password change was too recent");
-    registerMessage(MSGID_EXTOP_PASSMOD_PASSWORD_IS_EXPIRED,
-                    "The password cannot be changed because it is expired");
-    registerMessage(MSGID_EXTOP_PASSMOD_NO_PW_GENERATOR,
-                    "No new password was provided, and no password generator " +
-                    "has been defined that may be used to automatically " +
-                    "create a new password");
-    registerMessage(MSGID_EXTOP_PASSMOD_CANNOT_GENERATE_PW,
-                    "An error occurred while attempting to create a new " +
-                    "password using the password generator:  %s");
-    registerMessage(MSGID_EXTOP_PASSMOD_PRE_ENCODED_NOT_ALLOWED,
-                    "The password policy does not allow users to supply " +
-                    "pre-encoded passwords");
-    registerMessage(MSGID_EXTOP_PASSMOD_UNACCEPTABLE_PW,
-                    "The provided new password failed the validation checks " +
-                    "defined in the server:  %s");
-    registerMessage(MSGID_EXTOP_PASSMOD_PW_IN_HISTORY,
-                    "The provided new password was already contained in the " +
-                    "password history");
-    registerMessage(MSGID_EXTOP_PASSMOD_CANNOT_ENCODE_PASSWORD,
-                    "Unable to encode the provided password using the " +
-                    "default scheme(s):  %s");
-    registerMessage(MSGID_EXTOP_PASSMOD_NOOP,
-                    "The password modify operation was not actually " +
-                    "performed in the Directory Server because the LDAP " +
-                    "no-op control was present in the request");
-    registerMessage(MSGID_EXTOP_PASSMOD_CANNOT_UPDATE_PWP_STATE,
-                    "An error occurred while attempting to update the " +
-                    "password policy state information for user %s as part " +
-                    "of a password modify extended operation (result " +
-                    "code='%s', error message='%s')");
-
-
-    registerMessage(MSGID_FILE_KEYMANAGER_DESCRIPTION_FILE,
-                    "Specifies the path to the file containing the Directory " +
-                    "Server keystore information.  Changes to this " +
-                    "configuration attribute will take effect the next time " +
-                    "that the key manager is accessed");
-    registerMessage(MSGID_FILE_KEYMANAGER_NO_FILE_ATTR,
-                    "The configuration entry %s that defines a file-based " +
-                    "key manager does not contain attribute " +
-                    ATTR_KEYSTORE_FILE + " that should hold the path to the " +
-                    "keystore file");
-    registerMessage(MSGID_FILE_KEYMANAGER_NO_SUCH_FILE,
-                    "The keystore file %s specified in attribute " +
-                    ATTR_KEYSTORE_FILE + " of configuration entry %s does " +
-                    " not exist");
-    registerMessage(MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_KEYSTORE_FILE + " in configuration entry %s:  %s");
-    registerMessage(MSGID_FILE_KEYMANAGER_DESCRIPTION_TYPE,
-                    "Specifies the keystore type for the Directory Server " +
-                    "keystore.  Valid values should always include 'JKS' and " +
-                    "'PKCS12', but different implementations may allow other " +
-                    "values as well.  If no value is provided, then the " +
-                    "JVM-default value will be used.  Changes to this " +
-                    "configuration attribute will take effect the next time " +
-                    "that the key manager is accessed");
-    registerMessage(MSGID_FILE_KEYMANAGER_INVALID_TYPE,
-                    "The keystore type %s specified in attribute " +
-                    ATTR_KEYSTORE_TYPE + " of configuration entry %s is not " +
-                    "valid:  %s");
-    registerMessage(MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_TYPE,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_KEYSTORE_TYPE + " in configuration entry %s:  %s");
-    registerMessage(MSGID_FILE_KEYMANAGER_DESCRIPTION_PIN_PROPERTY,
-                    "Specifies the name of the Java property that contains " +
-                    "the clear-text PIN needed to access the file-based " +
-                    "key manager.  Changes to this configuration attribute " +
-                    "will take effect the next time that the key manager is " +
-                    "accessed");
-    registerMessage(MSGID_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET,
-                    "Java property %s which is specified in attribute " +
-                    ATTR_KEYSTORE_PIN_PROPERTY + " of configuration entry %s " +
-                    "should contain the PIN needed to access the file-based " +
-                    "key manager, but this property is not set");
-    registerMessage(MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_PROPERTY,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_KEYSTORE_PIN_PROPERTY + " in configuration entry " +
-                    "%s:  %s");
-    registerMessage(MSGID_FILE_KEYMANAGER_DESCRIPTION_PIN_ENVAR,
-                    "Specifies the name of the environment variable that " +
-                    "contains the clear-text PIN needed to access the " +
-                    "file-based key manager.  Changes to this configuration " +
-                    "attribute will take effect the next time that the " +
-                    "key manager is accessed");
-    registerMessage(MSGID_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET,
-                    "Environment variable %s which is specified in attribute " +
-                    ATTR_KEYSTORE_PIN_ENVAR + " of configuration entry %s " +
-                    "should contain the PIN needed to access the file-based " +
-                    "key manager, but this property is not set");
-    registerMessage(MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_ENVAR,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_KEYSTORE_PIN_ENVAR + " in configuration entry %s:  " +
-                    "%s");
-    registerMessage(MSGID_FILE_KEYMANAGER_DESCRIPTION_PIN_FILE,
-                    "Specifies the path to the text file whose only contents " +
-                    "should be a single line containing the clear-text PIN " +
-                    "needed to access the file-based key manager.  Changes " +
-                    "to this configuration attribute will take effect the " +
-                    "next time that the key manager is accessed");
-    registerMessage(MSGID_FILE_KEYMANAGER_PIN_NO_SUCH_FILE,
-                    "File %s specified in attribute " + ATTR_KEYSTORE_PIN_FILE +
-                    " of configuration entry %s should contain the PIN " +
-                    "needed to access the file-based key manager, but this " +
-                    "file does not exist");
-    registerMessage(MSGID_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ,
-                    "An error occurred while trying to read the keystore PIN " +
-                    "from file %s specified in configuration attribute " +
-                    ATTR_KEYSTORE_PIN_FILE + " of configuration entry %s:  " +
-                    "%s");
-    registerMessage(MSGID_FILE_KEYMANAGER_PIN_FILE_EMPTY,
-                    "File %s specified in attribute " + ATTR_KEYSTORE_PIN_FILE +
-                    " of configuration entry %s should contain the PIN " +
-                    "needed to access the file-based key manager, but this " +
-                    "file is empty");
-    registerMessage(MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_FILE,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_KEYSTORE_PIN_FILE + " in configuration entry %s:  " +
-                    "%s");
-    registerMessage(MSGID_FILE_KEYMANAGER_DESCRIPTION_PIN_ATTR,
-                    "Specifies the clear-text PIN needed to access the " +
-                    "file-based key manager.  Changes to this configuration " +
-                    "attribute will take effect the next time that the " +
-                    "key manager is accessed");
-    registerMessage(MSGID_FILE_KEYMANAGER_CANNOT_DETERMINE_PIN_FROM_ATTR,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_KEYSTORE_PIN + " in configuration entry %s:  %s");
-    registerMessage(MSGID_FILE_KEYMANAGER_NO_PIN,
-                    "Configuration entry %s does not specify a means of " +
-                    "determining the PIN needed to access the contents of " +
-                    "the file-based key manager.  The PIN may be specified " +
-                    "in a Java property (named by attribute " +
-                    ATTR_KEYSTORE_PIN_PROPERTY + "), an environment " +
-                    "variable (named by attribute " + ATTR_KEYSTORE_PIN_ENVAR +
-                    "), a text file (named by attribute " +
-                    ATTR_KEYSTORE_PIN_FILE + "), or directly in the entry " +
-                    "using attribute " + ATTR_KEYSTORE_PIN + "");
-    registerMessage(MSGID_FILE_KEYMANAGER_CANNOT_LOAD,
-                    "An error occurred while trying to load the keystore " +
-                    "contents from file %s:  %s");
-    registerMessage(MSGID_FILE_KEYMANAGER_CANNOT_CREATE_FACTORY,
-                    "An error occurred while trying to create a key manager " +
-                    "factory to access the contents of keystore file %s:  %s");
-    registerMessage(MSGID_FILE_KEYMANAGER_UPDATED_FILE,
-                    "The value of the " + ATTR_KEYSTORE_FILE +
-                    " attribute in configuration entry %s has been updated " +
-                    "to %s.  The new value will take effect the next time " +
-                    "the key manager is accessed");
-    registerMessage(MSGID_FILE_KEYMANAGER_UPDATED_TYPE,
-                    "The value of the " + ATTR_KEYSTORE_TYPE +
-                    " attribute in configuration entry %s has been updated " +
-                    "to %s.  The new value will take effect the next time " +
-                    "the key manager is accessed");
-    registerMessage(MSGID_FILE_KEYMANAGER_UPDATED_PIN,
-                    "The PIN to use to access the file-based key manager has " +
-                    "been updated.  The new value will take effect the next " +
-                    "time the key manager is accessed");
-
-
-    registerMessage(MSGID_PKCS11_KEYMANAGER_DESCRIPTION_PIN_PROPERTY,
-                    "Specifies the name of the Java property that contains " +
-                    "the clear-text PIN needed to access the PKCS#11 key " +
-                    "manager.  Changes to this configuration attribute will " +
-                    "take effect the next time that the key manager is " +
-                    "accessed");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET,
-                    "Java property %s which is specified in attribute " +
-                    ATTR_KEYSTORE_PIN_PROPERTY + " of configuration entry %s " +
-                    "should contain the PIN needed to access the PKCS#11 key " +
-                    "manager, but this property is not set");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_PROPERTY,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_KEYSTORE_PIN_PROPERTY + " in configuration entry " +
-                    "%s:  %s");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_DESCRIPTION_PIN_ENVAR,
-                    "Specifies the name of the environment variable that " +
-                    "contains the clear-text PIN needed to access the " +
-                    "PKCS#11 key manager.  Changes to this configuration " +
-                    "attribute will take effect the next time that the key " +
-                    "manager is accessed");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET,
-                    "Environment variable %s which is specified in attribute " +
-                    ATTR_KEYSTORE_PIN_ENVAR + " of configuration entry %s " +
-                    "should contain the PIN needed to access the PKCS#11 " +
-                    "key manager, but this property is not set");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_ENVAR,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_KEYSTORE_PIN_ENVAR + " in configuration entry %s:  " +
-                    "%s");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_DESCRIPTION_PIN_FILE,
-                    "Specifies the path to the text file whose only contents " +
-                    "should be a single line containing the clear-text PIN " +
-                    "needed to access the PKCS#11 key manager.  Changes to " +
-                    "this configuration attribute will take effect the next " +
-                    "time that the key manager is accessed");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE,
-                    "File %s specified in attribute " + ATTR_KEYSTORE_PIN_FILE +
-                    " of configuration entry %s should contain the PIN " +
-                    "needed to access the PKCS#11 key manager, but this file " +
-                    "does not exist");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_PIN_FILE_CANNOT_READ,
-                    "An error occurred while trying to read the keystore PIN " +
-                    "from file %s specified in configuration attribute " +
-                    ATTR_KEYSTORE_PIN_FILE + " of configuration entry %s:  " +
-                    "%s");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_PIN_FILE_EMPTY,
-                    "File %s specified in attribute " + ATTR_KEYSTORE_PIN_FILE +
-                    " of configuration entry %s should contain the PIN " +
-                    "needed to access the PKCS#11 key manager, but this file " +
-                    "is empty");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_FILE,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_KEYSTORE_PIN_FILE + " in configuration entry %s:  " +
-                    "%s");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_DESCRIPTION_PIN_ATTR,
-                    "Specifies the clear-text PIN needed to access the " +
-                    "PKCS#11 key manager.  Changes to this configuration " +
-                    "attribute will take effect the next time that the key " +
-                    "manager is accessed");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_CANNOT_DETERMINE_PIN_FROM_ATTR,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_KEYSTORE_PIN + " in configuration entry %s:  %s");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_NO_PIN,
-                    "Configuration entry %s does not specify a means of " +
-                    "determining the PIN needed to access the contents of " +
-                    "the PKCS#11 key manager.  The PIN may be specified in a " +
-                    "Java property (named by attribute " +
-                    ATTR_KEYSTORE_PIN_PROPERTY + "), an environment " +
-                    "variable (named by attribute " + ATTR_KEYSTORE_PIN_ENVAR +
-                    "), a text file (named by attribute " +
-                    ATTR_KEYSTORE_PIN_FILE + "), or directly in the entry " +
-                    "using attribute " + ATTR_KEYSTORE_PIN + "");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_CANNOT_LOAD,
-                    "An error occurred while trying to access the PKCS#11 " +
-                    "key manager:  %s");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_CANNOT_CREATE_FACTORY,
-                    "An error occurred while trying to create a key manager " +
-                    "factory to access the contents of the PKCS#11 " +
-                    "keystore:  %s");
-    registerMessage(MSGID_PKCS11_KEYMANAGER_UPDATED_PIN,
-                    "The PIN to use to access the PKCS#11 key manager has " +
-                    "been updated.  The new value will take effect the next " +
-                    "time the key manager is accessed");
-
-
-    registerMessage(MSGID_FILE_TRUSTMANAGER_DESCRIPTION_FILE,
-                    "Specifies the path to the file containing the Directory " +
-                    "Server trust store information.  Changes to this " +
-                    "configuration attribute will take effect the next time " +
-                    "that the trust manager is accessed");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_NO_FILE_ATTR,
-                    "The configuration entry %s that defines a file-based " +
-                    "trust manager does not contain attribute " +
-                    ATTR_TRUSTSTORE_FILE + " that should hold the path to " +
-                    "the trust store file");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_NO_SUCH_FILE,
-                    "The trust store file %s specified in attribute " +
-                    ATTR_TRUSTSTORE_FILE + " of configuration entry %s does " +
-                    " not exist");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_FILE,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_TRUSTSTORE_FILE + " in configuration entry %s:  %s");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_DESCRIPTION_TYPE,
-                    "Specifies the keystore type for the Directory Server " +
-                    "trust store.  Valid values should always include 'JKS' " +
-                    "and 'PKCS12', but different implementations may allow " +
-                    "other values as well.  If no value is provided, then " +
-                    "the JVM-default value will be used.  Changes to this " +
-                    "configuration attribute will take effect the next time " +
-                    "that the trust manager is accessed");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_INVALID_TYPE,
-                    "The trust store type %s specified in attribute " +
-                    ATTR_TRUSTSTORE_TYPE + " of configuration entry %s is " +
-                    "not valid:  %s");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_TYPE,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_TRUSTSTORE_TYPE + " in configuration entry %s:  %s");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_DESCRIPTION_PIN_PROPERTY,
-                    "Specifies the name of the Java property that contains " +
-                    "the clear-text PIN needed to access the file-based " +
-                    "trust manager.  Changes to this configuration attribute " +
-                    "will take effect the next time that the trust manager " +
-                    "is accessed");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET,
-                    "Java property %s which is specified in attribute " +
-                    ATTR_TRUSTSTORE_PIN_PROPERTY + " of configuration entry " +
-                    "%s should contain the PIN needed to access the " +
-                    "file-based trust manager, but this property is not set");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_PROPERTY,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_TRUSTSTORE_PIN_PROPERTY + " in configuration entry " +
-                    "%s:  %s");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_DESCRIPTION_PIN_ENVAR,
-                    "Specifies the name of the environment variable that " +
-                    "contains the clear-text PIN needed to access the " +
-                    "file-based trust manager.  Changes to this " +
-                    "configuration attribute will take effect the next time " +
-                    "that the trust manager is accessed");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET,
-                    "Environment variable %s which is specified in attribute " +
-                    ATTR_TRUSTSTORE_PIN_ENVAR + " of configuration entry %s " +
-                    "should contain the PIN needed to access the file-based " +
-                    "trust manager, but this property is not set");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_ENVAR,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_TRUSTSTORE_PIN_ENVAR + " in configuration entry " +
-                    "%s:  %s");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_DESCRIPTION_PIN_FILE,
-                    "Specifies the path to the text file whose only contents " +
-                    "should be a single line containing the clear-text PIN " +
-                    "needed to access the file-based trust manager.  Changes " +
-                    "to this configuration attribute will take effect the " +
-                    "next time that the trust manager is accessed");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE,
-                    "File %s specified in attribute " +
-                    ATTR_TRUSTSTORE_PIN_FILE + " of configuration entry %s " +
-                    "should contain the PIN needed to access the file-based " +
-                    "trust manager, but this file does not exist");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ,
-                    "An error occurred while trying to read the trust store " +
-                    "PIN from file %s specified in configuration attribute " +
-                    ATTR_TRUSTSTORE_PIN_FILE + " of configuration entry %s:  " +
-                    "%s");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_PIN_FILE_EMPTY,
-                    "File %s specified in attribute " +
-                    ATTR_TRUSTSTORE_PIN_FILE + " of configuration entry %s " +
-                    "should contain the PIN needed to access the file-based " +
-                    "trust manager, but this file is empty");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_FILE,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_TRUSTSTORE_PIN_FILE + " in configuration entry %s:  " +
-                    "%s");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_DESCRIPTION_PIN_ATTR,
-                    "Specifies the clear-text PIN needed to access the " +
-                    "file-based trust manager.  Changes to this " +
-                    "configuration attribute will take effect the next time " +
-                    "that the trust manager is accessed");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_CANNOT_DETERMINE_PIN_FROM_ATTR,
-                    "An unexpected error occurred while trying to determine " +
-                    "the value of configuration attribute " +
-                    ATTR_TRUSTSTORE_PIN + " in configuration entry %s:  %s");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_CANNOT_LOAD,
-                    "An error occurred while trying to load the trust store " +
-                    "contents from file %s:  %s");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_CANNOT_CREATE_FACTORY,
-                    "An error occurred while trying to create a trust " +
-                    "manager factory to access the contents of trust store " +
-                    "file %s:  %s");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_UPDATED_FILE,
-                    "The value of the " + ATTR_TRUSTSTORE_FILE +
-                    " attribute in configuration entry %s has been updated " +
-                    "to %s.  The new value will take effect the next time " +
-                    "the trust manager is accessed");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_UPDATED_TYPE,
-                    "The value of the " + ATTR_TRUSTSTORE_TYPE +
-                    " attribute in configuration entry %s has been updated " +
-                    "to %s.  The new value will take effect the next time " +
-                    "the trust manager is accessed");
-    registerMessage(MSGID_FILE_TRUSTMANAGER_UPDATED_PIN,
-                    "The PIN to use to access the file-based trust manager " +
-                    "has been updated.  The new value will take effect the " +
-                    "next time the trust manager is accessed");
-
-
-    registerMessage(MSGID_NULL_SECURITY_PROVIDER_READ_ERROR,
-                    "An unexpected error occurred while attempting to read " +
-                    "data from the client using the null connection security " +
-                    "provider:  %s");
-    registerMessage(MSGID_NULL_SECURITY_PROVIDER_WRITE_ERROR,
-                    "An unexpected error occurred while attempting to write " +
-                    "data to the client using the null connection security " +
-                    "provider:  %s");
-
-
-    registerMessage(MSGID_TLS_SECURITY_PROVIDER_CANNOT_INITIALIZE,
-                    "An error occurred while attempting to initialize the " +
-                    "SSL context for use in the TLS connection security " +
-                    "provider:  %s");
-    registerMessage(MSGID_TLS_SECURITY_PROVIDER_UNEXPECTED_UNWRAP_STATUS,
-                    "An unexpected status result was returned to the TLS " +
-                    "connection security provider when attempting to unwrap " +
-                    "encrypted data read from the client:  %s");
-    registerMessage(MSGID_TLS_SECURITY_PROVIDER_READ_ERROR,
-                    "An unexpected error occurred while attempting to read " +
-                    "data from the client using the TLS connection security " +
-                    "provider:  %s");
-    registerMessage(MSGID_TLS_SECURITY_PROVIDER_WRITE_NEEDS_UNWRAP,
-                    "An attempt was made to write data to a client through " +
-                    "the TLS connection security provider, but the SSL " +
-                    "indicated that it was necessary to read data from the " +
-                    "client in order to perform the SSL negotiation, but no " +
-                    "data was available for reading.  This is an unexpected " +
-                    "condition, and it is not possible to continue " +
-                    "processing on this client connection without the " +
-                    "potential for blocking other client connections, so " +
-                    "connection will be closed");
-    registerMessage(MSGID_TLS_SECURITY_PROVIDER_UNEXPECTED_WRAP_STATUS,
-                    "An unexpected status result was returned to the TLS " +
-                    "connection security provider when attempting to wrap " +
-                    "clear-text data for writing to the client:  %s");
-    registerMessage(MSGID_TLS_SECURITY_PROVIDER_WRITE_ERROR,
-                    "An unexpected error occurred while attempting to write " +
-                    "data to the client using the TLS connection security " +
-                    "provider:  %s");
-
-
-    registerMessage(MSGID_SEDCM_NO_PEER_CERTIFICATE,
-                    "Could not map the provided certificate chain to a user " +
-                    "entry because no peer certificate was available");
-    registerMessage(MSGID_SEDCM_PEER_CERT_NOT_X509,
-                    "Could not map the provided certificate chain to a user " +
-                    "because the peer certificate was not an X.509 " +
-                    "certificate (peer certificate format was %s)");
-    registerMessage(MSGID_SEDCM_CANNOT_DECODE_SUBJECT_AS_DN,
-                    "Could not map the provided certificate chain to a user " +
-                    "because the peer certificate subject \"%s\" could not " +
-                    "be decoded as an LDAP DN:  %s");
-    registerMessage(MSGID_SEDCM_CANNOT_GET_ENTRY,
-                    "Could not map the provided certificate chain to a user " +
-                    "because an error occurred while attempting to retrieve " +
-                    "the user entry with DN \"%s\":  %s");
-    registerMessage(MSGID_SEDCM_NO_USER_FOR_DN,
-                    "Could not map the provided certificate chain to a user " +
-                    "because no user entry exists with a DN of %s");
-    registerMessage(MSGID_SEDCM_CANNOT_LOCK_ENTRY,
-                    "The Directory Server was unable to obtain a read lock " +
-                    "on user entry %s in order to retrieve that entry");
-
-
-
-    registerMessage(MSGID_SASLEXTERNAL_NO_CLIENT_CONNECTION,
-                    "The SASL EXTERNAL bind request could not be processed " +
-                    "because the associated bind request does not have a " +
-                    "reference to the client connection");
-    registerMessage(MSGID_SASLEXTERNAL_NO_SECURITY_PROVIDER,
-                    "The SASL EXTERNAL bind request could not be processed " +
-                    "because the associated client connection does not " +
-                    "have a security provider");
-    registerMessage(MSGID_SASLEXTERNAL_CLIENT_NOT_USING_TLS_PROVIDER,
-                    "The SASL EXTERNAL bind request could not be processed " +
-                    "because the client connection is not using the TLS " +
-                    "security provider (client security provider is %s).  " +
-                    "The TLS security provider is required for clients that " +
-                    "wish to use SASL EXTERNAL authentication");
-    registerMessage(MSGID_SASLEXTERNAL_NO_CLIENT_CERT,
-                    "The SASL EXTERNAL bind request could not be processed " +
-                    "because the client did not present an certificate chain " +
-                    "during SSL/TLS negotiation");
-    registerMessage(MSGID_SASLEXTERNAL_NO_MAPPING,
-                    "The SASL EXTERNAL bind request failed because the " +
-                    "certificate chain presented by the client during " +
-                    "SSL/TLS negotiation could not be mapped to a user " +
-                    "entry in the Directory Server");
-    registerMessage(MSGID_SASLEXTERNAL_DESCRIPTION_VALIDATION_POLICY,
-                    "Indicates whether the SASL EXTERNAL mechanism handler " +
-                    "should attempt to validate the peer certificate against " +
-                    "a certificate in the corresponding user's entry.  The " +
-                    "value must be one of \"true\" (which will always " +
-                    "attempt to validate the certificate and will fail if " +
-                    "no certificates are present), \"false\" (which will " +
-                    "never attempt to validate the peer certificate), and " +
-                    "\"ifpresent\" (which will validate the peer certificate " +
-                    "if there are one or more certificates in the user's " +
-                    "entry, but will not fail if there are no certificates " +
-                    "in the entry.  Changes to this configuration attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_SASLEXTERNAL_INVALID_VALIDATION_VALUE,
-                    "Configuration entry %s has an invalid value %s for " +
-                    "attribute " + ATTR_CLIENT_CERT_VALIDATION_POLICY +
-                    ".  The value must be one of \"always\", \"never\", or " +
-                    "\"ifpresent\"");
-    registerMessage(MSGID_SASLEXTERNAL_CANNOT_GET_VALIDATION_POLICY,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " +
-                    ATTR_CLIENT_CERT_VALIDATION_POLICY +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLEXTERNAL_DESCRIPTION_CERTIFICATE_ATTRIBUTE,
-                    "Specifies the name of the attribute that will be used " +
-                    "to hold the certificate information in user entries " +
-                    "for the purpose of validation.  This must specify the " +
-                    "name of a valid attribute type defined in the server " +
-                    "schema.  Changes to this configuration attribute will " +
-                    "take effect immediately");
-    registerMessage(MSGID_SASLEXTERNAL_CANNOT_GET_CERT_ATTR,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " +
-                    ATTR_VALIDATION_CERT_ATTRIBUTE +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLEXTERNAL_UNKNOWN_CERT_ATTR,
-                    "The attribute %s referenced in configuration attribute " +
-                    ATTR_VALIDATION_CERT_ATTRIBUTE +
-                    " in configuration entry %s does not exist in the " +
-                    "Directory Server schema.  The attribute that is to be " +
-                    "used for certificate validation during SASL EXTERNAL " +
-                    "authentication must be defined in the server schema");
-    registerMessage(MSGID_SASLEXTERNAL_DESCRIPTION_CERT_MAPPER_DN,
-                    "Specifies the DN of the configuration entry that " +
-                    "defines the certificate mapper to use when mapping a " +
-                    "certificate to a user entry.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_SASLEXTERNAL_NO_CERTIFICATE_MAPPER_DN,
-                    "Configuration entry %s does not contain attribute " +
-                    ATTR_CERTMAPPER_DN + " which is required to specify " +
-                    "which certificate mapper should be used to map " +
-                    "certificates to user entries");
-    registerMessage(MSGID_SASLEXTERNAL_INVALID_CERTIFICATE_MAPPER_DN,
-                    "Configuration entry %s contains a certificate mapper DN " +
-                    "of %s, but no such certificate mapper is enabled for " +
-                    "use in the Directory Server");
-    registerMessage(MSGID_SASLEXTERNAL_CANNOT_GET_CERT_MAPPER_DN,
-                    "An error occurred while attempting to retrieve the " +
-                    "certificate mapper DN from configuration entry %s:  %s");
-    registerMessage(MSGID_SASLEXTERNAL_NO_CERT_IN_ENTRY,
-                    "Unable to authenticate via SASL EXTERNAL because the " +
-                    "mapped user entry %s does not have any certificates " +
-                    "with which to verify the presented peer certificate");
-    registerMessage(MSGID_SASLEXTERNAL_PEER_CERT_NOT_FOUND,
-                    "Unable to authenticate via SASL EXTERNAL because the " +
-                    "mapped user entry %s did not contain the peer " +
-                    "certificate presented by the client");
-    registerMessage(MSGID_SASLEXTERNAL_CANNOT_VALIDATE_CERT,
-                    "An error occurred while attempting to validate the peer " +
-                    "certificate presented by the client with a certificate " +
-                    "from the user's entry %s:  %s");
-    registerMessage(MSGID_SASLEXTERNAL_UPDATED_VALIDATION_POLICY,
-                    "Attribute " + ATTR_CLIENT_CERT_VALIDATION_POLICY +
-                    " in configuration entry %s has been updated.  The new " +
-                    "client certificate validation policy is %s");
-    registerMessage(MSGID_SASLEXTERNAL_UPDATED_CERT_ATTR,
-                    "Attribute " + ATTR_VALIDATION_CERT_ATTRIBUTE +
-                    " in configuration entry %s has been updated.  The %s " +
-                    "attribute will now be used when validating peer " +
-                    "certificates");
-    registerMessage(MSGID_SASLEXTERNAL_UPDATED_CERT_MAPPER_DN,
-                    "Attribute " + ATTR_CERTMAPPER_DN +
-                    " in configuration entry %s has been updated.  " +
-                    "Certificate mapper %s will now be used to map " +
-                    "certificates to user entries");
-
-
-    registerMessage(MSGID_STARTTLS_NO_CLIENT_CONNECTION,
-                    "StartTLS cannot be used on this connection because the " +
-                    "underlying client connection is not available");
-    registerMessage(MSGID_STARTTLS_NOT_TLS_CAPABLE,
-                    "StartTLS cannot be used on this client connection " +
-                    "because this connection type is not capable of using " +
-                    "StartTLS to protect its communication");
-    registerMessage(MSGID_STARTTLS_ERROR_ON_ENABLE,
-                    "An unexpected error occurred while attempting to enable " +
-                    "the TLS connection security manager on the client " +
-                    "connection for the purpose of StartTLS:  %s");
-    registerMessage(MSGID_STARTTLS_ERROR_SENDING_CLEAR_RESPONSE,
-                    "An unexpected error occurred while attempting to " +
-                    "send the clear-text response to the client after " +
-                    "starting TLS negotiation:  %s");
-
-
-
-    registerMessage(MSGID_SASLPLAIN_DESCRIPTION_IDENTITY_MAPPER_DN,
-                    "Specifies the DN of the configuration entry that holds " +
-                    "the configuration for the identity mapper that should " +
-                    "be used to map the provided username to a Directory " +
-                    "Server user entry.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_SASLPLAIN_NO_IDENTITY_MAPPER_ATTR,
-                    "Configuration entry %s does not contain attribute " +
-                    ATTR_IDMAPPER_DN + " which specifies the DN of the " +
-                    "identity mapper to use in conjunction with the PLAIN " +
-                    "SASL mechanism.  This is a required attribute");
-    registerMessage(MSGID_SASLPLAIN_NO_SUCH_IDENTITY_MAPPER,
-                    "The identity mapper %s specified in attribute " +
-                    ATTR_IDMAPPER_DN + " of configuration entry %s does not " +
-                    "reference a valid identity mapper configuration that is " +
-                    "enabled for use in the Directory Server");
-    registerMessage(MSGID_SASLPLAIN_CANNOT_GET_IDENTITY_MAPPER,
-                    "An error occurred while trying to process the value " +
-                    "of the " + ATTR_IDMAPPER_DN + " attribute in " +
-                    "configuration entry %s to determine which identity " +
-                    "mapper should be used in conjunction with the PLAIN " +
-                    "SASL mechanism:  %s");
-    registerMessage(MSGID_SASLPLAIN_DESCRIPTION_USERNAME_ATTRIBUTE,
-                    "Specifies the name of the attribute that will be used " +
-                    "to identify user entries based on the authcID/authzID " +
-                    "provided during SASL PLAIN authentication.  This must " +
-                    "specify the name of a valid attribute type defined in " +
-                    "the server schema.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_SASLPLAIN_CANNOT_GET_USERNAME_ATTR,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_USERNAME_ATTRIBUTE +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLPLAIN_UNKNOWN_USERNAME_ATTR,
-                    "The attribute %s referenced in configuration attribute " +
-                    ATTR_USERNAME_ATTRIBUTE + " in configuration entry %s " +
-                    "does not exist in the Directory Server schema.  The " +
-                    "attribute that is to be used for username lookups " +
-                    "during SASL PLAIN authentication must be defined in the " +
-                    "server schema");
-    registerMessage(MSGID_SASLPLAIN_DESCRIPTION_USER_BASE_DN,
-                    "Specifies the base DN that should be used when " +
-                    "searching for entries based on the authcID/authzID " +
-                    "provided during SASL PLAIN authentication.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_SASLPLAIN_CANNOT_GET_USER_BASE_DN,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_USER_BASE_DN +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLPLAIN_NO_SASL_CREDENTIALS,
-                    "SASL PLAIN authentication requires that SASL " +
-                    "credentials be provided but none were included in the " +
-                    "bind request");
-    registerMessage(MSGID_SASLPLAIN_NO_NULLS_IN_CREDENTIALS,
-                    "The SASL PLAIN bind request did not include any NULL " +
-                    "characters.  NULL characters are required as delimiters " +
-                    "between the authorization ID and authentication ID, and " +
-                    "also between the authentication ID and the password");
-    registerMessage(MSGID_SASLPLAIN_NO_SECOND_NULL,
-                    "The SASL PLAIN bind request did not include a second " +
-                    "NULL character in the credentials, which is required as " +
-                    "a delimiter between the authentication ID and the " +
-                    "password");
-    registerMessage(MSGID_SASLPLAIN_ZERO_LENGTH_AUTHCID,
-                    "The authentication ID contained in the SASL PLAIN bind " +
-                    "request had a length of zero characters, which is not " +
-                    "allowed.  SASL PLAIN authentication does not allow an " +
-                    "empty string for use as the authentication ID");
-    registerMessage(MSGID_SASLPLAIN_ZERO_LENGTH_PASSWORD,
-                    "The password contained in the SASL PLAIN bind request " +
-                    "had a length of zero characters, which is not allowed.  " +
-                    "SASL PLAIN authentication does not allow an empty " +
-                    "string for use as the password");
-    registerMessage(MSGID_SASLPLAIN_CANNOT_DECODE_AUTHCID_AS_DN,
-                    "An error occurred while attempting to decode the SASL " +
-                    "PLAIN authentication ID \"%s\" because it appeared to " +
-                    "contain a DN but DN decoding failed:  %s");
-    registerMessage(MSGID_SASLPLAIN_AUTHCID_IS_NULL_DN,
-                    "The authentication ID in the SASL PLAIN bind request " +
-                    "appears to be an empty DN.  This is not allowed");
-    registerMessage(MSGID_SASLPLAIN_CANNOT_GET_ENTRY_BY_DN,
-                    "An error occurred while attempting to retrieve user " +
-                    "entry %s as specified in the DN-based authentication ID " +
-                    "of a SASL PLAIN bind request:  %s");
-    registerMessage(MSGID_SASLPLAIN_CANNOT_MAP_USERNAME,
-                    "An error occurred while attempting to map username %s " +
-                    "to a Directory Server entry:  %s");
-    registerMessage(MSGID_SASLPLAIN_CANNOT_PERFORM_INTERNAL_SEARCH,
-                    "An error occurred while trying to perform an internal " +
-                    "search to retrieve the user entry associated with the " +
-                    "SASL PLAIN authentication ID %s.  The result of that " +
-                    "search was %s with a message of %s");
-    registerMessage(MSGID_SASLPLAIN_MULTIPLE_MATCHING_ENTRIES,
-                    "The internal search attempting to resolve SASL PLAIN " +
-                    "authentication ID %s matched multiple entries.  " +
-                    "Authentication cannot succeed unless the authentication " +
-                    "ID is mapped to exactly one user entry");
-    registerMessage(MSGID_SASLPLAIN_NO_MATCHING_ENTRIES,
-                    "The server was not able to find any user entries for " +
-                    "the provided authentication ID of %s");
-    registerMessage(MSGID_SASLPLAIN_AUTHZID_INVALID_DN,
-                    "The provided authorization ID %s contained an invalid " +
-                    "DN:  %s");
-    registerMessage(MSGID_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES,
-                    "The authenticating user %s does not have sufficient " +
-                    "privileges to specify an alternate authorization ID");
-    registerMessage(MSGID_SASLPLAIN_AUTHZID_NO_SUCH_ENTRY,
-                    "The entry corresponding to authorization DN %s does not " +
-                    "exist in the Directory Server");
-    registerMessage(MSGID_SASLPLAIN_AUTHZID_CANNOT_GET_ENTRY,
-                    "An error occurred while attempting to retrieve entry %s " +
-                    "specified as the authorization ID:  %s");
-    registerMessage(MSGID_SASLPLAIN_AUTHZID_NO_MAPPED_ENTRY,
-                    "No entry corresponding to authorization ID %s was found " +
-                    "in the server");
-    registerMessage(MSGID_SASLPLAIN_AUTHZID_CANNOT_MAP_AUTHZID,
-                    "An error occurred while attempting to map authorization " +
-                    "ID %s to a user entry:  %s");
-    registerMessage(MSGID_SASLPLAIN_NO_PW_ATTR,
-                    "The SASL PLAIN authentication failed because the mapped " +
-                    "user entry did not contain any values for the %s " +
-                    "attribute");
-    registerMessage(MSGID_SASLPLAIN_UNKNOWN_STORAGE_SCHEME,
-                    "A password in the target user entry %s could not be " +
-                    "processed via SASL PLAIN because that password has an " +
-                    "unknown storage scheme of %s");
-    registerMessage(MSGID_SASLPLAIN_INVALID_PASSWORD,
-                    "The provided password is invalid");
-    registerMessage(MSGID_SASLPLAIN_CANNOT_CHECK_PASSWORD_VALIDITY,
-                    "An error occurred while attempting to verify the " +
-                    "password for user %s during SASL PLAIN authentication:  " +
-                    "%s");
-    registerMessage(MSGID_SASLPLAIN_UPDATED_IDENTITY_MAPPER,
-                    "Attribute " + ATTR_IDMAPPER_DN +
-                    " in configuration entry %s has been updated.  The " +
-                    "identity mapper defined in configuration entry %s " +
-                    "will now be used to map usernames to entries when " +
-                    "processing SASL PLAIN bind requests");
-    registerMessage(MSGID_SASLPLAIN_UPDATED_USERNAME_ATTR,
-                    "Attribute " + ATTR_USERNAME_ATTRIBUTE +
-                    " in configuration entry %s has been updated.  The %s " +
-                    "attribute will now be used when looking up user entries " +
-                    "based on their authcID/authzID");
-    registerMessage(MSGID_SASLPLAIN_UPDATED_USER_BASE_DN,
-                    "Attribute " + ATTR_USER_BASE_DN +
-                    " in configuration entry %s has been updated.  The DN %s " +
-                    "will now be used as the search base when looking up " +
-                    "user entries based on their authcID/authzID");
-    registerMessage(MSGID_SASLPLAIN_CANNOT_LOCK_ENTRY,
-                    "The Directory Server was unable to obtain a read lock " +
-                    "on user entry %s in order to retrieve that entry");
-
-
-    registerMessage(MSGID_SASLANONYMOUS_TRACE,
-                    "SASL ANONYMOUS bind operation (conn=%d, op=%d) provided " +
-                    "trace information:  %s");
-
-
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_GET_MESSAGE_DIGEST,
-                    "An unexpected error occurred while attempting to obtain " +
-                    "an MD5 digest engine for use by the CRAM-MD5 SASL " +
-                    "handler:  %s");
-    registerMessage(MSGID_SASLCRAMMD5_DESCRIPTION_IDENTITY_MAPPER_DN,
-                    "Specifies the DN of the configuration entry that holds " +
-                    "the configuration for the identity mapper that should " +
-                    "be used to map the CRAM-MD5 username to a Directory " +
-                    "Server user entry.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_SASLCRAMMD5_NO_IDENTITY_MAPPER_ATTR,
-                    "Configuration entry %s does not contain attribute " +
-                    ATTR_IDMAPPER_DN + " which specifies the DN of the " +
-                    "identity mapper to use in conjunction with the CRAM-MD5 " +
-                    "SASL mechanism.  This is a required attribute");
-    registerMessage(MSGID_SASLCRAMMD5_NO_SUCH_IDENTITY_MAPPER,
-                    "The identity mapper %s specified in attribute " +
-                    ATTR_IDMAPPER_DN + " of configuration entry %s does not " +
-                    "reference a valid identity mapper configuration that is " +
-                    "enabled for use in the Directory Server");
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_GET_IDENTITY_MAPPER,
-                    "An error occurred while trying to process the value " +
-                    "of the " + ATTR_IDMAPPER_DN + " attribute in " +
-                    "configuration entry %s to determine which identity " +
-                    "mapper should be used in conjunction with the CRAM-MD5 " +
-                    "SASL mechanism:  %s");
-    registerMessage(MSGID_SASLCRAMMD5_DESCRIPTION_USERNAME_ATTRIBUTE,
-                    "Specifies the name of the attribute that will be used " +
-                    "to identify user entries based on the username provided " +
-                    "during SASL CRAM-MD5 authentication.  This must specify " +
-                    "the name of a valid attribute type defined in the " +
-                    "server schema.  Changes to this configuration attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_GET_USERNAME_ATTR,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_USERNAME_ATTRIBUTE +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLCRAMMD5_UNKNOWN_USERNAME_ATTR,
-                    "The attribute %s referenced in configuration attribute " +
-                    ATTR_USERNAME_ATTRIBUTE + " in configuration entry %s " +
-                    "does not exist in the Directory Server schema.  The " +
-                    "attribute that is to be used for username lookups " +
-                    "during SASL CRAM-MD5 authentication must be defined in " +
-                    "the server schema");
-    registerMessage(MSGID_SASLCRAMMD5_DESCRIPTION_USER_BASE_DN,
-                    "Specifies the base DN that should be used when " +
-                    "searching for entries based on the username provided " +
-                    "during SASL CRAM-MD5 authentication.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_GET_USER_BASE_DN,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_USER_BASE_DN +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLCRAMMD5_NO_STORED_CHALLENGE,
-                    "The SASL CRAM-MD5 bind request contained SASL " +
-                    "credentials but there is no stored challenge for this " +
-                    "client connection.  The first CRAM-MD5 bind request in " +
-                    "the two-stage process must not contain client SASL " +
-                    "credentials");
-    registerMessage(MSGID_SASLCRAMMD5_INVALID_STORED_CHALLENGE,
-                    "The SASL CRAM-MD5 bind request contained SASL " +
-                    "credentials, but the stored SASL state information for " +
-                    "this client connection is not in an appropriate form " +
-                    "for the challenge");
-    registerMessage(MSGID_SASLCRAMMD5_NO_SPACE_IN_CREDENTIALS,
-                    "The SASL CRAM-MD5 bind request from the client included " +
-                    "SASL credentials but there was no space to separate " +
-                    "the username from the authentication digest");
-    registerMessage(MSGID_SASLCRAMMD5_INVALID_DIGEST_LENGTH,
-                    "The SASL CRAM-MD5 bind request included SASL " +
-                    "credentials, but the decoded digest string had an " +
-                    "invalid length of %d bytes rather than the %d bytes " +
-                    "expected for a hex representation of an MD5 digest");
-    registerMessage(MSGID_SASLCRAMMD5_INVALID_DIGEST_CONTENT,
-                    "The SASL CRAM-MD5 bind request included SASL " +
-                    "credentials, but the decoded digest was not comprised " +
-                    "of only hexadecimal digits:  %s");
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_DECODE_USERNAME_AS_DN,
-                    "An error occurred while attempting to decode the SASL " +
-                    "CRAM-MD5 username \"%s\" because it appeared to contain " +
-                    "a DN but DN decoding failed:  %s");
-    registerMessage(MSGID_SASLCRAMMD5_USERNAME_IS_NULL_DN,
-                    "The username in the SASL CRAM-MD5 bind request appears " +
-                    "to be an empty DN.  This is not allowed");
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_LOCK_ENTRY,
-                    "The Directory Server was unable to obtain a read lock " +
-                    "on user entry %s in order to retrieve that entry");
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_GET_ENTRY_BY_DN,
-                    "An error occurred while attempting to retrieve user " +
-                    "entry %s as specified in the DN-based username of a " +
-                    "SASL CRAM-MD5 bind request:  %s");
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_MAP_USERNAME,
-                    "An error occurred while attempting to map username %s " +
-                    "to a Directory Server entry:  %s");
-    registerMessage(MSGID_SASLCRAMMD5_ZERO_LENGTH_USERNAME,
-                    "The username contained in the SASL CRAM-MD5 bind " +
-                    "request had a length of zero characters, which is not " +
-                    "allowed.  CRAM-MD5 authentication does not allow an " +
-                    "empty string for use as the username");
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_PERFORM_INTERNAL_SEARCH,
-                    "An error occurred while trying to perform an internal " +
-                    "search to retrieve the user entry associated with the " +
-                    "SASL CRAM-MD5 username %s.  The result of that " +
-                    "search was %s with a message of %s");
-    registerMessage(MSGID_SASLCRAMMD5_MULTIPLE_MATCHING_ENTRIES,
-                    "The internal search attempting to resolve SASL CRAM-MD5 " +
-                    "username %s matched multiple entries.  Authentication " +
-                    "cannot succeed unless the username is mapped to exactly " +
-                    "one user entry");
-    registerMessage(MSGID_SASLCRAMMD5_NO_MATCHING_ENTRIES,
-                    "The server was not able to find any user entries for " +
-                    "the provided username of %s");
-    registerMessage(MSGID_SASLCRAMMD5_NO_PW_ATTR,
-                    "The SASL CRAM-MD5 authentication failed because the " +
-                    "mapped user entry did not contain any values for the %s " +
-                    "attribute");
-    registerMessage(MSGID_SASLCRAMMD5_UNKNOWN_STORAGE_SCHEME,
-                    "A password in the target user entry %s could not be " +
-                    "processed via SASL CRAM-MD5 because that password has " +
-                    "an unknown storage scheme of %s");
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_GET_CLEAR_PASSWORD,
-                    "An error occurred while attempting to obtain the " +
-                    "clear-text password for user %s from the value with " +
-                    "storage scheme %s:  %s");
-    registerMessage(MSGID_SASLCRAMMD5_INVALID_PASSWORD,
-                    "The provided password is invalid");
-    registerMessage(MSGID_SASLCRAMMD5_NO_REVERSIBLE_PASSWORDS,
-                    "SASL CRAM-MD5 authentication is not possible for user " +
-                    "%s because none of the passwords in the user entry are " +
-                    "stored in a reversible form");
-    registerMessage(MSGID_SASLCRAMMD5_CANNOT_GET_REVERSIBLE_PASSWORDS,
-                    "An error occurred while attempting to retrieve the " +
-                    "clear-text password(s) for user %s in order to perform " +
-                    "SASL CRAM-MD5 authentication:  %s");
-    registerMessage(MSGID_SASLCRAMMD5_UPDATED_IDENTITY_MAPPER,
-                    "Attribute " + ATTR_IDMAPPER_DN +
-                    " in configuration entry %s has been updated.  The " +
-                    "identity mapper defined in configuration entry %s " +
-                    "will now be used to map usernames to entries when " +
-                    "processing SASL CRAM-MD5 bind requests");
-    registerMessage(MSGID_SASLCRAMMD5_UPDATED_USERNAME_ATTR,
-                    "Attribute " + ATTR_USERNAME_ATTRIBUTE +
-                    " in configuration entry %s has been updated.  The %s " +
-                    "attribute will now be used when looking up user entries " +
-                    "based on their username");
-    registerMessage(MSGID_SASLCRAMMD5_UPDATED_USER_BASE_DN,
-                    "Attribute " + ATTR_USER_BASE_DN +
-                    " in configuration entry %s has been updated.  The DN %s " +
-                    "will now be used as the search base when looking up " +
-                    "user entries based on their username");
-
-
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_GET_MESSAGE_DIGEST,
-                    "An unexpected error occurred while attempting to obtain " +
-                    "an MD5 digest engine for use by the DIGEST-MD5 SASL " +
-                    "handler:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_DESCRIPTION_IDENTITY_MAPPER_DN,
-                    "Specifies the DN of the configuration entry that holds " +
-                    "the configuration for the identity mapper that should " +
-                    "be used to map the DIGEST-MD5 username to a Directory " +
-                    "Server user entry.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_IDENTITY_MAPPER_ATTR,
-                    "Configuration entry %s does not contain attribute " +
-                    ATTR_IDMAPPER_DN + " which specifies the DN of the " +
-                    "identity mapper to use in conjunction with the " +
-                    "DIGEST-MD5 SASL mechanism.  This is a required " +
-                    "attribute");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_SUCH_IDENTITY_MAPPER,
-                    "The identity mapper %s specified in attribute " +
-                    ATTR_IDMAPPER_DN + " of configuration entry %s does not " +
-                    "reference a valid identity mapper configuration that is " +
-                    "enabled for use in the Directory Server");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_GET_IDENTITY_MAPPER,
-                    "An error occurred while trying to process the value " +
-                    "of the " + ATTR_IDMAPPER_DN + " attribute in " +
-                    "configuration entry %s to determine which identity " +
-                    "mapper should be used in conjunction with the " +
-                    "DIGEST-MD5 SASL mechanism:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_DESCRIPTION_USERNAME_ATTRIBUTE,
-                    "Specifies the name of the attribute that will be used " +
-                    "to identify user entries based on the username provided " +
-                    "during SASL DIGEST-MD5 authentication.  This must " +
-                    "specify the name of a valid attribute type defined in " +
-                    "the server schema.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_GET_USERNAME_ATTR,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_USERNAME_ATTRIBUTE +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_UNKNOWN_USERNAME_ATTR,
-                    "The attribute %s referenced in configuration attribute " +
-                    ATTR_USERNAME_ATTRIBUTE + " in configuration entry %s " +
-                    "does not exist in the Directory Server schema.  The " +
-                    "attribute that is to be used for username lookups " +
-                    "during SASL DIGEST-MD5 authentication must be defined " +
-                    "in the server schema");
-    registerMessage(MSGID_SASLDIGESTMD5_DESCRIPTION_USER_BASE_DN,
-                    "Specifies the base DN that should be used when " +
-                    "searching for entries based on the username provided " +
-                    "during SASL DIGEST-MD5 authentication.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_GET_USER_BASE_DN,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_USER_BASE_DN +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_DESCRIPTION_REALM,
-                    "Specifies the realm that should be used by the server " +
-                    "for DIGEST-MD5 authentication.  If this is not " +
-                    "provided, then the server will default to using a set " +
-                    "of realm names that correspond to the defined " +
-                    "suffixes.  Changes to this configuration attribute will " +
-                    "take effect immediately");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_GET_REALM,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_DIGESTMD5_REALM +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_CHALLENGE_TOO_LONG,
-                    "The initial DIGEST-MD5 must be less than 2048 bytes, " +
-                    "but the generated challenge was %d bytes");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_CREDENTIALS,
-                    "The client connection included DIGEST-MD5 state " +
-                    "information, indicating that the client was in the " +
-                    "process of performing a DIGEST-MD5 bind, but the " +
-                    "bind request did not include any credentials");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_STORED_STATE,
-                    "The SASL DIGEST-MD5 bind request contained SASL " +
-                    "credentials, but the stored SASL state information for " +
-                    "this client connection is not in an appropriate form " +
-                    "for the challenge");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_PARSE_ISO_CREDENTIALS,
-                    "An error occurred while attempting to parse the " +
-                    "DIGEST-MD5 credentials as a string using the %s " +
-                    "character set:  %s.  The server will re-try using UTF-8");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_PARSE_UTF8_CREDENTIALS,
-                    "An error occurred while attempting to parse the " +
-                    "DIGEST-MD5 credentials as a string using the UTF-8 " +
-                    "character set:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS,
-                    "The DIGEST-MD5 credentials provided by the client " +
-                    "contained an invalid token of \"%s\" starting at " +
-                    "position %d");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_CHARSET,
-                    "The DIGEST-MD5 credentials provided by the client " +
-                    "specified an invalid character set of %s.  Only a value " +
-                    "of 'utf-8' is acceptable for this parameter");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_DECODE_REALM_AS_DN,
-                    "An error occurred while attempting to parse the " +
-                    "provided response realm \"%s\" as a DN:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_REALM,
-                    "The DIGEST-MD5 credentials provided by the client " +
-                    "included an invalid realm of \"%s\"");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_NONCE,
-                    "The DIGEST-MD5 credentials provided by the client " +
-                    "included a nonce that was different from the nonce " +
-                    "supplied by the server.  This could indicate a replay " +
-                    "attack or a chosen plaintext attack, and as a result " +
-                    "the client connection will be terminated");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_DECODE_NONCE_COUNT,
-                    "The DIGEST-MD5 credentials provided by the client " +
-                    "included a nonce count \"%s\" that could not be decoded " +
-                    "as a hex-encoded integer");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_DECODE_STORED_NONCE_COUNT,
-                    "An unexpected error occurred while attempting to decode " +
-                    "the nonce count stored by the server for this client " +
-                    "connection:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_NONCE_COUNT,
-                    "The DIGEST-MD5 credentials provided by the client " +
-                    "included a nonce count that was different from the " +
-                    "count expected by the server.  This could indicate a " +
-                    "replay attack, and as a result the client connection " +
-                    "will be terminated");
-    registerMessage(MSGID_SASLDIGESTMD5_INTEGRITY_NOT_SUPPORTED,
-                    "The client requested the auth-int quality of protection " +
-                    "but integrity protection is not currently supported by " +
-                    "the Directory Server");
-    registerMessage(MSGID_SASLDIGESTMD5_CONFIDENTIALITY_NOT_SUPPORTED,
-                    "The client requested the auth-conf quality of " +
-                    "protection but confidentiality protection is not " +
-                    "currently supported by the Directory Server");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_QOP,
-                    "The DIGEST-MD5 credentials provided by the client " +
-                    "requested an invalid quality of protection mechanism of " +
-                    "%s");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_DIGEST_URI,
-                    "The DIGEST-MD5 credentials provided by the client " +
-                    "requested an invalid digest URI of %s.  The expected " +
-                    "digest URI was %s");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_PARSE_RESPONSE_DIGEST,
-                    "The DIGEST-MD5 credentials provided by the client " +
-                    "included a digest that could not be decoded as a " +
-                    "hex-encoded byte sequence:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_RESPONSE_TOKEN,
-                    "The DIGEST-MD5 credentials provided by the client " +
-                    "included an invalid token named \"%s\"");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_USERNAME_IN_RESPONSE,
-                    "The DIGEST-MD5 credentials provided by the client did " +
-                    "not contain the required \"username\" token");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_NONCE_IN_RESPONSE,
-                    "The DIGEST-MD5 credentials provided by the client did " +
-                    "not contain the required \"nonce\" token");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_CNONCE_IN_RESPONSE,
-                    "The DIGEST-MD5 credentials provided by the client did " +
-                    "not contain the required \"cnonce\" token");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_NONCE_COUNT_IN_RESPONSE,
-                    "The DIGEST-MD5 credentials provided by the client did " +
-                    "not contain the required \"nc\" token");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_DIGEST_URI_IN_RESPONSE,
-                    "The DIGEST-MD5 credentials provided by the client did " +
-                    "not contain the required \"digest-uri\" token");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_DIGEST_IN_RESPONSE,
-                    "The DIGEST-MD5 credentials provided by the client did " +
-                    "not contain the required \"response\" token");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_DECODE_USERNAME_AS_DN,
-                    "An error occurred while attempting to decode the SASL " +
-                    "DIGEST-MD5 username \"%s\" because it appeared to " +
-                    "contain a DN but DN decoding failed:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_USERNAME_IS_NULL_DN,
-                    "The username in the SASL DIGEST-MD5 bind request " +
-                    "appears to be an empty DN.  This is not allowed");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_LOCK_ENTRY,
-                    "The Directory Server was unable to obtain a read lock " +
-                    "on user entry %s in order to retrieve that entry");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_GET_ENTRY_BY_DN,
-                    "An error occurred while attempting to retrieve user " +
-                    "entry %s as specified in the DN-based username of a " +
-                    "SASL DIGEST-MD5 bind request:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_ZERO_LENGTH_USERNAME,
-                    "The username contained in the SASL DIGEST-MD5 bind " +
-                    "request had a length of zero characters, which is not " +
-                    "allowed.  DIGEST-MD5 authentication does not allow an " +
-                    "empty string for use as the username");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_MAP_USERNAME,
-                    "An error occurred while attempting to map username %s " +
-                    "to a Directory Server entry:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_PERFORM_INTERNAL_SEARCH,
-                    "An error occurred while trying to perform an internal " +
-                    "search to retrieve the user entry associated with the " +
-                    "SASL DIGEST-MD5 username %s.  The result of that " +
-                    "search was %s with a message of %s");
-    registerMessage(MSGID_SASLDIGESTMD5_MULTIPLE_MATCHING_ENTRIES,
-                    "The internal search attempting to resolve SASL " +
-                    "DIGEST-MD5 username %s matched multiple entries.  " +
-                    "Authentication cannot succeed unless the username is " +
-                    "mapped to exactly one user entry");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_MATCHING_ENTRIES,
-                    "The server was not able to find any user entries for " +
-                    "the provided username of %s");
-    registerMessage(MSGID_SASLDIGESTMD5_EMPTY_AUTHZID,
-                    "The provided authorization ID was empty, which is not " +
-                    "allowed for DIGEST-MD5 authentication");
-    registerMessage(MSGID_SASLDIGESTMD5_AUTHZID_INVALID_DN,
-                    "The provided authorization ID %s contained an invalid " +
-                    "DN:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_AUTHZID_INSUFFICIENT_PRIVILEGES,
-                    "The authenticating user %s does not have sufficient " +
-                    "privileges to assume a different authorization identity");
-    registerMessage(MSGID_SASLDIGESTMD5_AUTHZID_NO_SUCH_ENTRY,
-                    "The entry %s specified as the authorization identity " +
-                    "does not exist");
-    registerMessage(MSGID_SASLDIGESTMD5_AUTHZID_CANNOT_GET_ENTRY,
-                    "The entry %s specified as the authorization identity " +
-                    "could not be retrieved:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_AUTHZID_NO_MAPPED_ENTRY,
-                    "The server was unable to find any entry corresponding " +
-                    "to authorization ID %s");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_MAP_AUTHZID,
-                    "An error occurred while attempting to map authorization " +
-                    "ID %s to a user entry:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_PW_ATTR,
-                    "The SASL DIGEST-MD5 authentication failed because the " +
-                    "mapped user entry did not contain any values for the %s " +
-                    "attribute");
-    registerMessage(MSGID_SASLDIGESTMD5_UNKNOWN_STORAGE_SCHEME,
-                    "A password in the target user entry %s could not be " +
-                    "processed via SASL DIGEST-MD5 because that password has " +
-                    "an unknown storage scheme of %s");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_GET_CLEAR_PASSWORD,
-                    "An error occurred while attempting to obtain the " +
-                    "clear-text password for user %s from the value with " +
-                    "storage scheme %s:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_CREDENTIALS,
-                    "The DIGEST-MD5 credentials provided by the client are " +
-                    "not appropriate for any password in the associated user " +
-                    "account");
-    registerMessage(MSGID_SASLDIGESTMD5_NO_REVERSIBLE_PASSWORDS,
-                    "SASL DIGEST-MD5 authentication is not possible for user " +
-                    "%s because none of the passwords in the user entry are " +
-                    "stored in a reversible form");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_GET_REVERSIBLE_PASSWORDS,
-                    "An error occurred while attempting to retrieve the " +
-                    "clear-text password(s) for user %s in order to perform " +
-                    "SASL DIGEST-MD5 authentication:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_GENERATE_RESPONSE_DIGEST,
-                    "An error occurred while attempting to generate a " +
-                    "server-side digest to compare with the client " +
-                    "response:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_CANNOT_GENERATE_RESPONSE_AUTH_DIGEST,
-                    "An error occurred while trying to generate the " +
-                    "response auth digest to include in the server SASL " +
-                    "credentials:  %s");
-    registerMessage(MSGID_SASLDIGESTMD5_INVALID_CLOSING_QUOTE_POS,
-                    "The DIGEST-MD5 response challenge could not be parsed " +
-                    "because it had an invalid quotation mark at position %d");
-    registerMessage(MSGID_SASLDIGESTMD5_UPDATED_IDENTITY_MAPPER,
-                    "Attribute " + ATTR_IDMAPPER_DN +
-                    " in configuration entry %s has been updated.  The " +
-                    "identity mapper defined in configuration entry %s " +
-                    "will now be used to map usernames to entries when " +
-                    "processing SASL DIGEST-MD5 bind requests");
-    registerMessage(MSGID_SASLDIGESTMD5_UPDATED_USERNAME_ATTR,
-                    "Attribute " + ATTR_USERNAME_ATTRIBUTE +
-                    " in configuration entry %s has been updated.  The %s " +
-                    "attribute will now be used when looking up user entries " +
-                    "based on their username");
-    registerMessage(MSGID_SASLDIGESTMD5_UPDATED_USER_BASE_DN,
-                    "Attribute " + ATTR_USER_BASE_DN +
-                    " in configuration entry %s has been updated.  The DN %s " +
-                    "will now be used as the search base when looking up " +
-                    "user entries based on their username");
-    registerMessage(MSGID_SASLDIGESTMD5_UPDATED_NEW_REALM,
-                    "Attribute " + ATTR_DIGESTMD5_REALM +
-                    " in configuration entry %s has been updated.  The realm " +
-                    "\"%s\" will now be advertised by the server in the " +
-                    "challenge response");
-    registerMessage(MSGID_SASLDIGESTMD5_UPDATED_NO_REALM,
-                    "Attribute " + ATTR_DIGESTMD5_REALM +
-                    " in configuration entry %s has been updated.  The " +
-                    "realm(s) advertised by the server in the challenge " +
-                    "response will be the DNs of the server suffixes");
-
-
-    registerMessage(MSGID_SASLGSSAPI_DESCRIPTION_USERNAME_ATTRIBUTE,
-                    "Specifies the name of the attribute that will be used " +
-                    "to identify user entries based on the username provided " +
-                    "during SASL GSSAPI authentication.  This must " +
-                    "specify the name of a valid attribute type defined in " +
-                    "the server schema.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_GET_USERNAME_ATTR,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_USERNAME_ATTRIBUTE +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLGSSAPI_UNKNOWN_USERNAME_ATTR,
-                    "The attribute %s referenced in configuration attribute " +
-                    ATTR_USERNAME_ATTRIBUTE + " in configuration entry %s " +
-                    "does not exist in the Directory Server schema.  The " +
-                    "attribute that is to be used for username lookups " +
-                    "during SASL GSSAPI authentication must be defined " +
-                    "in the server schema");
-    registerMessage(MSGID_SASLGSSAPI_DESCRIPTION_USER_BASE_DN,
-                    "Specifies the base DN that should be used when " +
-                    "searching for entries based on the username provided " +
-                    "during SASL GSSAPI authentication.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_GET_USER_BASE_DN,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_USER_BASE_DN +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLGSSAPI_DESCRIPTION_IDENTITY_MAPPER_DN,
-                    "Specifies the DN of the configuration entry that holds " +
-                    "the configuration for the identity mapper that should " +
-                    "be used to map the GSSAPI principal to a Directory " +
-                    "Server user entry.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_SASLGSSAPI_NO_IDENTITY_MAPPER_ATTR,
-                    "Configuration entry %s does not contain attribute " +
-                    ATTR_IDMAPPER_DN + " which specifies the DN of the " +
-                    "identity mapper to use in conjunction with the GSSAPI " +
-                    "SASL mechanism.  This is a required attribute");
-    registerMessage(MSGID_SASLGSSAPI_NO_SUCH_IDENTITY_MAPPER,
-                    "The identity mapper %s specified in attribute " +
-                    ATTR_IDMAPPER_DN + " of configuration entry %s does not " +
-                    "reference a valid identity mapper configuration that is " +
-                    "enabled for use in the Directory Server");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_GET_IDENTITY_MAPPER,
-                    "An error occurred while trying to process the value " +
-                    "of the " + ATTR_IDMAPPER_DN + " attribute in " +
-                    "configuration entry %s to determine which identity " +
-                    "mapper should be used in conjunction with the GSSAPI " +
-                    "SASL mechanism:  %s");
-    registerMessage(MSGID_SASLGSSAPI_DESCRIPTION_SERVER_FQDN,
-                    "Specifies the fully-qualified domain name that should " +
-                    "be used for the server during SASL GSSAPI " +
-                    "authentication.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_GET_SERVER_FQDN,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_SERVER_FQDN +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLGSSAPI_UPDATED_USERNAME_ATTR,
-                    "Attribute " + ATTR_USERNAME_ATTRIBUTE +
-                    " in configuration entry %s has been updated.  The %s " +
-                    "attribute will now be used when looking up user entries " +
-                    "based on their username");
-    registerMessage(MSGID_SASLGSSAPI_UPDATED_USER_BASE_DN,
-                    "Attribute " + ATTR_USER_BASE_DN +
-                    " in configuration entry %s has been updated.  The DN %s " +
-                    "will now be used as the search base when looking up " +
-                    "user entries based on their username");
-    registerMessage(MSGID_SASLGSSAPI_UPDATED_IDENTITY_MAPPER,
-                    "Attribute " + ATTR_IDMAPPER_DN +
-                    " in configuration entry %s has been updated.  The value " +
-                    "\"%s\" will now be used as the DN of the identity " +
-                    "mapper configuration entry for GSSAPI authentication");
-    registerMessage(MSGID_SASLGSSAPI_UPDATED_NEW_SERVER_FQDN,
-                    "Attribute " + ATTR_SERVER_FQDN +
-                    " in configuration entry %s has been updated.  The value " +
-                    "\"%s\" will now be used as the fully-qualified name of " +
-                    "the Directory Server for GSSAPI authentication");
-    registerMessage(MSGID_SASLGSSAPI_UPDATED_NO_SERVER_FQDN,
-                    "Attribute " + ATTR_SERVER_FQDN +
-                    " in configuration entry %s has been updated.  The " +
-                    "Directory Server will attempt to determine its own " +
-                    "FQDN for use in GSSAPI authentication");
-    registerMessage(MSGID_SASLGSSAPI_UNEXPECTED_CALLBACK,
-                    "An unexpected callback was provided for the SASL server " +
-                    "for use during GSSAPI authentication:  %s");
-    registerMessage(MSGID_SASLGSSAPI_DESCRIPTION_KDC_ADDRESS,
-                    "Specifies the address of the KDC that should be used " +
-                    "during SASL GSSAPI authentication.  If this is not " +
-                    "specified, then an attempt will be made to obtain it " +
-                    "from the system-wide Kerberos configuration.  Changes " +
-                    "to this configuration attribute will take effect " +
-                    "immediately for subsequent GSSAPI bind attempts");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_GET_KDC_ADDRESS,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_GSSAPI_KDC +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLGSSAPI_DESCRIPTION_REALM,
-                    "Specifies the default realm that should be used during " +
-                    "SASL GSSAPI authentication.  If this is not specified, " +
-                    "then an attempt will be made to obtain it from the " +
-                    "system-wide Kerberos configuration.  Changes to this " +
-                    "configuration attribute will take effect immediately " +
-                    "for subsequent GSSAPI bind attempts");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_GET_REALM,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_GSSAPI_REALM +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLGSSAPI_NO_CLIENT_CONNECTION,
-                    "No client connection was available for use in " +
-                    "processing the GSSAPI bind request");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_CREATE_SASL_SERVER,
-                    "An error occurred while attempting to create the " +
-                    "SASL server instance to process the GSSAPI bind " +
-                    "request:  %s");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_EVALUATE_RESPONSE,
-                    "An error occurred while attempting to evaluate the " +
-                    "challenge response provided by the client in the " +
-                    "GSSAPI bind request:  %s");
-    registerMessage(MSGID_SASLGSSAPI_NO_AUTHZ_ID,
-                    "The GSSAPI authentication process appears to have " +
-                    "completed but no authorization ID is available for " +
-                    "mapping to a directory user");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_PERFORM_INTERNAL_SEARCH,
-                    "An error occurred while attempting to perform an " +
-                    "internal search to map the GSSAPI authorization ID %s " +
-                    "to a Directory Server user (result code %d, error " +
-                    "message \"%s\")");
-    registerMessage(MSGID_SASLGSSAPI_MULTIPLE_MATCHING_ENTRIES,
-                    "The GSSAPI authorization ID %s appears to have multiple " +
-                    "matches in the Directory Server");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_MAP_AUTHZID,
-                    "The GSSAPI authorization ID %s could not be mapped to " +
-                    "any user in the Directory Server");
-    registerMessage(MSGID_SASLGSSAPI_UPDATED_KDC,
-                    "Attribute " + ATTR_GSSAPI_KDC +
-                    " in configuration entry %s has been updated.  The value " +
-                    "\"%s\" will now be used as the address of the KDC for " +
-                    "GSSAPI authentication");
-    registerMessage(MSGID_SASLGSSAPI_UNSET_KDC,
-                    "Attribute " + ATTR_GSSAPI_KDC +
-                    " in configuration entry %s has been un-set as a system " +
-                    "property.  Any further GSSAPI authentication attempts " +
-                    "will rely on the Kerberos configuration in the " +
-                    "underlying operating system to determine the KDC " +
-                    "address");
-    registerMessage(MSGID_SASLGSSAPI_UPDATED_REALM,
-                    "Attribute " + ATTR_GSSAPI_REALM +
-                    " in configuration entry %s has been updated.  The value " +
-                    "\"%s\" will now be used as the default realm for GSSAPI " +
-                    "authentication");
-    registerMessage(MSGID_SASLGSSAPI_UNSET_REALM,
-                    "Attribute " + ATTR_GSSAPI_REALM +
-                    " in configuration entry %s has been un-set as a system " +
-                    "property.  Any further GSSAPI authentication attempts " +
-                    "will rely on the Kerberos configuration in the " +
-                    "underlying operating system to determine the default " +
-                    "realm");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_CREATE_LOGIN_CONTEXT,
-                    "An error occurred while attempting to create the JAAS " +
-                    "login context for GSSAPI authentication:  %s");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_AUTHENTICATE_SERVER,
-                    "An error occurred while attempting to perform " +
-                    "server-side Kerberos authentication to support a GSSAPI " +
-                    "bind operation:  %s");
-    registerMessage(MSGID_SASLGSSAPI_DESCRIPTION_KEYTAB_FILE,
-                    "Specifies the path to the keytab file containing the " +
-                    "secret key for the Kerberos principal to use when " +
-                    "processing GSSAPI authentication.  If this is not " +
-                    "specified, then the system-wide default keytab file " +
-                    "will be used.  Changes to this configuration attribute " +
-                    "will not take effect until the GSSAPI SASL mechanism " +
-                    "handler is disabled and re-enabled or the Directory " +
-                    "Server is restarted");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_GET_KEYTAB_FILE,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_GSSAPI_KEYTAB_FILE +
-                    " attribute in configuration entry %s:  %s");
-    registerMessage(MSGID_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG,
-                    "An error occurred while attempting to write a " +
-                    "temporary JAAS configuration file for use during " +
-                    "GSSAPI processing:  %s");
-    registerMessage(MSGID_SASLGSSAPI_DIFFERENT_AUTHID_AND_AUTHZID,
-                    "The authentication ID %s was not equal to the " +
-                    "authorization ID %s.  This is not supported for " +
-                    "GSSAPI authentication");
-
-
-    registerMessage(MSGID_EXTOP_WHOAMI_PROXYAUTH_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to use the " +
-                    "proxied authorization control");
-
-
-    registerMessage(MSGID_SOFTREFCACHE_DESCRIPTION_LOCK_TIMEOUT,
-                    "Specifies the maximum length of time in milliseconds " +
-                    "that the entry cache should block while attempting " +
-                    "to acquire a lock for an entry.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_SOFTREFCACHE_CANNOT_DETERMINE_LOCK_TIMEOUT,
-                    "An error occurred while attempting to determine the " +
-                    "value of the " + ATTR_SOFTREFCACHE_LOCK_TIMEOUT +
-                    " attribute in configuration entry %s:  %s.  The default " +
-                    "of %d will be used");
-    registerMessage(MSGID_SOFTREFCACHE_DESCRIPTION_INCLUDE_FILTERS,
-                    "Specifies a set of search filters that may be used to " +
-                    "indicate which entries should be included in the entry " +
-                    "cache.  Entries that do not match at least one of these " +
-                    "filters will not be stored in the cache.  If no filters " +
-                    "are provided, then any entry will be accepted.  Changes " +
-                    "to this configuration attribute will take effect " +
-                    "immediately, but will not impact existing entries that " +
-                    "are already held in the cache");
-    registerMessage(MSGID_SOFTREFCACHE_CANNOT_DECODE_INCLUDE_FILTER,
-                    "An error occurred while attempting to decode the value " +
-                    "\"%s\" from attribute " +
-                    ATTR_SOFTREFCACHE_INCLUDE_FILTER + " of entry %s:  %s.  " +
-                    "This filter will not be used when determining whether " +
-                    "to store an entry in the cache");
-    registerMessage(MSGID_SOFTREFCACHE_CANNOT_DECODE_ANY_INCLUDE_FILTERS,
-                    "An error occurred while attempting to decode any of the " +
-                    "values from attribute " +
-                    ATTR_SOFTREFCACHE_INCLUDE_FILTER + " of entry %s.  All " +
-                    "entries will be considered eligible for inclusion in " +
-                    "the cache");
-    registerMessage(MSGID_SOFTREFCACHE_CANNOT_DETERMINE_INCLUDE_FILTERS,
-                    "An error occurred while attempting to determine the " +
-                    "value of the " + ATTR_SOFTREFCACHE_INCLUDE_FILTER +
-                    " attribute in configuration entry %s:  %s.  All entries " +
-                    "will be considered eligible for inclusion in the cache");
-    registerMessage(MSGID_SOFTREFCACHE_DESCRIPTION_EXCLUDE_FILTERS,
-                    "Specifies a set of search filters that may be used to " +
-                    "indicate which entries should be excluded from the " +
-                    "entry cache.  Entries that match any of these filters " +
-                    "will not be stored in the cache.  If no filters are " +
-                    "provided, then any entry will be accepted.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately, but will not impact existing entries that " +
-                    "are already held in the cache");
-    registerMessage(MSGID_SOFTREFCACHE_CANNOT_DECODE_EXCLUDE_FILTER,
-                    "An error occurred while attempting to decode the value " +
-                    "\"%s\" from attribute " +
-                    ATTR_SOFTREFCACHE_EXCLUDE_FILTER + " of entry %s:  %s.  " +
-                    "This filter will not be used when determining whether " +
-                    "to store an entry in the cache");
-    registerMessage(MSGID_SOFTREFCACHE_CANNOT_DECODE_ANY_EXCLUDE_FILTERS,
-                    "An error occurred while attempting to decode any of the " +
-                    "values from attribute " +
-                    ATTR_SOFTREFCACHE_EXCLUDE_FILTER + " of entry %s.  All " +
-                    "entries will be considered eligible for inclusion in " +
-                    "the cache");
-    registerMessage(MSGID_SOFTREFCACHE_CANNOT_DETERMINE_EXCLUDE_FILTERS,
-                    "An error occurred while attempting to determine the " +
-                    "value of the " + ATTR_SOFTREFCACHE_EXCLUDE_FILTER +
-                    " attribute in configuration entry %s:  %s.  All entries " +
-                    "will be considered eligible for inclusion in the cache");
-    registerMessage(MSGID_SOFTREFCACHE_INVALID_LOCK_TIMEOUT,
-                    "The " + ATTR_SOFTREFCACHE_LOCK_TIMEOUT + " attribute of " +
-                    "entry %s, which specifies the maximum length of time in " +
-                    "milliseconds that the cache should block while " +
-                    "attempting to obtain a lock on an entry, has an invalid " +
-                    "value:  %s.  Its value must be a positive integer, or " +
-                    "zero to indicate that it should never block");
-    registerMessage(MSGID_SOFTREFCACHE_INVALID_INCLUDE_FILTER,
-                    "The " + ATTR_SOFTREFCACHE_INCLUDE_FILTER + " attribute " +
-                    "of entry %s, which specifies a set of search filters " +
-                    "that may be used to control which entries are included " +
-                    "in the cache, has an invalid value of \"%s\":  %s");
-    registerMessage(MSGID_SOFTREFCACHE_INVALID_INCLUDE_FILTERS,
-                    "The " + ATTR_SOFTREFCACHE_INCLUDE_FILTER + " attribute " +
-                    "of entry %s, which specifies a set of search filters " +
-                    "that may be used to control which entries are included " +
-                    "in the cache, has an invalid value:  %s");
-    registerMessage(MSGID_SOFTREFCACHE_INVALID_EXCLUDE_FILTER,
-                    "The " + ATTR_SOFTREFCACHE_EXCLUDE_FILTER + " attribute " +
-                    "of entry %s, which specifies a set of search filters " +
-                    "that may be used to control which entries are excluded " +
-                    "from the cache, has an invalid value of \"%s\":  %s");
-    registerMessage(MSGID_SOFTREFCACHE_INVALID_EXCLUDE_FILTERS,
-                    "The " + ATTR_SOFTREFCACHE_EXCLUDE_FILTER + " attribute " +
-                    "of entry %s, which specifies a set of search filters " +
-                    "that may be used to control which entries are excluded " +
-                    "from the cache, has an invalid value:  %s");
-    registerMessage(MSGID_SOFTREFCACHE_UPDATED_LOCK_TIMEOUT,
-                    "The lock timeout that will be used to determine the " +
-                    "length of time that the cache should block while " +
-                    "attempting to acquire a lock for an entry has been " +
-                    "set to %d milliseconds");
-    registerMessage(MSGID_SOFTREFCACHE_UPDATED_INCLUDE_FILTERS,
-                    "The set of search filters that will control which " +
-                    "entries may be included in the cache has been updated");
-    registerMessage(MSGID_SOFTREFCACHE_UPDATED_EXCLUDE_FILTERS,
-                    "The set of search filters that will control which " +
-                    "entries should be be excluded from the cache has been " +
-                    "updated");
-
-
-    registerMessage(MSGID_EXACTMAP_DESCRIPTION_MATCH_ATTR,
-                    "Specifies the name or OID of the attribute whose value " +
-                    "should exactly match the ID string provided to this " +
-                    "identity mapper.  At least one value must be provided.  " +
-                    "All values must refer to the name or OID of an " +
-                    "attribute type defined in the Directory Server schema.  " +
-                    "If multiple attribute type names or OIDs are provided, " +
-                    "then at least one of those attributes must contain the " +
-                    "provided ID string value in exactly one entry");
-    registerMessage(MSGID_EXACTMAP_NO_MATCH_ATTR,
-                    "Configuration entry %s does not have any values for " +
-                    "attribute " + ATTR_MATCH_ATTRIBUTE + ", which is used " +
-                    "to specify which attribute(s) may be used to map a " +
-                    "given ID string to a user entry");
-    registerMessage(MSGID_EXACTMAP_UNKNOWN_ATTR,
-                    "Configuration entry %s contains value %s for attribute " +
-                    ATTR_MATCH_ATTRIBUTE + " but that is not a valid name or " +
-                    "OID for any attribute type defined in the Directory " +
-                    "Server schema");
-    registerMessage(MSGID_EXACTMAP_CANNOT_DETERMINE_MATCH_ATTR,
-                    "An error occurred while attempting to process the " +
-                    "value(s) of attribute " + ATTR_MATCH_ATTRIBUTE +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_EXACTMAP_DESCRIPTION_SEARCH_BASE,
-                    "Specifies the base DN(s) that should be used when " +
-                    "performing searches to map the provided ID string to a " +
-                    "user entry.  If no values are provided, then the " +
-                    "root DSE will be used as the search base");
-    registerMessage(MSGID_EXACTMAP_CANNOT_DETERMINE_MATCH_BASE,
-                    "An error occurred while attempting to process the " +
-                    "value(s) of attribute " + ATTR_MATCH_BASE +
-                    " in configuration entry %s:  %s");
-    registerMessage(MSGID_EXACTMAP_UPDATED_MATCH_ATTRS,
-                    "The set of attributes to use when matching ID strings " +
-                    "to user entries contained in attribute " +
-                    ATTR_MATCH_ATTRIBUTE + " of configuration entry %s has " +
-                    "been updated");
-    registerMessage(MSGID_EXACTMAP_UPDATED_MATCH_BASES,
-                    "The set of search base DNs to use when matching ID " +
-                    "strings to user entries contained in attribute " +
-                    ATTR_MATCH_BASE + " of configuration entry %s has been " +
-                    "updated");
-    registerMessage(MSGID_EXACTMAP_MULTIPLE_MATCHING_ENTRIES,
-                    "ID string %s mapped to multiple users");
-    registerMessage(MSGID_EXACTMAP_INEFFICIENT_SEARCH,
-                    "The internal search based on ID string %s could not be " +
-                    "processed efficiently:  %s.  Check the server " +
-                    "configuration to ensure that all associated backends " +
-                    "are properly configured for these types of searches");
-    registerMessage(MSGID_EXACTMAP_SEARCH_FAILED,
-                    "An internal failure occurred while attempting to " +
-                    "resolve ID string %s to a user entry:  %s");
-
-
-    registerMessage(MSGID_EXTOP_CANCEL_NO_REQUEST_VALUE,
-                    "Unable to process the cancel request because the " +
-                    "extended operation did not include a request value");
-    registerMessage(MSGID_EXTOP_CANCEL_CANNOT_DECODE_REQUEST_VALUE,
-                    "An error occurred while attempting to decode the value " +
-                    "of the cancel extended request:  %s");
-    registerMessage(MSGID_EXTOP_CANCEL_REASON,
-                    "Processing on this operation was terminated as a " +
-                    "result of receiving a cancel request (message ID %d)");
-
-
-    registerMessage(MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MIN_LENGTH,
-                    "Specifies the minimum number of characters that a " +
-                    "password will be allowed to have.  A value of zero " +
-                    "indicates that there is no minimum length.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MIN_LENGTH,
-                    "An error occurred while attempting to determine the " +
-                    "minimum allowed password length from the " +
-                    ATTR_PASSWORD_MIN_LENGTH + " attribute:  %s");
-    registerMessage(MSGID_PWLENGTHVALIDATOR_DESCRIPTION_MAX_LENGTH,
-                    "Specifies the maximum number of characters that a " +
-                    "password will be allowed to have.  A value of zero " +
-                    "indicates that there is no maximum length.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWLENGTHVALIDATOR_CANNOT_DETERMINE_MAX_LENGTH,
-                    "An error occurred while attempting to determine the " +
-                    "maximum allowed password length from the " +
-                    ATTR_PASSWORD_MAX_LENGTH + " attribute:  %s");
-    registerMessage(MSGID_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX,
-                    "The configured minimum password length of %d characters " +
-                    "is greater than the configured maximum password length " +
-                    "of %d");
-    registerMessage(MSGID_PWLENGTHVALIDATOR_TOO_SHORT,
-                    "The provided password is shorter than the minimum " +
-                    "required length of %d characters");
-    registerMessage(MSGID_PWLENGTHVALIDATOR_TOO_LONG,
-                    "The provided password is longer than the maximum " +
-                    "allowed length of %d characters");
-    registerMessage(MSGID_PWLENGTHVALIDATOR_UPDATED_MIN_LENGTH,
-                    "The minimum password length has been updated to %d");
-    registerMessage(MSGID_PWLENGTHVALIDATOR_UPDATED_MAX_LENGTH,
-                    "The maximum password length has been updated to %d");
-    registerMessage(MSGID_PWDIFFERENCEVALIDATOR_DESCRIPTION_MIN_DIFFERENCE,
-                    "Specifies the minimum difference that a " +
-                    "password will be allowed to have.  A value of zero " +
-                    "indicates that there is no minimum difference.  Changes " +
-                    "to this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_PWDIFFERENCEVALIDATOR_CANNOT_DETERMINE_MIN_DIFFERENCE,
-                    "An error occurred while attempting to determine the " +
-                    "minimum allowed password difference from the " +
-                    ATTR_PASSWORD_MIN_DIFFERENCE + " attribute:  %s");
-    registerMessage(MSGID_PWDIFFERENCEVALIDATOR_TOO_SMALL,
-                    "The provided password differs less than the minimum " +
-                    "required difference of %d characters");
-    registerMessage(MSGID_PWDIFFERENCEVALIDATOR_UPDATED_MIN_DIFFERENCE,
-                    "The minimum password difference has been updated to %d");
-
-
-    registerMessage(MSGID_RANDOMPWGEN_DESCRIPTION_CHARSET,
-                    "Specifies the character set(s) that should be used to " +
-                    "generate the passwords.  Each character set should " +
-                    "be given a name (consisting of only ASCII alphabetic " +
-                    "characters) followed immediately by a colon and the set " +
-                    "of characters that should be included in that " +
-                    "character set.  Changes to this configuration attribute " +
-                    "will take effect immediately");
-    registerMessage(MSGID_RANDOMPWGEN_NO_CHARSETS,
-                    "Configuration entry \"%s\" does not contain attribute " +
-                    ATTR_PASSWORD_CHARSET + " which specifies the sets of " +
-                    "characters that should be used when generating the " +
-                    "password.  This is a required attribute");
-    registerMessage(MSGID_RANDOMPWGEN_CHARSET_NAME_CONFLICT,
-                    "Configuration entry \"%s\" contains multiple " +
-                    "definitions for the %s character set");
-    registerMessage(MSGID_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS,
-                    "An error occurred while attempting to decode the " +
-                    "value(s) of the configuration attribute " +
-                    ATTR_PASSWORD_CHARSET + ", which is used to hold the " +
-                    "character set(s) for use in generating the password:  " +
-                    "%s");
-    registerMessage(MSGID_RANDOMPWGEN_DESCRIPTION_PWFORMAT,
-                    "Specifies the format that should be used for passwords " +
-                    "constructed by this password generator.  The value " +
-                    "should be a comma-delimited sequence of elements, where " +
-                    "each element is the name of a character set followed " +
-                    "by a colon and the number of characters to choose at " +
-                    "random from that character set.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_RANDOMPWGEN_NO_PWFORMAT,
-                    "Configuration entry \"%s\" does not contain attribute " +
-                    ATTR_PASSWORD_FORMAT + " which specifies the format to " +
-                    "use for the generated password.  This is a required " +
-                    "attribute");
-    registerMessage(MSGID_RANDOMPWGEN_UNKNOWN_CHARSET,
-                    "The password format string \"%s\" references an " +
-                    "undefined character set \"%s\"");
-    registerMessage(MSGID_RANDOMPWGEN_INVALID_PWFORMAT,
-                    "The password format string \"%s\" contains an invalid " +
-                    "syntax.  This value should be a comma-delimited " +
-                    "sequence of elements, where each element is the name of " +
-                    "a character set followed by a colon and the number of " +
-                    "characters to choose at random from that character set");
-    registerMessage(MSGID_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT,
-                    "An error occurred while attempting to decode the " +
-                    "value for configuration attribute " +
-                    ATTR_PASSWORD_FORMAT + ", which is used to specify the " +
-                    "format for the generated passwords:  %s");
-
-
-    registerMessage(
-         MSGID_ERRORLOG_ACCTNOTHANDLER_DESCRIPTION_NOTIFICATION_TYPES,
-         "Specifies the status notification types for which log messages " +
-         "should be generated.  It is a multivalued attribute, and changes " +
-         "will take effect immediately");
-    registerMessage(MSGID_ERRORLOG_ACCTNOTHANDLER_INVALID_TYPE,
-                    "Configuration entry %s contains unrecognized account " +
-                    "status notification type %s");
-    registerMessage(MSGID_ERRORLOG_ACCTNOTHANDLER_CANNOT_GET_NOTIFICATION_TYPES,
-                    "An error occurred while attempting to determine " +
-                    "the account status notification types from " +
-                    "configuration entry %s:  %s");
-    registerMessage(MSGID_ERRORLOG_ACCTNOTHANDLER_NOTIFICATION,
-                    "Account-Status-Notification type='%s' userdn='%s' " +
-                    "id=%d msg='%s'");
-
-
-    registerMessage(MSGID_STATICMEMBERS_NO_SUCH_ENTRY,
-                    "Unable to examine entry %s as a potential member of " +
-                    "static group %s because that entry does not exist in " +
-                    "the Directory Server");
-    registerMessage(MSGID_STATICMEMBERS_CANNOT_GET_ENTRY,
-                    "An error occurred while attempting to retrieve entry %s " +
-                    "as a potential member of static group %s:  %s");
-
-
-    registerMessage(MSGID_STATICGROUP_INVALID_OC_COMBINATION,
-                    "Entry %s cannot be parsed as a valid static group " +
-                    "because static groups are not allowed to have both the " +
-                    "%s and %s object classes");
-    registerMessage(MSGID_STATICGROUP_NO_VALID_OC,
-                    "Entry %s cannot be parsed as a valid static group " +
-                    "because it does not contain exactly one of the %s or " +
-                    "the %s object classes");
-    registerMessage(MSGID_STATICGROUP_CANNOT_DECODE_MEMBER_VALUE_AS_DN,
-                    "Value %s for attribute %s in entry %s cannot be parsed " +
-                    "as a valid DN:  %s.  It will be excluded from the set " +
-                    "of group members");
-    registerMessage(MSGID_STATICGROUP_ADD_MEMBER_ALREADY_EXISTS,
-                    "Cannot add user %s as a new member of static group %s " +
-                    "because that user is already in the member list for the " +
-                    "group");
-    registerMessage(MSGID_STATICGROUP_ADD_MEMBER_UPDATE_FAILED,
-                    "Cannot add user %s as a new member of static group %s " +
-                    "because an error occurred while attempting to perform " +
-                    "an internal modification to update the group:  %s");
-    registerMessage(MSGID_STATICGROUP_REMOVE_MEMBER_NO_SUCH_MEMBER,
-                    "Cannot remove user %s as a member of static group %s " +
-                    "because that user is not included in the member list " +
-                    "for the group");
-    registerMessage(MSGID_STATICGROUP_REMOVE_MEMBER_UPDATE_FAILED,
-                    "Cannot remove user %s as a member of static group %s " +
-                    "because an error occurred while attempting to perform " +
-                    "an internal modification to update the group:  %s");
-
-
-    registerMessage(MSGID_SDTUACM_DESCRIPTION_SUBJECT_ATTR,
-                    "Specifies the name of the attribute type in user " +
-                    "entries that contains the subjects of the certificates " +
-                    "held by that user.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_SDTUACM_NO_SUBJECT_ATTR,
-                    "Configuration entry %s does not contain required " +
-                    "attribute %s, which is used to specify which attribute " +
-                    "should contain the subjects of the certificates held " +
-                    "by users");
-    registerMessage(MSGID_SDTUACM_NO_SUCH_ATTR,
-                    "Configuration entry %s indicates that certificate " +
-                    "subjects should be held in attribute %s, but this " +
-                    "attribute is not defined in the server schema");
-    registerMessage(MSGID_SDTUACM_CANNOT_GET_SUBJECT_ATTR,
-                    "An error occurred while attempting to determine which " +
-                    "attribute type should be used to hold certificate " +
-                    "subjects from configuration entry %s:  %s");
-    registerMessage(MSGID_SDTUACM_DESCRIPTION_BASE_DN,
-                    "Specifies the base DNs below which the searches to " +
-                    "find matching user entries will be performed.  If no " +
-                    "base DN(s) are provided, then the server will search " +
-                    "below all public naming contexts.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_SDTUACM_CANNOT_GET_BASE_DN,
-                    "An error occurred while attempting to determine the " +
-                    "search base DN(s) from configuration entry %s:  %s");
-    registerMessage(MSGID_SDTUACM_NO_PEER_CERTIFICATE,
-                    "Could not map the provided certificate chain to a user " +
-                    "entry because no peer certificate was available");
-    registerMessage(MSGID_SDTUACM_PEER_CERT_NOT_X509,
-                    "Could not map the provided certificate chain to a user " +
-                    "because the peer certificate was not an X.509 " +
-                    "certificate (peer certificate format was %s)");
-    registerMessage(MSGID_SDTUACM_MULTIPLE_MATCHING_ENTRIES,
-                    "The certificate with subject %s could not be mapped to " +
-                    "exactly one user.  It maps to both %s and %s");
-
-
-    registerMessage(MSGID_SATUACM_DESCRIPTION_ATTR_MAP,
-                    "Specifies the name of the attribute type in user " +
-                    "entries that defines the mapping between attributes " +
-                    "in certificate subjects and attributes in user " +
-                    "entries.  Values should be in the form " +
-                    "'certattr:userattr'.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_SATUACM_NO_MAP_ATTR,
-                    "Configuration entry %s does not contain required " +
-                    "attribute %s, which is used to specify the mappings " +
-                    "between attributes in certificate subjects and " +
-                    "attributes in user entries");
-    registerMessage(MSGID_SATUACM_INVALID_MAP_FORMAT,
-                    "Configuration entry %s has value '%s' which violates " +
-                    "the format required for attribute mappings.  The " +
-                    "expected format is 'certattr:userattr'");
-    registerMessage(MSGID_SATUACM_DUPLICATE_CERT_ATTR,
-                    "Configuration entry %s contains multiple mappings " +
-                    "for certificate attribute %s");
-    registerMessage(MSGID_SATUACM_NO_SUCH_ATTR,
-                    "Mapping %s in configuration entry %s references " +
-                    "attribute %s which is not defined in the server schema");
-    registerMessage(MSGID_SATUACM_DUPLICATE_USER_ATTR,
-                    "Configuration entry %s contains multiple mappings " +
-                    "for user attribute %s");
-    registerMessage(MSGID_SATUACM_CANNOT_GET_ATTR_MAP,
-                    "An error occurred while attempting to determine the set " +
-                    "of attribute mappings from configuration entry %s:  %s");
-    registerMessage(MSGID_SATUACM_DESCRIPTION_BASE_DN,
-                    "Specifies the base DNs below which the searches to " +
-                    "find matching user entries will be performed.  If no " +
-                    "base DN(s) are provided, then the server will search " +
-                    "below all public naming contexts.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_SATUACM_CANNOT_GET_BASE_DN,
-                    "An error occurred while attempting to determine the " +
-                    "search base DN(s) from configuration entry %s:  %s");
-    registerMessage(MSGID_SATUACM_NO_PEER_CERTIFICATE,
-                    "Could not map the provided certificate chain to a user " +
-                    "entry because no peer certificate was available");
-    registerMessage(MSGID_SATUACM_PEER_CERT_NOT_X509,
-                    "Could not map the provided certificate chain to a user " +
-                    "because the peer certificate was not an X.509 " +
-                    "certificate (peer certificate format was %s)");
-    registerMessage(MSGID_SATUACM_CANNOT_DECODE_SUBJECT_AS_DN,
-                    "Unable to decode peer certificate subject %s as a DN:  " +
-                    "%s");
-    registerMessage(MSGID_SATUACM_NO_MAPPABLE_ATTRIBUTES,
-                    "Peer certificate subject %s does not contain any " +
-                    "attributes for which a mapping has been established");
-    registerMessage(MSGID_SATUACM_MULTIPLE_MATCHING_ENTRIES,
-                    "The certificate with subject %s could not be mapped to " +
-                    "exactly one user.  It maps to both %s and %s");
-
-
-    registerMessage(MSGID_FCM_DESCRIPTION_FINGERPRINT_ATTR,
-                    "Specifies the name of the attribute type in user " +
-                    "entries that contains the fingerprints of the " +
-                    "certificates held by that user.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_FCM_NO_FINGERPRINT_ATTR,
-                    "Configuration entry %s does not contain required " +
-                    "attribute %s, which is used to specify which attribute " +
-                    "should contain the fingerprints of the certificates " +
-                    "held by users");
-    registerMessage(MSGID_FCM_NO_SUCH_ATTR,
-                    "Configuration entry %s indicates that certificate " +
-                    "fingerprints should be held in attribute %s, but this " +
-                    "attribute is not defined in the server schema");
-    registerMessage(MSGID_FCM_CANNOT_GET_FINGERPRINT_ATTR,
-                    "An error occurred while attempting to determine which " +
-                    "attribute type should be used to hold certificate " +
-                    "fingerprints from configuration entry %s:  %s");
-    registerMessage(MSGID_FCM_DESCRIPTION_FINGERPRINT_ALGORITHM,
-                    "Specifies the name of the digest algorithm used for " +
-                    "the certificate fingerprints.  The value should be " +
-                    "either 'MD5' or 'SHA1'.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_FCM_NO_FINGERPRINT_ALGORITHM,
-                    "Configuration entry %s does not contain required " +
-                    "attribute %s, which is used to specify which digest " +
-                    "algorithm should be used to compute certificate " +
-                    "fingerprints");
-    registerMessage(MSGID_FCM_CANNOT_GET_FINGERPRINT_ALGORITHM,
-                    "An error occurred while attempting to determine the " +
-                    "digest algorithm from configuration entry %s:  %s");
-    registerMessage(MSGID_FCM_DESCRIPTION_BASE_DN,
-                    "Specifies the base DNs below which the searches to " +
-                    "find matching user entries will be performed.  If no " +
-                    "base DN(s) are provided, then the server will search " +
-                    "below all public naming contexts.  Changes to this " +
-                    "configuration attribute will take effect immediately");
-    registerMessage(MSGID_FCM_CANNOT_GET_BASE_DN,
-                    "An error occurred while attempting to determine the " +
-                    "search base DN(s) from configuration entry %s:  %s");
-    registerMessage(MSGID_FCM_NO_PEER_CERTIFICATE,
-                    "Could not map the provided certificate chain to a user " +
-                    "entry because no peer certificate was available");
-    registerMessage(MSGID_FCM_PEER_CERT_NOT_X509,
-                    "Could not map the provided certificate chain to a user " +
-                    "because the peer certificate was not an X.509 " +
-                    "certificate (peer certificate format was %s)");
-    registerMessage(MSGID_FCM_CANNOT_CALCULATE_FINGERPRINT,
-                    "An error occurred while attempting to calculate the " +
-                    "fingerprint for the peer certificate with subject %s:  " +
-                    "%s");
-    registerMessage(MSGID_FCM_MULTIPLE_MATCHING_ENTRIES,
-                    "The certificate with fingerprint %s could not be mapped " +
-                    "to exactly one user.  It maps to both %s and %s");
-
-
-    registerMessage(MSGID_DYNAMICGROUP_CANNOT_DECODE_MEMBERURL,
-                    "Unable to decode value \"%s\" in entry \"%s\" as an " +
-                    "LDAP URL:  %s");
-    registerMessage(MSGID_DYNAMICGROUP_NESTING_NOT_SUPPORTED,
-                    "Dynamic groups do not support nested groups");
-    registerMessage(MSGID_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED,
-                    "Dynamic groups do not support explicitly altering their " +
-                    "membership");
-    registerMessage(MSGID_DYNAMICGROUP_NONEXISTENT_BASE_DN,
-                    "Base DN %s specified in dynamic group %s does not exist " +
-                    "in the server");
-    registerMessage(MSGID_DYNAMICGROUP_INTERNAL_SEARCH_FAILED,
-                    "An error occurred while attempting perform an internal " +
-                    "search with base DN %s and filter %s to resolve the " +
-                    "member list for dynamic group %s:  result code %s, " +
-                    "error message %s");
-    registerMessage(MSGID_DYNAMICGROUP_CANNOT_RETURN_ENTRY,
-                    "The server encountered a timeout while attempting to " +
-                    "add user %s to the member list for dynamic group %s");
-
-
-    registerMessage(MSGID_REPEATEDCHARS_VALIDATOR_TOO_MANY_CONSECUTIVE,
-                    "The provided password contained too many instances " +
-                    "of the same character appearing consecutively.  The " +
-                    "maximum number of times the same character may appear " +
-                    "consecutively in a password is %d");
-
-
-    registerMessage(MSGID_UNIQUECHARS_VALIDATOR_NOT_ENOUGH_UNIQUE_CHARS,
-                    "The provided password does not contain enough unique " +
-                    "characters.  The minimum number of unique characters " +
-                    "that may appear in a user password is %d");
-
-
-    registerMessage(MSGID_SUBSCHEMASUBENTRY_VATTR_NOT_SEARCHABLE,
-                    "The %s attribute is not searchable and should not be " +
-                    "included in otherwise unindexed search filters");
-
-
-    registerMessage(MSGID_DICTIONARY_VALIDATOR_PASSWORD_IN_DICTIONARY,
-                    "The provided password was found in the server's " +
-                    "dictionary");
-    registerMessage(MSGID_DICTIONARY_VALIDATOR_NO_SUCH_FILE,
-                    "The specified dictionary file %s does not exist");
-    registerMessage(MSGID_DICTIONARY_VALIDATOR_CANNOT_READ_FILE,
-                    "An error occurred while attempting to load the " +
-                    "dictionary from file %s:  %s");
-
-
-    registerMessage(MSGID_ATTRVALUE_VALIDATOR_PASSWORD_IN_ENTRY,
-                    "The provided password was found in another attribute " +
-                    "in the user entry");
-
-
-    registerMessage(MSGID_CHARSET_VALIDATOR_ILLEGAL_CHARACTER,
-                    "The provided password contained character '%s' which is " +
-                    "not allowed for use in passwords");
-    registerMessage(MSGID_CHARSET_VALIDATOR_TOO_FEW_CHARS_FROM_SET,
-                    "The provided password did not contain enough " +
-                    "characters from the character set '%s'.  The minimum " +
-                    "number of characters from that set that must be present " +
-                    "in user passwords is %d");
-    registerMessage(MSGID_CHARSET_VALIDATOR_NO_COLON,
-                    "The provided character set definition '%s' is invalid " +
-                    "because it does not contain a colon to separate the " +
-                    "minimum count from the character set");
-    registerMessage(MSGID_CHARSET_VALIDATOR_NO_CHARS,
-                    "The provided character set definition '%s' is invalid " +
-                    "because the provided character set is empty");
-    registerMessage(MSGID_CHARSET_VALIDATOR_INVALID_COUNT,
-                    "The provided character set definition '%s' is invalid " +
-                    "because the value before the colon must be an integer " +
-                    "greater than zero");
-    registerMessage(MSGID_CHARSET_VALIDATOR_DUPLICATE_CHAR,
-                    "The provided character set definition '%s' is invalid " +
-                    "because it contains character '%s' which has already " +
-                    "been used");
-
-
-    registerMessage(MSGID_VIRTUAL_STATIC_GROUP_MULTIPLE_TARGETS,
-                    "The virtual static group defined in entry %s contains " +
-                    "multiple target group DNs, but only one is allowed");
-    registerMessage(MSGID_VIRTUAL_STATIC_GROUP_CANNOT_DECODE_TARGET,
-                    "Unable to decode \"%s\" as the target DN for group %s:  " +
-                    "%s");
-    registerMessage(MSGID_VIRTUAL_STATIC_GROUP_NO_TARGET,
-                    "The virtual static group defined in entry %s does not " +
-                    "contain a target group definition");
-    registerMessage(MSGID_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED,
-                    "Virtual static groups do not support nesting");
-    registerMessage(MSGID_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP,
-                    "Target group %s referenced by virtual static group %s " +
-                    "does not exist");
-    registerMessage(MSGID_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED,
-                    "Altering membership for virtual static group %s is not " +
-                    "allowed");
-    registerMessage(MSGID_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL,
-                    "Virtual static group %s references target group %s " +
-                    "which is itself a virtual static group.  One " +
-                    "virtual static group is not allowed to reference " +
-                    "another as its target group");
-
-
-    registerMessage(MSGID_FSCACHE_UPDATED_MAX_MEMORY_SIZE,
-                    "The amount of space that may be used for the entry " +
-                    "cache has been updated to %d bytes. If the previous " +
-                    "amount has been reduced, it may take some time for " +
-                    "entries to be purged so that the current cache space" +
-                    "consumption can reflect this new setting");
-    registerMessage(MSGID_FSCACHE_UPDATED_MAX_ENTRIES,
-                    "The number of entries that may be held in the entry " +
-                    "cache has been updated to %d.  If this value has been " +
-                    "reduced, it may take some time for entries to be purged " +
-                    "so that the cache can reflect this new setting");
-    registerMessage(MSGID_FSCACHE_UPDATED_LOCK_TIMEOUT,
-                    "The lock timeout that will be used to determine the " +
-                    "length of time that the cache should block while " +
-                    "attempting to acquire a lock for an entry has been " +
-                    "set to %d milliseconds");
-    registerMessage(MSGID_FSCACHE_UPDATED_INCLUDE_FILTERS,
-                    "The set of search filters that will control which " +
-                    "entries may be included in the cache has been updated");
-    registerMessage(MSGID_FSCACHE_UPDATED_EXCLUDE_FILTERS,
-                    "The set of search filters that will control which " +
-                    "entries should be be excluded from the cache has been " +
-                    "updated");
-    registerMessage(MSGID_FSCACHE_UPDATED_TYPE,
-                    "The entry cache type has been changed to %s");
-    registerMessage(MSGID_FSCACHE_UPDATED_JE_MEMORY_PCT,
-                    "The amount of memory that may be used for the entry " +
-                    "cache Berkeley DB JE internal cache has been updated " +
-                    "to %d percent of the total memory available to the JVM");
-    registerMessage(MSGID_FSCACHE_UPDATED_JE_MEMORY_SIZE,
-                    "The amount of JVM memory that may be used for the entry " +
-                    "cache Berkeley DB JE internal cache has been updated " +
-                    "to %d bytes");
-    registerMessage(MSGID_FSCACHE_UPDATED_IS_PERSISTENT,
-                    "The persistence state for the entry cache has been " +
-                    "changed to %s");
-    registerMessage(MSGID_FSCACHE_CANNOT_LOAD_PERSISTENT_DATA,
-                    "An error occurred while trying to load persistent cache." +
-                    " Persistent cache will be flushed now");
-    registerMessage(MSGID_FSCACHE_CANNOT_STORE_PERSISTENT_DATA,
-                    "An error occurred while trying to store persistent cache" +
-                    ". Persistent cache will be flushed now");
-    registerMessage(MSGID_FSCACHE_CANNOT_INITIALIZE,
-                    "A fatal error occurred while trying to initialize file " +
-                    "system entry cache. This cache will be disabled now");
-    registerMessage(MSGID_FSCACHE_HOMELESS,
-                    "A fatal error occurred while trying to setup file " +
-                    "system entry cache home. No suitable path can be found " +
-                    "to host the cache home");
-    registerMessage(MSGID_FSCACHE_SET_PERMISSIONS_FAILED,
-                    "Unable to set file permissions for the file system " +
-                    "entry cache backend database directory %s");
-    registerMessage(MSGID_FSCACHE_CANNOT_STORE_ENTRY,
-                    "Unable to store new cache entry in the file system " +
-                    "entry cache");
-    registerMessage(MSGID_FSCACHE_CANNOT_RETRIEVE_ENTRY,
-                    "Unable to retrieve an existing cache entry from the " +
-                    "file system entry cache");
-    registerMessage(MSGID_FSCACHE_CANNOT_SET_JE_MEMORY_PCT,
-                    "Internal error occurred while trying to set the entry " +
-                    "cache backend internal cache size as percentage. The " +
-                    "previous or default value will be used instead");
-    registerMessage(MSGID_FSCACHE_CANNOT_SET_JE_MEMORY_SIZE,
-                    "Internal error occurred while trying to set the entry " +
-                    "cache backend internal cache size in bytes. The " +
-                    "previous or default value will be used instead");
-    registerMessage(MSGID_FSCACHE_OFFLINE_STATE_FAIL,
-                    "%s backend current offline state does not match " +
-                    "persistent cache last recorded offline state. All " +
-                    "cached data for this backend is now discarded");
-    registerMessage(MSGID_FSCACHE_RESTORE_PROGRESS_REPORT,
-                    "Restored %d cache entries of %d total persistent cache " +
-                    "entries found");
-    registerMessage(MSGID_FSCACHE_SAVE_PROGRESS_REPORT,
-                    "Made persistent %d cache entries of %d total cache " +
-                    "entries found");
-    registerMessage(MSGID_FSCACHE_INDEX_NOT_FOUND,
-                    "No previous persistent cache state can be found. " +
-                    "Starting with an empty cache");
-    registerMessage(MSGID_FSCACHE_INDEX_IMPAIRED,
-                    "The persistent cache index is inconsistent or damaged. " +
-                    "Persistent cache will be flushed now");
-
-    registerMessage(MSGID_ENTRYUUID_VATTR_NOT_SEARCHABLE,
-                    "The %s attribute is not searchable and should not be " +
-                    "included in otherwise unindexed search filters");
-
-
-    registerMessage(MSGID_PWPSTATE_EXTOP_NO_PRIVILEGE,
-                    "You do not have sufficient privileges to use the " +
-                    "password policy state extended operation");
-    registerMessage(MSGID_PWPSTATE_EXTOP_NO_REQUEST_VALUE,
-                    "The provided password policy state extended request " +
-                    "did not include a request value");
-    registerMessage(MSGID_PWPSTATE_EXTOP_DECODE_FAILURE,
-                    "An unexpected error occurred while attempting to decode " +
-                    "password policy state extended request value:  %s");
-    registerMessage(MSGID_PWPSTATE_EXTOP_MULTIPLE_ENTRIES,
-                    "SEVERE ERROR:  Multiple entries were found with DN %s");
-    registerMessage(MSGID_PWPSTATE_EXTOP_INVALID_OP_ENCODING,
-                    "An unexpected error occurred while attempting to decode " +
-                    "an operation from the password policy state extended " +
-                    "request:  %s");
-    registerMessage(MSGID_PWPSTATE_EXTOP_NO_DISABLED_VALUE,
-                    "No value was provided for the password policy state " +
-                    "operation intended to set the disabled state for the " +
-                    "user.  Exactly one value (either 'true' or 'false') " +
-                    "must be given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_DISABLED_VALUE_COUNT,
-                    "Multiple values were provided for the password policy " +
-                    "state operation intended to set the disabled state " +
-                    "for the user.  Exactly one value (either 'true' or " +
-                    "'false') must be given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_DISABLED_VALUE,
-                    "The value provided for the password policy state " +
-                    "operation  intended to set the disabled state for the " +
-                    "user was invalid.  The value must be either 'true' or " +
-                    "'false'");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_ACCT_EXP_VALUE_COUNT,
-                    "Multiple values were provided for the password policy " +
-                    "state operation intended to set the account expiration " +
-                    "time for the user.  Exactly one value must be given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_ACCT_EXP_VALUE,
-                    "The value %s provided for the password policy state " +
-                    "operation used to set the account expiration time was " +
-                    "invalid:  %s.  The value should be specifed using the " +
-                    "generalized time format");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_PWCHANGETIME_VALUE_COUNT,
-                    "Multiple values were provided for the password policy " +
-                    "state operation intended to set the password changed " +
-                    "time for the user.  Exactly one value must be given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_PWCHANGETIME_VALUE,
-                    "The value %s provided for the password policy state " +
-                    "operation used to set the password changed time was " +
-                    "invalid:  %s.  The value should be specifed using the " +
-                    "generalized time format");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_PWWARNEDTIME_VALUE_COUNT,
-                    "Multiple values were provided for the password policy " +
-                    "state operation intended to set the password warned " +
-                    "time for the user.  Exactly one value must be given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_PWWARNEDTIME_VALUE,
-                    "The value %s provided for the password policy state " +
-                    "operation used to set the password warned time was " +
-                    "invalid:  %s.  The value should be specifed using the " +
-                    "generalized time format");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_ADD_FAILURE_TIME_COUNT,
-                    "Multiple values were provided for the password policy " +
-                    "state operation intended to add an authentication " +
-                    "failure time for the user.  Exactly one value must be " +
-                    "given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_AUTH_FAILURE_TIME,
-                    "The value %s provided for the password policy state " +
-                    "operation used to update the authentication failure " +
-                    "times was invalid:  %s.  The value should be specifed " +
-                    "using the generalized time format");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_LAST_LOGIN_TIME_COUNT,
-                    "Multiple values were provided for the password policy " +
-                    "state operation intended to set the last login time for " +
-                    "the user.  Exactly one value must be given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_LAST_LOGIN_TIME,
-                    "The value %s provided for the password policy state " +
-                    "operation used to set the last login time was invalid:  " +
-                    "%s.  The value should be specifed using the " +
-                    "generalized time format");
-    registerMessage(MSGID_PWPSTATE_EXTOP_NO_RESET_STATE_VALUE,
-                    "No value was provided for the password policy state " +
-                    "operation intended to set the reset state for the " +
-                    "user.  Exactly one value (either 'true' or 'false') " +
-                    "must be given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_RESET_STATE_VALUE_COUNT,
-                    "Multiple values were provided for the password policy " +
-                    "state operation intended to set the reset state " +
-                    "for the user.  Exactly one value (either 'true' or " +
-                    "'false') must be given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_RESET_STATE_VALUE,
-                    "The value provided for the password policy state " +
-                    "operation  intended to set the reset state for the " +
-                    "user was invalid.  The value must be either 'true' or " +
-                    "'false'");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_ADD_GRACE_LOGIN_TIME_COUNT,
-                    "Multiple values were provided for the password policy " +
-                    "state operation intended to add a grace login use time " +
-                    "for the user.  Exactly one value must be given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME,
-                    "The value %s provided for the password policy state " +
-                    "operation used to update the grace login use times was " +
-                    "invalid:  %s.  The value should be specifed using the " +
-                    "generalized time format");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_REQUIRED_CHANGE_TIME_COUNT,
-                    "Multiple values were provided for the password policy " +
-                    "state operation intended to set the required change " +
-                    "time for the user.  Exactly one value must be given");
-    registerMessage(MSGID_PWPSTATE_EXTOP_BAD_REQUIRED_CHANGE_TIME,
-                    "The value %s provided for the password policy state " +
-                    "operation used to set the required change time was " +
-                    "invalid:  %s.  The value should be specifed using the " +
-                    "generalized time format");
-    registerMessage(MSGID_PWPSTATE_EXTOP_UNKNOWN_OP_TYPE,
-                    "The password policy state extended request included an " +
-                    "operation with an invalid or unsupported operation type " +
-                    "of %s");
-
-
-    registerMessage(MSGID_SMTPALERTHANDLER_NO_SMTP_SERVERS,
-                    "The Directory Server is not configured with any " +
-                    "SMTP servers.  The SMTP alert handler cannot be used " +
-                    "unless the Directory Server is configured with " +
-                    "information about at least one SMTP server");
-    registerMessage(MSGID_SMTPALERTHANDLER_ERROR_SENDING_MESSAGE,
-                    "An error occurred when trying to send an e-mail message " +
-                    "for administrative alert with type %s and message %s:  " +
-                    "%s");
-
-
-    registerMessage(MSGID_REGEXMAP_INVALID_MATCH_PATTERN,
-                    "The provided match pattern \"%s\" could not be parsed " +
-                    "as a regular expression:  %s");
-    registerMessage(MSGID_REGEXMAP_UNKNOWN_ATTR,
-                    "Configuration entry %s contains value %s for attribute " +
-                    ATTR_MATCH_ATTRIBUTE + " but that is not a valid name or " +
-                    "OID for any attribute type defined in the Directory " +
-                    "Server schema");
-    registerMessage(MSGID_REGEXMAP_MULTIPLE_MATCHING_ENTRIES,
-                    "The processed ID string %s mapped to multiple users");
-    registerMessage(MSGID_REGEXMAP_INEFFICIENT_SEARCH,
-                    "The internal search based on processed ID string %s "+
-                    "could not be processed efficiently:  %s.  Check the " +
-                    "server configuration to ensure that all associated " +
-                    "backends are properly configured for these types of " +
-                    "searches");
-    registerMessage(MSGID_REGEXMAP_SEARCH_FAILED,
-                    "An internal failure occurred while attempting to " +
-                    "resolve processed ID string %s to a user entry:  %s");
-    registerMessage(MSGID_STATICGROUP_ADD_NESTED_GROUP_ALREADY_EXISTS,
-                    "Cannot add group %s as a new nested group of static " +
-                    "group %s because that group is already in the nested " +
-                    "group list for the group");
-    registerMessage(MSGID_STATICGROUP_REMOVE_NESTED_GROUP_NO_SUCH_GROUP,
-                    "Cannot remove group %s as a nested group of static " +
-                    "group %s because that group is not included in the " +
-                    "nested group list for the group");
-    registerMessage(MSGID_STATICGROUP_GROUP_INSTANCE_INVALID,
-                    "Group instance with DN %s has been deleted and is no " +
-                    "longer valid");
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/JebMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/JebMessages.java
deleted file mode 100644
index cfd3c89..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/JebMessages.java
+++ /dev/null
@@ -1,1669 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the JE Backend.
- */
-public class JebMessages
-{
-  /**
-   * The message ID of an error indicating that the Directory Server has asked a
-   * JE backend instance to process an operation on an entry that is not in the
-   * scope of that backend instance.  This message takes one string argument
-   * which is the DN of the entry.
-   */
-  public static final int MSGID_JEB_INCORRECT_ROUTING =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 1;
-
-  /**
-   * The message ID of an error indicating that the JE backend database files
-   * could not be opened.  This message takes one string argument which is the
-   * error message provided by the JE library.
-   */
-  public static final int MSGID_JEB_OPEN_DATABASE_FAIL =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 2;
-
-  /**
-   * The message ID of an error indicating that the JE backend environment
-   * could not be opened.  This message takes one string argument which is the
-   * error message provided by the JE library.
-   */
-  public static final int MSGID_JEB_OPEN_ENV_FAIL =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 3;
-
-  /**
-   * The message ID of an error indicating that the current highest entry ID
-   * in the database could not be determined.  This message takes no arguments.
-   */
-  public static final int MSGID_JEB_HIGHEST_ID_FAIL =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 5;
-
-  /**
-   * The message ID of an error indicating that the requested operation is not
-   * supported by the JE backend implementation.  This message takes no
-   * arguments.
-   */
-  public static final int MSGID_JEB_FUNCTION_NOT_SUPPORTED =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_WARNING | 6;
-
-  /**
-   * The message ID of an error indicating that the backend database directory
-   * could not be created on the file system.  This message takes one string
-   * argument which is the error message provided by the system.
-   */
-  public static final int MSGID_JEB_CREATE_FAIL =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 7;
-
-  /**
-   * The message ID of an error indicating that the backend database directory
-   * and files could not be removed.  This message takes one string argument
-   * which is the error message provided by the system.
-   */
-  public static final int MSGID_JEB_REMOVE_FAIL =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 8;
-
-  /**
-   * The message ID of an error indicating that the backend database directory
-   * is not a valid file system directory.  This message takes one string
-   * argument which is the backend database directory pathname.
-   */
-  public static final int MSGID_JEB_DIRECTORY_INVALID =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 9;
-
-  /**
-   * The message ID of an error indicating that the DN database does not contain
-   * a record for an entry whose DN it is expected to contain.  This message
-   * takes one string argument which is the entry DN.
-   */
-  public static final int MSGID_JEB_MISSING_DN2ID_RECORD =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 10;
-
-  /**
-   * The message ID of an error indicating that the entry database does not
-   * contain a record for an entry ID referenced by the DN database.  This
-   * message takes one string argument which is the string representation of the
-   * entry ID.
-   */
-  public static final int MSGID_JEB_MISSING_ID2ENTRY_RECORD =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 11;
-
-  /**
-   * The message ID of an error indicating that the entry database contains a
-   * record that is not valid.  This message takes one string argument which is
-   * the string representation of the entry ID forming the key to the record.
-   */
-  public static final int MSGID_JEB_ENTRY_DATABASE_CORRUPT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 12;
-
-  /**
-   * The message ID of an error indicating that an exception was raised by the
-   * JE library while accessing the database.  This message takes one string
-   * argument which is the error message provided by the JE library.
-   */
-  public static final int MSGID_JEB_DATABASE_EXCEPTION =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 14;
-
-  /**
-   * The message ID used to describe the attribute which configures
-   * the attribute type of an attribute index.
-   */
-  public static final int MSGID_CONFIG_DESCRIPTION_INDEX_ATTRIBUTE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 16;
-
-
-  /**
-   * The message ID used to describe the attribute which configures
-   * the type of indexing for an attribute index.
-   */
-  public static final int MSGID_CONFIG_DESCRIPTION_INDEX_TYPE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 17;
-
-
-  /**
-   * The message ID used to describe the attribute which configures
-   * the entry limit for an attribute index.
-   */
-  public static final int MSGID_CONFIG_DESCRIPTION_INDEX_ENTRY_LIMIT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 18;
-
-
-  /**
-   * The message ID used to describe the attribute which configures
-   * the substring length for an attribute index.
-   */
-  public static final int MSGID_CONFIG_DESCRIPTION_INDEX_SUBSTRING_LENGTH =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 25;
-
-
-  /**
-   * The message ID of an error indicating that the requested type of index
-   * cannot be configured for the given attribute type because the attribute
-   * definition does not provide an appropriate matching rule.  This message
-   * takes two string arguments, the first argument is the attribute type name
-   * and the second argument is the type of indexing requested.
-   */
-  public static final int MSGID_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 26;
-
-  /**
-   * The message ID of an error indicating that an unchecked exception was
-   * raised during a database transaction.  This message takes no arguments.
-   */
-  public static final int MSGID_JEB_UNCHECKED_EXCEPTION =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 28;
-
-  /**
-   * The message ID of an informational message indicating that a forced
-   * cleaning of the database log files has started.  This message takes two
-   * arguments, the first argument is the current number of log files in the
-   * database and the second argument is the database directory pathname.
-   */
-  public static final int MSGID_JEB_CLEAN_DATABASE_START =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_NOTICE | 29;
-
-  /**
-   * The message ID of an informational message indicating that some log files
-   * have been marked for cleaning during a forced cleaning of the database log
-   * files.  This message takes one argument which is the number of log files
-   * marked for cleaning.
-   */
-  public static final int MSGID_JEB_CLEAN_DATABASE_MARKED =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_NOTICE | 30;
-
-  /**
-   * The message ID of an informational message indicating that a forced
-   * cleaning of the database log files has finished.  This message takes one
-   * argument which is the current number of log files in the database.
-   */
-  public static final int MSGID_JEB_CLEAN_DATABASE_FINISH =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_NOTICE | 31;
-
-  /**
-   * The message ID of an informational message indicating that the
-   * administrative limit on the number of entries that may be deleted during
-   * a subtree delete operation has been exceeded.  This message takes one
-   * argument which is the number of entries that were deleted.
-   */
-  public static final int MSGID_JEB_SUBTREE_DELETE_SIZE_LIMIT_EXCEEDED =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_NOTICE | 32;
-
-  /**
-   * The message ID of an informational message indicating how many entries were
-   * deleted by a subtree delete operation.  This message takes one argument
-   * which is the number of entries that were deleted.
-   */
-  public static final int MSGID_JEB_DELETED_ENTRY_COUNT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_NOTICE | 33;
-
-  /**
-   * The message ID of an error indicating that the JE backend configuration
-   * contains more than one configuration entry of a given object class where
-   * only one entry of that object class is allowed.  This message takes two
-   * string arguments, the first argument is the DN of the configuration entry
-   * that will be ignored and the second argument is the configuration entry
-   * object class.
-   */
-  public static final int MSGID_JEB_DUPLICATE_CONFIG_ENTRY =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 36;
-
-
-  /**
-   * The message ID of an error indicating that the JE backend configuration
-   * contains a configuration entry that is not recognized.  This message takes
-   * one string argument which is the DN of the configuration entry that will
-   * be ignored.
-   */
-  public static final int MSGID_JEB_CONFIG_ENTRY_NOT_RECOGNIZED =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 37;
-
-
-  /**
-   * The message ID of an error indicating that a configuration entry for an
-   * attribute index references an attribute type that is not known by the
-   * Directory Server.  This message takes two string arguments, the first
-   * argument is the DN of the configuration entry that will be ignored and the
-   * second argument is the unknown attribute type name.
-   */
-  public static final int MSGID_JEB_INDEX_ATTRIBUTE_TYPE_NOT_FOUND =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 38;
-
-
-  /**
-   * The message ID of an error indicating that a configuration entry for an
-   * attribute index references an attribute type that has already been
-   * referenced in a different configuration entry.  This message takes two
-   * arguments, the first argument is the DN of the configuration entry that
-   * will be ignored and the second argument is the attribute type name.
-   */
-  public static final int MSGID_JEB_DUPLICATE_INDEX_CONFIG =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 39;
-
-
-  /**
-   * The message ID of an error indicating that an I/O error occurred during
-   * a backend import or export operation.  This message takes one string
-   * argument which is the error message provided by the system.
-   */
-  public static final int MSGID_JEB_IO_ERROR =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 40;
-
-
-/*
-  public static final int MSGID_JEB_INDEX_THREAD_EXCEPTION =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 41;
-*/
-
-
-  /**
-   * The message ID of an informational message indicating that a JE backend
-   * instance has started, and providing the current number of entries
-   * stored in the backend.  This message takes two arguments which are the
-   * backend ID and the current number of entries stored in the backend.
-   */
-  public static final int MSGID_JEB_BACKEND_STARTED =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_NOTICE | 42;
-
-
-  /**
-   * The message ID of an error to be written to an import rejects file,
-   * indicating that the parent entry of an entry to be imported does not exist.
-   * This message takes one string argument which is the DN of the parent entry.
-   */
-  public static final int MSGID_JEB_IMPORT_PARENT_NOT_FOUND =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 43;
-
-
-  /**
-   * The message ID of an error to be written to an import rejects file,
-   * indicating that the entry to be imported already exists, and the import
-   * options do not allow the entry to be replaced.
-   */
-  public static final int MSGID_JEB_IMPORT_ENTRY_EXISTS =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_WARNING | 44;
-
-
-  /**
-   * The message ID of an error indicating that there is no attribute index
-   * configured for an attribute type that was provided to an index
-   * verification job.  This message takes one string argument which is the
-   * attribute type name.
-   */
-  public static final int MSGID_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 45;
-
-
-  /**
-   * The message ID of an error indicating that the base entry of a search
-   * operation does not exist.  This message takes one string argument which is
-   * the DN of the search base entry.
-   */
-  public static final int MSGID_JEB_SEARCH_NO_SUCH_OBJECT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 46;
-
-
-  /**
-   * The message ID of an error indicating that the entry provided in an add
-   * operation could not be added because its parent entry does not exist.  This
-   * message takes one string argument which is the DN of the entry to be
-   * added.
-   */
-  public static final int MSGID_JEB_ADD_NO_SUCH_OBJECT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 47;
-
-
-  /**
-   * The message ID of an error indicating that the entry provided in a delete
-   * operation does not exist.  This message takes one string argument which is
-   * the DN of the entry to be deleted.
-   */
-  public static final int MSGID_JEB_DELETE_NO_SUCH_OBJECT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 48;
-
-
-  /**
-   * The message ID of an error indicating that the entry provided in a modify
-   * operation does not exist.  This message takes one string argument which is
-   * the DN of the entry to be modified.
-   */
-  public static final int MSGID_JEB_MODIFY_NO_SUCH_OBJECT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 49;
-
-
-  /**
-   * The message ID of an error indicating that the entry provided in a modify
-   * DN operation does not exist.  This message takes one string argument which
-   * is the DN of the entry to be renamed.
-   */
-  public static final int MSGID_JEB_MODIFYDN_NO_SUCH_OBJECT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 50;
-
-
-  /**
-   * The message ID of an error indicating that the entry provided in an add
-   * operation already exists.  This message takes one string argument which is
-   * the DN of the entry to be added.
-   */
-  public static final int MSGID_JEB_ADD_ENTRY_ALREADY_EXISTS =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 51;
-
-
-  /**
-   * The message ID of an error indicating that the entry provided in a delete
-   * operation could not be deleted because it is not a leaf entry, and the
-   * subtree delete control was not specified.  This message takes one argument
-   * which is the DN of the entry to be deleted.
-   */
-  public static final int MSGID_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 52;
-
-
-  /**
-   * The message ID of an error indicating that the modify DN operation could
-   * not be performed because an entry already exists with the same DN as that
-   * of the renamed entry.  This message takes one string argument which is the
-   * DN of the existing entry.
-   */
-  public static final int MSGID_JEB_MODIFYDN_ALREADY_EXISTS =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 53;
-
-
-  /**
-   * The message ID of an error indicating that the modify DN operation could
-   * not be performed because the specified new superior entry does not exist.
-   * This message takes one string argument which is the DN of the new
-   * superior entry.
-   */
-  public static final int MSGID_JEB_NEW_SUPERIOR_NO_SUCH_OBJECT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 54;
-
-  /**
-   * The message ID used to log the size of the database cache after preloading.
-   */
-  public static final int MSGID_JEB_CACHE_SIZE_AFTER_PRELOAD =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_NOTICE | 61;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain the MAC provider for the backend backup.  This takes
-   * two arguments, which are the name of the desired MAC algorithm and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_JEB_BACKUP_CANNOT_GET_MAC =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 63;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain the message digest for the backend backup.  This takes
-   * two arguments, which are the name of the desired digest algorithm and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_JEB_BACKUP_CANNOT_GET_DIGEST =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 64;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to create the archive file for a backend backup.  This takes
-   * three arguments, which are the name of the archive file, the path to the
-   * archive directory, and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_JEB_BACKUP_CANNOT_CREATE_ARCHIVE_FILE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 65;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain the cipher for the backend backup.  This takes two
-   * arguments, which are the name of the desired cipher algorithm and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_JEB_BACKUP_CANNOT_GET_CIPHER =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 66;
-
-
-
-  /**
-   * The message ID for the message that will be used for the message containing
-   * the comment to include in the backend archive zip.  This takes three
-   * arguments, which are the Directory Server product name, the backup ID,
-   * and the backend ID.
-   */
-  public static final int MSGID_JEB_BACKUP_ZIP_COMMENT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 67;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to obtain a list of the log files to include in the backup.
-   * This takes two arguments, which are the path to the directory containing
-   * the log files and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_JEB_BACKUP_CANNOT_LIST_LOG_FILES =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 68;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to write a file to the archive file.  This takes two
-   * arguments, which are the name of the file and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 69;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to close the output stream for the backend archive.  This takes
-   * three arguments, which are the name of the backend archive file, the path
-   * to the directory containing that file, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_JEB_BACKUP_CANNOT_CLOSE_ZIP_STREAM =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 70;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the backup descriptor with information about the
-   * backend backup.  This takes two arguments, which are the path to the backup
-   * descriptor file and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 71;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * verifying the unsigned hash of a backup.  This takes one argument, which
-   * is the backup ID containing the hash verification error.
-   */
-  public static final int MSGID_JEB_BACKUP_UNSIGNED_HASH_ERROR =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 72;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * verifying the signed hash of a backup.  This takes one argument, which
-   * is the backup ID containing the signed hash verification error.
-   */
-  public static final int MSGID_JEB_BACKUP_SIGNED_HASH_ERROR =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 73;
-
-
-
-  /**
-   * The message ID for the message that will be used if an incremental
-   * backup is attempted when there has been no previous backup.
-   */
-  public static final int MSGID_JEB_INCR_BACKUP_REQUIRES_FULL =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 74;
-
-
-
-  /**
-   * The message ID for the message that will be used if the directory
-   * containing the files restored from a backup could not be renamed
-   * to the current backend directory.  This takes two arguments,
-   * the path of the restored directory and the path of the backend
-   * directory.
-   */
-  public static final int MSGID_JEB_CANNOT_RENAME_RESTORE_DIRECTORY =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 75;
-
-
-
-  /**
-   * The message ID for the message that will be used if an incremental
-   * backup is attempted and the base backup could not be determined.  This
-   * takes one argument which is a string representation of the list
-   * of IDs of suitable base backups.
-   */
-  public static final int MSGID_JEB_INCR_BACKUP_FROM_WRONG_BASE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 76;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backup tag
-   * file could not be created in the backend database directory.
-   * This takes two arguments, the name of the file and the directory.
-   */
-  public static final int MSGID_JEB_CANNOT_CREATE_BACKUP_TAG_FILE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 77;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * restoring a backup. This takes two arguments, the backup ID, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_JEB_BACKUP_CANNOT_RESTORE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 78;
-
-
-
-  /**
-   * The message ID for the message that will be used if backup information
-   * for a needed backup ID cannot be found in the backup directory.
-   * This takes two arguments, the backup directory, and the required backup ID.
-   */
-  public static final int MSGID_JEB_BACKUP_MISSING_BACKUPID =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 79;
-
-
-
-  /**
-   * The message ID used to log an informational message in the backup process.
-   * This message takes one argument, the name of a file that was not changed
-   * since the previous backup.
-   */
-  public static final int MSGID_JEB_BACKUP_FILE_UNCHANGED =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 82;
-
-
-
-  /**
-   * The message ID used to log an informational message in the backup process.
-   * This message takes one argument, the number of additional log files
-   * to be included in the backup due to cleaner activity.
-   */
-  public static final int MSGID_JEB_BACKUP_CLEANER_ACTIVITY =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 83;
-
-
-
-  /**
-   * The message ID used to log an informational message in the backup process.
-   * This message takes one argument, the name of an archived file being
-   * processed during a restore in verify-only mode.
-   */
-  public static final int MSGID_JEB_BACKUP_VERIFY_FILE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 84;
-
-
-
-  /**
-   * The message ID used to log an informational message in the backup process.
-   * This message takes two arguments, the name of an archived file being
-   * restored, and its size in bytes.
-   */
-  public static final int MSGID_JEB_BACKUP_RESTORED_FILE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 85;
-
-
-
-  /**
-   * The message ID used to log an informational message in the backup process.
-   * This message takes one argument, the name of a file being archived.
-   */
-  public static final int MSGID_JEB_BACKUP_ARCHIVED_FILE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 86;
-
-
-
-  /**
-   * The message ID used to log an informational message in the export process.
-   * This message takes four arguments, the total number of entries exported,
-   * the number of entries skipped, the total time in seconds taken by the
-   * export process, and the floating point average number of entries
-   * exported per second.
-   */
-  public static final int MSGID_JEB_EXPORT_FINAL_STATUS =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 87;
-
-
-
-  /**
-   * The message ID used to log an informational message in the export process.
-   * This message takes three arguments, the number of entries exported so far,
-   * the number of entries skipped so far, and the floating point number of
-   * entries exported per second since the previous progress report.
-   */
-  public static final int MSGID_JEB_EXPORT_PROGRESS_REPORT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 88;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes one argument, the configured import thread count
-   * which will be used by this import process.
-   */
-  public static final int MSGID_JEB_IMPORT_THREAD_COUNT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 89;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes one argument, the size in bytes of the buffer allocated
-   * to each import thread.
-   */
-  public static final int MSGID_JEB_IMPORT_BUFFER_SIZE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 90;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes one argument, the number of seconds it took to process
-   * the LDIF file.
-   */
-  public static final int MSGID_JEB_IMPORT_LDIF_PROCESSING_TIME =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 91;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes one argument, the number of seconds it took to build
-   * the indexes.
-   */
-  public static final int MSGID_JEB_IMPORT_INDEX_PROCESSING_TIME =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 92;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes no arguments.
-   */
-  public static final int MSGID_JEB_IMPORT_CLOSING_DATABASE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 93;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes four arguments, the total number of entries imported,
-   * the number of entries rejected, the total time in seconds taken by the
-   * import process, and the floating point overall average number of entries
-   * imported per second.
-   */
-  public static final int MSGID_JEB_IMPORT_FINAL_STATUS =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 94;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes one argument, the number of index values that
-   * exceeded the entry limit.
-   */
-  public static final int MSGID_JEB_IMPORT_ENTRY_LIMIT_EXCEEDED_COUNT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 95;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes three arguments, the number of entries imported so far,
-   * the number of entries rejected so far, and the floating point number of
-   * entries imported per second since the previous progress report.
-   */
-  public static final int MSGID_JEB_IMPORT_PROGRESS_REPORT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 96;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes two arguments, the current amount of free heap memory in
-   * megabytes, and the floating point number of database cache misses per
-   * imported entry since the previous progress report.
-   */
-  public static final int MSGID_JEB_IMPORT_CACHE_AND_MEMORY_REPORT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 97;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes one argument, the name of the index file having no data
-   * to be loaded.
-   */
-  public static final int MSGID_JEB_INDEX_MERGE_NO_DATA =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 98;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes two arguments, the number of source intermediate data
-   * files to be merged, and the name of the destination index file.
-   */
-  public static final int MSGID_JEB_INDEX_MERGE_START =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 99;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes one argument, the name of the index file that has been
-   * loaded.
-   */
-  public static final int MSGID_JEB_INDEX_MERGE_COMPLETE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 100;
-
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process.  This message takes four arguments, the total number of records
-   * checked, the number of errors found, the total time in seconds taken by the
-   * verify process, and the floating point overall average number of records
-   * checked per second.
-   */
-  public static final int MSGID_JEB_VERIFY_CLEAN_FINAL_STATUS =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 101;
-
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process.  This message takes one argument, the number of records that
-   * reference more than one entry.
-   */
-  public static final int MSGID_JEB_VERIFY_MULTIPLE_REFERENCE_COUNT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 102;
-
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process.  This message takes one argument, the number of records that
-   * exceeded the entry limit.
-   */
-  public static final int MSGID_JEB_VERIFY_ENTRY_LIMIT_EXCEEDED_COUNT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 103;
-
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process.  This message takes one argument, the floating point average
-   * number of entries referenced per record (not including records that
-   * exceed the entry limit).
-   */
-  public static final int MSGID_JEB_VERIFY_AVERAGE_REFERENCE_COUNT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 104;
-
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process.  This message takes one argument, the maximum number of entries
-   * referenced by a single record (not including records that exceed the
-   * entry limit).
-   */
-  public static final int MSGID_JEB_VERIFY_MAX_REFERENCE_COUNT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 105;
-
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process.  This message takes four arguments, the total number of entries
-   * checked, the number of errors found, the total time in seconds taken by the
-   * verify process, and the floating point overall average number of entries
-   * checked per second.
-   */
-  public static final int MSGID_JEB_VERIFY_FINAL_STATUS =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 106;
-
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process.  This message takes no arguments.
-   */
-  public static final int MSGID_JEB_VERIFY_ENTRY_LIMIT_STATS_HEADER =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 107;
-
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process.  This message takes five arguments, the name of the index file,
-   * the number of records that exceed the entry limit, and the minimum, maximum
-   * and median number of entries referenced by those records.
-   */
-  public static final int MSGID_JEB_VERIFY_ENTRY_LIMIT_STATS_ROW =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 108;
-
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process.  This message takes three arguments, the number of records
-   * checked so far, the number of errors found so far, and the floating point
-   * average number of records checked per second since the previous progress
-   * report.
-   */
-  public static final int MSGID_JEB_VERIFY_PROGRESS_REPORT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 109;
-
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process. This message takes two arguments, the current amount of free heap
-   * memory in megabytes, and the floating point number of database cache misses
-   * per record processed since the previous progress report.
-   */
-  public static final int MSGID_JEB_VERIFY_CACHE_AND_MEMORY_REPORT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 110;
-
-
-
-  /**
-   * The message ID used to return an informative error message to the client
-   * when the cookie sent by the client in a paged results control
-   * was not recognized.  This message takes one argument, which is a string
-   * containing the hex bytes of the cookie.
-   */
-  public static final int MSGID_JEB_INVALID_PAGED_RESULTS_COOKIE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 111;
-
-
-
-  /**
-   * The message ID used to return an informative message to the client when
-   * a referral result was sent because of a referral entry at or above the
-   * target entry.  This message takes one string argument which is the DN
-   * of the referral entry.
-   */
-  public static final int MSGID_JEB_REFERRAL_RESULT_MESSAGE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 112;
-
-
-
-  /**
-   * The message ID used to log an informational message in the import process.
-   * This message takes one argument, a string representation of the JE
-   * environment configuration properties.
-   */
-  public static final int MSGID_JEB_IMPORT_ENVIRONMENT_CONFIG =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 119;
-
-
-  /**
-   * The message ID used to indicate that an LDIF import pass has completed and
-   * it is time to begin the intermediate index merge process.  This takes a
-   * single argument, which is the pass number that has completed.
-   */
-  public static final int MSGID_JEB_IMPORT_BEGINNING_INTERMEDIATE_MERGE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 121;
-
-
-
-  /**
-   * The message ID used to indicate that an LDIF import processing has
-   * completed and it is time to begin the final index merge process.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_JEB_IMPORT_BEGINNING_FINAL_MERGE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 122;
-
-
-
-  /**
-   * The message ID used to indicate that the intermediate index merge has
-   * completed and that LDIF processing will resume.  This takes a single
-   * argument, which is the length of time in seconds that the merge was in
-   * progress.
-   */
-  public static final int MSGID_JEB_IMPORT_RESUMING_LDIF_PROCESSING =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 123;
-
-
-
-  /**
-   * The message ID used to indicate that the final index merge has completed.
-   * This takes a single argument, which is the length of time in seconds that
-   * the merge was in progress.
-   */
-  public static final int MSGID_JEB_IMPORT_FINAL_MERGE_COMPLETED =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 124;
-
-
-
-  /**
-   * The message ID of an error indicating the version of DatabaseEntry is
-   * incompatible and can not be decoded.
-   */
-  public static final int MSGID_JEB_INCOMPATIBLE_ENTRY_VERSION =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 126;
-
-
-
-  /**
-   * The message ID for the string representation of the result code that will
-   * be used for operations that failed because the operation lookthrough
-   *  limit was exceeded.
-   */
-  public static final int MSGID_JEB_LOOKTHROUGH_LIMIT_EXCEEDED =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 127;
-
-
-
-  /**
-   * The message ID of an error indicating that the file permissions for the
-   * database directory was not set.
-   */
-  public static final int MSGID_JEB_SET_PERMISSIONS_FAILED =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_WARNING | 128;
-
-  /**
-   * The message ID of an error indicating the entry count of a container can
-   * not be determined.
-   */
-  public static final int MSGID_JEB_GET_ENTRY_COUNT_FAILED =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_WARNING | 129;
-
-
-
-  /**
-   * The message ID used to indicate that a configuration attribute change
-   * will not take effect until the backend is restarted.  This message
-   * takes one argument, the name of the configuration attribute.
-   */
-  public static final int MSGID_JEB_CONFIG_ATTR_REQUIRES_RESTART =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 130;
-
-  /**
-   * The message ID used to log an informational message in the rebuild index
-   * process.  This message takes four arguments: the completed percentage,
-   * the number of entries processed, the total number of entries to process,
-   * the floating point average number of records processed per second
-   * since the previous progress.
-   */
-  public static final int MSGID_JEB_REBUILD_PROGRESS_REPORT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 131;
-
-
-
-  /**
-   * The message ID used to log an informational message in the rebuild index
-   * process. This message takes two arguments: the current amount of free heap
-   * memory in megabytes, and the floating point number of database cache misses
-   * per record processed since the previous progress report.
-   */
-  public static final int MSGID_JEB_REBUILD_CACHE_AND_MEMORY_REPORT =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 132;
-
-
-  /**
-   * The message ID used to log an informational message in the verify index
-   * process.  This message takes seven arguments: the total number of entries
-   * processed, the total number of rebuilt entries, the total number
-   * of duplicated entries, the total number of skipped entries, the total time
-   * for the rebuild process to complete, and the floating point overall number
-   * of records processed per second.
-   */
-  public static final int MSGID_JEB_REBUILD_FINAL_STATUS =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 133;
-
-  /**
-   * The message ID used to indicate that an error occurred in an index rebuild
-   * thread and it is terminated. This message takes two arguments: the name
-   * of the index rebuild thread that failed and the exception that caused
-   * the failure.
-   */
-  public static final int MSGID_JEB_REBUILD_INDEX_FAILED =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 134;
-
-  /**
-   * The message ID used to indicate that an error occurred while inserting
-   * an entry into a database/index during the rebuild process. This message
-   * takes two arguments: the name of the database/index being inserted into,
-   * and the exception that caused the failure.
-   */
-  public static final int MSGID_JEB_REBUILD_INSERT_ENTRY_FAILED =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 135;
-
-  /**
-   * The message ID used to indicate that another rebuild process for an index
-   * is already in progress. This message takes the name of the conflicting
-   * index as the argument.
-   */
-  public static final int MSGID_JEB_REBUILD_INDEX_CONFLICT =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 136;
-
-  /**
-   * The message ID used to log an information message about the rebuild job.
-   * This message takes 2 arguments: the names of the index in the rebuild job
-   * and the number of total records to process.
-   */
-  public static final int MSGID_JEB_REBUILD_START =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 137;
-
-  /**
-   * The message ID of an error indicating that rebuilding of system indexes
-   * can not be done while the backend is online.
-   */
-  public static final int MSGID_JEB_REBUILD_BACKEND_ONLINE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 138;
-
-  /**
-   * The message ID to use if an error occurs while attempting to retrieve an
-   * entry to examine while sorting.  This takes two arguments, which are a
-   * string representation of the entry ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_ENTRYIDSORTER_CANNOT_EXAMINE_ENTRY =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 139;
-
-  /**
-   * The message ID of an error indicating that the base entry of a search
-   * operation does not exist.  This message takes one string argument which is
-   * the DN of the search base entry.
-   */
-  public static final int MSGID_JEB_SEARCH_CANNOT_SORT_UNINDEXED =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 140;
-
-  /**
-   * The message ID to use if a VLV request has a negative start position.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_ENTRYIDSORTER_NEGATIVE_START_POS =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 141;
-
-  /**
-   * The message ID to use if a VLV request has an offset beyond the end of the
-   * entry set.  This takes two arguments, which are the provided offset and the
-   * list size.
-   */
-  public static final int MSGID_ENTRYIDSORTER_OFFSET_TOO_LARGE =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 142;
-
-  /**
-   * The message ID to use if a VLV request specifies a target value that is
-   * larger than all values in the sort list.  This does not take any arguments.
-   */
-  public static final int MSGID_ENTRYIDSORTER_TARGET_VALUE_NOT_FOUND =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 143;
-
-
-  /**
-   * The message ID of an error indicating that the search request included both
-   * the paged results control and the VLV control.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 144;
-
-  /**
-   * The message ID of an error indicating that unindexed searches are not
-   * allowed without the unindexed search prilvilege. This does not take
-   * any arguments.
-   */
-  public static final int MSGID_JEB_SEARCH_UNINDEXED_INSUFFICIENT_PRIVILEGES =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 145;
-
-  /**
-   * The message ID of an error indicating that setting file permissions
-   * for the database directory is not supported.
-   */
-  public static final int MSGID_JEB_UNABLE_SET_PERMISSIONS =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_WARNING | 146;
-
-   /**
-   * The message ID used to indicate a index entry limit has been
-   * exceeded and that the index needs to be rebuilt before the
-   * new entry limit is used.
-   */
-  public static final int MSGID_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_NOTICE | 148;
-
-  /**
-   * The message ID used to indicate the newly created index needs
-   * to be rebuilt before it will be used.
-   */
-  public static final int MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_NOTICE | 150;
-
-  /**
-   * The message ID used to indicate an index is corrupt and needs
-   * to be rebuilt before it will be used again.
-   */
-  public static final int MSGID_JEB_INDEX_CORRUPT_REQUIRES_REBUILD =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 151;
-
-  /**
-   * The message ID used to indicate an import process can not start
-   * while the backend is online.
-   */
-  public static final int MSGID_JEB_IMPORT_BACKEND_ONLINE =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 152;
-
-  /**
-   * The message ID used to indicate an error has occurred during the import
-   * process.
-   */
-  public static final int MSGID_JEB_IMPORT_THREAD_EXCEPTION =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 153;
-
-  /**
-   * The message ID used to indicate an error where there are no more worker
-   * threads to process the imported entries.
-   */
-  public static final int MSGID_JEB_IMPORT_NO_WORKER_THREADS =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 154;
-
-  /**
-   * The message ID used to indicate an error where the temp import directory
-   * can not be created.
-   */
-  public static final int MSGID_JEB_IMPORT_CREATE_TMPDIR_ERROR =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 155;
-
-  /**
-   * The message ID of the message that will be used if an invalid logging level
-   * was requested.  This takes two arguments, which are the invalid logging
-   * level and the configuration entry DN.
-   */
-  public static final int MSGID_JEB_INVALID_LOGGING_LEVEL =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 156;
-
-  /**
-   * The message ID of the message indicating the migration stage has started
-   * during an import process. This takes two arguments, which are the type
-   * of entries being migrated and the base DN of the entry container they
-   * are from.
-   */
-  public static final int MSGID_JEB_IMPORT_MIGRATION_START =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 157;
-
-  /**
-   * The message ID of the message indicating the LDIF reading stage has
-   * started during an import process.
-   */
-  public static final int MSGID_JEB_IMPORT_LDIF_START =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 158;
-
-  /**
-   * The message ID of the message indicating the LDIF reading stage has
-   * ended during an import process.
-   */
-  public static final int MSGID_JEB_IMPORT_LDIF_END =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_INFORMATIONAL | 159;
-
-  /**
-   * The message ID used to indicate an invalid sort attribute defined for a
-   * VLV index.
-   */
-  public static final int MSGID_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 160;
-
-  /**
-   * The message ID used to indicate a bad search filter defined for a
-   * VLV index.
-   */
-  public static final int MSGID_JEB_CONFIG_VLV_INDEX_BAD_FILTER =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_SEVERE_ERROR | 161;
-
-  /**
-   * The message ID of an error indicating that there is no VLV index
-   * configured for an name that was provided to an index
-   * verification job.  This message takes one string argument which is the
-   * VLV index name.
-   */
-  public static final int MSGID_JEB_VLV_INDEX_NOT_CONFIGURED =
-      CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 162;
-
-  /**
-   * The message ID for the message that is used to indicate that the modify DN
-   * operation has been aborted by a subordinate modify DN plugin.  This takes
-   * two arguments, which are the old DN and new DN for the subordinate entry
-   * that caused the operation to be aborted.
-   */
-  public static final int MSGID_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN =
-       CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 163;
-
-  /**
-   * The message ID for the message that is used to indicate that the modify DN
-   * operation has been aborted because subordinate modify DN plugin has altered
-   * an entry in a manner than violates the server schema.  This takes three
-   * arguments, which are the old DN and new DN for the subordinate entry that
-   * caused the operation to be aborted, and a message explaining the schema
-   * violation.
-   */
-  public static final int
-       MSGID_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_SCHEMA_ERROR =
-            CATEGORY_MASK_JEB | SEVERITY_MASK_MILD_ERROR | 164;
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_JEB_INCORRECT_ROUTING,
-                    "The backend does not contain that part of the Directory " +
-                    "Information Tree pertaining to the entry " +
-                    "'%s'");
-    registerMessage(MSGID_JEB_OPEN_DATABASE_FAIL,
-                    "The database could not be opened: %s");
-    registerMessage(MSGID_JEB_OPEN_ENV_FAIL,
-                    "The database environment could not be opened: %s");
-    registerMessage(MSGID_JEB_HIGHEST_ID_FAIL,
-                    "The database highest entry identifier could not be " +
-                    "determined");
-    registerMessage(MSGID_JEB_FUNCTION_NOT_SUPPORTED,
-                    "The requested operation is not supported by this " +
-                    "backend");
-    registerMessage(MSGID_JEB_CREATE_FAIL,
-                    "The backend database directory could not be created: %s");
-    registerMessage(MSGID_JEB_REMOVE_FAIL,
-                    "The backend database files could not be removed: %s");
-    registerMessage(MSGID_JEB_DIRECTORY_INVALID,
-                    "The backend database directory '%s' is not a valid " +
-                    "directory");
-    registerMessage(MSGID_JEB_MISSING_DN2ID_RECORD,
-                    "The DN database does not contain a record for '%s'");
-    registerMessage(MSGID_JEB_MISSING_ID2ENTRY_RECORD,
-                    "The entry database does not contain a record for ID %s");
-    registerMessage(MSGID_JEB_ENTRY_DATABASE_CORRUPT,
-                    "The entry database does not contain a valid record " +
-                    "for ID %s");
-    registerMessage(MSGID_JEB_DATABASE_EXCEPTION,
-                    "Database exception: %s");
-    registerMessage(MSGID_JEB_INVALID_LOGGING_LEVEL,
-                    "The database logging level string '%s' provided for " +
-                    "configuration entry '%s' is invalid.  The value must " +
-                    "be one of OFF, SEVERE, WARNING, INFO, CONFIG, FINE, " +
-                    "FINER, FINEST, or ALL.  Note that these values are " +
-                    "case sensitive");
-    registerMessage(MSGID_CONFIG_DESCRIPTION_INDEX_ATTRIBUTE,
-                    "The attribute type name of the attribute index");
-    registerMessage(MSGID_CONFIG_DESCRIPTION_INDEX_TYPE,
-                    "The kind of indexing to be enabled on an attribute " +
-                    "index. Permitted values include \"equality\", " +
-                    "\"presence\", \"substring\" and \"ordering\")");
-    registerMessage(MSGID_CONFIG_DESCRIPTION_INDEX_ENTRY_LIMIT,
-                    "A performance tuning parameter for attribute indexes. " +
-                    "The entry limit of an attribute index, where " +
-                    "a value of 0 means there is no threshold. " +
-                    "When the number of entries " +
-                    "matching an index value reaches the limit, the " +
-                    "value is no longer maintained in the index");
-    registerMessage(MSGID_CONFIG_DESCRIPTION_INDEX_SUBSTRING_LENGTH,
-                    "The length of substrings in a substring index");
-    registerMessage(MSGID_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE,
-                    "The attribute '%s' cannot have indexing of type '%s' " +
-                    "because it does not have a corresponding matching rule");
-    registerMessage(MSGID_JEB_UNCHECKED_EXCEPTION,
-                    "Unchecked exception during database transaction");
-    registerMessage(MSGID_JEB_CLEAN_DATABASE_START,
-                    "Starting database cleaning on %d log file(s) in '%s'");
-    registerMessage(MSGID_JEB_CLEAN_DATABASE_MARKED,
-                    "Marked %d log file(s) for cleaning");
-    registerMessage(MSGID_JEB_CLEAN_DATABASE_FINISH,
-                    "Finished database cleaning; " +
-                    "now %d log file(s) remaining");
-    registerMessage(MSGID_JEB_SUBTREE_DELETE_SIZE_LIMIT_EXCEEDED,
-                    "Exceeded the administrative limit on the number of " +
-                    "entries that may be deleted in a subtree delete " +
-                    "operation. The number of entries actually deleted was " +
-                    "%d. The operation may be retried until all entries " +
-                    "in the subtree have been deleted");
-    registerMessage(MSGID_JEB_DELETED_ENTRY_COUNT,
-                    "The number of entries deleted was %d");
-    registerMessage(MSGID_JEB_DUPLICATE_CONFIG_ENTRY,
-                    "The configuration entry '%s' will be ignored. " +
-                    "Only one configuration entry with object class '%s' is " +
-                    "allowed");
-    registerMessage(MSGID_JEB_CONFIG_ENTRY_NOT_RECOGNIZED,
-                    "The configuration entry '%s' will be ignored " +
-                    "because it is not recognized");
-    registerMessage(MSGID_JEB_INDEX_ATTRIBUTE_TYPE_NOT_FOUND,
-                    "The index configuration entry '%s' will be ignored " +
-                    "because it specifies an unknown attribute type '%s'");
-    registerMessage(MSGID_JEB_DUPLICATE_INDEX_CONFIG,
-                    "The index configuration entry '%s' will be ignored " +
-                    "because it specifies the attribute type '%s', " +
-                    "which has already been defined in another " +
-                    "index configuration entry");
-    registerMessage(MSGID_JEB_IO_ERROR,
-                    "I/O error during backend operation: %s");
-    registerMessage(MSGID_JEB_BACKEND_STARTED,
-                    "The database backend %s containing %d entries has " +
-                    "started");
-    registerMessage(MSGID_JEB_IMPORT_PARENT_NOT_FOUND,
-                    "The parent entry '%s' does not exist");
-    registerMessage(MSGID_JEB_IMPORT_ENTRY_EXISTS,
-                    "The entry exists and the import options do not " +
-                    "allow it to be replaced");
-    registerMessage(MSGID_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED,
-                    "There is no index configured for attribute type '%s'");
-    registerMessage(MSGID_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV,
-                    "The requested search operation included both the simple " +
-                    "paged results control and the virtual list view " +
-                    "control.  These controls are mutually exclusive and " +
-                    "cannot be used together");
-    registerMessage(MSGID_JEB_SEARCH_NO_SUCH_OBJECT,
-                    "The search base entry '%s' does not exist");
-    registerMessage(MSGID_JEB_SEARCH_CANNOT_SORT_UNINDEXED,
-                    "The search results cannot be sorted because the given " +
-                    "search request is not indexed");
-    registerMessage(MSGID_JEB_ADD_NO_SUCH_OBJECT,
-                    "The entry '%s' cannot be added because its parent " +
-                    "entry does not exist");
-    registerMessage(MSGID_JEB_DELETE_NO_SUCH_OBJECT,
-                    "The entry '%s' cannot be removed because it does " +
-                    "not exist");
-    registerMessage(MSGID_JEB_MODIFY_NO_SUCH_OBJECT,
-                    "The entry '%s' cannot be modified because it does " +
-                    "not exist");
-    registerMessage(MSGID_JEB_MODIFYDN_NO_SUCH_OBJECT,
-                    "The entry '%s' cannot be renamed because it does " +
-                    "not exist");
-    registerMessage(MSGID_JEB_ADD_ENTRY_ALREADY_EXISTS,
-                    "The entry '%s' cannot be added because an entry with " +
-                    "that name already exists");
-    registerMessage(MSGID_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF,
-                    "The entry '%s' cannot be removed because it has " +
-                    "subordinate entries");
-    registerMessage(MSGID_JEB_MODIFYDN_ALREADY_EXISTS,
-                    "The entry cannot be renamed to '%s' because an entry " +
-                    "with that name already exists");
-    registerMessage(MSGID_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN,
-                    "A plugin caused the modify DN operation to be aborted " +
-                    "while moving and/or renaming an entry from %s to %s");
-    registerMessage(MSGID_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_SCHEMA_ERROR,
-                    "A plugin caused the modify DN operation to be aborted " +
-                    "while moving and/or renaming an entry from %s to %s " +
-                    "because the change to that entry violated the server " +
-                    "schema configuration:  %s");
-    registerMessage(MSGID_JEB_NEW_SUPERIOR_NO_SUCH_OBJECT,
-                    "The entry cannot be moved because the new parent " +
-                    "entry '%s' does not exist");
-    registerMessage(MSGID_JEB_CACHE_SIZE_AFTER_PRELOAD,
-                    "The database cache is %d MB after pre-loading");
-    registerMessage(MSGID_JEB_BACKUP_CANNOT_GET_MAC,
-                    "An error occurred while attempting to obtain the %s MAC " +
-                    "provider to create the signed hash for the backup:  %s");
-    registerMessage(MSGID_JEB_BACKUP_CANNOT_GET_DIGEST,
-                    "An error occurred while attempting to obtain the %s " +
-                    "message digest to create the hash for the backup:  %s");
-    registerMessage(MSGID_JEB_BACKUP_CANNOT_CREATE_ARCHIVE_FILE,
-                    "An error occurred while trying to create the database " +
-                    "archive file %s in directory %s:  %s");
-    registerMessage(MSGID_JEB_BACKUP_CANNOT_GET_CIPHER,
-                    "An error occurred while attempting to obtain the %s " +
-                    "cipher to use to encrypt the backup:  %s");
-    registerMessage(MSGID_JEB_BACKUP_ZIP_COMMENT,
-                    "%s backup %s of backend %s");
-    registerMessage(MSGID_JEB_BACKUP_CANNOT_LIST_LOG_FILES,
-                    "An error occurred while attempting to obtain a list " +
-                    "of the files in directory %s to include in the database " +
-                    "backup:  %s");
-    registerMessage(MSGID_JEB_BACKUP_CANNOT_WRITE_ARCHIVE_FILE,
-                    "An error occurred while attempting to back up database " +
-                    "file %s:  %s");
-    registerMessage(MSGID_JEB_BACKUP_CANNOT_CLOSE_ZIP_STREAM,
-                    "An error occurred while trying to close the database " +
-                    "archive file %s in directory %s:  %s");
-    registerMessage(MSGID_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR,
-                    "An error occurred while attempting to update the backup " +
-                    "descriptor file %s with information about the database " +
-                    "backup:  %s");
-    registerMessage(MSGID_JEB_BACKUP_UNSIGNED_HASH_ERROR,
-                    "The computed hash of backup %s is different to the " +
-                    "value computed at time of backup");
-    registerMessage(MSGID_JEB_BACKUP_SIGNED_HASH_ERROR,
-                    "The computed signed hash of backup %s is different to " +
-                    "the value computed at time of backup");
-    registerMessage(MSGID_JEB_INCR_BACKUP_REQUIRES_FULL,
-                    "A full backup must be taken before an incremental " +
-                    "backup can be taken");
-    registerMessage(MSGID_JEB_CANNOT_RENAME_RESTORE_DIRECTORY,
-                    "The directory %s, containing the files restored from " +
-                    "backup, could not be renamed to the backend directory " +
-                    "%s");
-    registerMessage(MSGID_JEB_INCR_BACKUP_FROM_WRONG_BASE,
-                    "One of the following base backup IDs must be specified " +
-                    "for the incremental backup: %s");
-    registerMessage(MSGID_JEB_CANNOT_CREATE_BACKUP_TAG_FILE,
-                    "The backup tag file %s could not be created in %s");
-    registerMessage(MSGID_JEB_BACKUP_CANNOT_RESTORE,
-                    "An error occurred while attempting to restore the files " +
-                    "from backup %s: %s");
-    registerMessage(MSGID_JEB_BACKUP_MISSING_BACKUPID,
-                    "The information for backup %s could not be found in " +
-                    "the backup directory %s");
-    registerMessage(MSGID_JEB_BACKUP_FILE_UNCHANGED,
-                    "Not changed: %s");
-    registerMessage(MSGID_JEB_BACKUP_CLEANER_ACTIVITY,
-                    "Including %s additional log file(s) due to cleaner " +
-                    "activity");
-    registerMessage(MSGID_JEB_BACKUP_VERIFY_FILE,
-                    "Verifying: %s");
-    registerMessage(MSGID_JEB_BACKUP_RESTORED_FILE,
-                    "Restored: %s (size %d)");
-    registerMessage(MSGID_JEB_BACKUP_ARCHIVED_FILE,
-                    "Archived: %s");
-    registerMessage(MSGID_JEB_EXPORT_FINAL_STATUS,
-                    "Exported %d entries and skipped %d in %d seconds " +
-                    "(average rate %.1f/sec)");
-    registerMessage(MSGID_JEB_EXPORT_PROGRESS_REPORT,
-                    "Exported %d records and skipped %d " +
-                    "(recent rate %.1f/sec)");
-    registerMessage(MSGID_JEB_IMPORT_THREAD_COUNT,
-                    "Starting import (using %d threads)");
-    registerMessage(MSGID_JEB_IMPORT_BUFFER_SIZE,
-                    "Buffer size per thread = %,d");
-    registerMessage(MSGID_JEB_IMPORT_LDIF_PROCESSING_TIME,
-                    "LDIF processing took %d seconds");
-    registerMessage(MSGID_JEB_IMPORT_INDEX_PROCESSING_TIME,
-                    "Index processing took %d seconds");
-    registerMessage(MSGID_JEB_IMPORT_BEGINNING_INTERMEDIATE_MERGE,
-                    "Ending import pass %d because the pass size has " +
-                    "been reached.  Beginning the intermediate index merge");
-    registerMessage(MSGID_JEB_IMPORT_BEGINNING_FINAL_MERGE,
-                    "Beginning final index merge");
-    registerMessage(MSGID_JEB_IMPORT_RESUMING_LDIF_PROCESSING,
-                    "Intermediate index merge processing complete (index " +
-                    "processing time %d seconds).  Resuming LDIF processing");
-    registerMessage(MSGID_JEB_IMPORT_FINAL_MERGE_COMPLETED,
-                    "Final index merge complete (processing time %d seconds)");
-    registerMessage(MSGID_JEB_IMPORT_CLOSING_DATABASE,
-                    "Flushing data to disk");
-    registerMessage(MSGID_JEB_IMPORT_FINAL_STATUS,
-                    "Processed %d entries, imported %d, skipped %d, " +
-                    "rejected %d and migrated %d in %d seconds " +
-                    "(average rate %.1f/sec)");
-    registerMessage(MSGID_JEB_IMPORT_ENTRY_LIMIT_EXCEEDED_COUNT,
-                    "Number of index values that exceeded the entry limit: %d");
-    registerMessage(MSGID_JEB_IMPORT_PROGRESS_REPORT,
-                    "Processed %d entries, skipped %d, rejected %d, and " +
-                    "migrated %d (recent rate %.1f/sec)");
-    registerMessage(MSGID_JEB_IMPORT_CACHE_AND_MEMORY_REPORT,
-                    "Free memory = %d MB, Cache miss rate = %.1f/entry");
-    registerMessage(MSGID_JEB_INDEX_MERGE_NO_DATA,
-                    "There is no data to be loaded into the %s index");
-    registerMessage(MSGID_JEB_INDEX_MERGE_START,
-                    "Starting %d-way merge to load the %s index");
-    registerMessage(MSGID_JEB_INDEX_MERGE_COMPLETE,
-                    "The %s index has been loaded");
-    registerMessage(MSGID_JEB_VERIFY_CLEAN_FINAL_STATUS,
-                    "Checked %d records and found %d error(s) in %d seconds " +
-                    "(average rate %.1f/sec)");
-    registerMessage(MSGID_JEB_VERIFY_MULTIPLE_REFERENCE_COUNT,
-                    "Number of records referencing more than one entry: %d");
-    registerMessage(MSGID_JEB_VERIFY_ENTRY_LIMIT_EXCEEDED_COUNT,
-                    "Number of records that exceed the entry limit: %d");
-    registerMessage(MSGID_JEB_VERIFY_AVERAGE_REFERENCE_COUNT,
-                    "Average number of entries referenced is %.2f/record");
-    registerMessage(MSGID_JEB_VERIFY_MAX_REFERENCE_COUNT,
-                    "Maximum number of entries referenced " +
-                    "by any record is %d");
-    registerMessage(MSGID_JEB_VERIFY_FINAL_STATUS,
-                    "Checked %d entries and found %d error(s) in %d seconds " +
-                    "(average rate %.1f/sec)");
-    registerMessage(MSGID_JEB_VERIFY_ENTRY_LIMIT_STATS_HEADER,
-                    "Statistics for records that have exceeded the " +
-                    "entry limit:");
-    registerMessage(MSGID_JEB_VERIFY_ENTRY_LIMIT_STATS_ROW,
-                    "  File %s has %d such record(s) min=%d max=%d median=%d");
-    registerMessage(MSGID_JEB_VERIFY_PROGRESS_REPORT,
-                    "Processed %d records and found %d error(s) " +
-                    "(recent rate %.1f/sec)");
-    registerMessage(MSGID_JEB_VERIFY_CACHE_AND_MEMORY_REPORT,
-                    "Free memory = %d MB, Cache miss rate = %.1f/record");
-    registerMessage(MSGID_JEB_CONFIG_ATTR_REQUIRES_RESTART,
-                    "The change to the %s attribute will not take effect " +
-                    "until the backend is restarted");
-    registerMessage(MSGID_JEB_INVALID_PAGED_RESULTS_COOKIE,
-                    "The following paged results control cookie value was " +
-                    "not recognized: %s");
-    registerMessage(MSGID_JEB_REFERRAL_RESULT_MESSAGE,
-                    "A referral entry %s indicates that the operation must " +
-                    "be processed at a different server");
-    registerMessage(MSGID_JEB_IMPORT_ENVIRONMENT_CONFIG,
-                    "Database environment properties: %s");
-    registerMessage(MSGID_JEB_INCOMPATIBLE_ENTRY_VERSION,
-                    "Entry record with ID %s is not compatible with this " +
-                    "version of the backend database. " +
-                    "Entry version: %x");
-    registerMessage(MSGID_JEB_LOOKTHROUGH_LIMIT_EXCEEDED,
-                    "This search operation has checked the maximum of %d " +
-                    "entries for matches");
-    registerMessage(MSGID_JEB_SET_PERMISSIONS_FAILED,
-                    "An error occurred while setting file permissions for " +
-                    "the backend database directory %s: %s");
-    registerMessage(MSGID_JEB_GET_ENTRY_COUNT_FAILED,
-                    "Unable to determine the total number of entries in the " +
-                    "container: %s");
-    registerMessage(MSGID_JEB_REBUILD_START,
-                    "Rebuild of index(es) %s started with %d total records " +
-                    "to process");
-    registerMessage(MSGID_JEB_REBUILD_PROGRESS_REPORT,
-                    "%.1f%% Completed. Processed %d/%d records. " +
-                    "(recent rate %.1f/sec)");
-    registerMessage(MSGID_JEB_REBUILD_CACHE_AND_MEMORY_REPORT,
-                    "Free memory = %d MB, Cache miss rate = %.1f/record");
-    registerMessage(MSGID_JEB_REBUILD_FINAL_STATUS,
-                    "Rebuild complete. Processed %d records in %d seconds " +
-                    "(average rate %.1f/sec)");
-    registerMessage(MSGID_JEB_REBUILD_INDEX_FAILED,
-                    "An error occurred while rebuilding index %s: %s");
-    registerMessage(MSGID_JEB_REBUILD_INSERT_ENTRY_FAILED,
-                    "An error occurred while inserting entry into the %s " +
-                    "database/index: %s");
-    registerMessage(MSGID_JEB_REBUILD_INDEX_CONFLICT,
-                    "Another rebuild of index %s is already in progress");
-    registerMessage(MSGID_JEB_REBUILD_BACKEND_ONLINE,
-                    "Rebuilding system index(es) must be done with the " +
-                    "backend containing the base DN disabled");
-    registerMessage(MSGID_ENTRYIDSORTER_CANNOT_EXAMINE_ENTRY,
-                    "Unable to examine the entry with ID %s for sorting " +
-                    "purposes:  %s");
-    registerMessage(MSGID_ENTRYIDSORTER_NEGATIVE_START_POS,
-                    "Unable to process the virtual list view request because " +
-                    "the target start position was before the beginning of " +
-                    "the result set");
-    registerMessage(MSGID_ENTRYIDSORTER_OFFSET_TOO_LARGE,
-                    "Unable to process the virtual list view request because " +
-                    "the target offset %d was greater than the total number " +
-                    "of results in the list (%d)");
-    registerMessage(MSGID_ENTRYIDSORTER_TARGET_VALUE_NOT_FOUND,
-                    "Unable to prcess the virtual list view request because " +
-                    "no entry was found in the result set with a sort value " +
-                    "greater than or equal to the provided assertion value");
-    registerMessage(MSGID_JEB_SEARCH_UNINDEXED_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to perform an " +
-                    "unindexed search");
-    registerMessage(MSGID_JEB_UNABLE_SET_PERMISSIONS,
-                    "This platform does not support setting file " +
-                    "permissions %s to the database directory %s");
-    registerMessage(MSGID_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD,
-                    "Some index keys have already exceeded the previous " +
-                    "index entry limit in index %s. This index must be " +
-                    "rebuilt before it can use the new limit");
-    registerMessage(MSGID_JEB_INDEX_ADD_REQUIRES_REBUILD,
-                    "Due to changes in the configuration, index %s is " +
-                    "currently operating in a degraded state and must be " +
-                    "rebuilt before it can used");
-    registerMessage(MSGID_JEB_INDEX_CORRUPT_REQUIRES_REBUILD,
-                    "An error occurred while reading from index %s. The " +
-                    "index seems to be corrupt and is now operating in " +
-                    "a degraded state. The index must be rebuilt " +
-                    "before it can return to normal operation");
-    registerMessage(MSGID_JEB_IMPORT_BACKEND_ONLINE,
-                    "The backend must be disabled before the import process" +
-                    "can start");
-    registerMessage(MSGID_JEB_IMPORT_THREAD_EXCEPTION,
-                    "An error occurred in import thread %s: %s. The thread " +
-                    "can not continue");
-    registerMessage(MSGID_JEB_IMPORT_NO_WORKER_THREADS,
-                    "There are no more import worker threads to process the " +
-                    "imported entries");
-    registerMessage(MSGID_JEB_IMPORT_CREATE_TMPDIR_ERROR,
-                    "Unable to create the temporary directory %s");
-    registerMessage(MSGID_JEB_IMPORT_MIGRATION_START,
-                    "Migrating %s entries for base DN %s");
-    registerMessage(MSGID_JEB_IMPORT_LDIF_START,
-                    "Processing LDIF");
-    registerMessage(MSGID_JEB_IMPORT_LDIF_END,
-                    "End of LDIF reached");
-    registerMessage(MSGID_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR,
-                    "Sort attribute %s for VLV index %s is not defined in " +
-                    "the server schema");
-    registerMessage(MSGID_JEB_CONFIG_VLV_INDEX_BAD_FILTER,
-                    "An error occured while parsing the search filter %s " +
-                    "defined for VLV index %s: %s");
-    registerMessage(MSGID_JEB_VLV_INDEX_NOT_CONFIGURED,
-                    "There is no VLV index configured with name '%s'");
-  }
-}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/LoggerMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/LoggerMessages.java
deleted file mode 100644
index b9d595d..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/LoggerMessages.java
+++ /dev/null
@@ -1,166 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the server loggers.
- */
-public class LoggerMessages
-{
-  /**
-   * The message ID for the message that will be used if an error occurred
-   * while writing a log record.  This takes a two arguments, which
-   * are the logger that encountered the error and  a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LOGGER_ERROR_WRITING_RECORD =
-       CATEGORY_MASK_LOG | SEVERITY_MASK_SEVERE_ERROR | 1;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred
-   * while opening a log file.  This takes a two arguments, which
-   * are the logger that encountered the error and  a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LOGGER_ERROR_OPENING_FILE =
-       CATEGORY_MASK_LOG | SEVERITY_MASK_SEVERE_ERROR | 2;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred
-   * while closing a log file.  This takes a two arguments, which
-   * are the logger that encountered the error and  a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LOGGER_ERROR_CLOSING_FILE =
-       CATEGORY_MASK_LOG | SEVERITY_MASK_SEVERE_ERROR | 3;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred
-   * while flushing the writer buffer.  This takes a two arguments, which
-   * are the logger that encountered the error and  a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LOGGER_ERROR_FLUSHING_BUFFER =
-       CATEGORY_MASK_LOG | SEVERITY_MASK_SEVERE_ERROR | 4;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified
-   * string is not a valid error severity name. This takes the name
-   * of the invalid severity as the argument.
-   */
-  public static final int MSGID_ERROR_LOGGER_INVALID_SEVERITY =
-        CATEGORY_MASK_LOG | SEVERITY_MASK_MILD_WARNING | 5;
-
-
-    /**
-   * The message ID for the message that will be used if the specified
-   * string is not a valid error category name. This takes the name
-   * of the invalid category as the argument.
-   */
-  public static final int MSGID_ERROR_LOGGER_INVALID_CATEGORY =
-        CATEGORY_MASK_LOG | SEVERITY_MASK_MILD_WARNING | 6;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified
-   * string is not a valid error override severity. This takes the name
-   * of the invalid severity as the argument.
-   */
-  public static final int MSGID_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY =
-        CATEGORY_MASK_LOG | SEVERITY_MASK_MILD_WARNING | 7;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred
-   * while setting file permissions on a log file. This takes the name of the
-   * file as the argument.
-   */
-  public static final int MSGID_LOGGER_SET_PERMISSION_FAILED =
-        CATEGORY_MASK_LOG | SEVERITY_MASK_SEVERE_WARNING | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used if the current platform
-   * does not support setting the file permissions on the log files. This takes
-   * the name of the file as the argument.
-   */
-  public static final int MSGID_LOGGER_UNABLE_SET_PERMISSIONS =
-        CATEGORY_MASK_LOG | SEVERITY_MASK_MILD_WARNING | 9;
-
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_LOGGER_ERROR_WRITING_RECORD,
-                    "Error occurred while writing log record for logger " +
-                    "%s: %s. Any further write errors will be ignored");
-    registerMessage(MSGID_LOGGER_ERROR_OPENING_FILE,
-                    "Error occurred while opening log file %s for logger %s: " +
-                    "%s");
-    registerMessage(MSGID_LOGGER_ERROR_CLOSING_FILE,
-                    "Error occurred while closing log file for logger %s: %s");
-    registerMessage(MSGID_LOGGER_ERROR_FLUSHING_BUFFER,
-                    "Error occurred while flushing writer buffer for " +
-                    "logger %s: %s");
-    registerMessage(MSGID_ERROR_LOGGER_INVALID_SEVERITY,
-                    "Invalid error log severity \"%s\"");
-    registerMessage(MSGID_ERROR_LOGGER_INVALID_CATEGORY,
-                    "Invalid error log category \"%s\"");
-    registerMessage(MSGID_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY,
-                    "Invalid override of severity level \"%s\"");
-    registerMessage(MSGID_LOGGER_SET_PERMISSION_FAILED,
-                    "Error occurred while setting file permissions for the " +
-                    "log file %s: %s");
-    registerMessage(MSGID_LOGGER_UNABLE_SET_PERMISSIONS,
-                    "This platform does not support setting file " +
-                    "permissions %s to the log file %s");
-
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/MessageHandler.java b/opendj-sdk/opends/src/server/org/opends/server/messages/MessageHandler.java
deleted file mode 100644
index cb3968c..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/MessageHandler.java
+++ /dev/null
@@ -1,416 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.IllegalFormatException;
-
-
-/**
- * This class defines the set of structures and methods that should be used when
- * retrieving text strings for use in a localized and/or internationalized
- * environment.  Each message will have a unique message number, and each
- * message will have a default English representation that can be overridden
- * from another list.
- * <BR><BR>
- * Note that there should be a pattern used for the message ID list so that each
- * message ID is unique, and so that the message ID itself may be keyed upon for
- * certain purposes.  The pattern that will be used is based on the hexadecimal
- * representation of the 32-bit value.  The first 12 bits will be used for the
- * category (a maximum of 4096 values), the next four bits will be used for the
- * severity (a maximum of 16 values), and the last 16 bits will be used for the
- * unique ID (a maximum of 65536 values).  The last 16 bits may be further
- * broken up within each category if desired.
- * <BR><BR>
- * The categories that have been defined include:
- * <UL>
- *   <LI>000 -- Core server processing</LI>
- *   <LI>001 -- Server extensions</LI>
- *   <LI>002 -- Connection and protocol handling</LI>
- *   <LI>003 -- Configuration handling</LI>
- *   <LI>004 -- The server loggers</LI>
- *   <LI>005 -- General server utilities</LI>
- *   <LI>006 -- Schema elements</LI>
- *   <LI>007 -- Plugin processing</LI>
- *   <LI>008 -- JE backend processing</LI>
- *   <LI>009 -- Generic backend processing</LI>
- *   <LI>00A -- Directory Server tools</LI>
- *   <LI>00B -- Task processing</LI>
- *   <LI>00C -- Access Control</LI>
- *   <LI>00D -- Administration framework</LI>
- *   <LI>00E -- Synchronization</LI>
- *   <LI>00F -- Version Compatibility (Flag Days)</LI>
- *   <LI>800 through FFE -- Reserved for third-party modules</LI>
- *   <LI>FFF -- User-defined processing</LI>
- * </UL>
- * <BR><BR>
- * The severity levels that have been defined include:
- * <UL>
- *   <LI>0 -- Informational</LI>
- *   <LI>1 -- Mild warning</LI>
- *   <LI>2 -- Severe warning</LI>
- *   <LI>3 -- Mild error</LI>
- *   <LI>4 -- Severe error</LI>
- *   <LI>5 -- Fatal error</LI>
- *   <LI>6 -- Debug</LI>
- *   <LI>7 -- Notice</LI>
- * </UL>
- */
-public class MessageHandler
-{
-  /**
-   * The category bitmask that will be used for messages associated with the
-   * core server.
-   */
-  public static final int CATEGORY_MASK_CORE = 0x00000000;
-
-
-
-  /**
-   * The category bitmask that will be used for messages associated with server
-   * extensions (e.g., extended operations, SASL mechanisms, password storage
-   * schemes, password validators, etc.).
-   */
-  public static final int CATEGORY_MASK_EXTENSIONS = 0x00100000;
-
-
-
-  /**
-   * The category bitmask that will be used for messages associated with
-   * connection and protocol handling (e.g., ASN.1 and LDAP).
-   */
-  public static final int CATEGORY_MASK_PROTOCOL = 0x00200000;
-
-
-
-  /**
-   * The category bitmask that will be used for messages associated with
-   * configuration handling.
-   */
-  public static final int CATEGORY_MASK_CONFIG = 0x00300000;
-
-
-
-  /**
-   * The category bitmask that will be used for messages associated with the
-   * server loggers.
-   */
-  public static final int CATEGORY_MASK_LOG = 0x00400000;
-
-
-
-  /**
-   * The category bitmask that will be used for messages associated with the
-   * general server utilities.
-   */
-  public static final int CATEGORY_MASK_UTIL = 0x00500000;
-
-
-
-  /**
-   * The category bitmask that will be used for messages associated with the
-   * server schema elements.
-   */
-  public static final int CATEGORY_MASK_SCHEMA = 0x00600000;
-
-
-
-  /**
-   * The category bitmask that will be used for messages associated with plugin
-   * processing.
-   */
-  public static final int CATEGORY_MASK_PLUGIN = 0x00700000;
-
-
-
-  /**
-   * The category bitmask used for messages associated with the JE backend.
-   */
-  public static final int CATEGORY_MASK_JEB = 0x00800000;
-
-
-
-  /**
-   * The category bitmask used for messages associated with generic backends.
-   */
-  public static final int CATEGORY_MASK_BACKEND = 0x00900000;
-
-
-
-  /**
-   * The category bitmask used for messages associated with tools.
-   */
-  public static final int CATEGORY_MASK_TOOLS = 0x00A00000;
-
-
-
-  /**
-   * The category bitmask used for messages associated with tasks.
-   */
-  public static final int CATEGORY_MASK_TASK = 0x00B00000;
-
-
-  /**
-   * The category bitmask used for messages associated with Access Control.
-   */
-  public static final int CATEGORY_MASK_ACCESS_CONTROL = 0x00C00000;
-
-
-  /**
-   * The category bitmask used for messages associated with the
-   * administration framework.
-   */
-  public static final int CATEGORY_MASK_ADMIN = 0x00D00000;
-
-
-  /**
-   * The category bitmask used for messages associated with the Synchronization.
-   */
-  public static final int CATEGORY_MASK_SYNC = 0x00E00000;
-
-  /**
-   * The category bitmask used for messages associated with flag day messages.
-   */
-  public static final int CATEGORY_MASK_VERSION_COMPATIBITY_ISSUES = 0x00F00000;
-
-  /**
-   * The category bitmask that will be used for messages associated with
-   * third-party (including user-defined) modules.
-   */
-  public static final int CATEGORY_MASK_THIRD_PARTY = 0x80000000;
-
-
-
-  /**
-   * The category bitmask that will be used for messages associated with
-   * user-defined modules.
-   */
-  public static final int CATEGORY_MASK_USER_DEFINED = 0xFFF00000;
-
-
-
-  /**
-   * The severity bitmask that will be used for informational messages.
-   */
-  public static final int SEVERITY_MASK_INFORMATIONAL = 0x00000000;
-
-
-
-  /**
-   * The severity bitmask that will be used for mild warning messages.
-   */
-  public static final int SEVERITY_MASK_MILD_WARNING = 0x00010000;
-
-
-
-  /**
-   * The severity bitmask that will be used for severe warning messages.
-   */
-  public static final int SEVERITY_MASK_SEVERE_WARNING = 0x00020000;
-
-
-
-  /**
-   * The severity bitmask that will be used for mild error messages.
-   */
-  public static final int SEVERITY_MASK_MILD_ERROR = 0x00030000;
-
-
-
-  /**
-   * The severity bitmask that will be used for severe error messages.
-   */
-  public static final int SEVERITY_MASK_SEVERE_ERROR = 0x00040000;
-
-
-
-  /**
-   * The severity bitmask that will be used for fatal error messages.
-   */
-  public static final int SEVERITY_MASK_FATAL_ERROR = 0x00050000;
-
-
-
-  /**
-   * The severity bitmask that will be used for debug messages.
-   */
-  public static final int SEVERITY_MASK_DEBUG = 0x00060000;
-
-
-
-  /**
-   * The severity bitmask that will be used for important informational
-   * messages.
-   */
-  public static final int SEVERITY_MASK_NOTICE = 0x00070000;
-
-
-
-  // The set of messages that have been registered with this message handler.
-  private static ConcurrentHashMap<Integer,String> messageMap =
-                      new ConcurrentHashMap<Integer,String>();
-
-
-
-  // Performs the appropriate initialization for this message handler.  Whenever
-  // a new message file is defined, then it must be placed here to ensure that
-  // the messages get populated properly.
-  static
-  {
-    CoreMessages.registerMessages();
-    ExtensionsMessages.registerMessages();
-    ProtocolMessages.registerMessages();
-    ConfigMessages.registerMessages();
-    LoggerMessages.registerMessages();
-    UtilityMessages.registerMessages();
-    SchemaMessages.registerMessages();
-    PluginMessages.registerMessages();
-    JebMessages.registerMessages();
-    BackendMessages.registerMessages();
-    ToolMessages.registerMessages();
-    TaskMessages.registerMessages();
-    AdminMessages.registerMessages();
-    AciMessages.registerMessages();
-    ReplicationMessages.registerMessages();
-    VersionMessages.registerMessages();
-  }
-
-
-
-  /**
-   * Retrieves the message string associated with the provided message ID.  No
-   * formatting or replacements will be made within the message string.  If no
-   * message exists with the specified message ID, then a generic message will
-   * be returned.
-   *
-   * @param  messageID  The unique ID assigned to the message to retrieve.
-   *
-   * @return  The message string associated with the provided message ID.
-   */
-  public static String getMessage(int messageID)
-  {
-    String message = messageMap.get(messageID);
-    if (message == null)
-    {
-      message = "Unknown message for message ID " + messageID;
-    }
-
-    return message;
-  }
-
-
-
-  /**
-   * Retrieves the message string associated with the provided message ID,
-   * treating it as a format string and replacing any tokens with information
-   * from the provided argument list.  If no message exists with the specified
-   * message ID, then a generic message will be returned.
-   *
-   * @param  messageID  The unique ID assigned to the message to retrieve.
-   * @param  arguments  The set of arguments to use to replace tokens in the
-   *                    format string before it is returned.
-   *
-   * @return  The message string associated with the provided message ID.
-   */
-  public static String getMessage(int messageID, Object... arguments)
-  {
-    String formatString = messageMap.get(messageID);
-    if (formatString == null)
-    {
-      StringBuilder buffer = new StringBuilder();
-      buffer.append("Unknown message for message ID ");
-      buffer.append(messageID);
-      buffer.append(" -- provided arguments were:  ");
-      if ((arguments != null) && (arguments.length > 0))
-      {
-        buffer.append(String.valueOf(arguments[0]));
-
-        for (int i=1; i < arguments.length; i++)
-        {
-          buffer.append(", ");
-          buffer.append(String.valueOf(arguments[i]));
-        }
-      }
-
-      return buffer.toString();
-    }
-
-    try
-    {
-      return String.format(formatString, arguments);
-    }
-    catch (IllegalFormatException e)
-    {
-      // Make a more useful message than a stack trace.
-      StringBuilder buffer = new StringBuilder();
-      buffer.append(formatString);
-      buffer.append(" -- mismatched arguments were:  ");
-      if ((arguments != null) && (arguments.length > 0))
-      {
-        buffer.append(String.valueOf(arguments[0]));
-
-        for (int i=1; i < arguments.length; i++)
-        {
-          buffer.append(", ");
-          buffer.append(String.valueOf(arguments[i]));
-        }
-      }
-
-      return buffer.toString();
-    }
-  }
-
-
-
-  /**
-   * Registers the provided message with this message handler.
-   *
-   * @param  messageID     The unique identifier assigned to this message.
-   * @param  formatString  The format string to use for this message.
-   */
-  static void registerMessage(int messageID, String formatString)
-  {
-    messageMap.put(messageID, formatString);
-  }
-
-
-
-  /**
-   * Retrieves the entire set of messages defined in the server, mapped between
-   * their message ID and the format string for that message.  The resulting
-   * mapping must not be modified.
-   *
-   * @return  The entire set of messages defined in the server.
-   */
-  public static ConcurrentHashMap<Integer,String> getMessages()
-  {
-    return messageMap;
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/PluginMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/PluginMessages.java
deleted file mode 100644
index a5acffe..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/PluginMessages.java
+++ /dev/null
@@ -1,1282 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with Directory Server plugins that are provided with the
- * server itself.  Messages for third-party plugins should not be defined in
- * this class.
- */
-public class PluginMessages
-{
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * initialize a plugin with a null configuration entry.  This takes a single
-   * argument, which is the class name of the plugin that could not be
-   * initialized.
-   */
-  public static final int MSGID_PLUGIN_NULL_CONFIG_ENTRY =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 1;
-
-
-
-  /**
-   * The message ID for the message that will be used to retrieve the
-   * description of the shutdown password configuration attribute.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_PLUGIN_DESCRIPTION_SHUTDOWN_PASSWORD =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 2;
-
-
-
-  /**
-   * The message ID for the message that will be used if the LDAP ADList plugin
-   * is not configured with any plugin types.  This takes a single argument,
-   * which is the DN of the configuration entry.
-   */
-  public static final int MSGID_PLUGIN_ADLIST_NO_PLUGIN_TYPES =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 3;
-
-
-
-  /**
-   * The message ID for the message that will be used if the LDAP ADList plugin
-   * is configured with an invalid plugin type.  This takes two arguments,
-   * which are the DN of the configuration entry, and the invalid plugin type.
-   */
-  public static final int MSGID_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 4;
-
-
-
-  /**
-   * The message ID for the message that will be used if the Directory Server
-   * profiler plugin is not configured with any plugin types.  This takes a
-   * single argument, which is the DN of the configuration entry.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_NO_PLUGIN_TYPES =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 5;
-
-
-
-  /**
-   * The message ID for the message that will be used if the Directory Server
-   * profiler plugin is configured with an invalid plugin type.  This takes two
-   * arguments, which are the DN of the configuration entry, and the invalid
-   * plugin type.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 6;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for
-   * the profile directory configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_DESCRIPTION_PROFILE_DIR =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 7;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the path to the profile directory.  This takes three
-   * arguments, which are the DN of the configuration entry, a string
-   * representation of the exception that was caught, and the path to the
-   * default profile directory that will be used.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_PROFILE_DIR =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_WARNING | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to write the profiled capture data.  This takes two arguments, which
-   * are the path to the file that was to be written and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 9;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for
-   * the profile autostart attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_DESCRIPTION_AUTOSTART =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 10;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to automatically start profiling.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_AUTOSTART =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_WARNING | 11;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for
-   * the profile sample interval attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_DESCRIPTION_INTERVAL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 12;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the profiler sample interval.  This takes three
-   * arguments, which are the DN of the configuration entry, and a string
-   * representation of the exception that was caught, and the default sample
-   * interval that will be used.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_INTERVAL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_WARNING | 13;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for
-   * the profiler state attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_DESCRIPTION_STATE =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 14;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for
-   * the profiler action attribute.  This does not take any arguments.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_DESCRIPTION_ACTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 15;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid profile
-   * directory is specified.  This takes two arguments, which are the specified
-   * profile directory and the DN of the configuration entry.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_INVALID_PROFILE_DIR =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_WARNING | 16;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the profiler action that should be taken.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_ACTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_WARNING | 17;
-
-
-
-  /**
-   * The message ID for the message that will be used if the profiler sample
-   * interval is changed.  This takes two arguments, which are the DN of the
-   * configuration entry and the new sample interval that has been specified.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_UPDATED_INTERVAL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 18;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the profiler sample interval.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_CANNOT_UPDATE_INTERVAL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 19;
-
-
-
-  /**
-   * The message ID for the message that will be used if the profiler capture
-   * directory is changed.  This takes two arguments, which are the DN of the
-   * configuration entry and the new profile directory that has been specified.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_UPDATED_DIRECTORY =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 20;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the profiler capture directory.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_CANNOT_UPDATE_DIRECTORY =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 21;
-
-
-
-  /**
-   * The message ID for the message that will be used when the profiler starts
-   * to capture information.  This takes a single argument, which is the DN of
-   * the configuration entry.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_STARTED_PROFILING =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 22;
-
-
-
-  /**
-   * The message ID for the message that will be used if the profiler is
-   * requested to start but is already active.  This takes a single argument,
-   * which is the DN of the configuration entry.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_ALREADY_PROFILING =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 23;
-
-
-
-  /**
-   * The message ID for the message that will be used if the profiler is
-   * requested to stop but is not active.  This takes a single argument, which
-   * is the DN of the configuration entry.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_NOT_RUNNING =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 24;
-
-
-
-  /**
-   * The message ID for the message that will be used when the profiler is
-   * stopped.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_STOPPED_PROFILING =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 25;
-
-
-
-  /**
-   * The message ID for the message that will be used when the profiler thread
-   * writes the data it has captured to a file.  This takes two arguments, which
-   * are the DN of the configuration entry and the file to which the information
-   * has been written.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_WROTE_PROFILE_DATA =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 26;
-
-
-
-  /**
-   * The message ID for the message that will be used if the profiler is
-   * requested to perform an unrecognized action.  This takes two arguments,
-   * which are the DN of the configuration entry and the requested action.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_UNKNOWN_ACTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_MILD_ERROR | 27;
-
-
-
-  /**
-   * The message ID for the message that will be used if the profiler is
-   * going to skip processing on the requested action because an earlier problem
-   * was encountered while processing changes to the configuration.  This takes
-   * two arguments, which are the DN of the configuration entry and the
-   * requested action.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_SKIPPING_ACTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 28;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to process the requested profiler action.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_PROFILER_CANNOT_PERFORM_ACTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 29;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server startup plugins.  This takes two arguments,
-   * which are the DN of the plugin configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_STARTUP_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_FATAL_ERROR | 30;
-
-
-
-  /**
-   * The message ID for the message that will be used if a startup plugin
-   * returns <CODE>null</CODE> rather than a valid result.  This takes a single
-   * argument, which is the DN of the plugin configuration entry.
-   */
-  public static final int MSGID_PLUGIN_STARTUP_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_FATAL_ERROR | 31;
-
-
-
-  /**
-   * The message ID for the message that will be used if a startup plugin
-   * indicates that it failed but that the server startup may continue.  This
-   * takes three arguments, which are the DN of the plugin configuration entry,
-   * the error message generated by the plugin, and the unique ID for that error
-   * message.
-   */
-  public static final int MSGID_PLUGIN_STARTUP_PLUGIN_FAIL_CONTINUE =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 32;
-
-
-
-  /**
-   * The message ID for the message that will be used if a startup plugin
-   * indicates that it failed and that the server should abort its startup.
-   * This takes three arguments, which are the DN of the plugin configuration
-   * entry, the error message generated by the plugin, and the unique ID for
-   * that error message.
-   */
-  public static final int MSGID_PLUGIN_STARTUP_PLUGIN_FAIL_ABORT =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_FATAL_ERROR | 33;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server shutdown plugins.  This takes two arguments,
-   * which are the DN of the plugin configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_SHUTDOWN_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 34;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server post-connect plugins.  This takes four
-   * arguments, which are the DN of the plugin configuration entry, the
-   * connection ID for the client connection, the address of the client, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_POST_CONNECT_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 35;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server post-connect plugins returns null rather than a valid result.  This
-   * takes three arguments, which are the DN of the plugin configuration entry,
-   * the connection ID for the client connection, and the address of that
-   * client.
-   */
-  public static final int MSGID_PLUGIN_POST_CONNECT_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 36;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server post-disconnect plugins.  This takes four
-   * arguments, which are the DN of the plugin configuration entry, the
-   * connection ID for the client connection, the address of the client, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_POST_DISCONNECT_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 37;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server post-disconnect plugins returns null rather than a valid result.
-   * This takes three arguments, which are the DN of the plugin configuration
-   * entry, the connection ID for the client connection, and the address of that
-   * client.
-   */
-  public static final int MSGID_PLUGIN_POST_DISCONNECT_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 38;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server pre-parse plugins.  This takes five
-   * arguments, which are the name of the associated operation type, the
-   * DN of the plugin configuration entry, the connection ID for the client,
-   * the operation ID for the operation, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 39;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server pre-parse plugins returns null rather than a valid result.  This
-   * takes four arguments, which are the name of the associated operation type,
-   * the DN of the plugin configuration entry, the connection ID for the client
-   * connection, and the operation ID for the operation.
-   */
-  public static final int MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 40;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server pre-operation plugins.  This takes five
-   * arguments, which are the name of the associated operation type, the
-   * DN of the plugin configuration entry, the connection ID for the client,
-   * the operation ID for the operation, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 41;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server pre-operation plugins returns null rather than a valid result.  This
-   * takes four arguments, which are the name of the associated operation type,
-   * the DN of the plugin configuration entry, the connection ID for the client
-   * connection, and the operation ID for the operation.
-   */
-  public static final int MSGID_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 42;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server post-operation plugins.  This takes five
-   * arguments, which are the name of the associated operation type, the
-   * DN of the plugin configuration entry, the connection ID for the client,
-   * the operation ID for the operation, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 43;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server post-operation plugins returns null rather than a valid result.
-   * This takes four arguments, which are the name of the associated operation
-   * type, the DN of the plugin configuration entry, the connection ID for the
-   * client connection, and the operation ID for the operation.
-   */
-  public static final int MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 44;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server post-response plugins.  This takes five
-   * arguments, which are the name of the associated operation type, the
-   * DN of the plugin configuration entry, the connection ID for the client,
-   * the operation ID for the operation, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 45;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server post-response plugins returns null rather than a valid result.
-   * This takes four arguments, which are the name of the associated operation
-   * type, the DN of the plugin configuration entry, the connection ID for the
-   * client connection, and the operation ID for the operation.
-   */
-  public static final int MSGID_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 46;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server search result entry plugins.  This takes
-   * five arguments, which are the DN of the plugin configuration entry,
-   * the connection ID for the client, the operation ID for the search
-   * operation, the DN of the search result entry, and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_SEARCH_ENTRY_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 47;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server search result entry plugins returns null rather than a valid result.
-   * This takes four arguments, which are the DN of the plugin configuration
-   * entry, the connection ID for the client connection, the operation ID for
-   * the search operation, and the DN of the search result entry.
-   */
-  public static final int MSGID_PLUGIN_SEARCH_ENTRY_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 48;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server search result reference plugins.  This takes
-   * five arguments, which are the DN of the plugin configuration entry,
-   * the connection ID for the client, the operation ID for the search
-   * operation, a string representation of the referral URLs, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_SEARCH_REFERENCE_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 49;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server search result reference plugins returns null rather than a valid
-   * result.  This takes four arguments, which are the DN of the plugin
-   * configuration  entry, the connection ID for the client connection, the
-   * operation ID for the search operation, and a string representation of the
-   * referral URLs.
-   */
-  public static final int MSGID_PLUGIN_SEARCH_REFERENCE_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 50;
-
-
-
-  /**
-   * The message ID for the message that will be used if the lastmod plugin is
-   * configured with one or more invalid types.  This takes a single argument,
-   * which is the invalid type that was used.
-   */
-  public static final int MSGID_PLUGIN_LASTMOD_INVALID_PLUGIN_TYPE =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 51;
-
-
-
-  /**
-   * The message ID for the message that will be used for the description of the
-   * "filename" argument to the profile viewer.  It does not take any arguments.
-   */
-  public static final int MSGID_PROFILEVIEWER_DESCRIPTION_FILENAMES =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 52;
-
-
-
-  /**
-   * The message ID for the message that will be used for the description of the
-   * "useGUI" argument to the profile viewer.  It does not take any arguments.
-   */
-  public static final int MSGID_PROFILEVIEWER_DESCRIPTION_USE_GUI =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 53;
-
-
-
-  /**
-   * The message ID for the message that will be used for the description of the
-   * "displayUsage" argument to the profile viewer.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_PROFILEVIEWER_DESCRIPTION_USAGE =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 54;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to initialize the command-line arguments.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_PROFILEVIEWER_CANNOT_INITIALIZE_ARGS =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 55;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the command-line arguments.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PROFILEVIEWER_ERROR_PARSING_ARGS =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 56;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the command-line arguments.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_PROFILEVIEWER_CANNOT_PROCESS_DATA_FILE =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 57;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server LDIF import plugins.  This takes three
-   * arguments, which are the DN of the plugin configuration entry, the DN
-   * of the entry being imported, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_PLUGIN_LDIF_IMPORT_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 58;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server LDIF import plugins returns null rather than a valid result.  This
-   * This takes two arguments, which are the DN of the plugin configuration
-   * entry and the DN of the entry being imported.
-   */
-  public static final int MSGID_PLUGIN_LDIF_IMPORT_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 59;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server LDIF export plugins.  This takes three
-   * arguments, which are the DN of the plugin configuration entry, the DN
-   * of the entry being exported, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_PLUGIN_LDIF_EXPORT_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 60;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server LDIF export plugins returns null rather than a valid result.  This
-   * This takes two arguments, which are the DN of the plugin configuration
-   * entry and the DN of the entry being exported.
-   */
-  public static final int MSGID_PLUGIN_LDIF_EXPORT_PLUGIN_RETURNED_NULL =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 61;
-
-
-
-  /**
-   * The message ID for the message that will be used if the entryUUID plugin is
-   * configured with one or more invalid types.  This takes a single argument,
-   * which is the invalid type that was used.
-   */
-  public static final int MSGID_PLUGIN_ENTRYUUID_INVALID_PLUGIN_TYPE =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 62;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server intermediate response plugins.  This takes
-   * four arguments, which are the DN of the plugin configuration entry,
-   * the connection ID for the client, the operation ID for the operation, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 63;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server intermediate response plugins returns null rather than a valid
-   * result.  This takes four arguments, which are the DN of the plugin
-   * configuration  entry, the connection ID for the client connection, and the
-   * operation ID for the associated operation.
-   */
-  public static final int
-       MSGID_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_RETURNED_NULL =
-            CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 64;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password policy
-   * import plugin is configured with one or more invalid types.  This takes a
-   * single argument, which is the invalid type that was used.
-   */
-  public static final int MSGID_PLUGIN_PWPIMPORT_INVALID_PLUGIN_TYPE =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 65;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to encode a user password.  This takes three arguments, which
-   * are the name of the password attribute, the user entry DN, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 66;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * invoke a plugin for a plugin type that it does not support.  This takes
-   * two arguments, which are the DN of the plugin configuration entry and the
-   * name of the unsupported plugin type.
-   */
-  public static final int MSGID_PLUGIN_TYPE_NOT_SUPPORTED =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 67;
-
-
-
-  /**
-   * The message ID for the message that will be used for the description of the
-   * profile viewer tool.  It does not take any arguments.
-   */
-  public static final int MSGID_PROFILEVIEWER_TOOL_DESCRIPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_INFORMATIONAL | 68;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password policy
-   * import plugin is not configured with any default auth password schemes and
-   * the SHA1 scheme is not available.  This takes a single argument, which is
-   * the name of the SHA1 scheme.
-   */
-  public static final int MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 69;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user specifies a
-   * default auth password storage scheme that is unknown to the server.  This
-   * takes a single argument, which is the specified scheme name.
-   */
-  public static final int MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 70;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password policy
-   * import plugin is not configured with any default user password schemes and
-   * the SSHA scheme is not available.  This takes a single argument, which is
-   * the name of the SSHA scheme.
-   */
-  public static final int MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 71;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user specifies a
-   * default user password storage scheme that is unknown to the server.  This
-   * takes a single argument, which is the specified scheme name.
-   */
-  public static final int MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 72;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry references a
-   * custom password policy that does not exist.  This takes two arguments,
-   * which are the DN of the target entry and the DN of the password policy.
-   */
-  public static final int MSGID_PLUGIN_PWIMPORT_NO_SUCH_POLICY =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_WARNING | 73;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the custom passwod policy DN.  This takes two arguments,
-   * which are the DN of the target entry and a message explaining the problem
-   * that occured.
-   */
-  public static final int MSGID_PLUGIN_PWIMPORT_CANNOT_DECODE_POLICY_DN =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_WARNING | 74;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * by one of the Directory Server subordinate modify DN plugins.  This takes
-   * four arguments, which are the DN of the plugin configuration entry, the
-   * connection ID for the client, the operation ID for the operation, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_EXCEPTION =
-       CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 75;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the Directory
-   * Server subordinate modify DN plugins returns null rather than a valid
-   * result.  This takes three arguments, which are the DN of the plugin
-   * configuration entry, the connection ID for the client connection, and the
-   * operation ID for the operation.
-   */
-  public static final int
-       MSGID_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_RETURNED_NULL =
-            CATEGORY_MASK_PLUGIN | SEVERITY_MASK_SEVERE_ERROR | 76;
-
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_PLUGIN_NULL_CONFIG_ENTRY,
-                    "Unable to initialize an instance of the plugin defined " +
-                    "in class %s because the provided configuration entry " +
-                    "was null");
-
-
-    registerMessage(MSGID_PLUGIN_DESCRIPTION_SHUTDOWN_PASSWORD,
-                    "Specifies an optional encoded password that will be " +
-                    "required in order to be able to stop the Directory " +
-                    "Server.  If this is not provided, then no password will " +
-                    "be required (although it will still be necessary to " +
-                    "authenticate to the server in order to be able to add " +
-                    "necessary task entry).  Changes to this password will " +
-                    "take effect immediately");
-
-
-    registerMessage(MSGID_PLUGIN_ADLIST_NO_PLUGIN_TYPES,
-                    "The LDAP attribute description list plugin instance " +
-                    "defined in configuration entry %s does not list any " +
-                    "plugin types.  This plugin must be configured to " +
-                    "operate as a pre-parse search plugin");
-    registerMessage(MSGID_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE,
-                    "The LDAP attribute description list plugin instance " +
-                    "defined in configuration entry %s lists an invalid " +
-                    "plugin type %s.  This plugin may only be used as a " +
-                    "pre-parse search plugin");
-
-
-    registerMessage(MSGID_PLUGIN_PROFILER_NO_PLUGIN_TYPES,
-                    "The Directory Server profiler plugin instance defined " +
-                    "in configuration entry %s does not list any plugin " +
-                    "types.  This plugin must be configured to operate as a " +
-                    "startup plugin");
-    registerMessage(MSGID_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE,
-                    "The Directory Server profiler plugin instance defined " +
-                    "in configuration entry %s lists an invalid plugin type " +
-                    "%s.  This plugin may only be used as a startup plugin");
-    registerMessage(MSGID_PLUGIN_PROFILER_DESCRIPTION_PROFILE_DIR,
-                    "Specifies the path to the directory into which profile " +
-                    "information will be written.  The directory must exist " +
-                    "and the Directory Server must have permission to create " +
-                    "new files in it.  Changes to this configuration " +
-                    "attribute will take effect immediately");
-    registerMessage(MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_PROFILE_DIR,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " +  ATTR_PROFILE_DIR +
-                    " attribute in the %s entry:  %s.  The default profile " +
-                    "directory of %s will be used");
-    registerMessage(MSGID_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA,
-                    "An unexpected error occurred when the profiler plugin " +
-                    "defined in configuration entry %s attempted to write " +
-                    "the information captured to output file %s:  %s");
-    registerMessage(MSGID_PLUGIN_PROFILER_DESCRIPTION_AUTOSTART,
-                    "Indicates whether the profiler plugin should start " +
-                    "collecting data automatically when the Directory Server " +
-                    "is started.  This will only be read when the server is " +
-                    "started, and any changes will take effect on the next " +
-                    "restart");
-    registerMessage(MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_AUTOSTART,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " +  ATTR_PROFILE_AUTOSTART +
-                    " attribute in the %s entry:  %s.  Profiling information " +
-                    "will not automatically be captured on startup and must " +
-                    "be manually enabled");
-    registerMessage(MSGID_PLUGIN_PROFILER_DESCRIPTION_INTERVAL,
-                    "Specifies the sample interval that should be used when " +
-                    "capturing profiling information in the server.  Changes " +
-                    "to this configuration attribute will take effect the " +
-                    "next time the profiler is started");
-    registerMessage(MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_INTERVAL,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_PROFILE_INTERVAL +
-                    "attribute in the %s entry:  %s.  The default sample " +
-                    "interval of %d milliseconds will be used");
-    registerMessage(MSGID_PLUGIN_PROFILER_DESCRIPTION_STATE,
-                    "Specifies the current state for the profiler.  It will " +
-                    "be either \"enabled\" (which indicates that the " +
-                    "profiler thread is actively collecting data) or " +
-                    "\"disabled\".  This is a read-only attribute");
-    registerMessage(MSGID_PLUGIN_PROFILER_DESCRIPTION_ACTION,
-                    "Specifies the action that should be taken by the " +
-                    "profiler.  A value of \"start\" will cause the profiler " +
-                    "thread to start collecting data if it is not already " +
-                    "active.  A value of \"stop\" will cause the profiler " +
-                    "thread to stop collecting data and write it do disk, " +
-                    "and a value of \"cancel\" will cause the profiler " +
-                    "thread to stop collecting data and discard anything " +
-                    "that has been captured.  These operations will occur " +
-                    "immediately");
-    registerMessage(MSGID_PLUGIN_PROFILER_INVALID_PROFILE_DIR,
-                    "The profile directory %s specified in attribute " +
-                    ATTR_PROFILE_DIR + " of configuration entry %s is " +
-                    "invalid because the specified path does not exist or " +
-                    "is not a directory");
-    registerMessage(MSGID_PLUGIN_PROFILER_CANNOT_DETERMINE_ACTION,
-                    "An unexpected error occurred while attempting to " +
-                    "determine the value of the " + ATTR_PROFILE_ACTION +
-                    " attribute in the %s entry:  %s.  No action will be " +
-                    "taken");
-    registerMessage(MSGID_PLUGIN_PROFILER_UPDATED_INTERVAL,
-                    "The sample interval for the profiler plugin defined in " +
-                    "configuration entry %s has been updated to %d " +
-                    "milliseconds");
-    registerMessage(MSGID_PLUGIN_PROFILER_CANNOT_UPDATE_INTERVAL,
-                    "An unexpected error occurred while attempting to update " +
-                    "the sample interval for the profiler plugin defined in " +
-                    "configuration entry %s:  %s");
-    registerMessage(MSGID_PLUGIN_PROFILER_UPDATED_DIRECTORY,
-                    "The profile directory for the profiler plugin defined " +
-                    "in configuration entry %s has been changed to %s");
-    registerMessage(MSGID_PLUGIN_PROFILER_CANNOT_UPDATE_DIRECTORY,
-                    "An unexpected error occurred while attempting to update " +
-                    "the profile directory for the profiler plugin defined " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_PLUGIN_PROFILER_STARTED_PROFILING,
-                    "The profiler plugin defined in configuration entry %s " +
-                    "has been activated and has started capturing data");
-    registerMessage(MSGID_PLUGIN_PROFILER_ALREADY_PROFILING,
-                    "The profiler plugin defined in configuration entry %s " +
-                    "is already active, and therefore the request to start " +
-                    "profiling has been ignored");
-    registerMessage(MSGID_PLUGIN_PROFILER_NOT_RUNNING,
-                    "The profiler plugin defined in configuration entry %s " +
-                    "received a request to stop capturing data but it was " +
-                    "not active so no action has been taken");
-    registerMessage(MSGID_PLUGIN_PROFILER_STOPPED_PROFILING,
-                    "The profiler plugin defined in configuration entry %s " +
-                    "has been stopped and is no longer capturing data");
-    registerMessage(MSGID_PLUGIN_PROFILER_WROTE_PROFILE_DATA,
-                    "The data collected by the profiler plugin defined in " +
-                    "configuration entry %s has been written to %s");
-    registerMessage(MSGID_PLUGIN_PROFILER_UNKNOWN_ACTION,
-                    "The profiler plugin defined in configuration entry %s " +
-                    "has been requested to perform an action %s that is " +
-                    "not recognized by the server.  No action will be taken");
-    registerMessage(MSGID_PLUGIN_PROFILER_SKIPPING_ACTION,
-                    "A profiler action %s was requested for the profiler " +
-                    "plugin defined in configuration entry %s, but one or " +
-                    "more problems were encountered with the plugin " +
-                    "configuration and therefore the requested action will " +
-                    "be skipped");
-    registerMessage(MSGID_PLUGIN_PROFILER_CANNOT_PERFORM_ACTION,
-                    "An unexpected error occurred while attempting to " +
-                    "process the requested action for the profiler plugin " +
-                    "defined in configuration entry %s:  %s");
-
-
-    registerMessage(MSGID_PLUGIN_STARTUP_PLUGIN_EXCEPTION,
-                    "The startup plugin defined in configuration entry %s " +
-                    "threw an exception when it was invoked during the " +
-                    "Directory Server startup process:  %s.  The server " +
-                    "startup process has been aborted");
-    registerMessage(MSGID_PLUGIN_STARTUP_PLUGIN_RETURNED_NULL,
-                    "The startup plugin defined in configuration entry %s " +
-                    "returned a null value when it was invoked during the " +
-                    "Directory Server startup process.  This is an illegal " +
-                    "return value, and the server startup process has been " +
-                    "aborted");
-    registerMessage(MSGID_PLUGIN_STARTUP_PLUGIN_FAIL_CONTINUE,
-                    "The startup plugin defined in configuration entry %s " +
-                    "encountered an error when it was invoked during the " +
-                    "Directory Server startup process:  %s (error ID %d).  " +
-                    "The startup process will continue, but this failure " +
-                    "may impact the operation of the server");
-    registerMessage(MSGID_PLUGIN_STARTUP_PLUGIN_FAIL_ABORT,
-                    "The startup plugin defined in configuration entry %s " +
-                    "encountered an error when it was invoked during the " +
-                    "Directory Server startup process:  %s (error ID %d).  " +
-                    "The server startup process has been aborted");
-
-
-    registerMessage(MSGID_PLUGIN_SHUTDOWN_PLUGIN_EXCEPTION,
-                    "The shutdown plugin defined in configuration entry %s " +
-                    "threw an exception when it was invoked during the " +
-                    "Directory Server shutdown process:  %s");
-
-
-    registerMessage(MSGID_PLUGIN_POST_CONNECT_PLUGIN_EXCEPTION,
-                    "The post-connect plugin defined in configuration entry " +
-                    "%s threw an exception when it was invoked for " +
-                    "connection %d from %s:  %s.  The connection will be " +
-                    "terminated");
-    registerMessage(MSGID_PLUGIN_POST_CONNECT_PLUGIN_RETURNED_NULL,
-                    "The post-connect plugin defined in configuration entry " +
-                    "%s returned null when invoked for connection %d from " +
-                    "%s.  This is an illegal response, and the connection " +
-                    "will be terminated");
-
-
-    registerMessage(MSGID_PLUGIN_POST_DISCONNECT_PLUGIN_EXCEPTION,
-                    "The post-disconnect plugin defined in configuration " +
-                    "entry %s threw an exception when it was invoked for " +
-                    "connection %d from %s:  %s");
-    registerMessage(MSGID_PLUGIN_POST_DISCONNECT_PLUGIN_RETURNED_NULL,
-                    "The post-disconnect plugin defined in configuration " +
-                    "entry %s returned null when invoked for connection %d " +
-                    "from %s.  This is an illegal response");
-
-
-    registerMessage(MSGID_PLUGIN_LDIF_IMPORT_PLUGIN_EXCEPTION,
-                    "The LDIF import plugin defined in configuration entry " +
-                    "%s threw an exception when it was invoked on entry " +
-                    "%s:  %s");
-    registerMessage(MSGID_PLUGIN_LDIF_IMPORT_PLUGIN_RETURNED_NULL,
-                    "The LDIF import plugin defined in configuration entry " +
-                    "%s returned null when invoked on entry %s.  This is an " +
-                    "illegal response");
-    registerMessage(MSGID_PLUGIN_LDIF_EXPORT_PLUGIN_EXCEPTION,
-                    "The LDIF export plugin defined in configuration entry " +
-                    "%s threw an exception when it was invoked on entry " +
-                    "%s:  %s");
-    registerMessage(MSGID_PLUGIN_LDIF_EXPORT_PLUGIN_RETURNED_NULL,
-                    "The LDIF export plugin defined in configuration entry " +
-                    "%s returned null when invoked on entry %s.  This is an " +
-                    "illegal response");
-
-
-    registerMessage(MSGID_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION,
-                    "The pre-parse %s plugin defined in configuration " +
-                    "entry %s threw an exception when it was invoked for " +
-                    "connection %d operation %d:  %s.  Processing on this " +
-                    "operation will be terminated");
-    registerMessage(MSGID_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL,
-                    "The pre-parse %s plugin defined in configuration " +
-                    "entry %s returned null when invoked for connection %d " +
-                    "operation %s.  This is an illegal response, and " +
-                    "processing on this operation will be terminated");
-
-
-    registerMessage(MSGID_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION,
-                    "The pre-operation %s plugin defined in configuration " +
-                    "entry %s threw an exception when it was invoked for " +
-                    "connection %d operation %d:  %s.  Processing on this " +
-                    "operation will be terminated");
-    registerMessage(MSGID_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL,
-                    "The pre-operation %s plugin defined in configuration " +
-                    "entry %s returned null when invoked for connection %d " +
-                    "operation %s.  This is an illegal response, and " +
-                    "processing on this operation will be terminated");
-
-
-    registerMessage(MSGID_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION,
-                    "The post-operation %s plugin defined in configuration " +
-                    "entry %s threw an exception when it was invoked for " +
-                    "connection %d operation %d:  %s.  Processing on this " +
-                    "operation will be terminated");
-    registerMessage(MSGID_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL,
-                    "The post-operation %s plugin defined in configuration " +
-                    "entry %s returned null when invoked for connection %d " +
-                    "operation %s.  This is an illegal response, and " +
-                    "processing on this operation will be terminated");
-
-
-    registerMessage(MSGID_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION,
-                    "The post-response %s plugin defined in configuration " +
-                    "entry %s threw an exception when it was invoked for " +
-                    "connection %d operation %d:  %s.  Processing on this " +
-                    "operation will be terminated");
-    registerMessage(MSGID_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL,
-                    "The post-response %s plugin defined in configuration " +
-                    "entry %s returned null when invoked for connection %d " +
-                    "operation %s.  This is an illegal response, and " +
-                    "processing on this operation will be terminated");
-
-
-    registerMessage(MSGID_PLUGIN_SEARCH_ENTRY_PLUGIN_EXCEPTION,
-                    "The search result entry plugin defined in configuration " +
-                    "entry %s threw an exception when it was invoked for " +
-                    "connection %d operation %d with entry %s:  %s.  " +
-                    "Processing on this search operation will be terminated");
-    registerMessage(MSGID_PLUGIN_SEARCH_ENTRY_PLUGIN_RETURNED_NULL,
-                    "The search result entry plugin defined in configuration " +
-                    "entry %s returned null when invoked for connection %d " +
-                    "operation %s with entry %s.  This is an illegal " +
-                    "response, and processing on this search operation will " +
-                    "be terminated");
-
-
-    registerMessage(MSGID_PLUGIN_SEARCH_REFERENCE_PLUGIN_EXCEPTION,
-                    "The search result reference plugin defined in " +
-                    "configuration entry %s threw an exception when it was " +
-                    "invoked for connection %d operation %d with referral " +
-                    "URL(s) %s:  %s.  Processing on this search operation " +
-                    "will be terminated");
-    registerMessage(MSGID_PLUGIN_SEARCH_REFERENCE_PLUGIN_RETURNED_NULL,
-                    "The search result reference plugin defined in " +
-                    "configuration entry %s returned null when invoked for " +
-                    "connection %d operation %s with referral URL(s) %s.  " +
-                    "This is an illegal response, and processing on this " +
-                    "search operation will be terminated");
-
-
-    registerMessage(MSGID_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_EXCEPTION,
-                    "The subordinate modify DN plugin defined in " +
-                    "configuration entry %s threw an exception when it was " +
-                    "invoked for connection %d operation %d:  %s.  " +
-                    "Processing on this operation will be terminated");
-    registerMessage(MSGID_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_RETURNED_NULL,
-                    "The subordinate modify DN plugin defined in " +
-                    "configuration entry %s returned null when invoked for " +
-                    "connection %d operation %s.  This is an illegal " +
-                    "response, and processing on this operation will be " +
-                    "terminated");
-
-
-    registerMessage(MSGID_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_EXCEPTION,
-                    "The intermediate response plugin defined in " +
-                    "configuration entry %s threw an exception when it was " +
-                    "invoked for connection %d operation %d:  %s.  " +
-                    "Processing on this operation will be terminated");
-    registerMessage(MSGID_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_RETURNED_NULL,
-                    "The intermediate response plugin defined in " +
-                    "configuration entry %s returned null when invoked for " +
-                    "connection %d operation %s.  This is an illegal " +
-                    "response, and processing on this operation will be " +
-                    "terminated");
-
-
-    registerMessage(MSGID_PLUGIN_LASTMOD_INVALID_PLUGIN_TYPE,
-                    "An attempt was made to register the LastMod plugin to " +
-                    "be invoked as a %s plugin.  This plugin type is not " +
-                    "allowed for this plugin");
-
-
-    registerMessage(MSGID_PROFILEVIEWER_TOOL_DESCRIPTION,
-                    "This utility may be used to view information in data " +
-                    "files captured by the Directory Server profiler");
-    registerMessage(MSGID_PROFILEVIEWER_DESCRIPTION_FILENAMES,
-                    "Specifies the path to a profile data file.  This  " +
-                    "argument may be provided more than once to analyze data " +
-                    "from multiple data files");
-    registerMessage(MSGID_PROFILEVIEWER_DESCRIPTION_USE_GUI,
-                    "Indicates whether to view the profile information in " +
-                    "GUI mode or to write the resulting data to standard " +
-                    "output");
-    registerMessage(MSGID_PROFILEVIEWER_DESCRIPTION_USAGE,
-                    "Displays this usage information");
-    registerMessage(MSGID_PROFILEVIEWER_CANNOT_INITIALIZE_ARGS,
-                    "An unexpected error occurred while attempting to " +
-                    "initialize the command-line arguments:  %s");
-    registerMessage(MSGID_PROFILEVIEWER_ERROR_PARSING_ARGS,
-                    "An error occurred while parsing the command-line " +
-                    "arguments:  %s");
-    registerMessage(MSGID_PROFILEVIEWER_CANNOT_PROCESS_DATA_FILE,
-                    "An error occurred while trying to process the profile " +
-                    "data in file %s:  %s");
-
-
-    registerMessage(MSGID_PLUGIN_ENTRYUUID_INVALID_PLUGIN_TYPE,
-                    "An attempt was made to register the EntryUUID plugin to " +
-                    "be invoked as a %s plugin.  This plugin type is not " +
-                    "allowed for this plugin");
-
-
-    registerMessage(MSGID_PLUGIN_PWPIMPORT_INVALID_PLUGIN_TYPE,
-                    "An attempt was made to register the password policy " +
-                    "import plugin to be invoked as a %s plugin.  This " +
-                    "plugin type is not allowed for this plugin");
-    registerMessage(MSGID_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD,
-                    "An error occurred while attempting to encode a password " +
-                    "value stored in attribute %s of user entry %s:  %s.  " +
-                    "Password values for this user will not be encoded");
-    registerMessage(MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES,
-                    "The password policy import plugin is not configured " +
-                    "any default auth password schemes, and the server does " +
-                    "not support the %s auth password scheme");
-    registerMessage(MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME,
-                    "Auth password storage scheme %s referenced by the " +
-                    "password policy import plugin is not configured for use " +
-                    "in the server");
-    registerMessage(MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES,
-                    "The password policy import plugin is not configured " +
-                    "any default user password schemes, and the server does " +
-                    "not support the %s auth password scheme");
-    registerMessage(MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME,
-                    "User password storage scheme %s referenced by the " +
-                    "password policy import plugin is not configured for use " +
-                    "in the server");
-    registerMessage(MSGID_PLUGIN_PWIMPORT_NO_SUCH_POLICY,
-                    "Entry '%s' indicates that it uses custom password " +
-                    "policy '%s', but no such policy is defined in the " +
-                    "server.  Any passwords contained in the entry will be " +
-                    "encoded using the default storage schemes, but " +
-                    "authentication as this user may not be possible");
-    registerMessage(MSGID_PLUGIN_PWIMPORT_CANNOT_DECODE_POLICY_DN,
-                    "An error occurred while attempting to decode the " +
-                    "value of the custom password policy attribute in " +
-                    "entry '%s':  %s.  Any passwords contained in the entry " +
-                    "will be encoded using the default storage schemes, but " +
-                    "authentication as this user may not be possible");
-
-
-    registerMessage(MSGID_PLUGIN_TYPE_NOT_SUPPORTED,
-                    "The plugin defined in configuration entry %s does not " +
-                    "support the %s plugin type");
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/ProtocolMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/ProtocolMessages.java
deleted file mode 100644
index ad556c2..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/ProtocolMessages.java
+++ /dev/null
@@ -1,6751 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import org.opends.server.protocols.ldap.LDAPResultCode;
-
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with protocol handling.
- */
-public class ProtocolMessages
-{
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element because the byte array to decode was
-   * <CODE>null</CODE>.  It does not take any arguments.
-   */
-  public static final int MSGID_ASN1_NULL_ELEMENT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 1;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element because the byte array was too short.  It takes a
-   * single integer argument, which is the actual length of the byte array.
-   */
-  public static final int MSGID_ASN1_SHORT_ELEMENT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 2;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element because the encoded length had an invalid number
-   * of bytes.  It takes a single integer argument, which is the indicated
-   * number of bytes in the length.
-   */
-  public static final int MSGID_ASN1_INVALID_NUM_LENGTH_BYTES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 3;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element because the element was missing one or more bytes
-   * from a multi-byte length.  It takes a single argument, which is the
-   * indicated number of bytes in the length.
-   */
-  public static final int MSGID_ASN1_TRUNCATED_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 4;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element because the decoded value length does not match the
-   * number of remaining bytes in the array.  It takes two integer arguments,
-   * which are the decoded length and the number of bytes left in the array.
-   */
-  public static final int MSGID_ASN1_LENGTH_MISMATCH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 5;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as a set of ASN.1 elements because the array was null.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_ELEMENT_SET_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 6;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as a set of ASN.1 elements because the end of the array
-   * was reached after reading only the type but none of the length for an
-   * element.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_ELEMENT_SET_NO_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 7;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a set of ASN.1 elements because the encoded length for an element
-   * had an invalid number of bytes.  It takes a single integer argument, which
-   * is the indicated number of bytes in the length.
-   */
-  public static final int MSGID_ASN1_ELEMENT_SET_INVALID_NUM_LENGTH_BYTES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a set of ASN.1 elements because an element was missing one or more
-   * bytes from a multi-byte length.  It takes a single argument, which is the
-   * indicated number of bytes in the length.
-   */
-  public static final int MSGID_ASN1_ELEMENT_SET_TRUNCATED_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 9;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a set of ASN.1 elements because the byte array did not contain
-   * enough bytes to hold the entire value.  This takes two integer arguments,
-   * which are the decoded length for the element and the number of bytes
-   * remaining.
-   */
-  public static final int MSGID_ASN1_ELEMENT_SET_TRUNCATED_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 10;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as the value of an ASN.1 Boolean element because it was
-   * null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_BOOLEAN_SET_VALUE_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 11;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as the value of an ASN.1 Boolean element because the
-   * byte array was not exactly one byte long.  This takes a single integer
-   * argument, which is the length of the provided array.
-   */
-  public static final int MSGID_ASN1_BOOLEAN_SET_VALUE_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 12;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a Boolean element because the provided element
-   * was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_BOOLEAN_DECODE_ELEMENT_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 13;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a Boolean element because the value of the
-   * provided element was not exactly one byte.  This takes a single integer
-   * argument, which is the length of the value of the provided element.
-   */
-  public static final int MSGID_ASN1_BOOLEAN_DECODE_ELEMENT_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 14;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 Boolean element because the provided array
-   * was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_BOOLEAN_DECODE_ARRAY_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 15;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 Boolean element because the byte array was too short.
-   * It takes a single integer argument, which is the actual length of the byte
-   * array.
-   */
-  public static final int MSGID_ASN1_BOOLEAN_SHORT_ELEMENT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 16;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 Boolean element because the decoded value
-   * was not exactly one byte.  This takes a single integer argument, which is
-   * the decoded value.
-   */
-  public static final int MSGID_ASN1_BOOLEAN_DECODE_ARRAY_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 17;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as the value of an ASN.1 null element because the byte
-   * array was not exactly zero bytes long.  This takes a single integer
-   * argument, which is the length of the provided array.
-   */
-  public static final int MSGID_ASN1_NULL_SET_VALUE_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 18;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a null element because the provided element
-   * was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_NULL_DECODE_ELEMENT_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 19;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a null element because the value of the
-   * provided element was not exactly zero byte.  This takes a single integer
-   * argument, which is the length of the value of the provided element.
-   */
-  public static final int MSGID_ASN1_NULL_DECODE_ELEMENT_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 20;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 null element because the provided array
-   * was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_NULL_DECODE_ARRAY_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 21;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 null element because the decoded value
-   * was not exactly zero byte.  This takes a single integer argument, which is
-   * the decoded value.
-   */
-  public static final int MSGID_ASN1_NULL_DECODE_ARRAY_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 22;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an octet string element because the provided
-   * element was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_OCTET_STRING_DECODE_ELEMENT_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 23;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 octet string element because the provided
-   * array was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_OCTET_STRING_DECODE_ARRAY_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 24;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as the value of an ASN.1 integer element because it was
-   * null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_INTEGER_SET_VALUE_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 25;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as the value of an ASN.1 integer element because the
-   * byte array was not between one and four bytes long.  This takes a single
-   * integer argument, which is the length of the provided array.
-   */
-  public static final int MSGID_ASN1_INTEGER_SET_VALUE_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 26;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an integer element because the provided element
-   * was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_INTEGER_DECODE_ELEMENT_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 27;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an integer element because the value of the
-   * provided element was not between one and four bytes.  This takes a single
-   * integer argument, which is the length of the value of the provided element.
-   */
-  public static final int MSGID_ASN1_INTEGER_DECODE_ELEMENT_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 28;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 integer element because the provided array
-   * was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_INTEGER_DECODE_ARRAY_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 29;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 integer element because the byte array was too short.
-   * It takes a single integer argument, which is the actual length of the byte
-   * array.
-   */
-  public static final int MSGID_ASN1_INTEGER_SHORT_ELEMENT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 30;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 integer element because the decoded value
-   * was not between one and four bytes.  This takes a single integer argument,
-   * which is the decoded value.
-   */
-  public static final int MSGID_ASN1_INTEGER_DECODE_ARRAY_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 31;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as the value of an ASN.1 enumerated element because it
-   * was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_ENUMERATED_SET_VALUE_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 32;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as the value of an ASN.1 enumerated element because the
-   * byte array was not between one and four bytes long.  This takes a single
-   * integer argument, which is the length of the provided array.
-   */
-  public static final int MSGID_ASN1_ENUMERATED_SET_VALUE_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 33;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an enumerated element because the provided
-   * element was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_ENUMERATED_DECODE_ELEMENT_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 34;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an enumerated element because the value of the
-   * provided element was not between one and four bytes.  This takes a single
-   * integer argument, which is the length of the value of the provided element.
-   */
-  public static final int MSGID_ASN1_ENUMERATED_DECODE_ELEMENT_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 35;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 enumerated element because the provided
-   * array was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_ENUMERATED_DECODE_ARRAY_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 36;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 enumerated element because the byte array was too short.
-   * It takes a single integer argument, which is the actual length of the byte
-   * array.
-   */
-  public static final int MSGID_ASN1_ENUMERATED_SHORT_ELEMENT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 37;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 enumerated element because the decoded
-   * value was not between one and four bytes.  This takes a single integer
-   * argument, which is the decoded value.
-   */
-  public static final int MSGID_ASN1_ENUMERATED_DECODE_ARRAY_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 38;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as the value of an ASN.1 sequence element because it
-   * was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_SEQUENCE_SET_VALUE_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 39;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a sequence element because the provided element
-   * was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_SEQUENCE_DECODE_ELEMENT_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 40;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 sequence element because the provided
-   * array was null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_SEQUENCE_DECODE_ARRAY_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 41;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as the value of an ASN.1 set element because it was
-   * null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_SET_SET_VALUE_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 42;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a set element because the provided element was
-   * null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_SET_DECODE_ELEMENT_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 43;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 set element because the provided array was
-   * null.  This does not take any arguments.
-   */
-  public static final int MSGID_ASN1_SET_DECODE_ARRAY_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 44;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 sequence as an LDAP message because the sequence was null.
-   */
-  public static final int MSGID_LDAP_MESSAGE_DECODE_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 45;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 sequence as an LDAP message because the number of elements
-   * in the sequence is invalid.  This takes a single integer argument, which is
-   * the number of elements in the provided sequence.
-   */
-  public static final int MSGID_LDAP_MESSAGE_DECODE_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 46;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 sequence as an LDAP message because a problem occurred
-   * while trying to decode the first element as the message ID.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_MESSAGE_DECODE_MESSAGE_ID =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 47;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 sequence as an LDAP message because a problem occurred
-   * while trying to decode the second element as the protocol op.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_MESSAGE_DECODE_PROTOCOL_OP =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 48;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 sequence as an LDAP message because a problem occurred
-   * while trying to decode the third element as the set of controls.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_LDAP_MESSAGE_DECODE_CONTROLS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 49;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP control because the element was null.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_CONTROL_DECODE_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 50;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP control because the element could not
-   * be decoded as a sequence.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONTROL_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 51;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP control because the sequence contained
-   * an invalid number of elements.  This takes a single integer argument, which
-   * is the actual number of elements in the sequence.
-   */
-  public static final int MSGID_LDAP_CONTROL_DECODE_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 52;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP control because the OID could not be
-   * decoded.  This takes a single argument, which is the string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONTROL_DECODE_OID =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 53;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP control because the criticality could
-   * not be decoded.  This takes a single argument, which is the string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONTROL_DECODE_CRITICALITY =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 54;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP control because the value could not be
-   * decoded.  This takes a single argument, which is the string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONTROL_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 55;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP control because the BER type for the
-   * second element was invalid.  This takes a single argument, which is the BER
-   * type of the element.
-   */
-  public static final int MSGID_LDAP_CONTROL_DECODE_INVALID_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 56;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a set of LDAP controls because the element was
-   * null.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_CONTROL_DECODE_CONTROLS_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 57;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a set of LDAP controls because the element could
-   * not be decoded as a sequence.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONTROL_DECODE_CONTROLS_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 58;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP abandon request protocol op because of a
-   * problem while interpreting the ID to abandon.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_ABANDON_REQUEST_DECODE_ID =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 59;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP result protocol op type because the
-   * element could not be decoded as a sequence.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_RESULT_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 60;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP result protocol op type because the
-   * result sequence did not contain an appropriate number of elements.  This
-   * takes a single integer argument, which is the number of elements in the
-   * decoded sequence.
-   */
-  public static final int MSGID_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 61;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP result protocol op type because a
-   * problem occurred while trying to interpret the result code.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_RESULT_DECODE_RESULT_CODE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 62;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP result protocol op type because a
-   * problem occurred while trying to interpret the matched DN.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_RESULT_DECODE_MATCHED_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 63;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP result protocol op type because a
-   * problem occurred while trying to interpret the error message.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_RESULT_DECODE_ERROR_MESSAGE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 64;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP result protocol op type because a
-   * problem occurred while trying to interpret the referral URLs.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_RESULT_DECODE_REFERRALS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 65;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP bind response protocol op type because
-   * the result sequence did not contain an appropriate number of elements.
-   * This takes a single integer argument, which is the number of elements in
-   * the decoded sequence.
-   */
-  public static final int MSGID_LDAP_BIND_RESULT_DECODE_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 66;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a bind response result protocol op type because
-   * a problem occurred while trying to interpret the server SASL credentials.
-   * This takes a single argument, which is a string representation of the
-   * exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_BIND_RESULT_DECODE_SERVER_SASL_CREDENTIALS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 67;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a bind response protocol op because the fourth
-   * element in the sequence had an invalid BER type.  This takes a single byte
-   * argument, which is the BER type of the element.
-   */
-  public static final int MSGID_LDAP_BIND_RESULT_DECODE_INVALID_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 68;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP extended response protocol op type
-   * because the result sequence did not contain an appropriate number of
-   * elements.  This takes a single integer argument, which is the number of
-   * elements in the decoded sequence.
-   */
-  public static final int
-       MSGID_LDAP_EXTENDED_RESULT_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 69;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an extended response result protocol op because
-   * a problem occurred while trying to interpret the set of referral URLs.
-   * This takes a single argument, which is a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_LDAP_EXTENDED_RESULT_DECODE_REFERRALS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 70;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an extended response result protocol op because
-   * a problem occurred while trying to interpret the response OID.  This takes
-   * a single argument, which is a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_LDAP_EXTENDED_RESULT_DECODE_OID =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 71;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an extended response result protocol op because
-   * a problem occurred while trying to interpret the response value.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_LDAP_EXTENDED_RESULT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 72;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an extended response protocol op because one of
-   * the elements in the sequence had an invalid BER type.  This takes a single
-   * byte argument, which is the BER type of the element.
-   */
-  public static final int MSGID_LDAP_EXTENDED_RESULT_DECODE_INVALID_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 73;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP unbind request protocol op.  This takes
-   * a single argument, which is a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_LDAP_UNBIND_DECODE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 74;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP bind request protocol op because the
-   * element could not be decoded as a sequence.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_BIND_REQUEST_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 75;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP bind request protocol op because the
-   * request sequence had an invalid number of elements.  This takes a single
-   * integer argument, which is the number of elements in the decoded sequence.
-   */
-  public static final int MSGID_LDAP_BIND_REQUEST_DECODE_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 76;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP bind request protocol op because the
-   * protocol version could not be decoded.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_BIND_REQUEST_DECODE_VERSION =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 77;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP bind request protocol op because the
-   * DN could not be decoded.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_BIND_REQUEST_DECODE_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 78;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP bind request protocol op because the
-   * simple authentication password could not be decoded.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_BIND_REQUEST_DECODE_PASSWORD =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 79;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP bind request protocol op because the
-   * SASL authentication info could not be decoded.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_BIND_REQUEST_DECODE_SASL_INFO =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 80;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP bind request protocol op because the
-   * authentication info element had an invalid BER type.  This takes a single
-   * argument, which is the BER type of the associated element.
-   */
-  public static final int MSGID_LDAP_BIND_REQUEST_DECODE_INVALID_CRED_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 81;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP bind request protocol op because a
-   * generic failure occurred while trying to decode the bind credentials.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_LDAP_BIND_REQUEST_DECODE_CREDENTIALS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 82;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP compare request protocol op because the
-   * element could not be decoded into the request sequence.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_COMPARE_REQUEST_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 83;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP compare request protocol op because the
-   * request sequence had an invalid number of elements.  This takes a single
-   * argument, which is the number of elements in the request sequence.
-   */
-  public static final int
-       MSGID_LDAP_COMPARE_REQUEST_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 84;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP compare request protocol op because the
-   * DN could not be decoded.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_COMPARE_REQUEST_DECODE_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 85;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP compare request protocol op because the
-   * AVA sequence could not be decoded.  This takes a single argument, which is
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_COMPARE_REQUEST_DECODE_AVA =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 86;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP compare request protocol op because
-   * there was an invalid number of elements in the AVA sequence.  This takes a
-   * single argument, which is the number of elements in the sequence
-   */
-  public static final int MSGID_LDAP_COMPARE_REQUEST_DECODE_AVA_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 87;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP compare request protocol op because the
-   * attribute type could not be decoded.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_COMPARE_REQUEST_DECODE_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 88;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP compare request protocol op because the
-   * assertion value could not be decoded.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_COMPARE_REQUEST_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 89;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP delete request protocol op because the
-   * DN could not be decoded.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_DELETE_REQUEST_DECODE_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 90;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP extended request protocol op because the
-   * element could not be decoded into the request sequence.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_EXTENDED_REQUEST_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 91;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP extended request protocol op because the
-   * request sequence had an invalid number of elements.  This takes a single
-   * argument, which is the number of elements in the request sequence.
-   */
-  public static final int
-       MSGID_LDAP_EXTENDED_REQUEST_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 92;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP extended request protocol op because the
-   * OID could not be decoded.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_EXTENDED_REQUEST_DECODE_OID =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 93;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP extended request protocol op because the
-   * value could not be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_EXTENDED_REQUEST_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 94;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modify DN request protocol op because
-   * the element could not be decoded into the request sequence.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 95;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modify DN request protocol op because
-   * the request sequence had an invalid number of elements.  This takes a
-   * single argument, which is the number of elements in the request sequence.
-   */
-  public static final int
-       MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 96;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modify DN request protocol op because
-   * the entry DN could not be decoded.  This takes a single argument, which is
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 97;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modify DN request protocol op because
-   * the new RDN could not be decoded.  This takes a single argument, which is
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_RDN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 98;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modify DN request protocol op because
-   * the deleteOldRDN flag could not be decoded.  This takes a single argument,
-   * which is  a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_DELETE_OLD_RDN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 99;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modify DN request protocol op because
-   * the new superior DN could not be decoded.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_SUPERIOR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 100;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP attribute because the element could not
-   * be decoded into the request sequence.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_ATTRIBUTE_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 101;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP attribute because the request sequence
-   * had an invalid number of elements.  This takes a single argument, which is
-   * the number of elements in the request sequence.
-   */
-  public static final int
-       MSGID_LDAP_ATTRIBUTE_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 102;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP attribute because the attribute type
-   * could not be decoded.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_ATTRIBUTE_DECODE_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 103;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP attribute because the set of values
-   * could not be decoded.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_ATTRIBUTE_DECODE_VALUES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 104;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP add request protocol op because the
-   * element could not be decoded into the request sequence.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_ADD_REQUEST_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 105;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP add request protocol op because the
-   * request sequence had an invalid number of elements.  This takes a single
-   * argument, which is the number of elements in the request sequence.
-   */
-  public static final int
-       MSGID_LDAP_ADD_REQUEST_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 106;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP add request protocol op because the
-   * entry DN could not be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_ADD_REQUEST_DECODE_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 107;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP add request protocol op because the set
-   * of attributes could not be decoded.  This takes a single argument, which is
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_ADD_REQUEST_DECODE_ATTRS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 108;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modification because the element could
-   * not be decoded into the request sequence.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_MODIFICATION_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 109;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modification because the request
-   * sequence had an invalid number of elements.  This takes a single argument,
-   * which is the number of elements in the request sequence.
-   */
-  public static final int
-       MSGID_LDAP_MODIFICATION_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 110;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modification because it contained an
-   * invalid modification type.  This takes a single integer argument, which is
-   * the modification type contained in the request.
-   */
-  public static final int MSGID_LDAP_MODIFICATION_DECODE_INVALID_MOD_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 111;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modification because the modification
-   * type could not be decoded.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_MODIFICATION_DECODE_MOD_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 112;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modification because the attribute
-   * could not be decoded.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_MODIFICATION_DECODE_ATTR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 113;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modify request protocol op because the
-   * element could not be decoded into the request sequence.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_MODIFY_REQUEST_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 114;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modify request protocol op because the
-   * request sequence had an invalid number of elements.  This takes a single
-   * argument, which is the number of elements in the request sequence.
-   */
-  public static final int
-       MSGID_LDAP_MODIFY_REQUEST_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 115;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modify request protocol op because the
-   * entry DN could not be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_MODIFY_REQUEST_DECODE_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 116;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP modify request protocol op because the
-   * set of modifications could not be decoded.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_MODIFY_REQUEST_DECODE_MODS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 117;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search result entry protocol op because
-   * the element could not be decoded into the request sequence.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_ENTRY_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 118;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search result entry protocol op because
-   * the request sequence had an invalid number of elements.  This takes a
-   * single argument, which is the number of elements in the request sequence.
-   */
-  public static final int
-       MSGID_LDAP_SEARCH_ENTRY_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 119;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search result entry protocol op because
-   * the entry DN could not be decoded.  This takes a single argument, which is
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_ENTRY_DECODE_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 120;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search result entry protocol op because
-   * the set of attributes could not be decoded.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_ENTRY_DECODE_ATTRS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 121;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search result reference protocol op
-   * because the element could not be decoded into the request sequence.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REFERENCE_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 122;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search result reference protocol op
-   * because the set of attributes could not be decoded.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REFERENCE_DECODE_URLS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 123;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * element could not be decoded into the request sequence.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 124;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * request sequence had an invalid number of elements.  This takes a single
-   * argument, which is the number of elements in the request sequence.
-   */
-  public static final int
-       MSGID_LDAP_SEARCH_REQUEST_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 125;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * base DN could not be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_BASE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 126;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * scope value was invalid.  This takes a single argument, which is the value
-   * provided for the scope.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_INVALID_SCOPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 127;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * search scope could not be decoded.  This takes a single argument, which is
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_SCOPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 128;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * alias dereference policy value was invalid.  This takes a single argument,
-   * which is the value provided for the dereference policy.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_INVALID_DEREF =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 129;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * alias dereferencing policy could not be decoded.  This takes a single
-   * argument,  which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_DEREF =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 130;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * size limit could not be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_SIZE_LIMIT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 131;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * time limit could not be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_TIME_LIMIT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 132;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * typesOnly flag could not be decoded.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_TYPES_ONLY =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 133;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * filter could not be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_FILTER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 134;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search request protocol op because the
-   * set of requested attributes could not be decoded.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_SEARCH_REQUEST_DECODE_ATTRIBUTES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 135;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP protocol op because the element was
-   * null.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_PROTOCOL_OP_DECODE_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 136;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP protocol op because the element had an
-   * invalid BER type.  This takes a single byte argument, which is the BER type
-   * of the element.
-   */
-  public static final int MSGID_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 137;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the element was
-   * null.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 138;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the element had an
-   * invalid BER type.  This takes a single byte argument, which is the BER type
-   * of the element.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_INVALID_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 139;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the element could
-   * not be decoded as an ASN.1 set.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_COMPOUND_SET =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 140;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because one of the filter
-   * components could not be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_COMPOUND_COMPONENTS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 141;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the value of the
-   * element could not be decoded as an ASN.1 element for the not filter
-   * component.  This takes a single argument, which is a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_NOT_ELEMENT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 142;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the NOT element
-   * could not be decoded as a filter component.  This takes a single argument,
-   * which is a string representation  of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_NOT_COMPONENT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 143;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the element could
-   * not be decoded into the type-and-value sequence.  This takes a single
-   * argument, which is a string representation  of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_TV_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 144;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the type and value
-   * sequence had an invalid number of elements.  This takes a single argument,
-   * which is the number of elements in the request sequence.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_TV_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 145;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the attribute type
-   * could not be decoded from the type-and-value sequence.  This takes a single
-   * argument, which is a string representation  of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_TV_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 146;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the assertion
-   * value could not be decoded from the type-and-value sequence.  This takes a
-   * single argument, which is a string representation  of the exception that
-   * was caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_TV_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 147;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the element could
-   * not be decoded into the substring sequence.  This takes a single argument,
-   * which is a string representation  of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_SUBSTRING_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 148;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the substring
-   * sequence had an invalid number of elements.  This takes a single argument,
-   * which is the number of elements in the request sequence.
-   */
-  public static final int
-       MSGID_LDAP_FILTER_DECODE_SUBSTRING_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 149;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the attribute type
-   * could not be decoded from the substring sequence.  This takes a single
-   * argument, which is a string representation  of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_SUBSTRING_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 150;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the sequence of
-   * substring  value elements could not be decoded.  This takes a single
-   * argument, which is a string representation  of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_SUBSTRING_ELEMENTS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 151;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the substring
-   * value sequence did not contain any elements.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_SUBSTRING_NO_SUBELEMENTS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 152;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the substring
-   * value sequence contained an element with an invalid BER type.  This takes
-   * a single byte argument, which is the invalid element type.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_SUBSTRING_INVALID_SUBTYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 153;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because a problem occurred
-   * while decoding the set of substring value components.  This takes a single
-   * argument, which is a string representation  of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_SUBSTRING_VALUES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 154;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the attribute type
-   * could not be decoded for the presence filter.  This takes a single
-   * argument, which is a string representation  of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_PRESENCE_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 155;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the element could
-   * not be decoded into the extensible match sequence.  This takes a single
-   * argument, which is a string representation  of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_EXTENSIBLE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 156;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because the extensible
-   * match sequence contained an element with an invalid BER type.  This takes
-   * a single byte argument, which is the invalid element type.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_EXTENSIBLE_INVALID_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 157;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as an LDAP search filter because a problem occurred
-   * while decoding the set of extensible match components.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_FILTER_DECODE_EXTENSIBLE_ELEMENTS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 158;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * send a response for an operation that does not have a result code.  This
-   * message takes three string arguments:  the type of operation, the
-   * connection ID, and the operation ID.
-   */
-  public static final int MSGID_LDAP_CLIENT_SEND_RESPONSE_NO_RESULT_CODE =
-  CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 159;
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * send a response for an operation that should not have a response.  This
-   * message takes four string arguments:  the type of operation, the connection
-   * ID, the operation ID, and a backtrace for the thread.
-   */
-  public static final int MSGID_LDAP_CLIENT_SEND_RESPONSE_INVALID_OP =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 160;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * attempting to encode an LDAP message to an ASN.1 element.  This takes the
-   * following arguments:  a string representation of the LDAP message, the
-   * client connection ID, the operation ID, and the string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CLIENT_SEND_MESSAGE_ENCODE_ASN1 =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 161;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * attempting to encode an LDAP message from an ASN.1 element to a byte array.
-   * This takes the following arguments:  a string representation of the ASN.1
-   * element, the client connection ID, the operation ID, and the string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CLIENT_SEND_MESSAGE_ENCODE_BYTES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 162;
-
-
-
-  /**
-   * The message ID for the message that will be used if an I/O problem is
-   * encountered while trying to send an LDAP message to the client.  This takes
-   * the following arguments:  a string representation of the LDAP message, the
-   * client connection ID, the operation ID, and the string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CLIENT_SEND_MESSAGE_IO_PROBLEM =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 163;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected problem
-   * (not I/O-related) is encountered while trying to send an LDAP message to
-   * the client.  This takes the following arguments:  a string representation
-   * of the LDAP message, the client connection ID, the operation ID, and the
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CLIENT_SEND_MESSAGE_UNEXPECTED_PROBLEM =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 164;
-
-
-
-  /**
-   * The message ID for the message that will be included in the notice of
-   * disconnection response sent to the client if no other more appropriate
-   * message has been provided.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_CLIENT_GENERIC_NOTICE_OF_DISCONNECTION =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 165;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client attempts to
-   * request an operation while the server is in the process of disconnecting
-   * that client.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_CLIENT_DISCONNECT_IN_PROGRESS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_WARNING | 166;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client sends a
-   * request that is an ASN.1 element with a zero-byte value (which cannot be a
-   * valid LDAP message).  This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_CLIENT_DECODE_ZERO_BYTE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 167;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client sends a
-   * request with a length that is larger than the maximum allowed request size.
-   * This takes two integer arguments, which are the length of the element that
-   * the client was trying to send and the maximum length allowed by the server.
-   */
-  public static final int MSGID_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 168;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client sends a
-   * request with a length that is encoded using multiple bytes, and more than
-   * four bytes are required to express that length.  This takes one integer
-   * argument, which is the number of bytes in the multi-byte length provided by
-   * the client.
-   */
-  public static final int MSGID_LDAP_CLIENT_DECODE_INVALID_MULTIBYTE_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 169;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client sends a
-   * request that cannot be properly decoded as an ASN.1 element.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_CLIENT_DECODE_ASN1_FAILED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 170;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client sends a
-   * request that cannot be properly decoded as an LDAP message.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_CLIENT_DECODE_LDAP_MESSAGE_FAILED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 171;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server somehow gets
-   * into a state in which it cannot determine where it should pick up in the
-   * decoding process.  This takes a single integer argument, which is the
-   * internal decoding state for the client connection.
-   */
-  public static final int MSGID_LDAP_CLIENT_INVALID_DECODE_STATE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 172;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client sends a
-   * request that has an invalid protocol op type for a request (e.g., one that
-   * should only be used for responses).  This takes a single argument, which is
-   * a string representation of the LDAP message read from the client.
-   */
-  public static final int MSGID_LDAP_CLIENT_DECODE_INVALID_REQUEST_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 173;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client sends a
-   * request is properly decoded as an LDAP message but cannot be converted to
-   * an operation.  This takes two arguments, which are a string representation
-   * of the LDAP message and a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_LDAP_CLIENT_CANNOT_CONVERT_MESSAGE_TO_OPERATION =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 174;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server cannot
-   * convert an LDAP message into an abandon operation.  This takes two
-   * arguments, which are a string representation of the LDAP message and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_ABANDON_INVALID_MESSAGE_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 175;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server cannot
-   * convert an LDAP message into an unbind operation.  This takes two
-   * arguments, which are a string representation of the LDAP message and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_UNBIND_INVALID_MESSAGE_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 176;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * create a selector for an LDAP connection handler.  This takes two
-   * arguments, which are the DN of the configuration entry for the connection
-   * handler and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_FATAL_ERROR | 177;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * listen on one of the addressed associated with an LDAP connection handler.
-   * This accepts several arguments:  the DN of the configuration entry of the
-   * connection handler, the listen address, the port number, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 178;
-
-
-
-  /**
-   * The message ID for the message that will be used if all of the attempts to
-   * create acceptors for the LDAP connection handler failed.  This takes a
-   * single argument, which is the DN of the configuration entry for the
-   * connection handler.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NO_ACCEPTORS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_FATAL_ERROR | 179;
-
-
-
-  /**
-   * The message ID for the message that will be used if a client connection is
-   * rejected because it was included in a denied address range.  This takes
-   * two arguments which are the host:port of the client and host:port of the
-   * server.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DENIED_CLIENT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 180;
-
-
-
-  /**
-   * The message ID for the message that will be used if a client connection is
-   * rejected because it was not included in any allowed address range.  This
-   * takes two arguments which are the host:port of the client and host:port of
-   * the server.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DISALLOWED_CLIENT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 181;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * register a client with a request handler for some reason.  This takes three
-   * arguments, which are the host:port of the client, the host:port of the
-   * server, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 182;
-
-
-
-  /**
-   * The message ID for the message that will be used if a failure occurs while
-   * trying to accept a new client connection.  This takes two arguments, which
-   * are the DN of the configuration entry associated with the connection
-   * handler and the string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 183;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple consecutive
-   * failures occurred while trying to accept client connections.  This takes
-   * two arguments, which are the DN of the configuration entry associated with
-   * the connection handler and the string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_FATAL_ERROR | 184;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurred that will prevent the connection handler from being able to keep
-   * processing.  This takes two arguments, which are the DN of the
-   * configuration entry associated with the connection handler and the string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_UNCAUGHT_ERROR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_FATAL_ERROR | 185;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * create a selector for an LDAP connection handler.  This takes two
-   * arguments, which are the name of the request handler and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_REQHANDLER_OPEN_SELECTOR_FAILED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_FATAL_ERROR | 186;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to register a client connection with a request handler.  This takes
-   * two arguments:  the name of the request handler and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_REQHANDLER_CANNOT_REGISTER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_FATAL_ERROR | 187;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to register
-   * a client connection with the request handler is rejected because the server
-   * is shutting down.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_REQHANDLER_REJECT_DUE_TO_SHUTDOWN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_FATAL_ERROR | 188;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt to register
-   * a client connection with the request handler is rejected because the
-   * pending connection queue is full.  This takes a single argument, which is
-   * the name of the request handler.
-   */
-  public static final int MSGID_LDAP_REQHANDLER_REJECT_DUE_TO_QUEUE_FULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_FATAL_ERROR | 189;
-
-
-
-  /**
-   * The message ID for the message that will be used a client connection is
-   * being deregistered from a request handler because the Directory Server is
-   * shutting down.  This takes a single argument, which is the reason provided
-   * for the shutdown.
-   */
-  public static final int MSGID_LDAP_REQHANDLER_DEREGISTER_DUE_TO_SHUTDOWN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_FATAL_ERROR | 190;
-
-
-
-  /**
-   * The message ID for the message that will be used if the ASN.1 reader
-   * attempts to read an element that is larger than the maximum allowed size.
-   * This takes two arguments, which are decoded element size and the maximum
-   * allowed size.
-   */
-  public static final int MSGID_ASN1_READER_MAX_SIZE_EXCEEDED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 191;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode a null string as an LDAP search filter.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAP_FILTER_STRING_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 192;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected exception
-   * is thrown while trying to decode a string as an LDAP filter.  This takes
-   * two arguments, which are the provided filter string and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_FILTER_UNCAUGHT_EXCEPTION =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 193;
-
-
-
-  /**
-   * The message ID for the message that will be used if there is a mismatch in
-   * the set of open and close parentheses for a search filter.  This takes
-   * three arguments, which are the filter string, the start position, and the
-   * end position for the filter.
-   */
-  public static final int MSGID_LDAP_FILTER_MISMATCHED_PARENTHESES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 194;
-
-
-
-  /**
-   * The message ID for the message that will be used if a filter string cannot
-   * be decoded because it does not contain an equal sign.  This takes three
-   * arguments, which are the filter string, the start position, and the end
-   * position for the filter.
-   */
-  public static final int MSGID_LDAP_FILTER_NO_EQUAL_SIGN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 195;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search filter string
-   * contains a backslash that is not followed by two hexadecimal digits.  This
-   * takes two arguments, which are the filter string and the location of the
-   * invalid escaped byte.
-   */
-  public static final int MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 196;
-
-
-
-  /**
-   * The message ID for the message that will be used if a compound filter
-   * element is missing a set of enclosing parentheses.  This takes three
-   * arguments, which are the filter string, the start position, and the end
-   * position for the filter.
-   */
-  public static final int MSGID_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 197;
-
-
-
-  /**
-   * The message ID for the message that will be used if a filter string has
-   * a close parenthesis that is not matched by a corresponding open
-   * parenthesis.  This takes two arguments, which are the filter string and the
-   * position of the unmatched close parenthesis.
-   */
-  public static final int MSGID_LDAP_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 198;
-
-
-
-  /**
-   * The message ID for the message that will be used if a filter string has an
-   * open parenthesis that is not matched by a corresponding close parenthesis.
-   * This takes two arguments, which are the filter string and the position of
-   * the unmatched open parenthesis.
-   */
-  public static final int MSGID_LDAP_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 199;
-
-
-
-  /**
-   * The message ID for the message that will be used if a substring filter does
-   * not contain any asterisks in its value.  This takes three arguments, which
-   * are the filter string, the start position for the value, and the end
-   * position for the value.
-   */
-  public static final int MSGID_LDAP_FILTER_SUBSTRING_NO_ASTERISKS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 200;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extensible match
-   * filter does not contain a colon.  This takes two arguments, which are the
-   * filter string and the start position of the extensible match filter.
-   */
-  public static final int MSGID_LDAP_FILTER_EXTENSIBLE_MATCH_NO_COLON =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 201;
-
-
-
-  /**
-   * The message ID for the message that will be used if a client sends a
-   * request to the server with an invalid type.  This takes two arguments,
-   * which are the request type that the client provided and the message ID of
-   * the message containing the invalid request.
-   */
-  public static final int MSGID_LDAP_DISCONNECT_DUE_TO_INVALID_REQUEST_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 202;
-
-
-
-  /**
-   * The message ID for the message that will be used if an internal failure
-   * occurs while trying to hand off a client request for processing.  This
-   * takes three arguments, which are the request type that the client provided,
-   * the message ID of the message containing the request, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_DISCONNECT_DUE_TO_PROCESSING_FAILURE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 203;
-
-
-
-  /**
-   * The message ID for the message that will be used if a bind request includes
-   * an invalid authentication type.  This takes two arguments, which are the
-   * LDAP message ID of the request and a string representation of the
-   * authentication type.
-   */
-  public static final int MSGID_LDAP_INVALID_BIND_AUTH_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 204;
-
-
-
-  /**
-   * The message ID for the message that will be used if a connection is closed
-   * because a bind operation failed with a protocol error.  This takes two
-   * arguments, which are the LDAP message ID of the bind request and the error
-   * message from the bind response.
-   */
-  public static final int MSGID_LDAP_DISCONNECT_DUE_TO_BIND_PROTOCOL_ERROR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 205;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extended response is
-   * not sent to an LDAPv2 client.  This takes three arguments, which are the
-   * connection ID, operation ID, and string representation of the extended
-   * response that would have been sent.
-   */
-  public static final int MSGID_LDAPV2_SKIPPING_EXTENDED_RESPONSE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 206;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search reference is
-   * not sent to an LDAPv2 client.  This takes three arguments, which are the
-   * connection ID, operation ID, and string representation of the search
-   * reference that would have been sent.
-   */
-  public static final int MSGID_LDAPV2_SKIPPING_SEARCH_REFERENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 207;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search reference is
-   * not sent to an LDAPv2 client.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPV2_REFERRAL_RESULT_CHANGED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 208;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a
-   * response contained one or more referrals that were not provided to an
-   * LDAPv2 client.  This takes one argument, which is a string representation
-   * of the referral URLs that would have been used.
-   */
-  public static final int MSGID_LDAPV2_REFERRALS_OMITTED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 209;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a client
-   * tried to bind using LDAPv2 but that was not allowed and the connection will
-   * be closed.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPV2_CLIENTS_NOT_ALLOWED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 210;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an LDAPv2
-   * client tried to send an extended request and will be disconnected.  This
-   * takes two arguments, which are the connection ID for the client and the
-   * message ID of the extended request.
-   */
-  public static final int MSGID_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 211;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * initialize the LDAP statistics monitor provider from the configuration.
-   * This takes a single argument, which is the DN of the configuration entry
-   * that targeted the LDAP statistics monitor.
-   */
-  public static final int MSGID_LDAP_STATS_INVALID_MONITOR_INITIALIZATION =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 212;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs in the request handler while attempting to iterate over connections
-   * with data available for reading.  This takes two arguments, which are the
-   * name of the request handler thread and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 213;
-
-
-
-  /**
-   * The message ID for the message that will be used if a connection attempt is
-   * rejected when trying to register it with the core server.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_REJECTED_BY_SERVER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 214;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the address(es) on which to accept
-   * client connections.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_ADDRESS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 215;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the port on which to accept client
-   * connections.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 216;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the address masks used to determine
-   * which clients will be allowed to establish connections.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_ALLOWED_CLIENTS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 217;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the address masks used to determine
-   * which clients will not be allowed to establish connections.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_DENIED_CLIENTS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 218;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute indicating whether LDAPv2 clients will be allowed.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_LDAPV2 =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 219;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the number of request handlers to use to
-   * read requestsfrom clients.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_DESCRIPTION_NUM_REQUEST_HANDLERS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 220;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute indicating whether to send a notice of
-   * disconnection to rejected client connections.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_DESCRIPTION_SEND_REJECTION_NOTICE =
-           CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 221;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute indicating whether to use the TCP_KEEPALIVE socket
-   * option for client connections.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_USE_TCP_KEEPALIVE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 222;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute indicating whether to use the TCP_NODELAY socket
-   * option for client connections.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_USE_TCP_NODELAY =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 223;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute indicating whether to use the SO_REUSEADDR socket
-   * option for the server listen socket.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_REUSE_ADDRESS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 224;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the maximum allowed request size.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_MAX_REQUEST_SIZE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 225;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute indicating whether to use SSL when accepting
-   * connections.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_USE_SSL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 226;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute indicating whether to allow the use of the
-   * StartTLS extended operation.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_STARTTLS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 227;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the policy to use for
-   * requesting/requiring SSL client authentication.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_DESCRIPTION_SSL_CLIENT_AUTH_POLICY =
-           CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 228;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the nickname of the certificate to use
-   * for SSL and StartTLS communication.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 229;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * resolve one of the listen addresses.  This takes three arguments, which are
-   * the listen address, the DN of the configuration entry, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_UNKNOWN_LISTEN_ADDRESS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 230;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the set of listen addresses.  This takes
-   * two arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_LISTEN_ADDRESS =
-           CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 231;
-
-
-
-  /**
-   * The message ID for the message that will be used if no listen port is
-   * specified.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NO_LISTEN_PORT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 232;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the listen port.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_LISTEN_PORT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 233;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the set of allowed client masks.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOWED_CLIENTS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 234;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the set of denied client masks.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_DENIED_CLIENTS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 235;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine whether to allow LDAPv2 clients.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOW_LDAPV2 =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 236;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the number of request handlers.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_NUM_REQUEST_HANDLERS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 237;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine whether to send a notice of disconnection
-   * to clients whose connections are rejected.  This takes two arguments, which
-   * are the DN of the configuration entry and a string representation of the
-   * exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_SEND_REJECTION_NOTICE =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 238;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine whether to use the TCP KeepAlive option.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_USE_TCP_KEEPALIVE =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 239;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine whether to use the TCP NoDelay option.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_USE_TCP_NODELAY =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 240;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine whether to use the SO_REUSEADDR option.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOW_REUSE_ADDRESS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 241;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the maximum client request size to allow.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_MAX_REQUEST_SIZE =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 242;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine whether to use SSL when accepting
-   * connections.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_USE_SSL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 243;
-
-
-
-  /**
-   * The message ID for the message that will be used if both SSL and StartTLS
-   * are enabled.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CANNOT_HAVE_SSL_AND_STARTTLS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 244;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine whether to allow the StartTLS operation.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOW_STARTTLS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 245;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid SSL client
-   * authentication policy is specified.  This takes two arguments, which are
-   * the specified policy and the DN of the configuration entry.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_INVALID_SSL_CLIENT_AUTH_POLICY =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 246;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the policy for requesting/requiring SSL
-   * client authentication.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_CLIENT_AUTH_POLICY =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 247;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the nickname of the SSL certificate to
-   * use.  This takes two arguments, which are the DN of the configuration entry
-   * and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_CERT_NICKNAME =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 248;
-
-
-
-  /**
-   * The message ID for the message that will be used if an address mask defined
-   * in the connection handler configuration is invalid.  This takes four
-   * arguments, which are the address mask string, the name of the configuration
-   * attribute, the DN of the configuration entry, and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_INVALID_ADDRESS_MASK =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 249;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * set of allowed clients has been configured.  This takes a single argument,
-   * which is the DN of the configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_ALLOWED_CLIENTS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 250;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * set of denied clients has been configured.  This takes a single argument,
-   * which is the DN of the configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_DENIED_CLIENTS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 251;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the allow LDAPv2 configuration option.  This
-   * takes two arguments, which are the new value and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_ALLOW_LDAPV2 =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 252;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the send rejection notice configuration option.
-   * This takes two arguments, which are the new value and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_SEND_REJECTION_NOTICE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 253;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the use keep-alive configuration option.  This
-   * takes two arguments, which are the new value and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_USE_KEEPALIVE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 254;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the use TCP NoDelay configuration option.  This
-   * takes two arguments, which are the new value and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_USE_TCP_NODELAY =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 255;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the max request size configuration option.  This
-   * takes two arguments, which are the new value and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_MAX_REQUEST_SIZE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 256;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the allow StartTLS configuration option.  This
-   * takes two arguments, which are the new value and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_ALLOW_STARTTLS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 257;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute indicating whether the LDAP connection handler
-   * should keep statistical data.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_KEEP_STATS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 258;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine whether to maintain LDAP statistics.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_KEEP_STATS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 259;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the keep statistics configuration option.  This
-   * takes two arguments, which are the new value and the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_KEEP_STATS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 260;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as the value of an ASN.1 long element because the
-   * byte array was not between one and eight bytes long.  This takes a single
-   * integer argument, which is the length of the provided array.
-   */
-  public static final int MSGID_ASN1_LONG_SET_VALUE_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 261;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a long element because the value of the
-   * provided element was not between one and eight bytes.  This takes a single
-   * integer argument, which is the length of the value of the provided element.
-   */
-  public static final int MSGID_ASN1_LONG_DECODE_ELEMENT_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 262;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode a byte array as an ASN.1 long element because the decoded value
-   * was not between one and eight bytes.  This takes a single integer argument,
-   * which is the decoded value.
-   */
-  public static final int MSGID_ASN1_LONG_DECODE_ARRAY_INVALID_LENGTH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 263;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the internal operation DN.  This takes two arguments,
-   * which are the string representation of that DN and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_INTERNAL_CANNOT_DECODE_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 264;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying which SSL protocols should be allowed
-   * for SSL and StartTLS communication.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_DESCRIPTION_SSL_ENABLED_PROTOCOLS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 265;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the set of SSL protocols to use.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_PROTOCOLS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 266;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying which SSL cipher suites should be
-   * allowed for SSL and StartTLS communication.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_DESCRIPTION_SSL_ENABLED_CIPHERS =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 267;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the set of SSL cipher suites to use.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_CIPHERS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 268;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the enabled SSL protocols configuration option.
-   * This takes two arguments, which are a string representation of the new
-   * enabled protocols and the DN of the configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_SSL_PROTOCOLS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 269;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the enabled SSL cipher suites configuration
-   * option.  This takes two arguments, which are a string representation of the
-   * new enabled cipher suites and the DN of the configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_SSL_CIPHERS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 270;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * use StartTLS on a connection that is already using some other security
-   * mechanism.  This takes a single argument, which is the name of the security
-   * mechanism that is already in use.
-   */
-  public static final int MSGID_LDAP_TLS_EXISTING_SECURITY_PROVIDER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 271;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * use StartTLS when the LDAP connection handler has StartTLS support
-   * disabled.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_TLS_STARTTLS_NOT_ALLOWED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 272;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to create a TLS security provider instance for a client
-   * connection that is to use StartTLS.  This takes a single argument, which is
-   * a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 273;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * enable the TLS connection security provider on a connection that does not
-   * have an instance of that provider.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_TLS_NO_PROVIDER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 274;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * close a TLS session while leaving the underlying TCP connection open.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_LDAP_TLS_CLOSURE_NOT_ALLOWED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 275;
-
-
-
-  /**
-   * The message ID for the message that will be used for the message logged
-   * when the LDAP connection handler starts listening for client connections.
-   * This takes a single argument, which is a string representation of the
-   * connection handler.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_STARTED_LISTENING =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 276;
-
-
-
-  /**
-   * The message ID for the message that will be used for the message logged
-   * when the LDAP connection handler stops listening for client connections.
-   * This takes a single argument, which is a string representation of the
-   * connection handler.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_STOPPED_LISTENING =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 277;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a paged results control value because the
-   * element was null. This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_PAGED_RESULTS_DECODE_NULL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 278;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a paged results control value because the
-   * element could not be decoded as a sequence.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_PAGED_RESULTS_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 279;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a paged results control value because the
-   * sequence contained an invalid number of elements.  This takes a single
-   * integer argument, which is the actual number of elements in the sequence.
-   */
-  public static final int
-       MSGID_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 280;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a paged results control value because the size
-   * could not be decoded.  This takes a single argument, which is the string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_PAGED_RESULTS_DECODE_SIZE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 281;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an ASN.1 element as a paged results control value because the size
-   * could not be decoded.  This takes a single argument, which is the string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_PAGED_RESULTS_DECODE_COOKIE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 282;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an LDAP assertion control because it did not have a value.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_LDAPASSERT_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 283;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an LDAP assertion control because an error occurred while trying to
-   * decode the control value contents as an ASN.1 element.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAPASSERT_INVALID_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 284;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an LDAP pre-read request control because it did not have a value.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_PREREADREQ_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 285;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the value of the pre-read request control.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PREREADREQ_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 286;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an LDAP post-read request control because it did not have a value.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_POSTREADREQ_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 287;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the value of the post-read request control.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_POSTREADREQ_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 288;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an LDAP pre-read response control because it did not have a value.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_PREREADRESP_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 289;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the value of the pre-read response control.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PREREADRESP_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 290;
-
-
-
-  /**
-   * The message ID for the message that will be used if it is not possible to
-   * decode an LDAP post-read response control because it did not have a value.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_POSTREADRESP_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 291;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the value of the post-read response control.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_POSTREADRESP_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 292;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proxied auth V1
-   * control does not have a value.  This does not take any arguments.
-   */
-  public static final int MSGID_PROXYAUTH1_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 293;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proxied auth V1
-   * control value has a sequence with an invalid number of elements.  This
-   * takes a single argument, which is the number of elements found.
-   */
-  public static final int MSGID_PROXYAUTH1_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 294;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proxied auth V1
-   * control value cannot be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_PROXYAUTH1_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 295;
-
-
-
-  /**
-   * The message ID for the message that will be used if the target user for the
-   * proxied auth V1 control does not exist.  This takes a single argument,
-   * which is the DN of the target user.
-   */
-  public static final int MSGID_PROXYAUTH1_NO_SUCH_USER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 296;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proxied auth V2
-   * control does not have a value.  This does not take any arguments.
-   */
-  public static final int MSGID_PROXYAUTH2_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 297;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proxied auth V2
-   * control value cannot be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_PROXYAUTH2_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 298;
-
-
-
-  /**
-   * The message ID for the message that will be used if the Directory Server
-   * is not configured with an identity mapper for use with the proxied
-   * authorization control.  This does not take any arguments.
-   */
-  public static final int MSGID_PROXYAUTH2_NO_IDENTITY_MAPPER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 299;
-
-
-
-  /**
-   * The message ID for the message that will be used if the proxied
-   * authorization V2 control contains an invalid authorization ID.  This takes
-   * a single argument, which is the invalid authorization ID.
-   */
-  public static final int MSGID_PROXYAUTH2_INVALID_AUTHZID =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 300;
-
-
-
-  /**
-   * The message ID for the message that will be used if the target user for the
-   * proxied auth V2 control does not exist.  This takes a single argument,
-   * which is the authorization ID from the proxied auth control.
-   */
-  public static final int MSGID_PROXYAUTH2_NO_SUCH_USER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 301;
-
-
-
-  /**
-   * The message ID for the message that will be used if an integer value does
-   * not correspond with a valid change type.  This takes a single argument,
-   * which is the provided integer value.
-   */
-  public static final int MSGID_PSEARCH_CHANGETYPES_INVALID_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 302;
-
-
-
-  /**
-   * The message ID for the message that will be used if the an encoded set of
-   * change types indicates that there are no change types.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_PSEARCH_CHANGETYPES_NO_TYPES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 303;
-
-
-
-  /**
-   * The message ID for the message that will be used if the an encoded set of
-   * change types is outside the range of acceptable values.  This takes a
-   * single argument, which is the encoded change types value.
-   */
-  public static final int MSGID_PSEARCH_CHANGETYPES_INVALID_TYPES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 304;
-
-
-
-  /**
-   * The message ID for the message that will be used if a persistent search
-   * control does not have a value.  This does not take any arguments.
-   */
-  public static final int MSGID_PSEARCH_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 305;
-
-
-
-  /**
-   * The message ID for the message that will be used if a persistent search
-   * control value sequence has an invalid number of elements.  This takes a
-   * single argument, which is the number of elements contained in the value.
-   */
-  public static final int MSGID_PSEARCH_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 306;
-
-
-
-  /**
-   * The message ID for the message that will be used if a persistent search
-   * control value cannot be decoded.  This takes a single argument, which is a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_PSEARCH_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 307;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry change
-   * notification control does not have a value.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_ECN_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 308;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry change
-   * notification control value sequence has an invalid number of elements.
-   * This takes a single argument, which is the number of elements contained in
-   * the value.
-   */
-  public static final int MSGID_ECN_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 309;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry change
-   * notification control has a previous DN but the change type is something
-   * other than modify DN.  This takes a single argument, which is a string
-   * representation of the change type.
-   */
-  public static final int MSGID_ECN_ILLEGAL_PREVIOUS_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 310;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry change
-   * notification control has two elements in the value sequence but the second
-   * has a type that is not appropriate for either a previous DN or a change
-   * number.  This takes a single argument, which is a string containing a hex
-   * representation of the ASN.1 element type.
-   */
-  public static final int MSGID_ECN_INVALID_ELEMENT_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 311;
-
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry change
-   * notification control value cannot be decoded.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_ECN_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 312;
-
-
-
-  /**
-   * The message ID for the message that will be used if an authorization ID
-   * response control does not have a value.  This does not take any arguments.
-   */
-  public static final int MSGID_AUTHZIDRESP_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 313;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode an intermediate response protocol op as an ASN.1
-   * sequence.  This takes a single argument, which is a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_LDAP_INTERMEDIATE_RESPONSE_DECODE_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 314;
-
-
-
-  /**
-   * The message ID for the message that will be used if the intermediate
-   * response sequence contains an invalid number of elements.  This takes a
-   * single argument, which is the number of elements in the sequence.
-   */
-  public static final int
-       MSGID_LDAP_INTERMEDIATE_RESPONSE_DECODE_INVALID_ELEMENT_COUNT =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 315;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode the OID of an intermediate response protocol op.  This
-   * takes a single argument, which is a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_OID =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 316;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode the value of an intermediate response protocol op.
-   * This takes a single argument, which is a message explaining the problem
-   * that occurred.
-   */
-  public static final int MSGID_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 317;
-
-
-
-  /**
-   * The message ID for the message that will be used if an intermediate
-   * response sequence element contains an invalid BER type.  This takes a
-   * single argument, which is a hex string representation of the element type.
-   */
-  public static final int
-       MSGID_LDAP_INTERMEDIATE_RESPONSE_INVALID_ELEMENT_TYPE =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 318;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the accept backlog.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_BACKLOG =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 319;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the backlog.  This takes two arguments,
-   * which are the DN of the configuration entry and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_BACKLOG =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 320;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP filter contains
-   * a filter type that is not valid for use in a matched values filter.  This
-   * takes two arguments, which are a string representation of the provided LDAP
-   * filter and a string representation of the filter type.
-   */
-  public static final int MSGID_MVFILTER_INVALID_LDAP_FILTER_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 321;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP filter is an
-   * extensible match filter with the DN attributes flag set.  This takes a
-   * single argument, which is a string representation of the provided LDAP
-   * filter.
-   */
-  public static final int MSGID_MVFILTER_INVALID_DN_ATTRIBUTES_FLAG =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 322;
-
-
-
-  /**
-   * The message ID for the message that will be used if an AVA sequence does
-   * not contain exactly two elements.  This takes a single argument, which is
-   * the number of elements that it did contain.
-   */
-  public static final int MSGID_MVFILTER_INVALID_AVA_SEQUENCE_SIZE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 323;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode an attribute value assertion.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_MVFILTER_CANNOT_DECODE_AVA =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 324;
-
-
-
-  /**
-   * The message ID for the message that will be used if a substring sequence
-   * does not contain exactly two elements.  This takes a single argument, which
-   * is the number of elements that it did contain.
-   */
-  public static final int MSGID_MVFILTER_INVALID_SUBSTRING_SEQUENCE_SIZE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 325;
-
-
-
-  /**
-   * The message ID for the message that will be used if a substring filter does
-   * not contain any elements.  This does not take any arguments.
-   */
-  public static final int MSGID_MVFILTER_NO_SUBSTRING_ELEMENTS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 326;
-
-
-
-  /**
-   * The message ID for the message that will be used if a substring filter has
-   * multiple subInitial components.  This does not take any arguments.
-   */
-  public static final int MSGID_MVFILTER_MULTIPLE_SUBINITIALS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 327;
-
-
-
-  /**
-   * The message ID for the message that will be used if a substring filter has
-   * multiple subFinal components.  This does not take any arguments.
-   */
-  public static final int MSGID_MVFILTER_MULTIPLE_SUBFINALS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 328;
-
-
-
-  /**
-   * The message ID for the message that will be used if a substring filter has
-   * an element with an invalid BER type.  This takes a single argument, which
-   * is a hex string representation of the invalid type.
-   */
-  public static final int MSGID_MVFILTER_INVALID_SUBSTRING_ELEMENT_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 329;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode a substring filter.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_MVFILTER_CANNOT_DECODE_SUBSTRINGS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 330;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode a presence filter.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_MVFILTER_CANNOT_DECODE_PRESENT_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 331;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extensible match
-   * sequence contains an invalid number of elements.  This takes a single
-   * argument, which is the number of elements contained in the sequence.
-   */
-  public static final int MSGID_MVFILTER_INVALID_EXTENSIBLE_SEQUENCE_SIZE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 332;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extensible match
-   * sequence contains multiple matching rule IDs.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_MVFILTER_MULTIPLE_MATCHING_RULE_IDS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 333;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extensible match
-   * sequence contains multiple attribute type elements.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_MVFILTER_MULTIPLE_ATTRIBUTE_TYPES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 334;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extensible match
-   * sequence contains multiple assertion value elements.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_MVFILTER_MULTIPLE_ASSERTION_VALUES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 335;
-
-
-
-  /**
-   * The message ID for the message that will be used if an extensible match
-   * sequence contains an element with an invalid type.  This takes a single
-   * argument, which is a hex string representation of the invalid type.
-   */
-  public static final int MSGID_MVFILTER_INVALID_EXTENSIBLE_ELEMENT_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 336;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode an extensible match filter.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_MVFILTER_CANNOT_DECODE_EXTENSIBLE_MATCH =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 337;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode an extensible match filter.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_MVFILTER_INVALID_ELEMENT_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 338;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matched values
-   * control did not have a value.  This does not take any arguments.
-   */
-  public static final int MSGID_MATCHEDVALUES_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 339;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * decoding a matched values control value as a sequence.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_MATCHEDVALUES_CANNOT_DECODE_VALUE_AS_SEQUENCE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 340;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matched values
-   * control did not contain any filters.  This does not take any arguments.
-   */
-  public static final int MSGID_MATCHEDVALUES_NO_FILTERS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 341;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password expired
-   * control has an invalid value.  This does not take any arguments.
-   */
-  public static final int MSGID_PWEXPIRED_CONTROL_INVALID_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 342;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password expiring
-   * control does not have a value.  This does not take any arguments.
-   */
-  public static final int MSGID_PWEXPIRING_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 343;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * attempting to decode the number of seconds until expiration.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 344;
-
-
-
-
-  /**
-   * The message ID for the message that will be used if the client attempts to
-   * request an operation with the same message ID as another outstanding
-   * operation.  This takes a single argument, which is the conflicting message
-   * ID.
-   */
-  public static final int MSGID_LDAP_CLIENT_DUPLICATE_MESSAGE_ID =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_WARNING | 345;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to enqueue a request from the client.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAP_CLIENT_CANNOT_ENQUEUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_WARNING | 346;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the port on which to accept
-   * administrative connections.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_DESCRIPTION_LISTEN_PORT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 347;
-
-  /**
-   * The message ID for the message that will be used if no listen port is
-   * specified.  This takes a single argument, which is the DN of the
-   * configuration entry.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_NO_LISTEN_PORT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 348;
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the listen port.  This takes two
-   * arguments, which are the DN of the configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_LISTEN_PORT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 349;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute indicating whether to use SSL when accepting
-   * connections.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_DESCRIPTION_USE_SSL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 350;
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine whether to use SSL when accepting
-   * connections.  This takes two arguments, which are the DN of the
-   * configuration entry and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_USE_SSL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 351;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the nickname of the certificate to use
-   * for SSL and StartTLS communication.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 352;
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the nickname of the SSL certificate to
-   * use.  This takes two arguments, which are the DN of the configuration entry
-   * and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_SSL_CERT_NICKNAME =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 353;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password policy
-   * request control has a value.  This does not take any arguments.
-   */
-  public static final int MSGID_PWPOLICYREQ_CONTROL_HAS_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 354;
-
-
-
-  /**
-   * The message ID for the message that will be used if a password policy
-   * response control does not have a value.  This does not take any arguments.
-   */
-  public static final int MSGID_PWPOLICYRES_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 355;
-
-
-
-  /**
-   * The message ID for the message that will be used if the warning element has
-   * an invalid type.  This takes a single argument, which is a hex string
-   * representation of the warning element type.
-   */
-  public static final int MSGID_PWPOLICYRES_INVALID_WARNING_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 356;
-
-
-
-  /**
-   * The message ID for the message that will be used if the error element has
-   * an invalid type.  This takes a single argument, which is the invalid
-   * error element value as an integer.
-   */
-  public static final int MSGID_PWPOLICYRES_INVALID_ERROR_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 357;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password policy
-   * response control sequence has an element with an invalid type.  This takes
-   * a single argument, which is a hex string representation of the element
-   * type.
-   */
-  public static final int MSGID_PWPOLICYRES_INVALID_ELEMENT_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 358;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the control value.  This takes a single argument, which is
-   * a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PWPOLICYRES_DECODE_ERROR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 359;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * passwordExpired error.
-   */
-  public static final int MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_EXPIRED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 360;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * accountLocked error.
-   */
-  public static final int MSGID_PWPERRTYPE_DESCRIPTION_ACCOUNT_LOCKED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 361;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * changeAfterReset error.
-   */
-  public static final int MSGID_PWPERRTYPE_DESCRIPTION_CHANGE_AFTER_RESET =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 362;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * passwordModNotAllowed error.
-   */
-  public static final int
-       MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_MOD_NOT_ALLOWED =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 363;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * mustSupplyOldPassword error.
-   */
-  public static final int
-       MSGID_PWPERRTYPE_DESCRIPTION_MUST_SUPPLY_OLD_PASSWORD =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 364;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * passwordExpired error.
-   */
-  public static final int
-       MSGID_PWPERRTYPE_DESCRIPTION_INSUFFICIENT_PASSWORD_QUALITY =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 365;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * passwordTooShort error.
-   */
-  public static final int MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_SHORT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 366;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * passwordTooYoung error.
-   */
-  public static final int MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_YOUNG =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 367;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * passwordInHistory error.
-   */
-  public static final int MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_IN_HISTORY =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 368;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * timeBeforeExpiration warning.
-   */
-  public static final int MSGID_PWPWARNTYPE_DESCRIPTION_TIME_BEFORE_EXPIRATION =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 369;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * graceAuthNsRemaining warning.
-   */
-  public static final int MSGID_PWPWARNTYPE_DESCRIPTION_GRACE_LOGINS_REMAINING =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 370;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server is unable to
-   * obtain a lock on the proxied authorization V1 control user.  This takes a
-   * single argument, which is the DN of the target user.
-   */
-  public static final int MSGID_PROXYAUTH1_CANNOT_LOCK_USER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 371;
-
-
-
-  /**
-   * The message ID for the message that will be used if the proxied auth V1
-   * control cannot be used because the attempt was rejected by password policy
-   * processing.  This takes a single argument, which is the DN of the target
-   * user.
-   */
-  public static final int MSGID_PROXYAUTH1_UNUSABLE_ACCOUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 372;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server is unable to
-   * obtain a lock on the proxied authorization V2 control user.  This takes a
-   * single argument, which is the DN of the target user.
-   */
-  public static final int MSGID_PROXYAUTH2_CANNOT_LOCK_USER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 373;
-
-
-
-  /**
-   * The message ID for the message that will be used if the proxied auth V2
-   * control cannot be used because the attempt was rejected by password policy
-   * processing.  This takes a single argument, which is the DN of the target
-   * user.
-   */
-  public static final int MSGID_PROXYAUTH2_UNUSABLE_ACCOUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 374;
-
-
-
-  /**
-   * The message ID for the message that will be used if an account availability
-   * request control has a value.  This does not take any arguments.
-   */
-  public static final int MSGID_ACCTUSABLEREQ_CONTROL_HAS_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 375;
-
-
-
-  /**
-   * The message ID for the message that will be used if an account availability
-   * response control does not have a value.  This does not take any arguments.
-   */
-  public static final int MSGID_ACCTUSABLERES_NO_CONTROL_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 376;
-
-
-
-  /**
-   * The message ID for the message that will be used if an account availability
-   * response control has a MORE_INFO element with an unknown type.  This takes
-   * a single argument, which is a hex string representation of the unknown
-   * type.
-   */
-  public static final int MSGID_ACCTUSABLERES_UNKNOWN_UNAVAILABLE_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 377;
-
-
-
-  /**
-   * The message ID for the message that will be used if an account availability
-   * response control has a value element with an unknown type.  This takes a
-   * single argument, which is a hex string representation of the unknown type.
-   */
-  public static final int MSGID_ACCTUSABLERES_UNKNOWN_VALUE_ELEMENT_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 378;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode the value of an account usability response control.
-   * This takes a single argument, which is a message explaining the problem
-   * that occurred.
-   */
-  public static final int MSGID_ACCTUSABLERES_DECODE_ERROR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 379;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode an invalid AddressMask rule prefix.
-   */
-  public static final int MSGID_ADDRESSMASK_PREFIX_DECODE_ERROR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 380;
-
-    /**
-   * The message ID for the message that will be used if an error occurs
-   * because a address mask prefix was specified with an wild card
-   * character "*".
-   */
-  public static final int MSGID_ADDRESSMASK_WILDCARD_DECODE_ERROR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 381;
-
-  /**
-   * The message ID for the message that will be used if an error occurs
-   * because a address mask format was invalid.
-   *
-   */
-  public static final int MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 382;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * send a clear-text response over a client connection that doesn't have a
-   * handle to the clear-text security provider.  This takes a single argument,
-   * which is a string representation of the client connection.
-   */
-  public static final int MSGID_LDAP_NO_CLEAR_SECURITY_PROVIDER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 383;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP attribute
-   * contains duplicate values.  This takes a single argument, which is the name
-   * of the attribute.
-   */
-  public static final int MSGID_LDAP_ATTRIBUTE_DUPLICATE_VALUES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 384;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP search filter
-   * references an unsupported matching rule.  It takes a single argument, which
-   * is the unrecognized matching rule OID.
-   */
-  public static final int MSGID_LDAP_FILTER_UNKNOWN_MATCHING_RULE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 385;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP search filter
-   * has an assertion value without either an attribute type or a matching rule
-   * OID.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAP_FILTER_VALUE_WITH_NO_ATTR_OR_MR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 386;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server detects that
-   * the underlying JVM suffers from the issue described in CR 6322825.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_LDAP_REQHANDLER_DETECTED_JVM_ISSUE_CR6322825 =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_FATAL_ERROR | 387;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proxied auth V1
-   * control is not marked critical.  This does not take any arguments.
-   */
-  public static final int MSGID_PROXYAUTH1_CONTROL_NOT_CRITICAL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 388;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proxied auth V2
-   * control is not marked critical.  This does not take any arguments.
-   */
-  public static final int MSGID_PROXYAUTH2_CONTROL_NOT_CRITICAL =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 389;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * key manager provider DN configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_KEYMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 390;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified key
-   * manager provider does not exist or is not enabled.  This takes two
-   * arguments, which are the DN of the configuration entry and the key manager
-   * provider DN.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_INVALID_KEYMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 391;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the key manager provider DN to use.  This
-   * takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_KEYMANAGER_DN =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 392;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * trust manager provider DN configuration attribute.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_DESCRIPTION_TRUSTMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 393;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified trust
-   * manager provider does not exist or is not enabled.  This takes two
-   * arguments, which are the DN of the configuration entry and the trust
-   * manager provider DN.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_INVALID_TRUSTMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 394;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the trust manager provider DN to use.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_TRUSTMANAGER_DN =
-            CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 395;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the key manager provider DN configuration
-   * option.  This takes two arguments, which are a string representation of the
-   * new key manager provider DN and the DN of the configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_KEYMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 396;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a new
-   * value has been applied for the trust manager provider DN configuration
-   * option.  This takes two arguments, which are a string representation of the
-   * new trust manager provider DN and the DN of the configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NEW_TRUSTMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 397;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying the DN of the key manager provider for
-   * the JMX connection handler.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_DESCRIPTION_KEYMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 398;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided key
-   * manager DN does not refer to a valid, enabled key manager.  This takes two
-   * arguments, which are the DN of the configuration entry and the provided key
-   * manager provider DN.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_INVALID_KEYMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 399;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected error
-   * occurs while trying to determine the DN of the key manager provider to use.
-   * This takes two arguments, which are the DN of the configuration entry and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_KEYMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 400;
-
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to configure the connection security provider for a new
-   * connection.  This takes a single argument, which is a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CANNOT_SET_SECURITY_PROVIDER =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 401;
-
-
-
-  /**
-   * The message ID for the message that will be used if either SSL or StartTLS
-   * support is enabled but no key manager provider is configured for the
-   * connection handler.  This takes a single argument, which is the DN of the
-   * connection handler configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NO_KEYMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 402;
-
-
-
-  /**
-   * The message ID for the message that will be used if either SSL or StartTLS
-   * support is enabled but no trust manager provider is configured for the
-   * connection handler.  This takes a single argument, which is the DN of the
-   * connection handler configuration entry.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_NO_TRUSTMANAGER_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 403;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying whether to enable the LDAPS
-   * connection handler.
-   */
-  public static final int MSGID_LDAPS_CONNHANDLER_DESCRIPTION_ENABLE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 404;
-
-
-
-  /**
-   * The message ID for the message that will be used if a NOT filter does not
-   * contain exactly one filter component.  This takes three arguments, which
-   * are the filter string and the start and end position of the NOT filter.
-   */
-  public static final int MSGID_LDAP_FILTER_NOT_EXACTLY_ONE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 405;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server-side sort
-   * request control does not have a value.  It does not take any arguments.
-   */
-  public static final int MSGID_SORTREQ_CONTROL_NO_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 406;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server-side sort
-   * request control references an undefined attribute type.  This takes a
-   * single argument, which is the name of the attribute type.
-   */
-  public static final int MSGID_SORTREQ_CONTROL_UNDEFINED_ATTR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 407;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server-side sort
-   * request control references an undefined matching rule.  This takes a
-   * single argument, which is the name of the matching rule.
-   */
-  public static final int MSGID_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 408;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server-side sort
-   * request control value sequence has an element with an invalid type.  This
-   * takes a single argument, which is the hex representation of the unsupported
-   * type value.
-   */
-  public static final int MSGID_SORTREQ_CONTROL_INVALID_SEQ_ELEMENT_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 409;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * decoding the server-side sort request control value.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_SORTREQ_CONTROL_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 410;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server-side sort
-   * response control does not have a value.  It does not take any arguments.
-   */
-  public static final int MSGID_SORTRES_CONTROL_NO_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 411;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * decoding the server-side sort response control value.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_SORTRES_CONTROL_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 412;
-
-
-
-  /**
-   * The message ID for the message that will be used if a sort order string
-   * has a zero-length attribute name.  This takes a single argument, which is
-   * the sort order string.
-   */
-  public static final int MSGID_SORTREQ_CONTROL_NO_ATTR_NAME =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 413;
-
-
-
-  /**
-   * The message ID for the message that will be used if a sort order string
-   * has a zero-length matching rule name.  This takes a single argument, which
-   * is the sort order string.
-   */
-  public static final int MSGID_SORTREQ_CONTROL_NO_MATCHING_RULE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 414;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server-side sort
-   * control does not have any sort keys.  This does not take any arguments.
-   */
-  public static final int MSGID_SORTREQ_CONTROL_NO_SORT_KEYS =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 415;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server-side sort
-   * control includes an attribute for which no ordering rule is available.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_SORTREQ_CONTROL_NO_ORDERING_RULE_FOR_ATTR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 416;
-
-
-
-  /**
-   * The message ID for the message that will be used if the VLV request control
-   * does not have a value.  It does not take any arguments.
-   */
-  public static final int MSGID_VLVREQ_CONTROL_NO_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 417;
-
-
-
-  /**
-   * The message ID for the message that will be used if the VLV request control
-   * has an invalid number of elements.  This takes a single argument, which is
-   * the number of elements contained in the control sequence.
-   */
-  public static final int MSGID_VLVREQ_CONTROL_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 418;
-
-
-
-  /**
-   * The message ID for the message that will be used if the VLV request control
-   * has an invalid BER target type.  It takes a single argument, which is the
-   * hex representation of the BER target type.
-   */
-  public static final int MSGID_VLVREQ_CONTROL_INVALID_TARGET_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 419;
-
-
-
-  /**
-   * The message ID for the message that will be used if the VLV request control
-   * value cannot be decoded.  It takes a single argument, which is a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_VLVREQ_CONTROL_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 420;
-
-
-
-  /**
-   * The message ID for the message that will be used if the VLV response
-   * control does not have a value.  It does not take any arguments.
-   */
-  public static final int MSGID_VLVRES_CONTROL_NO_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 421;
-
-
-
-  /**
-   * The message ID for the message that will be used if the VLV response
-   * control has an invalid number of elements.  This takes a single argument,
-   * which is the number of elements contained in the control sequence.
-   */
-  public static final int MSGID_VLVRES_CONTROL_INVALID_ELEMENT_COUNT =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 422;
-
-
-
-  /**
-   * The message ID for the message that will be used if the VLV response
-   * control value cannot be decoded.  It takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_VLVRES_CONTROL_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 423;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs parsing
-   * the geteffectiverights authzid because it does not start with the required
-   * string "dn:". This takes one argument, which is the authzid string.
-   */
- public static final int MSGID_GETEFFECTIVERIGHTS_INVALID_AUTHZID =
-      CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 424;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode the value of an geteffectiverights request control.
-   * This takes a single argument, which is a message explaining the problem
-   * that occurred.
-   */
-  public static final int MSGID_GETEFFECTIVERIGHTS_DECODE_ERROR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 425;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the geteffectiverights authzid DN string.  This takes two
-   * arguments, which are the authzid string and a message explaining the
-   * problem that was encountered.
-   */
-  public static final int MSGID_CANNOT_DECODE_GETEFFECTIVERIGHTS_AUTHZID_DN =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 426;
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP search filter
-   * is enclosed in apostrophes ("single-quotes").  See issue #1024.
-   */
-  public static final int MSGID_LDAP_FILTER_ENCLOSED_IN_APOSTROPHES =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 427;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute specifying whether to enable the LDAPS
-   * connection handler.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_DESCRIPTION_ENABLE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_INFORMATIONAL | 428;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP search filter
-   * includes an invalid character in an attribute type.  This takes three
-   * arguments, which are the attribute type, the illegal character, and the
-   * position at which it occurred.
-   */
-  public static final int MSGID_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 429;
-
-
-
-  /**
-   * The message ID for the message that will be used if a search filter string
-   * includes an extensible match component without either an attribute
-   * description or a matching rule ID.  This takes a single argument, which is
-   * the filter string.
-   */
-  public static final int MSGID_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 430;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an LDAPv2
-   * client tried to send a request that included request controls.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_LDAPV2_CONTROLS_NOT_ALLOWED =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 431;
-
-
-
-  /**
-   * The message ID for the message that will be used if the LDAP connection
-   * handler cannot bind to a configured address:port.  This takes four
-   * arguments, which are the configuration entry DN, IP address, port  number,
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAP_CONNHANDLER_CANNOT_BIND =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 432;
-
-
-
-  /**
-   * The message ID for the message that will be used if the JMX connection
-   * handler cannot bind to a configured port.  This takes three arguments,
-   * which are the configuration entry DN, port  number, and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_JMX_CONNHANDLER_CANNOT_BIND =
-       CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_SEVERE_ERROR | 433;
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform an add operation through JMX but the user doesn't
-   * have the necessary privileges to do so.  This does not take any arguments.
-   */
-  public static final int MSGID_JMX_ADD_INSUFFICIENT_PRIVILEGES =
-    CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 434;
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a delete operation through JMX but the user doesn't
-   * have the necessary privileges to do so.  This does not take any arguments.
-   */
-  public static final int MSGID_JMX_DELETE_INSUFFICIENT_PRIVILEGES =
-    CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 435;
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a modify operation through JMX but the user doesn't
-   * have the necessary privileges to do so.  This does not take any arguments.
-   */
-  public static final int MSGID_JMX_MODIFY_INSUFFICIENT_PRIVILEGES =
-    CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 436;
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a modify DN operation through JMX but the user
-   * doesn't have the necessary privileges to do so.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_JMX_MODDN_INSUFFICIENT_PRIVILEGES =
-    CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 437;
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a search operation in the server configuration but the user doesn't
-   * have the necessary privileges to do so.  This does not take any arguments.
-   */
-  public static final int MSGID_JMX_SEARCH_INSUFFICIENT_PRIVILEGES =
-    CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 438;
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a search operation in the server configuration but the user doesn't
-   * have the necessary privileges to do so.  This does not take any arguments.
-   */
-  public static final int MSGID_JMX_INSUFFICIENT_PRIVILEGES =
-    CATEGORY_MASK_PROTOCOL | SEVERITY_MASK_MILD_ERROR | 439;
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_ASN1_NULL_ELEMENT,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "element because the array was null");
-    registerMessage(MSGID_ASN1_SHORT_ELEMENT,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "element because the length of the array (%d bytes) is " +
-                    "less than the minimum required for an ASN.1 element (2 " +
-                    "bytes)");
-    registerMessage(MSGID_ASN1_INVALID_NUM_LENGTH_BYTES,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "element because it contained a multi-byte length with " +
-                    "an invalid number of bytes (%d)");
-    registerMessage(MSGID_ASN1_TRUNCATED_LENGTH,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "element because it contained a multi-byte length of %d " +
-                    "bytes but the array was too short to contain the " +
-                    "entire length");
-    registerMessage(MSGID_ASN1_LENGTH_MISMATCH,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "element because the decoded value length (%d bytes) " +
-                    "does not equal the number of bytes remaining in the " +
-                    "provided array (%d)");
-    registerMessage(MSGID_ASN1_ELEMENT_SET_NULL,
-                    "Cannot decode the provided byte array as a set of ASN.1 " +
-                    "elements because the array was null");
-    registerMessage(MSGID_ASN1_ELEMENT_SET_NO_LENGTH,
-                    "Cannot decode the provided byte array as a set of ASN.1 " +
-                    "elements because the end of the array was reached after " +
-                    "having read the BER type but none of the value for an " +
-                    "element");
-    registerMessage(MSGID_ASN1_ELEMENT_SET_INVALID_NUM_LENGTH_BYTES,
-                    "Cannot decode the provided byte array as a set of ASN.1 " +
-                    "elements because it contained a multi-byte length with " +
-                    "an invalid number of bytes (%d)");
-    registerMessage(MSGID_ASN1_ELEMENT_SET_TRUNCATED_LENGTH,
-                    "Cannot decode the provided byte array as a set of ASN.1 " +
-                    "elements because it contained a multi-byte length of %d " +
-                    "bytes but the array was too short to contain the " +
-                    "entire length");
-    registerMessage(MSGID_ASN1_ELEMENT_SET_TRUNCATED_VALUE,
-                    "Cannot decode the provided byte array as a set of ASN.1 " +
-                    "elements because the decoded length of an element (%d) " +
-                    "is more than the number of bytes remaining (%d)");
-
-
-    registerMessage(MSGID_ASN1_BOOLEAN_SET_VALUE_NULL,
-                    "Cannot decode the provided byte array as the value of " +
-                    "an ASN.1 Boolean element because the array was null");
-    registerMessage(MSGID_ASN1_BOOLEAN_SET_VALUE_INVALID_LENGTH,
-                    "Cannot decode the provided byte array as the value of " +
-                    "an ASN.1 Boolean element because the array did not have " +
-                    "a length of exactly one byte (provided length was %d)");
-    registerMessage(MSGID_ASN1_BOOLEAN_DECODE_ELEMENT_NULL,
-                    "Cannot decode the provided ASN.1 element as a Boolean " +
-                    "element because the provided element was null");
-    registerMessage(MSGID_ASN1_BOOLEAN_DECODE_ELEMENT_INVALID_LENGTH,
-                    "Cannot decode the provided ASN.1 element as a Boolean " +
-                    "element because the length of the element value was not " +
-                    "exactly one byte (actual length was %d)");
-    registerMessage(MSGID_ASN1_BOOLEAN_DECODE_ARRAY_NULL,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "Boolean element because the array was null");
-    registerMessage(MSGID_ASN1_BOOLEAN_SHORT_ELEMENT,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "Boolean element because the length of the array (%d " +
-                    "bytes) is less than the minimum required for a Boolean " +
-                    "element (3 bytes)");
-    registerMessage(MSGID_ASN1_BOOLEAN_DECODE_ARRAY_INVALID_LENGTH,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "Boolean element because the decoded value length was " +
-                    "not exactly one byte (decoded length was %d)");
-
-
-    registerMessage(MSGID_ASN1_NULL_SET_VALUE_INVALID_LENGTH,
-                    "Cannot decode the provided byte array as the value of " +
-                    "an ASN.1 null element because the array did not have " +
-                    "a length of exactly zero byte (provided length was %d)");
-    registerMessage(MSGID_ASN1_NULL_DECODE_ELEMENT_NULL,
-                    "Cannot decode the provided ASN.1 element as a null " +
-                    "element because the provided element was null");
-    registerMessage(MSGID_ASN1_NULL_DECODE_ELEMENT_INVALID_LENGTH,
-                    "Cannot decode the provided ASN.1 element as a null " +
-                    "element because the length of the element value was not " +
-                    "exactly zero bytes (actual length was %d)");
-    registerMessage(MSGID_ASN1_NULL_DECODE_ARRAY_NULL,
-                    "Cannot decode the provided byte array as an ASN.1 null " +
-                    "element because the array was null");
-    registerMessage(MSGID_ASN1_NULL_DECODE_ARRAY_INVALID_LENGTH,
-                    "Cannot decode the provided byte array as an ASN.1 null " +
-                    "element because the decoded value length was not " +
-                    "exactly zero bytes (decoded length was %d)");
-
-
-    registerMessage(MSGID_ASN1_OCTET_STRING_DECODE_ELEMENT_NULL,
-                    "Cannot decode the provided ASN.1 element as an octet " +
-                    "string element because the provided element was null");
-    registerMessage(MSGID_ASN1_OCTET_STRING_DECODE_ARRAY_NULL,
-                    "Cannot decode the provided byte array as an ASN.1 octet " +
-                    "string element because the array was null");
-
-
-    registerMessage(MSGID_ASN1_INTEGER_SET_VALUE_NULL,
-                    "Cannot decode the provided byte array as the value of " +
-                    "an ASN.1 integer element because the array was null");
-    registerMessage(MSGID_ASN1_INTEGER_SET_VALUE_INVALID_LENGTH,
-                    "Cannot decode the provided byte array as the value of " +
-                    "an ASN.1 integer element because the array did not have " +
-                    "a length between 1 and 4 bytes (provided length was %d)");
-    registerMessage(MSGID_ASN1_INTEGER_DECODE_ELEMENT_NULL,
-                    "Cannot decode the provided ASN.1 element as an integer " +
-                    "element because the provided element was null");
-    registerMessage(MSGID_ASN1_INTEGER_DECODE_ELEMENT_INVALID_LENGTH,
-                    "Cannot decode the provided ASN.1 element as an integer " +
-                    "element because the length of the element value was not " +
-                    "between one and four bytes (actual length was %d)");
-    registerMessage(MSGID_ASN1_INTEGER_DECODE_ARRAY_NULL,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "integer element because the array was null");
-    registerMessage(MSGID_ASN1_INTEGER_SHORT_ELEMENT,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "integer element because the length of the array (%d " +
-                    "bytes) is less than the minimum required for an integer " +
-                    "element (3 bytes)");
-    registerMessage(MSGID_ASN1_INTEGER_DECODE_ARRAY_INVALID_LENGTH,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "integer element because the decoded value length was " +
-                    "not between 1 and 4 bytes (decoded length was %d)");
-
-
-    registerMessage(MSGID_ASN1_LONG_SET_VALUE_INVALID_LENGTH,
-                    "Cannot decode the provided byte array as the value of " +
-                    "an ASN.1 long element because the array did not have " +
-                    "a length between 1 and 8 bytes (provided length was %d)");
-    registerMessage(MSGID_ASN1_LONG_DECODE_ELEMENT_INVALID_LENGTH,
-                    "Cannot decode the provided ASN.1 element as a long " +
-                    "element because the length of the element value was not " +
-                    "between one and eight bytes (actual length was %d)");
-    registerMessage(MSGID_ASN1_LONG_DECODE_ARRAY_INVALID_LENGTH,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "long element because the decoded value length was " +
-                    "not between 1 and 8 bytes (decoded length was %d)");
-
-
-    registerMessage(MSGID_ASN1_ENUMERATED_SET_VALUE_NULL,
-                    "Cannot decode the provided byte array as the value of " +
-                    "an ASN.1 enumerated element because the array was null");
-    registerMessage(MSGID_ASN1_ENUMERATED_SET_VALUE_INVALID_LENGTH,
-                    "Cannot decode the provided byte array as the value of " +
-                    "an ASN.1 enumerated element because the array did not " +
-                    "have a length between 1 and 4 bytes (provided length " +
-                    "was %d)");
-    registerMessage(MSGID_ASN1_ENUMERATED_DECODE_ELEMENT_NULL,
-                    "Cannot decode the provided ASN.1 element as an " +
-                    "enumerated element because the provided element was " +
-                    "null");
-    registerMessage(MSGID_ASN1_ENUMERATED_DECODE_ELEMENT_INVALID_LENGTH,
-                    "Cannot decode the provided ASN.1 element as an " +
-                    "enumerated element because the length of the element " +
-                    "value was not between one and four bytes (actual length " +
-                    "was %d)");
-    registerMessage(MSGID_ASN1_ENUMERATED_DECODE_ARRAY_NULL,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "enumerated element because the array was null");
-    registerMessage(MSGID_ASN1_ENUMERATED_SHORT_ELEMENT,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "enumerated element because the length of the array (%d " +
-                    "bytes) is less than the minimum required for an " +
-                    "enumerated element (3 bytes)");
-    registerMessage(MSGID_ASN1_ENUMERATED_DECODE_ARRAY_INVALID_LENGTH,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "enumerated element because the decoded value length was " +
-                    "not between 1 and 4 bytes (decoded length was %d)");
-
-
-    registerMessage(MSGID_ASN1_SEQUENCE_SET_VALUE_NULL,
-                    "Cannot decode the provided byte array as the value of " +
-                    "an ASN.1 sequence element because the array was null");
-    registerMessage(MSGID_ASN1_SEQUENCE_DECODE_ELEMENT_NULL,
-                    "Cannot decode the provided ASN.1 element as a sequence " +
-                    "element because the provided element was null");
-    registerMessage(MSGID_ASN1_SEQUENCE_DECODE_ARRAY_NULL,
-                    "Cannot decode the provided byte array as an ASN.1 " +
-                    "sequence element because the array was null");
-
-
-    registerMessage(MSGID_ASN1_SET_SET_VALUE_NULL,
-                    "Cannot decode the provided byte array as the value of " +
-                    "an ASN.1 set element because the array was null");
-    registerMessage(MSGID_ASN1_SET_DECODE_ELEMENT_NULL,
-                    "Cannot decode the provided ASN.1 element as a set " +
-                    "element because the provided element was null");
-    registerMessage(MSGID_ASN1_SET_DECODE_ARRAY_NULL,
-                    "Cannot decode the provided byte array as an ASN.1 set " +
-                    "element because the array was null");
-
-
-    registerMessage(MSGID_ASN1_READER_MAX_SIZE_EXCEEDED,
-                    "Cannot decode the data read as an ASN.1 element " +
-                    "because the decoded element length of %d bytes was " +
-                    "larger than the maximum allowed element length of %d " +
-                    "bytes.  The underlying input stream has been closed " +
-                    "and this reader may no longer be used");
-
-
-    registerMessage(MSGID_LDAP_MESSAGE_DECODE_NULL,
-                    "Cannot decode the provided ASN.1 sequence as an LDAP " +
-                    "message because the sequence was null");
-    registerMessage(MSGID_LDAP_MESSAGE_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 sequence as an LDAP " +
-                    "message because the sequence contained an invalid " +
-                    "number of elements (expected 2 or 3, got %d)");
-    registerMessage(MSGID_LDAP_MESSAGE_DECODE_MESSAGE_ID,
-                    "Cannot decode the provided ASN.1 sequence as an LDAP " +
-                    "message because the first element of the sequence " +
-                    "could not be decoded as an integer message ID:  %s");
-    registerMessage(MSGID_LDAP_MESSAGE_DECODE_PROTOCOL_OP,
-                    "Cannot decode the provided ASN.1 sequence as an LDAP " +
-                    "message because the second element of the sequence " +
-                    "could not be decoded as the protocol op:  %s");
-    registerMessage(MSGID_LDAP_MESSAGE_DECODE_CONTROLS,
-                    "Cannot decode the provided ASN.1 sequence as an LDAP " +
-                    "message because the third element of the sequence " +
-                    "could not be decoded as the set of controls:  %s");
-
-
-    registerMessage(MSGID_LDAP_CONTROL_DECODE_NULL,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "control because the element was null");
-    registerMessage(MSGID_LDAP_CONTROL_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "control because the element could not be decoded as a " +
-                    "sequence:  %s");
-    registerMessage(MSGID_LDAP_CONTROL_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "control because the control sequence contained an " +
-                    "invalid number of elements (expected 1 to 3, got %d)");
-    registerMessage(MSGID_LDAP_CONTROL_DECODE_OID,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "control because the OID could not be decoded as a " +
-                    "string:  %s");
-    registerMessage(MSGID_LDAP_CONTROL_DECODE_CRITICALITY,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "control because the criticality could not be decoded as " +
-                    "Boolean value:  %s");
-    registerMessage(MSGID_LDAP_CONTROL_DECODE_VALUE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "control because the value could not be decoded as an " +
-                    "octet string:  %s");
-    registerMessage(MSGID_LDAP_CONTROL_DECODE_INVALID_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "control because the BER type for the second element " +
-                    "in the sequence was invalid (expected 01 or 04, got %x)");
-    registerMessage(MSGID_LDAP_CONTROL_DECODE_CONTROLS_NULL,
-                    "Cannot decode the provided ASN.1 element as a set of " +
-                    "LDAP controls because the element was null");
-    registerMessage(MSGID_LDAP_CONTROL_DECODE_CONTROLS_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as a set of " +
-                    "LDAP controls because the element could not be decoded " +
-                    "as a sequence:  %s");
-
-
-    registerMessage(MSGID_LDAP_ABANDON_REQUEST_DECODE_ID,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "abandon request protocol op because a problem occurred " +
-                    "while trying to obtain the message ID of the operation " +
-                    "to abandon:  %s");
-    registerMessage(MSGID_LDAP_ABANDON_INVALID_MESSAGE_TYPE,
-                    "Cannot convert the provided LDAP message (%s) to an " +
-                    "abandon operation:  %s");
-
-
-    registerMessage(MSGID_LDAP_RESULT_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "result protocol op because a problem occurred while " +
-                    "trying to parse the result sequence:  %s");
-    registerMessage(MSGID_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "result protocol op because the result sequence did not " +
-                    "contain a valid number of elements (expected 3 or 4, " +
-                    "got %d)");
-    registerMessage(MSGID_LDAP_RESULT_DECODE_RESULT_CODE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "result protocol op because the first element in the " +
-                    "result sequence could not be decoded as an integer " +
-                    "result code:  %s");
-    registerMessage(MSGID_LDAP_RESULT_DECODE_MATCHED_DN,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "result protocol op because the second element in the " +
-                    "result sequence could not be decoded as the matched " +
-                    "DN:  %s");
-    registerMessage(MSGID_LDAP_RESULT_DECODE_ERROR_MESSAGE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "result protocol op because the third element in the " +
-                    "result sequence could not be decoded as the error " +
-                    "message:  %s");
-    registerMessage(MSGID_LDAP_RESULT_DECODE_REFERRALS,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "result protocol op because the fourth element in the " +
-                    "result sequence could not be decoded as a set of " +
-                    "referral URLs:  %s");
-
-
-    registerMessage(MSGID_LDAP_BIND_RESULT_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind response protocol op because the result sequence " +
-                    "did not contain a valid number of elements (expected 3 " +
-                    "to 5, got %d)");
-    registerMessage(MSGID_LDAP_BIND_RESULT_DECODE_SERVER_SASL_CREDENTIALS,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind response protocol op because the final element in " +
-                    "the result sequence could not be decoded as the server " +
-                    "SASL credentials:  %s");
-    registerMessage(MSGID_LDAP_BIND_RESULT_DECODE_INVALID_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind response protocol op because the BER type for the " +
-                    "fourth element in the sequence was invalid (expected A3 " +
-                    "or 87, got %x)");
-
-
-    registerMessage(MSGID_LDAP_EXTENDED_RESULT_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind response protocol op because the result sequence " +
-                    "did not contain a valid number of elements (expected 3 " +
-                    "to 6, got %d)");
-    registerMessage(MSGID_LDAP_EXTENDED_RESULT_DECODE_REFERRALS,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind response protocol op because the set of referral " +
-                    "URLs could not be decoded:  %s");
-    registerMessage(MSGID_LDAP_EXTENDED_RESULT_DECODE_OID,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind response protocol op because the response OID " +
-                    "could not be decoded:  %s");
-    registerMessage(MSGID_LDAP_EXTENDED_RESULT_DECODE_VALUE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind response protocol op because the response value " +
-                    "could not be decoded:  %s");
-    registerMessage(MSGID_LDAP_EXTENDED_RESULT_DECODE_INVALID_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "extended response protocol op because one of the " +
-                    "elements it contained had an invalid BER type (expected " +
-                    "A3, 8A, or 8B, got %x)");
-
-
-    registerMessage(MSGID_LDAP_UNBIND_DECODE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "unbind request protocol op:  %s");
-    registerMessage(MSGID_LDAP_UNBIND_INVALID_MESSAGE_TYPE,
-                    "Cannot convert the provided LDAP message (%s) to an " +
-                    "unbind operation:  %s");
-
-
-    registerMessage(MSGID_LDAP_BIND_REQUEST_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind request protocol op because the element could " +
-                    "not be decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_BIND_REQUEST_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind request protocol op because the request sequence " +
-                    "had an invalid number of elements (expected 3, got %d)");
-    registerMessage(MSGID_LDAP_BIND_REQUEST_DECODE_VERSION,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind request protocol op because the protocol " +
-                    "version could not be decoded as an integer:  %s");
-    registerMessage(MSGID_LDAP_BIND_REQUEST_DECODE_DN,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind request protocol op because the bind DN could not " +
-                    "be properly decoded:  %s");
-    registerMessage(MSGID_LDAP_BIND_REQUEST_DECODE_PASSWORD,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind request protocol op because the password to use " +
-                    "for simple authentication could not be decoded:  %s");
-    registerMessage(MSGID_LDAP_BIND_REQUEST_DECODE_SASL_INFO,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind request protocol op because the SASL " +
-                    "authentication information could not be decoded:  %s");
-    registerMessage(MSGID_LDAP_BIND_REQUEST_DECODE_INVALID_CRED_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "bind request protocol op because the authentication " +
-                    "info element had an invalid BER type (expected 80 or " +
-                    "A3, got %x)");
-    registerMessage(MSGID_LDAP_BIND_REQUEST_DECODE_CREDENTIALS,
-                    "Cannot decoded the provided ASN.1 element as an LDAP " +
-                    "bind request protocol op because an unexpected error " +
-                    "occurred while trying to decode the authentication " +
-                    "info element:  %s");
-
-
-    registerMessage(MSGID_LDAP_COMPARE_REQUEST_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "compare request protocol op because the element could " +
-                    "not be decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_COMPARE_REQUEST_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "compare request protocol op because the request " +
-                    "sequence had an invalid number of elements (expected 2, " +
-                    "got %d)");
-    registerMessage(MSGID_LDAP_COMPARE_REQUEST_DECODE_DN,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "compare request protocol op because the target DN could " +
-                    "not be properly decoded:  %s");
-    registerMessage(MSGID_LDAP_COMPARE_REQUEST_DECODE_AVA,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "compare request protocol op because the attribute value " +
-                    "assertion could not be decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_COMPARE_REQUEST_DECODE_AVA_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "compare request protocol op because the attribute value " +
-                    "assertion sequence had an invalid number of elements " +
-                    "(expected 2, got %d)");
-    registerMessage(MSGID_LDAP_COMPARE_REQUEST_DECODE_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "compare request protocol op because the attribute type " +
-                    "could not be properly decoded:  %s");
-    registerMessage(MSGID_LDAP_COMPARE_REQUEST_DECODE_VALUE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "compare request protocol op because the assertion value " +
-                    "could not be properly decoded:  %s");
-
-
-    registerMessage(MSGID_LDAP_DELETE_REQUEST_DECODE_DN,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "delete request protocol op because the target DN could " +
-                    "not be properly decoded:  %s");
-
-
-    registerMessage(MSGID_LDAP_EXTENDED_REQUEST_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "extended request protocol op because the element could " +
-                    "not be decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_EXTENDED_REQUEST_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "extended request protocol op because the request " +
-                    "sequence had an invalid number of elements (expected 1 " +
-                    "or 2, got %d)");
-    registerMessage(MSGID_LDAP_EXTENDED_REQUEST_DECODE_OID,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "extended request protocol op because the OID could not " +
-                    "be properly decoded:  %s");
-    registerMessage(MSGID_LDAP_EXTENDED_REQUEST_DECODE_VALUE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "extended request protocol op because the value could " +
-                    "not be properly decoded:  %s");
-
-
-    registerMessage(MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modify DN request protocol op because the element could " +
-                    "not be decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modify DN request protocol op because the request " +
-                    "sequence had an invalid number of elements (expected 3 " +
-                    "or 4, got %d)");
-    registerMessage(MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_DN,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modify DN request protocol op because the entry DN " +
-                    "could not be properly decoded:  %s");
-    registerMessage(MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_RDN,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modify DN request protocol op because the new RDN could " +
-                    "not be properly decoded:  %s");
-    registerMessage(MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_DELETE_OLD_RDN,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modify DN request protocol op because the deleteOldRDN " +
-                    "flag could not be properly decoded:  %s");
-    registerMessage(MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_SUPERIOR,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modify DN request protocol op because the new superior " +
-                    "DN could not be properly decoded:  %s");
-
-
-    registerMessage(MSGID_LDAP_ATTRIBUTE_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "attribute because the element could not be decoded as a " +
-                    "sequence:  %s");
-    registerMessage(MSGID_LDAP_ATTRIBUTE_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "attribute because the request sequence had an invalid " +
-                    "number of elements (expected 2, got %d)");
-    registerMessage(MSGID_LDAP_ATTRIBUTE_DECODE_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "attribute because the attribute type could not be " +
-                    "decoded:  %s");
-    registerMessage(MSGID_LDAP_ATTRIBUTE_DECODE_VALUES,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "attribute because the set of values could not be " +
-                    "decoded:  %s");
-    registerMessage(MSGID_LDAP_ATTRIBUTE_DUPLICATE_VALUES,
-                    "The provided LDAP attribute %s contains duplicate " +
-                    "values");
-
-
-    registerMessage(MSGID_LDAP_ADD_REQUEST_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP add " +
-                    "request protocol op because the element could not be " +
-                    "decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_ADD_REQUEST_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP add " +
-                    "request protocol op because the request sequence had an " +
-                    "invalid number of elements (expected 2, got %d)");
-    registerMessage(MSGID_LDAP_ADD_REQUEST_DECODE_DN,
-                    "Cannot decode the provided ASN.1 element as an LDAP add " +
-                    "request protocol op because the entry DN could not be " +
-                    "decoded:  %s");
-    registerMessage(MSGID_LDAP_ADD_REQUEST_DECODE_ATTRS,
-                    "Cannot decode the provided ASN.1 element as an LDAP add " +
-                    "request protocol op because the set of attributes could " +
-                    "not be decoded:  %s");
-
-
-    registerMessage(MSGID_LDAP_MODIFICATION_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modification because the element could not be decoded " +
-                    "as a sequence:  %s");
-    registerMessage(MSGID_LDAP_MODIFICATION_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modification because the request sequence had an " +
-                    "invalid number of elements (expected 2, got %d)");
-    registerMessage(MSGID_LDAP_MODIFICATION_DECODE_INVALID_MOD_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modification because it contained an invalid " +
-                    "modification type (%d)");
-    registerMessage(MSGID_LDAP_MODIFICATION_DECODE_MOD_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modification because the modification type could not be " +
-                    "decoded:  %s");
-    registerMessage(MSGID_LDAP_MODIFICATION_DECODE_ATTR,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modification because the attribute could not be " +
-                    "decoded:  %s");
-
-
-    registerMessage(MSGID_LDAP_MODIFY_REQUEST_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modify request protocol op because the element could " +
-                    "not be decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_MODIFY_REQUEST_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modify request protocol op because the request sequence " +
-                    "had an invalid number of elements (expected 2, got %d)");
-    registerMessage(MSGID_LDAP_MODIFY_REQUEST_DECODE_DN,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modify request protocol op because the entry DN could " +
-                    "not be decoded:  %s");
-    registerMessage(MSGID_LDAP_MODIFY_REQUEST_DECODE_MODS,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "modify request protocol op because the set of " +
-                    "modifications could not be decoded:  %s");
-
-
-    registerMessage(MSGID_LDAP_SEARCH_ENTRY_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search result entry protocol op because the element " +
-                    "could not be decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_ENTRY_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search result entry protocol op because the request " +
-                    "sequence had an invalid number of elements (expected 2, " +
-                    "got %d)");
-    registerMessage(MSGID_LDAP_SEARCH_ENTRY_DECODE_DN,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search result entry protocol op because the entry DN " +
-                    "could not be decoded:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_ENTRY_DECODE_ATTRS,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search result entry protocol op because the set of " +
-                    "attributes could not be decoded:  %s");
-
-
-    registerMessage(MSGID_LDAP_SEARCH_REFERENCE_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search result reference protocol op because the " +
-                    "element could not be decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_REFERENCE_DECODE_URLS,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search result reference protocol op because a problem " +
-                    "occurred while trying to decode the sequence elements " +
-                    "as referral URLs:  %s");
-
-
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the element could " +
-                    "not be decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the request sequence " +
-                    "had an invalid number of elements (expected 8, got %d)");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_BASE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the base DN could " +
-                    "not be decoded:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_INVALID_SCOPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the provided scope " +
-                    "value (%d) is invalid");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_SCOPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the scope could not " +
-                    "be decoded:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_INVALID_DEREF,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the provided alias " +
-                    "dereferencing policy value (%d) is invalid");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_DEREF,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the alias " +
-                    "dereferencing policy could not be decoded:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_SIZE_LIMIT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the size limit could " +
-                    "not be decoded:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_TIME_LIMIT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the time limit could " +
-                    "not be decoded:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_TYPES_ONLY,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the typesOnly flag " +
-                    "could not be decoded:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_FILTER,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the filter could not " +
-                    "be decoded:  %s");
-    registerMessage(MSGID_LDAP_SEARCH_REQUEST_DECODE_ATTRIBUTES,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search request protocol op because the requested " +
-                    "attribute set could not be decoded:  %s");
-
-
-    registerMessage(MSGID_LDAP_PROTOCOL_OP_DECODE_NULL,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "protocol op because the element was null");
-    registerMessage(MSGID_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "protocol op because the element had an invalid BER " +
-                    "type (%x) for an LDAP protocol op");
-
-
-    registerMessage(MSGID_LDAP_FILTER_DECODE_NULL,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the element was null");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_INVALID_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the element had an invalid BER " +
-                    "type (%x) for a search filter");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_COMPOUND_SET,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the compound filter set could " +
-                    "not be decoded:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_COMPOUND_COMPONENTS,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because an unexpected error occurred " +
-                    "while trying to decode one of the compound filter " +
-                    "components");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_NOT_ELEMENT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the value of the element cannot " +
-                    "itself be decoded as an ASN.1 element for a NOT filter " +
-                    "component:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_NOT_COMPONENT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the NOT component element could " +
-                    "not be decoded as an LDAP filter:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_TV_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the element could not be decoded " +
-                    "as a type-and-value sequence:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_TV_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the type-and-value sequence had " +
-                    "an invalid number of elements (expected 2, got %d)");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_TV_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the attribute type could not be " +
-                    "decoded from the type-and-value sequence:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_TV_VALUE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the assertion value could not be " +
-                    "decoded from the type-and-value sequence:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_SUBSTRING_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the element could not be decoded " +
-                    "as a substring sequence:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_SUBSTRING_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the substring sequence had an " +
-                    "invalid number of elements (expected 2, got %d)");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_SUBSTRING_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the attribute type could not be " +
-                    "decoded from the substring sequence:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_SUBSTRING_ELEMENTS,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the substring value sequence " +
-                    "could not be decoded:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_SUBSTRING_NO_SUBELEMENTS,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the substring value sequence did " +
-                    "not contain any elements");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_SUBSTRING_INVALID_SUBTYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the substring value sequence had " +
-                    "an element with an invalid BER type (%x)");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_SUBSTRING_VALUES,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because a problem occurred while trying " +
-                    "to parse the substring value elements:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_PRESENCE_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the element could not be decoded " +
-                    "as the presence attribute type:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_EXTENSIBLE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the element could not be decoded " +
-                    "as an extensible matching sequence:  %s");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_EXTENSIBLE_INVALID_TYPE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because the extensible matching sequence " +
-                    "had an element with an invalid BER type (%x)");
-    registerMessage(MSGID_LDAP_FILTER_DECODE_EXTENSIBLE_ELEMENTS,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "search filter because a problem occurred while trying " +
-                    "to parse the extensible match sequence elements:  %s");
-    registerMessage(MSGID_LDAP_FILTER_UNKNOWN_MATCHING_RULE,
-                    "The provided LDAP search filter references unknown " +
-                    "matching rule %s");
-    registerMessage(MSGID_LDAP_FILTER_VALUE_WITH_NO_ATTR_OR_MR,
-                    "The provided LDAP search filter has an assertion value " +
-                    "but does not include either an attribute type or a " +
-                    "matching rule ID");
-    registerMessage(MSGID_LDAP_FILTER_STRING_NULL,
-                    "Cannot decode the provided string as an LDAP search " +
-                    "filter because the string was null");
-    registerMessage(MSGID_LDAP_FILTER_UNCAUGHT_EXCEPTION,
-                    "Cannot decode the provided string %s as an LDAP search " +
-                    "filter because an unexpected exception was thrown " +
-                    "during processing:  %s");
-    registerMessage(MSGID_LDAP_FILTER_MISMATCHED_PARENTHESES,
-                    "The provided search filter \"%s\" had mismatched " +
-                    "parentheses around the portion between positions %d and " +
-                    "%d");
-    registerMessage(MSGID_LDAP_FILTER_NO_EQUAL_SIGN,
-                    "The provided search filter \"%s\" was missing an equal " +
-                    "sign in the suspected simple filter component between " +
-                    "positions %d and %d");
-    registerMessage(MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE,
-                    "The provided search filter \"%s\" had an invalid " +
-                    "escaped byte value at position %d.  A backslash in a " +
-                    "value must be followed by two hexadecimal characters " +
-                    "that define the byte that has been encoded");
-    registerMessage(MSGID_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the compound filter between positions %d and %d " +
-                    "did not start with an open parenthesis and end with a " +
-                    "close parenthesis (they may be parentheses for " +
-                    "different filter components)");
-    registerMessage(MSGID_LDAP_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the closing parenthesis at position %d did not " +
-                    "have a corresponding open parenthesis");
-    registerMessage(MSGID_LDAP_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the closing parenthesis at position %d did not " +
-                    "have a corresponding close parenthesis");
-    registerMessage(MSGID_LDAP_FILTER_SUBSTRING_NO_ASTERISKS,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the assumed substring filter value between " +
-                    "positions %d and %d did not have any asterisk wildcard " +
-                    "characters");
-    registerMessage(MSGID_LDAP_FILTER_EXTENSIBLE_MATCH_NO_COLON,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the extensible match component starting at " +
-                    "position %d did not have a colon to denote the end of " +
-                    "the attribute type name");
-    registerMessage(MSGID_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the extensible match component starting at " +
-                    "position %d did not include either an attribute " +
-                    "description or a matching rule ID.  At least one of " +
-                    "them must be provided");
-    registerMessage(MSGID_LDAP_FILTER_NOT_EXACTLY_ONE,
-                    "The provided search filter \"%s\" could not be decoded " +
-                    "because the NOT filter between positions %d and %d " +
-                    "did not contain exactly one filter component");
-    registerMessage(MSGID_LDAP_FILTER_ENCLOSED_IN_APOSTROPHES,
-                    "An LDAP filter enclosed in apostrophes is invalid:  %s");
-    registerMessage(MSGID_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE,
-                    "The provided search filter contains an invalid " +
-                    "attribute type '%s' with invalid character '%s' at " +
-                    "position %d");
-
-
-    registerMessage(MSGID_LDAP_CLIENT_SEND_RESPONSE_NO_RESULT_CODE,
-                    "The server attempted to send a response to the %s " +
-                    "operation (conn=%d, op=%d), but the operation did not " +
-                    "have a result code.  This could indicate that the " +
-                    "operation did not complete properly or that it is one " +
-                    "that is not allowed to have a response.  Using a " +
-                    "generic 'Operations Error' response");
-    registerMessage(MSGID_LDAP_CLIENT_SEND_RESPONSE_INVALID_OP,
-                    "The server attempted to send a response to the %s " +
-                    "operation (conn=%d, op=%d), but this type of operation " +
-                    "is not allowed to have responses.  Backtrace:  %s");
-    registerMessage(MSGID_LDAP_CLIENT_SEND_MESSAGE_ENCODE_ASN1,
-                    "The server was unable to encode the provided LDAP " +
-                    "message %s (conn=%d, op=%d) into an ASN.1 element:  %s");
-    registerMessage(MSGID_LDAP_CLIENT_SEND_MESSAGE_ENCODE_BYTES,
-                    "The server was unable to encode the ASN.1 element " +
-                    "generated from LDAP message %s (conn=%d, op=%d) into a " +
-                    "byte array:  %s");
-    registerMessage(MSGID_LDAP_CLIENT_SEND_MESSAGE_IO_PROBLEM,
-                    "The server was unable to send the LDAP message %s " +
-                    "(conn=%d, op=%d) to the client because an I/O problem " +
-                    "was encountered:  %s");
-    registerMessage(MSGID_LDAP_CLIENT_SEND_MESSAGE_UNEXPECTED_PROBLEM,
-                    "The server was unable to send the LDAP message %s " +
-                    "(conn=%d, op=%d) to the client because an unexpected " +
-                    "problem was encountered:  %s");
-    registerMessage(MSGID_LDAP_CLIENT_GENERIC_NOTICE_OF_DISCONNECTION,
-                    "The Directory Server is closing the connection to this " +
-                    "client");
-    registerMessage(MSGID_LDAP_CLIENT_DISCONNECT_IN_PROGRESS,
-                    "The Directory Server is currently in the process of " +
-                    "closing this client connection");
-    registerMessage(MSGID_LDAP_CLIENT_DUPLICATE_MESSAGE_ID,
-                    "The Directory Server is already processing another " +
-                    "request on the same client connection with the same " +
-                    "message ID of %d");
-    registerMessage(MSGID_LDAP_CLIENT_CANNOT_ENQUEUE,
-                    "The Directory Server encountered an unexpected error " +
-                    "while attempting to add the client request to the work " +
-                    "queue:  %s");
-    registerMessage(MSGID_LDAP_CLIENT_DECODE_ZERO_BYTE_VALUE,
-                    "The client sent a request to the Directory Server that " +
-                    "was an ASN.1 element with a zero-byte value.  This " +
-                    "cannot possibly be a valid LDAP message");
-    registerMessage(MSGID_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED,
-                    "The client sent a request to the Directory Server with " +
-                    "an ASN.1 element value length of %d bytes.  This " +
-                    "exceeds the maximum allowed request size of %d bytes, " +
-                    "so processing cannot continue on this connection");
-    registerMessage(MSGID_LDAP_CLIENT_DECODE_INVALID_MULTIBYTE_LENGTH,
-                    "The client sent a request to the Directory Server with " +
-                    "an ASN.1 element using multiple bytes to express the " +
-                    "value length.  The request indicated that %d bytes were " +
-                    "needed to express the length, but this exceeds the " +
-                    "maximum allowed limit of four bytes");
-    registerMessage(MSGID_LDAP_CLIENT_DECODE_ASN1_FAILED,
-                    "The client sent a request to the Directory Server that " +
-                    "could not be properly decoded as an ASN.1 element:  %s");
-    registerMessage(MSGID_LDAP_CLIENT_DECODE_LDAP_MESSAGE_FAILED,
-                    "The client sent a request to the Directory Server that " +
-                    "could not be properly decoded as an LDAP message:  %s");
-    registerMessage(MSGID_LDAP_CLIENT_INVALID_DECODE_STATE,
-                    "An internal error has occurred within the Directory " +
-                    "Server to cause it to lose track of where it is in " +
-                    "decoding requests on this client connection.  It had an " +
-                    "invalid decode state of %d, and this connection must be " +
-                    "terminated");
-    registerMessage(MSGID_LDAP_CLIENT_DECODE_INVALID_REQUEST_TYPE,
-                    "The client sent an LDAP message to the Directory Server " +
-                    "that was not a valid message for a client request:  %s");
-    registerMessage(MSGID_LDAP_CLIENT_CANNOT_CONVERT_MESSAGE_TO_OPERATION,
-                    "The Directory Server was unable to convert the LDAP " +
-                    "message read from the client (%s) to an internal " +
-                    "operation for processing:  %s");
-
-
-    registerMessage(MSGID_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED,
-                    "The LDAP connection handler defined in configuration " +
-                    "entry %s was unable to open a selector to allow it to " +
-                    "multiplex the associated accept sockets:  %s.  This " +
-                    "connection handler will be disabled");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED,
-                    "The LDAP connection handler defined in configuration " +
-                    "entry %s was unable to create a server socket channel " +
-                    "to accept connections on %s:%d:  %s.  The Directory " +
-                    "Server will not listen for new connections on that " +
-                    "address");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NO_ACCEPTORS,
-                    "The LDAP connection handler defined in configuration " +
-                    "entry %s was unable to create any of the socket " +
-                    "channels on any of the configured addresses.  This " +
-                    "connection handler will be disabled");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DENIED_CLIENT,
-                    "The connection attempt from client %s to %s has been " +
-                    "rejected because the client was included in one of the " +
-                    "denied address ranges");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DISALLOWED_CLIENT,
-                    "The connection attempt from client %s to %s has been " +
-                    "rejected because the client was not included in one of " +
-                    "the allowed address ranges");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_SET_SECURITY_PROVIDER,
-                    "An error occurred while attempting to configure the " +
-                    "connection security provider for the client " +
-                    "connection:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT,
-                    "An internal error prevented the Directory Server from " +
-                    "properly registering the client connection from %s to " +
-                    "%s with an appropriate request handler:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION,
-                    "The LDAP connection handler defined in configuration " +
-                    "entry %s was unable to accept a new client connection:  " +
-                    "%s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES,
-                    "The LDAP connection handler defined in configuration " +
-                    "entry %s has experienced consecutive failures while " +
-                    "trying to accept client connections:  %s.  This " +
-                    "connection handler will be disabled");
-    registerMessage(MSGID_LDAP_CONNHANDLER_UNCAUGHT_ERROR,
-                    "The LDAP connection handler defined in configuration " +
-                    "entry %s caught an unexpected error while trying to " +
-                    "listen for new connections:  %s.  This connection " +
-                    "handler will be disabled");
-    registerMessage(MSGID_LDAP_CONNHANDLER_REJECTED_BY_SERVER,
-                    "The attempt to register this connection with the " +
-                    "Directory Server was rejected.  This may indicate that " +
-                    "the server already has the maximum allowed number of " +
-                    "concurrent connections established, or that it is in a " +
-                    "restricted access mode");
-
-
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_ADDRESS,
-                    "Specifies the address or set of addresses on which this " +
-                    "connection handler may accept client connections.  If " +
-                    "no value is specified, then the server will accept " +
-                    "connections on all active addresses.  Changes to this " +
-                    "configuration attribute will not take effect until the " +
-                    "connection handler is disabled and re-enabled, or until " +
-                    "the Directory Server is restarted");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT,
-                    "Specifies the TCP port on which this connection handler " +
-                    "may accept client connections.  Changes to this " +
-                    "configuration attribute will not take effect until the " +
-                    "connection handler is disabled and re-enabled, or until " +
-                    "the Directory Server is restarted");
-    registerMessage(MSGID_LDAPS_CONNHANDLER_DESCRIPTION_ENABLE,
-                    "Specifies whether to enable the LDAPS connection " +
-                    "handler");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_BACKLOG,
-                    "Specifies the accept queue size, which controls the " +
-                    "number of new connection attempts that may be allowed " +
-                    "to queue up in the backlog before being rejected.  This " +
-                    "should only need to be changed if it is expected that " +
-                    "the Directory Server will receive large numbers of new " +
-                    "connection attempts at the same time.  Changes to this " +
-                    "configuration attribute will not take effect until the " +
-                    "connection handler is disabled and re-enabled, or until " +
-                    "the Directory Server is restarted");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_ALLOWED_CLIENTS,
-                    "Specifies a set of address masks that may be used to " +
-                    "determine the addresses of the clients that are allowed " +
-                    "to establish connections to this connection handler.  " +
-                    "If no values are specified, then all clients with " +
-                    "addresses that do not match an address on the deny " +
-                    "list will be allowed.  Changes to this configuration " +
-                    "attribute will take effect immediately but will not " +
-                    "interfere with connections that may already be " +
-                    "established");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_DENIED_CLIENTS,
-                    "Specifies a set of address masks that may be used to " +
-                    "determine the set of addresses of the clients that are " +
-                    "not allowed to establish connections to this connection " +
-                    "handler.  If both allowed and denied client masks are " +
-                    "defined and a client connection matches one or more " +
-                    "masks in both lists, then the connection will be " +
-                    "denied.  If only a denied list is specified, then any " +
-                    "client not matching a mask in that list will be " +
-                    "allowed.  Changes to this configuration attribute will " +
-                    "take effect immediately but will not interfere with " +
-                    "connections that may already be established");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_KEEP_STATS,
-                    "Indicates whether the connection handler should keep " +
-                    "statistics regarding LDAP client communication.  " +
-                    "Maintaining this information may cause a slight " +
-                    "decrease in performance, but can be useful for " +
-                    "understanding client usage patterns.  Changes to this " +
-                    "configuration attribute will take effect immediately, " +
-                    "but will only apply for new connections and will have " +
-                    "the side effect of clearing any existing statistical " +
-                    "data that may have been collected");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_LDAPV2,
-                    "Indicates whether to allow communication with LDAPv2 " +
-                    "clients.  LDAPv2 is considered an obsolete protocol, " +
-                    "and clients using it will not be allowed to take " +
-                    "advantage of all features offered by the server.  " +
-                    "Changes to this configuration attribute will take " +
-                    "effect immediately, but will not interfere with " +
-                    "connections that may already be established");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_NUM_REQUEST_HANDLERS,
-                    "Specifies the number of threads that should be used to " +
-                    "read requests from clients and place them in the " +
-                    "work queue for processing.  On large systems accepting " +
-                    "many concurrent requests, it may be more efficient to " +
-                    "have multiple threads reading requests from clients.  " +
-                    "Changes to this configuration attribute will not take " +
-                    "effect until the connection handler is disabled and " +
-                    "re-enabled, or until the Directory Server is " +
-                    "restarted");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_SEND_REJECTION_NOTICE,
-                    "Indicates whether to send an LDAPv3 notice of " +
-                    "disconnection message to client connections that " +
-                    "are rejected before closing the connection.  Changes to " +
-                    "this configuration attribute will take effect " +
-                    "immediately");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_USE_TCP_KEEPALIVE,
-                    "Indicates whether to use the TCP KeepAlive feature for " +
-                    "client connections established through this connection " +
-                    "handler.  This is recommended because it may help the " +
-                    "server detect client connections that are no longer " +
-                    "valid, and may help prevent intermediate network " +
-                    "devices from closing connections due to a lack of " +
-                    "communication.  Changes to this configuration attribute " +
-                    "will take effect immediately but will only be applied " +
-                    "to connections established after the change");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_USE_TCP_NODELAY,
-                    "Indicates whether to use the TCP NoDelay feature for " +
-                    "client connections established through this connection " +
-                    "handler.  This is recommended because it will generally " +
-                    "allow faster responses to clients, although directories " +
-                    "that frequently process searches that match multiple " +
-                    "entries may be able to achieve higher throughput if it" +
-                    " is disabled.  Changes to this configuration attribute " +
-                    "will take effect immediately but will only be applied " +
-                    "to connections established after the change");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_REUSE_ADDRESS,
-                    "Indicates whether to use the SO_REUSEADDR socket option " +
-                    "for the socket accepting connections for this " +
-                    "connection handler.  It should generally be enabled " +
-                    "unless you have been instructed to disable it by " +
-                    "support engineers.  Changes to this configuration " +
-                    "attribute will not take effect until the connection " +
-                    "handler is disabled and re-enabled, or until the " +
-                    "Directory Server is restarted");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_MAX_REQUEST_SIZE,
-                    "Specifies the maximum size in bytes that will be " +
-                    "allowed when reading requests from clients.  This can " +
-                    "be used to prevent denial of service attacks from " +
-                    "clients that send extremely large requests.  A value of " +
-                    "zero indicates that no limit should be imposed.  " +
-                    "Changes to this configuration attribute will take " +
-                    "effect immediately");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_USE_SSL,
-                    "Indicates whether this connection handler should use " +
-                    "SSL when accepting connections from clients.  Changes " +
-                    "to this configuration attribute will not take effect " +
-                    "until the connection handler is disabled and " +
-                    "re-enabled, or until the Directory Server is restarted");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_STARTTLS,
-                    "Indicates whether this connection handler should allow " +
-                    "clients to use the StartTLS extended operation to " +
-                    "initiate secure communication over a non-SSL LDAP " +
-                    "connection.  This may not be used if SSL is enabled " +
-                    "for the connection handler.  Changes to this " +
-                    "configuration attribute will take effect immediately " +
-                    "for LDAP clients");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_SSL_CLIENT_AUTH_POLICY,
-                    "Specifies the policy that should be used regarding " +
-                    "requesting or requiring the client to present its own " +
-                    "certificate when establishing an SSL-based connection " +
-                    "or using StartTLS to initiate a secure channel in an "+
-                    "established connection.  Changes to this configuration " +
-                    "attribute will not take effect until the connection " +
-                    "handler is disabled and re-enabled, or until the " +
-                    "Directory Server is restarted");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME,
-                    "Specifies the nickname of the certificate that the " +
-                    "connection handler should use when accepting SSL-based " +
-                    "connections or performing StartTLS negotiation.  " +
-                    "Changes to this configuration attribute will not take " +
-                    "effect until the connection handler is disabled and " +
-                    "re-enabled, or until the Directory Server is restarted");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_SSL_ENABLED_PROTOCOLS,
-                    "Specifies the names of the SSL protocols that will be " +
-                    "allowed for use in SSL or StartTLS communication.  " +
-                    "Changes to this configuration attribute will take " +
-                    "immediately but will only impact new SSL/TLS-based " +
-                    "sessions created after the change");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_SSL_ENABLED_CIPHERS,
-                    "Specifies the names of the SSL cipher suites that will " +
-                    "be allowed for use in SSL or StartTLS communication.  " +
-                    "Changes to this configuration attribute will take " +
-                    "immediately but will only impact new SSL/TLS-based " +
-                    "sessions created after the change");
-
-
-    registerMessage(MSGID_LDAP_CONNHANDLER_UNKNOWN_LISTEN_ADDRESS,
-                    "The specified listen address \"%s\" in configuration " +
-                    "entry \"%s\" could not be resolved:  %s.  Please make " +
-                    "sure that name resolution is properly configured on " +
-                    "this system");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_LISTEN_ADDRESS,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_LISTEN_ADDRESS + " attribute in configuration entry " +
-                    "%s, which is used to specify the address or set of " +
-                    "addresses on which to listen for client connections:  " +
-                    "%s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NO_LISTEN_PORT,
-                    "No listen port was defined using configuration " +
-                    ATTR_LISTEN_PORT + " in configuration entry %s.  This is " +
-                    "a required attribute");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_LISTEN_PORT,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_LISTEN_PORT + " attribute in configuration entry " +
-                    "%s, which is used to specify the port on which to " +
-                    "listen for client connections:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_BACKLOG,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_ACCEPT_BACKLOG + " attribute in configuration entry " +
-                    "%s, which is used to specify the accept backlog size:  " +
-                    "%s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOWED_CLIENTS,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_ALLOWED_CLIENT + " attribute in configuration entry " +
-                    "%s, which is used to specify the address mask(s) of the " +
-                    "clients that are allowed to establish connections to " +
-                    "this connection handler:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_DENIED_CLIENTS,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_DENIED_CLIENT + " attribute in configuration entry " +
-                    "%s, which is used to specify the address mask(s) of the " +
-                    "clients that are not allowed to establish connections " +
-                    "to this connection handler:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOW_LDAPV2,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_ALLOW_LDAPV2 + " attribute in configuration entry " +
-                    "%s, which is used to indicate whether LDAPv2 clients " +
-                    "will be allowed to access this connection handler:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_KEEP_STATS,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_KEEP_LDAP_STATS + " attribute in configuration " +
-                    "entry %s, which is used to indicate whether LDAP usage " +
-                    "statistics should be enabled for this connection " +
-                    "handler:  %s");
-    registerMessage(
-         MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_NUM_REQUEST_HANDLERS,
-         "An unexpected error occurred while processing the " +
-         ATTR_NUM_REQUEST_HANDLERS + " attribute in configuration entry %s, " +
-         "which is used to specify the number of request handlers to use " +
-         "to read requests from clients: %s");
-    registerMessage(
-         MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_SEND_REJECTION_NOTICE,
-         "An unexpected error occurred while processing the " +
-         ATTR_SEND_REJECTION_NOTICE + " attribute in configuration entry %s, " +
-         "which is used to indicate whether to send a notice of " +
-         "disconnection message to rejected client connections: %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_USE_TCP_KEEPALIVE,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_USE_TCP_KEEPALIVE + " attribute in configuration " +
-                    "entry %s, which is used to periodically send TCP " +
-                    "Keep-Alive messages over idle connections:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_USE_TCP_NODELAY,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_USE_TCP_NODELAY + " attribute in configuration " +
-                    "entry %s, which is used to determine whether to " +
-                    "immediately flush responses to clients:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOW_REUSE_ADDRESS,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_ALLOW_REUSE_ADDRESS + " attribute in configuration " +
-                    "entry %s, which is used to determine whether to set the " +
-                    "SO_REUSEADDR option on the listen socket:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_MAX_REQUEST_SIZE,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_MAX_REQUEST_SIZE + " attribute in configuration " +
-                    "entry %s, which is used to determine the maximum size " +
-                    "in bytes that may be used for a client request:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_USE_SSL,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_USE_SSL + " attribute in configuration entry %s, " +
-                    "which is used to indicate whether to use SSL when " +
-                    "accepting client connections:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_HAVE_SSL_AND_STARTTLS,
-                    "The LDAP connection handler defined in configuration " +
-                    "entry %s is configured to communicate over SSL and " +
-                    "also to allow clients to use the StartTLS extended " +
-                    "operation.  These options may not be used at the same " +
-                    "time, so clients will not be allowed to use the " +
-                    "StartTLS operation");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NO_KEYMANAGER_DN,
-                    "The LDAP connection handler defined in configuration " +
-                    "entry %s is configured to use either SSL or StartTLS, " +
-                    "but does not specify which key manager provider should " +
-                    "be used");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NO_TRUSTMANAGER_DN,
-                    "The LDAP connection handler defined in configuration " +
-                    "entry %s is configured to use either SSL or StartTLS, " +
-                    "but does not specify which trust manager provider " +
-                    "should be used");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_ALLOW_STARTTLS,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_ALLOW_STARTTLS + " attribute in configuration entry " +
-                    "%s, which is used to indicate whether clients may use " +
-                    "the StartTLS extended operation:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_INVALID_SSL_CLIENT_AUTH_POLICY,
-                    "The SSL client authentication policy \"%s\" specified " +
-                    "in attribute " + ATTR_SSL_CLIENT_AUTH_POLICY +
-                    " of configuration entry %s is invalid.  The value must " +
-                    "be one of \"disabled\", \"optional\", or \"required\"");
-    registerMessage(
-         MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_CLIENT_AUTH_POLICY,
-         "An unexpected error occurred while processing the " +
-         ATTR_SSL_CLIENT_AUTH_POLICY + " attribute in configuration entry " +
-         "%s, which is used to specify the policy that should be used " +
-         "for requesting/requiring SSL client authentication:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_CERT_NICKNAME,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_SSL_CERT_NICKNAME + " attribute in configuration " +
-                    "entry %s, which is used to specify the nickname of the " +
-                    "certificate to use for accepting SSL/TSL connections:  " +
-                    "%s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_PROTOCOLS,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_SSL_PROTOCOLS + " attribute in configuration " +
-                    "entry %s, which is used to specify the names of the " +
-                    "SSL protocols to allow for SSL/TLS sessions:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_SSL_CIPHERS,
-                    "An unexpected error occurred while processing the " +
-                    ATTR_SSL_PROTOCOLS + " attribute in configuration " +
-                    "entry %s, which is used to specify the names of the " +
-                    "SSL cipher suites to allow for SSL/TLS sessions:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_KEYMANAGER_DN,
-                    "Specifies the DN of the configuration entry for the key " +
-                    "manager provider that should be used with this LDAP " +
-                    "connection handler.  Changes to this attribute will " +
-                    "take effect immediately, but only for subsequent " +
-                    "attempts to access the key manager provider for " +
-                    "associated client connections");
-    registerMessage(MSGID_LDAP_CONNHANDLER_INVALID_KEYMANAGER_DN,
-                    "Configuration attribute " + ATTR_KEYMANAGER_DN +
-                    " of configuration entry %s has an invalid value %s " +
-                    "which does not reference an enabled key manager " +
-                    "provider");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_KEYMANAGER_DN,
-                    "An error occurred while processing the " +
-                    ATTR_KEYMANAGER_DN + " attribute in configuration entry " +
-                    "%s, which is used to specify the key manager provider " +
-                    "for use with the LDAP connection handler:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_DESCRIPTION_TRUSTMANAGER_DN,
-                    "Specifies the DN of the configuration entry for the " +
-                    "trust manager provider that should be used with this " +
-                    "LDAP connection handler.  Changes to this attribute " +
-                    "will take effect immediately, but only for subsequent " +
-                    "attempts to access the trust manager provider for " +
-                    "associated client connections");
-    registerMessage(MSGID_LDAP_CONNHANDLER_INVALID_TRUSTMANAGER_DN,
-                    "Configuration attribute " + ATTR_TRUSTMANAGER_DN +
-                    " of configuration entry %s has an invalid value %s " +
-                    "which does not reference an enabled trust manager " +
-                    "provider");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_BIND,
-                    "The LDAP connection handler defined in configuration " +
-                    "entry %s was unable to bind to %s:%d:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_CANNOT_DETERMINE_TRUSTMANAGER_DN,
-                    "An error occurred while processing the " +
-                    ATTR_TRUSTMANAGER_DN + " attribute in configuration " +
-                    "entry %s, which is used to specify the trust manager " +
-                    "provider for use with the LDAP connection handler:  %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_INVALID_ADDRESS_MASK,
-                    "The string %s defined in attribute %s of configuration " +
-                    "entry %s could not be decoded as a valid address mask:  "+
-                    "%s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_ALLOWED_CLIENTS,
-                    "A new set of allowed client address masks has been " +
-                    "applied for configuration entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_DENIED_CLIENTS,
-                    "A new set of denied client address masks has been " +
-                    "applied for configuration entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_ALLOW_LDAPV2,
-                    "The value of the " + ATTR_ALLOW_LDAPV2 +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_KEEP_STATS,
-                    "The value of the " + ATTR_KEEP_LDAP_STATS +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_SEND_REJECTION_NOTICE,
-                    "The value of the " + ATTR_SEND_REJECTION_NOTICE +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_USE_KEEPALIVE,
-                    "The value of the " + ATTR_USE_TCP_KEEPALIVE +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_USE_TCP_NODELAY,
-                    "The value of the " + ATTR_USE_TCP_NODELAY +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_MAX_REQUEST_SIZE,
-                    "The value of the " + ATTR_MAX_REQUEST_SIZE +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_ALLOW_STARTTLS,
-                    "The value of the " + ATTR_ALLOW_STARTTLS +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_SSL_PROTOCOLS,
-                    "The value of the " + ATTR_SSL_PROTOCOLS +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_SSL_CIPHERS,
-                    "The value of the " + ATTR_SSL_CIPHERS +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_KEYMANAGER_DN,
-                    "The value of the " + ATTR_KEYMANAGER_DN +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_NEW_TRUSTMANAGER_DN,
-                    "The value of the " + ATTR_TRUSTMANAGER_DN +
-                    " attribute has been updated to %s in configuration " +
-                    "entry %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_STARTED_LISTENING,
-                    "Started listening for new connections on %s");
-    registerMessage(MSGID_LDAP_CONNHANDLER_STOPPED_LISTENING,
-                    "Stopped listening for new connections on %s");
-
-
-    registerMessage(MSGID_LDAP_REQHANDLER_OPEN_SELECTOR_FAILED,
-                    "%s was unable to open a selector to multiplex reads " +
-                    "from clients:  %s.  This request handler cannot " +
-                    "continue processing");
-    registerMessage(MSGID_LDAP_REQHANDLER_DETECTED_JVM_ISSUE_CR6322825,
-                    "Unable to call select() in the LDAP connection " +
-                    "handler:  %s.  It appears that your JVM may be " +
-                    "susceptible to the issue described at " +
-                    "http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=" +
-                    "6322825, and it is unable to handle LDAP requests in " +
-                    "its current configuration.  Please upgrade to a newer " +
-                    "JVM that does not exhibit this behavior (Java 5.0 " +
-                    "Update 8 or higher) or set the number of available " +
-                    "file descriptors to a value greater than or equal to " +
-                    "8193 (e.g., by issuing the command 'ulimit -n 8193') " +
-                    "before starting the Directory Server");
-    registerMessage(MSGID_LDAP_REQHANDLER_CANNOT_REGISTER,
-                    "%s was unable to register this client connection with " +
-                    "the selector:  %s");
-    registerMessage(MSGID_LDAP_REQHANDLER_REJECT_DUE_TO_SHUTDOWN,
-                    "This connection could not be registered with a " +
-                    "request handler because the Directory Server is " +
-                    "shutting down");
-    registerMessage(MSGID_LDAP_REQHANDLER_REJECT_DUE_TO_QUEUE_FULL,
-                    "This connection could not be registered with a request " +
-                    "handler because the pending queue associated with %s " +
-                    "is too full");
-    registerMessage(MSGID_LDAP_REQHANDLER_DEREGISTER_DUE_TO_SHUTDOWN,
-                    "This client connection is being deregistered from the " +
-                    "associated request handler because the Directory Server " +
-                    "is shutting down:  %s");
-    registerMessage(MSGID_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION,
-                    "The LDAP request handler thread \"%s\" encountered an " +
-                    "unexpected error that would have caused the thread to " +
-                    "die:  %s.  The error has been caught and the request " +
-                    "handler should continue operating as normal");
-
-
-    registerMessage(MSGID_LDAP_DISCONNECT_DUE_TO_INVALID_REQUEST_TYPE,
-                    "Terminating this connection because the client sent " +
-                    "an invalid message of type %s (LDAP message ID %d) that " +
-                    "is not allowed for request messages");
-    registerMessage(MSGID_LDAP_DISCONNECT_DUE_TO_PROCESSING_FAILURE,
-                    "An unexpected failure occurred while trying to process " +
-                    "a request of type %s (LDAP message ID %d):  %s.  The " +
-                    "client connection will be terminated");
-    registerMessage(MSGID_LDAP_INVALID_BIND_AUTH_TYPE,
-                    "The bind request message (LDAP message ID %d) included " +
-                    "an invalid authentication type of %s.  This is a " +
-                    "protocol error, and this connection will be terminated " +
-                    "as per RFC 2251 section 4.2.3");
-    registerMessage(MSGID_LDAP_DISCONNECT_DUE_TO_BIND_PROTOCOL_ERROR,
-                    "This client connection is being terminated because a " +
-                    "protocol error occurred while trying to process a bind " +
-                    "request.  The LDAP message ID was %d and the error " +
-                    "message for the bind response was %s");
-
-
-    registerMessage(MSGID_LDAPV2_SKIPPING_EXTENDED_RESPONSE,
-                    "An extended response message would have been sent to an " +
-                    "LDAPv2 client (connection ID=%d, operation ID=%d):  " +
-                    "%s.  LDAPv2 does not allow extended operations, so this " +
-                    "response will not be sent");
-    registerMessage(MSGID_LDAPV2_SKIPPING_SEARCH_REFERENCE,
-                    "A search performed by an LDAPv2 client (connection " +
-                    "ID=%d, operation ID=%d) would have included a search " +
-                    "result reference %s.  Referrals are not allowed for " +
-                    "LDAPv2 clients, so this search reference will not be " +
-                    "sent");
-    registerMessage(MSGID_LDAPV2_REFERRAL_RESULT_CHANGED,
-                    "The original result code for this message was " +
-                    LDAPResultCode.REFERRAL + " but this result is not " +
-                    "allowed for LDAPv2 clients");
-    registerMessage(MSGID_LDAPV2_REFERRALS_OMITTED,
-                    "The response included one or more referrals, which are " +
-                    "not allowed for LDAPv2 clients.  The referrals included " +
-                    "were:  %s");
-    registerMessage(MSGID_LDAPV2_CLIENTS_NOT_ALLOWED,
-                    "The Directory Server has been configured to deny access " +
-                    "to LDAPv2 clients.  This connection will be closed");
-    registerMessage(MSGID_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED,
-                    "The client with connection ID %d authenticated to the " +
-                    "Directory Server using LDAPv2, but attempted to send an " +
-                    "extended operation request (LDAP message ID %d), which " +
-                    "is not allowed for LDAPv2 clients.  The connection will " +
-                    "be terminated");
-    registerMessage(MSGID_LDAPV2_CONTROLS_NOT_ALLOWED,
-                    "LDAPv2 clients are not allowed to use request controls");
-
-
-
-    registerMessage(MSGID_LDAP_STATS_INVALID_MONITOR_INITIALIZATION,
-                    "An attempt was made to initialize the LDAP statistics " +
-                    "monitor provider as defined in configuration entry %s.  " +
-                    "This monitor provider should only be dynamically " +
-                    "created within the Directory Server itself and not " +
-                    "from within the configuration");
-
-
-    registerMessage(MSGID_INTERNAL_CANNOT_DECODE_DN,
-                    "An unexpected error occurred while trying to decode the " +
-                    "DN %s used for internal operations as a root user:  %s");
-
-
-    registerMessage(MSGID_LDAP_TLS_EXISTING_SECURITY_PROVIDER,
-                    "The TLS connection security provider cannot be enabled " +
-                    "on this client connection because it is already using " +
-                    "the %s provider.  StartTLS may only be used on " +
-                    "clear-text connections");
-    registerMessage(MSGID_LDAP_TLS_STARTTLS_NOT_ALLOWED,
-                    "StartTLS cannot be enabled on this LDAP client " +
-                    "connection because the corresponding LDAP connection " +
-                    "handler is configured to reject StartTLS requests.  " +
-                    "The use of StartTLS may be enabled using the " +
-                    ATTR_ALLOW_STARTTLS + " configuration attribute");
-    registerMessage(MSGID_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER,
-                    "An error occurred while attempting to create a TLS " +
-                    "connection security provider for this client connection " +
-                    "for use with StartTLS:  %s");
-    registerMessage(MSGID_LDAP_TLS_NO_PROVIDER,
-                    "StartTLS is not available on this client connection " +
-                    "because the connection does not have access to a TLS " +
-                    "connection security provider");
-    registerMessage(MSGID_LDAP_TLS_CLOSURE_NOT_ALLOWED,
-                    "The LDAP connection handler does not allow clients to " +
-                    "close a StartTLS session on a client connection while " +
-                    "leaving the underlying TCP connection active.  The " +
-                    "TCP connection will be closed");
-    registerMessage(MSGID_LDAP_NO_CLEAR_SECURITY_PROVIDER,
-                    "LDAP connection handler %s could not send a clear-text " +
-                    "response to the client because it does not have a " +
-                    "reference to a clear connection security provider");
-
-
-    registerMessage(MSGID_LDAP_PAGED_RESULTS_DECODE_NULL,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "paged results control value because the element is " +
-                    "null");
-    registerMessage(MSGID_LDAP_PAGED_RESULTS_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "paged results control value because the element could " +
-                    "not be decoded as a sequence:  %s");
-    registerMessage(MSGID_LDAP_PAGED_RESULTS_DECODE_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "paged results control value because the request " +
-                    "sequence has an invalid number of elements (expected 2, " +
-                    "got %d)");
-    registerMessage(MSGID_LDAP_PAGED_RESULTS_DECODE_SIZE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "paged results control value because the size element " +
-                    "could not be properly decoded:  %s");
-    registerMessage(MSGID_LDAP_PAGED_RESULTS_DECODE_COOKIE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "paged results control value because the cookie could " +
-                    "not be properly decoded:  %s");
-
-
-    registerMessage(MSGID_LDAPASSERT_NO_CONTROL_VALUE,
-                    "Cannot decode the provided LDAP assertion control " +
-                    "because the control does not have a value");
-    registerMessage(MSGID_LDAPASSERT_INVALID_CONTROL_VALUE,
-                    "Cannot decode the provided LDAP assertion control " +
-                    "because the control value cannot be decoded as an " +
-                    "ASN.1 element:  %s");
-
-
-    registerMessage(MSGID_PREREADREQ_NO_CONTROL_VALUE,
-                    "Cannot decode the provided LDAP pre-read request " +
-                    "control because the control does not have a value");
-    registerMessage(MSGID_PREREADREQ_CANNOT_DECODE_VALUE,
-                    "Cannot decode the provided LDAP pre-read request " +
-                    "control because an error occurred while trying to " +
-                    "decode the control value:  %s");
-
-
-    registerMessage(MSGID_POSTREADREQ_NO_CONTROL_VALUE,
-                    "Cannot decode the provided LDAP post-read request " +
-                    "control because the control does not have a value");
-    registerMessage(MSGID_POSTREADREQ_CANNOT_DECODE_VALUE,
-                    "Cannot decode the provided LDAP post-read request " +
-                    "control because an error occurred while trying to " +
-                    "decode the control value:  %s");
-
-
-    registerMessage(MSGID_PREREADRESP_NO_CONTROL_VALUE,
-                    "Cannot decode the provided LDAP pre-read response " +
-                    "control because the control does not have a value");
-    registerMessage(MSGID_PREREADRESP_CANNOT_DECODE_VALUE,
-                    "Cannot decode the provided LDAP pre-read response " +
-                    "control because an error occurred while trying to " +
-                    "decode the control value:  %s");
-
-
-    registerMessage(MSGID_POSTREADRESP_NO_CONTROL_VALUE,
-                    "Cannot decode the provided LDAP post-read response " +
-                    "control because the control does not have a value");
-    registerMessage(MSGID_POSTREADRESP_CANNOT_DECODE_VALUE,
-                    "Cannot decode the provided LDAP post-read response " +
-                    "control because an error occurred while trying to " +
-                    "decode the control value:  %s");
-
-
-    registerMessage(MSGID_PROXYAUTH1_CONTROL_NOT_CRITICAL,
-                    "Unwilling to process the request because it contains a " +
-                    "proxied authorization V1 control which is not marked " +
-                    "critical.  The proxied authorization control must " +
-                    "always have a criticality of \"true\"");
-    registerMessage(MSGID_PROXYAUTH1_NO_CONTROL_VALUE,
-                    "Cannot decode the provided proxied authorization V1 " +
-                    "control because it does not have a value");
-    registerMessage(MSGID_PROXYAUTH1_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided proxied authorization V1 " +
-                    "control because the ASN.1 sequence in the control " +
-                    "value has an invalid number of elements (expected 1, " +
-                    "got %d)");
-    registerMessage(MSGID_PROXYAUTH1_CANNOT_DECODE_VALUE,
-                    "Cannot decode the provided proxied authorization V1 " +
-                    "control because an error occurred while attempting to " +
-                    "decode the control value:  %s");
-    registerMessage(MSGID_PROXYAUTH1_CANNOT_LOCK_USER,
-                    "Unable to obtain a lock on user entry %s for the " +
-                    "proxied authorization V1 control validation");
-    registerMessage(MSGID_PROXYAUTH1_NO_SUCH_USER,
-                    "User %s specified in the proxied authorization V1 " +
-                    "control does not exist in the Directory Server");
-    registerMessage(MSGID_PROXYAUTH1_UNUSABLE_ACCOUNT,
-                    "Use of the proxied authorization V1 control for user %s " +
-                    "is not allowed by the password policy configuration");
-
-
-    registerMessage(MSGID_PROXYAUTH2_CONTROL_NOT_CRITICAL,
-                    "Unwilling to process the request because it contains a " +
-                    "proxied authorization V2 control which is not marked " +
-                    "critical.  The proxied authorization control must " +
-                    "always have a criticality of \"true\"");
-    registerMessage(MSGID_PROXYAUTH2_NO_CONTROL_VALUE,
-                    "Cannot decode the provided proxied authorization V2 " +
-                    "control because it does not have a value");
-    registerMessage(MSGID_PROXYAUTH2_CANNOT_DECODE_VALUE,
-                    "Cannot decode the provided proxied authorization V2 " +
-                    "control because an error occurred while attempting to " +
-                    "decode the control value:  %s");
-    registerMessage(MSGID_PROXYAUTH2_CANNOT_LOCK_USER,
-                    "Unable to obtain a lock on user entry %s for the " +
-                    "proxied authorization V2 control validation");
-    registerMessage(MSGID_PROXYAUTH2_NO_IDENTITY_MAPPER,
-                    "Unable to process proxied authorization V2 control " +
-                    "because it contains an authorization ID based on a " +
-                    "username and no proxied authorization identity mapper " +
-                    "is configured in the Directory Server");
-    registerMessage(MSGID_PROXYAUTH2_INVALID_AUTHZID,
-                    "The authorization ID \"%s\" contained in the proxied " +
-                    "authorization V2 control is invalid because it does not " +
-                    "start with \"dn:\" to indicate a user DN or \"u:\" to " +
-                    "indicate a username");
-    registerMessage(MSGID_PROXYAUTH2_NO_SUCH_USER,
-                    "User %s specified in the proxied authorization V2 " +
-                    "control does not exist in the Directory Server");
-    registerMessage(MSGID_PROXYAUTH2_UNUSABLE_ACCOUNT,
-                    "Use of the proxied authorization V2 control for user %s " +
-                    "is not allowed by the password policy configuration");
-
-
-    registerMessage(MSGID_PSEARCH_CHANGETYPES_INVALID_TYPE,
-                    "The provided integer value %d does not correspond to " +
-                    "any persistent search change type");
-    registerMessage(MSGID_PSEARCH_CHANGETYPES_NO_TYPES,
-                    "The provided integer value indicated that there were no " +
-                    "persistent search change types, which is not allowed");
-    registerMessage(MSGID_PSEARCH_CHANGETYPES_INVALID_TYPES,
-                    "The provided integer value %d was outside the range of " +
-                    "acceptable values for an encoded change type set");
-
-
-    registerMessage(MSGID_PSEARCH_NO_CONTROL_VALUE,
-                    "Cannot decode the provided persistent search control " +
-                    "because it does not have a value");
-    registerMessage(MSGID_PSEARCH_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided persistent search control " +
-                    "because the value sequence has an invalid number of " +
-                    "elements (expected 3, got %d)");
-    registerMessage(MSGID_PSEARCH_CANNOT_DECODE_VALUE,
-                    "Cannot decode the provided persistent search control " +
-                    "because an error occurred while attempting to decode " +
-                    "the control value:  %s");
-
-
-    registerMessage(MSGID_ECN_NO_CONTROL_VALUE,
-                    "Cannot decode the provided entry change notification " +
-                    "control because it does not have a value");
-    registerMessage(MSGID_ECN_INVALID_ELEMENT_COUNT,
-                    "Cannot decode the provided entry change notification " +
-                    "control because the value sequence has an invalid " +
-                    "number of elements (expected between 1 and 3, got %d)");
-    registerMessage(MSGID_ECN_ILLEGAL_PREVIOUS_DN,
-                    "Cannot decode the provided entry change notification " +
-                    "control because it contains a previous DN element but " +
-                    "had a change type of %s.  The previous DN element may " +
-                    "only be provided with the modify DN change type");
-    registerMessage(MSGID_ECN_INVALID_ELEMENT_TYPE,
-                    "Cannot decode the provided entry change notification " +
-                    "control because the second element in the value " +
-                    "sequence has an invalid type of %s that is not " +
-                    "appropriate for either a previous DN or a change number");
-    registerMessage(MSGID_ECN_CANNOT_DECODE_VALUE,
-                    "Cannot decode the provided entry change notification " +
-                    "control because an error occurred while attempting to " +
-                    "decode the control value:  %s");
-
-
-    registerMessage(MSGID_AUTHZIDRESP_NO_CONTROL_VALUE,
-                    "Cannot decode the provided authorization identity " +
-                    "response control because it does not have a value");
-
-
-    registerMessage(MSGID_LDAP_INTERMEDIATE_RESPONSE_DECODE_SEQUENCE,
-                    "Cannot decode the provided ASN.1 element as an LDAP " +
-                    "intermediate response protocol op because the element " +
-                    "could not be decoded as a sequence:  %s");
-    registerMessage(
-         MSGID_LDAP_INTERMEDIATE_RESPONSE_DECODE_INVALID_ELEMENT_COUNT,
-         "Cannot decode the provided ASN.1 element as an LDAP intermediate " +
-         "response protocol op because the request sequence had an invalid " +
-         "number of elements (expected 0, 1, or or 2, got %d)");
-    registerMessage(MSGID_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_OID,
-                    "An error occurred while attempting to decode the " +
-                    "intermediate response OID:  %s");
-    registerMessage(MSGID_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_VALUE,
-                    "An error occurred while attempting to decode the " +
-                    "intermediate response value:  %s");
-    registerMessage(MSGID_LDAP_INTERMEDIATE_RESPONSE_INVALID_ELEMENT_TYPE,
-                    "The intermediate response sequence element contained " +
-                    "an invalid BER type %s that was not appropriate for " +
-                    "either the OID or the value");
-
-
-    registerMessage(MSGID_MVFILTER_INVALID_LDAP_FILTER_TYPE,
-                    "The provided LDAP filter \"%s\" cannot be used as a " +
-                    "matched values filter because filters of type %s are " +
-                    "not allowed for use in matched values filters");
-    registerMessage(MSGID_MVFILTER_INVALID_DN_ATTRIBUTES_FLAG,
-                    "The provided LDAP filter \"%s\" cannot be used as a " +
-                    "matched values filter because it is an extensible " +
-                    "match filter that contains the dnAttributes flag, which " +
-                    "is not allowed for matched values filters");
-    registerMessage(MSGID_MVFILTER_INVALID_AVA_SEQUENCE_SIZE,
-                    "The provided matched values filter could not be decoded " +
-                    "because there were an invalid number of elements in the " +
-                    "attribute value assertion (expected 2, got %d)");
-    registerMessage(MSGID_MVFILTER_CANNOT_DECODE_AVA,
-                    "An error occurred while attempting to decode the " +
-                    "attribute value assertion in the provided matched " +
-                    "values filter:  %s");
-    registerMessage(MSGID_MVFILTER_INVALID_SUBSTRING_SEQUENCE_SIZE,
-                    "The provided matched values filter could not be decoded " +
-                    "because there were an invalid number of elements " +
-                    "in the substring sequence (expected 2, got %d)");
-    registerMessage(MSGID_MVFILTER_NO_SUBSTRING_ELEMENTS,
-                    "The provided matched values filter could not be decoded " +
-                    "because there were no subInitial, subAny, or subFinal " +
-                    "components in the substring filter");
-    registerMessage(MSGID_MVFILTER_MULTIPLE_SUBINITIALS,
-                    "The provided matched values filter could not be decoded " +
-                    "because there were multiple subInitial components in " +
-                    "the substring filter");
-    registerMessage(MSGID_MVFILTER_MULTIPLE_SUBFINALS,
-                    "The provided matched values filter could not be decoded " +
-                    "because there were multiple subFinal components in " +
-                    "the substring filter");
-    registerMessage(MSGID_MVFILTER_INVALID_SUBSTRING_ELEMENT_TYPE,
-                    "The provided matched values filter could not be decoded " +
-                    "because there was an invalid element of type %s in the " +
-                    "substring filter");
-    registerMessage(MSGID_MVFILTER_CANNOT_DECODE_SUBSTRINGS,
-                    "The provided matched values filter could not be decoded " +
-                    "because an error occurred while decoding the " +
-                    "substring filter component:  %s");
-    registerMessage(MSGID_MVFILTER_CANNOT_DECODE_PRESENT_TYPE,
-                    "The provided matched values filter could not be decoded " +
-                    "because an error occurred while decoding the presence " +
-                    "filter component:  %s");
-    registerMessage(MSGID_MVFILTER_INVALID_EXTENSIBLE_SEQUENCE_SIZE,
-                    "The provided matched values filter could not be decoded " +
-                    "because there were an invalid number of elements in the " +
-                    "extensible match sequence (expected 2 or 3, found %d)");
-    registerMessage(MSGID_MVFILTER_MULTIPLE_MATCHING_RULE_IDS,
-                    "The provided matched values filter could not be decoded " +
-                    "because there were multiple matching rule ID elements " +
-                    "found in the extensible match filter sequence");
-    registerMessage(MSGID_MVFILTER_MULTIPLE_ATTRIBUTE_TYPES,
-                    "The provided matched values filter could not be decoded " +
-                    "because there were multiple attribute type elements " +
-                    "found in the extensible match filter sequence");
-    registerMessage(MSGID_MVFILTER_MULTIPLE_ASSERTION_VALUES,
-                    "The provided matched values filter could not be decoded " +
-                    "because there were multiple assertion value elements " +
-                    "found in the extensible match filter sequence");
-    registerMessage(MSGID_MVFILTER_INVALID_EXTENSIBLE_ELEMENT_TYPE,
-                    "The provided matched values filter could not be decoded " +
-                    "because there was an invalid element of type %s in the " +
-                    "extensible match filter");
-    registerMessage(MSGID_MVFILTER_CANNOT_DECODE_EXTENSIBLE_MATCH,
-                    "The provided matched values filter could not be decoded " +
-                    "because an error occurred while decoding the extensible " +
-                    "match filter component:  %s");
-    registerMessage(MSGID_MVFILTER_INVALID_ELEMENT_TYPE,
-                    "The provided matched values filter could not be decoded " +
-                    "because it had an invalid BER type of %s");
-
-
-    registerMessage(MSGID_MATCHEDVALUES_NO_CONTROL_VALUE,
-                    "Cannot decode the provided matched values control "+
-                    "because it does not have a value");
-    registerMessage(MSGID_MATCHEDVALUES_CANNOT_DECODE_VALUE_AS_SEQUENCE,
-                    "Cannot decode the provided matched values control " +
-                    "because an error occurred while attempting to decode " +
-                    "the value as an ASN.1 sequence:  %s");
-    registerMessage(MSGID_MATCHEDVALUES_NO_FILTERS,
-                    "Cannot decode the provided matched values control " +
-                    "because the control value does not specify any filters " +
-                    "for use in matching attribute values");
-
-
-    registerMessage(MSGID_PWEXPIRED_CONTROL_INVALID_VALUE,
-                    "Cannot decode the provided control as a password " +
-                    "expired control because the provided control had a " +
-                    "value that could not be parsed as an integer");
-
-
-    registerMessage(MSGID_PWEXPIRING_NO_CONTROL_VALUE,
-                    "Cannot decode the provided password expiring control "+
-                    "because it does not have a value");
-    registerMessage(MSGID_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION,
-                    "Cannot decode the provided control as a password " +
-                    "expiring control because an error occurred while " +
-                    "attempting to decode the number of seconds until " +
-                    "expiration:  %s");
-
-
-    registerMessage(MSGID_JMX_CONNHANDLER_DESCRIPTION_LISTEN_PORT,
-            "Specifies the TCP port on which this connection handler " +
-            "may accept administrative connections.  Changes to this " +
-            "configuration attribute will not take effect until the " +
-            "connection handler is disabled and re-enabled, or until " +
-            "the Directory Server is restarted");
-    registerMessage(MSGID_JMX_CONNHANDLER_DESCRIPTION_ENABLE,
-            "Specifies whether to enable the JMX connection " +
-            "handler");
-    registerMessage(MSGID_JMX_CONNHANDLER_NO_LISTEN_PORT,
-            "No listen port was defined using configuration " +
-            ATTR_LISTEN_PORT + " in configuration entry %s.  This is " +
-            "a required attribute");
-    registerMessage(MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_LISTEN_PORT,
-            "An unexpected error occurred while processing the " +
-            ATTR_LISTEN_PORT + " attribute in configuration entry " +
-            "%s, which is used to specify the port on which to " +
-            "listen for client connections:  %s");
-    registerMessage(MSGID_JMX_CONNHANDLER_DESCRIPTION_USE_SSL,
-            "Indicates whether this connection handler should use " +
-            "SSL when accepting connections from clients.  Changes " +
-            "to this configuration attribute will not take effect " +
-            "until the connection handler is disabled and " +
-            "re-enabled, or until the Directory Server is restarted");
-    registerMessage(MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_USE_SSL,
-            "An unexpected error occurred while processing the " +
-            ATTR_USE_SSL + " attribute in configuration entry %s, " +
-            "which is used to indicate whether to use SSL when " +
-            "accepting client connections:  %s");
-    registerMessage(MSGID_JMX_CONNHANDLER_CANNOT_BIND,
-            "The JMX connection handler defined in configuration entry %s " +
-            "was unable to bind to port %d:  %s");
-    registerMessage(MSGID_JMX_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME,
-            "Specifies the nickname of the certificate that the " +
-            "connection handler should use when accepting SSL-based " +
-            "connections or performing StartTLS negotiation.  " +
-            "Changes to this configuration attribute will not take " +
-            "effect until the connection handler is disabled and " +
-            "re-enabled, or until the Directory Server is restarted");
-    registerMessage(MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_SSL_CERT_NICKNAME,
-            "An unexpected error occurred while processing the " +
-            ATTR_SSL_CERT_NICKNAME + " attribute in configuration " +
-            "entry %s, which is used to specify the nickname of the " +
-            "certificate to use for accepting SSL/TSL connections:  " +
-            "%s");
-    registerMessage(MSGID_JMX_CONNHANDLER_DESCRIPTION_KEYMANAGER_DN,
-            "Specifies the DN of the key manager provider that the " +
-            "connection handler should use when accepting SSL-based " +
-            "connections or performing StartTLS negotiation.  " +
-            "Changes to this configuration attribute will take effect " +
-            "immediately");
-    registerMessage(MSGID_JMX_CONNHANDLER_INVALID_KEYMANAGER_DN,
-            "An error occurred while processing the " + ATTR_KEYMANAGER_DN +
-            " attribute in configuration entry %s, because the provided " +
-            "key manager DN %s does not refer to an enabled key manager " +
-            "provider");
-    registerMessage(MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_KEYMANAGER_DN,
-            "An unexpected error occurred while processing the " +
-            ATTR_KEYMANAGER_DN + " attribute in configuration " +
-            "entry %s, which is used to specify the DN of the key manager " +
-            "provider to use for accepting SSL/TSL connections:  %s");
-    registerMessage(MSGID_JMX_ADD_INSUFFICIENT_PRIVILEGES,
-            "You do not have sufficient privileges to perform add " +
-            "operations through JMX");
-    registerMessage(MSGID_JMX_DELETE_INSUFFICIENT_PRIVILEGES,
-            "You do not have sufficient privileges to perform delete " +
-            "operations through JMX");
-    registerMessage(MSGID_JMX_MODIFY_INSUFFICIENT_PRIVILEGES,
-            "You do not have sufficient privileges to perform modify " +
-             "operations through JMX");
-    registerMessage(MSGID_JMX_MODDN_INSUFFICIENT_PRIVILEGES,
-            "You do not have sufficient privileges to perform modify " +
-            "DN operations through JMX");
-    registerMessage(MSGID_JMX_SEARCH_INSUFFICIENT_PRIVILEGES,
-            "You do not have sufficient privileges to perform search " +
-            "operations through JMX");
-    registerMessage(MSGID_JMX_INSUFFICIENT_PRIVILEGES,
-            "You do not have sufficient privileges to establish the " +
-            "connection through JMX. At least JMX_READ privilege is required");
-
-    registerMessage(MSGID_PWPOLICYREQ_CONTROL_HAS_VALUE,
-                    "Cannot decode the provided control as a password policy " +
-                    "request control because the provided control had a " +
-                    "value but the password policy request control should " +
-                    "not have a value");
-
-
-    registerMessage(MSGID_PWPOLICYRES_NO_CONTROL_VALUE,
-                    "Cannot decode the provided password policy response " +
-                    "control because it does not have a value");
-    registerMessage(MSGID_PWPOLICYRES_INVALID_WARNING_TYPE,
-                    "Cannot decode the provided password policy response " +
-                    "control because the warning element has an invalid " +
-                    "type of %s");
-    registerMessage(MSGID_PWPOLICYRES_INVALID_ERROR_TYPE,
-                    "Cannot decode the provided password policy response " +
-                    "control because the error element has an invalid type " +
-                    "of %d");
-    registerMessage(MSGID_PWPOLICYRES_INVALID_ELEMENT_TYPE,
-                    "Cannot decode the provided password policy response " +
-                    "control because the value sequence has an element with " +
-                    "an invalid type of %s");
-    registerMessage(MSGID_PWPOLICYRES_DECODE_ERROR,
-                    "Cannot decode the provided password policy response " +
-                    "control:  %s");
-
-
-    registerMessage(MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_EXPIRED,
-                    "passwordExpired");
-    registerMessage(MSGID_PWPERRTYPE_DESCRIPTION_ACCOUNT_LOCKED,
-                    "accountLocked");
-    registerMessage(MSGID_PWPERRTYPE_DESCRIPTION_CHANGE_AFTER_RESET,
-                    "changeAfterReset");
-    registerMessage(MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_MOD_NOT_ALLOWED,
-                    "passwordModNotAllowed");
-    registerMessage(MSGID_PWPERRTYPE_DESCRIPTION_MUST_SUPPLY_OLD_PASSWORD,
-                    "mustSupplyOldPassword");
-    registerMessage(MSGID_PWPERRTYPE_DESCRIPTION_INSUFFICIENT_PASSWORD_QUALITY,
-                    "insufficientPasswordQuality");
-    registerMessage(MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_SHORT,
-                    "passwordTooShort");
-    registerMessage(MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_TOO_YOUNG,
-                    "passwordTooYoung");
-    registerMessage(MSGID_PWPERRTYPE_DESCRIPTION_PASSWORD_IN_HISTORY,
-                    "passwordInHistory");
-
-
-    registerMessage(MSGID_PWPWARNTYPE_DESCRIPTION_TIME_BEFORE_EXPIRATION,
-                    "timeBeforeExpiration");
-    registerMessage(MSGID_PWPWARNTYPE_DESCRIPTION_GRACE_LOGINS_REMAINING,
-                    "graceAuthNsRemaining");
-
-
-    registerMessage(MSGID_ACCTUSABLEREQ_CONTROL_HAS_VALUE,
-                    "Cannot decode the provided control as an account " +
-                    "availability request control because the provided " +
-                    "control had a value but the account availability " +
-                    "request control should not have a value");
-
-
-    registerMessage(MSGID_ACCTUSABLERES_NO_CONTROL_VALUE,
-                    "Cannot decode the provided account availability " +
-                    "response control because it does not have a value");
-    registerMessage(MSGID_ACCTUSABLERES_UNKNOWN_UNAVAILABLE_TYPE,
-                    "The account availability response control indicated " +
-                    "that the account was unavailable but had an unknown " +
-                    "unavailable element type of %s");
-    registerMessage(MSGID_ACCTUSABLERES_UNKNOWN_VALUE_ELEMENT_TYPE,
-                    "The account availability response control had an " +
-                    "unknown ACCOUNT_USABLE_RESPONSE element type of %s");
-    registerMessage(MSGID_ACCTUSABLERES_DECODE_ERROR,
-            "Cannot decode the provided account availability " +
-            "response control:  %s");
-    registerMessage(MSGID_ADDRESSMASK_PREFIX_DECODE_ERROR,
-            "Cannot decode the provided address mask prefix because an" +
-            "invalid value was specified. The permitted values for IPv4" +
-            "are 0 to32 and for IPv6 0 to128");
-    registerMessage(MSGID_ADDRESSMASK_WILDCARD_DECODE_ERROR,
-            "Cannot decode the provided address mask because an prefix mask"+
-            "was specified with an wild card \"*\" match character");
-    registerMessage(MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR,
-            "Cannot decode the provided address mask because the it has an " +
-            "invalid format");
-
-
-    registerMessage(MSGID_SORTREQ_CONTROL_NO_VALUE,
-                    "Unable to decode the provided control as a server-side " +
-                    "sort request control because it does not include a " +
-                    "control value");
-    registerMessage(MSGID_SORTREQ_CONTROL_UNDEFINED_ATTR,
-                    "Unable to process the provided server-side sort " +
-                    "request control because it references attribute " +
-                    "type %s which is not defined in the server schema");
-    registerMessage(MSGID_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE,
-                    "Unable to process the provided server-side sort request " +
-                    "control because it references undefined ordering " +
-                    "matching rule %s");
-    registerMessage(MSGID_SORTREQ_CONTROL_INVALID_SEQ_ELEMENT_TYPE,
-                    "Unable to process the provided server-side sort request " +
-                    "control because the value sequence contains an element " +
-                    "with an unsupported type of %s");
-    registerMessage(MSGID_SORTREQ_CONTROL_CANNOT_DECODE_VALUE,
-                    "Unable to process the provided server-side sort request " +
-                    "control because an error occurred while attempting to " +
-                    "decode the control value:  %s");
-    registerMessage(MSGID_SORTREQ_CONTROL_NO_ATTR_NAME,
-                    "Unable to process the provided server-side sort " +
-                    "request control because the sort order string \"%s\" " +
-                    "included a sort key with no attribute name");
-    registerMessage(MSGID_SORTREQ_CONTROL_NO_MATCHING_RULE,
-                    "Unable to process the provided server-side sort " +
-                    "request control because the sort order string \"%s\" " +
-                    "included a sort key with a colon but no matching rule " +
-                    "name");
-    registerMessage(MSGID_SORTREQ_CONTROL_NO_SORT_KEYS,
-                    "Unable to process the provided server-side sort " +
-                    "request control because it did not contain any sort keys");
-    registerMessage(MSGID_SORTREQ_CONTROL_NO_ORDERING_RULE_FOR_ATTR,
-                    "Unable to process the provided server-side sort " +
-                    "request control because it included attribute %s which " +
-                    "does not have a default ordering matching rule and no " +
-                    "ordering rule was specified in the sort key");
-
-
-    registerMessage(MSGID_SORTRES_CONTROL_NO_VALUE,
-                    "Unable to decode the provided control as a server-side " +
-                    "sort response control because it does not include a " +
-                    "control value");
-    registerMessage(MSGID_SORTRES_CONTROL_CANNOT_DECODE_VALUE,
-                    "Unable to process the provided server-side sort " +
-                    "response control because an error occurred while " +
-                    "attempting to decode the control value:  %s");
-
-
-    registerMessage(MSGID_VLVREQ_CONTROL_NO_VALUE,
-                    "Unable to decode the provided control as a VLV request " +
-                    "control because it does not include a control value");
-    registerMessage(MSGID_VLVREQ_CONTROL_INVALID_ELEMENT_COUNT,
-                    "Unable to decode the provided control as a VLV request " +
-                    "control because it contains an invalid number of " +
-                    "elements:  %d");
-    registerMessage(MSGID_VLVREQ_CONTROL_INVALID_TARGET_TYPE,
-                    "Unable to decode the provided control as a VLV request " +
-                    "control because the target element type %s is invalid");
-    registerMessage(MSGID_VLVREQ_CONTROL_CANNOT_DECODE_VALUE,
-                    "Unable to process the provided VLV request control " +
-                    "because an error occurred while attempting to decode " +
-                    "the control value:  %s");
-
-
-    registerMessage(MSGID_VLVRES_CONTROL_NO_VALUE,
-                    "Unable to decode the provided control as a VLV response " +
-                    "control because it does not include a control value");
-    registerMessage(MSGID_VLVRES_CONTROL_INVALID_ELEMENT_COUNT,
-                    "Unable to decode the provided control as a VLV response " +
-                    "control because it contains an invalid number of " +
-                    "elements:  %d");
-    registerMessage(MSGID_VLVRES_CONTROL_CANNOT_DECODE_VALUE,
-                    "Unable to process the provided VLV response control " +
-                    "because an error occurred while attempting to decode " +
-                    "the control value:  %s");
-
-
-    registerMessage(MSGID_GETEFFECTIVERIGHTS_INVALID_AUTHZID,
-                    "The authorization ID \"%s\" contained in the " +
-                     "geteffectiverights control is invalid because it does" +
-                     " not start with \"dn:\" to indicate a user DN");
-    registerMessage(MSGID_GETEFFECTIVERIGHTS_DECODE_ERROR,
-                    "Cannot decode the provided geteffectiverights " +
-                    "request control:  %s");
-    registerMessage(MSGID_CANNOT_DECODE_GETEFFECTIVERIGHTS_AUTHZID_DN,
-                    "Unable to decode authzid DN string \"%s\" as a valid " +
-                    "distinguished name:  %s");
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/ReplicationMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/ReplicationMessages.java
deleted file mode 100644
index 388a21b..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/ReplicationMessages.java
+++ /dev/null
@@ -1,652 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-import static org.opends.server.messages.MessageHandler.*;
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the Replication.
- */
-public class ReplicationMessages {
-
-  /**
-   * Name used to store attachment of historical information in the
-   * operation.
-   */
-  public static final String HISTORICAL = "ds-synch-historical";
-
-  /**
-   * Invalid DN.
-   */
-  public static final int MSGID_SYNC_INVALID_DN =
-       CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 1;
-
-  /**
-   * Invalid Changelog Server.
-   */
-  public static final int MSGID_INVALID_CHANGELOG_SERVER =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 4;
-
-  /**
-   * Unknown hostname.
-   */
-  public static final int MSGID_UNKNOWN_HOSTNAME =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 5;
-
-  /**
-   * Could not connect to any changelog server.
-   */
-  public static final int MSGID_COULD_NOT_BIND_CHANGELOG =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 6;
-
-  /**
-   * Unknown Operation type.
-   */
-  public static final int MSGID_UNKNOWN_TYPE =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 7;
-
-  /**
-   * Error while replaying an operation.
-   */
-  public static final int MSGID_ERROR_REPLAYING_OPERATION =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 8;
-
-  /**
-   * Operation was not found in Pending List during Post-Operation processing.
-   */
-  public static final int MSGID_OPERATION_NOT_FOUND_IN_PENDING =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 9;
-
-  /**
-   * Unable to open changelog database.
-   */
-  public static final int MSGID_COULD_NOT_INITIALIZE_DB =
-   CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 10;
-
-  /**
-   * Unable to read changelog database.
-   */
-  public static final int MSGID_COULD_NOT_READ_DB =
-   CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 11;
-
-  /**
-   * Exception while replaying an operation.
-   */
-  public static final int MSGID_EXCEPTION_REPLAYING_OPERATION =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 12;
-
-  /**
-   * Need to have a Changelog port.
-   */
-  public static final int MSGID_NEED_CHANGELOG_PORT =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 13;
-
-  /**
-   * Error while updating the ruv.
-   */
-  public static final int MSGID_ERROR_UPDATING_RUV =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 14;
-
-  /**
-   * Error while searching the ruv.
-   */
-  public static final int MSGID_ERROR_SEARCHING_RUV =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 15;
-
-  /**
-   * A server disconnected from the changelog server.
-   * (this is an informational message)
-   */
-  public static final int MSGID_SERVER_DISCONNECT =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 16;
-
-  /**
-   * There is no server listening on this host:port.
-   * (this is an informational message)
-   */
-  public static final int MSGID_NO_CHANGELOG_SERVER_LISTENING =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 17;
-
-  /**
-   * Tried to connect to a changelog server that does not have
-   * all the changes that we have.
-   * Try another one.
-   */
-  public static final int MSGID_CHANGELOG_MISSING_CHANGES =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 18;
-
-  /**
-   * Only one changelog server is configured.
-   * If this server fails the LDAP server will not be able to
-   * process updates anymore.
-   */
-  public static final int MSGID_NEED_MORE_THAN_ONE_CHANGELOG_SERVER =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 19;
-
-  /**
-   * An Exception happened during connection to a changelog server.
-   */
-  public static final int MSGID_EXCEPTION_STARTING_SESSION =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 20;
-
-  /**
-   * The internal search operation used to find old changes
-   * caused an error.
-   */
-  public static final int MSGID_CANNOT_RECOVER_CHANGES =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 21;
-
-  /**
-   * When trying to find a changelog sever, it was detected that
-   * none of the Changelog server has seen all the operations
-   * that this server has already processed.
-   */
-  public static final int MSGID_COULD_NOT_FIND_CHANGELOG_WITH_MY_CHANGES =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 22;
-
-  /**
-   * Could not find any working changelog server.
-   */
-  public static final int MSGID_COULD_NOT_FIND_CHANGELOG =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 23;
-
-  /**
-   * Exception closing changelog database.
-   */
-  public static final int MSGID_EXCEPTION_CLOSING_DATABASE =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 24;
-
-  /**
-   * Error Decoding message during operation replay.
-   */
-  public static final int MSGID_EXCEPTION_DECODING_OPERATION =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 25;
-
-  /**
-   * Database Exception in the Chanlog service causing the
-   * changelog to shutdown.
-   */
-  public static final int MSGID_CHANGELOG_SHUTDOWN_DATABASE_ERROR =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_FATAL_ERROR | 26;
-
-  /**
-   * Database Exception in the Chanlog service causing the
-   * changelog to shutdown.
-   */
-  public static final int MSGID_IGNORE_BAD_DN_IN_DATABASE_IDENTIFIER =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 27;
-
-  /**
-   * Database Exception closing the Changelog Environement.
-   */
-  public static final int MSGID_ERROR_CLOSING_CHANGELOG_ENV =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 28;
-
-  /**
-   * Exception during the database trimming or flush.
-   */
-  public static final int MSGID_EXCEPTION_CHANGELOG_TRIM_FLUSH =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 29;
-
-  /**
-   * Error processing changelog message.
-   */
-  public static final int MSGID_CHANGELOG_CONNECTION_ERROR =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 30;
-
-  /**
-   * Remote server has sent an unknown message.
-   */
-  public static final int MSGID_UNKNOWN_MESSAGE =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 31;
-
-  /**
-   * Remote server has sent an unknown message.
-   */
-  public static final int MSGID_WRITER_UNEXPECTED_EXCEPTION =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 32;
-
-  /**
-   * Remote server has sent an unknown message.
-   */
-  public static final int MSGID_CHANGELOG_ERROR_SENDING_ACK =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 33;
-
-  /**
-   * Exception while receiving a message.
-   */
-  public static final int MSGID_EXCEPTION_RECEIVING_REPLICATION_MESSAGE =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 34;
-
-  /**
-   * Loop detected while replaying an operation.  This message takes one
-   * string argument containing details of the operation that could not be
-   * replayed.
-   */
-  public static final int MSGID_LOOP_REPLAYING_OPERATION =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 35;
-
-  /**
-   * Failure when test existence or try to create directory
-   * for the changelog database.  This message takes one
-   * string argument containing details of the exception
-   * and path of the directory.
-   */
-  public static final int MSGID_FILE_CHECK_CREATE_FAILED =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_MILD_ERROR | 36;
-
-  /**
-   * The message ID for the description of the attribute used to specify the
-   * list of other Changelog Servers in the Changelog Server
-   * Configuration.
-   */
-  public static final int MSGID_CHANGELOG_SERVER_ATTR =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_INFORMATIONAL | 37;
-
-  /**
-   * The message ID for the description of the attribute used to specify
-   * the identifier of the Changelog Server.
-   */
-  public static final int MSGID_SERVER_ID_ATTR =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_INFORMATIONAL | 38;
-
-  /**
-   * The message id for the description of the attribute used to specify
-   * the port number of the Changelog Server.
-   */
-  public static final int MSGID_CHANGELOG_PORT_ATTR =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_INFORMATIONAL | 39;
-
-  /**
-   * The message id for the description of the attribute used to specify
-   * the receive Window Size used by a Changelog Server.
-   */
-  public static final int MSGID_WINDOW_SIZE_ATTR =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_INFORMATIONAL | 40;
-
-  /**
-   * The message id for thedescription of the  attribute used to specify
-   * the maximum queue size used by a Changelog Server.
-   */
-  public static final int MSGID_QUEUE_SIZE_ATTR =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_INFORMATIONAL | 41;
-
-  /**
-   * The message id for the Attribute used to specify the directory where the
-   * persistent storage of the Changelog server will be saved.
-   */
-  public static final int MSGID_CHANGELOG_DIR_PATH_ATTR =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_INFORMATIONAL | 42;
-
-  /**
-   * The message id for the description of the attribute used to configure
-   * the purge delay of the Changelog Servers.
-   */
-  public static final int MSGID_PURGE_DELAY_ATTR =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_INFORMATIONAL | 43;
-
-  /**
-   * The message id for the error raised when export/import
-   * is rejected due to an export/import already in progress.
-   */
-  public static final int MSGID_SIMULTANEOUS_IMPORT_EXPORT_REJECTED =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 44;
-
-  /**
-   * The message id for the error raised when import
-   * is rejected due to an invalid source of data imported.
-   */
-  public static final int MSGID_INVALID_IMPORT_SOURCE =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 45;
-
-  /**
-   * The message id for the error raised when export
-   * is rejected due to an invalid target to export datas.
-   */
-  public static final int MSGID_INVALID_EXPORT_TARGET =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 46;
-
-  /**
-   * The message id for the error raised when import/export message
-   * cannot be routed to an up-and-running target in the domain.
-   */
-  public static final int MSGID_NO_REACHABLE_PEER_IN_THE_DOMAIN =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 47;
-
-  /**
-   * The message ID for the message that will be used when no domain
-   * can be found matching the provided domain base DN.
-   */
-  public static final int  MSGID_NO_MATCHING_DOMAIN =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 48;
-
-  /**
-   * The message ID for the message that will be used when no domain
-   * can be found matching the provided domain base DN.
-   */
-  public static final int  MSGID_MULTIPLE_MATCHING_DOMAIN
-       = CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 49;
-
-
-  /**
-   * The message ID for the message that will be used when the domain
-   * belongs to a provider class that does not allow the export.
-   */
-  public static final int  MSGID_INVALID_PROVIDER =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 50;
-
-  /**
-   * The message ID for the message that will be used when
-   * a replication server hostname cannot be resolved as an IP address.
-   */
-  public static final int  MSGID_COULD_NOT_SOLVE_HOSTNAME =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 51;
-
-  /**
-   * A replication server received a null messsage from
-   * another server.
-   */
-  public static final int MSGID_READER_NULL_MSG =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 52;
-
-  /**
-   * A server disconnected from the replication server.
-   * (this is an informational message)
-   */
-  public static final int MSGID_READER_EXCEPTION =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 53;
-
-  /**
-   * A replication server received a null messsage from
-   * another server.
-   */
-  public static final int MSGID_DUPLICATE_SERVER_ID =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 54;
-
-  /**
-   * A server disconnected from the replication server.
-   * (this is an informational message)
-   */
-  public static final int MSGID_DUPLICATE_REPLICATION_SERVER_ID =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 55;
-
-  /**
-   * Some bad historical information was found in an entry.
-   */
-  public static final int MSGID_BAD_HISTORICAL =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 56;
-
-  /**
-   * Could not add the conflict attribute to an entry after a conflict was
-   * deteceted.
-   */
-  public static final int MSGID_CANNOT_ADD_CONFLICT_ATTRIBUTE =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 57;
-
-  /**
-   * Could not rename a conflicting entry.
-   */
-  public static final int MSGID_CANNOT_RENAME_CONFLICT_ENTRY =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 58;
-
-  /**
-   * Exception during rename of a conflicting entry.
-   */
-  public static final int MSGID_EXCEPTION_RENAME_CONFLICT_ENTRY =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 59;
-
-  /**
-   * The JVM does not support UTF8. This is required to serialize
-   * the changes and store them in the database.
-   */
-  public static final int MSGID_CHANGELOG_UNSUPPORTED_UTF8_ENCODING =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 60;
-
-  /**
-   * An update operation is aborted on error because the replication
-   * is defined but the replicationDomain could not contact any
-   * of the ReplicationServer.
-   */
-  public static final int MSGID_REPLICATION_COULD_NOT_CONNECT =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 61;
-
-  /**
-   * After a failure to connect to any replication server the
-   * replication was finally able to connect.
-   */
-  public static final int MSGID_NOW_FOUND_CHANGELOG =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 62;
-
-
-  /**
-   * The connection to the curent Replication Server has failed.
-   */
-  public static final int MSGID_DISCONNECTED_FROM_CHANGELOG =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_NOTICE | 63;
-
-  /**
-   * An error happened to send a ReplServerInfoMessage to another
-   * replication server.
-   */
-  public static final int MSGID_CHANGELOG_ERROR_SENDING_INFO =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 64;
-
-  /**
-   * An error happened to send an ErrorMessage to another
-   * replication server.
-   */
-  public static final int MSGID_CHANGELOG_ERROR_SENDING_ERROR =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 65;
-
-  /**
-   * An error happened to send a Message (probably a RoutableMessage)
-   * to another replication server.
-   */
-  public static final int MSGID_CHANGELOG_ERROR_SENDING_MSG =
-    CATEGORY_MASK_SYNC | SEVERITY_MASK_SEVERE_ERROR | 66;
-
-  /**
-   * Register the messages from this class in the core server.
-   *
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_SYNC_INVALID_DN,
-       "The configured DN is already used by another domain");
-    registerMessage(MSGID_INVALID_CHANGELOG_SERVER,
-        "Invalid replication server configuration");
-    registerMessage(MSGID_UNKNOWN_HOSTNAME,
-        "Changelog failed to start because the hostname is unknown");
-    registerMessage(MSGID_COULD_NOT_BIND_CHANGELOG,
-        "Changelog failed to start :" +
-        " could not bind to the changelog listen port : %d. Error : %s");
-    registerMessage(MSGID_UNKNOWN_TYPE,
-        "Unknown operation type : %s");
-    registerMessage(MSGID_ERROR_REPLAYING_OPERATION,
-        "Error %s when replaying operation with changenumber %s %s : %s");
-    registerMessage(MSGID_OPERATION_NOT_FOUND_IN_PENDING,
-        "Internal Error : Operation %s change number %s" +
-        " was not found in pending list");
-    registerMessage(MSGID_COULD_NOT_INITIALIZE_DB,
-        "Changelog failed to start " +
-        "because the database %s could not be opened");
-    registerMessage(MSGID_COULD_NOT_READ_DB,
-        "Changelog failed to start " +
-        "because the database %s could not be read");
-    registerMessage(MSGID_EXCEPTION_REPLAYING_OPERATION,
-         "An Exception was caught while replaying operation %s : %s");
-    registerMessage(MSGID_NEED_CHANGELOG_PORT,
-         "The replication server port must be defined");
-    registerMessage(MSGID_ERROR_UPDATING_RUV,
-         "Error %s when updating server state %s : %s base dn : %s");
-    registerMessage(MSGID_ERROR_SEARCHING_RUV,
-         "Error %s when searching for server state %s : %s base dn : %s");
-    registerMessage(MSGID_SERVER_DISCONNECT,
-         "%s has disconnected from this replication server");
-    registerMessage(MSGID_NO_CHANGELOG_SERVER_LISTENING,
-         "There is no replication server listening on %s");
-    registerMessage(MSGID_CHANGELOG_MISSING_CHANGES,
-        "The replication server %s is missing some changes that this server" +
-        " has already processed");
-    registerMessage(MSGID_NEED_MORE_THAN_ONE_CHANGELOG_SERVER,
-        "More than one replication server should be configured");
-    registerMessage(MSGID_EXCEPTION_STARTING_SESSION,
-        "Caught Exception during initial communication with " +
-        "replication server : ");
-    registerMessage(MSGID_CANNOT_RECOVER_CHANGES,
-        "Error when searching old changes from the database. ");
-    registerMessage(
-        MSGID_COULD_NOT_FIND_CHANGELOG_WITH_MY_CHANGES,
-        "Could not find a replication server that has seen all the local" +
-        " changes. Going to replay changes");
-    registerMessage(MSGID_COULD_NOT_FIND_CHANGELOG,
-        "Could not connect to any replication server on suffix %s, "
-        +"retrying...");
-    registerMessage(MSGID_EXCEPTION_CLOSING_DATABASE,
-        "Error closing changelog database %s : ");
-    registerMessage(MSGID_EXCEPTION_DECODING_OPERATION,
-        "Error trying to replay %s, operation could not be decoded : ");
-    registerMessage(MSGID_CHANGELOG_SHUTDOWN_DATABASE_ERROR,
-        "Error Trying to use the underlying database. " +
-        "The Changelog Service is going to shut down. ");
-    registerMessage(MSGID_IGNORE_BAD_DN_IN_DATABASE_IDENTIFIER,
-        "A badly formatted DN was found in the list of database known " +
-        "By this changelog service :%s. This Identifier will be ignored. ");
-    registerMessage(MSGID_ERROR_CLOSING_CHANGELOG_ENV,
-        "Error closing the changelog database : ");
-    registerMessage(MSGID_EXCEPTION_CHANGELOG_TRIM_FLUSH,
-        "Error during the changelog database trimming or flush process." +
-        " The Changelog service is going to shutdown. ");
-    registerMessage(MSGID_CHANGELOG_CONNECTION_ERROR,
-        "Error during Changelog service message processing ." +
-        " Connection from %s is rejected. ");
-    registerMessage(MSGID_UNKNOWN_MESSAGE,
-        "%s has sent an unknown message. Closing the connection. ");
-    registerMessage(MSGID_WRITER_UNEXPECTED_EXCEPTION,
-        "An unexpected error happened handling connection with %s." +
-        "This connection is going to be closed. ");
-    registerMessage(MSGID_CHANGELOG_ERROR_SENDING_ACK,
-        "An unexpected error occurred  while sending an ack to %s." +
-        "This connection is going to be closed and reopened. ");
-    registerMessage(
-        MSGID_EXCEPTION_RECEIVING_REPLICATION_MESSAGE,
-        "An Exception was caught while receiving replication message : %s");
-    registerMessage(MSGID_LOOP_REPLAYING_OPERATION,
-        "A loop was detected while replaying operation: %s");
-    registerMessage(MSGID_FILE_CHECK_CREATE_FAILED,
-        "An Exception was caught while testing existence or trying " +
-        " to create the directory for the changelog database : %s");
-    registerMessage(MSGID_CHANGELOG_SERVER_ATTR,
-        "Specifies the list of replication servers to which this" +
-        " replication server should connect. Each value of this attribute" +
-        " should contain a values build with the hostname and the port" +
-        " number of the remote server separated with a \":\"");
-    registerMessage(MSGID_SERVER_ID_ATTR,
-        "Specifies the server ID. Each replication server in the topology" +
-        " Must be assigned a unique server ID in the topology");
-    registerMessage(MSGID_CHANGELOG_PORT_ATTR,
-        "Specifies the port number that the replication server will use to" +
-        " listen for connections from LDAP servers");
-    registerMessage(MSGID_WINDOW_SIZE_ATTR,
-        "Specifies the receive window size of the replication server");
-    registerMessage(MSGID_QUEUE_SIZE_ATTR,
-        "Specifies the receive queue size of the replication server." +
-        " The replication servers will queue up to this number of messages" +
-        " in its memory queue and save the older messages to persistent" +
-        " storage. Using a larger size may improve performances when" +
-        " The replication delay is larger than this size but at the cost" +
-        " of using more memory");
-    registerMessage(MSGID_CHANGELOG_DIR_PATH_ATTR,
-        "Specifies the replication server directory. The replication server" +
-        " will create all persistent storage below this path");
-    registerMessage(MSGID_PURGE_DELAY_ATTR,
-        "Specifies the Changelog Purge Delay, The replication servers will" +
-        " keep all changes up to this amount of time before deleting them." +
-        " This values defines the maximum age of a backup that can be" +
-        " restored because replication servers would not be able to refresh" +
-        " LDAP servers with older versions of the data. A zero value" +
-        " can be used to specify an infinite delay (or never purge)");
-    registerMessage(MSGID_SIMULTANEOUS_IMPORT_EXPORT_REJECTED,
-        "The current request is rejected due to an import or an export" +
-        " already in progress for the same data");
-    registerMessage(MSGID_INVALID_IMPORT_SOURCE,
-        "Invalid source for the import");
-    registerMessage(MSGID_INVALID_EXPORT_TARGET,
-        "Invalid target for the export");
-    registerMessage(MSGID_NO_REACHABLE_PEER_IN_THE_DOMAIN,
-        "No reachable peer in the domain");
-    registerMessage(MSGID_NO_MATCHING_DOMAIN,
-        "No domain matches the base DN provided");
-    registerMessage(MSGID_MULTIPLE_MATCHING_DOMAIN,
-        "Multiple domains match the base DN provided");
-    registerMessage(MSGID_INVALID_PROVIDER,
-        "The provider class does not allow the operation requested");
-    registerMessage(MSGID_COULD_NOT_SOLVE_HOSTNAME,
-        "The hostname %s could not be resolved as an IP address");
-    registerMessage(MSGID_DUPLICATE_SERVER_ID,
-        "Servers %s and %s have the same ServerId : %d");
-    registerMessage(MSGID_DUPLICATE_REPLICATION_SERVER_ID,
-        "Replication Servers %s and %s have the same ServerId : %d");
-    registerMessage(MSGID_READER_NULL_MSG,
-        "Received a Null Msg from %s");
-    registerMessage(MSGID_READER_EXCEPTION,
-        "Exception when reading messages from %s");
-    registerMessage(MSGID_BAD_HISTORICAL,
-        "Entry %s was containing some unknown historical information,"
-        + " This may cause some inconsistency for this entry");
-    registerMessage(MSGID_CANNOT_ADD_CONFLICT_ATTRIBUTE,
-        "A conflict was detected but the conflict information could not be" +
-        "added. Operation : ");
-    registerMessage(MSGID_CANNOT_RENAME_CONFLICT_ENTRY,
-        "An error happened trying the rename a conflicting entry : ");
-    registerMessage(MSGID_EXCEPTION_RENAME_CONFLICT_ENTRY,
-        "An Exception happened when trying the rename a conflicting entry : ");
-    registerMessage(MSGID_CHANGELOG_UNSUPPORTED_UTF8_ENCODING,
-        "The JVM does not support UTF-8. This is required to be able to "
-        + "encode the changes in the database. "
-        + "This replication server will now shutdown");
-    registerMessage(MSGID_REPLICATION_COULD_NOT_CONNECT,
-        "The Replication is configured for suffix  %s "
-        + "but was not able to connect to any Replication Server");
-    registerMessage(MSGID_NOW_FOUND_CHANGELOG,
-        "Replication Server %s now used for Replication Domain %s");
-    registerMessage(MSGID_DISCONNECTED_FROM_CHANGELOG,
-        "The connection to Replication Server %s has been dropped by the "
-        + "Replication Server");
-    registerMessage(MSGID_CHANGELOG_ERROR_SENDING_INFO,
-        "An unexpected error occurred  while sending a Server " +
-        " Info message to %s. " +
-        "This connection is going to be closed and reopened");
-    registerMessage(MSGID_CHANGELOG_ERROR_SENDING_ERROR,
-        "An unexpected error occurred  while sending an Error Message to %s. "+
-        "This connection is going to be closed and reopened");
-    registerMessage(MSGID_CHANGELOG_ERROR_SENDING_MSG,
-        "An unexpected error occurred  while sending a Message to %s. "+
-        "This connection is going to be closed and reopened");
-  }
-}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/SchemaMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/SchemaMessages.java
deleted file mode 100644
index a3cd450..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/SchemaMessages.java
+++ /dev/null
@@ -1,4394 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the server schema, including matching rules,
- * syntaxes, attribute types, and objectclasses.
- */
-public class SchemaMessages
-{
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * cannot retrieve the appropriate approximate matching rule.  This takes two
-   * arguments, which are the name of the syntax and the OID for the matching
-   * rule.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 1;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * cannot retrieve the appropriate equality matching rule.  This takes two
-   * arguments, which are the name of the syntax and the OID for the matching
-   * rule.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 2;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * cannot retrieve the appropriate ordering matching rule.  This takes two
-   * arguments, which are the name of the syntax and the OID for the matching
-   * rule.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 3;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * cannot retrieve the appropriate substring matching rule.  This takes two
-   * arguments, which are the name of the syntax and the OID for the matching
-   * rule.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 4;
-
-
-
-  /**
-   * The message ID for the message that will be used if an illegal value is
-   * provided for an attribute with a Boolean syntax.  This takes a single
-   * string argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ILLEGAL_BOOLEAN =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 5;
-
-
-
-  /**
-   * The message ID for the message that will be used if a bit string value is
-   * too short to be valid.  This takes a single string argument, which is the
-   * provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_BIT_STRING_TOO_SHORT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 6;
-
-
-
-  /**
-   * The message ID for the message that will be used if a bit string value is
-   * not surrounded by single quotes and followed by a capital B.  This takes a
-   * single string argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 7;
-
-
-
-  /**
-   * The message ID for the message that will be used if a bit string value
-   * contains a bit element that is not a zero or a one.  This takes two
-   * arguments, which are the provided value and the invalid binary digit.
-   */
-  public static final int MSGID_ATTR_SYNTAX_BIT_STRING_INVALID_BIT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used if a country string value
-   * has a length that is not exactly two characters.  This takes a single
-   * argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_COUNTRY_STRING_INVALID_LENGTH =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 9;
-
-
-
-  /**
-   * The message ID for the message that will be used if a country string value
-   * contains non-printable characters.  This takes a single argument, which is
-   * the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_COUNTRY_STRING_NOT_PRINTABLE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 10;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delivery method value
-   * does not contain any elements.  This takes a single string argument, which
-   * is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DELIVERY_METHOD_NO_ELEMENTS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 11;
-
-
-
-  /**
-   * The message ID for the message that will be used if a delivery method value
-   * contains an invalid element.  This takes two arguments, which are the
-   * provided value and the invalid element.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DELIVERY_METHOD_INVALID_ELEMENT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 12;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value is too short
-   * to be a valid generalized time value.  This takes a single argument, which
-   * is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_TOO_SHORT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 13;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains a century or year that is not valid.  This takes two
-   * arguments, which are the provided value and illegal century or year
-   * character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_YEAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 14;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains a month that is not valid.  This takes two arguments, which
-   * are the provided value and illegal month substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 15;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains a day that is not valid.  This takes two arguments, which
-   * are the provided value and illegal day substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 16;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains an hour that is not valid.  This takes two arguments, which
-   * are the provided value and illegal hour substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 17;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains a minute that is not valid.  This takes two arguments, which
-   * are the provided value and illegal minute substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 18;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains a second that is not valid.  This takes two arguments, which
-   * are the provided value and illegal second substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SECOND =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 19;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains a subsecond that is not valid.  This takes one argument,
-   * which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SUBSECOND =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 20;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains a subsecond that is too long.  This takes one argument,
-   * which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_LONG_SUBSECOND =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 21;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains an invalid GMT offset.  This takes two arguments, which
-   * are the provided value and illegal offset substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 22;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains an illegal character.  This takes three arguments, which
-   * are the provided value, the illegal character, and the position of the
-   * illegal character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 23;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value cannot be parsed to a Java <CODE>Date</CODE>.  This takes two
-   * arguments, which are the provided value and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_CANNOT_PARSE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 24;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly.  This takes two arguments, which are the
-   * provided value and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_INVALID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 25;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it ends with a comma.  This takes
-   * a single argument, which is the provided DN string.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_END_WITH_COMMA =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 26;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains an attribute name that
-   * starts with a digit.  This takes two arguments, which are the provided DN
-   * string and the illegal digit character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_ATTR_START_WITH_DIGIT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 27;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains an attribute name that
-   * contains an illegal character.  This takes three arguments, which are the
-   * provided DN string, the illegal character, and the position of that
-   * character in the string.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 28;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains an attribute name that
-   * contains an underscore character but attribute name exceptions are not
-   * allowed.  This takes two arguments, which are the provided DN string and
-   * the name of the configuration option that would allow underscore
-   * characters.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_UNDERSCORE_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 29;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains an attribute name that
-   * starts with a dash.  This takes a single argument, which is the provided DN
-   * string.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DASH =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 30;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains an attribute name that
-   * starts with an underscore.  This takes two arguments, which are the
-   * provided DN string and the name of the configuration option that would
-   * allow underscore characters as long as they aren't in the first position.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_UNDERSCORE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 31;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains an attribute name that
-   * starts with a numeric digit in a way in which it is not allowed.  This
-   * takes three arguments, which are the provided DN string, the illegal digit,
-   * and the name of the configuration attribute that would allow digits to be
-   * used as the first character of an attribute name.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DIGIT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 32;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains a zero-length attribute
-   * name.  This takes a single argument, which is the provided DN string.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_ATTR_NO_NAME =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 33;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains an attribute name that
-   * contains a period but is not an OID.  This takes two arguments, which are
-   * the provided DN string and the attribute name..
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 34;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it ends with the attribute name.
-   * This takes two arguments, which are the provided DN string and the
-   * attribute name.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 35;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because the next non-space character after
-   * an attribute name is not an equal sign.  This takes three arguments, which
-   * are the provided DN string, the attribute name, and the illegal character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_NO_EQUAL =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 36;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains an invalid character.
-   * This takes three arguments, which are the provided DN string, the invalid
-   * character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_INVALID_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 37;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains a value that appears to
-   * be hex-encoded but without a positive multiple of two hex characters.  This
-   * takes a single argument, which is the provided DN string.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 38;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it contains a value that appears to
-   * be hex-encoded but included an invalid hexadecimal digit.  This takes two
-   * arguments, which are the provided DN string and the invalid character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 39;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because an unexpected failure occurred
-   * while trying to parse an RDN component value.  This takes two arguments,
-   * which are the provided DN string and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 40;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it has a quoted value that is not
-   * properly terminated with another quote.  This takes a single argument,
-   * which is the provided DN string.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_UNMATCHED_QUOTE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 41;
-
-
-
-  /**
-   * The message ID for the message that will be used if a distinguished name
-   * value cannot be parsed properly because it has a value with an escaped
-   * hex digit that is not followed by a second hex digit.  This takes a single
-   * argument, which is the provided DN string.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 42;
-
-
-
-  /**
-   * The message ID for the message that will be used if an integer value cannot
-   * be parsed because the first digit is zero but the value is not zero.  This
-   * takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_INTEGER_INITIAL_ZERO =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 43;
-
-
-
-  /**
-   * The message ID for the message that will be used if an integer value cannot
-   * be parsed because the it contains a dash that is not in the first position.
-   * This takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_INTEGER_MISPLACED_DASH =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 44;
-
-
-
-  /**
-   * The message ID for the message that will be used if an integer value cannot
-   * be parsed because it contains an illegal character.  This takes three
-   * arguments, which are the provided value, the illegal character, and the
-   * position of the illegal character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 45;
-
-
-
-  /**
-   * The message ID for the message that will be used if an integer value cannot
-   * be parsed because it is empty.  This takes a single argument, which is the
-   * provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_INTEGER_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 46;
-
-
-
-  /**
-   * The message ID for the message that will be used if an integer value cannot
-   * be parsed because it starts with a dash but doesn't contain a value.  This
-   * takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 47;
-
-
-
-  /**
-   * The message ID for the message that will be used if an OID value cannot
-   * be parsed because it is blank.  This does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OID_NO_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 48;
-
-
-
-  /**
-   * The message ID for the message that will be used if an OID value cannot
-   * be parsed because it contains an illegal character.  This takes two
-   * arguments, which are the provided value and the position of the illegal
-   * character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OID_ILLEGAL_CHARACTER =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 49;
-
-
-
-  /**
-   * The message ID for the message that will be used if an OID value cannot
-   * be parsed because it contains consecutive periods.  This takes two
-   * arguments, which are the provided value and the position of the illegal
-   * character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OID_CONSECUTIVE_PERIODS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 50;
-
-
-
-  /**
-   * The message ID for the message that will be used if an OID value cannot
-   * be parsed because it ends with a period.  This takes a single argument,
-   * which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OID_ENDS_WITH_PERIOD =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 51;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description value cannot be parsed because it is empty.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 52;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description value cannot be parsed because it contains some other character
-   * where an open parenthesis was expected.  This takes three arguments, which
-   * are the provided value, the position at which the parenthesis was expected,
-   * and the character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_EXPECTED_OPEN_PARENTHESIS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 53;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description value cannot be parsed because the end of the value was reached
-   * while the server still expected to read more information.  This takes a
-   * single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 54;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description value cannot be parsed because the OID contained two
-   * consecutive periods.  This takes two arguments, which are the provided
-   * value and the position of the second period.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 55;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description value cannot be parsed because the numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 56;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description value cannot be parsed because the non-numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_STRING_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 57;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description value cannot be parsed because an illegal character was
-   * encountered.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 58;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description value cannot be parsed because a close parenthesis was found in
-   * an unexpected location.  This takes two arguments, which are the provided
-   * value and the position of the close parenthesis.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRTYPE_UNEXPECTED_CLOSE_PARENTHESIS =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 59;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description value cannot be parsed because a quotation mark was expected
-   * but something else was found.  This takes three arguments, which are the
-   * provided value, the name of the token after which the quote was expected,
-   * and the character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 60;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description references a superior attribute type that is not defined in the
-   * server schema.  This takes two arguments, which are the OID of the
-   * attribute type description being defined and the name or OID of the
-   * superior type that should be used.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUPERIOR_TYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 61;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description references an approximate matching rule that is not defined in
-   * the server schema.  This takes two arguments, which are the OID of the
-   * attribute type description being defined and the OID of the approximate
-   * matching rule that should be used.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_APPROXIMATE_MR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 62;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description references an equality matching rule that is not defined in the
-   * server schema.  This takes two arguments, which are the OID of the
-   * attribute type description being defined and the OID of the equality
-   * matching rule that should be used.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_EQUALITY_MR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 63;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description references an ordering matching rule that is not defined in the
-   * server schema.  This takes two arguments, which are the OID of the
-   * attribute type description being defined and the OID of the ordering
-   * matching rule that should be used.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_ORDERING_MR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 64;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description references a substring matching rule that is not defined in the
-   * server schema.  This takes two arguments, which are the OID of the
-   * attribute type description being defined and the OID of the substring
-   * matching rule that should be used.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUBSTRING_MR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 65;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description references a syntax that is not defined in the server schema.
-   * This takes two arguments, which are the OID of the attribute type
-   * description being defined and the OID of the syntax that should be used.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SYNTAX =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 66;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description references an illegal attribute usage.  This takes three
-   * arguments, which are the OID of the attribute type description being
-   * defined, the specified usage string, and the default usage string that will
-   * be used instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_INVALID_ATTRIBUTE_USAGE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 67;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * description cannot be parsed because it contains an unexpected character
-   * where a single quote should be.  This takes three arguments, which are the
-   * provided attribute type description, the position in which the quote was
-   * expected, and the character that was found there instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 68;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description value cannot be parsed because it is empty.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OBJECTCLASS_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 69;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description value cannot be parsed because it contains some other character
-   * where an open parenthesis was expected.  This takes three arguments, which
-   * are the provided value, the position at which the parenthesis was expected,
-   * and the character that was found instead.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_OPEN_PARENTHESIS =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 70;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description value cannot be parsed because the end of the value was reached
-   * while the server still expected to read more information.  This takes a
-   * single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 71;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description value cannot be parsed because the OID contained two
-   * consecutive periods.  This takes two arguments, which are the provided
-   * value and the position of the second period.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 72;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description value cannot be parsed because the numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 73;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description value cannot be parsed because the non-numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 74;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description value cannot be parsed because an illegal character was
-   * encountered.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 75;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description value cannot be parsed because a close parenthesis was found in
-   * an unexpected location.  This takes two arguments, which are the provided
-   * value and the position of the close parenthesis.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_OBJECTCLASS_UNEXPECTED_CLOSE_PARENTHESIS =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 76;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description value cannot be parsed because a quotation mark was expected
-   * but something else was found.  This takes three arguments, which are the
-   * provided value, the name of the token after which the quote was expected,
-   * and the character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 77;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description references a superior objectclass that is not defined in the
-   * server schema.  This takes two arguments, which are the OID of the
-   * objectclass description being defined and the name or OID of the superior
-   * class that should be used.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_SUPERIOR_CLASS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 78;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description cannot be parsed because it contains an unexpected character
-   * where a single quote should be.  This takes three arguments, which are the
-   * provided objectclass description, the position in which the quote was
-   * expected, and the character that was found there instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 79;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description includes a required attribute that is not defined in the server
-   * schema.  This takes two arguments, which are the OID of the objectclass
-   * being defined, and the name or OID of the requested attribute type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_REQUIRED_ATTR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 80;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass
-   * description includes an optional attribute that is not defined in the
-   * server schema.  This takes two arguments, which are the OID of the
-   * objectclass being defined, and the name or OID of the requested attribute
-   * type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_OPTIONAL_ATTR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 81;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute is defined
-   * with the IA5 syntax but has an illegal character that is not allowed by
-   * that syntax.  This takes two arguments, which are the provided value and
-   * the illegal character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 82;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * configuration attribute indicating whether a strict telephone number format
-   * should be enforced.  This does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELEPHONE_DESCRIPTION_STRICT_MODE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_INFORMATIONAL | 83;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs when
-   * trying to determine whether the telephone number syntax should use strict
-   * mode.  This takes two arguments, which are the DN of the configuration
-   * entry and a string representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_TELEPHONE_CANNOT_DETERMINE_STRICT_MODE =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 84;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed telephone
-   * number value is empty or null.  This does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELEPHONE_EMPTY =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 85;
-
-
-
-  /**
-   * The message ID for the message that will be used if strict telephone syntax
-   * checking is enabled but the provided value does not start with a plus sign.
-   * This takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELEPHONE_NO_PLUS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 86;
-
-
-
-  /**
-   * The message ID for the message that will be used if strict telephone syntax
-   * checking is enabled but the provided value contains an illegal character
-   * (i.e., not a digit and not a valid separator).  This takes three arguments,
-   * which are the provided value, the illegal character and the position of
-   * that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELEPHONE_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 87;
-
-
-
-  /**
-   * The message ID for the message that will be used if a proposed telephone
-   * number value does not contain any numeric digits.  This takes a single
-   * argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELEPHONE_NO_DIGITS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 88;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * configuration for the strict telephone number syntax checking has been
-   * changed.  This takes two arguments, which are a string representation of
-   * the new value, and the DN of the configuration entry.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELEPHONE_UPDATED_STRICT_MODE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_INFORMATIONAL | 89;
-
-
-
-  /**
-   * The message ID for the message that will be used if a numeric string value
-   * contains a character that is not a digit or a space.  This takes three
-   * arguments, which are the provided value, the illegal character, and the
-   * position of that illegal character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 90;
-
-
-
-  /**
-   * The message ID for the message that will be used if a numeric string value
-   * does not contain any characters.  This does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NUMERIC_STRING_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 91;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because it is empty.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRSYNTAX_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 92;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because it contains some other character
-   * where an open parenthesis was expected.  This takes three arguments, which
-   * are the provided value, the position at which the parenthesis was expected,
-   * and the character that was found instead.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_OPEN_PARENTHESIS =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 93;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because the end of the value was reached
-   * while the server still expected to read more information.  This takes a
-   * single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 94;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because the OID contained two
-   * consecutive periods.  This takes two arguments, which are the provided
-   * value and the position of the second period.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 95;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because the numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 96;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because the non-numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_IN_STRING_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 97;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because a close parenthesis was found in
-   * an unexpected location.  This takes two arguments, which are the provided
-   * value and the position of the close parenthesis.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 98;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because an error occurred while trying
-   * to read the "DESC" token.  This takes three arguments, which are the
-   * provided value, the position at which the DESC token was expected, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_TOKEN =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 99;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because the "DESC" token was expected
-   * but something else was found instead.  This takes two arguments, which are
-   * the provided value, and the token that was read instead of "DESC".
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRSYNTAX_TOKEN_NOT_DESC =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 100;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because an error occurred while trying
-   * to read the value after the "DESC" token.  This takes three arguments,
-   * which are the provided value, the position at which the value was expected,
-   * and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 101;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because a closing parenthesis was
-   * expected but a different character was found.  This takes three arguments,
-   * which are the provided value, the position at which the parenthesis was
-   * expected, and the character that was found instead.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_CLOSE_PARENTHESIS =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 102;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description value cannot be parsed because a non-space character was found
-   * after the closing parenthesis.  This takes three arguments, which are the
-   * provided value, the character that was read, and the position of that
-   * character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_AFTER_CLOSE =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 103;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * description cannot be parsed because it contains an unexpected character
-   * where a single quote should be.  This takes three arguments, which are the
-   * provided attribute type description, the position in which the quote was
-   * expected, and the character that was found there instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_QUOTE_AT_POS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 104;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a printable string because it is empty or null.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_PRINTABLE_STRING_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 105;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a printable string because it contains an illegal character.
-   * This takes three arguments, which are the provided value, the illegal
-   * character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_PRINTABLE_STRING_ILLEGAL_CHARACTER =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 106;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a substring assertion because it consists only of a wildcard.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_SUBSTRING_ONLY_WILDCARD =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 107;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a substring assertion because it contains consecutive wildcard
-   * characters.  This takes two arguments, which are the provided value and the
-   * position of the consecutive wildcards.
-   */
-  public static final int MSGID_ATTR_SYNTAX_SUBSTRING_CONSECUTIVE_WILDCARDS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 108;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value is too short
-   * to be a valid UTC time value.  This takes a single argument, which is the
-   * provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UTC_TIME_TOO_SHORT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 109;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UTC time value
-   * contains a century or year that is not valid.  This takes two arguments,
-   * which are the provided value and illegal century or year character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_YEAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 110;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UTC time value
-   * contains a month that is not valid.  This takes two arguments, which are
-   * the provided value and illegal month substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 111;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UTC time value
-   * contains a day that is not valid.  This takes two arguments, which are the
-   * provided value and illegal day substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_DAY =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 112;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UTC time value
-   * contains an hour that is not valid.  This takes two arguments, which are
-   * the provided value and illegal hour substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 113;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UTC time value
-   * contains a minute that is not valid.  This takes two arguments, which are
-   * the provided value and illegal minute substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_MINUTE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 114;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UTC time value
-   * contains an illegal character.  This takes three arguments, which are the
-   * provided value, the illegal character, and the position of the illegal
-   * character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 115;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UTC time value
-   * contains a second that is not valid.  This takes two arguments, which are
-   * the provided value and illegal second substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 116;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UTC time value
-   * contains an invalid GMT offset.  This takes two arguments, which are the
-   * provided value and illegal offset substring.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 117;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UTC time value cannot
-   * be parsed to a Java <CODE>Date</CODE>.  This takes two arguments, which are
-   * the provided value and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UTC_TIME_CANNOT_PARSE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 118;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because it is empty.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 119;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because it contains some other character
-   * where an open parenthesis was expected.  This takes three arguments, which
-   * are the provided value, the position at which the parenthesis was expected,
-   * and the character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_EXPECTED_OPEN_PARENTHESIS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 120;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because the end of the value was reached
-   * while the server still expected to read more information.  This takes a
-   * single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 121;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because the OID contained two
-   * consecutive periods.  This takes two arguments, which are the provided
-   * value and the position of the second period.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 122;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because the numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 123;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because the non-numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 124;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because a close parenthesis was found in
-   * an unexpected location.  This takes two arguments, which are the provided
-   * value and the position of the close parenthesis.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_UNEXPECTED_CLOSE_PARENTHESIS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 125;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because an illegal character was
-   * encountered.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 126;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because it references an unknown
-   * structural objectclass.  This takes two arguments, which are the provided
-   * value and the OID of the unknown objectclass.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_UNKNOWN_STRUCTURAL_CLASS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 127;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because it references a structural
-   * objectclass that is not defined as structural.  This takes four arguments,
-   * which are the provided value, the OID of the specified objectclass, the
-   * user-friendly name for the class, and a string representation of the
-   * objectclass type for the specified class.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_DCR_STRUCTURAL_CLASS_NOT_STRUCTURAL =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 128;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because it references an unknown
-   * auxiliary objectclass.  This takes two arguments, which are the provided
-   * value and the name or OID of the unknown auxiliary objectclass.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 129;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because it references an auxiliary
-   * objectclass that is not defined as auxiliary.  This takes four arguments,
-   * which are the provided value, the name or OID of the referenced
-   * objectclass, and a string representation of the objectclass type for the
-   * specified class
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 130;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because it references an unknown
-   * required attribute type.  This takes two arguments, which are the provided
-   * value and the name or OID of the unknown attribute type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 131;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because it references an unknown
-   * optional attribute type.  This takes two arguments, which are the provided
-   * value and the name or OID of the unknown attribute type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 132;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because it references an unknown
-   * prohibited attribute type.  This takes two arguments, which are the
-   * provided value and the name or OID of the unknown attribute type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 133;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value cannot be parsed because an invalid character was found
-   * where a single quote was expected.  This takes three arguments, which are
-   * the provided value, the position at which the quote was expected, and the
-   * character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 134;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because it is empty.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NAME_FORM_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 135;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because it contains some other character where an
-   * open parenthesis was expected.  This takes three arguments, which are the
-   * provided value, the position at which the parenthesis was expected, and the
-   * character that was found instead.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_NAME_FORM_EXPECTED_OPEN_PARENTHESIS =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 136;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because the end of the value was reached while the
-   * server still expected to read more information.  This takes a single
-   * argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 137;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because the OID contained two consecutive periods.
-   * This takes two arguments, which are the provided value and the position of
-   * the second period.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_NAME_FORM_DOUBLE_PERIOD_IN_NUMERIC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 138;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because the numeric OID contained an illegal
-   * character.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_NUMERIC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 139;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because the non-numeric OID contained an illegal
-   * character.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_STRING_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 140;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because a close parenthesis was found in an
-   * unexpected location.  This takes two arguments, which are the provided
-   * value and the position of the close parenthesis.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_NAME_FORM_UNEXPECTED_CLOSE_PARENTHESIS =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 141;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because an illegal character was encountered.  This
-   * takes three arguments, which are the provided value, the illegal character,
-   * and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 142;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because it references an unknown structural
-   * objectclass.  This takes two arguments, which are the provided value and
-   * the OID of the unknown objectclass.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_STRUCTURAL_CLASS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 143;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because it references a structural objectclass that
-   * is not defined as structural.  This takes four arguments, which are the
-   * provided value, the OID of the specified objectclass, the user-friendly
-   * name for the class, and a string representation of the objectclass type for
-   * the specified class.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_NAME_FORM_STRUCTURAL_CLASS_NOT_STRUCTURAL =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 144;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because it references an unknown required attribute
-   * type.  This takes two arguments, which are the provided value and the name
-   * or OID of the unknown attribute type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_REQUIRED_ATTR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 145;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because it references an unknown optional attribute
-   * type.  This takes two arguments, which are the provided value and the name
-   * or OID of the unknown attribute type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_OPTIONAL_ATTR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 146;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because it does not specify a structural
-   * objectclass.  This takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NAME_FORM_NO_STRUCTURAL_CLASS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 147;
-
-
-
-  /**
-   * The message ID for the message that will be used if a name form description
-   * value cannot be parsed because an invalid character was found where a
-   * single quote was expected.  This takes three arguments, which are the
-   * provided value, the position at which the quote was expected, and the
-   * character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 148;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description value cannot be parsed because it is empty.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 149;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description value cannot be parsed because it contains some other character
-   * where an open parenthesis was expected.  This takes three arguments, which
-   * are the provided value, the position at which the parenthesis was expected,
-   * and the character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_EXPECTED_OPEN_PARENTHESIS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 150;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description value cannot be parsed because the end of the value was reached
-   * while the server still expected to read more information.  This takes a
-   * single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 151;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description value cannot be parsed because the OID contained two
-   * consecutive periods.  This takes two arguments, which are the provided
-   * value and the position of the second period.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_DOUBLE_PERIOD_IN_NUMERIC_OID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 152;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description value cannot be parsed because the numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_ILLEGAL_CHAR_IN_NUMERIC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 153;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description value cannot be parsed because the non-numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_ILLEGAL_CHAR_IN_STRING_OID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 154;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description value cannot be parsed because a close parenthesis was found in
-   * an unexpected location.  This takes two arguments, which are the provided
-   * value and the position of the close parenthesis.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_UNEXPECTED_CLOSE_PARENTHESIS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 155;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description value cannot be parsed because an illegal character was
-   * encountered.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 156;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description refers to an attribute a syntax that is not defined in the
-   * server schema.  This takes two arguments, which are the provided value and
-   * the OID of the unknown attribute syntax.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_UNKNOWN_SYNTAX =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 157;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description does not specify the OID of the associated syntax.  This takes
-   * a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_NO_SYNTAX =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 158;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule
-   * description value cannot be parsed because an invalid character was found
-   * where a single quote was expected.  This takes three arguments, which are
-   * the provided value, the position at which the quote was expected, and the
-   * character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MR_EXPECTED_QUOTE_AT_POS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 159;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description value cannot be parsed because it is empty.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 160;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description value cannot be parsed because it contains some other character
-   * where an open parenthesis was expected.  This takes three arguments, which
-   * are the provided value, the position at which the parenthesis was expected,
-   * and the character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_EXPECTED_OPEN_PARENTHESIS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 161;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description value cannot be parsed because the end of the value was reached
-   * while the server still expected to read more information.  This takes a
-   * single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 162;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description value cannot be parsed because the OID contained two
-   * consecutive periods.  This takes two arguments, which are the provided
-   * value and the position of the second period.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_DOUBLE_PERIOD_IN_NUMERIC_OID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 163;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description value cannot be parsed because the numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_NUMERIC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 164;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description value cannot be parsed because the non-numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_STRING_OID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 165;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description value cannot be parsed because the it is associated with an
-   * unknown matching rule.  This takes two arguments, which are the provided
-   * value, and the unrecognized OID.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_UNKNOWN_MATCHING_RULE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 166;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description value cannot be parsed because a close parenthesis was found in
-   * an unexpected location.  This takes two arguments, which are the provided
-   * value and the position of the close parenthesis.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_UNEXPECTED_CLOSE_PARENTHESIS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 167;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description value cannot be parsed because an illegal character was
-   * encountered.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 168;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description refers to an attribute type that is not defined in the
-   * server schema.  This takes two arguments, which are the provided value and
-   * the name or OID of the unknown attribute type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 169;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description does not specify any associated attribute types.  This takes
-   * a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_NO_ATTR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 170;
-
-
-
-  /**
-   * The message ID for the message that will be used if a matching rule use
-   * description value cannot be parsed because an invalid character was found
-   * where a single quote was expected.  This takes three arguments, which are
-   * the provided value, the position at which the quote was expected, and the
-   * character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 171;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because it is empty.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 172;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because it contains some other character
-   * where an open parenthesis was expected.  This takes three arguments, which
-   * are the provided value, the position at which the parenthesis was expected,
-   * and the character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_EXPECTED_OPEN_PARENTHESIS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 173;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because the end of the value was reached
-   * while the server still expected to read more information.  This takes a
-   * single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 174;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because the rule ID contained an illegal
-   * character.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 175;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because a close parenthesis was found in
-   * an unexpected location.  This takes two arguments, which are the provided
-   * value and the position of the close parenthesis.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_UNEXPECTED_CLOSE_PARENTHESIS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 176;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because an illegal character was
-   * encountered.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 177;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because it references an unknown name
-   * form.  This takes two arguments, which are the provided value and the name
-   * or OID of the specified name form.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_UNKNOWN_NAME_FORM =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 178;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because it references an unknown
-   * superior rule ID.  This takes two arguments, which are the provided value
-   * and the rule ID of the superior DIT structure rule.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_UNKNOWN_RULE_ID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 179;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because it does not specify a name form.
-   * This takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_NO_NAME_FORM =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 180;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because an invalid character was found
-   * where a single quote was expected.  This takes three arguments, which are
-   * the provided value, the position at which the quote was expected, and the
-   * character that was found instead.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_EXPECTED_QUOTE_AT_POS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 181;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because the OID contained two
-   * consecutive periods.  This takes two arguments, which are the provided
-   * value and the position of the second period.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_DOUBLE_PERIOD_IN_NUMERIC_OID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 182;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because the numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_NUMERIC_OID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 183;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT structure rule
-   * description value cannot be parsed because the non-numeric OID contained an
-   * illegal character.  This takes three arguments, which are the provided
-   * value, the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_STRING_OID =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 184;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a telex number because it is too short to hold a valid number.
-   * This takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELEX_TOO_SHORT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 185;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a telex number because it contains an illegal character where a
-   * printable string character should be.  This takes three arguments, which
-   * are the provided value, the illegal character, and the position of that
-   * character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELEX_NOT_PRINTABLE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 186;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a telex number because it contains an illegal character where a
-   * printable string character or dollar sign should be.  This takes three
-   * arguments, which are the provided value, the illegal character, and the
-   * position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELEX_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 187;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a telex number because the end of the value was found before the
-   * complete number could be read.  This takes a single argument, which is the
-   * provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELEX_TRUNCATED =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 188;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a facsimile telephone number because the value was empty.  This
-   * does not take any arguments
-   */
-  public static final int MSGID_ATTR_SYNTAX_FAXNUMBER_EMPTY =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 189;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a facsimile telephone number because the telephone number portion
-   * contains an invalid character that is not from the printable string
-   * character set.  This takes three arguments, which are the provided value,
-   * the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_FAXNUMBER_NOT_PRINTABLE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 190;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a facsimile telephone number because it ends with a dollar sign.
-   * This takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_FAXNUMBER_END_WITH_DOLLAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 191;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a facsimile telephone number because it contains an illegal fax
-   * parameter.  This takes four arguments, which are the provided value, the
-   * illegal fax parameter, the start position, and the end position for that
-   * parameter.
-   */
-  public static final int MSGID_ATTR_SYNTAX_FAXNUMBER_ILLEGAL_PARAMETER =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 192;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a name and optional UID because an error occurred while trying to
-   * parse and normalize the DN portion.  This takes two arguments, which are
-   * the provided value and a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NAMEANDUID_INVALID_DN =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 193;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a name and optional UID because it contained an illegal binary
-   * digit in the uid portion.  This takes three arguments, which are the
-   * provided value, the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_NAMEANDUID_ILLEGAL_BINARY_DIGIT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 194;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a teletex terminal identifier because the value was empty.  This
-   * does not take any arguments
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELETEXID_EMPTY =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 195;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a teletex terminal identifier because the terminal identifier
-   * portion contains an invalid character that is not from the printable string
-   * character set.  This takes three arguments, which are the provided value,
-   * the illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELETEXID_NOT_PRINTABLE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 196;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a teletex terminal identifier because it ends with a dollar sign.
-   * This takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELETEXID_END_WITH_DOLLAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 197;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a teletex terminal identifier because a TTX parameter does not
-   * contain a colon to separate the name from the value.  This takes two
-   * arguments, which are the provided value and the invalid parameter string.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELETEXID_PARAM_NO_COLON =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 198;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a teletex terminal identifier because it contains an illegal TTX
-   * parameter.  This takes two arguments, which are the provided value and the
-   * invalid parameter name.
-   */
-  public static final int MSGID_ATTR_SYNTAX_TELETEXID_ILLEGAL_PARAMETER =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 199;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an other mailbox because the provided value was empty.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OTHER_MAILBOX_EMPTY_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 200;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an other mailbox because the it did not specify the mailbox type.
-   * This takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OTHER_MAILBOX_NO_MBTYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 201;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an other mailbox because the mailbox type contained an illegal
-   * character.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MBTYPE_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 202;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an other mailbox because the it did not specify the mailbox.
-   * This takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OTHER_MAILBOX_NO_MAILBOX =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 203;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an other mailbox because the mailbox contained an illegal
-   * character.  This takes three arguments, which are the provided value, the
-   * illegal character, and the position of that character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MB_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 204;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a guide because it did not specify an objectclass.  This takes a
-   * single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GUIDE_NO_OC =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 205;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a guide because it contains an illegal character in the criteria.
-   * This takes four arguments, which are the provided value, the criteria
-   * portion, the illegal character, and the position of the illegal character
-   * thin the criteria portion.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 206;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a guide because it starts with an open parenthesis but does not
-   * contain a matching close parenthesis.  This takes two arguments, which are
-   * the provided value and the criteria portion.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GUIDE_MISSING_CLOSE_PAREN =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 207;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a guide because it contains a criteria portion that starts with a
-   * question mark but is not "?true" or "?false".  This takes two arguments,
-   * which are the provided value and the criteria portion.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GUIDE_INVALID_QUESTION_MARK =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 208;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a guide because it has a criteria with no dollar sign.  This
-   * takes two arguments, which are the provided value and the criteria portion.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GUIDE_NO_DOLLAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 209;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a guide because it has a criteria with no attribute type.  This
-   * takes two arguments, which are the provided value and the criteria portion.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GUIDE_NO_ATTR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 210;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a guide because it has a criteria with no match type.  This takes
-   * two arguments, which are the provided value and the criteria portion.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GUIDE_NO_MATCH_TYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 211;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a guide because it has a criteria with an invalid match type.
-   * This takes three arguments, which are the provided value, the criteria
-   * portion, and the position of the invalid match type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 212;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an enhanced guide because it did not contain an octothorpe to
-   * separate the objectclass from the criteria.  This takes a single argument,
-   * which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_SHARP =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 213;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an enhanced guide because it did not specify an objectclass.
-   * This takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_OC =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 214;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an enhanced guide because the objectclass OID had two consecutive
-   * periods.  This takes three arguments, which are the provided value, the
-   * objectclass OID, and the position of the double period.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_DOUBLE_PERIOD_IN_OC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 215;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an enhanced guide because the objectclass OID had an illegal
-   * character.  This takes four arguments, which are the provided value, the
-   * objectclass OID, the illegal character, and the position of that character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_ILLEGAL_CHAR_IN_OC_OID =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 216;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an enhanced guide because the objectclass name had an illegal
-   * character.  This takes four arguments, which are the provided value, the
-   * objectclass name, the illegal character, and the position of that
-   * character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_ILLEGAL_CHAR_IN_OC_NAME =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 217;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an enhanced guide because it did not contain an octothorpe to
-   * separate the criteria from the scope.  This takes a single argument, which
-   * is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_FINAL_SHARP =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 218;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an enhanced guide because it did not contain a scope after the
-   * final octothorpe.  This takes a single argument, which is the provided
-   * value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_SCOPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 219;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an enhanced guide because it contained an invalid scope.  This
-   * takes two arguments, which are the provided value and the invalid scope.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_INVALID_SCOPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 220;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as an enhanced guide because it did not contain any criteria.  This
-   * takes a single argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_CRITERIA =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 221;
-
-
-
-  /**
-   * The message ID for the message that will be used if an OID value cannot
-   * be parsed because it contains an invalid value.  This takes two arguments,
-   * which are the provided value and a message explaining the problem.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OID_INVALID_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 222;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected failure
-   * occurs while attempting to normalize a generalized time value.  This takes
-   * two arguments, which are the provided value and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_NORMALIZE_FAILURE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 223;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two attribute value objects using the case exact
-   * ordering matching rule's <CODE>compare</CODE> method and it is not possible
-   * to obtain the normalized form of one of the values.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_OMR_CASE_EXACT_COMPARE_CANNOT_NORMALIZE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 224;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two objects using the case exact ordering matching
-   * rule's <CODE>compare</CODE> method but the provided objects were of a type
-   * that is not supported for comparison.  This takes a single argument, which
-   * is the fully-qualified name of the class with which the provided object
-   * is associated.
-   */
-  public static final int MSGID_OMR_CASE_EXACT_COMPARE_INVALID_TYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 225;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two attribute value objects using the case ignore
-   * ordering matching rule's <CODE>compare</CODE> method and it is not possible
-   * to obtain the normalized form of one of the values.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_OMR_CASE_IGNORE_COMPARE_CANNOT_NORMALIZE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 226;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two objects using the case ignore ordering matching
-   * rule's <CODE>compare</CODE> method but the provided objects were of a type
-   * that is not supported for comparison.  This takes a single argument, which
-   * is the fully-qualified name of the class with which the provided object
-   * is associated.
-   */
-  public static final int MSGID_OMR_CASE_IGNORE_COMPARE_INVALID_TYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 227;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two attribute value objects using the generalized
-   * time ordering matching rule's <CODE>compare</CODE> method and it is not
-   * possible to obtain the normalized form of one of the values.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_OMR_GENERALIZED_TIME_COMPARE_CANNOT_NORMALIZE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 228;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two objects using the generalized time ordering
-   * matching rule's <CODE>compare</CODE> method but the provided objects were
-   * of a type that is not supported for comparison.  This takes a single
-   * argument, which is the fully-qualified name of the class with which the
-   * provided object is associated.
-   */
-  public static final int MSGID_OMR_GENERALIZED_TIME_COMPARE_INVALID_TYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 229;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two attribute value objects using the integer
-   * ordering matching rule's <CODE>compare</CODE> method and it is not possible
-   * to obtain the normalized form of one of the values.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_OMR_INTEGER_COMPARE_CANNOT_NORMALIZE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 230;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two objects using the integer ordering matching
-   * rule's <CODE>compare</CODE> method but the provided objects were of a type
-   * that is not supported for comparison.  This takes a single argument, which
-   * is the fully-qualified name of the class with which the provided object
-   * is associated.
-   */
-  public static final int MSGID_OMR_INTEGER_COMPARE_INVALID_TYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 231;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two attribute value objects using the numeric string
-   * ordering matching rule's <CODE>compare</CODE> method and it is not possible
-   * to obtain the normalized form of one of the values.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_OMR_NUMERIC_STRING_COMPARE_CANNOT_NORMALIZE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 232;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two objects using the numeric string ordering
-   * matching rule's <CODE>compare</CODE> method but the provided objects were
-   * of a type that is not supported for comparison.  This takes a single
-   * argument, which is the fully-qualified name of the class with which the
-   * provided object is associated.
-   */
-  public static final int MSGID_OMR_NUMERIC_STRING_COMPARE_INVALID_TYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 233;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two attribute value objects using the octet string
-   * ordering matching rule's <CODE>compare</CODE> method and it is not possible
-   * to obtain the normalized form of one of the values.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_OMR_OCTET_STRING_COMPARE_CANNOT_NORMALIZE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 234;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to compare two objects using the octet string ordering matching
-   * rule's <CODE>compare</CODE> method but the provided objects were of a type
-   * that is not supported for comparison.  This takes a single argument, which
-   * is the fully-qualified name of the class with which the provided object is
-   * is associated.
-   */
-  public static final int MSGID_OMR_OCTET_STRING_COMPARE_INVALID_TYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 235;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UUID value has an
-   * invalid length.  This takes two arguments, which are the provided value and
-   * the actual length of that value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UUID_INVALID_LENGTH =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 236;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UUID value has
-   * a non-dash character at a position that should contain a dash.  This takes
-   * three arguments, which are the provided value, the position of the illegal
-   * character, and the character that was found in that position.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UUID_EXPECTED_DASH =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 237;
-
-
-
-  /**
-   * The message ID for the message that will be used if a UUID value has
-   * a non-dash character at a position that should contain a hexadecimal digit.
-   * This takes three arguments, which are the provided value, the position of
-   * the illegal character, and the character that was found in that position.
-   */
-  public static final int MSGID_ATTR_SYNTAX_UUID_EXPECTED_HEX =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 238;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configuration attribute that controls whether directory string attributes
-   * will be allowed to have zero-length values.  It does not take any
-   * arguments.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_DIRECTORYSTRING_DESCRIPTION_ALLOW_ZEROLENGTH =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_INFORMATIONAL | 239;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether to allow zero-length values for directory
-   * string attributes.  This takes two arguments, which are the name of the
-   * configuration attribute that controls this behavior and a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_DIRECTORYSTRING_CANNOT_DETERMINE_ZEROLENGTH =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 240;
-
-
-
-  /**
-   * The message ID for the message that will be used if a directory string
-   * attribute is assigned a zero-length value.  This does not take any
-   * arguments.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_DIRECTORYSTRING_INVALID_ZEROLENGTH_VALUE =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 241;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configuration
-   * attribute controlling whether to accept zero-length values is updated.
-   * This takes three arguments, which are the name of the configuration
-   * attribute, the DN of the configuration entry, and a string representation
-   * of the new value.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_DIRECTORYSTRING_UPDATED_ALLOW_ZEROLENGTH =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_INFORMATIONAL | 242;
-
-
-
-  /**
-   * The message ID for the message that will be used if an authPassword value
-   * has an invalid character in the scheme name.  This takes a single argument,
-   * which is the position of the invalid character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_AUTHPW_INVALID_SCHEME_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 243;
-
-
-
-  /**
-   * The message ID for the message that will be used if an authPassword value
-   * has an empty scheme.  This does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_AUTHPW_NO_SCHEME =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 244;
-
-
-
-  /**
-   * The message ID for the message that will be used if an authPassword value
-   * has an invalid character between the scheme and authInfo elements.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_AUTHPW_NO_SCHEME_SEPARATOR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 245;
-
-
-
-  /**
-   * The message ID for the message that will be used if an authPassword value
-   * has an invalid character in the authInfo element.  This takes a single
-   * argument, which is the position of the invalid character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_INFO_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 246;
-
-
-
-  /**
-   * The message ID for the message that will be used if an authPassword value
-   * has an empty authInfo element.  This does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 247;
-
-
-
-  /**
-   * The message ID for the message that will be used if an authPassword value
-   * has an invalid character between the authInfo and authValue elements.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO_SEPARATOR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 248;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value does not start
-   * with an opening parenthesis.  This takes a single argument, which is the
-   * provided value string.
-   */
-  public static final int MSGID_EMR_INTFIRSTCOMP_NO_INITIAL_PARENTHESIS =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 249;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value does not have
-   * any non-space characters after the opening parenthesis.  This takes a
-   * single argument, which is the provided value string.
-   */
-  public static final int MSGID_EMR_INTFIRSTCOMP_NO_NONSPACE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 250;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value does not have
-   * any space characters after the first component.  This takes a single
-   * argument, which is the provided value string.
-   */
-  public static final int MSGID_EMR_INTFIRSTCOMP_NO_SPACE_AFTER_INT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 251;
-
-
-
-  /**
-   * The message ID for the message that will be used if the first component
-   * cannot be decoded as an integer.  This takes a single argument, which is
-   * the provided value string.
-   */
-  public static final int MSGID_EMR_INTFIRSTCOMP_FIRST_COMPONENT_NOT_INT =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 252;
-
-
-
-  /**
-   * The message ID for the message that will be used if a provided userpassword
-   * value is null or empty.  This does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_USERPW_NO_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 253;
-
-
-
-  /**
-   * The message ID for the message that will be used if a provided userpassword
-   * value does not start with an opening curly brace.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_USERPW_NO_OPENING_BRACE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 254;
-
-
-
-  /**
-   * The message ID for the message that will be used if a provided userpassword
-   * value does not contain a closing curly brace.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_USERPW_NO_CLOSING_BRACE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 255;
-
-
-
-  /**
-   * The message ID for the message that will be used if a provided userpassword
-   * value does not contain a storage scheme name.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_USERPW_NO_SCHEME =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 256;
-
-
-
-  /**
-   * The message ID for the message that will be used if an RFC 3672
-   * subtree specification value cannot be parsed properly. This takes a
-   * single argument: the provided invalid value.
-   */
-  public static final int
-    MSGID_ATTR_SYNTAX_RFC3672_SUBTREE_SPECIFICATION_INVALID =
-        CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 257;
-
-
-
-  /**
-   * The message ID for the message that will be used if an absolute
-   * subtree specification value cannot be parsed properly. This takes a
-   * single argument: the provided invalid value.
-   */
-  public static final int
-    MSGID_ATTR_SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_INVALID =
-        CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 258;
-
-
-
-  /**
-   * The message ID for the message that will be used if a relative
-   * subtree specification value cannot be parsed properly. This takes a
-   * single argument: the provided invalid value.
-   */
-  public static final int
-    MSGID_ATTR_SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_INVALID =
-        CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 259;
-
-
-
-  /**
-   * The message ID for the message that will be used if an illegal value is
-   * provided for an attribute with an Integer syntax.  This takes a single
-   * string argument, which is the provided value.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ILLEGAL_INTEGER =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 260;
-
-
-
-  /**
-   * The message ID for the message that will be used if an authPassword value
-   * has an invalid character in the authValue element.  This takes a single
-   * argument, which is the position of the invalid character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_VALUE_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 261;
-
-
-
-  /**
-   * The message ID for the message that will be used if an authPassword value
-   * has an empty authValue element.  This does not take any arguments.
-   */
-  public static final int MSGID_ATTR_SYNTAX_AUTHPW_NO_AUTH_VALUE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 262;
-
-
-
-  /**
-   * The message ID for the message that will be used if an authPassword value
-   * has an invalid character after the authValue element.  This takes a single
-   * argument, which is the position of the invalid character.
-   */
-  public static final int MSGID_ATTR_SYNTAX_AUTHPW_INVALID_TRAILING_CHAR =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_ERROR | 263;
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * extension value cannot be parsed because an invalid character was found.
-   * This takes a two arguments, which are the provided value, and the position
-   * of the invalid character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 264;
-
-  /**
-   * The message ID for the message that will be used if an attribute syntax
-   * extension value cannot be parsed. This takes one argument, a string
-   * representation of the exception that was caught.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRSYNTAX_INVALID_EXTENSION =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 265;
-
-
-
-  /**
-   * The message ID for the message that will be used if an objectclass has
-   * an invalid superior type.  This takes four arguments, which are the OID of
-   * the objectclass, the objectclass type for that class, the objectclass type
-   * type of the superior class, and the name or OID of the superior class.
-   */
-  public static final int MSGID_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 266;
-
-
-
-  /**
-   * The message ID for the message that will be used if a structural
-   * objectclass does not have a superior chain that includes the "top"
-   * objectclass.  This takes a single argument, which is the OID for that
-   * objectclass.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_OBJECTCLASS_STRUCTURAL_SUPERIOR_NOT_TOP =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 267;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * has a usage that is not the same as the usage of its superior type.  This
-   * takes three arguments, which is the OID of the attribute type, its
-   * attribute usage, and the name or OID of the superior type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_INVALID_SUPERIOR_USAGE =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 268;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * is defined as collective but the superior type is not collective.  This
-   * takes two arguments, which are the OID of the attribute type and the name
-   * or OID of the superior type.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRTYPE_COLLECTIVE_FROM_NONCOLLECTIVE =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 269;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * is not defined as collective but the superior type is collective.  This
-   * takes two arguments, which are the OID of the attribute type and the name
-   * or OID of the superior type.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRTYPE_NONCOLLECTIVE_FROM_COLLECTIVE =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 270;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value is invalid because it prohibits an attribute type that is
-   * required by the rule's structural object class.  This takes three
-   * arguments, which are the definition of the DIT content rule, the name or
-   * OID of the prohibited attribute type, and the name or OID of the structural
-   * object class that requires it.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_STRUCTURAL =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 271;
-
-
-
-  /**
-   * The message ID for the message that will be used if a DIT content rule
-   * description value is invalid because it prohibits an attribute type that is
-   * required by one the rule's allowed auxiliary object classes.  This takes
-   * three arguments, which are the definition of the DIT content rule, the name
-   * or OID of the prohibited attribute type, and the name or OID of the
-   * auxiliary object class that requires it.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_AUXILIARY =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_MILD_ERROR | 272;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * is defined as collective but has a usage other than userApplications.  This
-   * takes a single argument, which is the OID of the attribute type.
-   */
-  public static final int MSGID_ATTR_SYNTAX_ATTRTYPE_COLLECTIVE_IS_OPERATIONAL =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 273;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attribute type
-   * is defined as NO-USER-MODIFICATION but does not have an operational usage.
-   * This takes a single argument, which is the OID of the attribute type.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_ATTRTYPE_NO_USER_MOD_NOT_OPERATIONAL =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 274;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains an illegal character in the fraction component.  This takes
-   * two arguments, which are the value string and the illegal character.
-   */
-  public static final int
-       MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_FRACTION_CHAR =
-            CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 275;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value contains an empty fractional component.  This takes a single
-   * argument, which is the value string.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_EMPTY_FRACTION =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 276;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value does not contain any time zone information.  This takes a single
-   * argument, which is the value string.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_NO_TIME_ZONE_INFO =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 277;
-
-
-
-  /**
-   * The message ID for the message that will be used if a generalized time
-   * value represents an invalid date or time (e.g., September 31).  This takes
-   * two arguments, which are the value string and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME =
-       CATEGORY_MASK_SCHEMA | SEVERITY_MASK_SEVERE_WARNING | 278;
-
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE,
-                    "Unable to retrieve approximate matching rule %s used as " +
-                    "the default for the %s attribute syntax.  Approximate " +
-                    "matching will not be allowed by default for attributes " +
-                    "with this syntax");
-    registerMessage(MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-                    "Unable to retrieve equality matching rule %s used as " +
-                    "the default for the %s attribute syntax.  Equality " +
-                    "matching will not be allowed by default for attributes " +
-                    "with this syntax");
-    registerMessage(MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-                    "Unable to retrieve ordering matching rule %s used as " +
-                    "the default for the %s attribute syntax.  Ordering " +
-                    "matches will not be allowed by default for attributes " +
-                    "with this syntax");
-    registerMessage(MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-                    "Unable to retrieve substring matching rule %s used as " +
-                    "the default for the %s attribute syntax.  Substring " +
-                    "matching will not be allowed by default for attributes " +
-                    "with this syntax");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_ILLEGAL_BOOLEAN,
-                    "The provided value %s is not allowed for attributes " +
-                    "with a Boolean syntax.  The only allowed values are " +
-                    "'TRUE' and 'FALSE'");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_BIT_STRING_TOO_SHORT,
-                    "The provided value %s is too short to be a valid bit " +
-                    "string.  A bit string must be a series of binary digits " +
-                    "surrounded by single quotes and followed by a capital " +
-                    "letter B");
-    registerMessage(MSGID_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED,
-                    "The provided value %s is not a valid bit string because " +
-                    "it is not surrounded by single quotes and followed by a " +
-                    "capital letter B");
-    registerMessage(MSGID_ATTR_SYNTAX_BIT_STRING_INVALID_BIT,
-                    "The provided value %s is not a valid bit string because " +
-                    "%s is not a valid binary digit");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_COUNTRY_STRING_INVALID_LENGTH,
-                    "The provided value %s is not a valid country string " +
-                    "because the length is not exactly two characters");
-    registerMessage(MSGID_ATTR_SYNTAX_COUNTRY_STRING_NOT_PRINTABLE,
-                    "The provided value %s is not a valid country string " +
-                    "because it contains one or more non-printable " +
-                    "characters");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_DELIVERY_METHOD_NO_ELEMENTS,
-                    "The provided value %s is not a valid delivery method " +
-                    "value because it does not contain any elements");
-    registerMessage(MSGID_ATTR_SYNTAX_DELIVERY_METHOD_INVALID_ELEMENT,
-                    "The provided value %s is not a valid delivery method " +
-                    "value because %s is not a valid method");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_TOO_SHORT,
-                    "The provided value %s is too short to be a valid " +
-                    "generalized time value");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_YEAR,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because the %s character is not allowed in the " +
-                    "century or year specification");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because %s is not a valid month specification");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because %s is not a valid day specification");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because %s is not a valid hour specification");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because %s is not a valid minute specification");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SECOND,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because %s is not a valid second specification");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SUBSECOND,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because the sub-second component is not valid " +
-                    "(between 1 and 3 numeric digits)");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_LONG_SUBSECOND,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because the sub-second value may not contain more " +
-                    "than three digits");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because %s is not a valid GMT offset");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because it contains an invalid character %s at " +
-                    "position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_CANNOT_PARSE,
-                    "The provided value %s could not be parsed as a valid " +
-                    "generalized time:  %s");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_NORMALIZE_FAILURE,
-                    "An unexpected error occurred while trying to normalize " +
-                    "value %s as a generalized time value:  %s");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_FRACTION_CHAR,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because it contains illegal character %s in the " +
-                    "fraction component");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_EMPTY_FRACTION,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because it does not contain at least one digit " +
-                    "after the period to use as the fractional component");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_NO_TIME_ZONE_INFO,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because it does not end with 'Z' or a time zone " +
-                    "offset");
-    registerMessage(MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME,
-                    "The provided value %s is not a valid generalized time " +
-                    "value because it represents an invalid time (e.g., a " +
-                    "date that does not exist):  %s");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_DN_INVALID,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name:  %s");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_END_WITH_COMMA,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because the last non-space character " +
-                    "was a comma or semicolon");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_ATTR_START_WITH_DIGIT,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because numeric digit %s is not " +
-                    "allowed as the first character in an attribute name");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because character %s at position %d " +
-                    "is not allowed in an attribute name");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_UNDERSCORE_CHAR,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because the underscore character is " +
-                    "not allowed in an attribute name unless the %s " +
-                    " configuration option is enabled");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DASH,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because the hyphen character is not " +
-                    "allowed as the first character of an attribute name");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_UNDERSCORE,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because the underscore character is " +
-                    "not allowed as the first character of an attribute name " +
-                    "even if the %s configuration option is enabled");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DIGIT,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because the digit %s is not allowed " +
-                    "allowed as the first character of an attribute name " +
-                    "unless the name is specified as an OID or the %s " +
-                    " configuration option is enabled");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_ATTR_NO_NAME,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because it contained an RDN " +
-                    "containing an empty attribute name");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because the parsed attribute name %s " +
-                    "included a period but that name did not appear to be a " +
-                    "valid OID");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because the last non-space character " +
-                    "was part of the attribute name %s");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_NO_EQUAL,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because the next non-space character " +
-                    "after attribute name %s should have been an equal sign " +
-                    "but instead was %s");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_INVALID_CHAR,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because character %s at position %d " +
-                    "is not valid");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because an attribute value started " +
-                    "with an octothorpe (#) but was not followed by a " +
-                    "positive multiple of two hexadecimal digits");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because an attribute value started " +
-                    "with an octothorpe (#) but contained a character %s " +
-                    "that was not a valid hexadecimal digit");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because an unexpected failure " +
-                    "occurred while attempting to parse an attribute value " +
-                    "from one of the RDN components:  %s");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_UNMATCHED_QUOTE,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because one of the RDN components " +
-                    "included a quoted value that did not have a " +
-                    "corresponding closing quotation mark");
-    registerMessage(MSGID_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID,
-                    "The provided value %s could not be parsed as a valid " +
-                    "distinguished name because one of the RDN components " +
-                    "included a value with an escaped hexadecimal digit that " +
-                    "was not followed by a second hexadecimal digit");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_INTEGER_INITIAL_ZERO,
-                    "The provided value %s could not be parsed as a valid " +
-                    "integer because the first digit may not be zero unless " +
-                    "it is the only digit");
-    registerMessage(MSGID_ATTR_SYNTAX_INTEGER_MISPLACED_DASH,
-                    "The provided value %s could not be parsed as a valid " +
-                    "integer because the dash may only appear if it is the " +
-                    "first character of the value followed by one or more " +
-                    "digits");
-    registerMessage(MSGID_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER,
-                    "The provided value %s could not be parsed as a valid " +
-                    "integer because character %s at position %d is not " +
-                    "allowed in an integer value");
-    registerMessage(MSGID_ATTR_SYNTAX_INTEGER_EMPTY_VALUE,
-                    "The provided value %s could not be parsed as a valid " +
-                    "integer because it did not contain any digits");
-    registerMessage(MSGID_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE,
-                    "The provided value %s could not be parsed as a valid " +
-                    "integer because it contained only a dash not followed " +
-                    "by an integer value");
-    registerMessage(MSGID_ATTR_SYNTAX_ILLEGAL_INTEGER,
-                    "The provided value %s is not allowed for attributes " +
-                    "with a Integer syntax");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_OID_NO_VALUE,
-                    "The provided value could not be parsed as a valid OID " +
-                    "because it did not contain any characters");
-    registerMessage(MSGID_ATTR_SYNTAX_OID_ILLEGAL_CHARACTER,
-                    "The provided value %s could not be parsed as a valid " +
-                    "OID because it had an illegal character at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_OID_CONSECUTIVE_PERIODS,
-                    "The provided value %s could not be parsed as a valid " +
-                    "OID because it had two consecutive periods at or near " +
-                    "position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_OID_ENDS_WITH_PERIOD,
-                    "The provided value %s could not be parsed as a valid " +
-                    "OID because it ends with a period");
-    registerMessage(MSGID_ATTR_SYNTAX_OID_INVALID_VALUE,
-                    "The provided value %s could not be parsed as a valid " +
-                    "OID:  %s");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_EMPTY_VALUE,
-                    "The provided value could not be parsed as a valid " +
-                    "attribute type description because it was empty or " +
-                    "contained only whitespace");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_EXPECTED_OPEN_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute type description because an open parenthesis " +
-                    "was expected at position %d but instead a '%s' " +
-                    "character was found");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute type description because the end of the " +
-                    "value was encountered while the Directory Server " +
-                    "expected more data to be provided");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute type description because the numeric OID " +
-                    "contained two consecutive periods at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute type description because the numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_STRING_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute type description because the non-numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute type description because it contained an " +
-                    "illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_UNEXPECTED_CLOSE_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute type description because it contained an " +
-                    "unexpected closing parenthesis at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute type description because a single quote was " +
-                    "expected as the first non-blank character following " +
-                    "token %s.  However, the character %s was found instead");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUPERIOR_TYPE,
-                    "The definition for the attribute type with OID %s " +
-                    "declared a superior type with an OID of %s.  No " +
-                    "attribute type with this OID exists in the server " +
-                    "schema");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_APPROXIMATE_MR,
-                    "The definition for the attribute type with OID %s " +
-                    "declared that approximate matching should be performed " +
-                    "using the matching rule \"%s\".  No such approximate " +
-                    "matching rule is configured for use in the Directory " +
-                    "Server");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_EQUALITY_MR,
-                    "The definition for the attribute type with OID %s " +
-                    "declared that equality matching should be performed " +
-                    "using the matching rule \"%s\".  No such equality " +
-                    "matching rule is configured for use in the Directory " +
-                    "Server");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_ORDERING_MR,
-                    "The definition for the attribute type with OID %s " +
-                    "declared that ordering matching should be performed " +
-                    "using the matching rule \"%s\".  No such ordering " +
-                    "matching rule is configured for use in the Directory " +
-                    "Server");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUBSTRING_MR,
-                    "The definition for the attribute type with OID %s " +
-                    "declared that substring matching should be performed " +
-                    "using the matching rule \"%s\".  No such substring " +
-                    "matching rule is configured for use in the Directory " +
-                    "Server");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SYNTAX,
-                    "The definition for the attribute type with OID %s " +
-                    "declared that it should have a syntax with OID %s.  No " +
-                    "such syntax is configured for use in the Directory " +
-                    "Server");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_INVALID_ATTRIBUTE_USAGE,
-                    "The definition for the attribute type with OID %s " +
-                    "declared that it should have an attribute usage of " +
-                    "%s.  This is an invalid usage");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_INVALID_SUPERIOR_USAGE,
-                    "The definition for attribute type %s is invalid because " +
-                    "its attribute usage %s is not the same as the usage for " +
-                    "its superior type %s");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_COLLECTIVE_FROM_NONCOLLECTIVE,
-                    "The definition for attribute type %s is invalid because " +
-                    "it is defined as a collective type but the superior " +
-                    "type %s is not collective");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_NONCOLLECTIVE_FROM_COLLECTIVE,
-                    "The definition for attribute type %s is invalid because " +
-                    "it is not defined as a collective type but the superior " +
-                    "type %s is collective");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_COLLECTIVE_IS_OPERATIONAL,
-                    "The definition for attribute type %s is invalid because " +
-                    "it is declared COLLECTIVE but does not have a usage " +
-                    "of userApplications");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_NO_USER_MOD_NOT_OPERATIONAL,
-                    "The definition for attribute type %s is invalid because " +
-                    "it is declared NO-USER-MODIFICATION but does not have " +
-                    "an operational usage");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute type description because a single quote was " +
-                    "expected at position %d but the character %s was found " +
-                    "instead");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_EMPTY_VALUE,
-                    "The provided value could not be parsed as a valid " +
-                    "objectclass description because it was empty or " +
-                    "contained only whitespace");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_OPEN_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "objectclass description because an open parenthesis was " +
-                    "expected at position %d but instead a '%s' character " +
-                    "was found");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "objectclass description because the end of the value " +
-                    "was encountered while the Directory Server expected " +
-                    "more data to be provided");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "objectclass description because the numeric OID " +
-                    "contained two consecutive periods at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "objectclass description because the numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "objectclass description because the non-numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "objectclass description because it contained an illegal " +
-                    "character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_UNEXPECTED_CLOSE_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "objectclass description because it contained an " +
-                    "unexpected closing parenthesis at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "objectclass description because a single quote was " +
-                    "expected as the first non-blank character following " +
-                    "token %s.  However, the character %s was found instead");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_SUPERIOR_CLASS,
-                    "The definition for the objectclass with OID %s declared " +
-                    "a superior objectclass with an OID of %s.  No " +
-                    "objectclass with this OID exists in the server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "objectclass description because a single quote was " +
-                    "expected at position %d but the character %s was found " +
-                    "instead");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_REQUIRED_ATTR,
-                    "The definition for the objectclass with OID %s declared " +
-                    "that it should include required attribute \"%s\".  No " +
-                    "attribute type matching this name or OID exists in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_OPTIONAL_ATTR,
-                    "The definition for the objectclass with OID %s declared " +
-                    "that it should include optional attribute \"%s\".  No " +
-                    "attribute type matching this name or OID exists in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE,
-                    "The definition for objectclass %s is invalid because it " +
-                    "has an objectclass type of %s but this is incompatible " +
-                    "with the objectclass type %s for the superior class %s");
-    registerMessage(MSGID_ATTR_SYNTAX_OBJECTCLASS_STRUCTURAL_SUPERIOR_NOT_TOP,
-                    "The definition for objectclass %s is invalid because " +
-                    "it is defined as a structural class but its superior " +
-                    "chain does not include the \"top\" objectclass");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER,
-                    "The provided value \"%s\" cannot be parsed as a valid " +
-                    "IA5 string because it contains an illegal character " +
-                    "\"%s\" that is not allowed in the IA5 (ASCII) character " +
-                    "set");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_TELEPHONE_DESCRIPTION_STRICT_MODE,
-                    "This indicates whether the telephone number attribute " +
-                    "syntax should use a strict mode in which it will only " +
-                    "accept values in the ITU-T E.123 format.  If this is " +
-                    "enabled, then any value not in this format will be " +
-                    "rejected.  If this is disabled, then any value will " +
-                    "be accepted, but only the digits will be considered " +
-                    "when performing matching");
-    registerMessage(MSGID_ATTR_SYNTAX_TELEPHONE_CANNOT_DETERMINE_STRICT_MODE,
-                    "An error occurred while trying to retrieve attribute " +
-                    ATTR_TELEPHONE_STRICT_MODE + " from configuration entry " +
-                    "%s:  %s.  The Directory Server will not enforce strict " +
-                    "compliance to the ITU-T E.123 format for telephone " +
-                    "number values");
-    registerMessage(MSGID_ATTR_SYNTAX_TELEPHONE_EMPTY,
-                    "The provided value is not a valid telephone number " +
-                    "because it is empty or null");
-    registerMessage(MSGID_ATTR_SYNTAX_TELEPHONE_NO_PLUS,
-                    "The provided value \"%s\" is not a valid telephone " +
-                    "number because strict telephone number checking is " +
-                    "enabled and the value does not start with a plus sign " +
-                    "in compliance with the ITU-T E.123 specification");
-    registerMessage(MSGID_ATTR_SYNTAX_TELEPHONE_ILLEGAL_CHAR,
-                    "The provided value \"%s\" is not a valid telephone " +
-                    "number because strict telephone number checking is " +
-                    "enabled and the character %s at position %d is not " +
-                    "allowed by the ITU-T E.123 specification");
-    registerMessage(MSGID_ATTR_SYNTAX_TELEPHONE_NO_DIGITS,
-                    "The provided value \"%s\" is not a valid telephone " +
-                    "number because it does not contain any numeric digits");
-    registerMessage(MSGID_ATTR_SYNTAX_TELEPHONE_UPDATED_STRICT_MODE,
-                    "The value of configuration attribute " +
-                    ATTR_TELEPHONE_STRICT_MODE + ", which indicates whether " +
-                    "to use strict telephone number syntax checking, has " +
-                    "been updated to %s in configuration entry %s");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR,
-                    "The provided value \"%s\" is not a valid numeric string " +
-                    "because it contained character %s at position %d that " +
-                    "was neither a digit nor a space");
-    registerMessage(MSGID_ATTR_SYNTAX_NUMERIC_STRING_EMPTY_VALUE,
-                    "The provided value is not a valid numeric string " +
-                    "because it did not contain any characters.  A numeric " +
-                    "string value must contain at least one numeric digit " +
-                    "or space");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_EMPTY_VALUE,
-                    "The provided value could not be parsed as a valid " +
-                    "attribute syntax description because it was empty or " +
-                    "contained only whitespace");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_OPEN_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because an open " +
-                    "parenthesis was expected at position %d but instead a " +
-                    "'%s' character was found");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because the end of the " +
-                    "value was encountered while the Directory Server " +
-                    "expected more data to be provided");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because the numeric OID " +
-                    "contained two consecutive periods at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because the numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_IN_STRING_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because the non-numeric " +
-                    "OID contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because it contained an " +
-                    "unexpected closing parenthesis at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_TOKEN,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because an unexpected " +
-                    "error occurred while trying to read the \"DESC\" token " +
-                    "from the string at or near position %d:  %s");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_TOKEN_NOT_DESC,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because the \"DESC\" token " +
-                    "was expected but the string \"%s\" was found instead");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_VALUE,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because an unexpected " +
-                    "error occurred while trying to read the value of the " +
-                    "\"DESC\" token from the string at or near position %d:  " +
-                    "%s");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_CLOSE_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because a close " +
-                    "parenthesis was expected at position %d but instead a " +
-                    "'%s' character was found");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_AFTER_CLOSE,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because an illegal " +
-                    "character %s was found at position %d after the close " +
-                    "parenthesis");
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_QUOTE_AT_POS,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "attribute syntax description because a single quote was " +
-                    "expected at position %d but the character %s was found " +
-                    "instead");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_PRINTABLE_STRING_EMPTY_VALUE,
-                    "The provided value could not be parsed as a printable " +
-                    "string because it was null or empty.  A printable " +
-                    "string must contain at least one character");
-    registerMessage(MSGID_ATTR_SYNTAX_PRINTABLE_STRING_ILLEGAL_CHARACTER,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "printable string because it contained an invalid " +
-                    "character %s at position %d");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_SUBSTRING_ONLY_WILDCARD,
-                    "The provided value \"*\" could not be parsed as a " +
-                    "substring assertion because it consists only of a " +
-                    "wildcard character and zero-length substrings are not " +
-                    "allowed");
-    registerMessage(MSGID_ATTR_SYNTAX_SUBSTRING_CONSECUTIVE_WILDCARDS,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "substring assertion because it contains consecutive " +
-                    "wildcard characters at position %d and zero-length " +
-                    "substrings are not allowed");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_UTC_TIME_TOO_SHORT,
-                    "The provided value %s is too short to be a valid UTC " +
-                    "time value");
-    registerMessage(MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_YEAR,
-                    "The provided value %s is not a valid UTC time value " +
-                    "because the %s character is not allowed in the century " +
-                    "or year specification");
-    registerMessage(MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH,
-                    "The provided value %s is not a valid UTC time value " +
-                    "because %s is not a valid month specification");
-    registerMessage(MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_DAY,
-                    "The provided value %s is not a valid UTC time value " +
-                    "because %s is not a valid day specification");
-    registerMessage(MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR,
-                    "The provided value %s is not a valid UTC time value " +
-                    "because %s is not a valid hour specification");
-    registerMessage(MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_MINUTE,
-                    "The provided value %s is not a valid UTC time value " +
-                    "because %s is not a valid minute specification");
-    registerMessage(MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR,
-                    "The provided value %s is not a valid UTC time value " +
-                    "because it contains an invalid character %s at position " +
-                    "%d");
-    registerMessage(MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND,
-                    "The provided value %s is not a valid UTC time value " +
-                    "because %s is not a valid second specification");
-    registerMessage(MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET,
-                    "The provided value %s is not a valid UTC time value " +
-                    "because %s is not a valid GMT offset");
-    registerMessage(MSGID_ATTR_SYNTAX_UTC_TIME_CANNOT_PARSE,
-                    "The provided value %s could not be parsed as a valid " +
-                    "UTC time:  %s");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_EMPTY_VALUE,
-                    "The provided value could not be parsed as a valid DIT " +
-                    "content rule description because it was empty or " +
-                    "contained only whitespace");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_EXPECTED_OPEN_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "content rule description because an open parenthesis " +
-                    "was expected at position %d but instead a '%s' " +
-                    "character was found");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "content rule description because the end of the value " +
-                    "was encountered while the Directory Server expected " +
-                    "more data to be provided");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "content rule description because the numeric OID " +
-                    "contained two consecutive periods at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "content rule description because the numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "content rule description because the non-numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_UNKNOWN_STRUCTURAL_CLASS,
-                    "The DIT content rule \"%s\" is associated with a " +
-                    "structural objectclass %s that is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_STRUCTURAL_CLASS_NOT_STRUCTURAL,
-                    "The DIT content rule \"%s\" is associated with the " +
-                    "objectclass with OID %s (%s).  This objectclass exists " +
-                    "in the server schema but is defined as %s rather than " +
-                    "structural");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_UNEXPECTED_CLOSE_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "content rule description because it contained an " +
-                    "unexpected closing parenthesis at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "content rule description because it contained an " +
-                    "illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS,
-                    "The DIT content rule \"%s\" is associated with an " +
-                    "auxiliary objectclass %s that is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY,
-                    "The DIT content rule \"%s\" is associated with an " +
-                    "auxiliary objectclass %s.  This objectclass exists " +
-                    "in the server schema but is defined as %s rather than " +
-                    "auxiliary");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR,
-                    "The DIT content rule \"%s\" is associated with a " +
-                    "required attribute type %s that is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR,
-                    "The DIT content rule \"%s\" is associated with an " +
-                    "optional attribute type %s that is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR,
-                    "The DIT content rule \"%s\" is associated with a " +
-                    "prohibited attribute type %s that is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_STRUCTURAL,
-                    "The DIT content rule \"%s\" is not valid because it " +
-                    "prohibits the use of attribute type %s which is " +
-                    "required by the associated structural object class %s");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_AUXILIARY,
-                    "The DIT content rule \"%s\" is not valid because it " +
-                    "prohibits the use of attribute type %s which is " +
-                    "required by the associated auxiliary object class %s");
-    registerMessage(MSGID_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "content rule description because a single quote was " +
-                    "expected at position %d but the %s character was found " +
-                    "instead");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_EMPTY_VALUE,
-                    "The provided value could not be parsed as a valid name " +
-                    "form description because it was empty or contained only " +
-                    "whitespace");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_EXPECTED_OPEN_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as a name " +
-                    "form description because an open parenthesis was " +
-                    "expected at position %d but instead a '%s' character " +
-                    "was found");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE,
-                    "The provided value \"%s\" could not be parsed as a name " +
-                    "form description because the end of the value was " +
-                    "encountered while the Directory Server expected more " +
-                    "data to be provided");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_DOUBLE_PERIOD_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as a name " +
-                    "form description because the numeric OID contained two " +
-                    "consecutive periods at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as a name " +
-                    "form description because the numeric OID contained an " +
-                    "illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_STRING_OID,
-                    "The provided value \"%s\" could not be parsed as a name " +
-                    "form description because the non-numeric OID contained " +
-                    "an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_UNEXPECTED_CLOSE_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as a name " +
-                    "form description because it contained an unexpected " +
-                    "closing parenthesis at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR,
-                    "The provided value \"%s\" could not be parsed as a name " +
-                    "form description because it contained an illegal " +
-                    "character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_STRUCTURAL_CLASS,
-                    "The name form description \"%s\" is associated with a " +
-                    "structural objectclass %s that is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_STRUCTURAL_CLASS_NOT_STRUCTURAL,
-                    "The name form description \"%s\" is associated with the " +
-                    "objectclass with OID %s (%s).  This objectclass exists " +
-                    "in the server schema but is defined as %s rather than " +
-                    "structural");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_REQUIRED_ATTR,
-                    "The definition for the name form with OID %s declared " +
-                    "that it should include required attribute \"%s\".  No " +
-                    "attribute type matching this name or OID exists in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_OPTIONAL_ATTR,
-                    "The definition for the name form with OID %s declared " +
-                    "that it should include optional attribute \"%s\".  No " +
-                    "attribute type matching this name or OID exists in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_NO_STRUCTURAL_CLASS,
-                    "The provided value \"%s\" could not be parsed as a name " +
-                    "form description because it does not specify the " +
-                    "structural objectclass with which it is associated");
-    registerMessage(MSGID_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS,
-                    "The provided value \"%s\" could not be parsed as a name " +
-                    "form description because a single quote was expected at " +
-                    "position %d but the %s character was found instead");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_MR_EMPTY_VALUE,
-                    "The provided value could not be parsed as a valid " +
-                    "matching rule description because it was empty or " +
-                    "contained only whitespace");
-    registerMessage(MSGID_ATTR_SYNTAX_MR_EXPECTED_OPEN_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule description because an open parenthesis " +
-                    "was expected at position %d but instead a '%s' " +
-                    "character was found");
-    registerMessage(MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule description because the end of the value " +
-                    "was encountered while the Directory Server expected " +
-                    "more data to be provided");
-    registerMessage(MSGID_ATTR_SYNTAX_MR_DOUBLE_PERIOD_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule description because the numeric OID " +
-                    "contained two consecutive periods at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_MR_ILLEGAL_CHAR_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule description because the numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_MR_ILLEGAL_CHAR_IN_STRING_OID,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule description because the non-numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_MR_UNEXPECTED_CLOSE_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule description because it contained an " +
-                    "unexpected closing parenthesis at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_MR_ILLEGAL_CHAR,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule description because it contained an " +
-                    "illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_MR_UNKNOWN_SYNTAX,
-                    "The matching rule description \"%s\" is associated with " +
-                    "attribute syntax %s that is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_MR_NO_SYNTAX,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule description because it does not specify " +
-                    "the attribute syntax with which it is associated");
-    registerMessage(MSGID_ATTR_SYNTAX_MR_EXPECTED_QUOTE_AT_POS,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule description because a single quote was " +
-                    "expected at position %d but the %s character was found " +
-                    "instead");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_EMPTY_VALUE,
-                    "The provided value could not be parsed as a valid " +
-                    "matching rule use description because it was empty or " +
-                    "contained only whitespace");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_EXPECTED_OPEN_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule use description because an open " +
-                    "parenthesis was expected at position %d but instead a " +
-                    "'%s' character was found");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule use description because the end of the " +
-                    "value was encountered while the Directory Server " +
-                    "expected more data to be provided");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_DOUBLE_PERIOD_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule use description because the numeric OID " +
-                    "contained two consecutive periods at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule use description because the numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_STRING_OID,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule use description because the non-numeric " +
-                    "OID contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_UNKNOWN_MATCHING_RULE,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule use description because the specified " +
-                    "matching rule %s is unknown");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_UNEXPECTED_CLOSE_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule use description because it contained an " +
-                    "unexpected closing parenthesis at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule use description because it contained an " +
-                    "illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR,
-                    "The matching rule use description \"%s\" is associated " +
-                    "with attribute type %s that is not defined in the " +
-                    "server schema");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_NO_ATTR,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule description because it does not specify " +
-                    "the set of attribute types that may be used with the " +
-                    "associated OID");
-    registerMessage(MSGID_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "matching rule use description because a single quote " +
-                    "was expected at position %d but the %s character was " +
-                    "found instead");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_EMPTY_VALUE,
-                    "The provided value could not be parsed as a valid DIT " +
-                    "structure rule description because it was empty or " +
-                    "contained only whitespace");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_EXPECTED_OPEN_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because an open parenthesis " +
-                    "was expected at position %d but instead a '%s' " +
-                    "character was found");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because the end of the value " +
-                    "was encountered while the Directory Server expected " +
-                    "more data to be provided");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because the rule ID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_UNEXPECTED_CLOSE_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because it contained an " +
-                    "unexpected closing parenthesis at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because it contained an " +
-                    "illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_UNKNOWN_NAME_FORM,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because it referenced an " +
-                    "unknown name form %s");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_UNKNOWN_RULE_ID,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because it referenced an " +
-                    "unknown rule ID %d for a superior DIT structure rule");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_NO_NAME_FORM,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because it did not specify " +
-                    "the name form for the rule");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_EXPECTED_QUOTE_AT_POS,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because a single quote was " +
-                    "expected at position %d but the %s character was found " +
-                    "instead");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_DOUBLE_PERIOD_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because the numeric OID " +
-                    "contained two consecutive periods at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_NUMERIC_OID,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because the numeric OID " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_STRING_OID,
-                    "The provided value \"%s\" could not be parsed as a DIT " +
-                    "structure rule description because the non-numeric OID " +
-                    "contained an illegal character %s at position %d");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_TELEX_TOO_SHORT,
-                    "The provided value \"%s\" is too short to be a valid " +
-                    "telex number value");
-    registerMessage(MSGID_ATTR_SYNTAX_TELEX_NOT_PRINTABLE,
-                    "The provided value \"%s\" does not hold a valid telex " +
-                    "number because a character %s at position %d was not " +
-                    "a valid printable string character");
-    registerMessage(MSGID_ATTR_SYNTAX_TELEX_ILLEGAL_CHAR,
-                    "The provided value \"%s\" does not hold a valid telex " +
-                    "number because character %s at position %d was neither " +
-                    "a valid printable string character nor a dollar sign to " +
-                    "separate the telex number components");
-    registerMessage(MSGID_ATTR_SYNTAX_TELEX_TRUNCATED,
-                    "The provided value \"%s\" does not hold a valid telex " +
-                    "number because the end of the value was found before " +
-                    "three dollar-delimited printable strings could be read");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_FAXNUMBER_EMPTY,
-                    "The provided value could not be parsed as a valid " +
-                    "facsimile telephone number because it was empty");
-    registerMessage(MSGID_ATTR_SYNTAX_FAXNUMBER_NOT_PRINTABLE,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "valid facsimile telephone number because character %s " +
-                    "at position %d was not a valid printable string " +
-                    "character");
-    registerMessage(MSGID_ATTR_SYNTAX_FAXNUMBER_END_WITH_DOLLAR,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "valid facsimile telephone number because it ends with " +
-                    "a dollar sign, but that dollar sign should have been " +
-                    "followed by a fax parameter");
-    registerMessage(MSGID_ATTR_SYNTAX_FAXNUMBER_ILLEGAL_PARAMETER,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "valid facsimile telephone number because the string " +
-                    "\"%s\" between positions %d and %d was not a valid fax " +
-                    "parameter");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_NAMEANDUID_INVALID_DN,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "valid name and optional UID value because an error " +
-                    "occurred while trying to parse the DN portion:  %s");
-    registerMessage(MSGID_ATTR_SYNTAX_NAMEANDUID_ILLEGAL_BINARY_DIGIT,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "valid name and optional UID value because the UID " +
-                    "portion contained an illegal binary digit %s at " +
-                    "position %d");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_TELETEXID_EMPTY,
-                    "The provided value could not be parsed as a valid " +
-                    "teletex terminal identifier because it was empty");
-    registerMessage(MSGID_ATTR_SYNTAX_TELETEXID_NOT_PRINTABLE,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "valid teletex terminal identifier because character %s " +
-                    "at position %d was not a valid printable string " +
-                    "character");
-    registerMessage(MSGID_ATTR_SYNTAX_TELETEXID_END_WITH_DOLLAR,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "valid teletex terminal identifier because it ends with " +
-                    "a dollar sign, but that dollar sign should have been " +
-                    "followed by a TTX parameter");
-    registerMessage(MSGID_ATTR_SYNTAX_TELETEXID_PARAM_NO_COLON,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "valid teletex terminal identifier because the parameter " +
-                    "string does not contain a colon to separate the name " +
-                    "from the value");
-    registerMessage(MSGID_ATTR_SYNTAX_TELETEXID_ILLEGAL_PARAMETER,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "valid teletex terminal identifier because the string " +
-                    "\"%s\" is not a valid TTX parameter name");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_OTHER_MAILBOX_EMPTY_VALUE,
-                    "The provided value could not be parsed as an other " +
-                    "mailbox value because it was empty");
-    registerMessage(MSGID_ATTR_SYNTAX_OTHER_MAILBOX_NO_MBTYPE,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "other mailbox value because there was no mailbox type " +
-                    "before the dollar sign");
-    registerMessage(MSGID_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MBTYPE_CHAR,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "other mailbox value because the mailbox type contained " +
-                    "an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_OTHER_MAILBOX_NO_MAILBOX,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "other mailbox value because there was no mailbox after " +
-                    "the dollar sign");
-    registerMessage(MSGID_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MB_CHAR,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "other mailbox value because the mailbox contained an " +
-                    "illegal character %s at position %d");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_GUIDE_NO_OC,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "guide value because it did not contain an objectclass " +
-                    "name or OID before the octothorpe (#) character");
-    registerMessage(MSGID_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "guide value because the criteria portion %s contained " +
-                    "an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_GUIDE_MISSING_CLOSE_PAREN,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "guide value because the criteria portion %s did not " +
-                    "contain a close parenthesis that corresponded to the " +
-                    "initial open parenthesis");
-    registerMessage(MSGID_ATTR_SYNTAX_GUIDE_INVALID_QUESTION_MARK,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "guide value because the criteria portion %s started " +
-                    "with a question mark but was not followed by the string " +
-                    "\"true\" or \"false\"");
-    registerMessage(MSGID_ATTR_SYNTAX_GUIDE_NO_DOLLAR,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "guide value because the criteria portion %s did not " +
-                    "contain a dollar sign to separate the attribute type " +
-                    "from the match type");
-    registerMessage(MSGID_ATTR_SYNTAX_GUIDE_NO_ATTR,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "guide value because the criteria portion %s did not " +
-                    "specify an attribute type before the dollar sign");
-    registerMessage(MSGID_ATTR_SYNTAX_GUIDE_NO_MATCH_TYPE,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "guide value because the criteria portion %s did not " +
-                    "specify a match type after the dollar sign");
-    registerMessage(MSGID_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE,
-                    "The provided value \"%s\" could not be parsed as a " +
-                    "guide value because the criteria portion %s had an " +
-                    "invalid match type starting at position %d");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_SHARP,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "enhanced guide value because it did not contain an " +
-                    "octothorpe (#) character to separate the objectclass " +
-                    "from the criteria");
-    registerMessage(MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_OC,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "enhanced guide value because it did not contain an " +
-                    "objectclass name or OID before the octothorpe (#) " +
-                    "character");
-    registerMessage(MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_DOUBLE_PERIOD_IN_OC_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "enhanced guide value because the numeric OID %s " +
-                    "specifying the objectclass contained two consecutive " +
-                    "periods at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_ILLEGAL_CHAR_IN_OC_OID,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "enhanced guide value because the numeric OID %s " +
-                    "specifying the objectclass contained an illegal " +
-                    "character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_ILLEGAL_CHAR_IN_OC_NAME,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "enhanced guide value because the objectclass name %s " +
-                    "contained an illegal character %s at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_FINAL_SHARP,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "enhanced guide value because it did not have an " +
-                    "octothorpe (#) character to separate the criteria from " +
-                    "the scope");
-    registerMessage(MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_SCOPE,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "enhanced guide value because no scope was provided " +
-                    "after the final octothorpe (#) character");
-    registerMessage(MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_INVALID_SCOPE,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "enhanced guide value because the specified scope %s " +
-                    "was invalid");
-    registerMessage(MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_CRITERIA,
-                    "The provided value \"%s\" could not be parsed as an " +
-                    "enhanced guide value because it did not specify any " +
-                    "criteria between the octothorpe (#) characters");
-
-
-    registerMessage(MSGID_OMR_CASE_EXACT_COMPARE_CANNOT_NORMALIZE,
-                    "An error occurred while attempting to compare two " +
-                    "AttributeValue objects using the caseExactOrderingMatch " +
-                    "matching rule because the normalized form of one of " +
-                    "those values could not be retrieved:  %s");
-    registerMessage(MSGID_OMR_CASE_EXACT_COMPARE_INVALID_TYPE,
-                    "An error occurred while attempting to compare two " +
-                    "objects using the caseExactOrderingMatch matching rule " +
-                    "because the objects were of an unsupported type %s.  " +
-                    "Only byte arrays, ASN.1 octet strings, and attribute " +
-                    "value objects may be compared");
-
-
-    registerMessage(MSGID_OMR_CASE_IGNORE_COMPARE_CANNOT_NORMALIZE,
-                    "An error occurred while attempting to compare two " +
-                    "AttributeValue objects using the " +
-                    "caseIgnoreOrderingMatch matching rule because the " +
-                    "normalized form of one of those values could not be " +
-                    "retrieved:  %s");
-    registerMessage(MSGID_OMR_CASE_IGNORE_COMPARE_INVALID_TYPE,
-                    "An error occurred while attempting to compare two " +
-                    "objects using the caseIgnoreOrderingMatch matching rule " +
-                    "because the objects were of an unsupported type %s.  " +
-                    "Only byte arrays, ASN.1 octet strings, and attribute " +
-                    "value objects may be compared");
-
-
-    registerMessage(MSGID_OMR_GENERALIZED_TIME_COMPARE_CANNOT_NORMALIZE,
-                    "An error occurred while attempting to compare two " +
-                    "AttributeValue objects using the " +
-                    "generalizedTimeOrderingMatch matching rule because the " +
-                    "normalized form of one of those values could not be " +
-                    "retrieved:  %s");
-    registerMessage(MSGID_OMR_GENERALIZED_TIME_COMPARE_INVALID_TYPE,
-                    "An error occurred while attempting to compare two " +
-                    "objects using the generalizedTimeOrderingMatch matching " +
-                    "rule because the objects were of an unsupported type " +
-                    "%s.  Only byte arrays, ASN.1 octet strings, and " +
-                    "attribute value objects may be compared");
-
-
-    registerMessage(MSGID_OMR_INTEGER_COMPARE_CANNOT_NORMALIZE,
-                    "An error occurred while attempting to compare two " +
-                    "AttributeValue objects using the integerOrderingMatch " +
-                    "matching rule because the normalized form of one of " +
-                    "those values could not be retrieved:  %s");
-    registerMessage(MSGID_OMR_INTEGER_COMPARE_INVALID_TYPE,
-                    "An error occurred while attempting to compare two " +
-                    "objects using the integerOrderingMatch matching rule " +
-                    "because the objects were of an unsupported type %s.  " +
-                    "Only byte arrays, ASN.1 octet strings, and attribute " +
-                    "value objects may be compared");
-
-
-    registerMessage(MSGID_OMR_NUMERIC_STRING_COMPARE_CANNOT_NORMALIZE,
-                    "An error occurred while attempting to compare two " +
-                    "AttributeValue objects using the " +
-                    "numericStringOrderingMatch matching rule because the " +
-                    "normalized form of one of those values could not be " +
-                    "retrieved:  %s");
-    registerMessage(MSGID_OMR_NUMERIC_STRING_COMPARE_INVALID_TYPE,
-                    "An error occurred while attempting to compare two " +
-                    "objects using the numericStringOrderingMatch matching " +
-                    "rule because the objects were of an unsupported type " +
-                    "%s.  Only byte arrays, ASN.1 octet strings, and " +
-                    "attribute value objects may be compared");
-
-
-    registerMessage(MSGID_OMR_OCTET_STRING_COMPARE_CANNOT_NORMALIZE,
-                    "An error occurred while attempting to compare two " +
-                    "AttributeValue objects using the " +
-                    "octetStringOrderingMatch matching rule because the " +
-                    "normalized form of one of those values could not be " +
-                    "retrieved:  %s");
-    registerMessage(MSGID_OMR_OCTET_STRING_COMPARE_INVALID_TYPE,
-                    "An error occurred while attempting to compare two " +
-                    "objects using the octetStringOrderingMatch matching " +
-                    "rule because the objects were of an unsupported type " +
-                    "%s.  Only byte arrays, ASN.1 octet strings, and " +
-                    "attribute value objects may be compared");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_UUID_INVALID_LENGTH,
-                    "The provided value \"%s\" has an invalid length for a " +
-                    "UUID.  All UUID values must have a length of exactly 36 " +
-                    "bytes, but the provided value had a length of %d bytes");
-    registerMessage(MSGID_ATTR_SYNTAX_UUID_EXPECTED_DASH,
-                    "The provided value \"%s\" should have had a dash at " +
-                    "position %d, but the character '%s' was found instead");
-    registerMessage(MSGID_ATTR_SYNTAX_UUID_EXPECTED_HEX,
-                    "The provided value \"%s\" should have had a hexadecimal " +
-                    "digit at position %d, but the character '%s' was found " +
-                    "instead");
-
-
-    registerMessage(
-         MSGID_ATTR_SYNTAX_DIRECTORYSTRING_DESCRIPTION_ALLOW_ZEROLENGTH,
-         "Indicates whether attributes with the directory string syntax will " +
-         "be allowed to have zero-length values.  This is technically not " +
-         "allowed by the LDAP specifications, but it may be useful for " +
-         "backward compatibility with previous Directory Server releases");
-    registerMessage(
-         MSGID_ATTR_SYNTAX_DIRECTORYSTRING_CANNOT_DETERMINE_ZEROLENGTH,
-         "An error occurred while trying to determine the value of the %s " +
-         "configuration attribute, which indicates whether directory string " +
-         "attributes should be allowed to have zero-length values:  %s");
-    registerMessage(MSGID_ATTR_SYNTAX_DIRECTORYSTRING_INVALID_ZEROLENGTH_VALUE,
-                    "The operation attempted to assign a zero-length value " +
-                    "to an attribute with the directory string syntax");
-    registerMessage(MSGID_ATTR_SYNTAX_DIRECTORYSTRING_UPDATED_ALLOW_ZEROLENGTH,
-                    "The %s attribute in configuration entry %s has been " +
-                    "updated with a new value of %s");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_AUTHPW_INVALID_SCHEME_CHAR,
-                    "The provided authPassword value had an invalid scheme " +
-                    "character at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_AUTHPW_NO_SCHEME,
-                    "The provided authPassword value had a zero-length " +
-                    "scheme element");
-    registerMessage(MSGID_ATTR_SYNTAX_AUTHPW_NO_SCHEME_SEPARATOR,
-                    "The provided authPassword value was missing the " +
-                    "separator character or had an illegal character between " +
-                    "the scheme and authInfo elements");
-    registerMessage(MSGID_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_INFO_CHAR,
-                    "The provided authPassword value had an invalid authInfo " +
-                    "character at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO,
-                    "The provided authPassword value had a zero-length " +
-                    "authInfo element");
-    registerMessage(MSGID_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO_SEPARATOR,
-                    "The provided authPassword value was missing the " +
-                    "separator character or had an illegal character between " +
-                    "the authInfo and authValue elements");
-    registerMessage(MSGID_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_VALUE_CHAR,
-                    "The provided authPassword value had an invalid " +
-                    "authValue character at position %d");
-    registerMessage(MSGID_ATTR_SYNTAX_AUTHPW_NO_AUTH_VALUE,
-                    "The provided authPassword value had a zero-length " +
-                    "authValue element");
-    registerMessage(MSGID_ATTR_SYNTAX_AUTHPW_INVALID_TRAILING_CHAR,
-                    "The provided authPassword value had an invalid trailing " +
-                    "character at position %d");
-
-
-    registerMessage(MSGID_EMR_INTFIRSTCOMP_NO_INITIAL_PARENTHESIS,
-                    "The provided value \"%s\" could not be parsed by the " +
-                    "integer first component matching rule because it did " +
-                    "not start with a parenthesis");
-    registerMessage(MSGID_EMR_INTFIRSTCOMP_NO_NONSPACE,
-                    "The provided value \"%s\" could not be parsed by the " +
-                    "integer first component matching rule because it did " +
-                    "not have any non-space characters after the opening " +
-                    "parenthesis");
-    registerMessage(MSGID_EMR_INTFIRSTCOMP_NO_SPACE_AFTER_INT,
-                    "The provided value \"%s\" could not be parsed by the " +
-                    "integer first component matching rule because it did " +
-                    "not have any space characters after the first component");
-    registerMessage(MSGID_EMR_INTFIRSTCOMP_FIRST_COMPONENT_NOT_INT,
-                    "The provided value \"%s\" could not be parsed by the " +
-                    "integer first component matching rule because the first " +
-                    "component does not appear to be an integer value");
-
-
-    registerMessage(MSGID_ATTR_SYNTAX_USERPW_NO_VALUE,
-                    "No value was given to decode by the user password " +
-                    "attribute syntax");
-    registerMessage(MSGID_ATTR_SYNTAX_USERPW_NO_OPENING_BRACE,
-                    "Unable to decode the provided value according to the " +
-                    "user password syntax because the value does not start " +
-                    "with the opening curly brace (\"{\") character");
-    registerMessage(MSGID_ATTR_SYNTAX_USERPW_NO_CLOSING_BRACE,
-                    "Unable to decode the provided value according to the " +
-                    "user password syntax because the value does not contain " +
-                    "a closing curly brace (\"}\") character");
-    registerMessage(MSGID_ATTR_SYNTAX_USERPW_NO_SCHEME,
-                    "Unable to decode the provided value according to the " +
-                    "user password syntax because the value does not contain " +
-                    "a storage scheme name");
-
-    registerMessage(MSGID_ATTR_SYNTAX_RFC3672_SUBTREE_SPECIFICATION_INVALID,
-                    "The provided value \"%s\" could not be parsed as a" +
-                    " valid RFC 3672 subtree specification");
-
-    registerMessage(MSGID_ATTR_SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_INVALID,
-                    "The provided value \"%s\" could not be parsed as a" +
-                    " valid absolute subtree specification");
-
-    registerMessage(MSGID_ATTR_SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_INVALID,
-                    "The provided value \"%s\" could not be parsed as a" +
-                    " valid relative subtree specification");
-
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER,
-            "The provided value \"%s\" could not be parsed as an " +
-            "attribute syntax extension because an invalid character"+
-            "was found at position %d");
-
-    registerMessage(MSGID_ATTR_SYNTAX_ATTRSYNTAX_INVALID_EXTENSION,
-           "The attribute syntax could not be parsed because of an"+
-           "invalid extension."+ "%s");
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/TaskMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/TaskMessages.java
deleted file mode 100644
index 364ee2d..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/TaskMessages.java
+++ /dev/null
@@ -1,457 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the tools.
- */
-public class TaskMessages
-{
-  /**
-   * The message ID of the message that will be used if a backend could not be
-   * enabled.
-   */
-  public static final int MSGID_TASK_CANNOT_ENABLE_BACKEND =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 1;
-
-
-
-  /**
-   * The message ID of the message that will be used if a backend could not be
-   * disabled.
-   */
-  public static final int MSGID_TASK_CANNOT_DISABLE_BACKEND =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 2;
-
-
-
-  /**
-   * The message ID for the shutdown message that will be used if the Directory
-   * Server shutdown process is initiated by a task that does not include its
-   * own shutdown message.
-   */
-  public static final int MSGID_TASK_SHUTDOWN_DEFAULT_MESSAGE =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_INFORMATIONAL | 3;
-
-
-
-  /**
-   * The message ID for the shutdown message that will be used if the Directory
-   * Server shutdown process is initiated by a task that contains a custom
-   * shutdown message.
-   */
-  public static final int MSGID_TASK_SHUTDOWN_CUSTOM_MESSAGE =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_INFORMATIONAL | 4;
-
-
-
-  /**
-   * The message ID for the shutdown message that will be used if no schema file
-   * names were provided.  This takes two arguments, which are the name of the
-   * attribute and the DN of the entry in which the file names should have been
-   * given.
-   */
-  public static final int MSGID_TASK_ADDSCHEMAFILE_NO_FILENAME =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 5;
-
-
-
-  /**
-   * The message ID for the shutdown message that will be used if a specified
-   * schema file does not exist in the schema directory.  This takes two
-   * arguments, which are the name of the schema file and the path to the schema
-   * directory.
-   */
-  public static final int MSGID_TASK_ADDSCHEMAFILE_NO_SUCH_FILE =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 6;
-
-
-
-  /**
-   * The message ID for the shutdown message that will be used if an error
-   * occurs while attempting to check for the existence of a schema file in the
-   * schema directory.  This takes three arguments, which are the name of the
-   * file, the path to the schema directory, and a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_TASK_ADDSCHEMAFILE_ERROR_CHECKING_FOR_FILE =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 7;
-
-
-
-  /**
-   * The message ID for the shutdown message that will be used if an error
-   * occurs while trying to read and load the contents of a schema file into the
-   * server schema.  This takes two arguments, which are the name of the schema
-   * file and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server is unable to
-   * obtain a write lock on the server schema.  This takes a single argument,
-   * which is the DN of the schema entry.
-   */
-  public static final int MSGID_TASK_ADDSCHEMAFILE_CANNOT_LOCK_SCHEMA =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 9;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt is made to
-   * invoke the add schema file task by a user that does not have the required
-   * privileges.  This does not take any arguments.
-   */
-  public static final int MSGID_TASK_ADDSCHEMAFILE_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 10;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt is made to
-   * invoke the backend backup task by a user that does not have the required
-   * privileges.  This does not take any arguments.
-   */
-  public static final int MSGID_TASK_BACKUP_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 11;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt is made to
-   * invoke the backend restore task by a user that does not have the required
-   * privileges.  This does not take any arguments.
-   */
-  public static final int MSGID_TASK_RESTORE_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 12;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt is made to
-   * invoke the LDIF import task by a user that does not have the required
-   * privileges.  This does not take any arguments.
-   */
-  public static final int MSGID_TASK_LDIFIMPORT_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 13;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt is made to
-   * invoke the LDIF export task by a user that does not have the required
-   * privileges.  This does not take any arguments.
-   */
-  public static final int MSGID_TASK_LDIFEXPORT_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 14;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt is made to
-   * invoke the server shutdown task to restart the server by a user that does
-   * not have the required privileges.  This does not take any arguments.
-   */
-  public static final int MSGID_TASK_SHUTDOWN_INSUFFICIENT_RESTART_PRIVILEGES =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 15;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt is made to
-   * invoke the server shutdown task to shut down the server by a user that does
-   * not have the required privileges.  This does not take any arguments.
-   */
-  public static final int MSGID_TASK_SHUTDOWN_INSUFFICIENT_SHUTDOWN_PRIVILEGES =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 16;
-
-
-
-  /**
-   * The message ID for the shutdown message that will be used if an error
-   * occurs while trying to notify a synchronization provider about the new
-   * schema elements added to the server.  This takes two arguments, which are
-   * the name of the synchronization provider class and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_TASK_ADDSCHEMAFILE_CANNOT_NOTIFY_SYNC_PROVIDER =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 17;
-
-  /**
-   * The message ID for the message that will be used an attempt is made to
-   * invoke the index rebuild task by a user that does not have the required
-   * privileges.  This does not take any arguments.
-   */
-  public static final int MSGID_TASK_INDEXREBUILD_INSUFFICIENT_PRIVILEGES =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 18;
-
-  /**
-   * The message ID for the message that will be used when an invalid domain
-   * base DN is provided as argument to the initialize target task.
-   */
-  public static final int  MSGID_TASK_INITIALIZE_TARGET_INVALID_DN =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 19;
-
-  /**
-   * The message ID for the message that will be used when an invalid domain
-   * base DN is provided as argument to the initialize task.
-   */
-  public static final int  MSGID_TASK_INITIALIZE_INVALID_DN =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 20;
-
-
-
-  /**
-   * The message ID for the message that will be used if a nonroot user attempts
-   * to place the server in lockdown mode.  It does not take any arguments.
-   */
-  public static final int  MSGID_TASK_ENTERLOCKDOWN_NOT_ROOT =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 21;
-
-
-
-  /**
-   * The message ID for the message that will be used if a client not connected
-   * via a loopback address attempts to place the server in lockdown mode.  It
-   * does not take any arguments.
-   */
-  public static final int  MSGID_TASK_ENTERLOCKDOWN_NOT_LOOPBACK =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 22;
-
-
-
-  /**
-   * The message ID for the message that will be used if a nonroot user attempts
-   * to remove the server from lockdown mode.  It does not take any arguments.
-   */
-  public static final int  MSGID_TASK_LEAVELOCKDOWN_NOT_ROOT =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 23;
-
-
-
-  /**
-   * The message ID for the message that will be used if a client not connected
-   * via a loopback address attempts to remove the server from lockdown mode.
-   * It does not take any arguments.
-   */
-  public static final int  MSGID_TASK_LEAVELOCKDOWN_NOT_LOOPBACK =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 24;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client does not
-   * have the DISCONNECT_CLIENT privilege.  It does not take any arguments.
-   */
-  public static final int  MSGID_TASK_DISCONNECT_NO_PRIVILEGE =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 25;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided connection
-   * ID cannot be decoded.  This takes a single argument, which is the invalid
-   * value.
-   */
-  public static final int  MSGID_TASK_DISCONNECT_INVALID_CONN_ID =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 26;
-
-
-
-  /**
-   * The message ID for the message that will be used if the task entry does
-   * not specify a target connection ID.  This takes a single argument, which is
-   * the name of the attribute type used to specify the target connection ID.
-   */
-  public static final int  MSGID_TASK_DISCONNECT_NO_CONN_ID =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 27;
-
-
-
-  /**
-   * The message ID for the message that will be used if the notifyClient
-   * attribute value cannot be decoded.  This takes a single argument, which is
-   * the invalid value.
-   */
-  public static final int  MSGID_TASK_DISCONNECT_INVALID_NOTIFY_CLIENT =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 28;
-
-
-
-  /**
-   * The message ID for the message that will be used as a generic message that
-   * may be sent to the client if no other value is given.  It does not take
-   * any arguments.
-   */
-  public static final int  MSGID_TASK_DISCONNECT_GENERIC_MESSAGE =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_INFORMATIONAL | 29;
-
-
-
-  /**
-   * The message ID for the message that will be used if no client connection
-   * can be found with the specified connection ID.  It takes a single argument,
-   * which is the target connection ID.
-   */
-  public static final int  MSGID_TASK_DISCONNECT_NO_SUCH_CONNECTION =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_SEVERE_ERROR | 30;
-
-
-
-  /**
-   * The message ID for the message that will be used as the message ID for the
-   * disconnectClient method.  The associated message will be defined, but it
-   * will not actually be used, since only the message ID is needed.  It does
-   * not take any arguments.
-   */
-  public static final int  MSGID_TASK_DISCONNECT_MESSAGE =
-       CATEGORY_MASK_TASK | SEVERITY_MASK_INFORMATIONAL | 31;
-
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_TASK_CANNOT_ENABLE_BACKEND,
-                    "The task could not enable a backend: %s");
-    registerMessage(MSGID_TASK_CANNOT_DISABLE_BACKEND,
-                    "The task could not disable a backend: %s");
-
-
-    registerMessage(MSGID_TASK_SHUTDOWN_DEFAULT_MESSAGE,
-                    "The Directory Server shutdown process has been " +
-                    "initiated by task %s");
-    registerMessage(MSGID_TASK_SHUTDOWN_CUSTOM_MESSAGE,
-                    "The Directory Server shutdown process has been " +
-                    "initiated by task %s:  %s");
-    registerMessage(MSGID_TASK_SHUTDOWN_INSUFFICIENT_RESTART_PRIVILEGES,
-                    "You do not have sufficient privileges to initiate a " +
-                    "Directory Server restart");
-    registerMessage(MSGID_TASK_SHUTDOWN_INSUFFICIENT_SHUTDOWN_PRIVILEGES,
-                    "You do not have sufficient privileges to initiate a " +
-                    "Directory Server shutdown");
-
-
-    registerMessage(MSGID_TASK_ADDSCHEMAFILE_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to modify the " +
-                    "server schema");
-    registerMessage(MSGID_TASK_ADDSCHEMAFILE_NO_FILENAME,
-                    "Unable to add one or more files to the server schema " +
-                    "because no schema file names were provided in " +
-                    "attribute %s of task entry %s");
-    registerMessage(MSGID_TASK_ADDSCHEMAFILE_NO_SUCH_FILE,
-                    "Unable to add one or more files to the server schema " +
-                    "because the specified schema file %s does not exist in " +
-                    "schema directory %s");
-    registerMessage(MSGID_TASK_ADDSCHEMAFILE_ERROR_CHECKING_FOR_FILE,
-                    "Unable to add one or more files to the server schema " +
-                    "because an error occurred while attempting to determine " +
-                    "whether file %s exists in schema directory %s:  %s");
-    registerMessage(MSGID_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE,
-                    "An error occurred while attempting to load the contents " +
-                    "of schema file %s into the server schema:  %s");
-    registerMessage(MSGID_TASK_ADDSCHEMAFILE_CANNOT_NOTIFY_SYNC_PROVIDER,
-                    "An error occurred while attempting to notify a " +
-                    "synchronization provider of type %s about the schema " +
-                    "changes made by the add schema file task:  %s");
-    registerMessage(MSGID_TASK_ADDSCHEMAFILE_CANNOT_LOCK_SCHEMA,
-                    "Unable to add one or more files to the server schema " +
-                    "because the server was unable to obtain a write lock on " +
-                    "the schema entry %s after multiple attempts");
-
-
-    registerMessage(MSGID_TASK_BACKUP_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to initiate a " +
-                    "Directory Server backup");
-    registerMessage(MSGID_TASK_RESTORE_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to initiate a " +
-                    "Directory Server restore");
-    registerMessage(MSGID_TASK_LDIFIMPORT_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to initiate an " +
-                    "LDIF import");
-    registerMessage(MSGID_TASK_LDIFEXPORT_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to initiate an " +
-                    "LDIF export");
-    registerMessage(MSGID_TASK_INDEXREBUILD_INSUFFICIENT_PRIVILEGES,
-                    "You do not have sufficient privileges to initiate an " +
-                    "index rebuild");
-
-    registerMessage(MSGID_TASK_INITIALIZE_TARGET_INVALID_DN,
-                    "Invalid DN provided with the Initialize Target task");
-
-    registerMessage(MSGID_TASK_INITIALIZE_INVALID_DN,
-                    "Invalid DN provided with the Initialize task");
-
-
-    registerMessage(MSGID_TASK_ENTERLOCKDOWN_NOT_ROOT,
-                    "Only root users may place the server in lockdown mode");
-    registerMessage(MSGID_TASK_ENTERLOCKDOWN_NOT_LOOPBACK,
-                    "Only root users connected from a loopback address may " +
-                    "place the server in lockdown mode");
-
-    registerMessage(MSGID_TASK_LEAVELOCKDOWN_NOT_ROOT,
-                    "Only root users may cause the server to leave lockdown " +
-                    "mode");
-    registerMessage(MSGID_TASK_LEAVELOCKDOWN_NOT_LOOPBACK,
-                    "Only root users connected from a loopback address may " +
-                    "cause the server to leave lockdown mode");
-
-
-    registerMessage(MSGID_TASK_DISCONNECT_NO_PRIVILEGE,
-                    "You do not have sufficient privileges to terminate " +
-                    "client connections");
-    registerMessage(MSGID_TASK_DISCONNECT_INVALID_CONN_ID,
-                    "Unable to decode value %s as an integer connection ID");
-    registerMessage(MSGID_TASK_DISCONNECT_NO_CONN_ID,
-                    "Attribute %s must be provided to specify the connection " +
-                    "ID for the client to disconnect");
-    registerMessage(MSGID_TASK_DISCONNECT_INVALID_NOTIFY_CLIENT,
-                    "Unable to decode value %s as an indication of whether " +
-                    "to notify the client before disconnecting it.  The " +
-                    "provided value should be either 'true' or 'false'");
-    registerMessage(MSGID_TASK_DISCONNECT_GENERIC_MESSAGE,
-                    "An administrator has terminated this client connection");
-    registerMessage(MSGID_TASK_DISCONNECT_NO_SUCH_CONNECTION,
-                    "There is no client connection with connection ID %s");
-    registerMessage(MSGID_TASK_DISCONNECT_MESSAGE,
-                    "An administrator has terminated this client connection");
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/ToolMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/ToolMessages.java
deleted file mode 100644
index 448e311..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/ToolMessages.java
+++ /dev/null
@@ -1,12931 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.tools.ToolConstants.*;
-import static org.opends.server.util.DynamicConstants.*;
-import static org.opends.server.util.ServerConstants.*;
-
-import org.opends.server.extensions.ConfigFileHandler;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the tools.
- */
-public class ToolMessages
-{
-  /**
-   * The message ID for the message that will be used if an SSL connection
-   * could not be created to the server.
-   */
-  public static final int MSGID_TOOLS_CANNOT_CREATE_SSL_CONNECTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1;
-
-
-
-  /**
-   * The message ID for the message that will be used if an SSL connection
-   * could not be created to the server because the connection factory was
-   * not initialized.
-   */
-  public static final int MSGID_TOOLS_SSL_CONNECTION_NOT_INITIALIZED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 2;
-
-
-
-  /**
-   * The message ID for the message that will be used if the SSL keystore
-   * could not be loaded.
-   */
-  public static final int MSGID_TOOLS_CANNOT_LOAD_KEYSTORE_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 3;
-
-
-  /**
-   * The message ID for the message that will be used if the key manager
-   * could not be initialized.
-   */
-  public static final int MSGID_TOOLS_CANNOT_INIT_KEYMANAGER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 4;
-
-  /**
-   * The message ID for the message that will be used if the SSL trust store
-   * could not be loaded.
-   */
-  public static final int MSGID_TOOLS_CANNOT_LOAD_TRUSTSTORE_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 5;
-
-
-  /**
-   * The message ID for the message that will be used if the trust manager
-   * could not be initialized.
-   */
-  public static final int MSGID_TOOLS_CANNOT_INIT_TRUSTMANAGER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 6;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * listSchemes argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_DESCRIPTION_LISTSCHEMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 7;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * clearPassword argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_DESCRIPTION_CLEAR_PW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * clearPasswordFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_DESCRIPTION_CLEAR_PW_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 9;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * encodedPassword argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_DESCRIPTION_ENCODED_PW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 10;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * encodedPasswordFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_DESCRIPTION_ENCODED_PW_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 11;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configClass argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_CONFIG_CLASS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 12;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * configFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_CONFIG_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 13;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * storageScheme argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_DESCRIPTION_SCHEME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 14;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * help argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_USAGE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 15;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the command-line arguments.  This takes a single argument,
-   * which is an explanation of the problem that occurred.
-   */
-  public static final int MSGID_CANNOT_INITIALIZE_ARGS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 16;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * parsing the command-line arguments.  This takes a single argument, which is
-   * an explanation of the problem that occurred.
-   */
-  public static final int MSGID_ERROR_PARSING_ARGS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 17;
-
-
-
-  /**
-   * The message ID for the message that will be used if no clear-text password
-   * was provided in the arguments.  This takes two arguments, which are the
-   * long identifier for the clear password argument and the long identifier for
-   * the clear password file argument.
-   */
-  public static final int MSGID_ENCPW_NO_CLEAR_PW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 18;
-
-
-
-  /**
-   * The message ID for the message that will be used if no password storage
-   * scheme was provided in the arguments.  This takes a single argument, which
-   * is the long identifier for the password storage scheme argument.
-   */
-  public static final int MSGID_ENCPW_NO_SCHEME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 19;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to bootstrap the Directory Server.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_SERVER_BOOTSTRAP_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 20;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying load the Directory Server configuration.  This takes a single
-   * argument which is a message with information about the problem that
-   * occurred.
-   */
-  public static final int MSGID_CANNOT_LOAD_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 21;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to load the Directory Server schema.  This takes a single argument,
-   * which is a message with information about the problem that occurred.
-   */
-  public static final int MSGID_CANNOT_LOAD_SCHEMA =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 22;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to initialize the core Directory Server configuration.  This takes a
-   * single argument, which is a message with information about the problem that
-   * occurred.
-   */
-  public static final int MSGID_CANNOT_INITIALIZE_CORE_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 23;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to initialize the Directory Server password storage schemes.  This
-   * takes a single argument, which is a message with information about the
-   * problem that occurred.
-   */
-  public static final int MSGID_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 24;
-
-
-
-  /**
-   * The message ID for the message that will be used if no storage schemes have
-   * been defined in the Directory Server.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_NO_STORAGE_SCHEMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 25;
-
-
-
-  /**
-   * The message ID for the message that will be used if the requested storage
-   * scheme is not configured for use in the Directory Server.  This takes a
-   * single argument, which is the name of the requested storage scheme.
-   */
-  public static final int MSGID_ENCPW_NO_SUCH_SCHEME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 26;
-
-
-
-  /**
-   * The message ID for the message that will be used if the clear-text and
-   * encoded passwords match.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_PASSWORDS_MATCH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 27;
-
-
-
-  /**
-   * The message ID for the message that will be used if the clear-text and
-   * encoded passwords do not match.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_PASSWORDS_DO_NOT_MATCH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 28;
-
-
-
-  /**
-   * The message ID for the message that will be used to display the encoded
-   * password.  This takes a single argument, which is the encoded password.
-   */
-  public static final int MSGID_ENCPW_ENCODED_PASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 29;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to encode the clear-text password.  This takes a single argument,
-   * which is an explanation of the problem that occurred.
-   */
-  public static final int MSGID_ENCPW_CANNOT_ENCODE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 30;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * ldifFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_LDIF_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 33;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * appendToLDIF argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_APPEND_TO_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 34;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * backendID argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_BACKEND_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 35;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * excludeBranch argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_BRANCH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 36;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * includeAttribute argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_INCLUDE_ATTRIBUTE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 37;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * excludeAttribute argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_ATTRIBUTE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 38;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * includeFilter argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_INCLUDE_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 39;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * excludeFilter argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 40;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * wrapColumn argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_WRAP_COLUMN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 41;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * compressLDIF argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_COMPRESS_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 42;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * encryptLDIF argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_ENCRYPT_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 43;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * signHash argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_SIGN_HASH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 44;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode an exclude filter.  This takes two arguments, which are
-   * the provided filter string and a message explaining the problem that was
-   * encountered.
-   */
-  public static final int MSGID_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 52;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode an include filter.  This takes two arguments, which are
-   * the provided filter string and a message explaining the problem that was
-   * encountered.
-   */
-  public static final int MSGID_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 53;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the base DN string.  This takes two arguments, which are
-   * the provided base DN string and a message explaining the problem that
-   * was encountered.
-   */
-  public static final int MSGID_CANNOT_DECODE_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 54;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple backends claim
-   * to have the requested backend ID.  This takes a single argument, which is
-   * the requested backend ID.
-   */
-  public static final int MSGID_LDIFEXPORT_MULTIPLE_BACKENDS_FOR_ID=
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 55;
-
-
-
-  /**
-   * The message ID for the message that will be used if no backends claim to
-   * have the requested backend ID.  This takes a single argument, which is the
-   * requested backend ID.
-   */
-  public static final int MSGID_LDIFEXPORT_NO_BACKENDS_FOR_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 56;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the exclude branch string.  This takes two arguments,
-   * which are the provided base DN string and a message explaining the problem
-   * that was encountered.
-   */
-  public static final int MSGID_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 57;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the wrap column as an integer.  This takes a single
-   * argument, which is the string representation of the wrap column.
-   */
-  public static final int
-       MSGID_LDIFEXPORT_CANNOT_DECODE_WRAP_COLUMN_AS_INTEGER =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 58;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to perform the export.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFEXPORT_ERROR_DURING_EXPORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 59;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the backend configuration base DN string.  This takes two
-   * arguments, which are the backend config base DN string and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_CANNOT_DECODE_BACKEND_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 60;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to retrieve the backend configuration base entry.  This takes two
-   * arguments, which are the DN of the entry and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 61;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the backend class name.  This takes two arguments,
-   * which are the DN of the backend configuration entry and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_CANNOT_DETERMINE_BACKEND_CLASS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 62;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to load a class for a Directory Server backend.  This takes three
-   * arguments, which are the class name, the DN of the configuration entry, and
-   * a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CANNOT_LOAD_BACKEND_CLASS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 63;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to instantiate a class for a Directory Server backend.  This takes
-   * three arguments, which are the class name, the DN of the configuration
-   * entry, and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CANNOT_INSTANTIATE_BACKEND_CLASS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 64;
-
-
-
-  /**
-   * The message ID for the message that will be used if a backend configuration
-   * entry does not define any base DNs.  This takes a single argument, which is
-   * the DN of the backend configuration entry.
-   */
-  public static final int MSGID_NO_BASES_FOR_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 65;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the set of base DNs for a backend.  This takes two
-   * arguments, which are the DN of the backend configuration entry and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_CANNOT_DETERMINE_BASES_FOR_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 66;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * ldifFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_LDIF_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 69;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * append argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_APPEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 70;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * replaceExisting argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_REPLACE_EXISTING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 71;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * backendID argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_BACKEND_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 72;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * excludeBranch argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_EXCLUDE_BRANCH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 73;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * includeAttribute argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_INCLUDE_ATTRIBUTE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 74;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * excludeAttribute argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_EXCLUDE_ATTRIBUTE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 75;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * includeFilter argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_INCLUDE_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 76;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * excludeFilter argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_EXCLUDE_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 77;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * rejectFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_REJECT_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 78;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * overwriteRejects argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_OVERWRITE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 79;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * isCompressed argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_IS_COMPRESSED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 80;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * isEncrypted argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_IS_ENCRYPTED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 81;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode an exclude filter.  This takes two arguments, which are
-   * the provided filter string and a message explaining the problem that was
-   * encountered.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 89;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode an include filter.  This takes two arguments, which are
-   * the provided filter string and a message explaining the problem that was
-   * encountered.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 90;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple backends claim
-   * to have the requested backend ID.  This takes a single argument, which is
-   * the requested base DN.
-   */
-  public static final int MSGID_LDIFIMPORT_MULTIPLE_BACKENDS_FOR_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 92;
-
-
-
-  /**
-   * The message ID for the message that will be used if no backends claim to
-   * have the requested backend ID.  This takes a single argument, which is the
-   * requested base DN.
-   */
-  public static final int MSGID_LDIFIMPORT_NO_BACKENDS_FOR_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 93;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the exclude branch string.  This takes two arguments,
-   * which are the provided base DN string and a message explaining the problem
-   * that was encountered.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 94;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to open the rejects file.  This takes two arguments, which are the
-   * path to the rejects file and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 95;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to perform the import.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFIMPORT_ERROR_DURING_IMPORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 96;
-
-
-  /**
-   * The message ID for the message that will be give information
-   * on what operation is being processed.
-   */
-  public static final int MSGID_PROCESSING_OPERATION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 104;
-
-
-  /**
-   * The message ID for the message that will be give information
-   * on the failure of an operation.
-   */
-  public static final int MSGID_OPERATION_FAILED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 105;
-
-
-  /**
-   * The message ID for the message that will be give information
-   * when an operation is successful.
-   */
-  public static final int MSGID_OPERATION_SUCCESSFUL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 106;
-
-  /**
-   * The message ID for the message that will be give information
-   * when a compare operation is processed.
-   */
-  public static final int MSGID_PROCESSING_COMPARE_OPERATION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 107;
-
-
-  /**
-   * The message ID for the message that will be give information
-   * when a compare operation returns false.
-   */
-  public static final int MSGID_COMPARE_OPERATION_RESULT_FALSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 108;
-
-
-  /**
-   * The message ID for the message that will be give information
-   * when a compare operation returns true.
-   */
-  public static final int MSGID_COMPARE_OPERATION_RESULT_TRUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 109;
-
-
-  /**
-   * The message ID for the message that will be give information
-   * when an invalid protocol operation is returned in a
-   * search result.
-   */
-  public static final int MSGID_SEARCH_OPERATION_INVALID_PROTOCOL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 110;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * trustAll argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_TRUSTALL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 111;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * bindDN argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_BINDDN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 112;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * bindPassword argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_BINDPASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 113;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * bindPasswordFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_BINDPASSWORDFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 114;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * encoding argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_ENCODING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 115;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * verbose argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_VERBOSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 116;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * keystorePath argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_KEYSTOREPATH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 117;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * trustStorePath argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_TRUSTSTOREPATH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 118;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * keystorePassword argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_KEYSTOREPASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 119;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * host argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_HOST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 120;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * port argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 121;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * showUsage argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_SHOWUSAGE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 122;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * controls argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_CONTROLS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 123;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * continueOnError argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_CONTINUE_ON_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 124;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * useSSL argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_USE_SSL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 125;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * startTLS argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_START_TLS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 126;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * useSASLExternal argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_USE_SASL_EXTERNAL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 127;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * filename argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DELETE_DESCRIPTION_FILENAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 128;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * deleteSubtree argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DELETE_DESCRIPTION_DELETE_SUBTREE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 129;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * defaultAdd argument.  This does not take any arguments.
-   */
-  public static final int MSGID_MODIFY_DESCRIPTION_DEFAULT_ADD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 130;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * baseDN argument.  This does not take any arguments.
-   */
-  public static final int MSGID_SEARCH_DESCRIPTION_BASEDN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 131;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * sizeLimit argument.  This does not take any arguments.
-   */
-  public static final int MSGID_SEARCH_DESCRIPTION_SIZE_LIMIT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 132;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * timeLimit argument.  This does not take any arguments.
-   */
-  public static final int MSGID_SEARCH_DESCRIPTION_TIME_LIMIT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 133;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * searchScope argument.  This does not take any arguments.
-   */
-  public static final int MSGID_SEARCH_DESCRIPTION_SEARCH_SCOPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 134;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * dereferencePolicy argument.  This does not take any arguments.
-   */
-  public static final int MSGID_SEARCH_DESCRIPTION_DEREFERENCE_POLICY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 135;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to send a simple bind request to the Directory Server.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAPAUTH_CANNOT_SEND_SIMPLE_BIND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 136;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read the bind response from the Directory Server.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 137;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server sends a
-   * notice of disconnection unsolicited response.  This takes two arguments,
-   * which are the result code and error message from the notice of
-   * disconnection response.
-   */
-  public static final int MSGID_LDAPAUTH_SERVER_DISCONNECT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 138;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server sends an
-   * unexpected extended response to the client.  This takes a single argument,
-   * which is a string representation of the extended response that was
-   * received.
-   */
-  public static final int MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 139;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server sends an
-   * unexpected response to the client.  This takes a single argument, which is
-   * a string representation of the extended response that was received.
-   */
-  public static final int MSGID_LDAPAUTH_UNEXPECTED_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 140;
-
-
-
-  /**
-   * The message ID for the message that will be used if the simple bind attempt
-   * fails.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_SIMPLE_BIND_FAILED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 141;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt was made to
-   * process a SASL bind without specifying which SASL mechanism to use.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_NO_SASL_MECHANISM =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 142;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unsupported SASL
-   * mechanism was requested.  This takes a single argument, which is the
-   * requested mechanism.
-   */
-  public static final int MSGID_LDAPAUTH_UNSUPPORTED_SASL_MECHANISM =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 143;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple values are
-   * provided for the trace property when performing a SASL ANONYMOUS bind.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_TRACE_SINGLE_VALUED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 144;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid SASL
-   * property is provided.  This takes two arguments, which are the name of the
-   * invalid property and the name of the SASL mechanism.
-   */
-  public static final int MSGID_LDAPAUTH_INVALID_SASL_PROPERTY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 145;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to send a SASL bind request to the Directory Server.  This takes two
-   * arguments, which are the name of the SASL mechanism and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 146;
-
-
-
-  /**
-   * The message ID for the message that will be used if a SASL bind attempt
-   * fails.  This takes a single argument, which is the SASL mechanism name.
-   */
-  public static final int MSGID_LDAPAUTH_SASL_BIND_FAILED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 147;
-
-
-
-  /**
-   * The message ID for the message that will be used if no SASL properties are
-   * provided for a SASL mechanism that requires at least one such property.
-   * This takes a single argument, which is the name of the SASL mechanism.
-   */
-  public static final int MSGID_LDAPAUTH_NO_SASL_PROPERTIES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 148;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * specify multiple values for the authID property.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAPAUTH_AUTHID_SINGLE_VALUED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 149;
-
-
-
-  /**
-   * The message ID for the message that will be used if no value is provided
-   * for the required authID SASL property.  This takes a single argument, which
-   * is the name of the SASL mechanism.
-   */
-  public static final int MSGID_LDAPAUTH_SASL_AUTHID_REQUIRED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 150;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to send the initial bind request in a multi-stage SASL bind.  This
-   * takes two arguments, which are the name of the SASL mechanism and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 151;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read the initial bind response in a multi-stage SASL bind.  This
-   * takes two arguments, which are the name of the SASL mechanism and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 152;
-
-
-
-  /**
-   * The message ID for the message that will be used if the initial response
-   * message in a multi-stage SASL bind had a result code other than "SASL bind
-   * in progress".  This takes four arguments, which are the name of the SASL
-   * mechanism, integer and string representations of the result code, and the
-   * error message from the bind response.
-   */
-  public static final int MSGID_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 153;
-
-
-
-  /**
-   * The message ID for the message that will be used if the initial CRAM-MD5
-   * bind response does not include server SASL credentials.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_NO_CRAMMD5_SERVER_CREDENTIALS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 154;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to initialize the MD5 message digest.  This takes a single argument,
-   * which is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 155;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to send the second bind request in a multi-stage SASL bind.  This
-   * takes two arguments, which are the name of the SASL mechanism and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 156;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read the second bind response in a multi-stage SASL bind.  This
-   * takes two arguments, which are the name of the SASL mechanism and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 157;
-
-
-
-  /**
-   * The message ID for the message that will be used if one or more SASL
-   * properties were provided for a mechanism that does not support them.  This
-   * takes a single argument, which is the name of the SASL mechanism.
-   */
-  public static final int MSGID_LDAPAUTH_NO_ALLOWED_SASL_PROPERTIES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 158;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * specify multiple values for the authzID property.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAPAUTH_AUTHZID_SINGLE_VALUED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 159;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * specify multiple values for the realm property.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAPAUTH_REALM_SINGLE_VALUED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 160;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * specify multiple values for the QoP property.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAPAUTH_QOP_SINGLE_VALUED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 161;
-
-
-
-  /**
-   * The message ID for the message that will be used if either the auth-int or
-   * auth-conf QoP is requested for DIGEST-MD5 authentication.  This takes a
-   * single value, which is the requested QoP.
-   */
-  public static final int MSGID_LDAPAUTH_DIGESTMD5_QOP_NOT_SUPPORTED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 162;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid QoP mode is
-   * requested.  This takes a single value, which is the requested QoP.
-   */
-  public static final int MSGID_LDAPAUTH_DIGESTMD5_INVALID_QOP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 163;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * specify multiple values for the digest-URI property.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_DIGEST_URI_SINGLE_VALUED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 164;
-
-
-
-  /**
-   * The message ID for the message that will be used if the initial DIGEST-MD5
-   * bind response does not include server SASL credentials.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_NO_DIGESTMD5_SERVER_CREDENTIALS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 165;
-
-
-
-  /**
-   * The message ID for the message that will be used if the client cannot parse
-   * the server SASL credentials because an invalid token was encountered.  This
-   * takes two arguments, which are the invalid token and the position at which
-   * it starts in the server SASL credentials.
-   */
-  public static final int
-       MSGID_LDAPAUTH_DIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 166;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server SASL
-   * credentials includes an invalid character set name.  This takes a single
-   * argument, which is the name of the invalid character set.
-   */
-  public static final int MSGID_LDAPAUTH_DIGESTMD5_INVALID_CHARSET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 167;
-
-
-
-  /**
-   * The message ID for the message that will be used if the QoP mode that the
-   * client intends to use is not supported by the server.  This takes two
-   * arguments, which are the client's requested QoP mode and the server's list
-   * of supported QoP modes.
-   */
-  public static final int MSGID_LDAPAUTH_REQUESTED_QOP_NOT_SUPPORTED_BY_SERVER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 168;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server SASL
-   * credentials for a DIGEST-MD5 bind do not include a nonce.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_DIGESTMD5_NO_NONCE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 169;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to generate the DIGEST-MD5 response digest.  This takes a single
-   * argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int
-       MSGID_LDAPAUTH_DIGESTMD5_CANNOT_CREATE_RESPONSE_DIGEST =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 170;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server SASL
-   * credentials for a DIGEST-MD5 second-stage bind response does not include
-   * the rspauth element.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 171;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the rspauth value provided by the server in the DIGEST-MD5
-   * bind.  This takes a single argument, which is a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_DIGESTMD5_COULD_NOT_DECODE_RSPAUTH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 172;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to calculate the rspauth value to compare with the version provided
-   * by the server in the DIGEST-MD5 bind.  This takes a single argument, which
-   * is a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_DIGESTMD5_COULD_NOT_CALCULATE_RSPAUTH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 173;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server-provided
-   * rspauth value differs from the value calculated by the client.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_DIGESTMD5_RSPAUTH_MISMATCH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 174;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server SASL
-   * credentials contains a closing quotation mark in an unexpected location.
-   * This takes a single argument, which is the position of the unexpected
-   * quote.
-   */
-  public static final int MSGID_LDAPAUTH_DIGESTMD5_INVALID_CLOSING_QUOTE_POS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 175;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * trace SASL property.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_TRACE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 176;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * authID SASL property.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 177;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * realm SASL property.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_REALM =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 178;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * QoP SASL property.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_QOP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 179;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * digest URI SASL property.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_DIGEST_URI =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 180;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * authzID SASL property.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHZID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 181;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * SASL properties.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_SASL_PROPERTIES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 182;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * KDC SASL property.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_KDC =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 183;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * specify multiple values for the KDC property.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAPAUTH_KDC_SINGLE_VALUED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 184;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid QoP mode is
-   * requested.  This takes a single value, which is the requested QoP.
-   */
-  public static final int MSGID_LDAPAUTH_GSSAPI_INVALID_QOP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 185;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create the JAAS temporary configuration for GSSAPI
-   * authentication.  This takes a single argument, which is a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_GSSAPI_CANNOT_CREATE_JAAS_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 186;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to perform Kerberos authentication on the client system.  This takes
-   * a single argument, which is a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_LDAPAUTH_GSSAPI_LOCAL_AUTHENTICATION_FAILED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 187;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to perform GSSAPI authentication to the Directory Server.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_GSSAPI_REMOTE_AUTHENTICATION_FAILED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 188;
-
-
-
-  /**
-   * The message ID for the message that will be used if the
-   * LDAPAuthenticationHandler.run method is called for a non-SASL bind.  This
-   * takes a single argument, which is a backtrace of the current thread showing
-   * the invalid call.
-   */
-  public static final int MSGID_LDAPAUTH_NONSASL_RUN_INVOCATION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 189;
-
-
-
-  /**
-   * The message ID for the message that will be used if the
-   * LDAPAuthenticationHandler.run method is called for a SASL bind using an
-   * unexpected mechanism.  This takes two arguments, which are the SASL
-   * mechanism and a backtrace of the current thread showing the invalid call.
-   */
-  public static final int MSGID_LDAPAUTH_UNEXPECTED_RUN_INVOCATION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 190;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to instantiate a SASL client to handle the GSSAPI authentication.
-   * This takes a single argument, which is a string representation of the
-   * exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_GSSAPI_CANNOT_CREATE_SASL_CLIENT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 191;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create the initial challenge for GSSAPI authentication.  This
-   * takes a single argument, which is a string representation of the exception
-   * that was caught.
-   */
-  public static final int
-       MSGID_LDAPAUTH_GSSAPI_CANNOT_CREATE_INITIAL_CHALLENGE =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 192;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to validate the server SASL credentials included in a GSSAPI bind
-   * response.  This takes a single argument, which is a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_LDAPAUTH_GSSAPI_CANNOT_VALIDATE_SERVER_CREDS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 193;
-
-
-
-  /**
-   * The message ID for the message that will be used if the Directory Server
-   * indicates that a GSSAPI bind is complete when the SASL client does not
-   * believe that to be the case.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_GSSAPI_UNEXPECTED_SUCCESS_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 194;
-
-
-
-  /**
-   * The message ID for the message that will be used if the Directory Server
-   * sent a bind response that was neither "success" nor "SASL bind in
-   * progress".  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_GSSAPI_BIND_FAILED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 195;
-
-
-
-  /**
-   * The message ID for the message that will be used if the
-   * LDAPAuthenticationHandler.handle method is called for a non-SASL bind.
-   * This takes a single argument, which is a backtrace of the current thread
-   * showing the invalid call.
-   */
-  public static final int MSGID_LDAPAUTH_NONSASL_CALLBACK_INVOCATION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 196;
-
-
-
-  /**
-   * The message ID for the message that will be used if the
-   * LDAPAuthenticationHandler.handle method is called for the GSSAPI mechanism
-   * but with an unexpected callback type.  This takes a single argument, which
-   * is a string representation of the callback type.
-   */
-  public static final int MSGID_LDAPAUTH_UNEXPECTED_GSSAPI_CALLBACK =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 197;
-
-
-
-  /**
-   * The message ID for the message that will be used if the
-   * LDAPAuthenticationHandler.handle method is called for a SASL bind with an
-   * unexpected mechanism.  This takes two arguments, which are the SASL
-   * mechanism and a backtrace of the current thread showing the invalid call.
-   */
-  public static final int MSGID_LDAPAUTH_UNEXPECTED_CALLBACK_INVOCATION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 198;
-
-
-
-  /**
-   * The message ID for the message that will be used to interactively prompt
-   * a user for an authentication password.  This takes a single argument, which
-   * is the username or bind DN for which to retrieve the password.
-   */
-  public static final int MSGID_LDAPAUTH_PASSWORD_PROMPT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 199;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * version argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_VERSION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 200;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * invalid version message.
-   */
-  public static final int MSGID_DESCRIPTION_INVALID_VERSION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 201;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to send a "Who Am I?" request to the Directory Server.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAPAUTH_CANNOT_SEND_WHOAMI_REQUEST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 202;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read the "Who Am I?" request to the Directory Server.  This takes
-   * a single argument, which is a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 203;
-
-
-
-  /**
-   * The message ID for the message that will be used if the "Who Am I?" request
-   * was rejected by the server.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPAUTH_WHOAMI_FAILED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 204;
-
-
-  /**
-   * The message ID for the message that will be used if an invalid search
-   * scope is provided.
-   */
-  public static final int MSGID_SEARCH_INVALID_SEARCH_SCOPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 205;
-
-
-  /**
-   * The message ID for the message that will be used if no filters
-   * are specified for the search request.
-   */
-  public static final int MSGID_SEARCH_NO_FILTERS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 206;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * index name argument.  This does not take any arguments.
-   */
-  public static final int MSGID_VERIFYINDEX_DESCRIPTION_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 207;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * index name argument.  This does not take any arguments.
-   */
-  public static final int MSGID_VERIFYINDEX_DESCRIPTION_INDEX_NAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 208;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * argument requesting that an index should be verified to ensure it is clean.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_VERIFYINDEX_DESCRIPTION_VERIFY_CLEAN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 209;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to perform index verification.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_VERIFYINDEX_ERROR_DURING_VERIFY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 210;
-
-
-  /**
-   * The message ID for the message that will be used if a request to
-   * verify an index for cleanliness does not specify a single index.
-   */
-  public static final int MSGID_VERIFYINDEX_VERIFY_CLEAN_REQUIRES_SINGLE_INDEX =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 211;
-
-
-  /**
-   * The message ID for the message that will be used if a request to
-   * verify indexes specifies the base DN of a backend that does not
-   * support indexing.
-   */
-  public static final int MSGID_BACKEND_NO_INDEXING_SUPPORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 212;
-
-
-
-  /**
-   * The message ID for the message that will be used if the backend selected
-   * for an LDIF export does not support that operation.  This takes a single
-   * argument, which is the requested backend ID.
-   */
-  public static final int MSGID_LDIFEXPORT_CANNOT_EXPORT_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 213;
-
-
-
-  /**
-   * The message ID for the message that will be used if the backend selected
-   * for an LDIF import does not support that operation.  This takes a single
-   * argument, which is the requested backend ID.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_IMPORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 214;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * dontWrap property.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_DONT_WRAP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 215;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * includeBranch argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_INCLUDE_BRANCH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 216;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the backend ID.  This takes two arguments, which are
-   * the DN of the backend configuration entry and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_CANNOT_DETERMINE_BACKEND_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 217;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the include branch string.  This takes two arguments,
-   * which are the provided base DN string and a message explaining the problem
-   * that was encountered.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 218;
-
-
-
-  /**
-   * The message ID for the message that will be used if a requested include
-   * base does not exist in the targeted backend.  This takes two arguments,
-   * which are the specified include branch DN and the requested backend ID.
-   */
-  public static final int MSGID_LDIFIMPORT_INVALID_INCLUDE_BASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 219;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple backends claim
-   * to support the requested base DN.  This takes a single argument, which is
-   * the requested base DN.
-   */
-  public static final int MSGID_MULTIPLE_BACKENDS_FOR_BASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 230;
-
-
-
-  /**
-   * The message ID for the message that will be used if no backends claim to
-   * support the requested base DN.  This takes a single argument, which is the
-   * requested base DN.
-   */
-  public static final int MSGID_NO_BACKENDS_FOR_BASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 231;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * includeBranch argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_INCLUDE_BRANCH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 240;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the include branch string.  This takes two arguments,
-   * which are the provided base DN string and a message explaining the problem
-   * that was encountered.
-   */
-  public static final int MSGID_LDIFEXPORT_CANNOT_DECODE_INCLUDE_BASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 241;
-
-
-
-  /**
-   * The message ID for the message that will be used a requested include base
-   * does not exist in the targeted backend.  This takes two arguments, which
-   * are the specified include branch DN and the requested backend ID.
-   */
-  public static final int MSGID_LDIFEXPORT_INVALID_INCLUDE_BASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 242;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * backendID argument.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_DESCRIPTION_BACKEND_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 245;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * backupID argument.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_DESCRIPTION_BACKUP_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 246;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * backupDirectory argument.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_DESCRIPTION_BACKUP_DIR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 247;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * incremental argument.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_DESCRIPTION_INCREMENTAL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 248;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * compress argument.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_DESCRIPTION_COMPRESS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 249;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * encrypt argument.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_DESCRIPTION_ENCRYPT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 250;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * hash argument.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_DESCRIPTION_HASH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 251;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * signHash argument.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_DESCRIPTION_SIGN_HASH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 252;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple backends claim
-   * to have the requested backend ID.  This takes a single argument, which is
-   * the requested backend ID.
-   */
-  public static final int MSGID_BACKUPDB_MULTIPLE_BACKENDS_FOR_ID=
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 260;
-
-
-
-  /**
-   * The message ID for the message that will be used if no backends claim to
-   * have the requested backend ID.  This takes a single argument, which is the
-   * requested backend ID.
-   */
-  public static final int MSGID_BACKUPDB_NO_BACKENDS_FOR_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 261;
-
-
-
-  /**
-   * The message ID for the message that will be used if the DN of the
-   * configuration entry for the backend to archive does not match the DN of
-   * the configuration entry used to generate previous backups in the same
-   * backup directory.  This takes four arguments, which are the backend ID for
-   * the backend to archive, the DN of the configuration entry for the backend
-   * to archive, the path to the backup directory, and the DN of the
-   * configuration entry for the backend used in previous backups into that
-   * target directory.
-   */
-  public static final int MSGID_BACKUPDB_CONFIG_ENTRY_MISMATCH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 262;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to use the requested path as a backup directory.  This takes two
-   * arguments, which are the provided backup directory path, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_BACKUPDB_INVALID_BACKUP_DIR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 263;
-
-
-
-  /**
-   * The message ID for the message that will be used if the requested backend
-   * cannot be backed up with the specified configuration.  This takes two
-   * arguments, which are the backend ID for the target backend and a message
-   * explaining the reason that the backup cannot be created.
-   */
-  public static final int MSGID_BACKUPDB_CANNOT_BACKUP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 264;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to perform a backup.  This takes two arguments, which are the
-   * backend ID for the target backend and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_BACKUPDB_ERROR_DURING_BACKUP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 265;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * backUpAll argument.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_DESCRIPTION_BACKUP_ALL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 274;
-
-
-
-  /**
-   * The message ID for the message that will be used if both the backUpAll and
-   * backendID arguments were used.  This takes two arguments, which are the
-   * long identifiers for the backUpAll and backendID arguments.
-   */
-  public static final int MSGID_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 275;
-
-
-
-  /**
-   * The message ID for the message that will be used if neither the backUpAll
-   * nor the backendID arguments was used.  This takes two arguments, which are
-   * the long identifiers for the backUpAll and backendID arguments.
-   */
-  public static final int MSGID_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 276;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create the backup directory structure.  This takes two arguments,
-   * which are the path to the backup directory and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_BACKUPDB_CANNOT_CREATE_BACKUP_DIR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 277;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request is made to
-   * back up a backend that does not provide such a mechanism.  This takes a
-   * single argument, which is the backend ID of the target backend.
-   */
-  public static final int MSGID_BACKUPDB_BACKUP_NOT_SUPPORTED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 278;
-
-
-
-  /**
-   * The message ID for the message that will be used if none of the requested
-   * backends support a backup mechanism.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_NO_BACKENDS_TO_ARCHIVE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 279;
-
-
-
-  /**
-   * The message ID for the message that will be used when starting the backup
-   * process for a backend.  This takes a single argument, which is the backend
-   * ID for that backend.
-   */
-  public static final int MSGID_BACKUPDB_STARTING_BACKUP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_NOTICE | 280;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a backup descriptor file.  This takes two arguments, which
-   * are the path to the descriptor file and a message explaining the problem
-   * that occurred.
-   */
-  public static final int MSGID_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 281;
-
-
-
-  /**
-   * The message ID for the message that will be used when the backup process
-   * is complete but one or more errors were encountered during processing.
-   * This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_COMPLETED_WITH_ERRORS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_NOTICE | 282;
-
-
-
-  /**
-   * The message ID for the message that will be used when the backup process
-   * completes without any errors.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_COMPLETED_SUCCESSFULLY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_NOTICE | 283;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the crypto manager.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 284;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * incrementalBaseID argument.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_DESCRIPTION_INCREMENTAL_BASE_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 287;
-
-
-
-  /**
-   * The message ID for the message that will be used if an incremental base ID
-   * is specified for a full backup.  This takes two arguments, which are the
-   * long identifiers for the incremental base ID and the incremental arguments.
-   */
-  public static final int MSGID_BACKUPDB_INCREMENTAL_BASE_REQUIRES_INCREMENTAL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 288;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * backendID argument.  This does not take any arguments.
-   */
-  public static final int MSGID_RESTOREDB_DESCRIPTION_BACKEND_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 291;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * backupID argument.  This does not take any arguments.
-   */
-  public static final int MSGID_RESTOREDB_DESCRIPTION_BACKUP_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 292;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * backupDirectory argument.  This does not take any arguments.
-   */
-  public static final int MSGID_RESTOREDB_DESCRIPTION_BACKUP_DIR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 293;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * listBackups argument.  This does not take any arguments.
-   */
-  public static final int MSGID_RESTOREDB_DESCRIPTION_LIST_BACKUPS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 294;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * verifyOnly argument.  This does not take any arguments.
-   */
-  public static final int MSGID_RESTOREDB_DESCRIPTION_VERIFY_ONLY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 295;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the backup descriptor contained in the specified backup
-   * directory.  This takes two arguments, which are the path to the backup
-   * directory and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 304;
-
-
-
-  /**
-   * The message ID for the message that will be to display the backup ID when
-   * obtaining a list of available backups in a given directory.  This takes a
-   * single argument, which is the backup ID.
-   */
-  public static final int MSGID_RESTOREDB_LIST_BACKUP_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 305;
-
-
-
-  /**
-   * The message ID for the message that will be to display the backup date when
-   * obtaining a list of available backups in a given directory.  This takes a
-   * single argument, which is a string representation of the backup date.
-   */
-  public static final int MSGID_RESTOREDB_LIST_BACKUP_DATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 306;
-
-
-
-  /**
-   * The message ID for the message that will be to indicate whether a backup is
-   * incremental when obtaining a list of available backups in a given
-   * directory.  This takes a single argument, which is a string representation
-   * of whether the backup is incremental.
-   */
-  public static final int MSGID_RESTOREDB_LIST_INCREMENTAL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 307;
-
-
-
-  /**
-   * The message ID for the message that will be to indicate whether a backup is
-   * compressed when obtaining a list of available backups in a given
-   * directory.  This takes a single argument, which is a string representation
-   * of whether the backup is compressed.
-   */
-  public static final int MSGID_RESTOREDB_LIST_COMPRESSED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 308;
-
-
-
-  /**
-   * The message ID for the message that will be to indicate whether a backup is
-   * encrypted when obtaining a list of available backups in a given
-   * directory.  This takes a single argument, which is a string representation
-   * of whether the backup is encrypted.
-   */
-  public static final int MSGID_RESTOREDB_LIST_ENCRYPTED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 309;
-
-
-
-  /**
-   * The message ID for the message that will be to indicate whether a backup is
-   * hashed when obtaining a list of available backups in a given directory.
-   * This takes a single argument, which is a string representation of whether
-   * the backup is hashed.
-   */
-  public static final int MSGID_RESTOREDB_LIST_HASHED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 310;
-
-
-
-  /**
-   * The message ID for the message that will be to indicate whether a backup is
-   * signed when obtaining a list of available backups in a given directory.
-   * This takes a single argument, which is a string representation of whether
-   * the backup is signed.
-   */
-  public static final int MSGID_RESTOREDB_LIST_SIGNED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 311;
-
-
-
-  /**
-   * The message ID for the message that will be to display the set of
-   * dependencies when obtaining a list of available backups in a given
-   * directory.  This takes a single argument, which is a comma-separated list
-   * of the  dependencies for the backup.
-   */
-  public static final int MSGID_RESTOREDB_LIST_DEPENDENCIES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 312;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested a
-   * backup ID that does not exist.  This takes two arguments, which are the
-   * provided backup ID and the path to the backup directory.
-   */
-  public static final int MSGID_RESTOREDB_INVALID_BACKUP_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 313;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified backup
-   * directory does not contain any backups.  This takes a single argument,
-   * which is the path tot he backup directory.
-   */
-  public static final int MSGID_RESTOREDB_NO_BACKUPS_IN_DIRECTORY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 314;
-
-
-
-  /**
-   * The message ID for the message that will be used if the backup directory
-   * is associated with a backend that does not exist.  This takes two
-   * arguments, which are the path to the backup directory and the DN of the
-   * configuration entry for the backups contained in that directory.
-   */
-  public static final int MSGID_RESTOREDB_NO_BACKENDS_FOR_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 315;
-
-
-
-  /**
-   * The message ID for the message that will be used if the selected backend
-   * does not support the ability to perform restore operations.  This takes a
-   * single argument, which is the backend ID for the selected backend.
-   */
-  public static final int MSGID_RESTOREDB_CANNOT_RESTORE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 316;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred while
-   * attempting to restore the backup.  This takes three arguments, which are
-   * the backup ID, the path to the backup directory, and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_RESTOREDB_ERROR_DURING_BACKUP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 317;
-
-
-
-  /**
-   * The message ID for the message that will be used if the signHash option was
-   * used without the hash option.  This takes two arguments, which are the
-   * long identifiers for the signHash and the hash arguments.
-   */
-  public static final int MSGID_BACKUPDB_SIGN_REQUIRES_HASH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 326;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * no-op argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_NOOP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 327;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to acquire a lock for the backend to be archived.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_BACKUPDB_CANNOT_LOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 328;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release a lock for the backend to be archived.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 329;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to acquire a lock for the backend to be restored.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_RESTOREDB_CANNOT_LOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 330;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release a lock for the backend to be restored.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_RESTOREDB_CANNOT_UNLOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 331;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to acquire a lock for the backend to be imported.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_LOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 332;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release a lock for the backend to be imported.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_UNLOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 333;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to acquire a lock for the backend to be exported.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_LDIFEXPORT_CANNOT_LOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 334;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release a lock for the backend to be exported.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_LDIFEXPORT_CANNOT_UNLOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 335;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to acquire a lock for the backend to be verified.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_VERIFYINDEX_CANNOT_LOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 336;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release a lock for the backend to be verified.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_VERIFYINDEX_CANNOT_UNLOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 337;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * types only argument for the search results.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_DESCRIPTION_TYPES_ONLY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 338;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * skipSchemaValidation argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_SKIP_SCHEMA_VALIDATION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 339;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the server plugins.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 340;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the server plugins.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 341;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * assertionFilter option.  It does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_ASSERTION_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 342;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request is made to
-   * use the LDAP assertion control but the provided filter is invalid.  This
-   * takes a single argument, which is a message explaining why the filter is
-   * invalid.
-   */
-  public static final int MSGID_LDAP_ASSERTION_INVALID_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 343;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * preReadAttributes option.  It does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_PREREAD_ATTRS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 346;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * postReadAttributes option.  It does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_POSTREAD_ATTRS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 347;
-
-
-
-  /**
-   * The message ID for the message that will be used if the pre-read response
-   * control does not have a value.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPMODIFY_PREREAD_NO_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 348;
-
-
-
-  /**
-   * The message ID for the message that will be used if the pre-read response
-   * control value cannot be decoded.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAPMODIFY_PREREAD_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 349;
-
-
-
-  /**
-   * The message ID for the message that will be used as the heading for the
-   * entry displayed from the pre-read response control.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAPMODIFY_PREREAD_ENTRY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 350;
-
-
-
-  /**
-   * The message ID for the message that will be used if the post-read response
-   * control does not have a value.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPMODIFY_POSTREAD_NO_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 351;
-
-
-
-  /**
-   * The message ID for the message that will be used if the post-read response
-   * control value cannot be decoded.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAPMODIFY_POSTREAD_CANNOT_DECODE_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 352;
-
-
-
-  /**
-   * The message ID for the message that will be used as the heading for the
-   * entry displayed from the post-read response control.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAPMODIFY_POSTREAD_ENTRY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 353;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * command-line option that includes the proxied authorization control in the
-   * request.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_PROXY_AUTHZID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 354;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * command-line option that includes the persistent search control in the
-   * request.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_PSEARCH_INFO =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 355;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request is made to
-   * use the persistent search control but the descriptor string is empty.  This
-   * does not take any arguments.
-   */
-  public static final int MSGID_PSEARCH_MISSING_DESCRIPTOR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 356;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request is made to
-   * use the persistent search control but the descriptor string does not start
-   * with "ps".  This takes a single argument, which is the provided descriptor
-   * string.
-   */
-  public static final int MSGID_PSEARCH_DOESNT_START_WITH_PS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 357;
-
-
-
-  /**
-   * The message ID for the message that will be used if the persistent search
-   * control descriptor contains an invalid change type.  This takes a single
-   * argument, which is the invalid change type.
-   */
-  public static final int MSGID_PSEARCH_INVALID_CHANGE_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 358;
-
-
-
-  /**
-   * The message ID for the message that will be used if the persistent search
-   * control descriptor contains an invalid changesOnly value.  This takes a
-   * single argument, which is the invalid changesOnly value.
-   */
-  public static final int MSGID_PSEARCH_INVALID_CHANGESONLY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 359;
-
-
-
-  /**
-   * The message ID for the message that will be used if the persistent search
-   * control descriptor contains an invalid returnECs value.  This takes a
-   * single argument, which is the invalid returnECs value.
-   */
-  public static final int MSGID_PSEARCH_INVALID_RETURN_ECS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 360;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * command-line option that requests that the authzID be included in the bind
-   * response.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_REPORT_AUTHZID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 361;
-
-
-
-  /**
-   * The message ID for the message that will be used to report the
-   * authorization ID included in the bind response to the user.  This takes a
-   * single argument, which is the authorization ID.
-   */
-  public static final int MSGID_BIND_AUTHZID_RETURNED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 362;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * filename argument.  This does not take any arguments.
-   */
-  public static final int MSGID_SEARCH_DESCRIPTION_FILENAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 363;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * matchedValuesFilter option for the ldapsearch tool.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_DESCRIPTION_MATCHED_VALUES_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 364;
-
-
-
-  /**
-   * The message ID for the message that will be used if a request is made to
-   * use the matched values but the provided filter is invalid.  This takes a
-   * single argument, which is a message explaining why the filter is invalid.
-   */
-  public static final int MSGID_LDAP_MATCHEDVALUES_INVALID_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 365;
-
-
-
-  /**
-   * The message ID for the message that will be used if the modify
-   * tool cannot open the LDIF file for reading.  This takes two
-   * arguments, which are the path to the LDIF file and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDIF_FILE_CANNOT_OPEN_FOR_READ =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_FATAL_ERROR | 366;
-
-
-
-  /**
-   * The message ID for the message that will be used if an I/O error occurs
-   * while attempting to read from the LDIF file.  This takes two
-   * arguments, which are the path to the LDIF file and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDIF_FILE_READ_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_FATAL_ERROR | 367;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry in the
-   * LDIF file cannot be parsed as a valid LDIF entry.  This takes
-   * three arguments, which are the approximate line number in the LDIF file,
-   * the path to the LDIF file, and a string representation of the exception
-   * that was caught.
-   */
-  public static final int MSGID_LDIF_FILE_INVALID_LDIF_ENTRY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 368;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * authPasswordSyntax argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_DESCRIPTION_AUTHPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 369;
-
-
-
-  /**
-   * The message ID for the message that will be used if no auth password
-   * storage schemes have been defined in the Directory Server.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_ENCPW_NO_AUTH_STORAGE_SCHEMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 370;
-
-
-
-  /**
-   * The message ID for the message that will be used if the requested auth
-   * password storage scheme is not configured for use in the Directory Server.
-   * This takes a single argument, which is the name of the requested storage
-   * scheme.
-   */
-  public static final int MSGID_ENCPW_NO_SUCH_AUTH_SCHEME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 371;
-
-
-
-  /**
-   * The message ID for the message that will be used if the encoded password is
-   * not valid according to the auth password syntax.  This takes a single
-   * argument, which is a message explaining why it is invalid.
-   */
-  public static final int MSGID_ENCPW_INVALID_ENCODED_AUTHPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 372;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the password policy components.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 373;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * host argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_HOST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 374;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * port argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 375;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * useSSL argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_USESSL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 376;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * useStartTLS argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_USESTARTTLS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 377;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * bindDN argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_BINDDN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 378;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * bindPassword argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_BINDPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 379;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * bindPasswordFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_BINDPWFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 380;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * saslOption argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_SASLOPTIONS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 381;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * proxyAuthZID argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_PROXYAUTHZID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 382;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * stopReason argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_STOP_REASON =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 383;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * stopTime argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_STOP_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 384;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * trustAll argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_TRUST_ALL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 385;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * keyStoreFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_KSFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 386;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * keyStorePassword argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_KSPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 387;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * keyStorePasswordFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_KSPWFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 388;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * trustStoreFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_TSFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 389;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * trustStorePassword argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_TSPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 390;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * trustStorePasswordFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_TSPWFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 391;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * help argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_SHOWUSAGE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 392;
-
-
-
-  /**
-   * The message ID for the message that will be used if two arguments that are
-   * mutually exclusive were both provided.  This takes two arguments, which are
-   * the long identifiers for the mutually-exclusive command line arguments.
-   */
-  public static final int MSGID_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 395;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the provided stop time.  This does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_CANNOT_DECODE_STOP_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 396;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to perform SSL initialization.  This takes a single argument, which
-   * is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_STOPDS_CANNOT_INITIALIZE_SSL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 397;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a SASL option string.  This takes a single argument, which
-   * is the SASL option string.
-   */
-  public static final int MSGID_STOPDS_CANNOT_PARSE_SASL_OPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 398;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL options were used
-   * without specifying the SASL mechanism.  This does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_NO_SASL_MECHANISM =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 399;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the port to use to communicate with the Directory
-   * Server.  This takes two arguments, which are the name of the port argument
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_STOPDS_CANNOT_DETERMINE_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 400;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to connect to the Directory Server.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_STOPDS_CANNOT_CONNECT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 401;
-
-
-
-  /**
-   * The message ID for the message that will be used if the connection is
-   * closed while waiting for the response from the Directory Server.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_STOPDS_UNEXPECTED_CONNECTION_CLOSURE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 402;
-
-
-
-  /**
-   * The message ID for the message that will be used if an I/O error occurs
-   * while communicating with the Directory Server.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_STOPDS_IO_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 403;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the response from the Directory Server.  This takes a
-   * single  argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_STOPDS_DECODE_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 404;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unexpected response
-   * type was received for the add request.  This takes a single argument, which
-   * is the name of the response type that was received.
-   */
-  public static final int MSGID_STOPDS_INVALID_RESPONSE_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 405;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * user's password is expired.  This does not take any arguments.
-   */
-  public static final int MSGID_BIND_PASSWORD_EXPIRED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 406;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * user's password will expire in the near future.  This takes a single
-   * argument, which indicates the length of time until the password is actually
-   * expired.
-   */
-  public static final int MSGID_BIND_PASSWORD_EXPIRING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 407;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * user's account has been locked.  This does not take any arguments.
-   */
-  public static final int MSGID_BIND_ACCOUNT_LOCKED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 408;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * user's password must be changed before any other operations will be
-   * allowed.  This does not take any arguments.
-   */
-  public static final int MSGID_BIND_MUST_CHANGE_PASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 409;
-
-
-
-  /**
-   * The message ID for the message that will be used to specify the number of
-   * grace logins that the user has left.  This takes a single argument, which
-   * is the number of grace logins remaining.
-   */
-  public static final int MSGID_BIND_GRACE_LOGINS_REMAINING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 410;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * command-line option that requests that the password policy control be used
-   * in the bind operation.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_USE_PWP_CONTROL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 411;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * restart argument.  It does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_RESTART =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 412;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * filename argument.  This does not take any arguments.
-   */
-  public static final int MSGID_COMPARE_DESCRIPTION_FILENAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 413;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * ldifFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_DESCRIPTION_LDIF_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 414;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * baseDN argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_DESCRIPTION_BASEDN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 415;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * scope argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_DESCRIPTION_SCOPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 416;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * filterFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_DESCRIPTION_FILTER_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 419;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * outputFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_DESCRIPTION_OUTPUT_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 420;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * overwriteExisting argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_DESCRIPTION_OVERWRITE_EXISTING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 421;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * dontWrap argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_DESCRIPTION_DONT_WRAP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 422;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * sizeLimit argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_DESCRIPTION_SIZE_LIMIT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 423;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * timeLimit argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_DESCRIPTION_TIME_LIMIT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 424;
-
-
-
-  /**
-   * The message ID for the message that will be used if no filter file or
-   * single filter was provided.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_NO_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 428;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server configuration.  This takes two
-   * arguments, which are the path to the Directory Server configuration file
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_INITIALIZE_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 429;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server schema.  This takes two arguments, which
-   * are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_INITIALIZE_SCHEMA =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 430;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a search filter.  This takes two arguments, which are the
-   * provided filter string and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_PARSE_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 431;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a base DN.  This takes two arguments, which are the
-   * provided base DN string and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_PARSE_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 432;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the time limit.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_PARSE_TIME_LIMIT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 433;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the size limit.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_PARSE_SIZE_LIMIT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 434;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create the LDIF reader.  This takes a single argument, which is
-   * a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_CREATE_READER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 435;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create the LDIF writer.  This takes a single argument, which is
-   * a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_CREATE_WRITER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 436;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configured time
-   * limit has been exceeded.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_TIME_LIMIT_EXCEEDED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_WARNING | 437;
-
-
-
-  /**
-   * The message ID for the message that will be used if the configured size
-   * limit has been exceeded.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_SIZE_LIMIT_EXCEEDED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_WARNING | 438;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recoverable error
-   * occurs while attempting to read an entry.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_READ_ENTRY_RECOVERABLE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 439;
-
-
-
-  /**
-   * The message ID for the message that will be used if a fatal error occurs
-   * while attempting to read an entry.  This takes a single argument, which is
-   * a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_READ_ENTRY_FATAL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 440;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs during
-   * search processing.  This takes a single argument, which is a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_ERROR_DURING_PROCESSING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 441;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server JMX subsystem.  This takes two arguments,
-   * which are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFSEARCH_CANNOT_INITIALIZE_JMX =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 442;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * sourceLDIF argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFDIFF_DESCRIPTION_SOURCE_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 443;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * targetLDIF argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFDIFF_DESCRIPTION_TARGET_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 444;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * outputLDIF argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFDIFF_DESCRIPTION_OUTPUT_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 445;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * overwriteExisting argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFDIFF_DESCRIPTION_OVERWRITE_EXISTING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 446;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server JMX subsystem.  This takes two arguments,
-   * which are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFDIFF_CANNOT_INITIALIZE_JMX =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 452;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server configuration.  This takes two
-   * arguments, which are the path to the Directory Server configuration file
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFDIFF_CANNOT_INITIALIZE_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 453;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server schema.  This takes two arguments, which
-   * are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFDIFF_CANNOT_INITIALIZE_SCHEMA =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 454;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * opening the source LDIF file.  This takes two arguments, which are the name
-   * of the LDIF file and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFDIFF_CANNOT_OPEN_SOURCE_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 455;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * reading the source LDIF file.  This takes two arguments, which are the name
-   * of the LDIF file and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFDIFF_ERROR_READING_SOURCE_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 456;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * opening the target LDIF file.  This takes two arguments, which are the name
-   * of the LDIF file and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFDIFF_CANNOT_OPEN_TARGET_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 457;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * reading the target LDIF file.  This takes two arguments, which are the name
-   * of the LDIF file and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFDIFF_ERROR_READING_TARGET_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 458;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * opening the LDIF writer.  This takes a single argument, which is a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFDIFF_CANNOT_OPEN_OUTPUT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 459;
-
-
-
-  /**
-   * The message ID for the message that will be used if no differences are
-   * detected between the source and target LDIF files.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDIFDIFF_NO_DIFFERENCES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 460;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * writing diff information.  This takes single argument, which is a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFDIFF_ERROR_WRITING_OUTPUT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 461;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * ldapPort argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_LDAP_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 464;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * baseDN argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 465;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * rootDN argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_ROOT_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 466;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * rootPassword argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_ROOT_PW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 467;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * rootPasswordFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_ROOT_PW_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 468;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to acquire an exclusive lock for the Directory Server process.  This
-   * takes two argments, which are the path to the lock file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_ACQUIRE_SERVER_LOCK =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 472;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server JMX subsystem.  This takes two arguments,
-   * which are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_INITIALIZE_JMX =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 473;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server configuration.  This takes two
-   * arguments, which are the path to the Directory Server configuration file
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_INITIALIZE_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 474;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server schema.  This takes two arguments, which
-   * are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_INITIALIZE_SCHEMA =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 475;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a base DN.  This takes two arguments, which are the base DN
-   * string and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_PARSE_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 476;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the root DN.  This takes two arguments, which are the root
-   * DN string and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_PARSE_ROOT_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 477;
-
-
-
-  /**
-   * The message ID for the message that will be used if a root DN is provided
-   * without giving a root password.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_NO_ROOT_PW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 478;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the base DNs.  This takes a single argument, which is
-   * a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_UPDATE_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 479;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the LDAP port.  This takes a single argument, which is
-   * a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_UPDATE_LDAP_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 480;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the root user entry.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_UPDATE_ROOT_USER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 481;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to write the updated configuration.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_WRITE_UPDATED_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 482;
-
-
-
-  /**
-   * The message ID for the message that will be used if no configuration
-   * changes were requested.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_NO_CONFIG_CHANGES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 483;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * updated configuration has been written.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_WROTE_UPDATED_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 484;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * testOnly argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_TESTONLY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 485;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * programName argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_PROGNAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 486;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * silentInstall argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_SILENT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 489;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * baseDN argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_BASEDN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 490;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * addBaseEntry argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_ADDBASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 491;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * importLDIF argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_IMPORTLDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 492;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * ldapPort argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_LDAPPORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 493;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * skipPortCheck argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_SKIPPORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 494;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * rootDN argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_ROOTDN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 495;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * rootPassword argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_ROOTPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 496;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * rootPasswordFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_ROOTPWFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 497;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * help argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_HELP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 498;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user did not
-   * specify the path to the Directory Server configuration file.  This takes a
-   * single argument, which is the name of the command-line option that should
-   * be used to provide that information.
-   */
-  public static final int MSGID_INSTALLDS_NO_CONFIG_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 499;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server JMX subsystem.  This takes two arguments,
-   * which are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_INSTALLDS_CANNOT_INITIALIZE_JMX =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 500;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server configuration.  This takes two
-   * arguments, which are the path to the Directory Server configuration file
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_INSTALLDS_CANNOT_INITIALIZE_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 501;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server schema.  This takes two arguments, which
-   * are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_INSTALLDS_CANNOT_INITIALIZE_SCHEMA =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 502;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a string as a DN.  This takes two arguments, which are the
-   * DN string and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_INSTALLDS_CANNOT_PARSE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 503;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt to provide
-   * the directory base DN.  It does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_BASEDN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 504;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt to determine
-   * whether to import data from LDIF.  It does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_IMPORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 505;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt to provide
-   * the path to the LDIF file to import.  It does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_IMPORT_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 506;
-
-
-
-  /**
-   * The message ID for the message that will be used if two conflicting
-   * arguments were provided to the program.  This takes two arguments, which
-   * are the long forms of the conflicting arguments.
-   */
-  public static final int MSGID_INSTALLDS_TWO_CONFLICTING_ARGUMENTS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 507;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt to determine
-   * whether to add the base entry.  It does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_ADDBASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 508;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt to determine
-   * the LDAP port number to use.  It does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_LDAPPORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 509;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to bind to a privileged port.  This takes two arguments, which
-   * are the port number and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 510;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to bind to a non-privileged port.  This takes two arguments,
-   * which are the port number and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_INSTALLDS_CANNOT_BIND_TO_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 511;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt to determine
-   * the initial root DN.  It does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_ROOT_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 512;
-
-
-
-  /**
-   * The message ID for the message that will be used if no root password was
-   * provided when performing a silent installation.  This takes two arguments,
-   * which are the long forms of the root password and root password file
-   * arguments.
-   */
-  public static final int MSGID_INSTALLDS_NO_ROOT_PASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 513;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt to request
-   * the initial root password for the first time.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_ROOT_PASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 514;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt to confirm
-   * the initial root password.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_CONFIRM_ROOT_PASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 515;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * server configuration is being updated.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_STATUS_CONFIGURING_DS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 516;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * base LDIF file is being created.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_STATUS_CREATING_BASE_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 517;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * creating the base LDIF file.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_INSTALLDS_CANNOT_CREATE_BASE_ENTRY_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 518;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * LDIF data is being imported.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_STATUS_IMPORTING_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 519;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the setup
-   * process was successful.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_STATUS_SUCCESS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 520;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt value for
-   * Boolean "true" or "yes" values.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_VALUE_YES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 521;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt value for
-   * Boolean "false" or "no" values.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_VALUE_NO =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 522;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * Boolean value could not be interpreted.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_INVALID_YESNO_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 523;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * response value could not be interpreted as an integer.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_INSTALLDS_INVALID_INTEGER_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 524;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * provided integer value was below the lower bound.  This takes a single
-   * argument, which is the lower bound.
-   */
-  public static final int MSGID_INSTALLDS_INTEGER_BELOW_LOWER_BOUND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 525;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * provided integer value was above the upper bound.  This takes a single
-   * argument, which is the upper bound.
-   */
-  public static final int MSGID_INSTALLDS_INTEGER_ABOVE_UPPER_BOUND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 526;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * response value could not be interpreted as a DN.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_INSTALLDS_INVALID_DN_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 527;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * response value was an invalid zero-length string.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_INSTALLDS_INVALID_STRING_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 528;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * response value was an invalid zero-length string.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_INSTALLDS_INVALID_PASSWORD_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 529;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * provided password values do not match.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_PASSWORDS_DONT_MATCH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 530;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * reading from standard input.  This takes a single argument, which is a
-   * message explaining the problem that occurred.
-   */
-  public static final int MSGID_INSTALLDS_ERROR_READING_FROM_STDIN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 531;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * quiet argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_QUIET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 532;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * LDIF import was successful.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_IMPORT_SUCCESSFUL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 533;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user did not
-   * specify the path to the Directory Server configuration file.  This takes a
-   * single argument, which is the name of the command-line option that should
-   * be used to provide that information.
-   */
-  public static final int MSGID_INSTALLDS_INITIALIZING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 534;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid number of
-   * arguments were provided for a MakeLDIF tag.  This takes four arguments,
-   * which are the name of the tag, the line number on which it appears, the
-   * expected number of arguments, and the actual number of arguments.
-   */
-  public static final int MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 535;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid number of
-   * arguments were provided for a MakeLDIF tag, when a range of arguments are
-   * allowed.  This takes five arguments, which are the name of the tag, the
-   * line number on which it appears, the minimum number of expected arguments,
-   * the maximum number of expected arguments, and the actual number of
-   * arguments.
-   */
-  public static final int MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 536;
-
-
-
-  /**
-   * The message ID for the message that will be used if an undefined attribute
-   * type is referenced in a template file.  This takes two arguments, which are
-   * the name of the attribute type and the line number on which it appears.
-   */
-  public static final int MSGID_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 537;
-
-
-
-  /**
-   * The message ID for the message that will be used if an integer value is
-   * below the allowed lower bound.  This takes four arguments, which are the
-   * provided integer value, the lower bound, the tag name, and the line number
-   * on which it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 538;
-
-
-
-  /**
-   * The message ID for the message that will be used if value cannot be parsed
-   * as an integer.  This takes three arguments, which are the provided value,
-   * the tag name, and the line number on which it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 539;
-
-
-
-  /**
-   * The message ID for the message that will be used if an integer value is
-   * above the allowed upper bound.  This takes four arguments, which are the
-   * provided integer value, the upper bound, the tag name, and the line number
-   * on which it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_INTEGER_ABOVE_UPPER_BOUND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 540;
-
-
-
-  /**
-   * The message ID for the message that will be used if a tag argument is an
-   * empty string, which is not allowed.  This takes three arguments, which is
-   * the position of the argument, the tag name, and the line number on which
-   * it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_INVALID_EMPTY_STRING_ARGUMENT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 541;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a Boolean.  This takes three arguments, which are the provided
-   * value, the tag name, and the line number on which it appears in the
-   * template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_BOOLEAN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 542;
-
-
-
-  /**
-   * The message ID for the message that will be used if a branch references an
-   * undefined subordinate template.  This takes two arguments, which are the DN
-   * of the branch entry and the name of the undefined template.
-   */
-  public static final int MSGID_MAKELDIF_UNDEFINED_BRANCH_SUBORDINATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 543;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to load a class for use as a tag.  This takes a single argument,
-   * which is the name of the class.
-   */
-  public static final int MSGID_MAKELDIF_CANNOT_LOAD_TAG_CLASS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 544;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to instantiate a class for use as a tag.  This takes a single
-   * argument, which is the name of the class.
-   */
-  public static final int MSGID_MAKELDIF_CANNOT_INSTANTIATE_TAG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 545;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * register a new tag with a conflicting name.  This takes two arguments,
-   * which are the name of the class and the name of the tag.
-   */
-  public static final int MSGID_MAKELDIF_CONFLICTING_TAG_NAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 546;
-
-
-
-  /**
-   * The message ID for the message that will be used if a potential undefined
-   * constant is used in the template file.  This takes two arguments, which are
-   * the name of the constant and the line number on which it is used.
-   */
-  public static final int MSGID_MAKELDIF_WARNING_UNDEFINED_CONSTANT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_WARNING | 547;
-
-
-
-  /**
-   * The message ID for the message that will be used if a constant definition
-   * does not include an equal sign.  This takes a single argument, which is the
-   * line number on which it appears.
-   */
-  public static final int MSGID_MAKELDIF_DEFINE_MISSING_EQUALS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 548;
-
-
-
-  /**
-   * The message ID for the message that will be used if a constant definition
-   * does not include a name.  This takes a single argument, which is the line
-   * number on which it appears.
-   */
-  public static final int MSGID_MAKELDIF_DEFINE_NAME_EMPTY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 549;
-
-
-
-  /**
-   * The message ID for the message that will be used if a constant definition
-   * has a name that conflicts with another constant.  This takes two arguments,
-   * which are the name of the constant and the line number on which the
-   * conflict was detected.
-   */
-  public static final int MSGID_MAKELDIF_CONFLICTING_CONSTANT_NAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 550;
-
-
-
-  /**
-   * The message ID for the message that will be used if a constant definition
-   * does not have a value.  This takes two arguments, which are the name of the
-   * constant and the line number on which it is defined.
-   */
-  public static final int MSGID_MAKELDIF_WARNING_DEFINE_VALUE_EMPTY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 551;
-
-
-
-  /**
-   * The message ID for the message that will be used if a branch definition
-   * has a DN that conflicts with another branch.  This takes two arguments,
-   * which are the branch DN and the line number on which the conflict was
-   * detected.
-   */
-  public static final int MSGID_MAKELDIF_CONFLICTING_BRANCH_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 552;
-
-
-
-  /**
-   * The message ID for the message that will be used if a template definition
-   * has a name that conflicts with another template.  This takes two arguments,
-   * which are the template name and the line number on which the conflict was
-   * detected.
-   */
-  public static final int MSGID_MAKELDIF_CONFLICTING_TEMPLATE_NAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 553;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unrecognized line
-   * was found in the template file.  This takes two arguments, which are the
-   * content of the line and the line number on which it was found.
-   */
-  public static final int MSGID_MAKELDIF_UNEXPECTED_TEMPLATE_FILE_LINE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 554;
-
-
-
-  /**
-   * The message ID for the message that will be used if a template references
-   * an undefined subordinate template.  This takes two arguments, which are the
-   * name of the parent template and the name of the undefined subordinate
-   * template.
-   */
-  public static final int MSGID_MAKELDIF_UNDEFINED_TEMPLATE_SUBORDINATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 555;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the branch DN.  This takes two arguments, which are the DN
-   * string and the line number on which it appears.
-   */
-  public static final int MSGID_MAKELDIF_CANNOT_DECODE_BRANCH_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 556;
-
-
-
-  /**
-   * The message ID for the message that will be used if a subordinate template
-   * definition does not include a colon.  This takes two arguments, which are
-   * the line number and the branch DN.
-   */
-  public static final int MSGID_MAKELDIF_BRANCH_SUBORDINATE_TEMPLATE_NO_COLON =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 557;
-
-
-
-  /**
-   * The message ID for the message that will be used if a subordinate template
-   * specifies an invalid number of entries.  This takes four arguments, which
-   * are the line number, the branch DN, the invalid number of entries, and the
-   * subordinate template name.
-   */
-  public static final int
-       MSGID_MAKELDIF_BRANCH_SUBORDINATE_INVALID_NUM_ENTRIES =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 558;
-
-
-
-  /**
-   * The message ID for the message that will be used if there are zero entries
-   * to be created for a subordinate template.  This takes three arguments,
-   * which are the line number, the branch DN, and the subordinate template
-   * name.
-   */
-  public static final int MSGID_MAKELDIF_BRANCH_SUBORDINATE_ZERO_ENTRIES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_WARNING | 559;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the number of entries for a subordinate template.  This
-   * takes three arguments, which are the template name, the line number, and
-   * the branch DN.
-   */
-  public static final int
-       MSGID_MAKELDIF_BRANCH_SUBORDINATE_CANT_PARSE_NUMENTRIES =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 560;
-
-
-
-  /**
-   * The message ID for the message that will be used if a subordinate template
-   * definition does not include a colon.  This takes two arguments, which are
-   * the line number and the template name.
-   */
-  public static final int
-       MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_TEMPLATE_NO_COLON =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 561;
-
-
-
-  /**
-   * The message ID for the message that will be used if a subordinate template
-   * specifies an invalid number of entries.  This takes four arguments, which
-   * are the line number, the template name, the invalid number of entries, and
-   * the subordinate template name.
-   */
-  public static final int
-       MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_INVALID_NUM_ENTRIES =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 562;
-
-
-
-  /**
-   * The message ID for the message that will be used if there are zero entries
-   * to be created for a subordinate template.  This takes three arguments,
-   * which are the line number, the template name, and the subordinate template
-   * name.
-   */
-  public static final int MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_ZERO_ENTRIES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_WARNING | 563;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse the number of entries for a subordinate template.  This
-   * takes three arguments, which are the subordinate template name, the line
-   * number, and the template name.
-   */
-  public static final int
-       MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_CANT_PARSE_NUMENTRIES =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 564;
-
-
-
-  /**
-   * The message ID for the message that will be used if a template references
-   * an undefined RDN attribute.  This takes two arguments, which are the
-   * name of the parent template and the name of the undefined RDN attribute.
-   */
-  public static final int MSGID_MAKELDIF_TEMPLATE_MISSING_RDN_ATTR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 565;
-
-
-
-  /**
-   * The message ID for the message that will be used if a branch definition has
-   * an extra line with no colon to separate the attribute type from the value
-   * pattern.  This takes two arguments, which are the line number in the
-   * template file and the branch DN.
-   */
-  public static final int MSGID_MAKELDIF_NO_COLON_IN_BRANCH_EXTRA_LINE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 566;
-
-
-
-  /**
-   * The message ID for the message that will be used if a branch definition has
-   * an extra line with no attribute type .  This takes two arguments, which are
-   * the line number in the  template file and the branch DN.
-   */
-  public static final int MSGID_MAKELDIF_NO_ATTR_IN_BRANCH_EXTRA_LINE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 567;
-
-
-
-  /**
-   * The message ID for the message that will be used if a branch definition has
-   * an extra line with no value.  This takes two arguments, which are the line
-   * number in the  template file and the branch DN.
-   */
-  public static final int MSGID_MAKELDIF_NO_VALUE_IN_BRANCH_EXTRA_LINE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_WARNING | 568;
-
-
-
-  /**
-   * The message ID for the message that will be used if a template definition
-   * has a line with no colon to separate the attribute type from the value
-   * pattern.  This takes two arguments, which are the line number in the
-   * template file and the template name.
-   */
-  public static final int MSGID_MAKELDIF_NO_COLON_IN_TEMPLATE_LINE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 569;
-
-
-
-  /**
-   * The message ID for the message that will be used if a template definition
-   * has a line with no attribute type .  This takes two arguments, which are
-   * the line number in the  template file and the template name.
-   */
-  public static final int MSGID_MAKELDIF_NO_ATTR_IN_TEMPLATE_LINE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 570;
-
-
-
-  /**
-   * The message ID for the message that will be used if a template definition
-   * has a line with no value.  This takes two arguments, which are the line
-   * number in the  template file and the template name.
-   */
-  public static final int MSGID_MAKELDIF_NO_VALUE_IN_TEMPLATE_LINE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_WARNING | 571;
-
-
-
-  /**
-   * The message ID for the message that will be used if a template definition
-   * references an undefined tag.  This takes two arguments, which are the name
-   * of the tag and the line number on which it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_NO_SUCH_TAG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 572;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create a new tag instance.  This takes three arguments, which are
-   * the tag name, the line number, and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_MAKELDIF_CANNOT_INSTANTIATE_NEW_TAG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 573;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * templateFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_MAKELDIF_DESCRIPTION_TEMPLATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 576;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * ldifFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_MAKELDIF_DESCRIPTION_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 577;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * randomSeed argument.  This does not take any arguments.
-   */
-  public static final int MSGID_MAKELDIF_DESCRIPTION_SEED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 578;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * help argument.  This does not take any arguments.
-   */
-  public static final int MSGID_MAKELDIF_DESCRIPTION_HELP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 579;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server JMX subsystem.  This takes two arguments,
-   * which are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_MAKELDIF_CANNOT_INITIALIZE_JMX =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 582;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server configuration.  This takes two
-   * arguments, which are the path to the Directory Server configuration file
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_MAKELDIF_CANNOT_INITIALIZE_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 583;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server schema.  This takes two arguments, which
-   * are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_MAKELDIF_CANNOT_INITIALIZE_SCHEMA =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 584;
-
-
-
-  /**
-   * The message ID for the message that will be used if an I/O exception was
-   * thrown while trying to load the template file.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_MAKELDIF_IOEXCEPTION_DURING_PARSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 585;
-
-
-
-  /**
-   * The message ID for the message that will be used if a non-I/O exception was
-   * thrown while trying to load the template file.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_MAKELDIF_EXCEPTION_DURING_PARSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 586;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * parsed as a format string.  This takes three arguments, which are the
-   * provided value, the tag name, and the line number on which it appears in
-   * the  template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_INVALID_FORMAT_STRING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 587;
-
-
-
-  /**
-   * The message ID for the message that will be used if a random tag does not
-   * specify the random value type.  This takes a single argument, which is the
-   * line number on which it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_NO_RANDOM_TYPE_ARGUMENT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 588;
-
-
-
-  /**
-   * The message ID for the message that will be used if a random tag will
-   * always generate an empty value.  This takes a single argument, which is the
-   * line number on which it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_WARNING_EMPTY_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_WARNING | 589;
-
-
-
-  /**
-   * The message ID for the message that will be used if a random tag has an
-   * unknown random type.  This takes two arguments, which are the line number
-   * on which it appears in the template file and the provided random type.
-   */
-  public static final int MSGID_MAKELDIF_TAG_UNKNOWN_RANDOM_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 590;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * resourcePath argument.  This does not take any arguments.
-   */
-  public static final int MSGID_MAKELDIF_DESCRIPTION_RESOURCE_PATH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 591;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified temlate
-   * file could not be found.  This takes a single argument, which is the
-   * specified template file.
-   */
-  public static final int MSGID_MAKELDIF_COULD_NOT_FIND_TEMPLATE_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 592;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified resource
-   * directory does not exist.  This takes a single argument, which is the
-   * specified resource directory.
-   */
-  public static final int MSGID_MAKELDIF_NO_SUCH_RESOURCE_DIRECTORY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 593;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified resource
-   * directory exists but is not a directory.  This takes a single argument,
-   * which is the specified resource directory.
-   */
-  public static final int MSGID_MAKELDIF_RESOURCE_DIRECTORY_NOT_DIRECTORY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 594;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified tag
-   * could not be found.  This takes three arguments, which are the file path,
-   * the tag name, and the line number on which it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_CANNOT_FIND_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 595;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid file access
-   * mode was specified.  This takes three arguments, which are the access mode,
-   * the tag name, and the line number on which it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_INVALID_FILE_ACCESS_MODE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 596;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read the contents of a file.  This takes four arguments, which
-   * are the file path, the tag name, the line number on which it appears in the
-   * template file, and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_MAKELDIF_TAG_CANNOT_READ_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 597;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to create the output LDIF file.  This takes two arguments, which are
-   * the path to the LDIF file and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_MAKELDIF_UNABLE_TO_CREATE_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 598;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to write to the output LDIF file.  This takes two arguments, which
-   * are the path to the LDIF file and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_MAKELDIF_ERROR_WRITING_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 599;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate the number of
-   * entries that have been processed.  This takes a single argument, which is
-   * the number of entries processed.
-   */
-  public static final int MSGID_MAKELDIF_PROCESSED_N_ENTRIES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 600;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to write an entry.  This takes two arguments, which are the DN of
-   * the entry and a message with information about the problem that occurred.
-   */
-  public static final int MSGID_MAKELDIF_CANNOT_WRITE_ENTRY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 601;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that all
-   * processing has been completed.  This takes a single argument, which is the
-   * number of entries processed.
-   */
-  public static final int MSGID_MAKELDIF_PROCESSING_COMPLETE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 602;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * templateFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_TEMPLATE_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 603;
-
-
-
-  /**
-   * The message ID for the message that will be used if both the ldifFile and
-   * the templateFile arguments were provided.  This takes two arguments, which
-   * are the long identifiers for the ldifFile and templateFile options.
-   */
-  public static final int MSGID_LDIFIMPORT_CONFLICTING_OPTIONS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 604;
-
-
-
-  /**
-   * The message ID for the message that will be used if neither the ldifFile or
-   * the templateFile arguments was provided.  This takes two arguments, which
-   * are the long identifiers for the ldifFile and templateFile options.
-   */
-  public static final int MSGID_LDIFIMPORT_MISSING_REQUIRED_ARGUMENT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 605;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to initialize a MakeLDIF template file.  This takes two
-   * arguments, which are the path to the template file and a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_PARSE_TEMPLATE_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 606;
-
-
-
-  /**
-   * The message ID for the message that will be used if a template line has an
-   * unclosed tag.  This takes a single argument, which is the line number on
-   * which it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_INCOMPLETE_TAG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 607;
-
-
-
-  /**
-   * The message ID for the message that will be used if a branch definition
-   * includes a tag that is not allowed for use in branches.  This takes two
-   * arguments, which are the name of the tag and the line number on which it
-   * appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_NOT_ALLOWED_IN_BRANCH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 608;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * randomSeed argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_RANDOM_SEED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 609;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an entry twice in the same set of changes.  This takes a single
-   * argument, which is the DN of the entry.
-   */
-  public static final int MSGID_LDIFMODIFY_CANNOT_ADD_ENTRY_TWICE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 610;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * delete an entry that had just been added in the same set of changes.  This
-   * takes a single argument, which is the DN of the entry.
-   */
-  public static final int MSGID_LDIFMODIFY_CANNOT_DELETE_AFTER_ADD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 611;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * modify an entry that had just been added or deleted in the same set of
-   * changes.  This takes a single argument, which is the DN of the entry.
-   */
-  public static final int MSGID_LDIFMODIFY_CANNOT_MODIFY_ADDED_OR_DELETED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 612;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * perform a modify DN operation.  This takes a single argument, which is the
-   * DN of the entry.
-   */
-  public static final int MSGID_LDIFMODIFY_MODDN_NOT_SUPPORTED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 613;
-
-
-
-  /**
-   * The message ID for the message that will be used if a change record has an
-   * unknown changetype.  This takes two arguments, which are the DN of the
-   * entry and the specified changetype.
-   */
-  public static final int MSGID_LDIFMODIFY_UNKNOWN_CHANGETYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 614;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry to be added
-   * already exists in the data.  This takes a single argument, which is the DN
-   * of the entry.
-   */
-  public static final int MSGID_LDIFMODIFY_ADD_ALREADY_EXISTS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 615;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * deleted because it does not exist in the data set.  This takes a single
-   * argument, which is the DN of the entry.
-   */
-  public static final int MSGID_LDIFMODIFY_DELETE_NO_SUCH_ENTRY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 616;
-
-
-
-  /**
-   * The message ID for the message that will be used if an entry cannot be
-   * modified because it does not exist in the data set.  This takes a single
-   * argument, which is the DN of the entry.
-   */
-  public static final int MSGID_LDIFMODIFY_MODIFY_NO_SUCH_ENTRY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 617;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * sourceLDIF argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDIFMODIFY_DESCRIPTION_SOURCE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 620;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * changesLDIF argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDIFMODIFY_DESCRIPTION_CHANGES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 621;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * targetLDIF argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDIFMODIFY_DESCRIPTION_TARGET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 622;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * help argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDIFMODIFY_DESCRIPTION_HELP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 623;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server JMX subsystem.  This takes two arguments,
-   * which are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFMODIFY_CANNOT_INITIALIZE_JMX =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 626;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server configuration.  This takes two
-   * arguments, which are the path to the Directory Server configuration file
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFMODIFY_CANNOT_INITIALIZE_CONFIG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 627;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * initializing the Directory Server schema.  This takes two arguments, which
-   * are the path to the Directory Server configuration file and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFMODIFY_CANNOT_INITIALIZE_SCHEMA =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 628;
-
-
-
-  /**
-   * The message ID for the message that will be used if the source LDIF file
-   * does not exist.  This takes a single argument, which is the path to the
-   * source LDIF file.
-   */
-  public static final int MSGID_LDIFMODIFY_SOURCE_DOES_NOT_EXIST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 629;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to open the source LDIF file.  This takes two arguments, which are
-   * the path to the source LDIF file and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_LDIFMODIFY_CANNOT_OPEN_SOURCE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 630;
-
-
-
-  /**
-   * The message ID for the message that will be used if the changes LDIF file
-   * does not exist.  This takes a single argument, which is the path to the
-   * changes LDIF file.
-   */
-  public static final int MSGID_LDIFMODIFY_CHANGES_DOES_NOT_EXIST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 631;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to open the changes LDIF file.  This takes two arguments, which are
-   * the path to the changes LDIF file and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_LDIFMODIFY_CANNOT_OPEN_CHANGES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 632;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to open the target LDIF file.  This takes two arguments, which are
-   * the path to the target LDIF file and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_LDIFMODIFY_CANNOT_OPEN_TARGET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 633;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * processing the changes.  This takes a single argument, which is a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_LDIFMODIFY_ERROR_PROCESSING_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 634;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * host argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_HOST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 635;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * port argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 636;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * bindDN argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_BIND_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 637;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * bindPW argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_BIND_PW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 638;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * bindPWFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_BIND_PW_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 639;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * authzID argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_AUTHZID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 640;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * provideDNForAuthzID argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_PROVIDE_DN_FOR_AUTHZID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 641;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * newPW argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_NEWPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 642;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * newPWFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_NEWPWFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 643;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * currentPW argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_CURRENTPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 644;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * currentPWFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_CURRENTPWFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 645;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * useSSL argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_USE_SSL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 646;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * useStartTLS argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_USE_STARTTLS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 647;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * blindTrust argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_BLIND_TRUST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 648;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * sslKeyStore argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_KEYSTORE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 649;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * sslKeyStorePINFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_KEYSTORE_PINFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 650;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * sslTrustStore argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_TRUSTSTORE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 651;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * sslTrustStorePINFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_PINFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 652;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that two
-   * arguments must not be used together.  This takes two arguments, which are
-   * the long identifiers for the conflicting arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_CONFLICTING_ARGS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 656;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * bind DN and password must be provided together.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 657;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an
-   * anonymous modification requires the authorization ID and the current
-   * password.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_ANON_REQUIRES_AUTHZID_AND_CURRENTPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 658;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that if a
-   * particular argument is present, then another argument is also required.
-   * This takes two arguments, which are the long identifier of the first
-   * argument, and the long identifier of the argument that it requires.
-   */
-  public static final int MSGID_LDAPPWMOD_DEPENDENT_ARGS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 659;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an error
-   * occurred while initializing the SSL/TLS subsystem.  It takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAPPWMOD_ERROR_INITIALIZING_SSL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 660;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an error
-   * occurred while connecting to the server.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAPPWMOD_CANNOT_CONNECT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 661;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an error
-   * occurred while trying to send the password modify request.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAPPWMOD_CANNOT_SEND_PWMOD_REQUEST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 662;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an error
-   * occurred while trying to read the password modify response.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAPPWMOD_CANNOT_READ_PWMOD_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 663;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * password modify operation failed.  This takes a single argument, which is
-   * the LDAP result code.
-   */
-  public static final int MSGID_LDAPPWMOD_FAILED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 664;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide the error
-   * message from the password modify response.  This takes a single argument,
-   * which is the error message string.
-   */
-  public static final int MSGID_LDAPPWMOD_FAILURE_ERROR_MESSAGE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 665;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide the matched DN
-   * from the password modify response.  This takes a single argument, which is
-   * the matched DN.
-   */
-  public static final int MSGID_LDAPPWMOD_FAILURE_MATCHED_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 666;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * password modify operation was successful.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_SUCCESSFUL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 667;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide additional
-   * information from the successful password modify response.  This takes a
-   * single argument, which is the additional information string.
-   */
-  public static final int MSGID_LDAPPWMOD_ADDITIONAL_INFO =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 668;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide the generated
-   * password from the password modify response.  This takes a single argument,
-   * which is the generated password.
-   */
-  public static final int MSGID_LDAPPWMOD_GENERATED_PASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 669;
-
-
-
-  /**
-   * The message ID for the message that will be used if the password modify
-   * response contained an element with an unrecognized BER type.  This takes
-   * a single argument, which is a hex representation of the BER type.
-   */
-  public static final int MSGID_LDAPPWMOD_UNRECOGNIZED_VALUE_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 670;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred while
-   * attempting to decode the password modify response value.  It takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAPPWMOD_COULD_NOT_DECODE_RESPONSE_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 671;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * LDIF import was unsuccessful.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_IMPORT_UNSUCCESSFUL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 672;
-
-
-
-  /**
-   * The message ID for the message that will be used if an assertion value that
-   * is supposed to be base64-encoded can't be decoded.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_COMPARE_CANNOT_BASE64_DECODE_ASSERTION_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 673;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read the assertion value from a file.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_COMPARE_CANNOT_READ_ASSERTION_VALUE_FROM_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 674;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * targetFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_WAIT4DEL_DESCRIPTION_TARGET_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 675;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * logFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_WAIT4DEL_DESCRIPTION_LOG_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 676;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * timeout argument.  It does not take any arguments.
-   */
-  public static final int MSGID_WAIT4DEL_DESCRIPTION_TIMEOUT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 677;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * help argument.  It does not take any arguments.
-   */
-  public static final int MSGID_WAIT4DEL_DESCRIPTION_HELP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 678;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to open the log file for reading.  This takes two arguments, which
-   * are the path to the log file and a message explaining the problem that
-   * occurred.
-   */
-  public static final int MSGID_WAIT4DEL_CANNOT_OPEN_LOG_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 681;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt was made to
-   * use LDAPCompare without any entry DNs.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPCOMPARE_NO_DNS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 682;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * backup tool.  This does not take any arguments.
-   */
-  public static final int MSGID_BACKUPDB_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 683;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * configure-ds tool.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 684;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * encode-password tool.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 685;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * export-ldif tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 686;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * import-ldif tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 687;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * setup tool.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 688;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * ldapcompare tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPCOMPARE_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 689;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * ldapdelete tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPDELETE_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 690;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * ldapmodify tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPMODIFY_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 691;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * ldappasswordmodify tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 692;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * ldapsearch tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPSEARCH_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 693;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * ldif-diff tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFDIFF_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 694;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * ldifmodify tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFMODIFY_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 695;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * ldifsearch tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFSEARCH_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 696;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * makeldif tool.  This does not take any arguments.
-   */
-  public static final int MSGID_MAKELDIF_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 697;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * restore tool.  This does not take any arguments.
-   */
-  public static final int MSGID_RESTOREDB_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 698;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * stop-ds tool.  This does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 699;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * verify-index tool.  This does not take any arguments.
-   */
-  public static final int MSGID_VERIFYINDEX_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 700;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * wait-for-delete tool.  This does not take any arguments.
-   */
-  public static final int MSGID_WAIT4DEL_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 701;
-
-
-
-  /**
-   * The message ID for the message that will be used if two conflicting
-   * command-line arguments were provided.  This takes two arguments, which are
-   * the long names for the conflicting arguments.
-   */
-  public static final int MSGID_TOOL_CONFLICTING_ARGS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 702;
-
-
-
-  /**
-   * The message ID for the message that will be used if no compare attribute
-   * was provided.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPCOMPARE_NO_ATTR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 703;
-
-
-
-  /**
-   * The message ID for the message that will be used if the attribute string
-   * had an invalid format.  This takes a single argument, which is the invalid
-   * attribute string.
-   */
-  public static final int MSGID_LDAPCOMPARE_INVALID_ATTR_STRING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 704;
-
-
-
-  /**
-   * The message ID for the message that will be used if the control string
-   * had an invalid format.  This takes a single argument, which is the invalid
-   * control string.
-   */
-  public static final int MSGID_TOOL_INVALID_CONTROL_STRING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 705;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested SASL
-   * EXTERNAL authentication but is not using SSL or StartTLS.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 706;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requested SASL
-   * EXTERNAL authentication but did not specify a keystore path.  This does not
-   * take any arguments.
-   */
-  public static final int MSGID_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 707;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide the persistent
-   * search change type.  This takes a single argument, which is the change type
-   * string.
-   */
-  public static final int MSGID_LDAPSEARCH_PSEARCH_CHANGE_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 708;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide the persistent
-   * previous entry DN.  This takes a single argument, which is the previous DN
-   * string.
-   */
-  public static final int MSGID_LDAPSEARCH_PSEARCH_PREVIOUS_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 709;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide the header for
-   * the account usability control output.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPSEARCH_ACCTUSABLE_HEADER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 710;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that an
-   * account is usable.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPSEARCH_ACCTUSABLE_IS_USABLE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 711;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate the length of
-   * time before the password expires.  This takes a single argument, which is a
-   * human-readable string representation of the remaining time.
-   */
-  public static final int MSGID_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_EXPIRATION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 712;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * account is not usable.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPSEARCH_ACCTUSABLE_NOT_USABLE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 713;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * account has been deactivated.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPSEARCH_ACCTUSABLE_ACCT_INACTIVE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 714;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * user's password has been reset and must be changed before anything else can
-   * be done.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPSEARCH_ACCTUSABLE_PW_RESET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 715;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * user's password has expired.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPSEARCH_ACCTUSABLE_PW_EXPIRED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 716;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide the number of
-   * grace logins remaining for the user.  This takes a single argument, which
-   * is the number of remaining grace logins.
-   */
-  public static final int MSGID_LDAPSEARCH_ACCTUSABLE_REMAINING_GRACE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 717;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * account has been locked.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPSEARCH_ACCTUSABLE_LOCKED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 718;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide the length of
-   * time until the account is automatically unlocked.  This takes a single
-   * argument, which is a human-readable string representation of the time
-   * remaining.
-   */
-  public static final int MSGID_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_UNLOCK =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 719;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * keystorePasswordFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_KEYSTOREPASSWORD_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 720;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * truststorePassword argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_TRUSTSTOREPASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 721;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * truststorePasswordFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_TRUSTSTOREPASSWORD_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 722;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * list-backends tool.  This does not take any arguments.
-   */
-  public static final int MSGID_LISTBACKENDS_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 723;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * backendID argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LISTBACKENDS_DESCRIPTION_BACKEND_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 726;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * baseDN argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LISTBACKENDS_DESCRIPTION_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 727;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * help argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LISTBACKENDS_DESCRIPTION_HELP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 728;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to read backend information from the configuration.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LISTBACKENDS_CANNOT_GET_BACKENDS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 734;
-
-
-
-  /**
-   * The message ID for the message that will be used if a provided string can't
-   * be parsed as a DN.  This takes two arguments, which are the provided string
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LISTBACKENDS_INVALID_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 735;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a
-   * provided DN was not a base DN for any backend.  This takes a single
-   * argument, which is the provided DN.
-   */
-  public static final int MSGID_LISTBACKENDS_NOT_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 736;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a
-   * provided DN was not appropriate for any backend.  This takes a single
-   * argument, which is the provided DN.
-   */
-  public static final int MSGID_LISTBACKENDS_NO_BACKEND_FOR_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 737;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a
-   * provided DN was below the base DN for a backend in the server.  This takes
-   * three arguments, which are the provided DN, the base DN for the
-   * corresponding backend, and the backend ID.
-   */
-  public static final int MSGID_LISTBACKENDS_DN_BELOW_BASE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 738;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that a
-   * provided DN a base DN for a backend.  This takes two arguments, which are
-   * the provided DN and the corresponding backend ID.
-   */
-  public static final int MSGID_LISTBACKENDS_BASE_FOR_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 739;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label for the
-   * backend ID column header.
-   */
-  public static final int MSGID_LISTBACKENDS_LABEL_BACKEND_ID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 740;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label for the base
-   * DN column header.
-   */
-  public static final int MSGID_LISTBACKENDS_LABEL_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 741;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided backend ID
-   * is not associated with any backend configured in the server.  This takes a
-   * single argument, which is the provided backend ID.
-   */
-  public static final int MSGID_LISTBACKENDS_NO_SUCH_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 742;
-
-
-
-  /**
-   * The message ID for the message that will be used if none of the provided
-   * backend IDs are valid.  This does not take any arguments.
-   */
-  public static final int MSGID_LISTBACKENDS_NO_VALID_BACKENDS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 743;
-
-
-
-  /**
-   * The message ID for the message that will be used if the encoded password is
-   * not valid according to the user password syntax.  This takes a single
-   * argument, which is a message explaining why it is invalid.
-   */
-  public static final int MSGID_ENCPW_INVALID_ENCODED_USERPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 748;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * useCompareResultCode argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ENCPW_DESCRIPTION_USE_COMPARE_RESULT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 749;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * countEntries property.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_COUNT_ENTRIES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 750;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide the number of
-   * matching entries for a search request.  This takes a single argument, which
-   * is the number of matching entries.
-   */
-  public static final int MSGID_LDAPSEARCH_MATCHING_ENTRY_COUNT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 751;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * cli argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_CLI =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 752;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * sampleData argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_SAMPLE_DATA =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 753;
-
-
-
-  /**
-   * The message ID for the message that will be used as the heading when asking
-   * the user how to populate the database.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_HEADER_POPULATE_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 754;
-
-
-
-  /**
-   * The message ID for the message that will be used as the text for the
-   * populate option that will create only the base entry.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_INSTALLDS_POPULATE_OPTION_BASE_ONLY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 755;
-
-
-
-  /**
-   * The message ID for the message that will be used as the text for the
-   * populate option that will leave the database emtpy.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_INSTALLDS_POPULATE_OPTION_LEAVE_EMPTY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 756;
-
-
-
-  /**
-   * The message ID for the message that will be used as the text for the
-   * populate option that will import data from LDIF.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_INSTALLDS_POPULATE_OPTION_IMPORT_LDIF =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 757;
-
-
-
-  /**
-   * The message ID for the message that will be used as the text for the
-   * populate option that will create only the base entry.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_INSTALLDS_POPULATE_OPTION_GENERATE_SAMPLE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 758;
-
-
-
-  /**
-   * The message ID for the message that will be used as the text for the prompt
-   * asking the user how to populate the database.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_POPULATE_CHOICE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 759;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * specified LDIF file does not exist.  This takes a single argument, which is
-   * the specified LDIF file.
-   */
-  public static final int MSGID_INSTALLDS_NO_SUCH_LDIF_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 780;
-
-
-
-  /**
-   * The message ID for the message that will be used as the prompt for the
-   * number of entries to generate.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_NUM_ENTRIES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 781;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs when
-   * trying to create the template for generating sample data.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_INSTALLDS_CANNOT_CREATE_TEMPLATE_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 782;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * sslKeyStorePIN argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_KEYSTORE_PIN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 783;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * sslKeyStorePIN argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_PIN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 784;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * excludeOperational argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_OPERATIONAL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 785;
-
-
-
-  /**
-   * The message ID for the message that will be used to display warning
-   * information included in the password policy response control.  This takes
-   * two arguments, which are the string representation of the warning type and
-   * the integer warning value.
-   */
-  public static final int MSGID_LDAPPWMOD_PWPOLICY_WARNING =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 786;
-
-
-
-  /**
-   * The message ID for the message that will be used to display error
-   * information included in the password policy response control.  This takes
-   * a single argument, which is the string representation of the error type.
-   */
-  public static final int MSGID_LDAPPWMOD_PWPOLICY_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 787;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to decode the password policy response control.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAPPWMOD_CANNOT_DECODE_PWPOLICY_CONTROL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 788;
-
-
-
-  /**
-   * The message ID for the message that will be used if the connection to the
-   * Directory Server is closed while attempting to read the bind response from
-   * the server.  This does not take any arguments.
-   */
-  public static final int
-       MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 789;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * command-line option that includes the simple paged results control in the
-   * request.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_SIMPLE_PAGE_SIZE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 790;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * use the simple paged results control in conjunction with multiple search
-   * filters.  This does not take any arguments.
-   */
-  public static final int MSGID_PAGED_RESULTS_REQUIRES_SINGLE_FILTER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 791;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to decode the simple paged results response control from the
-   * server.  This takes a single argument, which is a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_PAGED_RESULTS_CANNOT_DECODE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 792;
-
-
-
-  /**
-   * The message ID for the message that will be used if the simple paged
-   * results control is not found in the response from the server.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_PAGED_RESULTS_RESPONSE_NOT_FOUND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 793;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * singleValueChanges argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFDIFF_DESCRIPTION_SINGLE_VALUE_CHANGES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 794;
-
-
-  /**
-   * The message ID for the message that will be used if the prompt trust
-   * manager is asked about trusting a client certificate.  This does not take
-   * any arguments.
-   */
-  public static final int MSGID_PROMPTTM_REJECTING_CLIENT_CERT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 795;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server did not
-   * present a certificate chain.  This does not take any arguments.
-   */
-  public static final int MSGID_PROMPTTM_NO_SERVER_CERT_CHAIN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 796;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server certificate
-   * is expired.  This takes a single argument, which is a string representation
-   * of the "notAfter" date.
-   */
-  public static final int MSGID_PROMPTTM_CERT_EXPIRED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 797;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server certificate
-   * is not yet valid.  This takes a single argument, which is a string
-   * representation of the "notBefore" date.
-   */
-  public static final int MSGID_PROMPTTM_CERT_NOT_YET_VALID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 798;
-
-
-
-  /**
-   * The message ID for the message that will be used to provide details about
-   * the server certificate.  This takes four arguments, which are the string
-   * representations of the certificate's subject DN, issuer DN, validity start
-   * date, and validity end date.
-   */
-  public static final int MSGID_PROMPTTM_SERVER_CERT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 799;
-
-
-  /**
-   * The message ID for the message that will be used to prompt the user to
-   * enter "yes" or "no".  This does not take any arguments.
-   */
-  public static final int MSGID_PROMPTTM_YESNO_PROMPT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 800;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user rejected the
-   * certificate presented by the server.  This does not take any arguments.
-   */
-  public static final int MSGID_PROMPTTM_USER_REJECTED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 801;
-
-
-  /**
-   * The message ID for the message that will be used when the server is
-   * already stopped.  This does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_SERVER_ALREADY_STOPPED =
-      CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 802;
-
-  /**
-   * The message ID for the message that will be used when the server is
-   * going to stopped.  This does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_GOING_TO_STOP =
-      CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 803;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * checkStoppability command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_CHECK_STOPPABILITY =
-      CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 804;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * certNickname argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_CERT_NICKNAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 805;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * jmxPort argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_JMX_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 806;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the JMX port.  This takes a single argument, which is
-   * a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_UPDATE_JMX_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 807;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * jmxPort argument.  This does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_JMXPORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 808;
-
-  /**
-   * The message ID for the message that will be used as the prompt to determine
-   * the JMX port number to use.  It does not take any arguments.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_JMXPORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 809;
-
-
-  /**
-   * The message ID for the message that will be used to print the result code
-   * for an error encountered in a client tool.  This takes two arguments,
-   * which are the integer and string representations of the result code.
-   */
-  public static final int MSGID_TOOL_RESULT_CODE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 810;
-
-  /**
-   * The message ID for the message that will be used to print the error message
-   * or additional information string returned by the server for an error
-   * encountered in a client tool.  This takes a single argument, which is the
-   * error message string.
-   */
-  public static final int MSGID_TOOL_ERROR_MESSAGE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 811;
-
-  /**
-   * The message ID for the message that will be used to print the matched DN
-   * returned by the server for an error  encountered in a client tool.  This
-   * takes a single argument, which is the string representation of the matched
-   * DN.
-   */
-  public static final int MSGID_TOOL_MATCHED_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 812;
-
-  /**
-   * The message ID for the message that will be used to inform that the windows
-   * service name for the OpenDS could not be found. This message takes no
-   * arguments.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_NOT_FOUND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 813;
-
-  /**
-   * The message ID for the message that will be used to inform that the windows
-   * service for OpenDS could not be started. This message takes no arguments.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_START_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 814;
-
-  /**
-   * The message ID for the message that will be used to inform that the windows
-   * service for OpenDS could not be stopped. This message takes no arguments.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_STOP_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 815;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * configure windows service tool.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGURE_WINDOWS_SERVICE_TOOL_DESCRIPTION =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 816;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * showUsage argument.  This does not take any arguments.
-   */
-  public static final int
-        MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_SHOWUSAGE =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 817;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * enableService argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_ENABLE =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 818;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * disableService argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_DISABLE =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 819;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * serviceState argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_STATE =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 820;
-
-  /**
-   * The message ID for the message that will be used if an error occurs if
-   * the user provided too many arguments.  This does not take any argument.
-   */
-  public static final int MSGID_CONFIGURE_WINDOWS_SERVICE_TOO_MANY_ARGS =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 823;
-
-  /**
-   * The message ID for the message that will be used if an error occurs if
-   * the user provided too few arguments.  This does not take any argument.
-   */
-  public static final int MSGID_CONFIGURE_WINDOWS_SERVICE_TOO_FEW_ARGS =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 824;
-
-  /**
-   * The message ID for the message for the name of the Windows service.
-   * This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_NAME =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 825;
-
-  /**
-   * The message ID for the message for the description of the Windows service.
-   * This does take the server path installation as argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_DESCRIPTION =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 826;
-
-  /**
-   * The message ID for the message to inform that the Windows service was
-   * successfully enabled.  This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_SUCCESSULLY_ENABLED =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 827;
-
-  /**
-   * The message ID for the message to inform that the Windows service was
-   * already enabled.  This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_ALREADY_ENABLED =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 828;
-
-  /**
-   * The message ID for the message to inform that the Windows service name was
-   * already in use.  This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_NAME_ALREADY_IN_USE =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 829;
-
-  /**
-   * The message ID for the message to inform that the Windows service could not
-   * be enabled.  This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_ENABLE_ERROR =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 830;
-
-  /**
-   * The message ID for the message to inform that the Windows service was
-   * successfully disabled.  This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_SUCCESSULLY_DISABLED =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 831;
-
-  /**
-   * The message ID for the message to inform that the Windows service was
-   * already disabled.  This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_ALREADY_DISABLED =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 832;
-
-  /**
-   * The message ID for the message to inform that the Windows service name was
-   * marked for deletion.  This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_MARKED_FOR_DELETION =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 833;
-
-  /**
-   * The message ID for the message to inform that the Windows service could not
-   * be disabled.  This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_DISABLE_ERROR =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 834;
-
-
-        /**
-   * The message ID for the message to inform that the Windows service is
-   * enabled.  This does take the name of the service as argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_ENABLED =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 835;
-
-  /**
-   * The message ID for the message to inform that the Windows service is
-   * disabled.  This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_DISABLED =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 836;
-
-  /**
-   * The message ID for the message to inform that the Windows service state
-   * could not be retrieved.  This does not take any argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_STATE_ERROR =
-        CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 837;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * windowsNetStop command-line argument.  This does not take any arguments.
-   */
-  public static final int MSGID_STOPDS_DESCRIPTION_WINDOWS_NET_STOP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 838;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * outputFile argument.  It does not take any arguments.
-   */
-  public static final int MSGID_WAIT4DEL_DESCRIPTION_OUTPUT_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 839;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to open the output file for reading.  This takes two arguments,
-   * which are the path to the log file and a message explaining the problem
-   * that occurred.
-   */
-  public static final int MSGID_WAIT4DEL_CANNOT_OPEN_OUTPUT_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 840;
-
-  /**
-   * The message ID for the message that will be used to tell that we are
-   * enabling OpenDS as a Windows service.
-   */
-  public static final int MSGID_INSTALLDS_ENABLING_WINDOWS_SERVICE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 841;
-
-
-  /**
-   * The message ID for the message that will be used to ask the user whether to
-   * enable OpenDS as a Windows service or not.  This does not take any
-   * argument.
-   */
-  public static final int MSGID_INSTALLDS_PROMPT_ENABLE_SERVICE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 842;
-
-  /**
-   * The message ID for the message for the description of the Enable Windows
-   * service.  This does not take any argument.
-   */
-  public static final int MSGID_INSTALLDS_DESCRIPTION_ENABLE_WINDOWS_SERVICE =
-      CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 843;
-
-
-  /**
-   * The message ID for the message for the description of cleanup Windows
-   * service.  This does not take any argument.
-   */
-  public static final int MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_CLEANUP =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 844;
-
-
-  /**
-   * The message ID to inform that the cleanup of the Windows service was
-   * successful.  This takes the service name as argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_CLEANUP_SUCCESS =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 845;
-
-  /**
-   * The message ID to inform that the service during the cleanup could not be
-   * found.  This takes the service name as argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_CLEANUP_NOT_FOUND =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 846;
-
-  /**
-   * The message ID to inform that the service has been marked for deletion.
-   * This takes the service name as argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_CLEANUP_MARKED_FOR_DELETION =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 847;
-
-  /**
-   * The message ID to inform that an error occurred during the service clean
-   * up.  This takes the service name as argument.
-   */
-  public static final int MSGID_WINDOWS_SERVICE_CLEANUP_ERROR =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 848;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * rebuild-index tool.  This does not take any arguments.
-   */
-  public static final int MSGID_REBUILDINDEX_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 849;
-
-    /**
-   * The message ID for the message that will be used as the description of the
-   * index name argument.  This does not take any arguments.
-   */
-  public static final int MSGID_REBUILDINDEX_DESCRIPTION_BASE_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 850;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * index name argument.  This does not take any arguments.
-   */
-  public static final int MSGID_REBUILDINDEX_DESCRIPTION_INDEX_NAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 851;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to perform index rebuild.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_REBUILDINDEX_ERROR_DURING_REBUILD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 852;
-
-  /**
-   * The message ID for the message that will be used if a request to
-   * rebuild indexes specifies the base DN of a backend that does not
-   * support indexing.
-   */
-  public static final int MSGID_REBUILDINDEX_WRONG_BACKEND_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 853;
-
-  /**
-   * The message ID to inform at least one index is required for the rebuild
-   * process.
-   */
-  public static final int MSGID_REBUILDINDEX_REQUIRES_AT_LEAST_ONE_INDEX =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 854;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to acquire a lock for the backend being rebuilt.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 855;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to release a lock for the backend being rebuilt.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_REBUILDINDEX_CANNOT_UNLOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 856;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to acquire a lock for the backend being rebuilt.  This takes
-   * two arguments, which are the backend ID and a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 857;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * ldapsPort argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_LDAPS_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 858;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the LDAP secure port.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_UPDATE_LDAPS_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 859;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * enableStartTLS argument.  This does not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_ENABLE_START_TLS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 860;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * Key Manager Provider DN argument for the connection handlers.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_KEYMANAGER_PROVIDER_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 861;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * Trust Manager Provider DN argument for the connection handlers.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_TRUSTMANAGER_PROVIDER_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 862;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to parse the DN provided for the key manager provider.  This
-   * takes two arguments, the dn valud provided by the user and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_PARSE_KEYMANAGER_PROVIDER_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 863;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to parse the DN provided for the trust manager provider.  This
-   * takes two arguments, the dn valud provided by the user and a message
-   * explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_PARSE_TRUSTMANAGER_PROVIDER_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 864;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to enable StartTLS.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_ENABLE_STARTTLS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 865;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to enable the key manager provider.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_ENABLE_KEYMANAGER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 866;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to enable the trust manager provider.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_ENABLE_TRUSTMANAGER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 867;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the key manager provider DN in one of the connection
-   * handlers.  This takes a single argument, which is a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_UPDATE_KEYMANAGER_REFERENCE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 868;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the trust manager provider DN in one of the connection
-   * handlers.  This takes a single argument, which is a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_UPDATE_TRUSTMANAGER_REFERENCE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 869;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * Certificate Key Manager Path for the Key Manager Provider entry.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_KEYMANAGER_PATH =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 870;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * Certificate Nick Name for the connection handlers.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_CONFIGDS_DESCRIPTION_CERTNICKNAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 871;
-
-  /**
-   * The message ID for the message that will be used if the user provided a key
-   * manager provider path without providing a key manager provider DN.  This
-   * takes as argument the two argument names.
-   */
-  public static final int MSGID_CONFIGDS_KEYMANAGER_PROVIDER_DN_REQUIRED =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 872;
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to update the certificate nickname in one of the connection
-   * handlers.  This takes a single argument, which is a message explaining the
-   * problem that occurred.
-   */
-  public static final int MSGID_CONFIGDS_CANNOT_UPDATE_CERT_NICKNAME =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 873;
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * filename argument.  It does not take any arguments.
-   */
-  public static final int MSGID_LDAPMODIFY_DESCRIPTION_FILENAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 874;
-
-
-
-  /**
-   * The message ID for the message that will be used if a template references
-   * a parent template that is not yet defined.  This takes three arguments,
-   * which are the parent template name, the line number on which it is
-   * referenced, and the child template name.
-   */
-  public static final int MSGID_MAKELDIF_TEMPLATE_INVALID_PARENT_TEMPLATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 875;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * sortOrder option for the ldapsearch tool.  It does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_SORT_ORDER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 876;
-
-
-
-  /**
-   * The message ID for the message that will be used if the provided sort order
-   * is invalid.  This takes a single argument, which is a message explaining
-   * the problem that occurred.
-   */
-  public static final int MSGID_LDAP_SORTCONTROL_INVALID_ORDER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 877;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * virtualListView option for the ldapsearch tool.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_DESCRIPTION_VLV =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 878;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requests a VLV
-   * operation without also requesting a server-side sort.  This takes two
-   * arguments, which are the long identifiers for the virtualListView and
-   * sortOrder arguments.
-   */
-  public static final int MSGID_LDAPSEARCH_VLV_REQUIRES_SORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 879;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user requests a VLV
-   * operation with an invalid descriptor.  This does not take any arguments.
-   */
-  public static final int MSGID_LDAPSEARCH_VLV_INVALID_DESCRIPTOR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 880;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * requested server-side sort operation was not successful.  This takes a
-   * single argument, which is a string representation of the associated sort
-   * control result code.
-   */
-  public static final int MSGID_LDAPSEARCH_SORT_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 881;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * server-side sort response control could not be decoded.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAPSEARCH_CANNOT_DECODE_SORT_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 882;
-
-
-
-  /**
-   * The message ID for the message that will be used display the target offset
-   * for the VLV result set.  This takes a single argument, which is the target
-   * offset.
-   */
-  public static final int MSGID_LDAPSEARCH_VLV_TARGET_OFFSET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 883;
-
-
-
-  /**
-   * The message ID for the message that will be used display the content count
-   * for the VLV result set.  This takes a single argument, which is the content
-   * count.
-   */
-  public static final int MSGID_LDAPSEARCH_VLV_CONTENT_COUNT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 884;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * requested virtual list view operation was not successful.  This takes a
-   * single argument, which is a string representation of the associated sort
-   * control result code.
-   */
-  public static final int MSGID_LDAPSEARCH_VLV_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 885;
-
-
-
-  /**
-   * The message ID for the message that will be used to indicate that the
-   * virtual list view response control could not be decoded.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_LDAPSEARCH_CANNOT_DECODE_VLV_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_WARNING | 886;
-
-
-
-  /**
-   * The message ID for the message that will be used if one of the LDIF files
-   * to be imported cannot be read.  This takes one argument, which is the
-   * pathname of a file that cannot be read.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_READ_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 887;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * geteffectiverights control authzid argument.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_DESCRIPTION_EFFECTIVERIGHTS_USER =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 888;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * geteffectiverights control specific attribute list argument.  This does
-   * not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_EFFECTIVERIGHTS_ATTR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 889;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * geteffectiverights authzid when it does not start with the required string
-   * "dn:". This takes a single argument, which is the authzid string.
-   */
-  public static final int MSGID_EFFECTIVERIGHTS_INVALID_AUTHZID =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 890;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * version argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_PRODUCT_VERSION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 891;
-
-
-
-  /**
-   * The message ID for the message that will be used if dscfg cannot
-   * read the LDAP bind password. This takes a single argument, which
-   * is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_DSCFG_ERROR_CANNOT_READ_LDAP_BIND_PASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1000;
-
-
-
-  /**
-   * The message ID for the message that will be used if dscfg cannot
-   * bind to the directory server. This takes a single argument, which
-   * is the bind DN.
-   */
-  public static final int MSGID_DSCFG_ERROR_LDAP_SIMPLE_BIND_FAILED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1001;
-
-
-
-  /**
-   * The message ID for the message that will be used if dscfg cannot
-   * connect to the directory server. This takes a two arguments,
-   * which are the host and port.
-   */
-  public static final int MSGID_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1002;
-
-
-
-  /**
-   * The message ID for the message that will be used if dscfg cannot
-   * bind to the directory server because it does not allow simple
-   * authentication. This does not take any arguments.
-   */
-  public static final int MSGID_DSCFG_ERROR_LDAP_SIMPLE_BIND_NOT_SUPPORTED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1003;
-
-
-
-  /**
-   * The message ID for the message that will be used to describe a
-   * dscfg create-xxx sub-command. This takes a single argument, which
-   * is the type of component that can be created.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_SUBCMD_CREATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1004;
-
-
-
-  /**
-   * The message ID for the message that will be used to describe a
-   * dscfg delete-xxx sub-command. This takes a single argument, which
-   * is the type of component that can be delete.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_SUBCMD_DELETE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1005;
-
-
-
-  /**
-   * The message ID for the message that will be used to describe a
-   * dscfg list-xxx sub-command. This takes a single argument, which
-   * is the type of component that can be list.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_SUBCMD_LIST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1006;
-
-
-
-  /**
-   * The message ID for the message that will be used to describe a
-   * dscfg get-xxx-prop sub-command. This takes a single argument, which
-   * is the type of component that can be queried.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_SUBCMD_GETPROP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1007;
-
-
-
-  /**
-   * The message ID for the message that will be used to describe a
-   * dscfg set-xxx-prop sub-command. This takes a single argument, which
-   * is the type of component that can be modified.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_SUBCMD_SETPROP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1008;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user fails
-   * to specify a sub-command. No message arguments are required.
-   */
-  public static final int MSGID_DSCFG_ERROR_MISSING_SUBCOMMAND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1009;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the create-xxx type argument when it is mandatory.
-   * This takes a single argument which is the user friendly name for
-   * the type of managed objects being created.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1010;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * fails to provide an admistrator password. This takes a single
-   * argument which is the name of the administrator.
-   */
-  public static final int MSGID_DSCFG_ERROR_NO_PASSWORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1011;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts to access a property which is not part of the associated
-   * managed object. This takes two arguments which are the name of
-   * the invalid property and the user friendly plural name of the
-   * associated managed object.
-   */
-  public static final int MSGID_DSCFG_ERROR_PROPERTY_UNRECOGNIZED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1012;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts to set a property using a value which is invalid
-   * according to the property's definition. This takes four arguments
-   * which are the invalid value, the user friendly name of the
-   * associated managed object, the name of the property, and the
-   * property's syntax.
-   */
-  public static final int MSGID_DSCFG_ERROR_PROPERTY_INVALID_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1013;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts to modify a read-only property. This takes two arguments
-   * which are the user friendly name of the associated managed
-   * object, and the name of the property.
-   */
-  public static final int MSGID_DSCFG_ERROR_PROPERTY_READ_ONLY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1014;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * fails to specify a value for a mandatory property. This takes two
-   * arguments which are the user friendly name of the associated
-   * managed object, and the name of the property.
-   */
-  public static final int MSGID_DSCFG_ERROR_PROPERTY_MANDATORY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1015;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts to specify more than one value for a single-valued
-   * property. This takes two arguments which are the user friendly
-   * name of the associated managed object, and the name of the
-   * property.
-   */
-  public static final int MSGID_DSCFG_ERROR_PROPERTY_SINGLE_VALUED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1016;
-
-
-
-  /**
-   * The message ID for the message that will be used to describe the
-   * dscfg help-properties sub-command. This does not take any
-   * arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_SUBCMD_HELPPROP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1017;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * heading of the component category column in tables.
-   */
-  public static final int MSGID_DSCFG_HEADING_COMPONENT_NAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1018;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * heading of the property name column in tables.
-   */
-  public static final int MSGID_DSCFG_HEADING_PROPERTY_NAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1019;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * heading of the property value column in tables.
-   */
-  public static final int MSGID_DSCFG_HEADING_PROPERTY_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1020;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * heading of the property syntax column in tables.
-   */
-  public static final int MSGID_DSCFG_HEADING_PROPERTY_SYNTAX =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1021;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * heading of the property options column in tables.
-   */
-  public static final int MSGID_DSCFG_HEADING_PROPERTY_OPTIONS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1022;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * heading of the property default column in tables.
-   */
-  public static final int MSGID_DSCFG_HEADING_PROPERTY_DEFAULT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1023;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * heading of the property description column in tables.
-   */
-  public static final int MSGID_DSCFG_HEADING_PROPERTY_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1024;
-
-
-
-  /**
-   * The message ID for the message that will be used when a
-   * property's syntax usage is too big to be displayed.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_PROPERTY_SYNTAX_HELP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1025;
-
-
-
-  /**
-   * The message ID for the message that will be used when a parent
-   * managed object cannot be retrieved due to a definition decoding
-   * problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_PARENT_DDE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1026;
-
-
-
-  /**
-   * The message ID for the message that will be used when a parent
-   * managed object cannot be retrieved due to a managed object
-   * decoding problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_PARENT_MODE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1027;
-
-
-
-  /**
-   * The message ID for the message that will be used when a parent
-   * managed object cannot be found.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_PARENT_MONFE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1028;
-
-
-
-  /**
-   * The message ID for the message that will be used when a parent
-   * managed object cannot be retrieved due to an authorization problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_PARENT_AUTHZ =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1029;
-
-
-
-  /**
-   * The message ID for the message that will be used when a parent
-   * managed object cannot be retrieved due to a communications error.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_PARENT_CE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1030;
-
-
-
-  /**
-   * The message ID for the message that will be used when a parent
-   * managed object cannot be retrieved due to conflicting concurrent
-   * modification by another client.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_PARENT_CME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1031;
-
-
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object cannot be created because one or more of its
-   * mandatory properties are missing.
-   */
-  public static final int MSGID_DSCFG_ERROR_CREATE_MMPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1032;
-
-
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object cannot be created because there is already a
-   * managed object with the same name.
-   */
-  public static final int MSGID_DSCFG_ERROR_CREATE_MOAEE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1033;
-
-
-
-  /**
-   * The message ID for the message that will be used when a managed
-   * object cannot be created due to an authorization problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_CREATE_AUTHZ =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1034;
-
-
-
-  /**
-   * The message ID for the message that will be used when a managed
-   * object cannot be created due to a communications error.
-   */
-  public static final int MSGID_DSCFG_ERROR_CREATE_CE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1035;
-
-
-
-  /**
-   * The message ID for the message that will be used when a
-   * managed object cannot be created due to conflicting concurrent
-   * modification by another client.
-   */
-  public static final int MSGID_DSCFG_ERROR_CREATE_CME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1036;
-
-
-
-  /**
-   * The message ID for the message that will be used when the server
-   * prevents a managed object from being created due to some
-   * server-side constraint that has not been satisfied.
-   */
-  public static final int MSGID_DSCFG_ERROR_CREATE_ORE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1037;
-
-
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object cannot be deleted because it could not be found.
-   */
-  public static final int MSGID_DSCFG_ERROR_DELETE_MONFE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1038;
-
-
-
-  /**
-   * The message ID for the message that will be used when a managed
-   * object cannot be deleted due to an authorization problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_DELETE_AUTHZ =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1039;
-
-
-
-  /**
-   * The message ID for the message that will be used when the server
-   * prevents a managed object from being deleted due to some
-   * server-side constraint that has not been satisfied.
-   */
-  public static final int MSGID_DSCFG_ERROR_DELETE_ORE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1040;
-
-
-
-  /**
-   * The message ID for the message that will be used when a managed
-   * object cannot be deleted due to a communications error.
-   */
-  public static final int MSGID_DSCFG_ERROR_DELETE_CE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1041;
-
-
-
-  /**
-   * The message ID for the message that will be used when a
-   * managed object cannot be deleted due to conflicting concurrent
-   * modification by another client.
-   */
-  public static final int MSGID_DSCFG_ERROR_DELETE_CME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1042;
-
-
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object cannot be retrieved due to a definition decoding
-   * problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_CHILD_DDE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1043;
-
-
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object cannot be retrieved due to a managed object
-   * decoding problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_CHILD_MODE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1044;
-
-
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object cannot be found.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_CHILD_MONFE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1045;
-
-
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object cannot be retrieved due to an authorization problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_CHILD_AUTHZ =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1046;
-
-
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object cannot be retrieved due to a communications error.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_CHILD_CE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1047;
-
-
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object cannot be retrieved due to conflicting concurrent
-   * modification by another client.
-   */
-  public static final int MSGID_DSCFG_ERROR_GET_CHILD_CME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1048;
-
-
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object cannot be modified because it could not be found.
-   */
-  public static final int MSGID_DSCFG_ERROR_MODIFY_MONFE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1049;
-
-
-
-  /**
-   * The message ID for the message that will be used when a managed
-   * object cannot be modified due to an authorization problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_MODIFY_AUTHZ =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1050;
-
-
-
-  /**
-   * The message ID for the message that will be used when a managed
-   * object cannot be modified due to a communications error.
-   */
-  public static final int MSGID_DSCFG_ERROR_MODIFY_CE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1051;
-
-
-
-  /**
-   * The message ID for the message that will be used when a
-   * managed object cannot be modified due to conflicting concurrent
-   * modification by another client.
-   */
-  public static final int MSGID_DSCFG_ERROR_MODIFY_CME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1052;
-
-
-
-  /**
-   * The message ID for the message that will be used when the server
-   * prevents a managed object from being modified due to some
-   * server-side constraint that has not been satisfied.
-   */
-  public static final int MSGID_DSCFG_ERROR_MODIFY_ORE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1053;
-
-
-
-  /**
-   * The message ID for the message that will be used when an optional
-   * child managed object cannot be listed due to a definition
-   * decoding problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_LIST_DDE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1054;
-
-
-
-  /**
-   * The message ID for the message that will be used when an optional
-   * child managed object cannot be listed due to a managed object
-   * decoding problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_LIST_MODE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1055;
-
-
-
-  /**
-   * The message ID for the message that will be used when an optional
-   * child managed object cannot be listed because it does not exist.
-   */
-  public static final int MSGID_DSCFG_ERROR_LIST_MONFE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1056;
-
-
-
-  /**
-   * The message ID for the message that will be used when managed
-   * objects cannot be listed due to an authorization problem.
-   */
-  public static final int MSGID_DSCFG_ERROR_LIST_AUTHZ =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1057;
-
-
-
-  /**
-   * The message ID for the message that will be used when managed
-   * object cannot be listed due to a communications error.
-   */
-  public static final int MSGID_DSCFG_ERROR_LIST_CE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1058;
-
-
-
-  /**
-   * The message ID for the message that will be used when
-   * managed object cannot be listed due to conflicting concurrent
-   * modification by another client.
-   */
-  public static final int MSGID_DSCFG_ERROR_LIST_CME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1059;
-
-
-
-  /**
-   * The message ID for the message that will be used if a property
-   * value(s) cannot be determined due to some unknown reason. This
-   * takes three arguments which are the user friendly name of the
-   * associated managed object, the name of the property, and the
-   * cause.
-   */
-  public static final int MSGID_DSCFG_ERROR_PROPERTY_UNKNOWN_ERROR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1060;
-
-
-  /**
-   * The message ID for the message that will be used if a property's
-   * default values cannot be determined. This takes three arguments
-   * which are the user friendly name of the associated managed
-   * object, the name of the property, and the cause.
-   */
-  public static final int MSGID_DSCFG_ERROR_PROPERTY_DEFAULT_BEHAVIOR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1061;
-
-
-  /**
-   * The message ID for the message that will be used if a property's
-   * inherited default values cannot be determined. This takes two
-   * arguments which are the user friendly name of the associated
-   * managed object, and the name of the property.
-   */
-  public static final int
-    MSGID_DSCFG_ERROR_PROPERTY_INHERITED_DEFAULT_BEHAVIOR =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1062;
-
-
-  /**
-   * The message ID for the message that will be used if a property
-   * argument did not contain a name/value separator. This takes a
-   * single arguments which is the invalid property value argument.
-   */
-  public static final int MSGID_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1063;
-
-
-  /**
-   * The message ID for the message that will be used if a property
-   * argument did not contain a property name. This takes a single
-   * arguments which is the invalid property value argument.
-   */
-  public static final int MSGID_DSCFG_ERROR_NO_NAME_IN_PROPERTY_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1064;
-
-
-  /**
-   * The message ID for the message that will be used if a property
-   * argument did not contain a property value. This takes a single
-   * arguments which is the invalid property value argument.
-   */
-  public static final int MSGID_DSCFG_ERROR_NO_VALUE_IN_PROPERTY_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1065;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts to create a managed object but specifies an unknown type
-   * name. This takes three arguments which are the invalid argument,
-   * the user friendly name of the managed object, and the supported types.
-   */
-  public static final int MSGID_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1066;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * requests help for a managed object but specifies an unknown type
-   * name. This takes a single argument which is the invalid argument.
-   */
-  public static final int MSGID_DSCFG_ERROR_TYPE_UNRECOGNIZED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1067;
-
-
-  /**
-   * The message ID for the message that will be used if a property
-   * modification did not contain a name/value separator. This takes a
-   * single arguments which is the invalid property value argument.
-   */
-  public static final int MSGID_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_MOD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1068;
-
-
-  /**
-   * The message ID for the message that will be used if a property
-   * modification did not contain a property name. This takes a single
-   * arguments which is the invalid property value argument.
-   */
-  public static final int MSGID_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1069;
-
-
-  /**
-   * The message ID for the message that will be used if a property
-   * modification did not contain a property value. This takes a
-   * single arguments which is the invalid property value argument.
-   */
-  public static final int MSGID_DSCFG_ERROR_NO_VALUE_IN_PROPERTY_MOD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1070;
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is
-   * made to apply incompatible property modifications. This takes a
-   * single arguments which is the invalid property value argument.
-   */
-  public static final int MSGID_DSCFG_ERROR_INCOMPATIBLE_PROPERTY_MOD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1071;
-
-
-
-  /**
-   * The message ID for the message that will be used if a managed
-   * object is retrieved whilst processing a sub-command but the
-   * retrieved object is not the correct type of object required in
-   * order to perform the operation. This takes two arguments which
-   * are the relation definition user friendly name and the user
-   * friendly name of the definition of the object that was retrieved.
-   */
-  public static final int MSGID_DSCFG_ERROR_WRONG_MANAGED_OBJECT_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1072;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the create-xxx type argument when it is optional.
-   * This takes two arguments which are the user friendly name for the
-   * type of managed objects being created and the default value.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_TYPE_DEFAULT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1073;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the get-xxx-prop record argument. This takes no
-   * arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_RECORD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1074;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * quiet argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_QUIET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1075;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * script-friendly argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_SCRIPT_FRIENDLY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1076;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * interactive argument.  This does not take any arguments.
-   */
-  public static final int MSGID_DESCRIPTION_INTERACTIVE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1077;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the unit-time argument. This takes no arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_UNIT_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1078;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the unit-size argument. This takes no arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_UNIT_SIZE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1079;
-
-
-
-  /**
-   * The message ID for the message that will be used when the user
-   * provides an invalid parameter to the unit-time argument. This
-   * takes a single argument which is the invalid parameter.
-   */
-  public static final int MSGID_DSCFG_ERROR_TIME_UNIT_UNRECOGNIZED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1080;
-
-
-
-  /**
-   * The message ID for the message that will be used when the user
-   * provides an invalid parameter to the unit-size argument. This
-   * takes a single argument which is the invalid parameter.
-   */
-  public static final int MSGID_DSCFG_ERROR_SIZE_UNIT_UNRECOGNIZED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1081;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * heading of the managed object type column in list tables.
-   */
-  public static final int MSGID_DSCFG_HEADING_COMPONENT_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1082;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of a --help-xxx argument. This takes a single
-   * argument which is the synopsis of the group.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1083;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of a --help-all argument. This does not take any
-   * arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_ALL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1084;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of a --help argument. This does not take any
-   * arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_SUMMARY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1085;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the a naming argument. This takes a single
-   * argument which is the user friendly name for the type of managed
-   * objects being named.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_NAME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1086;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the property name argument. This does not take any
-   * arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_PROP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1087;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the property value argument. This does not take
-   * any arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_PROP_VAL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1088;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the add property value argument. This does not
-   * take any arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_ADD_PROP_VAL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1089;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the remove property value argument. This does not
-   * take any arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_REMOVE_PROP_VAL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1090;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the reset property argument. This does not take
-   * any arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_RESET_PROP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1091;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the list-properties type argument. This does not
-   * take any arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_HELP_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1092;
-
-
-
-  /**
-   * The message ID for the message that will be used if dscfg cannot
-   * read the LDAP bind password interactively.
-   */
-  public static final int MSGID_DSCFG_ERROR_BIND_PASSWORD_NONINTERACTIVE =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1093;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * password policy state tool.
-   */
-  public static final int MSGID_PWPSTATE_TOOL_DESCRIPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1094;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * hostname argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_HOST =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1095;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * port argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1096;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * useSSL argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_USESSL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1097;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * useStartTLS argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_USESTARTTLS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1098;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * bindDN argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_BINDDN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1099;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * bindPassword argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_BINDPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1100;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * bindPasswordFile argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_BINDPWFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1101;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * targetDN argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_TARGETDN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1102;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * saslOptions argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_SASLOPTIONS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1103;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * trustAll argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_TRUST_ALL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1104;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * keyStorePath argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_KSFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1105;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * keyStorePIN argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_KSPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1106;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * keyStorePINFile argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_KSPWFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1107;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * trustStorePath argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_TSFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1108;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * trustStorePIN argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_TSPW =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1109;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * trustStorePINFile argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_TSPWFILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1110;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * showUsage argument.
-   */
-  public static final int MSGID_PWPSTATE_DESCRIPTION_SHOWUSAGE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1111;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-all subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_GET_ALL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1112;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-password-policy-dn subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_POLICY_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1113;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-account-is-disabled subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_ACCOUNT_DISABLED_STATE =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1114;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * set-account-is-disabled subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_SET_ACCOUNT_DISABLED_STATE =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1115;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * argument used to set Boolean values.
-   */
-  public static final int MSGID_DESCRIPTION_OPERATION_BOOLEAN_VALUE =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1116;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * clear-account-is-disabled subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_CLEAR_ACCOUNT_DISABLED_STATE =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1117;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-account-expiration-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_ACCOUNT_EXPIRATION_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1118;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * set-account-expiration-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_SET_ACCOUNT_EXPIRATION_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1119;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * argument used to set single values for single-valued attributes.
-   */
-  public static final int MSGID_DESCRIPTION_OPERATION_TIME_VALUE =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1120;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * clear-account-expiration-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_CLEAR_ACCOUNT_EXPIRATION_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1121;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-seconds-until-account-expiration subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_ACCOUNT_EXPIRATION =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1122;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-password-changed-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_CHANGED_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1123;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * set-password-changed-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_SET_PASSWORD_CHANGED_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1124;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * clear-password-changed-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_CHANGED_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1125;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-password-expiration-warned-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_EXPIRATION_WARNED_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1126;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * set-password-expiration-warned-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_SET_PASSWORD_EXPIRATION_WARNED_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1127;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * clear-password-expiration-warned-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_EXPIRATION_WARNED_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1128;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-seconds-until-password-expiration subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_PASSWORD_EXP =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1129;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-seconds-until-password-expiration-warning subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_PASSWORD_EXP_WARNING =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1130;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-auth-failure-times subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_GET_AUTH_FAILURE_TIMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1131;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * add-auth-failure-time subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_ADD_AUTH_FAILURE_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1132;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * set-auth-failure-times subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_SET_AUTH_FAILURE_TIMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1133;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * argument used to set single values for multi-valued attributes.
-   */
-  public static final int MSGID_DESCRIPTION_OPERATION_TIME_VALUES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1134;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * clear-auth-failure-times subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_CLEAR_AUTH_FAILURE_TIMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1135;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-seconds-until-authentication-failure-unlock subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_AUTH_FAILURE_UNLOCK =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1136;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-remaining-authentication-failure-count subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_REMAINING_AUTH_FAILURE_COUNT =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1137;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-last-login-time subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_GET_LAST_LOGIN_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1138;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * set-last-login-time subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_SET_LAST_LOGIN_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1139;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * clear-last-login-time subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_CLEAR_LAST_LOGIN_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1140;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-seconds-until-idle-lockout subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_IDLE_LOCKOUT =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1141;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-password-is-reset subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_RESET_STATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1142;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * set-password-is-reset subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_SET_PASSWORD_RESET_STATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1143;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * clear-password-is-reset subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_RESET_STATE =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1144;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-seconds-until-reset-lockout subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_RESET_LOCKOUT =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1145;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-grace-login-use-times subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_GET_GRACE_LOGIN_USE_TIMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1146;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * add-grace-login-use-time subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_ADD_GRACE_LOGIN_USE_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1147;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * set-grace-login-use-times subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_SET_GRACE_LOGIN_USE_TIMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1148;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * clear-grace-login-use-times subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_CLEAR_GRACE_LOGIN_USE_TIMES =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1149;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-remaining-grace-login-count subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_REMAINING_GRACE_LOGIN_COUNT =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1150;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-password-changed-by-required-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_PW_CHANGED_BY_REQUIRED_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1151;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * set-password-changed-by-required-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_SET_PW_CHANGED_BY_REQUIRED_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1152;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * clear-password-changed-by-required-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_CLEAR_PW_CHANGED_BY_REQUIRED_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1153;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-seconds-until-required-time subcommand.
-   */
-  public static final int
-       MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_REQUIRED_CHANGE_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1154;
-
-
-
-  /**
-   * The message ID for the message that will be used if no subcommand was
-   * provided on the command line.  This does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_NO_SUBCOMMAND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1155;
-
-
-
-  /**
-   * The message ID for the message that will be used if the operation value
-   * provided could not be parsed as a Boolean value.  This takes a single
-   * argument, which is the provided value.
-   */
-  public static final int MSGID_PWPSTATE_INVALID_BOOLEAN_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1156;
-
-
-
-  /**
-   * The message ID for the message that will be used if no value was provided
-   * for an operation that requires a Boolean value.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_PWPSTATE_NO_BOOLEAN_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1157;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unrecognized
-   * subcommand was provided.  This takes a single argument, which is the
-   * unrecognized subcommand.
-   */
-  public static final int MSGID_PWPSTATE_INVALID_SUBCOMMAND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1158;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to send the extended request to the server.  This takes a single
-   * argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_SEND_REQUEST_EXTOP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1159;
-
-
-
-  /**
-   * The message ID for the message that will be used if the server closed the
-   * connection without sending a response.  This does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_CONNECTION_CLOSED_READING_RESPONSE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1160;
-
-
-
-  /**
-   * The message ID for the message that will be used if the response from the
-   * server indicates that the request was not processed properly.  This takes
-   * three arguments, which are the result code, a string representation of the
-   * result code, and the error message.
-   */
-  public static final int MSGID_PWPSTATE_REQUEST_FAILED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1161;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred while
-   * attempting to decode the response message from the server.  This takes a
-   * single argument, which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_DECODE_RESPONSE_MESSAGE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1162;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred while
-   * attempting to decode a response op.  This takes a single argument, which is
-   * a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_DECODE_RESPONSE_OP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1163;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the password policy DN.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_PASSWORD_POLICY_DN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1164;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the account disabled state.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_ACCOUNT_DISABLED_STATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1165;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the account expiration time.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_ACCOUNT_EXPIRATION_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1166;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the seconds until account expiration.
-   */
-  public static final int
-       MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_ACCOUNT_EXPIRATION =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1167;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the password changed time.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_PASSWORD_CHANGED_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1168;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the password expiration warned time.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_PASSWORD_EXPIRATION_WARNED_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1169;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the seconds until password expiration.
-   */
-  public static final int
-       MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_EXPIRATION =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1170;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the seconds until the password expiration warning.
-   */
-  public static final int
-       MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_EXPIRATION_WARNING =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1171;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the auth failure times.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_AUTH_FAILURE_TIMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1172;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the seconds until auth failure unlock.
-   */
-  public static final int
-       MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_AUTH_FAILURE_UNLOCK =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1173;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the remaining auth failure count.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_REMAINING_AUTH_FAILURE_COUNT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1174;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the last login time.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_LAST_LOGIN_TIME =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1175;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the seconds until idle lockout.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_IDLE_LOCKOUT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1176;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the password reset state.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_PASSWORD_RESET_STATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1177;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the seconds until password reset lockout.
-   */
-  public static final int
-       MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_RESET_LOCKOUT =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1178;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the grace login use times.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_GRACE_LOGIN_USE_TIMES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1179;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the remaining grace login count.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_REMAINING_GRACE_LOGIN_COUNT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1180;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the password changed by required time.
-   */
-  public static final int
-       MSGID_PWPSTATE_LABEL_PASSWORD_CHANGED_BY_REQUIRED_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1181;
-
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the seconds until required change time.
-   */
-  public static final int
-       MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_REQUIRED_CHANGE_TIME =
-            CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1182;
-
-
-
-  /**
-   * The message ID for the message that will be used if the response contained
-   * an unknown or invalid operation type.  This takes a single argument, which
-   * is the invalid operation type.
-   */
-  public static final int MSGID_PWPSTATE_INVALID_RESPONSE_OP_TYPE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1183;
-
-
-
-  /**
-   * The message ID for the message that will be used if two arguments that are
-   * mutually exclusive were both provided.  This takes two arguments, which are
-   * the long identifiers for the mutually-exclusive command line arguments.
-   */
-  public static final int MSGID_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1184;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to perform SSL initialization.  This takes a single argument, which
-   * is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_INITIALIZE_SSL =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1185;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to parse a SASL option string.  This takes a single argument, which
-   * is the SASL option string.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_PARSE_SASL_OPTION =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1186;
-
-
-
-  /**
-   * The message ID for the message that will be used if SASL options were used
-   * without specifying the SASL mechanism.  This does not take any arguments.
-   */
-  public static final int MSGID_PWPSTATE_NO_SASL_MECHANISM =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1187;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine the port to use to communicate with the Directory
-   * Server.  This takes two arguments, which are the name of the port argument
-   * and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_DETERMINE_PORT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1188;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to connect to the Directory Server.  This takes a single argument,
-   * which is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_PWPSTATE_CANNOT_CONNECT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1189;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the upgrade file argument. This does not
-   * take any arguments.
-   */
-  public static final int MSGID_UPGRADE_DESCRIPTION_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1190;
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the upgrade interactive mode argument. This does not
-   * take any arguments.
-   */
-  public static final int MSGID_UPGRADE_DESCRIPTION_INTERACTIVE =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1191;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the upgrade silent mode argument. This does not
-   * take any arguments.
-   */
-  public static final int MSGID_UPGRADE_DESCRIPTION_SILENT =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1192;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the uninstall cli mode argument. This does not
-   * take any arguments.
-   */
-  public static final int MSGID_UNINSTALLDS_DESCRIPTION_CLI =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1193;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the uninstall silent mode argument. This does not
-   * take any arguments.
-   */
-  public static final int MSGID_UNINSTALLDS_DESCRIPTION_SILENT =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1194;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * countRejects argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_COUNT_REJECTS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1195;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the delete-xxx force argument. This takes a single
-   * argument which is the user-friendly plural name of the type of
-   * managed objects which can be deleted.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_FORCE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1196;
-
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * skipFile argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_SKIP_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1197;
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to open the skip file.  This takes two arguments, which are the
-   * path to the skip file and a string representation of the exception that
-   * was caught.
-   */
-  public static final int MSGID_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1198;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * countErrors argument. This does not take any arguments.
-   */
-  public static final int MSGID_VERIFYINDEX_DESCRIPTION_COUNT_ERRORS =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1199;
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts to modify a property which is mandatory and which does
-   * not have any default values. This takes three arguments which are
-   * the name of the managed object, the name of the mandatory
-   * property, and the name of the option which should be used to give
-   * the property a new value.
-   */
-  public static final int MSGID_DSCFG_ERROR_UNABLE_TO_RESET_MANDATORY_PROPERTY =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1200;
-
-
-  /**
-   * The message ID for the message that will be used as the label when
-   * displaying the password history state values.
-   */
-  public static final int MSGID_PWPSTATE_LABEL_PASSWORD_HISTORY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1201;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * get-password-history subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_HISTORY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1202;
-
-
-
-  /**
-   * The message ID for the message that will be used as the description for the
-   * clear-password-history subcommand.
-   */
-  public static final int MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_HISTORY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1203;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts create a new managed object having a name which is
-   * invalid according to the managed object's naming property. This
-   * takes three arguments which are the illegal name, the user
-   * friendly name of the associated managed object, and the syntax.
-   */
-  public static final int MSGID_DSCFG_ERROR_ILLEGAL_NAME_SYNTAX =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1204;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts create a new managed object having an empty name. This
-   * takes a single argument which is the user friendly plural name of
-   * the associated managed object.
-   */
-  public static final int MSGID_DSCFG_ERROR_ILLEGAL_NAME_EMPTY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1205;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts create a new managed object having a blank name. This
-   * takes a single argument which is the user friendly plural name of
-   * the associated managed object.
-   */
-  public static final int MSGID_DSCFG_ERROR_ILLEGAL_NAME_BLANK =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1206;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts create a new managed object having a name which is
-   * invalid for an unspecified reason. This takes two arguments which
-   * are the illegal name and the user friendly name of the associated
-   * managed object.
-   */
-  public static final int MSGID_DSCFG_ERROR_ILLEGAL_NAME_UNKNOWN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1207;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the a naming argument in create-xxx sub-commands
-   * which do not have a naming property. This takes a single argument
-   * which is the user friendly name for the type of managed objects
-   * being named.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_NAME_CREATE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1208;
-
-
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the a naming argument in create-xxx sub-commands
-   * which do have a naming property. This takes three arguments which
-   * are the user friendly name for the type of managed objects being
-   * named, the name of the naming property, and the naming property's
-   * synopsis.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_NAME_CREATE_EXT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1209;
-
-
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts set a value for the naming property when creating a new
-   * managed object. This takes two arguments, which are the the name
-   * of the naming property, and the user friendly name of the type of
-   * managed object being created.
-   */
-  public static final int MSGID_DSCFG_ERROR_UNABLE_TO_SET_NAMING_PROPERTY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1210;
-
-  /**
-   * The message ID for the message that will be used if the user specifies
-   * the same port for different protocols.  This takes as argument the value of
-   * the culprit port.
-   */
-  public static final int MSGID_CONFIGDS_PORT_ALREADY_SPECIFIED  =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1211;
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts to access a property which is not recognized. This takes
-   * one argument which is the name of the invalid property.
-   */
-  public static final int MSGID_CLI_ERROR_PROPERTY_UNRECOGNIZED =
-      CATEGORY_MASK_TOOLS  | SEVERITY_MASK_SEVERE_ERROR | 1212;
-
-  /**
-   * The message ID for the message that will be used if the user
-   * doesn't specify a mandatory property. This takes one argument
-   * which is the name of the missing property.
-   */
-  public static final int MSGID_CLI_ERROR_MISSING_PROPERTY =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1213;
-
-  /**
-   * The message ID for the message that will be used if the user
-   * specify a wrong value of a property. This takes two arguments
-   * which is the name of the property and the wrong value.
-   */
-  public static final int MSGID_CLI_ERROR_INVALID_PROPERTY_VALUE =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1214;
-
-  /**
-   * The message ID for the message that will be used as the
-   * heading of the property default value column in tables.
-   */
-  public static final int MSGID_CLI_HEADING_PROPERTY_DEFAULT_VALUE =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1215;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the advanced mode argument in get-xxx-prop
-   * sub-commands. This takes a single argument which is the user
-   * friendly name of the component.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_ADVANCED_GET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1216;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the advanced mode argument in create-xxx and
-   * set-xxx-prop sub-commands. This takes no arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_ADVANCED_SET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1217;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the advanced mode argument in the list-properties
-   * sub-command. This takes no arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_ADVANCED_HELP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1218;
-
-  /**
-   * Message ID for reverter tool's directory option.
-   */
-  public static final int MSGID_REVERT_DESCRIPTION_DIRECTORY =
-          CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1219;
-
-
-  /**
-   * Message ID for reverter tool's directory option.
-   */
-  public static final int MSGID_REVERT_DESCRIPTION_RECENT =
-          CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1220;
-
-  /**
-   * Message ID for reverter tool's directory option.
-   */
-  public static final int MSGID_REVERT_DESCRIPTION_INTERACTIVE =
-          CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1221;
-
-  /**
-   * Message ID for reverter tool's directory option.
-   */
-  public static final int MSGID_REVERT_DESCRIPTION_SILENT =
-          CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1222;
-
-  /**
-   * The message ID for the message which should be used when an
-   * argument, which is mandatory when the application is
-   * non-interactive, has not been specified. This takes a
-   * single arguments which is the long name of the missing argument.
-   */
-  public static final int MSGID_DSCFG_ERROR_MISSING_NON_INTERACTIVE_ARG =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1223;
-
-
-  /**
-   * The message ID for the message that will be used if dsconfig cannot
-   * read input from the console. This takes a single argument, which
-   * is a message explaining the problem that occurred.
-   */
-  public static final int MSGID_DSCFG_ERROR_CANNOT_READ_CONSOLE_INPUT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1224;
-
-  /**
-   * The message ID for the message that will be used as the prompt
-   * for the type of component to be created when using the create-xxx
-   * sub-command interactively. This takes a single argument which is
-   * the user friendly name for the type of managed objects being
-   * created.
-   */
-  public static final int MSGID_DSCFG_CREATE_TYPE_PROMPT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1225;
-
-  /**
-   * The message ID for the message that will be used as the prompt
-   * for the name of the component to be created when using the
-   * create-xxx sub-command interactively. This takes a single
-   * argument which is the user friendly name for the type of managed
-   * objects being created.
-   */
-  public static final int MSGID_DSCFG_CREATE_NAME_PROMPT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1226;
-
-  /**
-   * The message ID for the message that will be used when a child
-   * managed object name the was specified interactively cannot be
-   * used because there is already a managed object with the same
-   * name. This takes two arguments which are the type of managed
-   * object being created and the name of the existing managed object.
-   */
-  public static final int MSGID_DSCFG_ERROR_CREATE_NAME_ALREADY_EXISTS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1227;
-
-  /**
-   * The message ID for the message that will be used as the type
-   * heading in interactive help. This does not require any arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_CREATE_HELP_HEADING_TYPE =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1228;
-
-  /**
-   * The message ID for the message that will be used as the description
-   * heading in interactive help. This does not require any arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_CREATE_HELP_HEADING_DESCR =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1229;
-
-  /**
-   * The message ID for the message that will be used when a user
-   * requests to interactively select the name of acomponent, but
-   * there are none available. This takes a single argument which is
-   * the user friendly plural name of the component type.
-   */
-  public static final int MSGID_DSCFG_ERROR_FINDER_NO_CHILDREN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1230;
-
-  /**
-   * The message ID for the message that will be used when a user
-   * requests to interactively select the name of a component, but
-   * there was only one available and the user did not select it. This
-   * takes a single argument which is the user friendly name of the
-   * component type.
-   */
-  public static final int MSGID_DSCFG_ERROR_FINDER_SINGLE_CHILD_REJECTED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1231;
-
-  /**
-   * The message ID for the message that will be used as the prompt
-   * when a user requests to interactively select the name of a
-   * component and there is only one option. This takes two arguments
-   * which are the user friendly name of the component type and the
-   * single available choice.
-   */
-  public static final int MSGID_DSCFG_FINDER_PROMPT_SINGLE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1232;
-
-  /**
-   * The message ID for the message that will be used as the prompt
-   * when a user requests to interactively select the name of a
-   * component and there is more than one option. This takes a single
-   * argument which is the user friendly name of the component type.
-   */
-  public static final int MSGID_DSCFG_FINDER_PROMPT_MANY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1233;
-
-  /**
-   * The message ID for the word that will be used in confirmation
-   * messages to indicate "yes".
-   */
-  public static final int MSGID_DSCFG_GENERAL_CONFIRM_NO =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1234;
-
-  /**
-   * The message ID for the word that will be used in confirmation
-   * messages to indicate "yes".
-   */
-  public static final int MSGID_DSCFG_GENERAL_CONFIRM_YES =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1235;
-
-  /**
-   * The message ID for the message that will be used when a user
-   * fails to input a valid response to a confirmation message. This
-   * takes two arguments which are the word for "yes" and the word for
-   * "no".
-   */
-  public static final int MSGID_DSCFG_ERROR_GENERAL_CONFIRM =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1236;
-
-  /**
-   * The message ID for the prompt that will be used in choice menus
-   * when no help is available. This takes a single argument which is
-   * the choice upper-bound.
-   */
-  public static final int MSGID_DSCFG_GENERAL_CHOICE_PROMPT_NOHELP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1237;
-
-  /**
-   * The message ID for the prompt that will be used in choice menus
-   * when help is available. This takes a single argument which is the
-   * choice upper-bound.
-   */
-  public static final int MSGID_DSCFG_GENERAL_CHOICE_PROMPT_HELP =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1238;
-
-  /**
-   * The message ID for the message that will be used when a user
-   * fails to input a valid response to a choice prompt. This takes a
-   * single argument which is the choice's upper-bound.
-   */
-  public static final int MSGID_DSCFG_ERROR_GENERAL_CHOICE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1239;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editing menu for resetting.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_MENU_RESET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1240;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editing menu for setting a value.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_MENU_SET =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1241;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editing menu for adding a value.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_MENU_ADD =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1242;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editing menu for removing a value.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_MENU_REMOVE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1243;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editing menu for the continue option.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_MENU_CONTINUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1244;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editor as the prompt for removing a value.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_PROMPT_REMOVE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1245;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editor as the prompt for selecting a value.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_PROMPT_SELECT_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1246;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editor as the prompt for entering a value.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_PROMPT_ENTER_VALUE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1247;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editor as the title prompt for the property selection menu.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_MENU_TITLE =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1248;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editor as the prompt for mandatory properties.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_PROMPT_MANDATORY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1249;
-
-  /**
-   * The message ID for the message that will be used in the property
-   * editor as the prompt for property modification menu.
-   */
-  public static final int MSGID_DSCFG_VALUE_READER_PROMPT_MODIFY_MENU =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1250;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * clearBackend argument.  This does not take any arguments.
-   */
-  public static final int MSGID_LDIFIMPORT_DESCRIPTION_CLEAR_BACKEND =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1251;
-
-    /**
-   * The message ID for the message that will be used if neither the
-   * includeBranchStrings or the backendID arguments was provided.
-   * This takes two arguments, which are the long identifiers for the
-   * includeBranchStrings and backendID options.
-   */
-  public static final int MSGID_LDIFIMPORT_MISSING_BACKEND_ARGUMENT =
-      CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1252;
-
-
-  /**
-   * The message ID for the message that will be used if the clearBackend
-   * argument was not provided when the backendID argument was provided without
-   * an append argument. This takes the long identifier of the clearBackend
-   * option as an argument.
-   */
-  public static final int MSGID_LDIFIMPORT_MISSING_CLEAR_BACKEND =
-      CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1253;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for enumerations.
-   */
-  public static final int MSGID_DSCFG_HELP_FIELD_ENUM =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1254;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for undefined default behavior.
-   */
-  public static final int MSGID_DSCFG_HELP_FIELD_UNDEFINED =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1255;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for absolute inherited default behavior.
-   */
-  public static final int MSGID_DSCFG_HELP_FIELD_INHERITED_ABS =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1256;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for offset > 0 inherited default behavior.
-   */
-  public static final int MSGID_DSCFG_HELP_FIELD_INHERITED_PARENT =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1257;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for offset 0 inherited default behavior.
-   */
-  public static final int MSGID_DSCFG_HELP_FIELD_INHERITED_THIS =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1258;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for server restart.
-   */
-  public static final int MSGID_DSCFG_HELP_FIELD_SERVER_RESTART =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1259;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for component restart.
-   */
-  public static final int MSGID_DSCFG_HELP_FIELD_COMPONENT_RESTART =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1260;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for read-only.
-   */
-  public static final int MSGID_DSCFG_HELP_FIELD_READ_ONLY =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1261;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for monitoring.
-   */
-  public static final int MSGID_DSCFG_HELP_FIELD_MONITORING =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1262;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the property heading.
-   */
-  public static final int MSGID_DSCFG_HELP_HEADING_PROPERTY =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1263;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the component name heading.
-   */
-  public static final int MSGID_DSCFG_HELP_HEADING_COMPONENT =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1264;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the default heading.
-   */
-  public static final int MSGID_DSCFG_HELP_HEADING_DEFAULT =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1265;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the mandatory heading.
-   */
-  public static final int MSGID_DSCFG_HELP_HEADING_MANDATORY =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1266;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the advanced heading.
-   */
-  public static final int MSGID_DSCFG_HELP_HEADING_ADVANCED =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1267;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the multi-valued heading.
-   */
-  public static final int MSGID_DSCFG_HELP_HEADING_MULTI_VALUED =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1268;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the read-only heading.
-   */
-  public static final int MSGID_DSCFG_HELP_HEADING_READ_ONLY =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1269;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the syntax heading.
-   */
-  public static final int MSGID_DSCFG_HELP_HEADING_SYNTAX =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1270;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the options description.
-   */
-  public static final int MSGID_DSCFG_HELP_DESCRIPTION_OPTION =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1271;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the readable description.
-   */
-  public static final int MSGID_DSCFG_HELP_DESCRIPTION_READ =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1272;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the writable description.
-   */
-  public static final int MSGID_DSCFG_HELP_DESCRIPTION_WRITE =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1273;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the mandatory description.
-   */
-  public static final int MSGID_DSCFG_HELP_DESCRIPTION_MANDATORY =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1274;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the single-valued description.
-   */
-  public static final int MSGID_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1275;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the admin-action description.
-   */
-  public static final int MSGID_DSCFG_HELP_DESCRIPTION_ADMIN_ACTION =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1276;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the creation confirmation question.
-   */
-  public static final int MSGID_DSCFG_CONFIRM_CREATE =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1277;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the deletion confirmation question.
-   */
-  public static final int MSGID_DSCFG_CONFIRM_DELETE =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1278;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the modify confirmation question.
-   */
-  public static final int MSGID_DSCFG_CONFIRM_MODIFY =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1279;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the creation successful confirmation message.
-   */
-  public static final int MSGID_DSCFG_CONFIRM_CREATE_SUCCESS =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1280;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the deletion successful confirmation message.
-   */
-  public static final int MSGID_DSCFG_CONFIRM_DELETE_SUCCESS =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1281;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the modify successful confirmation message.
-   */
-  public static final int MSGID_DSCFG_CONFIRM_MODIFY_SUCCESS =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1282;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the creation failure confirmation message.
-   */
-  public static final int MSGID_DSCFG_CONFIRM_CREATE_FAIL =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1283;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the deletion failure confirmation message.
-   */
-  public static final int MSGID_DSCFG_CONFIRM_DELETE_FAIL =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1284;
-
-  /**
-   * The message ID for the message which will be used in dsconfig
-   * help for the modify failure confirmation message.
-   */
-  public static final int MSGID_DSCFG_CONFIRM_MODIFY_FAIL =
-    CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1285;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the list-properties category argument. This does
-   * not take any arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_HELP_CATEGORY =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1286;
-
-  /**
-   * The message ID for the message that will be used if the user
-   * requests help for a component category but specifies an unknown
-   * category name. This takes a single argument which is the invalid
-   * argument.
-   */
-  public static final int MSGID_DSCFG_ERROR_CATEGORY_UNRECOGNIZED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1287;
-
-  /**
-   * The message ID for the message that will be used if the user
-   * requests help for a component category and sub-type but specifies
-   * an unknown sub-type name. This takes two arguments which are the
-   * invalid type argument and the category.
-   */
-  public static final int MSGID_DSCFG_ERROR_CATEGORY_TYPE_UNRECOGNIZED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1288;
-
-  /**
-   * The message ID for the message that will be used if the user
-   * attempts to access a property which is not part of any managed
-   * object. This takes a single argument which is the name of the
-   * invalid property.
-   */
-  public static final int MSGID_DSCFG_ERROR_PROPERTY_UNRECOGNIZED_NO_DEFN =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_SEVERE_ERROR | 1289;
-
-  /**
-   * The message ID for the message that will be used as the
-   * description of the list-properties category argument. This does
-   * not take any arguments.
-   */
-  public static final int MSGID_DSCFG_DESCRIPTION_HELP_INHERITED =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_INFORMATIONAL | 1290;
-
-
-
-  /**
-   * The message ID for the message that will be used if a list tag does not
-   * contain any arguments.  This takes a single argument, which is the line
-   * number on which it appears in the template file.
-   */
-  public static final int MSGID_MAKELDIF_TAG_LIST_NO_ARGUMENTS =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_ERROR | 1291;
-
-
-
-  /**
-   * The message ID for the message that will be used if a list tag includes an
-   * argument with a semicolon that is not followed by an integer.  This takes
-   * two arguments, which are the line number on which it appears in the
-   * template file and the list item containing the semicolon.
-   */
-  public static final int MSGID_MAKELDIF_TAG_LIST_INVALID_WEIGHT =
-       CATEGORY_MASK_TOOLS | SEVERITY_MASK_MILD_WARNING | 1292;
-
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_TOOLS_CANNOT_CREATE_SSL_CONNECTION,
-                    "Unable to create an SSL connection to the server: %s");
-    registerMessage(MSGID_TOOLS_SSL_CONNECTION_NOT_INITIALIZED,
-                    "Unable to create an SSL connection to the server because" +
-                    " the connection factory has not been initialized");
-    registerMessage(MSGID_TOOLS_CANNOT_LOAD_KEYSTORE_FILE,
-                    "Cannot load the key store file: %s");
-    registerMessage(MSGID_TOOLS_CANNOT_INIT_KEYMANAGER,
-                    "Cannot initialize the key manager for the key store:" +
-                    "%s");
-    registerMessage(MSGID_TOOLS_CANNOT_LOAD_TRUSTSTORE_FILE,
-                    "Cannot load the key store file: %s");
-    registerMessage(MSGID_TOOLS_CANNOT_INIT_TRUSTMANAGER,
-                    "Cannot initialize the key manager for the key store:" +
-                    "%s");
-
-
-    registerMessage(MSGID_ENCPW_DESCRIPTION_LISTSCHEMES,
-                    "List available password storage schemes");
-    registerMessage(MSGID_ENCPW_DESCRIPTION_CLEAR_PW,
-                    "Clear-text password to encode or to compare against an " +
-                    "encoded password");
-    registerMessage(MSGID_ENCPW_DESCRIPTION_CLEAR_PW_FILE,
-                    "Clear-text password file");
-    registerMessage(MSGID_ENCPW_DESCRIPTION_ENCODED_PW,
-                    "Encoded password to compare against the clear-text " +
-                    "password");
-    registerMessage(MSGID_ENCPW_DESCRIPTION_ENCODED_PW_FILE,
-                    "Encoded password file");
-    registerMessage(MSGID_DESCRIPTION_CONFIG_CLASS,
-                    "The fully-qualified name of the Java class to use as " +
-                    "the Directory Server configuration handler.  If this is " +
-                    "not provided, then a default of " +
-                    ConfigFileHandler.class.getName() + " will be used");
-    registerMessage(MSGID_DESCRIPTION_CONFIG_FILE,
-                    "Specifies the path to the Directory Server " +
-                    "configuration file");
-    registerMessage(MSGID_ENCPW_DESCRIPTION_SCHEME,
-                    "Scheme to use for the encoded password");
-    registerMessage(MSGID_ENCPW_DESCRIPTION_AUTHPW,
-                    "Use the authentication password syntax rather than the " +
-                    "user password syntax");
-    registerMessage(MSGID_ENCPW_DESCRIPTION_USE_COMPARE_RESULT,
-                    "Use the LDAP compare result as an exit code for the " +
-                    "password comparison");
-    registerMessage(MSGID_DESCRIPTION_USAGE,
-                    "Displays this usage information");
-    registerMessage(MSGID_CANNOT_INITIALIZE_ARGS,
-                    "An unexpected error occurred while attempting to " +
-                    "initialize the command-line arguments:  %s");
-    registerMessage(MSGID_ERROR_PARSING_ARGS,
-                    "An error occurred while parsing the command-line " +
-                    "arguments:  %s");
-    registerMessage(MSGID_ENCPW_NO_CLEAR_PW,
-                    "No clear-text password was specified.  Use --%s or --%s " +
-                    "to specify the password to encode");
-    registerMessage(MSGID_ENCPW_NO_SCHEME,
-                    "No password storage scheme was specified.  Use the --%s " +
-                    "argument to specify the storage scheme");
-    registerMessage(MSGID_SERVER_BOOTSTRAP_ERROR,
-                    "An unexpected error occurred while attempting to " +
-                    "bootstrap the Directory Server client-side code:  %s");
-    registerMessage(MSGID_CANNOT_LOAD_CONFIG,
-                    "An error occurred while trying to load the Directory " +
-                    "Server configuration:  %s");
-    registerMessage(MSGID_CANNOT_LOAD_SCHEMA,
-                    "An error occurred while trying to load the Directory " +
-                    "Server schema:  %s");
-    registerMessage(MSGID_CANNOT_INITIALIZE_CORE_CONFIG,
-                    "An error occurred while trying to initialize the core " +
-                    "Directory Server configuration:  %s");
-    registerMessage(MSGID_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES,
-                    "An error occurred while trying to initialize the " +
-                    "Directory Server password storage schemes:  %s");
-    registerMessage(MSGID_ENCPW_NO_AUTH_STORAGE_SCHEMES,
-                    "No authentication password storage schemes have been " +
-                    "configured for use in the Directory Server");
-    registerMessage(MSGID_ENCPW_NO_STORAGE_SCHEMES,
-                    "No password storage schemes have been configured for " +
-                    "use in the Directory Server");
-    registerMessage(MSGID_ENCPW_NO_SUCH_AUTH_SCHEME,
-                    "Authentication password storage scheme \"%s\" is not "+
-                    "configured for use in the Directory Server");
-    registerMessage(MSGID_ENCPW_NO_SUCH_SCHEME,
-                    "Password storage scheme \"%s\" is not configured for " +
-                    "use in the Directory Server");
-    registerMessage(MSGID_ENCPW_INVALID_ENCODED_AUTHPW,
-                    "The provided password is not a valid encoded " +
-                    "authentication password value:  %s");
-    registerMessage(MSGID_ENCPW_PASSWORDS_MATCH,
-                    "The provided clear-text and encoded passwords match");
-    registerMessage(MSGID_ENCPW_PASSWORDS_DO_NOT_MATCH,
-                    "The provided clear-text and encoded passwords do not " +
-                    "match");
-    registerMessage(MSGID_ENCPW_INVALID_ENCODED_USERPW,
-                    "The provided password is not a valid encoded " +
-                    "user password value:  %s");
-    registerMessage(MSGID_ENCPW_ENCODED_PASSWORD,
-                    "Encoded Password:  \"%s\"");
-    registerMessage(MSGID_ENCPW_CANNOT_ENCODE,
-                    "An error occurred while attempting to encode the " +
-                    "clear-text password:  %s");
-
-
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_LDIF_FILE,
-                    "Path to the LDIF file to be written");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_APPEND_TO_LDIF,
-                    "Append an existing LDIF file rather than overwriting it");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_BACKEND_ID,
-                    "Backend ID for the backend to export");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_INCLUDE_BRANCH,
-                    "Base DN of a branch to include in the LDIF export");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_BRANCH,
-                    "Base DN of a branch to exclude from the LDIF export");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_INCLUDE_ATTRIBUTE,
-                    "Attribute to include in the LDIF export");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_ATTRIBUTE,
-                    "Attribute to exclude from the LDIF export");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_INCLUDE_FILTER,
-                    "Filter to identify entries to include in the LDIF export");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_FILTER,
-                    "Filter to identify entries to exclude from the LDIF " +
-                    "export");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_OPERATIONAL,
-                    "Exclude operational attributes from the LDIF export");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_WRAP_COLUMN,
-                    "Column at which to wrap long lines (0 for no wrapping)");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_COMPRESS_LDIF,
-                    "Compress the LDIF data as it is exported");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_ENCRYPT_LDIF,
-                    "Encrypt the LDIF data as it is exported");
-    registerMessage(MSGID_LDIFEXPORT_DESCRIPTION_SIGN_HASH,
-                    "Generate a signed hash of the export data");
-    registerMessage(MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER,
-                    "An error occurred while attempting to initialize the " +
-                    "crypto manager:  %s");
-    registerMessage(MSGID_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS,
-                    "An error occurred while attempting to initialize the " +
-                    "LDIF export plugins:  %s");
-    registerMessage(MSGID_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER,
-                    "Unable to decode exclude filter string \"%s\" as a " +
-                    "valid search filter:  %s");
-    registerMessage(MSGID_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER,
-                    "Unable to decode include filter string \"%s\" as a " +
-                    "valid search filter:  %s");
-    registerMessage(MSGID_CANNOT_DECODE_BASE_DN,
-                    "Unable to decode base DN string \"%s\" as a valid " +
-                    "distinguished name:  %s");
-    registerMessage(MSGID_LDIFEXPORT_MULTIPLE_BACKENDS_FOR_ID,
-                    "Multiple Directory Server backends are configured with " +
-                    "the requested backend ID \"%s\"");
-    registerMessage(MSGID_LDIFEXPORT_NO_BACKENDS_FOR_ID,
-                    "None of the Directory Server backends are configured " +
-                    "with the requested backend ID \"%s\"");
-    registerMessage(MSGID_LDIFEXPORT_CANNOT_EXPORT_BACKEND,
-                    "The Directory Server backend with backend ID \"%s\" " +
-                    "does not provide a mechanism for performing LDIF " +
-                    "exports");
-    registerMessage(MSGID_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE,
-                    "Unable to decode exclude branch string \"%s\" as a " +
-                    "valid distinguished name:  %s");
-    registerMessage(MSGID_LDIFEXPORT_CANNOT_DECODE_WRAP_COLUMN_AS_INTEGER,
-                    "Unable to decode wrap column value \"%s\" as an " +
-                    "integer");
-    registerMessage(MSGID_LDIFEXPORT_CANNOT_LOCK_BACKEND,
-                    "An error occurred while attempting to acquire a shared " +
-                    "lock for backend %s:  %s.  This generally means that " +
-                    "some other process has an exclusive lock on this " +
-                    "backend (e.g., an LDIF import or a restore).  The LDIF " +
-                    "export cannot continue");
-    registerMessage(MSGID_LDIFEXPORT_ERROR_DURING_EXPORT,
-                    "An error occurred while attempting to process the LDIF " +
-                    "export:  %s");
-    registerMessage(MSGID_LDIFEXPORT_CANNOT_UNLOCK_BACKEND,
-                    "An error occurred while attempting to release the " +
-                    "shared lock for backend %s:  %s.  This lock should " +
-                    "automatically be cleared when the export process exits, " +
-                    "so no further action should be required");
-    registerMessage(MSGID_CANNOT_DECODE_BACKEND_BASE_DN,
-                    "Unable to decode the backend configuration base DN " +
-                    "string \"%s\" as a valid DN:  %s");
-    registerMessage(MSGID_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY,
-                    "Unable to retrieve the backend configuration base entry " +
-                    "\"%s\" from the server configuration:  %s");
-    registerMessage(MSGID_CANNOT_DETERMINE_BACKEND_CLASS,
-                    "Cannot determine the name of the Java class providing " +
-                    "the logic for the backend defined in configuration " +
-                    "entry %s:  %s");
-    registerMessage(MSGID_CANNOT_LOAD_BACKEND_CLASS,
-                    "Unable to load class %s referenced in configuration " +
-                    "entry %s for use as a Directory Server backend:  %s");
-    registerMessage(MSGID_CANNOT_INSTANTIATE_BACKEND_CLASS,
-                    "Unable to create an instance of class %s referenced in " +
-                    "configuration entry %s as a Directory Server backend:  " +
-                    "%s");
-    registerMessage(MSGID_NO_BASES_FOR_BACKEND,
-                    "No base DNs have been defined in backend configuration " +
-                    "entry %s.  This backend will not be evaluated");
-    registerMessage(MSGID_CANNOT_DETERMINE_BASES_FOR_BACKEND,
-                    "Unable to determine the set of base DNs defined in " +
-                    "backend configuration entry %s:  %s");
-    registerMessage(MSGID_CANNOT_DETERMINE_BACKEND_ID,
-                    "Cannot determine the backend ID for the backend defined " +
-                    "in configuration entry %s:  %s");
-    registerMessage(MSGID_LDIFEXPORT_CANNOT_DECODE_INCLUDE_BASE,
-                    "Unable to decode include branch string \"%s\" as a " +
-                    "valid distinguished name:  %s");
-    registerMessage(MSGID_LDIFEXPORT_INVALID_INCLUDE_BASE,
-                    "Provided include base DN \"%s\" is not handled by the " +
-                    "backend with backend ID %s");
-
-
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_LDIF_FILE,
-                    "Path to the LDIF file to be imported");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_TEMPLATE_FILE,
-                    "Path to a MakeLDIF template to use to generate the " +
-                    "import data");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_APPEND,
-                    "Append to an existing database rather than overwriting " +
-                    "it");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_REPLACE_EXISTING,
-                    "Replace existing entries when appending to the database");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_BACKEND_ID,
-                    "Backend ID for the backend to import");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_INCLUDE_BRANCH,
-                    "Base DN of a branch to include in the LDIF import");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_EXCLUDE_BRANCH,
-                    "Base DN of a branch to exclude from the LDIF import");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_INCLUDE_ATTRIBUTE,
-                    "Attribute to include in the LDIF import");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_EXCLUDE_ATTRIBUTE,
-                    "Attribute to exclude from the LDIF import");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_INCLUDE_FILTER,
-                    "Filter to identify entries to include in the LDIF import");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_EXCLUDE_FILTER,
-                    "Filter to identify entries to exclude from the LDIF " +
-                    "import");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_REJECT_FILE,
-                    "Write rejected entries to the specified file");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_SKIP_FILE,
-                    "Write skipped entries to the specified file");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE,
-                    "An error occurred while trying to open the skip " +
-                    "file %s for writing:  %s");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_OVERWRITE,
-                    "Overwrite an existing rejects and/or skip file " +
-                    "rather than appending to it");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_RANDOM_SEED,
-                    "Seed for the MakeLDIF random number generator");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_SKIP_SCHEMA_VALIDATION,
-                    "Skip schema validation during the LDIF import");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_COUNT_REJECTS,
-                    "Count the number of entries rejected by the server and " +
-                    "return that value as the exit code (values > 255 will " +
-                    "be reduced to 255 due to exit code restrictions)");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_IS_COMPRESSED,
-                    "LDIF file is compressed");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_IS_ENCRYPTED,
-                    "LDIF file is encrypted");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_QUIET,
-                    "Use quiet mode (no output)");
-    registerMessage(MSGID_LDIFIMPORT_CONFLICTING_OPTIONS,
-                    "The %s and %s arguments are incompatible and may not be " +
-                    "used together");
-    registerMessage(MSGID_LDIFIMPORT_MISSING_REQUIRED_ARGUMENT,
-                    "Neither the %s or the %s argument was provided.  One " +
-                    "of these arguments must be given to specify the source " +
-                    "for the LDIF data to be imported");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY,
-                    "An error occurred while attempting to initialize the " +
-                    "password policy components:  %s");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS,
-                    "An error occurred while attempting to initialize the " +
-                    "LDIF import plugins:  %s");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER,
-                    "Unable to decode exclude filter string \"%s\" as a " +
-                    "valid search filter:  %s");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER,
-                    "Unable to decode include filter string \"%s\" as a " +
-                    "valid search filter:  %s");
-    registerMessage(MSGID_LDIFIMPORT_MULTIPLE_BACKENDS_FOR_ID,
-                    "Imported branches or backend IDs can not span across " +
-                    "multiple Directory Server backends");
-    registerMessage(MSGID_LDIFIMPORT_NO_BACKENDS_FOR_ID,
-                    "None of the Directory Server backends are configured " +
-                    "with the requested backend ID or base DNs that include " +
-                    "the specified branches");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_IMPORT,
-                    "The Directory Server backend with backend ID %s does " +
-                    "not provide a mechanism for performing LDIF imports");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE,
-                    "Unable to decode exclude branch string \"%s\" as a " +
-                    "valid distinguished name:  %s");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE,
-                    "Unable to decode include branch string \"%s\" as a " +
-                    "valid distinguished name:  %s");
-    registerMessage(MSGID_LDIFIMPORT_INVALID_INCLUDE_BASE,
-                    "Provided include base DN \"%s\" is not handled by the " +
-                    "backend with backend ID %s");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_PARSE_TEMPLATE_FILE,
-                    "Unable to parse the specified file %s as a MakeLDIF " +
-                    "template file:  %s");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE,
-                    "An error occurred while trying to open the rejects " +
-                    "file %s for writing:  %s");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_LOCK_BACKEND,
-                    "An error occurred while attempting to acquire an " +
-                    "exclusive lock for backend %s:  %s.  This generally " +
-                    "means some other process is still using this backend " +
-                    "(e.g., it is in use by the Directory Server or a " +
-                    "backup or LDIF export is in progress.  The LDIF import " +
-                    "cannot continue");
-    registerMessage(MSGID_LDIFIMPORT_ERROR_DURING_IMPORT,
-                    "An error occurred while attempting to process the LDIF " +
-                    "import:  %s");
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_UNLOCK_BACKEND,
-                    "An error occurred while attempting to release the " +
-                    "exclusive lock for backend %s:  %s.  This lock should " +
-                    "automatically be cleared when the import process exits, " +
-                    "so no further action should be required");
-
-
-    registerMessage(MSGID_PROCESSING_OPERATION,
-                    "Processing %s request for %s");
-    registerMessage(MSGID_OPERATION_FAILED,
-                    "%s operation failed");
-    registerMessage(MSGID_OPERATION_SUCCESSFUL,
-                    "%s operation successful for DN %s");
-    registerMessage(MSGID_PROCESSING_COMPARE_OPERATION,
-                    "Comparing type %s with value %s in entry %s");
-    registerMessage(MSGID_COMPARE_OPERATION_RESULT_FALSE,
-                    "Compare operation returned false for entry %s");
-    registerMessage(MSGID_COMPARE_OPERATION_RESULT_TRUE,
-                    "Compare operation returned true for entry %s");
-    registerMessage(MSGID_SEARCH_OPERATION_INVALID_PROTOCOL,
-                    "Invalid operation type returned in search result %s");
-    registerMessage(MSGID_DESCRIPTION_TRUSTALL,
-                    "Trust all server SSL certificates");
-    registerMessage(MSGID_DESCRIPTION_BINDDN,
-                    "Specifies the DN to use to bind to the server");
-    registerMessage(MSGID_DESCRIPTION_BINDPASSWORD,
-                    "Specifies the password to use to bind to the server");
-    registerMessage(MSGID_DESCRIPTION_BINDPASSWORDFILE,
-                    "Bind password file");
-    registerMessage(MSGID_DESCRIPTION_PROXY_AUTHZID,
-                    "Use the proxied authorization control with the given " +
-                    "authorization ID");
-    registerMessage(MSGID_DESCRIPTION_PSEARCH_INFO,
-                    "Use the persistent search control");
-    registerMessage(MSGID_DESCRIPTION_SIMPLE_PAGE_SIZE,
-                    "Use the simple paged results control with the given " +
-                    "page size");
-    registerMessage(MSGID_DESCRIPTION_REPORT_AUTHZID,
-                    "Use the authorization identity control");
-    registerMessage(MSGID_DESCRIPTION_USE_PWP_CONTROL,
-                    "Use the password policy request control");
-    registerMessage(MSGID_BIND_AUTHZID_RETURNED,
-                    "# Bound with authorization ID %s");
-    registerMessage(MSGID_BIND_PASSWORD_EXPIRED,
-                    "# Your password has expired");
-    registerMessage(MSGID_BIND_PASSWORD_EXPIRING,
-                    "# Your password will expire in %s");
-    registerMessage(MSGID_BIND_ACCOUNT_LOCKED,
-                    "# Your account has been locked");
-    registerMessage(MSGID_BIND_MUST_CHANGE_PASSWORD,
-                    "# You must change your password before any other " +
-                    "operations will be allowed");
-    registerMessage(MSGID_BIND_GRACE_LOGINS_REMAINING,
-                    "# You have %d grace logins remaining");
-    registerMessage(MSGID_DESCRIPTION_VERBOSE,
-                    "Use verbose mode");
-    registerMessage(MSGID_DESCRIPTION_QUIET,
-                    "Use quiet mode");
-    registerMessage(MSGID_DESCRIPTION_INTERACTIVE,
-                    "Use interactive mode");
-    registerMessage(MSGID_DESCRIPTION_SCRIPT_FRIENDLY,
-                    "Use script-friendly mode");
-    registerMessage(MSGID_DESCRIPTION_KEYSTOREPATH,
-                    "Certificate keystore path");
-    registerMessage(MSGID_DESCRIPTION_TRUSTSTOREPATH,
-                    "Certificate trust store path");
-    registerMessage(MSGID_DESCRIPTION_KEYSTOREPASSWORD,
-                    "Certificate keystore PIN");
-    registerMessage(MSGID_DESCRIPTION_KEYSTOREPASSWORD_FILE,
-                    "Certificate keystore PIN file");
-    registerMessage(MSGID_DESCRIPTION_CERT_NICKNAME,
-                    "Nickname of certificate for SSL client authentication");
-    registerMessage(MSGID_DESCRIPTION_TRUSTSTOREPASSWORD,
-                    "Certificate trust store PIN");
-    registerMessage(MSGID_DESCRIPTION_TRUSTSTOREPASSWORD_FILE,
-                    "Certificate trust store PIN file");
-    registerMessage(MSGID_DESCRIPTION_HOST,
-                    "Directory server hostname or IP address");
-    registerMessage(MSGID_DESCRIPTION_PORT,
-                    "Directory server port number");
-    registerMessage(MSGID_DESCRIPTION_VERSION,
-                    "LDAP protocol version number");
-    registerMessage(MSGID_DESCRIPTION_SHOWUSAGE,
-                    "Display this usage information");
-    registerMessage(MSGID_DESCRIPTION_CONTROLS,
-                    "Use a request control with the provided information");
-    registerMessage(MSGID_DESCRIPTION_CONTINUE_ON_ERROR,
-                    "Continue processing even if there are errors");
-    registerMessage(MSGID_DESCRIPTION_USE_SSL,
-                    "Use SSL for secure communication with the server");
-    registerMessage(MSGID_DESCRIPTION_START_TLS,
-                    "Use StartTLS to secure communication with the server");
-    registerMessage(MSGID_DESCRIPTION_USE_SASL_EXTERNAL,
-                    "Use the SASL EXTERNAL authentication mechanism");
-    registerMessage(MSGID_DESCRIPTION_ENCODING,
-                    "Use the specified character set for command-line input");
-    registerMessage(MSGID_DELETE_DESCRIPTION_FILENAME,
-                    "File containing the DNs of the entries to delete");
-    registerMessage(MSGID_SEARCH_DESCRIPTION_FILENAME,
-                    "File containing a list of search filter strings");
-    registerMessage(MSGID_COMPARE_DESCRIPTION_FILENAME,
-                    "File containing the DNs of the entries to compare");
-    registerMessage(MSGID_DELETE_DESCRIPTION_DELETE_SUBTREE,
-                    "Delete the specified entry and all entries below it");
-    registerMessage(MSGID_MODIFY_DESCRIPTION_DEFAULT_ADD,
-                    "Treat records with no changetype as add operations");
-    registerMessage(MSGID_DESCRIPTION_ASSERTION_FILTER,
-                    "Use the LDAP assertion control with the provided filter");
-    registerMessage(MSGID_DESCRIPTION_PREREAD_ATTRS,
-                    "Use the LDAP ReadEntry pre-read control");
-    registerMessage(MSGID_DESCRIPTION_POSTREAD_ATTRS,
-                    "Use the LDAP ReadEntry post-read control");
-    registerMessage(MSGID_DESCRIPTION_MATCHED_VALUES_FILTER,
-                    "Use the LDAP matched values control with the provided " +
-                    "filter");
-    registerMessage(MSGID_DESCRIPTION_SORT_ORDER,
-                    "Sort the results using the provided sort order");
-    registerMessage(MSGID_DESCRIPTION_VLV,
-                    "Use the virtual list view control to retrieve the " +
-                    "specified results page");
-    registerMessage(MSGID_COMPARE_CANNOT_BASE64_DECODE_ASSERTION_VALUE,
-                    "The assertion value was indicated to be base64-encoded, " +
-                    "but an error occurred while trying to decode the value");
-    registerMessage(MSGID_COMPARE_CANNOT_READ_ASSERTION_VALUE_FROM_FILE,
-                    "Unable to read the assertion value from the specified " +
-                    "file:  %s");
-    registerMessage(MSGID_SEARCH_DESCRIPTION_BASEDN,
-                    "Search base DN");
-    registerMessage(MSGID_SEARCH_DESCRIPTION_SIZE_LIMIT,
-                    "Maximum number of entries to return from the search");
-    registerMessage(MSGID_SEARCH_DESCRIPTION_TIME_LIMIT,
-                    "Maximum length of time in seconds to allow for the " +
-                    "search");
-    registerMessage(MSGID_SEARCH_DESCRIPTION_SEARCH_SCOPE,
-                    "Search scope ('base', 'one', 'sub', or 'subordinate')");
-    registerMessage(MSGID_SEARCH_DESCRIPTION_DEREFERENCE_POLICY,
-                    "Alias dereference policy ('never', 'always', 'search', " +
-                    "or 'find')");
-
-
-    registerMessage(MSGID_LDAPAUTH_CANNOT_SEND_SIMPLE_BIND,
-                    "Cannot send the simple bind request:  %s");
-    registerMessage(MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE,
-                    "The connection to the Directory Server was closed " +
-                    "before the bind response could be read");
-    registerMessage(MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE,
-                    "Cannot read the bind response from the server:  " +
-                    "%s");
-    registerMessage(MSGID_LDAPAUTH_SERVER_DISCONNECT,
-                    "The Directory Server indicated that it was closing the " +
-                    "connection to the client (result code %d, message " +
-                    "\"%s\"");
-    registerMessage(MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE,
-                    "The Directory Server sent an unexpected extended " +
-                    "response message to the client:  %s");
-    registerMessage(MSGID_LDAPAUTH_UNEXPECTED_RESPONSE,
-                    "The Directory Server sent an unexpected response " +
-                    "message to the client:  %s");
-    registerMessage(MSGID_LDAPAUTH_SIMPLE_BIND_FAILED,
-                    "The simple bind attempt failed");
-    registerMessage(MSGID_LDAPAUTH_NO_SASL_MECHANISM,
-                    "A SASL bind was requested but no SASL mechanism was " +
-                    "specified");
-    registerMessage(MSGID_LDAPAUTH_UNSUPPORTED_SASL_MECHANISM,
-                    "The requested SASL mechanism \"%s\" is not supported " +
-                    "by this client");
-    registerMessage(MSGID_LDAPAUTH_TRACE_SINGLE_VALUED,
-                    "The " + SASL_PROPERTY_TRACE + " SASL property may only " +
-                    "be given a single value");
-    registerMessage(MSGID_LDAPAUTH_INVALID_SASL_PROPERTY,
-                    "Property \"%s\" is not allowed for the %s SASL " +
-                    "mechanism");
-    registerMessage(MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND,
-                    "Cannot send the SASL %S bind request:  %s");
-    registerMessage(MSGID_LDAPAUTH_SASL_BIND_FAILED,
-                    "The SASL %s bind attempt failed");
-    registerMessage(MSGID_LDAPAUTH_NO_SASL_PROPERTIES,
-                    "No SASL properties were provided for use with the %s " +
-                    "mechanism");
-    registerMessage(MSGID_LDAPAUTH_AUTHID_SINGLE_VALUED,
-                    "The \"" + SASL_PROPERTY_AUTHID + "\" SASL property only " +
-                    "accepts a single value");
-    registerMessage(MSGID_LDAPAUTH_SASL_AUTHID_REQUIRED,
-                    "The \"" + SASL_PROPERTY_AUTHID + "\" SASL property is " +
-                    "required for use with the %s mechanism");
-    registerMessage(MSGID_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND,
-                    "Cannot send the initial bind request in the multi-stage " +
-                    "%s bind to the server:  %s");
-    registerMessage(MSGID_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE,
-                    "Cannot read the initial %s bind response from the " +
-                    "server:  %s");
-    registerMessage(MSGID_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE,
-                    "The client received an unexpected intermediate bind " +
-                    "response.  The \"SASL bind in progress\" result was " +
-                    "expected for the first response in the multi-stage %s " +
-                    "bind process, but the bind response had a result code " +
-                    "of %d (%s) and an error message of \"%s\"");
-    registerMessage(MSGID_LDAPAUTH_NO_CRAMMD5_SERVER_CREDENTIALS,
-                    "The initial bind response from the server did not " +
-                    "include any server SASL credentials containing the " +
-                    "challenge information needed to complete the CRAM-MD5 " +
-                    "authentication");
-    registerMessage(MSGID_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST,
-                    "An unexpected error occurred while trying to initialize " +
-                    "the MD5 digest generator:  %s");
-    registerMessage(MSGID_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND,
-                    "Cannot send the second bind request in the multi-stage " +
-                    "%s bind to the server:  %s");
-    registerMessage(MSGID_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE,
-                    "Cannot read the second %s bind response from the " +
-                    "server:  %s");
-    registerMessage(MSGID_LDAPAUTH_NO_ALLOWED_SASL_PROPERTIES,
-                    "One or more SASL properties were provided, but the %s " +
-                    "mechanism does not take any SASL properties");
-    registerMessage(MSGID_LDAPAUTH_AUTHZID_SINGLE_VALUED,
-                    "The \"" + SASL_PROPERTY_AUTHZID + "\" SASL property " +
-                    "only accepts a single value");
-    registerMessage(MSGID_LDAPAUTH_REALM_SINGLE_VALUED,
-                    "The \"" + SASL_PROPERTY_REALM + "\" SASL property only " +
-                    "accepts a single value");
-    registerMessage(MSGID_LDAPAUTH_QOP_SINGLE_VALUED,
-                    "The \"" + SASL_PROPERTY_QOP + "\" SASL property only " +
-                    "accepts a single value");
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_QOP_NOT_SUPPORTED,
-                    "The \"%s\" QoP mode is not supported by this client.  " +
-                    "Only the \"auth\" mode is currently available for use");
-    // FIXME -- Update this message when auth-int and auth-conf are supported.
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_INVALID_QOP,
-                    "The specified DIGEST-MD5 quality of protection mode " +
-                    "\"%s\" is not valid.  The only QoP mode currently " +
-                    "supported is \"auth\"");
-    registerMessage(MSGID_LDAPAUTH_DIGEST_URI_SINGLE_VALUED,
-                    "The \"" + SASL_PROPERTY_DIGEST_URI + "\" SASL property " +
-                    "only accepts a single value");
-    registerMessage(MSGID_LDAPAUTH_NO_DIGESTMD5_SERVER_CREDENTIALS,
-                    "The initial bind response from the server did not " +
-                    "include any server SASL credentials containing the " +
-                    "challenge information needed to complete the " +
-                    "DIGEST-MD5 authentication");
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS,
-                    "The DIGEST-MD5 credentials provided by the server " +
-                    "contained an invalid token of \"%s\" starting at " +
-                    "position %d");
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_INVALID_CHARSET,
-                    "The DIGEST-MD5 credentials provided by the server " +
-                    "specified the use of the \"%s\" character set.  The " +
-                    "character set that may be specified in the DIGEST-MD5 " +
-                    "credentials is \"utf-8\"");
-    registerMessage(MSGID_LDAPAUTH_REQUESTED_QOP_NOT_SUPPORTED_BY_SERVER,
-                    "The requested QoP mode of \"%s\" is not listed as " +
-                    "supported by the Directory Server.  The Directory " +
-                    "Server's list of supported QoP modes is:  \"%s\"");
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_NO_NONCE,
-                    "The server SASL credentials provided in response to the " +
-                    "initial DIGEST-MD5 bind request did not include the " +
-                    "nonce to use to generate the authentication digests");
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_CANNOT_CREATE_RESPONSE_DIGEST,
-                    "An error occurred while attempting to generate the " +
-                    "response digest for the DIGEST-MD5 bind request:  %s");
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS,
-                    "The DIGEST-MD5 bind response from the server did not " +
-                    "include the \"rspauth\" element to provide a digest of " +
-                    "the response authentication information");
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_COULD_NOT_DECODE_RSPAUTH,
-                    "An error occurred while trying to decode the rspauth " +
-                    "element of the DIGEST-MD5 bind response from the server " +
-                    "as a hexadecimal string:  %s");
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_COULD_NOT_CALCULATE_RSPAUTH,
-                    "An error occurred while trying to calculate the " +
-                    "expected rspauth element to compare against the value " +
-                    "included in the DIGEST-MD5 response from the server:  " +
-                    "%s");
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_RSPAUTH_MISMATCH,
-                    "The rpsauth element included in the DIGEST-MD5 bind " +
-                    "response from the Directory Server was different from " +
-                    "the expected value calculated by the client");
-    registerMessage(MSGID_LDAPAUTH_DIGESTMD5_INVALID_CLOSING_QUOTE_POS,
-                    "The DIGEST-MD5 response challenge could not be parsed " +
-                    "because it had an invalid quotation mark at position %d");
-    registerMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_TRACE,
-                    "Specifies a text string that may be written to the " +
-                    "Directory Server error log as trace information for " +
-                    "the bind");
-    registerMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID,
-                    "Specifies the authentication ID for the bind");
-    registerMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_REALM,
-                    "Specifies the realm into which the authentication is to " +
-                    "be performed");
-    registerMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_QOP,
-                    "Specifies the quality of protection to use for the bind");
-    registerMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_DIGEST_URI,
-                    "Specifies the digest URI to use for the bind");
-    registerMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHZID,
-                    "Specifies the authorization ID to use for the bind");
-    registerMessage(MSGID_DESCRIPTION_SASL_PROPERTIES,
-                    "SASL bind options");
-    registerMessage(MSGID_DESCRIPTION_DONT_WRAP,
-                    "Do not wrap long lines");
-    registerMessage(MSGID_DESCRIPTION_COUNT_ENTRIES,
-                    "Count the number of entries returned by the server");
-    registerMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_KDC,
-                    "Specifies the KDC to use for the Kerberos " +
-                    "authentication");
-    registerMessage(MSGID_LDAPAUTH_KDC_SINGLE_VALUED,
-                    "The \"" + SASL_PROPERTY_KDC + "\" SASL property only " +
-                    "accepts a single value");
-    // FIXME -- Update this message when auth-int and auth-conf are supported.
-    registerMessage(MSGID_LDAPAUTH_GSSAPI_INVALID_QOP,
-                    "The specified GSSAPI quality of protection mode \"%s\" " +
-                    "is not valid.  The only QoP mode currently supported is " +
-                    "\"auth\"");
-    registerMessage(MSGID_LDAPAUTH_GSSAPI_CANNOT_CREATE_JAAS_CONFIG,
-                    "An error occurred while trying to create the " +
-                    "temporary JAAS configuration for GSSAPI " +
-                    "authentication:  %s");
-    registerMessage(MSGID_LDAPAUTH_GSSAPI_LOCAL_AUTHENTICATION_FAILED,
-                    "An error occurred while attempting to perform local " +
-                    "authentication to the Kerberos realm:  %s");
-    registerMessage(MSGID_LDAPAUTH_GSSAPI_REMOTE_AUTHENTICATION_FAILED,
-                    "An error occurred while attempting to perform GSSAPI " +
-                    "authentication to the Directory Server:  %s");
-    registerMessage(MSGID_LDAPAUTH_NONSASL_RUN_INVOCATION,
-                    "The LDAPAuthenticationHandler.run() method was called " +
-                    "for a non-SASL bind.  The backtrace for this call is %s");
-    registerMessage(MSGID_LDAPAUTH_UNEXPECTED_RUN_INVOCATION,
-                    "The LDAPAuthenticationHandler.run() method was called " +
-                    "for a SASL bind with an unexpected mechanism of " +
-                    "\"%s\".  The backtrace for this call is %s");
-    registerMessage(MSGID_LDAPAUTH_GSSAPI_CANNOT_CREATE_SASL_CLIENT,
-                    "An error occurred while attempting to create a SASL " +
-                    "client to process the GSSAPI authentication:  %s");
-    registerMessage(MSGID_LDAPAUTH_GSSAPI_CANNOT_CREATE_INITIAL_CHALLENGE,
-                    "An error occurred while attempting to create the " +
-                    "initial challenge for GSSAPI authentication:  %s");
-    registerMessage(MSGID_LDAPAUTH_GSSAPI_CANNOT_VALIDATE_SERVER_CREDS,
-                    "An error occurred while trying to validate the SASL " +
-                    "credentials provided by the Directory Server in the " +
-                    "GSSAPI bind response:  %s");
-    registerMessage(MSGID_LDAPAUTH_GSSAPI_UNEXPECTED_SUCCESS_RESPONSE,
-                    "The Directory Server unexpectedly returned a success " +
-                    "response to the client even though the client does not " +
-                    "believe that the GSSAPI negotiation is complete");
-    registerMessage(MSGID_LDAPAUTH_GSSAPI_BIND_FAILED,
-                    "The GSSAPI bind attempt failed");
-    registerMessage(MSGID_LDAPAUTH_NONSASL_CALLBACK_INVOCATION,
-                    "The LDAPAuthenticationHandler.handle() method was " +
-                    "called for a non-SASL bind.  The backtrace for this " +
-                    "call is %s");
-    registerMessage(MSGID_LDAPAUTH_UNEXPECTED_GSSAPI_CALLBACK,
-                    "The LDAPAuthenticationHandler.handle() method was " +
-                    "called during a GSSAPI bind attempt with an unexpected " +
-                    "callback type of %s");
-    registerMessage(MSGID_LDAPAUTH_UNEXPECTED_CALLBACK_INVOCATION,
-                    "The LDAPAuthenticationHandler.handle() method was " +
-                    "called for an unexpected SASL mechanism of %s.  The " +
-                    "backtrace for this call is %s");
-    registerMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT,
-                    "Password for user '%s':  ");
-    registerMessage(MSGID_LDAPAUTH_CANNOT_SEND_WHOAMI_REQUEST,
-                    "Cannot send the 'Who Am I?' request to the Directory " +
-                    "Server:  %s");
-    registerMessage(MSGID_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE,
-                    "Cannot read the 'Who Am I?' response from the Directory " +
-                    "Server:  %s");
-    registerMessage(MSGID_LDAPAUTH_WHOAMI_FAILED,
-                    "The 'Who Am I?' request was rejected by the Directory " +
-                    "Server");
-
-
-    registerMessage(MSGID_DESCRIPTION_INVALID_VERSION,
-                    "Invalid LDAP version number '%s'. Allowed values are " +
-                    "2 and 3");
-    registerMessage(MSGID_SEARCH_INVALID_SEARCH_SCOPE,
-                    "Invalid scope %s specified for the search request");
-    registerMessage(MSGID_SEARCH_NO_FILTERS,
-                    "No filters specified for the search request");
-    registerMessage(MSGID_PAGED_RESULTS_REQUIRES_SINGLE_FILTER,
-                    "The simple paged results control may only be used with " +
-                    "a single search filter");
-    registerMessage(MSGID_PAGED_RESULTS_CANNOT_DECODE,
-                    "Unable to decode the simple paged results control from " +
-                    "the search response:  %s");
-    registerMessage(MSGID_PAGED_RESULTS_RESPONSE_NOT_FOUND,
-                    "The simple paged results response control was not found " +
-                    "in the search result done message from the server");
-    registerMessage(MSGID_PSEARCH_MISSING_DESCRIPTOR,
-                    "The request to use the persistent search control did " +
-                    "not include a descriptor that indicates the options to " +
-                    "use with that control");
-    registerMessage(MSGID_PSEARCH_DOESNT_START_WITH_PS,
-                    "The persistent search descriptor %s did not start with " +
-                    "the required 'ps' string");
-    registerMessage(MSGID_PSEARCH_INVALID_CHANGE_TYPE,
-                    "The provided change type value %s is invalid.  The " +
-                    "recognized change types are add, delete, modify, " +
-                    "modifydn, and any");
-    registerMessage(MSGID_PSEARCH_INVALID_CHANGESONLY,
-                    "The provided changesOnly value %s is invalid.  Allowed " +
-                    "values are 1 to only return matching entries that have " +
-                    "changed since the beginning of the search, or 0 to also " +
-                    "include existing entries that match the search criteria");
-    registerMessage(MSGID_PSEARCH_INVALID_RETURN_ECS,
-                    "The provided returnECs value %s is invalid.  Allowed " +
-                    "values are 1 to request that the entry change " +
-                    "notification control be included in updated entries, or " +
-                    "0 to exclude the control from matching entries");
-    registerMessage(MSGID_LDAP_ASSERTION_INVALID_FILTER,
-                    "The search filter provided for the LDAP assertion " +
-                    "control was invalid:  %s");
-    registerMessage(MSGID_LDAP_MATCHEDVALUES_INVALID_FILTER,
-                    "The provided matched values filter was invalid:  %s");
-    registerMessage(MSGID_LDAP_SORTCONTROL_INVALID_ORDER,
-                    "The provided sort order was invalid:  %s");
-    registerMessage(MSGID_LDAPSEARCH_VLV_REQUIRES_SORT,
-                    "If the --%s argument is provided, then the --%s " +
-                    "argument must also be given");
-    registerMessage(MSGID_LDAPSEARCH_VLV_INVALID_DESCRIPTOR,
-                    "The provided virtual list view descriptor was invalid.  " +
-                    "It must be a value in the form " +
-                    "'beforeCount:afterCount:offset:contentCount' (where " +
-                    "offset specifies the index of the target entry and " +
-                    "contentCount specifies the estimated total number of " +
-                    "results or zero if it is not known), or " +
-                    "'beforeCount:afterCount:assertionValue' (where the " +
-                    "entry should be the first entry whose primary sort " +
-                    "value is greater than or equal to the provided " +
-                    "assertionValue).  In either case, beforeCount is the " +
-                    "number of entries to return before the target value and " +
-                    "afterCount is the number of entries to return after " +
-                    "the target value");
-    registerMessage(MSGID_LDAPMODIFY_PREREAD_NO_VALUE,
-                    "The pre-read response control did not include a value");
-    registerMessage(MSGID_LDAPMODIFY_PREREAD_CANNOT_DECODE_VALUE,
-                    "An error occurred while trying to decode the entry " +
-                    "contained in the value of the pre-read response " +
-                    "control:  %s");
-    registerMessage(MSGID_LDAPMODIFY_PREREAD_ENTRY,
-                    "Target entry before the operation:");
-    registerMessage(MSGID_LDAPMODIFY_POSTREAD_NO_VALUE,
-                    "The post-read response control did not include a value");
-    registerMessage(MSGID_LDAPMODIFY_POSTREAD_CANNOT_DECODE_VALUE,
-                    "An error occurred while trying to decode the entry " +
-                    "contained in the value of the post-read response " +
-                    "control:  %s");
-    registerMessage(MSGID_LDAPMODIFY_POSTREAD_ENTRY,
-                    "Target entry after the operation:");
-    registerMessage(MSGID_LDAPMODIFY_DESCRIPTION_FILENAME,
-                    "Specifies the LDIF file containing the changes to apply");
-
-
-
-    registerMessage(MSGID_VERIFYINDEX_DESCRIPTION_BASE_DN,
-                    "Specifies the base DN of a backend supporting indexing. " +
-                    "Verification is performed on indexes within the scope " +
-                    "of the given base DN");
-    registerMessage(MSGID_VERIFYINDEX_DESCRIPTION_INDEX_NAME,
-                    "Specifies the name of an index to be verified. For an " +
-                    "attribute index this is simply an attribute name.  " +
-                    "Multiple indexes may be verified for completeness, or " +
-                    "all indexes if no indexes are specified.  An index is " +
-                    "complete if each index value references all entries " +
-                    "containing that value");
-    registerMessage(MSGID_VERIFYINDEX_DESCRIPTION_VERIFY_CLEAN,
-                    "Specifies that a single index should be verified to " +
-                    "ensure it is clean.  An index is clean if each index " +
-                    "value references only entries containing that value.  " +
-                    "Only one index at a time may be verified in this way");
-    registerMessage(MSGID_VERIFYINDEX_ERROR_DURING_VERIFY,
-                    "An error occurred while attempting to perform index " +
-                    "verification:  %s");
-    registerMessage(MSGID_VERIFYINDEX_VERIFY_CLEAN_REQUIRES_SINGLE_INDEX,
-                    "Only one index at a time may be verified for " +
-                    "cleanliness");
-    registerMessage(MSGID_BACKEND_NO_INDEXING_SUPPORT,
-                    "The backend does not support indexing");
-    registerMessage(MSGID_VERIFYINDEX_CANNOT_LOCK_BACKEND,
-                    "An error occurred while attempting to acquire a shared " +
-                    "lock for backend %s:  %s.  This generally means that " +
-                    "some other process has an exclusive lock on this " +
-                    "backend (e.g., an LDIF import or a restore).  The " +
-                    "index verification cannot continue");
-    registerMessage(MSGID_VERIFYINDEX_CANNOT_UNLOCK_BACKEND,
-                    "An error occurred while attempting to release the " +
-                    "shared lock for backend %s:  %s.  This lock should " +
-                    "automatically be cleared when the verification process " +
-                    "exits, so no further action should be required");
-    registerMessage(MSGID_VERIFYINDEX_DESCRIPTION_COUNT_ERRORS,
-                    "Count the number of errors found during the verification "+
-                    "and return that value as the exit code (values > 255 " +
-                    "will be reduced to 255 due to exit code restrictions)");
-    registerMessage(MSGID_MULTIPLE_BACKENDS_FOR_BASE,
-                    "Multiple Directory Server backends are configured to " +
-                    "support base DN \"%s\"");
-    registerMessage(MSGID_NO_BACKENDS_FOR_BASE,
-                    "None of the Directory Server backends are configured " +
-                    "to support the requested base DN \"%s\"");
-
-    registerMessage(MSGID_REBUILDINDEX_TOOL_DESCRIPTION,
-                    "This utility may be used to rebuild index data within " +
-                    "a backend based on the Berkeley DB Java Edition");
-    registerMessage(MSGID_REBUILDINDEX_DESCRIPTION_BASE_DN,
-                    "Specifies the base DN of a backend supporting indexing. " +
-                    "Rebuild is performed on indexes within the scope " +
-                    "of the given base DN");
-    registerMessage(MSGID_REBUILDINDEX_DESCRIPTION_INDEX_NAME,
-                    "Specifies the names of index(es) to rebuild. For an " +
-                    "attribute index this is simply an attribute name.  " +
-                    "At least one index must be specified for rebuild");
-    registerMessage(MSGID_REBUILDINDEX_ERROR_DURING_REBUILD,
-                    "An error occurred while attempting to perform index " +
-                    "rebuild:  %s");
-    registerMessage(MSGID_REBUILDINDEX_WRONG_BACKEND_TYPE,
-                    "The backend does not support rebuilding of indexes");
-    registerMessage(MSGID_REBUILDINDEX_REQUIRES_AT_LEAST_ONE_INDEX,
-                    "At least one index must be spcified for the rebuild " +
-                    "process");
-
-    registerMessage(MSGID_BACKUPDB_DESCRIPTION_BACKEND_ID,
-                    "Backend ID for the backend to archive");
-    registerMessage(MSGID_BACKUPDB_DESCRIPTION_BACKUP_ALL,
-                    "Back up all backends in the server");
-    registerMessage(MSGID_BACKUPDB_DESCRIPTION_BACKUP_ID,
-                    "Use the provided identifier for the backup");
-    registerMessage(MSGID_BACKUPDB_DESCRIPTION_BACKUP_DIR,
-                    "Path to the target directory for the backup file(s)");
-    registerMessage(MSGID_BACKUPDB_DESCRIPTION_INCREMENTAL,
-                    "Perform an incremental backup rather than a full backup");
-    registerMessage(MSGID_BACKUPDB_DESCRIPTION_INCREMENTAL_BASE_ID,
-                    "Backup ID of the source archive for an incremental " +
-                    "backup");
-    registerMessage(MSGID_BACKUPDB_DESCRIPTION_COMPRESS,
-                    "Compress the backup contents");
-    registerMessage(MSGID_BACKUPDB_DESCRIPTION_ENCRYPT,
-                    "Encrypt the backup contents");
-    registerMessage(MSGID_BACKUPDB_DESCRIPTION_HASH,
-                    "Generate a hash of the backup contents");
-    registerMessage(MSGID_BACKUPDB_DESCRIPTION_SIGN_HASH,
-                    "Sign the hash of the backup contents");
-    registerMessage(MSGID_BACKUPDB_MULTIPLE_BACKENDS_FOR_ID,
-                    "Multiple Directory Server backends are configured with " +
-                    "the requested backend ID \"%s\"");
-    registerMessage(MSGID_BACKUPDB_NO_BACKENDS_FOR_ID,
-                    "None of the Directory Server backends are configured " +
-                    "with the requested backend ID \"%s\"");
-    registerMessage(MSGID_BACKUPDB_CONFIG_ENTRY_MISMATCH,
-                    "The configuration for the backend with backend ID %s is " +
-                    "held in entry \"%s\", but other backups in the target " +
-                    "backup directory %s were generated from a backend whose " +
-                    "configuration was held in configuration entry \"%s\"");
-    registerMessage(MSGID_BACKUPDB_INVALID_BACKUP_DIR,
-                    "An error occurred while attempting to use the specified " +
-                    "path \"%s\" as the target directory for the backup:  %s");
-    registerMessage(MSGID_BACKUPDB_CANNOT_BACKUP,
-                    "The target backend %s cannot be backed up using the " +
-                    "requested configuration:  %s");
-    registerMessage(MSGID_BACKUPDB_ERROR_DURING_BACKUP,
-                    "An error occurred while attempting to back up backend " +
-                    "%s with the requested configuration:  %s");
-    registerMessage(MSGID_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID,
-                    "The %s and %s arguments may not be used together.  " +
-                    "Exactly one of them must be provided");
-    registerMessage(MSGID_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID,
-                    "Neither the %s argument nor the %s argument was " +
-                    "provided.  Exactly one of them is required");
-    registerMessage(MSGID_BACKUPDB_CANNOT_CREATE_BACKUP_DIR,
-                    "An error occurred while attempting to create the backup " +
-                    "directory %s:  %s");
-    registerMessage(MSGID_BACKUPDB_BACKUP_NOT_SUPPORTED,
-                    "Backend ID %s was included in the set of backends to " +
-                    "archive, but this backend does not provide support for " +
-                    "a backup mechanism.  It will be skipped");
-    registerMessage(MSGID_BACKUPDB_NO_BACKENDS_TO_ARCHIVE,
-                    "None of the target backends provide a backup " +
-                    "mechanism.  The backup operation has been aborted");
-    registerMessage(MSGID_BACKUPDB_CANNOT_LOCK_BACKEND,
-                    "An error occurred while attempting to acquire a shared " +
-                    "lock for backend %s:  %s.  This generally means that " +
-                    "some other process has exclusive access to this " +
-                    "backend (e.g., a restore or an LDIF import).  This " +
-                    "backend will not be archived");
-    registerMessage(MSGID_BACKUPDB_STARTING_BACKUP,
-                    "Starting backup for backend %s");
-    registerMessage(MSGID_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR,
-                    "An error occurred while attempting to parse the backup " +
-                    "descriptor file %s:  %s");
-    registerMessage(MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND,
-                    "An error occurred while attempting to release the " +
-                    "shared lock for backend %s:  %s.  This lock should " +
-                    "automatically be cleared when the backup process exits, " +
-                    "so no further action should be required");
-    registerMessage(MSGID_BACKUPDB_COMPLETED_WITH_ERRORS,
-                    "The backup process completed with one or more errors");
-    registerMessage(MSGID_BACKUPDB_COMPLETED_SUCCESSFULLY,
-                    "The backup process completed successfully");
-    registerMessage(MSGID_BACKUPDB_INCREMENTAL_BASE_REQUIRES_INCREMENTAL,
-                    "The use of the %s argument requires that the %s " +
-                    "argument is also provided");
-    registerMessage(MSGID_BACKUPDB_SIGN_REQUIRES_HASH,
-                    "The use of the %s argument requires that the %s " +
-                    "argument is also provided");
-
-
-    registerMessage(MSGID_RESTOREDB_DESCRIPTION_BACKEND_ID,
-                    "Backend ID for the backend to restore");
-    registerMessage(MSGID_RESTOREDB_DESCRIPTION_BACKUP_ID,
-                    "Backup ID of the backup to restore");
-    registerMessage(MSGID_RESTOREDB_DESCRIPTION_BACKUP_DIR,
-                    "Path to the directory containing the backup file(s)");
-    registerMessage(MSGID_RESTOREDB_DESCRIPTION_LIST_BACKUPS,
-                    "List available backups in the backup directory");
-    registerMessage(MSGID_RESTOREDB_DESCRIPTION_VERIFY_ONLY,
-                    "Verify the contents of the backup but do not restore it");
-    registerMessage(MSGID_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY,
-                    "An error occurred while attempting to examine the " +
-                    "set of backups contained in backup directory %s:  %s");
-    registerMessage(MSGID_RESTOREDB_LIST_BACKUP_ID,
-                    "Backup ID:          %s");
-    registerMessage(MSGID_RESTOREDB_LIST_BACKUP_DATE,
-                    "Backup Date:        %s");
-    registerMessage(MSGID_RESTOREDB_LIST_INCREMENTAL,
-                    "Is Incremental:     %s");
-    registerMessage(MSGID_RESTOREDB_LIST_COMPRESSED,
-                    "Is Compressed:      %s");
-    registerMessage(MSGID_RESTOREDB_LIST_ENCRYPTED,
-                    "Is Encrypted:       %s");
-    registerMessage(MSGID_RESTOREDB_LIST_HASHED,
-                    "Has Unsigned Hash:  %s");
-    registerMessage(MSGID_RESTOREDB_LIST_SIGNED,
-                    "Has Signed Hash:    %s");
-    registerMessage(MSGID_RESTOREDB_LIST_DEPENDENCIES,
-                    "Dependent Upon:     %s");
-    registerMessage(MSGID_RESTOREDB_INVALID_BACKUP_ID,
-                    "The requested backup ID %s does not exist in %s");
-    registerMessage(MSGID_RESTOREDB_NO_BACKUPS_IN_DIRECTORY,
-                    "There are no Directory Server backups contained in " +
-                    "%s");
-    registerMessage(MSGID_RESTOREDB_NO_BACKENDS_FOR_DN,
-                    "The backups contained in directory %s were taken from " +
-                    "a Directory Server backend defined in configuration " +
-                    "entry %s but no such backend is available");
-    registerMessage(MSGID_RESTOREDB_CANNOT_RESTORE,
-                    "The Directory Server backend configured with backend ID " +
-                    "%s does not provide a mechanism for restoring " +
-                    "backups");
-    registerMessage(MSGID_RESTOREDB_CANNOT_LOCK_BACKEND,
-                    "An error occurred while attempting to acquire an " +
-                    "exclusive lock for backend %s:  %s.  This generally " +
-                    "means some other process is still using this backend " +
-                    "(e.g., it is in use by the Directory Server or a " +
-                    "backup or LDIF export is in progress.  The restore " +
-                    "cannot continue");
-    registerMessage(MSGID_RESTOREDB_ERROR_DURING_BACKUP,
-                    "An unexpected error occurred while attempting to " +
-                    "restore backup %s from %s:  %s");
-    registerMessage(MSGID_RESTOREDB_CANNOT_UNLOCK_BACKEND,
-                    "An error occurred while attempting to release the " +
-                    "exclusive lock for backend %s:  %s.  This lock should " +
-                    "automatically be cleared when the restore process " +
-                    "exits, so no further action should be required");
-    registerMessage(MSGID_DESCRIPTION_NOOP,
-                    "Show what would be done but do not perform any operation");
-    registerMessage(MSGID_DESCRIPTION_TYPES_ONLY,
-                    "Only retrieve attribute names but not their values");
-    registerMessage(MSGID_LDIF_FILE_CANNOT_OPEN_FOR_READ,
-                    "An error occurred while attempting to open the " +
-                    "LDIF file %s for reading:  %s");
-    registerMessage(MSGID_LDIF_FILE_READ_ERROR,
-                    "An error occurred while attempting to read the contents " +
-                    "of LDIF file %s:  %s");
-    registerMessage(MSGID_LDIF_FILE_INVALID_LDIF_ENTRY,
-                    "Error at or near line %d in LDIF file %s:  %s");
-
-
-    registerMessage(MSGID_STOPDS_DESCRIPTION_HOST,
-                    "Directory server hostname or IP address");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_PORT,
-                    "Directory server port number");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_USESSL,
-                    "Use SSL for secure communication with the server");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_USESTARTTLS,
-                    "Use StartTLS for secure communication with the server");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_BINDDN,
-                    "Specifies the DN to use to bind to the server");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_BINDPW,
-                    "Specifies the password to use to bind to the server");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_BINDPWFILE,
-                    "Bind password file");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_SASLOPTIONS,
-                    "SASL bind options");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_PROXYAUTHZID,
-                    "Use the proxied authorization control with the given " +
-                    "authorization ID");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_STOP_REASON,
-                    "Reason the server is being stopped or restarted");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_RESTART,
-                    "Attempt to automatically restart the server once it has " +
-                    "stopped");
-    registerMessage(MSGID_STOPDS_CHECK_STOPPABILITY,
-                    "Used to determine whether the server can be stopped "+
-                    "or not and the mode to be used to stop it");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_WINDOWS_NET_STOP,
-                    "Used by the window service code to inform that stop-ds "+
-                    "is being called from the window services after a call "+
-                    "to net stop");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_STOP_TIME,
-                    "Time to begin the shutdown in YYYYMMDDhhmmss format " +
-                    "(local time)");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_TRUST_ALL,
-                    "Trust all server SSL certificates");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_KSFILE,
-                    "Certificate keystore path");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_KSPW,
-                    "Certificate keystore PIN");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_KSPWFILE,
-                    "Certificate keystore PIN file");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_TSFILE,
-                    "Certificate trust store path");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_TSPW,
-                    "Certificate trust store PIN");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_TSPWFILE,
-                    "Certificate trust store PIN file");
-    registerMessage(MSGID_STOPDS_DESCRIPTION_SHOWUSAGE,
-                    "Display this usage information");
-    registerMessage(MSGID_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS,
-                    "ERROR:  You may not provide both the %s and the %s " +
-                    "arguments");
-    registerMessage(MSGID_STOPDS_CANNOT_DECODE_STOP_TIME,
-                    "ERROR:  Unable to decode the provided stop time.  It " +
-                    "should be in the form YYYYMMDDhhmmssZ for UTC time or " +
-                    "YYYYMMDDhhmmss for local time");
-    registerMessage(MSGID_STOPDS_CANNOT_INITIALIZE_SSL,
-                    "ERROR:  Unable to perform SSL initialization:  %s");
-    registerMessage(MSGID_STOPDS_CANNOT_PARSE_SASL_OPTION,
-                    "ERROR:  The provided SASL option string \"%s\" could " +
-                    "not be parsed in the form \"name=value\"");
-    registerMessage(MSGID_STOPDS_NO_SASL_MECHANISM,
-                    "ERROR:  One or more SASL options were provided, but " +
-                    "none of them were the \"mech\" option to specify which " +
-                    "SASL mechanism should be used");
-    registerMessage(MSGID_STOPDS_CANNOT_DETERMINE_PORT,
-                    "ERROR:  Cannot parse the value of the %s argument as " +
-                    "an integer value between 1 and 65535:  %s");
-    registerMessage(MSGID_STOPDS_CANNOT_CONNECT,
-                    "ERROR:  Cannot establish a connection to the " +
-                    "Directory Server:  %s");
-    registerMessage(MSGID_STOPDS_UNEXPECTED_CONNECTION_CLOSURE,
-                    "NOTICE:  The connection to the Directory Server was " +
-                    "closed while waiting for a response to the shutdown " +
-                    "request.  This likely means that the server has started " +
-                    "the shudown process");
-    registerMessage(MSGID_STOPDS_IO_ERROR,
-                    "ERROR:  An I/O error occurred while attempting to " +
-                    "communicate with the Directory Server:  %s");
-    registerMessage(MSGID_STOPDS_DECODE_ERROR,
-                    "ERROR:  An error occurred while trying to decode the " +
-                    "response from the server:  %s");
-    registerMessage(MSGID_STOPDS_INVALID_RESPONSE_TYPE,
-                    "ERROR:  Expected an add response message but got a %s " +
-                    "message instead");
-    registerMessage(MSGID_STOPDS_SERVER_ALREADY_STOPPED,
-                    "Server already stopped");
-    registerMessage(MSGID_STOPDS_GOING_TO_STOP,
-                    "Stopping Server...\n");
-
-
-    registerMessage(MSGID_LDIFSEARCH_DESCRIPTION_LDIF_FILE,
-                    "Specifies the LDIF file containing the data to search.  " +
-                    "Multiple files may be specified by providing the option " +
-                    "multiple times.  If no files are provided, the data " +
-                    "will be read from standard input");
-    registerMessage(MSGID_LDIFSEARCH_DESCRIPTION_BASEDN,
-                    "The base DN for the search.  Multiple base DNs may be " +
-                    "specified by providing the option multiple times.  If " +
-                    "no base DN is provided, then the root DSE will be used");
-    registerMessage(MSGID_LDIFSEARCH_DESCRIPTION_SCOPE,
-                    "The scope for the search.  It must be one of 'base', " +
-                    "'one', 'sub', or 'subordinate'.  If it is not provided, " +
-                    "then 'sub' will be used");
-    registerMessage(MSGID_LDIFSEARCH_DESCRIPTION_FILTER_FILE,
-                    "The path to the file containing the search filter(s) " +
-                    "to use.  If this is not provided, then the filter must " +
-                    "be provided on the command line after all configuration " +
-                    "options");
-    registerMessage(MSGID_LDIFSEARCH_DESCRIPTION_OUTPUT_FILE,
-                    "The path to the output file to which the matching " +
-                    "entries should be written.  If this is not provided, " +
-                    "then the data will be written to standard output");
-    registerMessage(MSGID_LDIFSEARCH_DESCRIPTION_OVERWRITE_EXISTING,
-                    "Indicates that any existing output file should be " +
-                    "overwritten rather than appending to it");
-    registerMessage(MSGID_LDIFSEARCH_DESCRIPTION_DONT_WRAP,
-                    "Indicates that long lines should not be wrapped");
-    registerMessage(MSGID_LDIFSEARCH_DESCRIPTION_SIZE_LIMIT,
-                    "Specifies the maximum number of matching entries to " +
-                    "return");
-    registerMessage(MSGID_LDIFSEARCH_DESCRIPTION_TIME_LIMIT,
-                    "Specifies the maximum length of time (in seconds) to " +
-                    "spend processing");
-    registerMessage(MSGID_LDIFSEARCH_NO_FILTER,
-                    "No search filter was specified.  Either a filter file " +
-                    "or an individual search filter must be provided");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_INITIALIZE_JMX,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server JMX subsystem based on the information " +
-                    "in configuration file %s:  %s");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_INITIALIZE_CONFIG,
-                    "An error occurred while attempting to process the " +
-                    "Directory Server configuration file %s:  %s");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_INITIALIZE_SCHEMA,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server schema based on the information in " +
-                    "configuration file %s:  %s");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_PARSE_FILTER,
-                    "An error occurred while attempting to parse search " +
-                    "filter '%s':  %s");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_PARSE_BASE_DN,
-                    "An error occurred while attempting to parse base DN " +
-                    "'%s':  %s");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_PARSE_TIME_LIMIT,
-                    "An error occurred while attempting to parse the " +
-                    "time limit as an integer:  %s");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_PARSE_SIZE_LIMIT,
-                    "An error occurred while attempting to parse the " +
-                    "size limit as an integer:  %s");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_CREATE_READER,
-                    "An error occurred while attempting to create the LDIF " +
-                    "reader:  %s");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_CREATE_WRITER,
-                    "An error occurred while attempting to create the LDIF " +
-                    "writer used to return matching entries:  %s");
-    registerMessage(MSGID_LDIFSEARCH_TIME_LIMIT_EXCEEDED,
-                    "The specified time limit has been exceeded during " +
-                    "search processing");
-    registerMessage(MSGID_LDIFSEARCH_SIZE_LIMIT_EXCEEDED,
-                    "The specified size limit has been exceeded during " +
-                    "search processing");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_READ_ENTRY_RECOVERABLE,
-                    "An error occurred while attempting to read an entry " +
-                    "from the LDIF content:  %s.  Skipping this entry and " +
-                    "continuing processing");
-    registerMessage(MSGID_LDIFSEARCH_CANNOT_READ_ENTRY_FATAL,
-                    "An error occurred while attempting to read an entry " +
-                    "from the LDIF content:  %s.  Unable to continue " +
-                    "processing");
-    registerMessage(MSGID_LDIFSEARCH_ERROR_DURING_PROCESSING,
-                    "An unexpected error occurred during search processing:  " +
-                    "%s");
-
-
-    registerMessage(MSGID_LDIFDIFF_DESCRIPTION_SOURCE_LDIF,
-                    "Specifies the LDIF file to use as the source data");
-    registerMessage(MSGID_LDIFDIFF_DESCRIPTION_TARGET_LDIF,
-                    "Specifies the LDIF file to use as the target data");
-    registerMessage(MSGID_LDIFDIFF_DESCRIPTION_OUTPUT_LDIF,
-                    "Specifies the file to which the output should be " +
-                    "written");
-    registerMessage(MSGID_LDIFDIFF_DESCRIPTION_SINGLE_VALUE_CHANGES,
-                    "Indicates that each attribute-level change should be " +
-                    "written as a separate modification per attribute value " +
-                    "rather than one modification per entry");
-    registerMessage(MSGID_LDIFDIFF_DESCRIPTION_OVERWRITE_EXISTING,
-                    "Indicates that any existing output file should be " +
-                    "overwritten rather than appending to it");
-    registerMessage(MSGID_LDIFDIFF_CANNOT_INITIALIZE_JMX,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server JMX subsystem based on the information " +
-                    "in configuration file %s:  %s");
-    registerMessage(MSGID_LDIFDIFF_CANNOT_INITIALIZE_CONFIG,
-                    "An error occurred while attempting to process the " +
-                    "Directory Server configuration file %s:  %s");
-    registerMessage(MSGID_LDIFDIFF_CANNOT_INITIALIZE_SCHEMA,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server schema based on the information in " +
-                    "configuration file %s:  %s");
-    registerMessage(MSGID_LDIFDIFF_CANNOT_OPEN_SOURCE_LDIF,
-                    "An error occurred while attempting to open source LDIF " +
-                    "%s:  %s");
-    registerMessage(MSGID_LDIFDIFF_ERROR_READING_SOURCE_LDIF,
-                    "An error occurred while reading the contents of source " +
-                    "LDIF %s:  %s");
-    registerMessage(MSGID_LDIFDIFF_CANNOT_OPEN_TARGET_LDIF,
-                    "An error occurred while attempting to open target LDIF " +
-                    "%s:  %s");
-    registerMessage(MSGID_LDIFDIFF_ERROR_READING_TARGET_LDIF,
-                    "An error occurred while reading the contents of target " +
-                    "LDIF %s:  %s");
-    registerMessage(MSGID_LDIFDIFF_CANNOT_OPEN_OUTPUT,
-                    "An error occurred while attempting to open the LDIF " +
-                    "writer for the diff output:  %s");
-    registerMessage(MSGID_LDIFDIFF_NO_DIFFERENCES,
-                    "No differences were detected between the source and " +
-                    "target LDIF files");
-    registerMessage(MSGID_LDIFDIFF_ERROR_WRITING_OUTPUT,
-                    "An error occurred while attempting to write the diff " +
-                    "output:  %s");
-
-
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_LDAP_PORT,
-                    "Specifies the port on which the Directory Server should " +
-                    "listen for LDAP communication");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_LDAPS_PORT,
-                    "Specifies the port on which the Directory Server should " +
-                    "listen for LDAPS communication");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_JMX_PORT,
-                    "Specifies the port on which the Directory Server should " +
-                    "listen for JMX communication");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_ENABLE_START_TLS,
-                    "Specifies whether to enable or not StartTLS");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_KEYMANAGER_PROVIDER_DN,
-                    "Specifies the DN of the key manager provider to use " +
-                    "for SSL and/or StartTLS");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_TRUSTMANAGER_PROVIDER_DN,
-                    "Specifies the DN of the trust manager provider to use " +
-                    "for SSL and/or StartTLS");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_KEYMANAGER_PATH,
-                    "Specifies the path of the keystore to be used by the " +
-                    "key manager provider");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_CERTNICKNAME,
-                    "Specifies the nickname of the certificate that the " +
-                    "connection handler should use when accepting SSL-based " +
-                    "connections or performing StartTLS negotiation");
-    registerMessage(MSGID_CONFIGDS_CANNOT_PARSE_KEYMANAGER_PROVIDER_DN,
-                    "An error occurred while attempting to parse key manager " +
-                    "provider DN value \"%s\" as a DN:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_PARSE_TRUSTMANAGER_PROVIDER_DN,
-                    "An error occurred while attempting to parse trust " +
-                    "manager provider DN value \"%s\" as a DN:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_ENABLE_STARTTLS,
-                    "An error occurred while attempting to enable StartTLS: " +
-                    "%s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_ENABLE_KEYMANAGER,
-                    "An error occurred while attempting to enable key " +
-                    "manager provider entry: %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_ENABLE_TRUSTMANAGER,
-                    "An error occurred while attempting to enable trust " +
-                    "manager provider entry: %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_UPDATE_KEYMANAGER_REFERENCE,
-                    "An error occurred while attempting to update the key " +
-                    "manager provider DN used for LDAPS communication: " +
-                    "%s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_UPDATE_TRUSTMANAGER_REFERENCE,
-                    "An error occurred while attempting to update the trust " +
-                    "manager provider DN used for LDAPS communication: " +
-                    "%s");
-    registerMessage(MSGID_CONFIGDS_KEYMANAGER_PROVIDER_DN_REQUIRED,
-                    "ERROR:  You must provide the %s argument when providing " +
-                    "the %s argument");
-    registerMessage(MSGID_CONFIGDS_CANNOT_UPDATE_CERT_NICKNAME,
-                    "An error occurred while attempting to update the " +
-                    "nickname of the certificate that the " +
-                    "connection handler should use when accepting SSL-based " +
-                    "connections or performing StartTLS negotiation: %s");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_BASE_DN,
-                    "Specifies the base DN for user information in the " +
-                    "Directory Server.  Multiple base DNs may be provided " +
-                    "by using this option multiple times");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_ROOT_DN,
-                    "Specifies the DN for the initial root user for the " +
-                    "Directory Server");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_ROOT_PW,
-                    "Specifies the password for the initial root user for " +
-                    "the Directory Server");
-    registerMessage(MSGID_CONFIGDS_DESCRIPTION_ROOT_PW_FILE,
-                    "Specifies the path to a file containing the password " +
-                    "for the initial root user for the Directory Server");
-    registerMessage(MSGID_CONFIGDS_CANNOT_ACQUIRE_SERVER_LOCK,
-                    "An error occurred while attempting to acquire the " +
-                    "server-wide lock file %s:  %s.  This generally means " +
-                    "that the Directory Server is running, or another tool " +
-                    "that requires exclusive access to the server is in use");
-    registerMessage(MSGID_CONFIGDS_CANNOT_INITIALIZE_JMX,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server JMX subsystem based on the information " +
-                    "in configuration file %s:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_INITIALIZE_CONFIG,
-                    "An error occurred while attempting to process the " +
-                    "Directory Server configuration file %s:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_INITIALIZE_SCHEMA,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server schema based on the information in " +
-                    "configuration file %s:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_PARSE_BASE_DN,
-                    "An error occurred while attempting to parse base DN " +
-                    "value \"%s\" as a DN:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_PARSE_ROOT_DN,
-                    "An error occurred while attempting to parse root DN " +
-                    "value \"%s\" as a DN:  %s");
-    registerMessage(MSGID_CONFIGDS_NO_ROOT_PW,
-                    "The DN for the initial root user was provided, but no " +
-                    "corresponding password was given.  If the root DN is " +
-                    "specified then the password must also be provided");
-    registerMessage(MSGID_CONFIGDS_CANNOT_UPDATE_BASE_DN,
-                    "An error occurred while attempting to update the base " +
-                    "DN(s) for user data in the Directory Server:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_UPDATE_LDAP_PORT,
-                    "An error occurred while attempting to update the port " +
-                    "on which to listen for LDAP communication:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_UPDATE_LDAPS_PORT,
-                    "An error occurred while attempting to update the port " +
-                    "on which to listen for LDAPS communication:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_UPDATE_JMX_PORT,
-                    "An error occurred while attempting to update the port " +
-                    "on which to listen for JMX communication:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_UPDATE_ROOT_USER,
-                    "An error occurred while attempting to update the entry " +
-                    "for the initial Directory Server root user:  %s");
-    registerMessage(MSGID_CONFIGDS_CANNOT_WRITE_UPDATED_CONFIG,
-                    "An error occurred while writing the updated Directory " +
-                    "Server configuration:  %s");
-    registerMessage(MSGID_CONFIGDS_NO_CONFIG_CHANGES,
-                    "ERROR:  No configuration changes were specified");
-    registerMessage(MSGID_CONFIGDS_PORT_ALREADY_SPECIFIED,
-                    "ERROR:  You have specified the value %s for different " +
-                    "ports");
-    registerMessage(MSGID_CONFIGDS_WROTE_UPDATED_CONFIG,
-                    "Successfully wrote the updated Directory Server " +
-                    "configuration");
-
-
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_TESTONLY,
-                    "Just verify that the JVM can be started properly");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_PROGNAME,
-                    "The setup command used to invoke this program");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_CLI,
-                    "Specifies to use the command line install.  If not "+
-                    "specified the graphical interface will be launched.  The "+
-                    "rest of the options (excluding help and version) will " +
-                    "only be taken into account if this option is specified");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_SILENT,
-                    "Perform a silent installation");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_BASEDN,
-                    "Specifies the base DN for user information in the " +
-                    "Directory Server.  Multiple base DNs may be provided " +
-                    "by using this option multiple times");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_ADDBASE,
-                    "Indicates whether to create the base entry in the " +
-                    "Directory Server database");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_IMPORTLDIF,
-                    "Specifies the path to an LDIF file containing data that " +
-                    "should be added to the Directory Server database.  " +
-                    "Multiple LDIF files may be provided by using this " +
-                    "option multiple times");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_SAMPLE_DATA,
-                    "Specifies that the database should be populated with " +
-                    "the specified number of sample entries");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_LDAPPORT,
-                    "Specifies the port on which the Directory Server should " +
-                    "listen for LDAP communication");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_JMXPORT,
-                    "Specifies the port on which the Directory Server should " +
-                    "listen for JMX communication");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_SKIPPORT,
-                    "Skip the check to determine whether the specified LDAP " +
-                    "port is usable");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_ROOTDN,
-                    "Specifies the DN for the initial root user for the " +
-                    "Directory Server");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_ROOTPW,
-                    "Specifies the password for the initial root user for " +
-                    "the Directory Server");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_ROOTPWFILE,
-                    "Specifies the path to a file containing the password " +
-                    "for the initial root user for the Directory Server");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_ENABLE_WINDOWS_SERVICE,
-                    "Enable OpenDS to run as a Windows Service");
-    registerMessage(MSGID_INSTALLDS_DESCRIPTION_HELP,
-                    "Display this usage information");
-    registerMessage(MSGID_INSTALLDS_NO_CONFIG_FILE,
-                    "ERROR:  No configuration file path was provided (use " +
-                    "the %s argument)");
-    registerMessage(MSGID_INSTALLDS_INITIALIZING,
-                    "Please wait while the setup program initializes...");
-    registerMessage(MSGID_INSTALLDS_CANNOT_INITIALIZE_JMX,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server JMX subsystem based on the information " +
-                    "in configuration file %s:  %s");
-    registerMessage(MSGID_INSTALLDS_CANNOT_INITIALIZE_CONFIG,
-                    "An error occurred while attempting to process the " +
-                    "Directory Server configuration file %s:  %s");
-    registerMessage(MSGID_INSTALLDS_CANNOT_INITIALIZE_SCHEMA,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server schema based on the information in " +
-                    "configuration file %s:  %s");
-    registerMessage(MSGID_INSTALLDS_CANNOT_PARSE_DN,
-                    "An error occurred while attempting to parse the string " +
-                    "\"%s\" as a valid DN:  %s");
-    registerMessage(MSGID_INSTALLDS_PROMPT_BASEDN,
-                    "What do you wish to use as the base DN for the " +
-                    "directory data?");
-    registerMessage(MSGID_INSTALLDS_PROMPT_IMPORT,
-                    "Do you wish to populate the directory database with " +
-                    "information from an existing LDIF file?");
-    registerMessage(MSGID_INSTALLDS_PROMPT_IMPORT_FILE,
-                    "Please specify the path to the LDIF file containing " +
-                    "the data to import");
-    registerMessage(MSGID_INSTALLDS_TWO_CONFLICTING_ARGUMENTS,
-                    "ERROR:  You may not provide both the %s and the %s " +
-                    "arguments at the same time");
-    registerMessage(MSGID_INSTALLDS_PROMPT_ADDBASE,
-                    "Would you like to have the base %s entry automatically " +
-                    "created in the directory database?");
-    registerMessage(MSGID_INSTALLDS_PROMPT_LDAPPORT,
-                    "On which port would you like the Directory Server to " +
-                    "accept connections from LDAP clients?");
-    registerMessage(MSGID_INSTALLDS_PROMPT_JMXPORT,
-                    "On which port would you like the Directory Server to " +
-                    "accept connections from JMX clients?");
-    registerMessage(MSGID_INSTALLDS_PROMPT_ENABLE_SERVICE,
-                    "Enable OpenDS to run as a Windows Service?");
-    registerMessage(MSGID_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT,
-                    "ERROR:  Unable to bind to port %d.  This port may " +
-                    "already be in use, or you may not have permission to " +
-                    "bind to it.  On UNIX-based operating systems, non-root " +
-                    "users may not be allowed to bind to ports 1 through " +
-                    "1024");
-    registerMessage(MSGID_INSTALLDS_CANNOT_BIND_TO_PORT,
-                    "ERROR:  Unable to bind to port %d.  This port may " +
-                    "already be in use, or you may not have permission to " +
-                    "bind to it");
-    registerMessage(MSGID_INSTALLDS_PROMPT_ROOT_DN,
-                    "What would you like to use as the initial root user DN " +
-                    "for the Directory Server?");
-    registerMessage(MSGID_INSTALLDS_NO_ROOT_PASSWORD,
-                    "ERROR:  No password was provided for the initial root "+
-                    "user.  When performing a silent installation, this must " +
-                    "be provided using either the %s or the %s argument");
-    registerMessage(MSGID_INSTALLDS_PROMPT_ROOT_PASSWORD,
-                    "Please provide the password to use for the initial root " +
-                    "user");
-    registerMessage(MSGID_INSTALLDS_PROMPT_CONFIRM_ROOT_PASSWORD,
-                    "Please re-enter the password for confirmation");
-    registerMessage(MSGID_INSTALLDS_STATUS_CONFIGURING_DS,
-                    "Applying the requested configuration to the " +
-                    "Directory Server...");
-    registerMessage(MSGID_INSTALLDS_STATUS_CREATING_BASE_LDIF,
-                    "Creating a temporary LDIF file with the initial base " +
-                    "entry contents...");
-    registerMessage(MSGID_INSTALLDS_CANNOT_CREATE_BASE_ENTRY_LDIF,
-                    "An error occurred while attempting to create the " +
-                    "base LDIF file:  %s");
-    registerMessage(MSGID_INSTALLDS_STATUS_IMPORTING_LDIF,
-                    "Importing the LDIF data into the Directory Server " +
-                    "database...");
-    registerMessage(MSGID_INSTALLDS_IMPORT_SUCCESSFUL,
-                    "Import complete");
-    registerMessage(MSGID_INSTALLDS_IMPORT_UNSUCCESSFUL,
-                    "Import failed");
-    registerMessage(MSGID_INSTALLDS_STATUS_SUCCESS,
-                    "The " + SHORT_NAME + " setup process has completed " +
-                    "successfully");
-    registerMessage(MSGID_INSTALLDS_PROMPT_VALUE_YES, "yes");
-    registerMessage(MSGID_INSTALLDS_PROMPT_VALUE_NO, "no");
-    registerMessage(MSGID_INSTALLDS_INVALID_YESNO_RESPONSE,
-                    "ERROR:  The provided value could not be interpreted as " +
-                    "a yes or no response.  Please enter a response of " +
-                    "either \"yes\" or \"no\"");
-    registerMessage(MSGID_INSTALLDS_INVALID_INTEGER_RESPONSE,
-                    "ERROR:  The provided response could not be interpreted " +
-                    "as an integer.  Please provide the repsonse as an " +
-                    "integer value");
-    registerMessage(MSGID_INSTALLDS_INTEGER_BELOW_LOWER_BOUND,
-                    "ERROR:  The provided value is less than the lowest " +
-                    "allowed value of %d");
-    registerMessage(MSGID_INSTALLDS_INTEGER_ABOVE_UPPER_BOUND,
-                    "ERROR:  The provided value is greater than the largest " +
-                    "allowed value of %d");
-    registerMessage(MSGID_INSTALLDS_INVALID_DN_RESPONSE,
-                    "ERROR:  The provided response could not be interpreted " +
-                    "as an LDAP DN");
-    registerMessage(MSGID_INSTALLDS_INVALID_STRING_RESPONSE,
-                    "ERROR:  The response value may not be an empty string");
-    registerMessage(MSGID_INSTALLDS_INVALID_PASSWORD_RESPONSE,
-                    "ERROR:  The password value may not be an empty string");
-    registerMessage(MSGID_INSTALLDS_PASSWORDS_DONT_MATCH,
-                    "ERROR:  The provided password values do not match");
-    registerMessage(MSGID_INSTALLDS_ERROR_READING_FROM_STDIN,
-                    "ERROR:  Unexpected failure while reading from standard " +
-                    "input:  %s");
-    registerMessage(MSGID_INSTALLDS_HEADER_POPULATE_TYPE,
-                    "Options for populating the database:");
-    registerMessage(MSGID_INSTALLDS_POPULATE_OPTION_BASE_ONLY,
-                    "Only create the base entry");
-    registerMessage(MSGID_INSTALLDS_POPULATE_OPTION_LEAVE_EMPTY,
-                    "Leave the database empty");
-    registerMessage(MSGID_INSTALLDS_POPULATE_OPTION_IMPORT_LDIF,
-                    "Import data from an LDIF file");
-    registerMessage(MSGID_INSTALLDS_POPULATE_OPTION_GENERATE_SAMPLE,
-                    "Load automatically-generated sample data");
-    registerMessage(MSGID_INSTALLDS_PROMPT_POPULATE_CHOICE,
-                    "Database population selection:");
-    registerMessage(MSGID_INSTALLDS_NO_SUCH_LDIF_FILE,
-                    "ERROR:  The specified LDIF file %s does not exist");
-    registerMessage(MSGID_INSTALLDS_PROMPT_NUM_ENTRIES,
-                    "Please specify the number of user entries to generate:");
-    registerMessage(MSGID_INSTALLDS_CANNOT_CREATE_TEMPLATE_FILE,
-                    "ERROR:  Cannot create the template file for generating " +
-                    "sample data:  %s");
-    registerMessage(MSGID_INSTALLDS_ENABLING_WINDOWS_SERVICE,
-                    "Enabling OpenDS as a Windows service...");
-
-    registerMessage(MSGID_UNINSTALLDS_DESCRIPTION_CLI,
-        "Specifies to use the command line install.  If not "+
-        "specified the graphical interface will be launched.  The "+
-        "silent install option will only be taken into account if this "+
-        "option is specified");
-    registerMessage(MSGID_UNINSTALLDS_DESCRIPTION_SILENT,
-        "Perform a silent uninstall");
-
-    registerMessage(MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT,
-                    "Invalid number of arguments provided for tag %s on line " +
-                    "number %d of the template file:  expected %d, got %d");
-    registerMessage(MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT,
-                    "Invalid number of arguments provided for tag %s on line " +
-                    "number %d of the template file:  expected between %d " +
-                    "and %d, got %d");
-    registerMessage(MSGID_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE,
-                    "Undefined attribute %s referenced on line %d of the " +
-                    "template file");
-    registerMessage(MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND,
-                    "Value %d is below the lowest allowed value of %d for " +
-                    "tag %s on line %d of the template file");
-    registerMessage(MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER,
-                    "Cannot parse value \"%s\" as an integer for tag %s on " +
-                    "line %d of the template file");
-    registerMessage(MSGID_MAKELDIF_TAG_INTEGER_ABOVE_UPPER_BOUND,
-                    "Value %d is above the largest allowed value of %d for " +
-                    "tag %s on line %d of the template file");
-    registerMessage(MSGID_MAKELDIF_TAG_INVALID_EMPTY_STRING_ARGUMENT,
-                    "Argument %d for tag %s on line number %d may not be an " +
-                    "empty string");
-    registerMessage(MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_BOOLEAN,
-                    "Cannot parse value \"%s\" as a Boolean value for tag %s " +
-                    "on line %d of the template file.  The value must be " +
-                    "either 'true' or 'false'");
-    registerMessage(MSGID_MAKELDIF_UNDEFINED_BRANCH_SUBORDINATE,
-                    "The branch with entry DN %s references a subordinate " +
-                    "template named %s which is not defined in the template " +
-                    "file");
-    registerMessage(MSGID_MAKELDIF_CANNOT_LOAD_TAG_CLASS,
-                    "Unable to load class %s for use as a MakeLDIF tag");
-    registerMessage(MSGID_MAKELDIF_CANNOT_INSTANTIATE_TAG,
-                    "Cannot instantiate class %s as a MakeLDIF tag");
-    registerMessage(MSGID_MAKELDIF_CONFLICTING_TAG_NAME,
-                    "Cannot register the tag defined in class %s because " +
-                    "the tag name %s conflicts with the name of another " +
-                    "tag that has already been registered");
-    registerMessage(MSGID_MAKELDIF_WARNING_UNDEFINED_CONSTANT,
-                    "Possible reference to an undefined constant %s on line " +
-                    "%d");
-    registerMessage(MSGID_MAKELDIF_DEFINE_MISSING_EQUALS,
-                    "The constant definition on line %d is missing an " +
-                    "equal sign to delimit the constant name from the value");
-    registerMessage(MSGID_MAKELDIF_DEFINE_NAME_EMPTY,
-                    "The constant definition on line %d does not include a " +
-                    "name for the constant");
-    registerMessage(MSGID_MAKELDIF_CONFLICTING_CONSTANT_NAME,
-                    "The definition for constant %s on line %d conflicts " +
-                    "with an earlier constant definition included in the " +
-                    "template");
-    registerMessage(MSGID_MAKELDIF_WARNING_DEFINE_VALUE_EMPTY,
-                    "Constant %s defined on line %d has not been assigned a " +
-                    "value");
-    registerMessage(MSGID_MAKELDIF_CONFLICTING_BRANCH_DN,
-                    "The branch definition %s starting on line %d conflicts " +
-                    "with an earlier branch definition contained in the " +
-                    "template file");
-    registerMessage(MSGID_MAKELDIF_CONFLICTING_TEMPLATE_NAME,
-                    "The template definition %s starting on line %d " +
-                    "conflicts with an earlier template definition contained " +
-                    "in the template file");
-    registerMessage(MSGID_MAKELDIF_UNEXPECTED_TEMPLATE_FILE_LINE,
-                    "Unexpected template line \"%s\" encountered on line %d " +
-                    "of the template file");
-    registerMessage(MSGID_MAKELDIF_UNDEFINED_TEMPLATE_SUBORDINATE,
-                    "The template named %s references a subordinate template " +
-                    "named %s which is not defined in the template file");
-    registerMessage(MSGID_MAKELDIF_TEMPLATE_MISSING_RDN_ATTR,
-                    "The template named %s includes RDN attribute %s that " +
-                    "is not assigned a value in that template");
-    registerMessage(MSGID_MAKELDIF_CANNOT_DECODE_BRANCH_DN,
-                    "Unable to decode branch DN \"%s\" on line %d of the " +
-                    "template file");
-    registerMessage(MSGID_MAKELDIF_BRANCH_SUBORDINATE_TEMPLATE_NO_COLON,
-                    "Subordinate template definition on line %d for branch " +
-                    "%s is missing a colon to separate the template name " +
-                    "from the number of entries");
-    registerMessage(MSGID_MAKELDIF_BRANCH_SUBORDINATE_INVALID_NUM_ENTRIES,
-                    "Subordinate template definition on line %d for branch " +
-                    "%s specified invalid number of entries %d for template " +
-                    "%s");
-    registerMessage(MSGID_MAKELDIF_BRANCH_SUBORDINATE_ZERO_ENTRIES,
-                    "Subordinate template definition on line %d for branch " +
-                    "%s specifies that zero entries of type %s should be " +
-                    "generated");
-    registerMessage(MSGID_MAKELDIF_BRANCH_SUBORDINATE_CANT_PARSE_NUMENTRIES,
-                    "Unable to parse the number of entries for template %s " +
-                    "as an integer for the subordinate template definition " +
-                    "on line %d for branch %s");
-    registerMessage(MSGID_MAKELDIF_TEMPLATE_INVALID_PARENT_TEMPLATE,
-                    "The parent template %s referenced on line %d for " +
-                    "template %s is invalid because the referenced parent " +
-                    "template is not defined before the template that " +
-                    "extends it");
-    registerMessage(MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_TEMPLATE_NO_COLON,
-                    "Subordinate template definition on line %d for template " +
-                    "%s is missing a colon to separate the template name " +
-                    "from the number of entries");
-    registerMessage(MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_INVALID_NUM_ENTRIES,
-                    "Subordinate template definition on line %d for template " +
-                    "%s specified invalid number of entries %d for " +
-                    "subordinate template %s");
-    registerMessage(MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_ZERO_ENTRIES,
-                    "Subordinate template definition on line %d for template " +
-                    "%s specifies that zero entries of type %s should be " +
-                    "generated");
-    registerMessage(MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_CANT_PARSE_NUMENTRIES,
-                    "Unable to parse the number of entries for template %s " +
-                    "as an integer for the subordinate template definition " +
-                    "on line %d for template %s");
-    registerMessage(MSGID_MAKELDIF_NO_COLON_IN_BRANCH_EXTRA_LINE,
-                    "There is no colon to separate the attribute name from " +
-                    "the value pattern on line %s of the template file in " +
-                    "the definition for branch %s");
-    registerMessage(MSGID_MAKELDIF_NO_ATTR_IN_BRANCH_EXTRA_LINE,
-                    "There is no attribute name before the colon on line %d " +
-                    "of the template file in the definition for branch %s");
-    registerMessage(MSGID_MAKELDIF_NO_VALUE_IN_BRANCH_EXTRA_LINE,
-                    "The value pattern for line %s of the template file in " +
-                    "the definition for branch %s is empty");
-    registerMessage(MSGID_MAKELDIF_INCOMPLETE_TAG,
-                    "Line %d of the template file contains an incomplete " +
-                    "tag that starts with either '<' or '{' but does get " +
-                    "closed");
-    registerMessage(MSGID_MAKELDIF_NO_COLON_IN_TEMPLATE_LINE,
-                    "There is no colon to separate the attribute name from " +
-                    "the value pattern on line %s of the template file in " +
-                    "the definition for template %s");
-    registerMessage(MSGID_MAKELDIF_NO_ATTR_IN_TEMPLATE_LINE,
-                    "There is no attribute name before the colon on line %d " +
-                    "of the template file in the definition for template %s");
-    registerMessage(MSGID_MAKELDIF_NO_VALUE_IN_TEMPLATE_LINE,
-                    "The value pattern for line %s of the template file in " +
-                    "the definition for template %s is empty");
-    registerMessage(MSGID_MAKELDIF_NO_SUCH_TAG,
-                    "An undefined tag %s is referenced on line %d of the " +
-                    "template file");
-    registerMessage(MSGID_MAKELDIF_CANNOT_INSTANTIATE_NEW_TAG,
-                    "An unexpected error occurred while trying to create a " +
-                    "new instance of tag %s referenced on line %d of the " +
-                    "template file:  %s");
-    registerMessage(MSGID_MAKELDIF_TAG_NOT_ALLOWED_IN_BRANCH,
-                    "Tag %s referenced on line %d of the template file is " +
-                    "not allowed for use in branch definitions");
-    registerMessage(MSGID_MAKELDIF_DESCRIPTION_RESOURCE_PATH,
-                    "Specifies the path to look for MakeLDIF resources " +
-                    "(e.g., data files) not found in the current working " +
-                    "directory or template directory path");
-    registerMessage(MSGID_MAKELDIF_DESCRIPTION_TEMPLATE,
-                    "The path to the template file with information about " +
-                    "the LDIF data to generate");
-    registerMessage(MSGID_MAKELDIF_DESCRIPTION_LDIF,
-                    "The path to the LDIF file to be written");
-    registerMessage(MSGID_MAKELDIF_DESCRIPTION_SEED,
-                    "The seed to use to initialize the random number " +
-                    "generator");
-    registerMessage(MSGID_MAKELDIF_DESCRIPTION_HELP,
-                    "Show this usage information");
-    registerMessage(MSGID_MAKELDIF_CANNOT_INITIALIZE_JMX,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server JMX subsystem based on the information " +
-                    "in configuration file %s:  %s");
-    registerMessage(MSGID_MAKELDIF_CANNOT_INITIALIZE_CONFIG,
-                    "An error occurred while attempting to process the " +
-                    "Directory Server configuration file %s:  %s");
-    registerMessage(MSGID_MAKELDIF_CANNOT_INITIALIZE_SCHEMA,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server schema based on the information in " +
-                    "configuration file %s:  %s");
-    registerMessage(MSGID_MAKELDIF_IOEXCEPTION_DURING_PARSE,
-                    "An error occurred while attempting to read the " +
-                    "template file:  %s");
-    registerMessage(MSGID_MAKELDIF_EXCEPTION_DURING_PARSE,
-                    "An error occurred while attempting to parse the " +
-                    "template file:  %s");
-    registerMessage(MSGID_MAKELDIF_TAG_INVALID_FORMAT_STRING,
-                    "Cannot parse value \"%s\" as an valid format string for " +
-                    "tag %s on line %d of the template file");
-    registerMessage(MSGID_MAKELDIF_TAG_NO_RANDOM_TYPE_ARGUMENT,
-                    "The random tag on line %d of the template file does " +
-                    "not include an argument to specify the type of random " +
-                    "value that should be generated");
-    registerMessage(MSGID_MAKELDIF_TAG_WARNING_EMPTY_VALUE,
-                    "The value generated from the random tag on line %d of " +
-                    "the template file will always be an empty string");
-    registerMessage(MSGID_MAKELDIF_TAG_UNKNOWN_RANDOM_TYPE,
-                    "The random tag on line %d of the template file " +
-                    "references an unknown random type of %s");
-    registerMessage(MSGID_MAKELDIF_COULD_NOT_FIND_TEMPLATE_FILE,
-                    "Could not find template file %s");
-    registerMessage(MSGID_MAKELDIF_NO_SUCH_RESOURCE_DIRECTORY,
-                    "The specified resource directory %s could not be found");
-    registerMessage(MSGID_MAKELDIF_RESOURCE_DIRECTORY_NOT_DIRECTORY,
-                    "The specified resource directory %s exists but is not a " +
-                    "directory");
-    registerMessage(MSGID_MAKELDIF_TAG_CANNOT_FIND_FILE,
-                    "Cannot find file %s referenced by tag %s on line %d of " +
-                    "the template file");
-    registerMessage(MSGID_MAKELDIF_TAG_INVALID_FILE_ACCESS_MODE,
-                    "Invalid file access mode %s for tag %s on line %d of " +
-                    "the template file.  It must be either \"sequential\" or " +
-                    "\"random\"");
-    registerMessage(MSGID_MAKELDIF_TAG_CANNOT_READ_FILE,
-                    "An error occurred while trying to read file %s " +
-                    "referenced by tag %s on line %d of the template file:  " +
-                    "%s");
-    registerMessage(MSGID_MAKELDIF_UNABLE_TO_CREATE_LDIF,
-                    "An error occurred while attempting to open LDIF file %s " +
-                    "for writing:  %s");
-    registerMessage(MSGID_MAKELDIF_ERROR_WRITING_LDIF,
-                    "An error occurred while writing data to LDIF file %s:  " +
-                    "%s");
-    registerMessage(MSGID_MAKELDIF_PROCESSED_N_ENTRIES,
-                    "Processed %d entries");
-    registerMessage(MSGID_MAKELDIF_CANNOT_WRITE_ENTRY,
-                    "An error occurred while attempting to write entry %s to " +
-                    "LDIF:  %s");
-    registerMessage(MSGID_MAKELDIF_PROCESSING_COMPLETE,
-                    "LDIF processing complete.  %d entries written");
-    registerMessage(MSGID_MAKELDIF_TAG_LIST_NO_ARGUMENTS,
-                    "The list tag on line %d of the template file does not " +
-                    "contain any arguments to specify the list values.  At " +
-                    "least one list value must be provided");
-    registerMessage(MSGID_MAKELDIF_TAG_LIST_INVALID_WEIGHT,
-                    "The list tag on line %d of the template file contains " +
-                    "item '%s' that includes a semicolon but that semicolon " +
-                    "is not followed by an integer.  The semicolon will be " +
-                    "assumed to be part of the value and not a delimiter to " +
-                    "separate the value from its relative weight");
-
-
-    registerMessage(MSGID_LDIFMODIFY_CANNOT_ADD_ENTRY_TWICE,
-                    "Entry %s is added twice in the set of changes to apply, " +
-                    "which is not supported by the LDIF modify tool");
-    registerMessage(MSGID_LDIFMODIFY_CANNOT_DELETE_AFTER_ADD,
-                    "Entry %s cannot be deleted because it was previously " +
-                    "added in the set of changes.  This is not supported by " +
-                    "the LDIF modify tool");
-    registerMessage(MSGID_LDIFMODIFY_CANNOT_MODIFY_ADDED_OR_DELETED,
-                    "Cannot modify entry %s because it was previously added " +
-                    "or deleted in the set of changes.  This is not " +
-                    "supported by the LDIF modify tool");
-    registerMessage(MSGID_LDIFMODIFY_MODDN_NOT_SUPPORTED,
-                    "The modify DN operation targeted at entry %s cannot be " +
-                    "processed because modify DN operations are not " +
-                    "supported by the LDIF modify tool");
-    registerMessage(MSGID_LDIFMODIFY_UNKNOWN_CHANGETYPE,
-                    "Entry %s has an unknown changetype of %s");
-    registerMessage(MSGID_LDIFMODIFY_ADD_ALREADY_EXISTS,
-                    "Unable to add entry %s because it already exists in " +
-                    "the data set");
-    registerMessage(MSGID_LDIFMODIFY_DELETE_NO_SUCH_ENTRY,
-                    "Unable to delete entry %s because it does not exist " +
-                    "in the data set");
-    registerMessage(MSGID_LDIFMODIFY_MODIFY_NO_SUCH_ENTRY,
-                    "Unable to modify entry %s because it does not exist " +
-                    "in the data set");
-    registerMessage(MSGID_LDIFMODIFY_DESCRIPTION_SOURCE,
-                    "Specifies the LDIF file containing the data to be " +
-                    "updated");
-    registerMessage(MSGID_LDIFMODIFY_DESCRIPTION_CHANGES,
-                    "Specifies the LDIF file containing the changes to apply");
-    registerMessage(MSGID_LDIFMODIFY_DESCRIPTION_TARGET,
-                    "Specifies the file to which the updated data should be " +
-                    "written");
-    registerMessage(MSGID_LDIFMODIFY_DESCRIPTION_HELP,
-                    "Displays this usage information");
-    registerMessage(MSGID_LDIFMODIFY_CANNOT_INITIALIZE_JMX,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server JMX subsystem based on the information " +
-                    "in configuration file %s:  %s");
-    registerMessage(MSGID_LDIFMODIFY_CANNOT_INITIALIZE_CONFIG,
-                    "An error occurred while attempting to process the " +
-                    "Directory Server configuration file %s:  %s");
-    registerMessage(MSGID_LDIFMODIFY_CANNOT_INITIALIZE_SCHEMA,
-                    "An error occurred while attempting to initialize the " +
-                    "Directory Server schema based on the information in " +
-                    "configuration file %s:  %s");
-    registerMessage(MSGID_LDIFMODIFY_SOURCE_DOES_NOT_EXIST,
-                    "The source LDIF file %s does not exist");
-    registerMessage(MSGID_LDIFMODIFY_CANNOT_OPEN_SOURCE,
-                    "Unable to open the source LDIF file %s:  %s");
-    registerMessage(MSGID_LDIFMODIFY_CHANGES_DOES_NOT_EXIST,
-                    "The changes LDIF file %s does not exist");
-    registerMessage(MSGID_LDIFMODIFY_CANNOT_OPEN_CHANGES,
-                    "Unable to open the changes LDIF file %s:  %s");
-    registerMessage(MSGID_LDIFMODIFY_CANNOT_OPEN_TARGET,
-                    "Unable to open the target LDIF file %s for writing:  %s");
-    registerMessage(MSGID_LDIFMODIFY_ERROR_PROCESSING_LDIF,
-                    "An error occurred while processing the requested " +
-                    "changes:  %s");
-
-
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_HOST,
-                    "Specifies the address of the Directory Server system");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_PORT,
-                    "Specifies the port in which the Directory Server is " +
-                    "listening for LDAP client connections");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_BIND_DN,
-                    "Specifies the DN to use to bind to the server");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_BIND_PW,
-                    "Specifies the password to use to bind to the server");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_BIND_PW_FILE,
-                    "Specifies the path to a file containing the password to "+
-                    "use to bind to the server");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_AUTHZID,
-                    "Specifies the authorization ID for the user entry whose " +
-                    "password should be changed");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_PROVIDE_DN_FOR_AUTHZID,
-                    "Indicates that the bind DN should be used as the " +
-                    "authorization ID for the password modify operation");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_NEWPW,
-                    "Specifies the new password to provide for the target " +
-                    "user");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_NEWPWFILE,
-                    "Specifies the path to a file containing the new " +
-                    "password to provide for the target user");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_CURRENTPW,
-                    "Specifies the current password for the target user");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_CURRENTPWFILE,
-                    "Specifies the path to a file containing the current " +
-                    "password for the target user");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_USE_SSL,
-                    "Use SSL to secure the communication with the Directory " +
-                    "Server");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_USE_STARTTLS,
-                    "Use StartTLS to secure the communication with the " +
-                    "Directory Server");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_BLIND_TRUST,
-                    "Blindly trust any SSL certificate presented by the " +
-                    "server");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_KEYSTORE,
-                    "The path to the keystore to use when establishing " +
-                    "SSL/TLS communication with the server");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_KEYSTORE_PIN,
-                    "The PIN needed to access the contents of the keystore");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_KEYSTORE_PINFILE,
-                    "The path to a file containing the PIN needed " +
-                    "to access the contents of the keystore");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_TRUSTSTORE,
-                    "The path to the trust store to use when establishing " +
-                    "SSL/TLS communication with the server");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_PIN,
-                    "The PIN needed to access the contents of the trust " +
-                    "store");
-    registerMessage(MSGID_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_PINFILE,
-                    "The path to a file containing the PIN needed to access" +
-                    "the contents of the trust store");
-    registerMessage(MSGID_LDAPPWMOD_CONFLICTING_ARGS,
-                    "The %s and %s arguments may not be provided together");
-    registerMessage(MSGID_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER,
-                    "If either a bind DN or bind password is provided, then " +
-                    "the other must be given as well");
-    registerMessage(MSGID_LDAPPWMOD_ANON_REQUIRES_AUTHZID_AND_CURRENTPW,
-                    "If a bind DN and password are not provided, then an " +
-                    "authorization ID and current password must be given");
-    registerMessage(MSGID_LDAPPWMOD_DEPENDENT_ARGS,
-                    "If the %s argument is provided, then the  %s argument " +
-                    "must also be given");
-    registerMessage(MSGID_LDAPPWMOD_ERROR_INITIALIZING_SSL,
-                    "Unable to initialize SSL/TLS support:  %s");
-    registerMessage(MSGID_LDAPPWMOD_CANNOT_CONNECT,
-                    "An error occurred while attempting to connect to the" +
-                    "Directory Server:  %s");
-    registerMessage(MSGID_LDAPPWMOD_CANNOT_SEND_PWMOD_REQUEST,
-                    "Unable to send the LDAP password modify request:  %s");
-    registerMessage(MSGID_LDAPPWMOD_CANNOT_READ_PWMOD_RESPONSE,
-                    "Unable to read the LDAP password modify response:  %s");
-    registerMessage(MSGID_LDAPPWMOD_FAILED,
-                    "The LDAP password modify operation failed with result " +
-                    "code %d");
-    registerMessage(MSGID_LDAPPWMOD_FAILURE_ERROR_MESSAGE,
-                    "Error Message:  %s");
-    registerMessage(MSGID_LDAPPWMOD_FAILURE_MATCHED_DN,
-                    "Matched DN:  %s");
-    registerMessage(MSGID_LDAPPWMOD_SUCCESSFUL,
-                    "The LDAP password modify operation was successful");
-    registerMessage(MSGID_LDAPPWMOD_ADDITIONAL_INFO,
-                    "Additional Info:  %s");
-    registerMessage(MSGID_LDAPPWMOD_PWPOLICY_WARNING,
-                    "Password Policy Warning:  %s = %d");
-    registerMessage(MSGID_LDAPPWMOD_PWPOLICY_ERROR,
-                    "Password Policy Error:  %s");
-    registerMessage(MSGID_LDAPPWMOD_CANNOT_DECODE_PWPOLICY_CONTROL,
-                    "Unable to decode the password policy response control:  " +
-                     "%s");
-    registerMessage(MSGID_LDAPPWMOD_GENERATED_PASSWORD,
-                    "Generated Password:  %s");
-    registerMessage(MSGID_LDAPPWMOD_UNRECOGNIZED_VALUE_TYPE,
-                    "Unable to decode the password modify response value " +
-                    "because it contained an invalid element type of %s");
-    registerMessage(MSGID_LDAPPWMOD_COULD_NOT_DECODE_RESPONSE_VALUE,
-                    "Unable to decode the password modify response value:  " +
-                    "%s");
-
-
-    registerMessage(MSGID_WAIT4DEL_DESCRIPTION_TARGET_FILE,
-                    "Specifies the path to the file to watch for deletion");
-    registerMessage(MSGID_WAIT4DEL_DESCRIPTION_LOG_FILE,
-                    "Specifies the path to a file containing log output to " +
-                    "monitor");
-    registerMessage(MSGID_WAIT4DEL_DESCRIPTION_OUTPUT_FILE,
-                    "Specifies the path to a file to which the command will " +
-                    "write the output");
-    registerMessage(MSGID_WAIT4DEL_DESCRIPTION_TIMEOUT,
-                    "The maximum length of time in seconds to wait for the " +
-                    "target file to be deleted before exiting");
-    registerMessage(MSGID_WAIT4DEL_DESCRIPTION_HELP,
-                    "Displays this usage information");
-    registerMessage(MSGID_WAIT4DEL_CANNOT_OPEN_LOG_FILE,
-                    "WARNING:  Unable to open log file %s for reading:  %s");
-    registerMessage(MSGID_WAIT4DEL_CANNOT_OPEN_OUTPUT_FILE,
-                    "WARNING:  Unable to open output file %s for writing:  "+
-                    "%s");
-
-
-    registerMessage(MSGID_LDAPCOMPARE_NO_DNS,
-                    "No entry DNs provided for the compare operation");
-    registerMessage(MSGID_LDAPCOMPARE_NO_ATTR,
-                    "No attribute was specified to use as the target for " +
-                    "the comparison");
-    registerMessage(MSGID_LDAPCOMPARE_INVALID_ATTR_STRING,
-                    "Invalid attribute string '%s'.  The attribute string " +
-                    "must be in one of the following forms:  " +
-                    "'attribute:value', 'attribute::base64value', or " +
-                    "'attribute:<valueFilePath'");
-
-
-    registerMessage(MSGID_LDAPSEARCH_PSEARCH_CHANGE_TYPE,
-                    "# Persistent search change type:  %s");
-    registerMessage(MSGID_LDAPSEARCH_PSEARCH_PREVIOUS_DN,
-                    "# Persistent search previous entry DN:  %s");
-    registerMessage(MSGID_LDAPSEARCH_ACCTUSABLE_HEADER,
-                    "# Account Usability Response Control");
-    registerMessage(MSGID_LDAPSEARCH_ACCTUSABLE_IS_USABLE,
-                    "#   The account is usable");
-    registerMessage(MSGID_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_EXPIRATION,
-                    "#   Time until password expiration:  %s");
-    registerMessage(MSGID_LDAPSEARCH_ACCTUSABLE_NOT_USABLE,
-                    "#   The account is not usable");
-    registerMessage(MSGID_LDAPSEARCH_ACCTUSABLE_ACCT_INACTIVE,
-                    "#   The account has been deactivated");
-    registerMessage(MSGID_LDAPSEARCH_ACCTUSABLE_PW_RESET,
-                    "#   The password has been reset");
-    registerMessage(MSGID_LDAPSEARCH_ACCTUSABLE_PW_EXPIRED,
-                    "#   The password has expired");
-    registerMessage(MSGID_LDAPSEARCH_ACCTUSABLE_REMAINING_GRACE,
-                    "#   Number of grace logins remaining:  %d");
-    registerMessage(MSGID_LDAPSEARCH_ACCTUSABLE_LOCKED,
-                    "#   The account is locked");
-    registerMessage(MSGID_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_UNLOCK,
-                    "#   Time until the account is unlocked:  %s");
-    registerMessage(MSGID_LDAPSEARCH_SORT_ERROR,
-                    "# Server-side sort failed:  %s");
-    registerMessage(MSGID_LDAPSEARCH_CANNOT_DECODE_SORT_RESPONSE,
-                    "# Unable to decode the server-side sort response:  %s");
-    registerMessage(MSGID_LDAPSEARCH_VLV_TARGET_OFFSET,
-                    "# VLV Target Offset:  %d");
-    registerMessage(MSGID_LDAPSEARCH_VLV_CONTENT_COUNT,
-                    "# VLV Content Count:  %d");
-    registerMessage(MSGID_LDAPSEARCH_VLV_ERROR,
-                    "# Virtual list view processing failed:  %s");
-    registerMessage(MSGID_LDAPSEARCH_CANNOT_DECODE_VLV_RESPONSE,
-                    "# Unable to decode the virtual list view response:  %s");
-    registerMessage(MSGID_LDAPSEARCH_MATCHING_ENTRY_COUNT,
-                    "# Total number of matching entries:  %d");
-
-
-    registerMessage(MSGID_TOOL_CONFLICTING_ARGS,
-                    "You may not provide both the --%s and the --%s " +
-                    "arguments");
-    registerMessage(MSGID_TOOL_INVALID_CONTROL_STRING,
-                    "Invalid control specification '%s'");
-    registerMessage(MSGID_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS,
-                    "SASL EXTERNAL authentication may only be requested if " +
-                    "SSL or StartTLS is used");
-    registerMessage(MSGID_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE,
-                    "SASL EXTERNAL authentication may only be used if a " +
-                    "client certificate keystore is specified");
-    registerMessage(MSGID_TOOL_RESULT_CODE,
-                    "Result Code:  %d (%s)");
-    registerMessage(MSGID_TOOL_ERROR_MESSAGE,
-                    "Additional Information:  %s");
-    registerMessage(MSGID_TOOL_MATCHED_DN,
-                    "Matched DN:  %s");
-
-
-    registerMessage(MSGID_BACKUPDB_TOOL_DESCRIPTION,
-                    "This utility may be used to back up one or more " +
-                    "Directory Server backends");
-    registerMessage(MSGID_CONFIGDS_TOOL_DESCRIPTION,
-                    "This utility may be used to define a base configuration " +
-                    "for the Directory Server");
-    registerMessage(MSGID_ENCPW_TOOL_DESCRIPTION,
-                    "This utility may be used to encode user passwords with " +
-                    "a specified storage scheme, or to determine whether a " +
-                    "given clear-text value matches a provided encoded " +
-                    "password");
-    registerMessage(MSGID_LDIFEXPORT_TOOL_DESCRIPTION,
-                    "This utility may be used to export data from a " +
-                    "Directory Server backend in LDIF form");
-    registerMessage(MSGID_LDIFIMPORT_TOOL_DESCRIPTION,
-                    "This utility may be used to import LDIF data into a " +
-                    "Directory Server backend");
-    registerMessage(MSGID_INSTALLDS_TOOL_DESCRIPTION,
-                    "This utility may be used to define a base configuration " +
-                    "for the Directory Server");
-    registerMessage(MSGID_LDAPCOMPARE_TOOL_DESCRIPTION,
-                    "This utility may be used to perform LDAP compare " +
-                    "operations in the Directory Server");
-    registerMessage(MSGID_LDAPDELETE_TOOL_DESCRIPTION,
-                    "This utility may be used to perform LDAP delete " +
-                    "operations in the Directory Server");
-    registerMessage(MSGID_LDAPMODIFY_TOOL_DESCRIPTION,
-                    "This utility may be used to perform LDAP modify, add, " +
-                    "delete, and modify DN operations in the Directory " +
-                    "Server");
-    registerMessage(MSGID_LDAPPWMOD_TOOL_DESCRIPTION,
-                    "This utility may be used to perform LDAP password " +
-                    "modify operations in the Directory Server");
-    registerMessage(MSGID_LDAPSEARCH_TOOL_DESCRIPTION,
-                    "This utility may be used to perform LDAP search " +
-                    "operations in the Directory Server");
-    registerMessage(MSGID_LDIFDIFF_TOOL_DESCRIPTION,
-                    "This utility may be used to compare two LDIF files " +
-                    "and report the differences in LDIF format");
-    registerMessage(MSGID_LDIFMODIFY_TOOL_DESCRIPTION,
-                    "This utility may be used to apply a set of modify, add, " +
-                    "and delete operations against data in an LDIF file");
-    registerMessage(MSGID_LDIFSEARCH_TOOL_DESCRIPTION,
-                    "This utility may be used to perform search operations " +
-                    "against data in an LDIF file");
-    registerMessage(MSGID_MAKELDIF_TOOL_DESCRIPTION,
-                    "This utility may be used to generate LDIF data based on " +
-                    "a definition in a template file");
-    registerMessage(MSGID_RESTOREDB_TOOL_DESCRIPTION,
-                    "This utility may be used to restore a backup of a " +
-                    "Directory Server backend");
-    registerMessage(MSGID_STOPDS_TOOL_DESCRIPTION,
-                    "This utility may be used to request that the Directory " +
-                    "Server stop running or perform a restart");
-    registerMessage(MSGID_VERIFYINDEX_TOOL_DESCRIPTION,
-                    "This utility may be used to ensure that index data is " +
-                    "consistent within a backend based on the Berkeley DB " +
-                    "Java Edition");
-    registerMessage(MSGID_WAIT4DEL_TOOL_DESCRIPTION,
-                    "This utility may be used to wait for a file to be " +
-                    "removed from the filesystem");
-    registerMessage(MSGID_LISTBACKENDS_TOOL_DESCRIPTION,
-                    "This utility may be used to list the backends and base " +
-                    "DNs configured in the Directory Server");
-
-
-    registerMessage(MSGID_LISTBACKENDS_DESCRIPTION_BACKEND_ID,
-                    "Backend ID of the backend for which to list the base DNs");
-    registerMessage(MSGID_LISTBACKENDS_DESCRIPTION_BASE_DN,
-                    "Base DN for which to list the backend ID");
-    registerMessage(MSGID_LISTBACKENDS_DESCRIPTION_HELP,
-                    "Display this usage information");
-    registerMessage(MSGID_LISTBACKENDS_CANNOT_GET_BACKENDS,
-                    "An error occurred while trying to read backend " +
-                    "information from the server configuration:  %s");
-    registerMessage(MSGID_LISTBACKENDS_INVALID_DN,
-                    "The provided base DN value '%s' could not be parsed as " +
-                    "a valid DN:  %s");
-    registerMessage(MSGID_LISTBACKENDS_NOT_BASE_DN,
-                    "The provided DN '%s' is not a base DN for any backend " +
-                    "configured in the Directory Server");
-    registerMessage(MSGID_LISTBACKENDS_NO_BACKEND_FOR_DN,
-                    "The provided DN '%s' is not below any base DN for any " +
-                    "of the backends configured in the Directory Server");
-    registerMessage(MSGID_LISTBACKENDS_DN_BELOW_BASE,
-                    "The provided DN '%s' is below '%s' which is configured " +
-                    "as a base DN for backend '%s'");
-    registerMessage(MSGID_LISTBACKENDS_BASE_FOR_ID,
-                    "The provided DN '%s' is a base DN for backend '%s'");
-    registerMessage(MSGID_LISTBACKENDS_LABEL_BACKEND_ID,
-                    "Backend ID");
-    registerMessage(MSGID_LISTBACKENDS_LABEL_BASE_DN,
-                    "Base DN");
-    registerMessage(MSGID_LISTBACKENDS_NO_SUCH_BACKEND,
-                    "There is no backend with ID '%s' in the server " +
-                    "configuration");
-    registerMessage(MSGID_LISTBACKENDS_NO_VALID_BACKENDS,
-                    "None of the provided backend IDs exist in the server " +
-                    "configuration");
-
-
-    registerMessage(MSGID_PROMPTTM_REJECTING_CLIENT_CERT,
-                    "Rejecting client certificate chain because the prompt " +
-                    "trust manager may only be used to trust server " +
-                    "certificates");
-    registerMessage(MSGID_PROMPTTM_NO_SERVER_CERT_CHAIN,
-                    "WARNING:  The server did not present a certificate " +
-                    "chain.  Do you still wish to attempt connecting to the " +
-                    "target server?");
-    registerMessage(MSGID_PROMPTTM_CERT_EXPIRED,
-                    "WARNING:  The server certificate is expired (expiration " +
-                    "time:  %s)");
-    registerMessage(MSGID_PROMPTTM_CERT_NOT_YET_VALID,
-                    "WARNING:  The server certificate will not be valid " +
-                    "until %s");
-    registerMessage(MSGID_PROMPTTM_SERVER_CERT,
-                    "The server is using the following certificate:  " + EOL +
-                    "    Subject DN:  %s" + EOL +
-                    "    Issuer DN:  %s" + EOL +
-                    "    Validity:  %s through %s" + EOL +
-                    "Do you wish to trust this certificate and continue " +
-                    "connecting to the server?");
-    registerMessage(MSGID_PROMPTTM_YESNO_PROMPT,
-                    "Please enter \"yes\" or \"no\":  ");
-    registerMessage(MSGID_PROMPTTM_USER_REJECTED,
-                    "The server certificate has been rejected by the user");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_NOT_FOUND,
-                    "Could not find the service name for OpenDS");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_START_ERROR,
-                    "An unexpected error occurred starting OpenDS as a "+
-                    "windows service");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_STOP_ERROR,
-                    "An unexpected error occurred stopping the OpenDS "+
-                    "windows service");
-
-    registerMessage(MSGID_CONFIGURE_WINDOWS_SERVICE_TOOL_DESCRIPTION,
-                    "This utility may be used to configure OpenDS as a "+
-                    "Windows service");
-
-    registerMessage(MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_SHOWUSAGE,
-                    "Display this usage information");
-
-    registerMessage(MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_ENABLE,
-                    "Enables OpenDS as a Windows service");
-
-    registerMessage(MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_DISABLE,
-                    "Disables OpenDS as a Windows service and stops the "+
-                    "server");
-
-    registerMessage(MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_STATE,
-                    "Provides information about the state of OpenDS as a "+
-                    "Windows service");
-
-    registerMessage(MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_CLEANUP,
-                    "Allows to disable the OpenDS service and to clean up the "+
-                    "windows registry information associated with the "+
-                    "provided service name");
-
-    registerMessage(MSGID_CONFIGURE_WINDOWS_SERVICE_TOO_MANY_ARGS,
-                    "You can only provide one of the following arguments:"+
-                    EOL+"enableService, disableService, serviceState or "+
-                    "cleanupService");
-
-    registerMessage(MSGID_CONFIGURE_WINDOWS_SERVICE_TOO_FEW_ARGS,
-                    "You must provide at least one of the following arguments:"+
-                    EOL+"enableService, disableService or serviceState or "+
-                    "cleanupService");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_NAME,
-                    "OpenDS");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_DESCRIPTION,
-                    "Open source Next Generation Directory Server.  "+
-                    "Installation path: %s");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_SUCCESSULLY_ENABLED,
-                    "OpenDS was successfully enabled as a Windows service");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_ALREADY_ENABLED,
-                    "OpenDS was already enabled as a Windows service");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_NAME_ALREADY_IN_USE,
-                    "OpenDS could not enabled as a Windows service.  The "+
-                    "service name is already in use");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_ENABLE_ERROR,
-                    "An unexpected error occurred trying to enable OpenDS as "+
-                    "a Windows service");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_SUCCESSULLY_DISABLED,
-                    "OpenDS was successfully disabled as a Windows service");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_ALREADY_DISABLED,
-                    "OpenDS was already disabled as a Windows service");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_MARKED_FOR_DELETION,
-                    "OpenDS has been marked for deletion as a Windows "+
-                    "Service");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_DISABLE_ERROR,
-                    "An unexpected error occurred trying to disable OpenDS as "+
-                    "a Windows service");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_ENABLED,
-                    "OpenDS is enabled as a Windows service.  The service "+
-                    "name for OpenDS is: %s");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_DISABLED,
-                    "OpenDS is disabled as a Windows service");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_STATE_ERROR,
-                    "An unexpected error occurred trying to retrieve the "+
-                    "state of OpenDS as a Windows service");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_CLEANUP_SUCCESS,
-                    "Clean up of service %s was successful");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_CLEANUP_NOT_FOUND,
-                    "Could not find the service with name %s");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_CLEANUP_ERROR,
-                    "An unexpected error occurred cleaning up the service %s");
-
-    registerMessage(MSGID_WINDOWS_SERVICE_CLEANUP_MARKED_FOR_DELETION,
-                    "Service %s has been marked for deletion");
-
-    registerMessage(MSGID_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND,
-                    "An error occurred while attempting to acquire a shared " +
-                    "lock for backend %s:  %s.  This generally means that " +
-                    "some other process has an exclusive lock on this " +
-                    "backend (e.g., an LDIF import or a restore). The rebuild" +
-                    "process cannot continue");
-
-    registerMessage(MSGID_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND,
-                    "An error occurred while attempting to acquire a " +
-                    "exclusive lock for backend %s:  %s.  This generally " +
-                    "means that some other process has an lock " +
-                    "on this backend or the server is running with this " +
-                    "backend online. The rebuild process cannot continue");
-
-    registerMessage(MSGID_REBUILDINDEX_CANNOT_UNLOCK_BACKEND,
-                    "An error occurred while attempting to release the " +
-                    "shared lock for backend %s:  %s.  This lock should " +
-                    "automatically be cleared when the rebuild process " +
-                    "exits, so no further action should be required");
-
-    registerMessage(MSGID_LDIFIMPORT_CANNOT_READ_FILE,
-                    "The specified LDIF file %s cannot be read");
-
-    registerMessage(MSGID_DESCRIPTION_EFFECTIVERIGHTS_USER,
-                    "Use geteffectiverights control with the provided " +
-                    "authzid");
-
-    registerMessage(MSGID_DESCRIPTION_EFFECTIVERIGHTS_ATTR,
-                    "Specifies geteffectiverights control specific " +
-                    "attribute list");
-
-    registerMessage(MSGID_EFFECTIVERIGHTS_INVALID_AUTHZID,
-                    "The authorization ID \"%s\" contained in the " +
-                    "geteffectiverights control is invalid because it does" +
-                    " not start with \"dn:\" to indicate a user DN");
-
-    registerMessage(MSGID_DESCRIPTION_PRODUCT_VERSION,
-                   "Display Directory Server version information");
-
-    registerMessage(MSGID_DSCFG_ERROR_CANNOT_READ_LDAP_BIND_PASSWORD,
-                    "The LDAP bind password could not be read due to the" +
-                    " following error: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_CANNOT_READ_CONSOLE_INPUT,
-                    "The response could not be read from the console due " +
-                    "to the following error: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_BIND_PASSWORD_NONINTERACTIVE,
-                    "The LDAP bind password was not specified and " +
-                    "cannot be read interactively");
-
-    registerMessage(MSGID_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT,
-                    "Unable to connect to the server at %s on port %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_LDAP_SIMPLE_BIND_FAILED,
-                    "Unable to authenticate to the server as %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_LDAP_SIMPLE_BIND_NOT_SUPPORTED,
-                    "Unable to authenticate using simple authentication");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_SUBCMD_CREATE,
-                    "Creates %s");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_SUBCMD_DELETE,
-                    "Deletes %s");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_SUBCMD_LIST,
-                    "Lists existing %s");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_SUBCMD_GETPROP,
-                    "Shows %s properties");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_SUBCMD_SETPROP,
-                    "Modifies %s properties");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_SUBCMD_HELPPROP,
-                    "Describes managed objects and their properties");
-
-    registerMessage(MSGID_DSCFG_ERROR_MISSING_SUBCOMMAND,
-                    "A sub-command must be specified");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_NAME,
-                    "The name of the %s");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_NAME_CREATE,
-                    "The name of the new %s");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_NAME_CREATE_EXT,
-                    "The name of the new %s which will also be used as the " +
-                    "value of the \"%s\" property: %s");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_HELP_TYPE,
-                    "The type of components whose properties should be " +
-                    "described. The value for TYPE must be one of the " +
-                    "component types associated with the CATEGORY specified " +
-                    "using the \"--category\" option");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_HELP_CATEGORY,
-                    "The category of components whose properties should be " +
-                    "described");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_HELP_INHERITED,
-                    "Modifies the display output to show the inherited " +
-                    "properties of components");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_TYPE,
-                    "The type of %s which should be created. The value " +
-                    "for TYPE can be one of: %s");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_TYPE_DEFAULT,
-                    "The type of %s which should be created (Default: %s). " +
-                    "The value for TYPE can be one of: %s");
-
-    registerMessage(MSGID_DSCFG_CREATE_TYPE_PROMPT,
-                    "Select the type of %s that you want to create:");
-
-    registerMessage(MSGID_DSCFG_CREATE_NAME_PROMPT,
-                    "Enter a name for the %s that you want to create:");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_PROP,
-                    "The name of a property to be displayed");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_PROP_VAL,
-                    "Assigns a value to a property where PROP is the name of " +
-                    "the property and VAL is the single value to be " +
-                    "assigned. Specify the same property multiple times " +
-                    "in order to assign more than one value to it");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_REMOVE_PROP_VAL,
-                    "Removes a single value from a property where PROP is " +
-                    "the name of the property and VAL is the single value " +
-                    "to be removed");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_ADD_PROP_VAL,
-                    "Adds a single value to a property where PROP is " +
-                    "the name of the property and VAL is the single value " +
-                    "to be added");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_RESET_PROP,
-                    "Resets a property back to its default values where PROP " +
-                    "is the name of the property to be reset");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_RECORD,
-                    "Modifies the display output to show one property " +
-                    "value per line");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_ADVANCED_GET,
-                    "Modifies the display output to show the advanced " +
-                    "properties of the %s");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_ADVANCED_SET,
-                    "Allows the configuration of advanced properties " +
-                    "during interactive mode");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_ADVANCED_HELP,
-                    "Modifies the display output to show the advanced " +
-                    "properties of components");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_FORCE, "Ignore non-existent %s");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_UNIT_TIME,
-                    "Display time data using the specified unit. The value " +
-                    "for UNIT can be one of ms, s, m, h, d, or w " +
-                    "(milliseconds, seconds, minutes, hours, days, or weeks)");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_UNIT_SIZE,
-                    "Display size data using the specified unit. The value " +
-                    "for UNIT can be one of b, kb, mb, gb, or tb (bytes, " +
-                    "kilobytes, megabytes, gigabytes, or terabytes)");
-
-    registerMessage(MSGID_DSCFG_ERROR_TIME_UNIT_UNRECOGNIZED,
-                    "The time unit \"%s\" is invalid. The valid time units " +
-                    "are ms, s, m, h, d, or w (milliseconds, seconds, " +
-                    "minutes, hours, days, or weeks)");
-
-    registerMessage(MSGID_DSCFG_ERROR_SIZE_UNIT_UNRECOGNIZED,
-                    "The size unit \"%s\" is invalid. The valid size units " +
-                    "are b, kb, mb, gb, or tb (bytes, kilobytes, " +
-                    "megabytes, gigabytes, or terabytes)");
-
-    registerMessage(MSGID_DSCFG_ERROR_NO_PASSWORD,
-                    "No password was specified for administrator \"%s\"");
-
-    registerMessage(MSGID_DSCFG_ERROR_PROPERTY_UNRECOGNIZED,
-                    "The property \"%s\" is not a recognized property of %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_PROPERTY_UNRECOGNIZED_NO_DEFN,
-                    "The property \"%s\" is not a recognized property");
-
-    registerMessage(MSGID_DSCFG_ERROR_PROPERTY_INVALID_VALUE,
-                    "The value \"%s\" is not a valid value for the %s " +
-                    "property \"%s\" which has the following syntax: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_PROPERTY_READ_ONLY,
-                    "The %s property \"%s\" is read-only and cannot " +
-                    "be modified");
-
-    registerMessage(MSGID_DSCFG_ERROR_PROPERTY_MANDATORY,
-                    "The %s property \"%s\" is mandatory and must " +
-                    "be specified");
-
-    registerMessage(MSGID_DSCFG_ERROR_UNABLE_TO_RESET_MANDATORY_PROPERTY,
-                    "The %s property \"%s\" is mandatory cannot be reset. " +
-                    "Use the \"%s\" option to specify a new value");
-
-    registerMessage(MSGID_DSCFG_ERROR_UNABLE_TO_SET_NAMING_PROPERTY,
-                    "The property \"%s\" cannot be set as it is defined " +
-                    "implicitly by the name of the %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_PROPERTY_SINGLE_VALUED,
-                    "It is not possible to specify multiple values for the " +
-                    "%s property \"%s\" as it is single-valued");
-
-    registerMessage(MSGID_DSCFG_ERROR_PROPERTY_UNKNOWN_ERROR,
-                    "The value(s) of the %s property \"%s\" could not be " +
-                    "determined due to an unknown error: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_PROPERTY_DEFAULT_BEHAVIOR,
-                    "The default value(s) of the %s property \"%s\" could " +
-                    "not be determined due to the following reason: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_PROPERTY_INHERITED_DEFAULT_BEHAVIOR,
-                    "The inherited default value(s) of the %s property " +
-                    "\"%s\" could not be determined");
-
-    registerMessage(MSGID_DSCFG_ERROR_ILLEGAL_NAME_EMPTY,
-                    "Empty names are not permitted for %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_ILLEGAL_NAME_BLANK,
-                    "Blank names are not permitted for %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_ILLEGAL_NAME_SYNTAX,
-                    "The name \"%s\" is not a valid name for the %s " +
-                    "which has the following syntax: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_ILLEGAL_NAME_UNKNOWN,
-                    "The name \"%s\" is not a valid name for the %s");
-
-    registerMessage(MSGID_DSCFG_HEADING_COMPONENT_NAME,
-                    "Component");
-
-    registerMessage(MSGID_DSCFG_HEADING_COMPONENT_TYPE,
-                    "Type");
-
-    registerMessage(MSGID_DSCFG_HEADING_PROPERTY_NAME,
-                    "Property");
-
-    registerMessage(MSGID_DSCFG_HEADING_PROPERTY_VALUE,
-                    "Value(s)");
-
-    registerMessage(MSGID_DSCFG_HEADING_PROPERTY_SYNTAX,
-                    "Syntax");
-
-    registerMessage(MSGID_DSCFG_HEADING_PROPERTY_OPTIONS,
-                    "Options");
-
-    registerMessage(MSGID_DSCFG_HEADING_PROPERTY_DEFAULT,
-                    "Default");
-
-    registerMessage(MSGID_DSCFG_HEADING_PROPERTY_DESCRIPTION,
-                    "Description");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_PROPERTY_SYNTAX_HELP,
-                    "See detailed help");
-
-    registerMessage(MSGID_DSCFG_ERROR_CREATE_MOAEE,
-                    "The %s could not be created because there is " +
-                    "already an existing one with the same name");
-
-    registerMessage(MSGID_DSCFG_ERROR_CREATE_NAME_ALREADY_EXISTS,
-                    "There is already another %s with the name \"%s\"");
-
-    registerMessage(MSGID_DSCFG_ERROR_CREATE_MMPE,
-                    "The %s could not be created because the " +
-                    "following mandatory properties must be defined: %s");
-
-
-    registerMessage(MSGID_DSCFG_ERROR_CREATE_AUTHZ,
-                    "The %s could not be created because you do " +
-                    "not have the correct authorization");
-
-    registerMessage(MSGID_DSCFG_ERROR_CREATE_CE,
-                    "The %s could not be created due to a " +
-                    "communications problem: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_CREATE_CME,
-                    "The %s could not be created because another " +
-                    "client is currently making conflicting configuration " +
-                    "changes");
-
-    registerMessage(MSGID_DSCFG_ERROR_CREATE_ORE,
-                    "The server prevented the %s from being created " +
-                    "because of the following reason: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_DELETE_MONFE,
-                    "The %s could not be deleted because it does not exist");
-
-
-    registerMessage(MSGID_DSCFG_ERROR_DELETE_AUTHZ,
-                    "The %s could not be deleted because you do " +
-                    "not have the correct authorization");
-
-    registerMessage(MSGID_DSCFG_ERROR_DELETE_ORE,
-                    "The server prevented the %s from being deleted " +
-                    "because of the following reason: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_DELETE_CE,
-                    "The %s could not be deleted due to a " +
-                    "communications problem: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_DELETE_CME,
-                    "The %s could not be deleted because another " +
-                    "client is currently making conflicting configuration " +
-                    "changes");
-
-    registerMessage(MSGID_DSCFG_ERROR_LIST_DDE,
-                    "The %s could not be retrieved because its type could " +
-                    "not be determined. This is probably due to the %s " +
-                    "having an invalid LDAP entry. Check that the %s " +
-                    "object classes are correct");
-
-    registerMessage(MSGID_DSCFG_ERROR_LIST_MODE,
-                    "The %s could not be retrieved because of the " +
-                    "reasons listed below:");
-
-    registerMessage(MSGID_DSCFG_ERROR_LIST_MONFE,
-                    "The %s does not exist");
-
-    registerMessage(MSGID_DSCFG_ERROR_LIST_AUTHZ,
-                    "The %s could not be listed because you do " +
-                    "not have the correct authorization");
-
-    registerMessage(MSGID_DSCFG_ERROR_LIST_CE,
-                    "The %s could not be listed due to a " +
-                    "communications problem: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_LIST_CME,
-                    "The %s could not be listed because another " +
-                    "client is currently making conflicting configuration " +
-                    "changes");
-
-    registerMessage(MSGID_DSCFG_ERROR_MODIFY_MONFE,
-                    "The %s could not be modified because it does not exist");
-
-    registerMessage(MSGID_DSCFG_ERROR_MODIFY_AUTHZ,
-                    "The %s could not be modified because you do " +
-                    "not have the correct authorization");
-
-    registerMessage(MSGID_DSCFG_ERROR_MODIFY_CE,
-                    "The %s could not be modified due to a " +
-                    "communications problem: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_MODIFY_CME,
-                    "The %s could not be modified because another " +
-                    "client is currently making conflicting configuration " +
-                    "changes");
-
-    registerMessage(MSGID_DSCFG_ERROR_MODIFY_ORE,
-                    "The server prevented the %s from being modified " +
-                    "because of the following reason: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_CHILD_DDE,
-                    "The %s could not be retrieved because its type could " +
-                    "not be determined. This is probably due to the %s " +
-                    "having an invalid LDAP entry. Check that the %s " +
-                    "object classes are correct");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_CHILD_MODE,
-                    "The %s could not be retrieved because of the " +
-                    "reasons listed below:");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_CHILD_MONFE,
-                    "The %s does not exist");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_CHILD_AUTHZ,
-                    "The %s could not be accessed because you do " +
-                    "not have the correct authorization");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_CHILD_CE,
-                    "The %s could not be accessed due to a " +
-                    "communications problem: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_CHILD_CME,
-                    "The %s could not be accessed because another " +
-                    "client is currently making conflicting configuration " +
-                    "changes");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_PARENT_DDE,
-                    "The parent %s could not be retrieved because its " +
-                    "type could not be determined. This is probably due " +
-                    "to the %s having an invalid LDAP entry. Check that " +
-                    "the %s has the correct object classes");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_PARENT_MODE,
-                    "The parent %s could not be retrieved because of the " +
-                    "reasons listed below:");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_PARENT_MONFE,
-                    "The parent %s does not exist");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_PARENT_AUTHZ,
-                    "The parent %s could not be retrieved because you do " +
-                    "not have the correct authorization");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_PARENT_CE,
-                    "The parent %s could not be retrieved due to a " +
-                    "communications problem: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_GET_PARENT_CME,
-                    "The parent %s could not be retrieved because another " +
-                    "client is currently making conflicting configuration " +
-                    "changes");
-
-    registerMessage(MSGID_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_VALUE,
-                    "The property argument \"%s\" does not contain a " +
-                    "name/value separator. The argument should have the " +
-                    "following syntax: property:value");
-
-    registerMessage(MSGID_DSCFG_ERROR_NO_NAME_IN_PROPERTY_VALUE,
-                    "The property argument \"%s\" does not contain a " +
-                    "property name. The argument should have the " +
-                    "following syntax: property:value");
-
-    registerMessage(MSGID_DSCFG_ERROR_NO_VALUE_IN_PROPERTY_VALUE,
-                    "The property argument \"%s\" does not contain a " +
-                    "property value. The argument should have the " +
-                    "following syntax: property:value");
-
-    registerMessage(MSGID_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_MOD,
-                    "The property modification \"%s\" does not contain a " +
-                    "name/value separator. The argument should have the " +
-                    "following syntax: property[+|-]:value");
-
-    registerMessage(MSGID_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD,
-                    "The property modification \"%s\" does not contain a " +
-                    "property name. The argument should have the " +
-                    "following syntax: property[+|-]:value");
-
-    registerMessage(MSGID_DSCFG_ERROR_NO_VALUE_IN_PROPERTY_MOD,
-                    "The property modification \"%s\" does not contain a " +
-                    "property value. The argument should have the " +
-                    "following syntax: property[+|-]:value");
-
-    registerMessage(MSGID_DSCFG_ERROR_INCOMPATIBLE_PROPERTY_MOD,
-                    "The property modification \"%s\" is incompatible" +
-                    " with a previous modification to the same property");
-
-    registerMessage(MSGID_DSCFG_ERROR_MISSING_NON_INTERACTIVE_ARG,
-                    "The argument \"--%s\" must be specified when " +
-                    "this application is used non-interactively");
-
-    registerMessage(MSGID_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED,
-                    "The sub-type \"%s\" is not a recognized type of %s. " +
-                    "It should be one of: %s");
-
-    registerMessage(MSGID_DSCFG_ERROR_TYPE_UNRECOGNIZED,
-                    "\"%s\" is not a recognized component type");
-
-    registerMessage(MSGID_DSCFG_ERROR_CATEGORY_UNRECOGNIZED,
-                    "\"%s\" is not a recognized component category");
-
-    registerMessage(MSGID_DSCFG_ERROR_CATEGORY_TYPE_UNRECOGNIZED,
-                    "\"%s\" is not a recognized component type in " +
-                    "category \"%s\"");
-
-    registerMessage(MSGID_DSCFG_ERROR_WRONG_MANAGED_OBJECT_TYPE,
-                    "The %s could not be retrieved because it was the " +
-                    "wrong type of managed object: %s ");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE,
-                    "Display subcommands relating to %s");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_ALL,
-                    "Display all subcommands");
-
-    registerMessage(MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_SUMMARY,
-                    "Display summary usage information");
-
-    registerMessage(MSGID_UPGRADE_DESCRIPTION_FILE,
-                    "Specifies an existing OpenDS package (.zip) file to "+
-                    "which the current build will be upgraded using the "+
-                    "command line version of this tool");
-
-    registerMessage(MSGID_UPGRADE_DESCRIPTION_INTERACTIVE,
-                    "Prompt for any required information rather than fail");
-
-    registerMessage(MSGID_UPGRADE_DESCRIPTION_SILENT,
-                    "Perform a silent upgrade");
-
-    registerMessage(MSGID_PWPSTATE_TOOL_DESCRIPTION,
-                    "This utility may be used to retrieve and manipulate " +
-                    "the values of password policy state variables");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_HOST,
-                    "Directory server hostname or IP address");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_PORT,
-                    "Directory server port number");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_USESSL,
-                    "Use SSL for secure communication with the server");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_USESTARTTLS,
-                    "Use StartTLS to secure communication with the server");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_BINDDN,
-                    "The DN to use to bind to the server");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_BINDPW,
-                    "The password to use to bind to the server");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_BINDPWFILE,
-                    "The path to the file containing the bind password");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_TARGETDN,
-                    "The DN of the user entry for which to get and set " +
-                    "password policy state information");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_SASLOPTIONS,
-                    "SASL bind options");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_TRUST_ALL,
-                    "Trust all server SSL certificates");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_KSFILE,
-                    "Certificate keystore path");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_KSPW,
-                    "Certificate keystore PIN");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_KSPWFILE,
-                    "Certificate keystore PIN file");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_TSFILE,
-                    "Certificate trust store path");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_TSPW,
-                    "Certificate trust store PIN");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_TSPWFILE,
-                    "Certificate trust store PIN file");
-    registerMessage(MSGID_PWPSTATE_DESCRIPTION_SHOWUSAGE,
-                    "Display this usage information");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_ALL,
-                    "Display all password policy state information for the " +
-                    "user");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_POLICY_DN,
-                    "Display the DN of the password policy for the user");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_ACCOUNT_DISABLED_STATE,
-                    "Display information about whether the user account has " +
-                    "been administratively disabled");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_SET_ACCOUNT_DISABLED_STATE,
-                    "Specify whether the user account has been " +
-                    "administratively disabled");
-    registerMessage(MSGID_DESCRIPTION_OPERATION_BOOLEAN_VALUE,
-                    "'true' to indicate that the account is disabled, or " +
-                    "'false' to indicate that it is not disabled");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_CLEAR_ACCOUNT_DISABLED_STATE,
-                    "Clear account disabled state information from the user " +
-                    "account");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_ACCOUNT_EXPIRATION_TIME,
-                    "Display when the user account will expire");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_SET_ACCOUNT_EXPIRATION_TIME,
-                    "Specify when the user account will expire");
-    registerMessage(MSGID_DESCRIPTION_OPERATION_TIME_VALUE,
-                    "A timestamp value using the generalized time syntax");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_CLEAR_ACCOUNT_EXPIRATION_TIME,
-                    "Clear account expiration time information from the user " +
-                    "account");
-    registerMessage(
-         MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_ACCOUNT_EXPIRATION,
-         "Display the length of time in seconds until the user account " +
-         "expires");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_CHANGED_TIME,
-                    "Display the time that the user's password was last " +
-                    "changed");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_SET_PASSWORD_CHANGED_TIME,
-                    "Specify the time that the user's password was last " +
-                    "changed.  This should be used only for testing purposes");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_CHANGED_TIME,
-                    "Clear information about the time that the user's " +
-                    "password was last changed.  This should be used only " +
-                    "for testing purposes");
-    registerMessage(
-         MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_EXPIRATION_WARNED_TIME,
-         "Display the time that the user first received an expiration " +
-         "warning notice");
-    registerMessage(
-         MSGID_DESCRIPTION_PWPSTATE_SET_PASSWORD_EXPIRATION_WARNED_TIME,
-         "Specify the time that the user first received an expiration " +
-         "warning notice.  This should be used only for testing purposes");
-    registerMessage(
-         MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_EXPIRATION_WARNED_TIME,
-         "Clear information about the time that the user first received an " +
-         "expiration warning notice.  This should be used only for testing " +
-         "purposes");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_PASSWORD_EXP,
-                    "Display length of time in seconds until the user's " +
-                    "password expires");
-    registerMessage(
-         MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_PASSWORD_EXP_WARNING,
-         "Display the length of time in seconds until the user should start " +
-         "receiving password expiration warning notices");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_AUTH_FAILURE_TIMES,
-                    "Display the authentication failure times for the user");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_ADD_AUTH_FAILURE_TIME,
-                    "Add an authentication failure time to the user " +
-                    "account.  This should be used only for testing purposes");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_SET_AUTH_FAILURE_TIMES,
-                    "Specify the authentication failure times for the user.  " +
-                    "This should be used only for testing purposes");
-    registerMessage(MSGID_DESCRIPTION_OPERATION_TIME_VALUES,
-                    "A timestamp value using the generalized time syntax.  " +
-                    "Multiple timestamp values may be given by providing " +
-                    "this argument multiple times");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_CLEAR_AUTH_FAILURE_TIMES,
-                    "Clear authentication failure time information from the " +
-                    "user's account.  This should be used only for testing " +
-                    "purposes");
-    registerMessage(
-         MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_AUTH_FAILURE_UNLOCK,
-         "Display the length of time in seconds until the authentication " +
-         "failure lockout expires");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_REMAINING_AUTH_FAILURE_COUNT,
-                    "Display the number of remaining authentication failures " +
-                    "until the user's account is locked");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_LAST_LOGIN_TIME,
-                    "Display the time that the user last authenticated to " +
-                    "the server");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_SET_LAST_LOGIN_TIME,
-                    "Specify the time that the user last authenticated to " +
-                    "the server.  This should be used only for testing " +
-                    "purposes");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_CLEAR_LAST_LOGIN_TIME,
-                    "Clear the time that the user last authenticated to the " +
-                    "server.  This should be used only for testing purposes");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_IDLE_LOCKOUT,
-                    "Display the length of time in seconds until user's " +
-                    "account is locked because it has remained idle for " +
-                    "too long");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_RESET_STATE,
-                    "Display information about whether the user will be " +
-                    "required to change his or her password on the next " +
-                    "successful authentication");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_SET_PASSWORD_RESET_STATE,
-                    "Specify whether the user will be required to change his " +
-                    "or her password on the next successful authentication.  " +
-                    "This should be used only for testing purposes");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_RESET_STATE,
-                    "Clear information about whether the user will be " +
-                    "required to change his or her password on the next " +
-                    "successful authentication.  This should be used only " +
-                    "for testing purposes");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_RESET_LOCKOUT,
-                    "Display the length of time in seconds until user's " +
-                    "account is locked because the user failed to change the " +
-                    "password in a timely manner after an administrative " +
-                    "reset");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_GRACE_LOGIN_USE_TIMES,
-                    "Display the grace login use times for the user");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_ADD_GRACE_LOGIN_USE_TIME,
-                    "Add a grace login use time to the user account.  This " +
-                    "should be used only for testing purposes");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_SET_GRACE_LOGIN_USE_TIMES,
-                    "Specify the grace login use times for the user.  This " +
-                    "should be used only for testing purposes");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_CLEAR_GRACE_LOGIN_USE_TIMES,
-                    "Clear the set of grace login use times for the user.  " +
-                    "This should be used only for testing purposes");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_REMAINING_GRACE_LOGIN_COUNT,
-                    "Display the number of grace logins remaining for the " +
-                    "user");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_PW_CHANGED_BY_REQUIRED_TIME,
-                    "Display the required password change time with which " +
-                    "the user last complied");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_SET_PW_CHANGED_BY_REQUIRED_TIME,
-                    "Specify the required password change time with which " +
-                    "the user last complied.  This should be used only for " +
-                    "testing purposes");
-    registerMessage(
-         MSGID_DESCRIPTION_PWPSTATE_CLEAR_PW_CHANGED_BY_REQUIRED_TIME,
-         "Clear information about the required password change time with " +
-         "which the user last complied.  This should be used only for " +
-         "testing purposes");
-    registerMessage(
-         MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_REQUIRED_CHANGE_TIME,
-         "Display the length of time in seconds that the user has remaining " +
-         "to change his or her password before the account becomes locked " +
-         "due to the required change time");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_HISTORY,
-                    "Display password history state values for the user");
-    registerMessage(MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_HISTORY,
-                    "Clear password history state values for the user.  This " +
-                    "should be used only for testing purposes");
-    registerMessage(MSGID_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS,
-                    "ERROR:  You may not provide both the %s and the %s " +
-                    "arguments");
-    registerMessage(MSGID_PWPSTATE_CANNOT_INITIALIZE_SSL,
-                    "ERROR:  Unable to perform SSL initialization:  %s");
-    registerMessage(MSGID_PWPSTATE_CANNOT_PARSE_SASL_OPTION,
-                    "ERROR:  The provided SASL option string \"%s\" could " +
-                    "not be parsed in the form \"name=value\"");
-    registerMessage(MSGID_PWPSTATE_NO_SASL_MECHANISM,
-                    "ERROR:  One or more SASL options were provided, but " +
-                    "none of them were the \"mech\" option to specify which " +
-                    "SASL mechanism should be used");
-    registerMessage(MSGID_PWPSTATE_CANNOT_DETERMINE_PORT,
-                    "ERROR:  Cannot parse the value of the %s argument as " +
-                    "an integer value between 1 and 65535:  %s");
-    registerMessage(MSGID_PWPSTATE_CANNOT_CONNECT,
-                    "ERROR:  Cannot establish a connection to the " +
-                    "Directory Server:  %s");
-    registerMessage(MSGID_PWPSTATE_NO_SUBCOMMAND,
-                    "No subcommand was provided to indicate which password " +
-                    "policy state operation should be performed");
-    registerMessage(MSGID_PWPSTATE_INVALID_BOOLEAN_VALUE,
-                    "The provided value '%s' was invalid for the requested " +
-                    "operation.  A Boolean value of either 'true' or 'false' " +
-                    "was expected");
-    registerMessage(MSGID_PWPSTATE_NO_BOOLEAN_VALUE,
-                    "No value was specified, but the requested operation " +
-                    "requires a Boolean value of either 'true' or 'false'");
-    registerMessage(MSGID_PWPSTATE_INVALID_SUBCOMMAND,
-                    "Unrecognized subcommand '%s'");
-    registerMessage(MSGID_PWPSTATE_CANNOT_SEND_REQUEST_EXTOP,
-                    "An error occurred while attempting to send the request " +
-                    "to the server:  %s");
-    registerMessage(MSGID_PWPSTATE_CONNECTION_CLOSED_READING_RESPONSE,
-                    "The Directory Server closed the connection before the " +
-                    "response could be read");
-    registerMessage(MSGID_PWPSTATE_REQUEST_FAILED,
-                    "The server was unable to process the request:  result " +
-                    "code %d (%s), error message '%s'");
-    registerMessage(MSGID_PWPSTATE_CANNOT_DECODE_RESPONSE_MESSAGE,
-                    "The server was unable to decode the response message " +
-                    "from the server:  %s");
-    registerMessage(MSGID_PWPSTATE_CANNOT_DECODE_RESPONSE_OP,
-                    "Unable to decode information about an operation " +
-                    "contained in the response:  %s");
-    registerMessage(MSGID_PWPSTATE_LABEL_PASSWORD_POLICY_DN,
-                    "Password Policy DN");
-    registerMessage(MSGID_PWPSTATE_LABEL_ACCOUNT_DISABLED_STATE,
-                    "Account Is Disabled");
-    registerMessage(MSGID_PWPSTATE_LABEL_ACCOUNT_EXPIRATION_TIME,
-                    "Account Expiration Time");
-    registerMessage(MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_ACCOUNT_EXPIRATION,
-                    "Seconds Until Account Expiration");
-    registerMessage(MSGID_PWPSTATE_LABEL_PASSWORD_CHANGED_TIME,
-                    "Password Changed Time");
-    registerMessage(MSGID_PWPSTATE_LABEL_PASSWORD_EXPIRATION_WARNED_TIME,
-                    "Password Expiration Warned Time");
-    registerMessage(MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_EXPIRATION,
-                    "Seconds Until Password Expiration");
-    registerMessage(
-         MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_EXPIRATION_WARNING,
-         "Seconds Until Password Expiration Warning");
-    registerMessage(MSGID_PWPSTATE_LABEL_AUTH_FAILURE_TIMES,
-                    "Authentication Failure Times");
-    registerMessage(MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_AUTH_FAILURE_UNLOCK,
-                    "Seconds Until Authentication Failure Unlock");
-    registerMessage(MSGID_PWPSTATE_LABEL_REMAINING_AUTH_FAILURE_COUNT,
-                    "Remaining Authentication Failure Count");
-    registerMessage(MSGID_PWPSTATE_LABEL_LAST_LOGIN_TIME,
-                    "Last Login Time");
-    registerMessage(MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_IDLE_LOCKOUT,
-                    "Seconds Until Idle Account Lockout");
-    registerMessage(MSGID_PWPSTATE_LABEL_PASSWORD_RESET_STATE,
-                    "Password Is Reset");
-    registerMessage(MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_RESET_LOCKOUT,
-                    "Seconds Until Password Reset Lockout");
-    registerMessage(MSGID_PWPSTATE_LABEL_GRACE_LOGIN_USE_TIMES,
-                    "Grace Login Use Times");
-    registerMessage(MSGID_PWPSTATE_LABEL_REMAINING_GRACE_LOGIN_COUNT,
-                    "Remaining Grace Login Count");
-    registerMessage(MSGID_PWPSTATE_LABEL_PASSWORD_CHANGED_BY_REQUIRED_TIME,
-                    "Password Changed by Required Time");
-    registerMessage(MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_REQUIRED_CHANGE_TIME,
-                    "Seconds Until Required Change Time");
-    registerMessage(MSGID_PWPSTATE_LABEL_PASSWORD_HISTORY,
-                    "Password History");
-    registerMessage(MSGID_PWPSTATE_INVALID_RESPONSE_OP_TYPE,
-                    "Unrecognized or invalid operation type:  %s");
-
-    registerMessage(MSGID_CLI_ERROR_PROPERTY_UNRECOGNIZED,
-                    "The property \"%s\" is not a recognized property");
-    registerMessage(MSGID_CLI_ERROR_MISSING_PROPERTY,
-                    "The mandatory property \"%s\" is missing");
-    registerMessage(MSGID_CLI_ERROR_INVALID_PROPERTY_VALUE,
-                    "The value \"%s\" specified fo the property \"%s\" is " +
-                    "invalid");
-    registerMessage(MSGID_CLI_HEADING_PROPERTY_DEFAULT_VALUE,
-                    "Default value");
-    registerMessage(MSGID_REVERT_DESCRIPTION_DIRECTORY,
-                    "Directory where reversion files are stored.  This " +
-                    "should be one of the child directories of the 'history' " +
-                    "directory that is created when the upgrade tool is run");
-    registerMessage(MSGID_REVERT_DESCRIPTION_RECENT,
-                    "Indicates that the installation will be reverted to the " +
-                    "state before the most recent upgrade");
-    registerMessage(MSGID_REVERT_DESCRIPTION_INTERACTIVE,
-                    "Prompt for any required information rather than fail");
-    registerMessage(MSGID_REVERT_DESCRIPTION_SILENT,
-                    "Perform a silent reversion");
-    registerMessage(MSGID_DSCFG_DESCRIPTION_CREATE_HELP_HEADING_TYPE,
-                    "Type");
-    registerMessage(MSGID_DSCFG_DESCRIPTION_CREATE_HELP_HEADING_DESCR,
-                    "Description");
-    registerMessage(MSGID_DSCFG_FINDER_PROMPT_SINGLE,
-                    "There is only one %s: \"%s\". Are you sure that " +
-                    "this is the correct one?");
-    registerMessage(MSGID_DSCFG_FINDER_PROMPT_MANY,
-                    "Select the %s from the following list:");
-    registerMessage(MSGID_DSCFG_ERROR_FINDER_NO_CHILDREN,
-                    "Unable to continue since there are no %s currently " +
-                    "configured on the server");
-    registerMessage(MSGID_DSCFG_ERROR_FINDER_SINGLE_CHILD_REJECTED,
-                    "Unable to continue because the only available %s was " +
-                    "not selected");
-    registerMessage(MSGID_DSCFG_GENERAL_CONFIRM_NO, "no");
-    registerMessage(MSGID_DSCFG_GENERAL_CONFIRM_YES, "yes");
-    registerMessage(MSGID_DSCFG_GENERAL_CHOICE_PROMPT_HELP,
-                    "Enter choice [1 - %s,  ? - help]:");
-    registerMessage(MSGID_DSCFG_GENERAL_CHOICE_PROMPT_NOHELP,
-                    "Enter choice [1 - %s]:");
-    registerMessage(MSGID_DSCFG_ERROR_GENERAL_CHOICE,
-                    "Invalid response. Please enter a value between 1 and %s");
-    registerMessage(MSGID_DSCFG_ERROR_GENERAL_CONFIRM,
-                    "Invalid response. Please enter \"%s\" or \"%s\"");
-    registerMessage(MSGID_DSCFG_VALUE_READER_MENU_ADD, "add a value");
-    registerMessage(MSGID_DSCFG_VALUE_READER_MENU_REMOVE, "remove a value");
-    registerMessage(MSGID_DSCFG_VALUE_READER_MENU_SET, "modify the value");
-    registerMessage(MSGID_DSCFG_VALUE_READER_MENU_RESET,
-        "reset the value back to its default");
-    registerMessage(MSGID_DSCFG_VALUE_READER_MENU_CONTINUE, "continue");
-    registerMessage(MSGID_DSCFG_VALUE_READER_PROMPT_REMOVE,
-        "Select the value to be removed from the \"%s\" property:");
-    registerMessage(MSGID_DSCFG_VALUE_READER_PROMPT_SELECT_VALUE,
-        "Select a value for the \"%s\" property:");
-    registerMessage(MSGID_DSCFG_VALUE_READER_PROMPT_ENTER_VALUE,
-        "Enter a value for the \"%s\" property:");
-    registerMessage(MSGID_DSCFG_VALUE_READER_MENU_TITLE,
-        "Select a property to be edited, or enter \"%d\" to continue:");
-    registerMessage(MSGID_DSCFG_VALUE_READER_PROMPT_MANDATORY,
-        "The property \"%s\" is mandatory and must have a value specified");
-    registerMessage(MSGID_DSCFG_VALUE_READER_PROMPT_MODIFY_MENU,
-        "Do you want to modify the \"%s\" property?");
-    registerMessage(MSGID_LDIFIMPORT_DESCRIPTION_CLEAR_BACKEND,
-                    "Remove all entries for all base DNs in the backend " +
-                    "before importing");
-    registerMessage(MSGID_LDIFIMPORT_MISSING_BACKEND_ARGUMENT,
-                    "Neither the %s or the %s argument was provided.  One " +
-                    "of these arguments must be given to specify the backend " +
-                    "for the LDIF data to be imported to");
-    registerMessage(MSGID_LDIFIMPORT_MISSING_CLEAR_BACKEND,
-                    "Importing to a backend without the append argument will " +
-                    "remove all entries for all base DNs (%s) in the " +
-                    "backend. The %s argument must be given to continue with " +
-                    "import");
-    registerMessage(MSGID_DSCFG_HELP_FIELD_ENUM,
-        "one of the following values:");
-    registerMessage(MSGID_DSCFG_HELP_FIELD_UNDEFINED,
-        "undefined");
-    registerMessage(MSGID_DSCFG_HELP_FIELD_INHERITED_ABS,
-        "inherits from the property \"%s\" in the %s");
-    registerMessage(MSGID_DSCFG_HELP_FIELD_INHERITED_PARENT,
-        "inherits from the property \"%s\" in the parent %s");
-    registerMessage(MSGID_DSCFG_HELP_FIELD_INHERITED_THIS,
-        "inherits from the property \"%s\" in this %s");
-    registerMessage(MSGID_DSCFG_HELP_FIELD_SERVER_RESTART,
-        "The server must be restarted in order for changes to this property " +
-        "to take effect");
-    registerMessage(MSGID_DSCFG_HELP_FIELD_COMPONENT_RESTART,
-        "The %s must be restarted in order for changes to this property to " +
-        "take effect");
-    registerMessage(MSGID_DSCFG_HELP_FIELD_READ_ONLY,
-        "read-only - this property can only be specified when the %s " +
-        "is created");
-    registerMessage(MSGID_DSCFG_HELP_FIELD_MONITORING,
-        "monitoring - this property is automatically generated by the server");
-    registerMessage(MSGID_DSCFG_HELP_HEADING_PROPERTY,
-        "Property: %s");
-    registerMessage(MSGID_DSCFG_HELP_HEADING_COMPONENT,
-        "Component name: %s");
-    registerMessage(MSGID_DSCFG_HELP_HEADING_DEFAULT,
-        "Default behavior");
-    registerMessage(MSGID_DSCFG_HELP_HEADING_MANDATORY,
-        "Mandatory");
-    registerMessage(MSGID_DSCFG_HELP_HEADING_ADVANCED,
-        "Advanced");
-    registerMessage(MSGID_DSCFG_HELP_HEADING_MULTI_VALUED,
-        "Multi-valued");
-    registerMessage(MSGID_DSCFG_HELP_HEADING_READ_ONLY,
-        "Read-only");
-    registerMessage(MSGID_DSCFG_HELP_HEADING_SYNTAX,
-        "Syntax");
-    registerMessage(MSGID_DSCFG_HELP_DESCRIPTION_OPTION,
-        "Option Types:");
-    registerMessage(MSGID_DSCFG_HELP_DESCRIPTION_READ,
-        "Property value(s) are readable");
-    registerMessage(MSGID_DSCFG_HELP_DESCRIPTION_WRITE,
-        "Property value(s) are writable");
-    registerMessage(MSGID_DSCFG_HELP_DESCRIPTION_MANDATORY,
-        "The property is mandatory");
-    registerMessage(MSGID_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED,
-        "The property is single-valued");
-    registerMessage(MSGID_DSCFG_HELP_DESCRIPTION_ADMIN_ACTION,
-        "Administrative action is required for changes to take effect");
-    registerMessage(MSGID_DSCFG_CONFIRM_CREATE,
-        "Are you sure that you want to create the %s?");
-    registerMessage(MSGID_DSCFG_CONFIRM_DELETE,
-        "Are you sure that you want to delete the %s?");
-    registerMessage(MSGID_DSCFG_CONFIRM_MODIFY,
-        "Are you sure that you want to modify the %s?");
-    registerMessage(MSGID_DSCFG_CONFIRM_CREATE_SUCCESS,
-        "The %s was created successfully");
-    registerMessage(MSGID_DSCFG_CONFIRM_DELETE_SUCCESS,
-        "The %s was deleted successfully");
-    registerMessage(MSGID_DSCFG_CONFIRM_MODIFY_SUCCESS,
-        "The %s was modified successfully");
-    registerMessage(MSGID_DSCFG_CONFIRM_CREATE_FAIL,
-        "The %s was not created");
-    registerMessage(MSGID_DSCFG_CONFIRM_DELETE_FAIL,
-        "The %s was not deleted");
-    registerMessage(MSGID_DSCFG_CONFIRM_MODIFY_FAIL,
-        "The %s was not modified");
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/UtilityMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/UtilityMessages.java
deleted file mode 100644
index f4f3ab3..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/UtilityMessages.java
+++ /dev/null
@@ -1,2352 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
-/**
- * This class defines the set of message IDs and default format strings for
- * messages associated with the general server utilities.
- */
-public class UtilityMessages
-{
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * base64-decode a string with a length that is not a multiple of four bytes.
-   * This takes a single argument, which is the string to decode.
-   */
-  public static final int MSGID_BASE64_DECODE_INVALID_LENGTH =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 1;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * base64-decode a string containing a character that is not allowed in
-   * base64-encoded values.  This takes two arguments, which are the value to
-   * decode and the invalid character.
-   */
-  public static final int MSGID_BASE64_DECODE_INVALID_CHARACTER =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 2;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode a hex string with a length that is not a multiple of two bytes.
-   * This takes a single argument, which is the string to decode.
-   */
-  public static final int MSGID_HEX_DECODE_INVALID_LENGTH =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 3;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * decode a hex string containing an invalid hexadecimal digit.  This takes
-   * two arguments, which are the value to decode and the invalid character.
-   */
-  public static final int MSGID_HEX_DECODE_INVALID_CHARACTER =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 4;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but the first line started with a space.  This takes
-   * two arguments, which are the line number and the contents of the line.
-   */
-  public static final int MSGID_LDIF_INVALID_LEADING_SPACE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 5;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but the first line started with a space.  This takes
-   * two arguments, which are the starting line number for the entry and the
-   * contents of the line with no attribute name.
-   */
-  public static final int MSGID_LDIF_NO_ATTR_NAME =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 6;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but the first line is not a DN.  This takes two
-   * arguments, which are the starting line number for the entry and the
-   * contents of the first line.
-   */
-  public static final int MSGID_LDIF_NO_DN =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 7;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but one of the lines contains an invalid separator
-   * between the "dn" tag and the actual DN.  This takes two arguments, which
-   * are the starting line number for the entry and the contents of the line
-   * with the invalid separator.
-   */
-  public static final int MSGID_LDIF_INVALID_DN_SEPARATOR =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 8;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry in which the DN cannot be decoded properly.  This takes
-   * two arguments, which are the starting line number for the entry and the
-   * contents of the line with the invalid separator.
-   */
-  public static final int MSGID_LDIF_INVALID_DN =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 9;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but one of the lines contains an invalid separator
-   * between the attribute name tag and the value.  This takes three arguments,
-   * which are the DN of the entry, the starting line number for the entry, and
-   * the contents of the line with the invalid separator.
-   */
-  public static final int MSGID_LDIF_INVALID_ATTR_SEPARATOR =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 10;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but the DN appears to be base64-encoded but it is not
-   * possible to decode it.  This takes three arguments, which are the starting
-   * line number for the entry, the invalid DN line, and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_LDIF_COULD_NOT_BASE64_DECODE_DN =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 11;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but an attribute appears to be base64-encoded but it is
-   * not possible to decode it.  This takes four arguments, which are the DN of
-   * the entry, the starting line number for the entry, the invalid attribute
-   * line, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDIF_COULD_NOT_BASE64_DECODE_ATTR =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 12;
-
-
-
-  /**
-   * The message ID for the warning message that will be used if an entry is
-   * read from an LDIF file that contains a duplicate objectclass value.  This
-   * takes three arguments, which are the DN of the entry, the starting line
-   * number for the entry, and the name of the duplicate objectclass.
-   */
-  public static final int MSGID_LDIF_DUPLICATE_OBJECTCLASS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_WARNING | 13;
-
-
-
-  /**
-   * The message ID for the warning message that will be used if an entry is
-   * read from an LDIF file that contains a duplicate attribute value.  This
-   * takes four arguments, which are the DN of the entry, the starting line
-   * number for the entry, the name of the attribute, and the duplicate value.
-   */
-  public static final int MSGID_LDIF_DUPLICATE_ATTR =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_WARNING | 14;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but multiple values are provided for a single-valued
-   * attribute.  This takes three arguments, which are the DN of the entry, the
-   * starting line number for the entry, and the name of the attribute.
-   */
-  public static final int MSGID_LDIF_MULTIPLE_VALUES_FOR_SINGLE_VALUED_ATTR =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 15;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but that entry contains an attribute value with an
-   * illegal syntax.  This takes five arguments, which are the DN of the entry,
-   * the starting line number for the entry, the illegal value, the name of the
-   * attribute, and a string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDIF_INVALID_ATTR_SYNTAX =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 16;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but that entry does not conform to the server's schema
-   * configuration.  This takes three arguments, which are the DN of the entry,
-   * the starting line number for the entry, and a message that explains the
-   * schema violation.
-   */
-  public static final int MSGID_LDIF_SCHEMA_VIOLATION =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 17;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * write an LDIF file but the specified file already exists.  This takes a
-   * single argument, which is the name of the file.
-   */
-  public static final int MSGID_LDIF_FILE_EXISTS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 18;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read the content of an attribute from a specified URL but that URL was
-   * invalid.  This takes four arguments, which are the DN of the entry, the
-   * line number on which that entry starts, the name of the attribute, and a
-   * string representation of the exception that was caught.
-   */
-  public static final int MSGID_LDIF_INVALID_URL =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 19;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read the content of an attribute from a specified URL but an I/O problem
-   * occurred while attempting to read the information.  This takes five
-   * arguments, which are the DN of the entry, the line number on which that
-   * entry starts, the name of the attribute, the URL to retrieve, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDIF_URL_IO_ERROR =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 20;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * write a reject file but the specified file already exists.  This takes a
-   * single argument, which is the name of the file.
-   */
-  public static final int MSGID_REJECT_FILE_EXISTS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 21;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine if an entry matches the set of filters that should be
-   * used to include it in or exclude it from the import.  This takes three
-   * arguments, which are the DN of the entry being imported, the line number on
-   * which that entry starts in the LDIF source, and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 22;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to determine if an entry matches the set of filters that should be
-   * used to include it in or exclude it from the export.  This takes two
-   * arguments, which are the DN of the entry being imported and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_EXPORT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 23;
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to parse an LDIF change record entry and there are invalid
-   * attributes for a delete operation.
-   */
-  public static final int MSGID_LDIF_INVALID_DELETE_ATTRIBUTES =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 24;
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to parse an LDIF change record entry and there are no
-   * attributes specified for a moddn operation.
-   */
-  public static final int MSGID_LDIF_NO_MOD_DN_ATTRIBUTES =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 25;
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to parse an LDIF change record entry and there is no delete old
-   * RDN attribute specified for a moddn operation.
-   */
-  public static final int MSGID_LDIF_NO_DELETE_OLDRDN_ATTRIBUTE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 26;
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to parse an LDIF change record entry and there is an invalid value
-   * for the delete old RDN attribute specified for a moddn operation.
-   */
-  public static final int MSGID_LDIF_INVALID_DELETE_OLDRDN_ATTRIBUTE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 27;
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to parse an LDIF change record entry and there is an invalid
-   * attribute specified for a moddn operation.
-   */
-  public static final int MSGID_LDIF_INVALID_CHANGERECORD_ATTRIBUTE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 28;
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to parse an LDIF change record entry and there is an invalid
-   * attribute specified for a modify operation.
-   */
-  public static final int MSGID_LDIF_INVALID_MODIFY_ATTRIBUTE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 29;
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to parse an LDIF change record entry and there is an invalid
-   * value specified for the changetype operation.
-   */
-  public static final int MSGID_LDIF_INVALID_CHANGETYPE_ATTRIBUTE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 30;
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to parse an LDIF change record entry and there is an invalid
-   * attribute value specified for a modify operation.
-   */
-  public static final int MSGID_LDIF_INVALID_MODIFY_ATTRIBUTE_VAL =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 31;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema element name
-   * or OID is invalid because it was null or empty.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SCHEMANAME_EMPTY_VALUE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 32;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema element name
-   * or OID is invalid because it contains an illegal character.  This takes
-   * three arguments, which are the provided value, the illegal character, and
-   * the position of that illegal character.
-   */
-  public static final int MSGID_SCHEMANAME_ILLEGAL_CHAR =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 33;
-
-
-
-  /**
-   * The message ID for the message that will be used if a schema element name
-   * or OID is invalid because it contains consecutive periods.  This takes two
-   * arguments, which are the provided value and the position of the consecutive
-   * period.
-   */
-  public static final int MSGID_SCHEMANAME_CONSECUTIVE_PERIODS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 34;
-
-
-
-  /**
-   * The message ID for the message that will be used if an argument does not
-   * have either a short or long identifier.  This takes a single argument,
-   * which is the name of the argument.
-   */
-  public static final int MSGID_ARG_NO_IDENTIFIER =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 35;
-
-
-
-  /**
-   * The message ID for the message that will be used if an argument takes a
-   * value but no value placeholder has been defined.  This takes a single
-   * argument, which is the name of the argument.
-   */
-  public static final int MSGID_ARG_NO_VALUE_PLACEHOLDER =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 36;
-
-
-
-  /**
-   * The message ID for the message that will be used if an argument does not
-   * have any value to decode as an integer.  This takes a single argument,
-   * which is the name of the argument.
-   */
-  public static final int MSGID_ARG_NO_INT_VALUE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 37;
-
-
-
-  /**
-   * The message ID for the message that will be used if an argument value
-   * cannot be decoded as an integer.  This takes two arguments, which are the
-   * provided value and the name of the argument.
-   */
-  public static final int MSGID_ARG_CANNOT_DECODE_AS_INT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 38;
-
-
-
-  /**
-   * The message ID for the message that will be used if an argument has
-   * multiple values that cannot be decoded as a single integer.  This takes a
-   * single argument, which is the name of the argument.
-   */
-  public static final int MSGID_ARG_INT_MULTIPLE_VALUES =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 39;
-
-
-
-  /**
-   * The message ID for the message that will be used if an argument does not
-   * have any value to decode as a Boolean.  This takes a single argument,
-   * which is the name of the argument.
-   */
-  public static final int MSGID_ARG_NO_BOOLEAN_VALUE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 40;
-
-
-
-  /**
-   * The message ID for the message that will be used if an argument value
-   * cannot be decoded as a Boolean.  This takes two arguments, which are the
-   * provided value and the name of the argument.
-   */
-  public static final int MSGID_ARG_CANNOT_DECODE_AS_BOOLEAN =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 41;
-
-
-
-  /**
-   * The message ID for the message that will be used if an argument has
-   * multiple values that cannot be decoded as a single Boolean.  This takes a
-   * single argument, which is the name of the argument.
-   */
-  public static final int MSGID_ARG_BOOLEAN_MULTIPLE_VALUES =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 42;
-
-
-
-  /**
-   * The message ID for the message that will be used if an integer argument is
-   * configured with both lower and upper bounds but the lower bound is greater
-   * than the upper bound.  This takes three arguments, which are the name of
-   * the argument, the lower bound, and the upper bound.
-   */
-  public static final int MSGID_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 43;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * assign a value to an integer argument that is below the lower bound.  This
-   * takes three arguments, which are the name of the argument, the provided
-   * value, and the lower bound.
-   */
-  public static final int MSGID_INTARG_VALUE_BELOW_LOWER_BOUND =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 44;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * assign a value to an integer argument that is above the upper bound.  This
-   * takes three arguments, which are the name of the argument, the provided
-   * value, and the upper bound.
-   */
-  public static final int MSGID_INTARG_VALUE_ABOVE_UPPER_BOUND =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 45;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * assign a value to a Boolean argument.  This takes a single argument, which
-   * is the name of the argument.
-   */
-  public static final int MSGID_BOOLEANARG_NO_VALUE_ALLOWED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 46;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * assign a value to a multi-choice argument that is not in the set of allowed
-   * values.  This takes two arguments, which are the name of the argument and
-   * the provided value.
-   */
-  public static final int MSGID_MCARG_VALUE_NOT_ALLOWED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 47;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * target a file that does not exist.  This takes two arguments, which are
-   * the path to the file and the name of the argument.
-   */
-  public static final int MSGID_FILEARG_NO_SUCH_FILE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 48;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to determine whether a file exists.  This takes three arguments,
-   * which are the path to the file, the name of the argument, and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_FILEARG_CANNOT_VERIFY_FILE_EXISTENCE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 49;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying open a file for reading.  This takes three arguments, which are the
-   * path to the file, the name of the argument, and a string representation of
-   * the exception that was caught.
-   */
-  public static final int MSGID_FILEARG_CANNOT_OPEN_FILE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 50;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying read a line from the file.  This takes three arguments, which are
-   * the path to the file, the name of the argument, and a string representation
-   * of the exception that was caught.
-   */
-  public static final int MSGID_FILEARG_CANNOT_READ_FILE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 51;
-
-
-
-  /**
-   * The message ID for the message that will be used if the specified file is
-   * empty.  This takes two arguments, which are the path to the file and the
-   * name of the argument.
-   */
-  public static final int MSGID_FILEARG_EMPTY_FILE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 52;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * define an argument with a short identifier that conflicts with an existing
-   * argument.  This takes three arguments, which are the name of the rejected
-   * argument, the conflicting short identifier, and the name of the existing
-   * argument.
-   */
-  public static final int MSGID_ARGPARSER_DUPLICATE_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 53;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * define an argument with a long identifier that conflicts with an existing
-   * argument.  This takes three arguments, which are the name of the rejected
-   * argument, the conflicting long identifier, and the name of the existing
-   * argument.
-   */
-  public static final int MSGID_ARGPARSER_DUPLICATE_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 54;
-
-
-
-  /**
-   * The message ID for the message that will be used if a problem occurs while
-   * trying to read alternate default values from a properties file.  This takes
-   * two arguments, which are the name of the properties file and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_ARGPARSER_CANNOT_READ_PROPERTIES_FILE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 55;
-
-
-
-  /**
-   * The message ID for the message that will be used if too many unnamed
-   * trailing arguments are provided.  This takes a single argument, which is
-   * the maximum number of trailing arguments allowed.
-   */
-  public static final int MSGID_ARGPARSER_TOO_MANY_TRAILING_ARGS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 56;
-
-
-
-  /**
-   * The message ID for the message that will be used if a long argument is
-   * provided without including the argument name (i.e., starts with "--=").
-   * This takes a single argument, which is the provided long argument.
-   */
-  public static final int MSGID_ARGPARSER_LONG_ARG_WITHOUT_NAME =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 57;
-
-
-
-  /**
-   * The message ID for the message that will be used if a long argument is
-   * specified with a name that has not been registered with the parser.  This
-   * takes a single argument, which is the name of the invalid long argument.
-   */
-  public static final int MSGID_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 58;
-
-
-
-  /**
-   * The message ID for the message that will be used if a long argument
-   * requires a value but none was provided.  This takes a single argument,
-   * which is the name of the provided long argument.
-   */
-  public static final int MSGID_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 59;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value provided for a
-   * long argument was unacceptable.  This takes three arguments, which are the
-   * rejected value, the name of the long argument, and the reason the value was
-   * rejected.
-   */
-  public static final int MSGID_ARGPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 60;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple values were
-   * provided for a long argument.  This takes a single argument, which is the
-   * name of the long argument.
-   */
-  public static final int MSGID_ARGPARSER_NOT_MULTIVALUED_FOR_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 61;
-
-
-
-  /**
-   * The message ID for the message that will be used if a long argument does
-   * not take a value but one was provided for it.  This takes a single
-   * argument, which is the name of the long argument.
-   */
-  public static final int MSGID_ARGPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 62;
-
-
-
-  /**
-   * The message ID for the message that will be used if the "-" character by
-   * itself is used as an argument.  This does not take any arguments.
-   */
-  public static final int MSGID_ARGPARSER_INVALID_DASH_AS_ARGUMENT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 63;
-
-
-
-  /**
-   * The message ID for the message that will be used if a short argument is
-   * specified with a name that has not been registered with the parser.  This
-   * takes a single argument, which is the name of the invalid short argument.
-   */
-  public static final int MSGID_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 64;
-
-
-
-  /**
-   * The message ID for the message that will be used if a short argument
-   * requires a value but none was provided.  This takes a single argument,
-   * which is the name of the provided short argument.
-   */
-  public static final int MSGID_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 65;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value provided for a
-   * short argument was unacceptable.  This takes three arguments, which are the
-   * rejected value, the name of the short argument, and the reason the value
-   * was rejected.
-   */
-  public static final int MSGID_ARGPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 66;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple values were
-   * provided for a short argument.  This takes a single argument, which is the
-   * name of the short argument.
-   */
-  public static final int MSGID_ARGPARSER_NOT_MULTIVALUED_FOR_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 67;
-
-
-
-  /**
-   * The message ID for the message that will be used if a series of short
-   * arguments are provided in a single block where one of the characters other
-   * than the first is associated with an argument that requires a value.  This
-   * takes three arguments, which are the string representation of the argument
-   * character at the beginning of the block, the string of characters other
-   * than the first character in that block, and the string representation of
-   * the character that is associated with an argument that takes a value.
-   */
-  public static final int MSGID_ARGPARSER_CANT_MIX_ARGS_WITH_VALUES =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 68;
-
-
-
-  /**
-   * The message ID for the message that will be used if an unnamed trailing
-   * argument is provided but none are allowed.  This takes a single argument,
-   * which is the provided trailing argument.
-   */
-  public static final int MSGID_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 69;
-
-
-
-  /**
-   * The message ID for the message that will be used if too few trailing
-   * arguments were provided.  This takes a single argument, which is the
-   * minimum number of trailing arguments that must be provided.
-   */
-  public static final int MSGID_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 70;
-
-
-
-  /**
-   * The message ID for the message that will be used if a required argument is
-   * not assigned a value.  This takes a single argument, which is the name of
-   * the missing required argument.
-   */
-  public static final int MSGID_ARGPARSER_NO_VALUE_FOR_REQUIRED_ARG =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 71;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt to move a file
-   * fails because the file to move does not exist.  This takes a single
-   * argument, which is the provided path of the file to move.
-   */
-  public static final int MSGID_MOVEFILE_NO_SUCH_FILE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 72;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt to move a file
-   * fails because the file to move exists but is not a file.  This takes a
-   * single argument, which is the provided path of the file to move.
-   */
-  public static final int MSGID_MOVEFILE_NOT_FILE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 73;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt to move a file
-   * fails because the target directory does not exist.  This takes a single
-   * argument, which is the provided path of the target directory.
-   */
-  public static final int MSGID_MOVEFILE_NO_SUCH_DIRECTORY =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 74;
-
-
-
-  /**
-   * The message ID for the message that will be used an attempt to move a file
-   * fails because the target directory exists but is not a directory.  This
-   * takes a single argument, which is the provided path of the target
-   * directory.
-   */
-  public static final int MSGID_MOVEFILE_NOT_DIRECTORY =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 75;
-
-
-
-  /**
-   * The message ID for the message that will be used if a sender address for an
-   * e-mail message is invalid for some reason.  This takes two arguments, which
-   * are the invalid address and a message explaining why the address is
-   * invalid.
-   */
-  public static final int MSGID_EMAILMSG_INVALID_SENDER_ADDRESS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 76;
-
-
-
-  /**
-   * The message ID for the message that will be used if a recipient address for
-   * an e-mail message is invalid for some reason.  This takes two arguments,
-   * which are the invalid address and a message explaining why the address is
-   * invalid.
-   */
-  public static final int MSGID_EMAILMSG_INVALID_RECIPIENT_ADDRESS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 77;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error message
-   * cannot be sent to any of the configured mail servers.
-   */
-  public static final int MSGID_EMAILMSG_CANNOT_SEND =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 78;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * define a new subcommand with a name that conflicts with the name of another
-   * subcommand already associated with the given argument parser.  This takes
-   * a single argument, which is the subcommand name.
-   */
-  public static final int MSGID_ARG_SUBCOMMAND_DUPLICATE_SUBCOMMAND =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 79;
-
-
-
-  /**
-   * The message ID for the message that will be used if a subcommand has
-   * multiple arguments with the same name.  This takes two arguments, which are
-   * the name of the subcommand and the name of the argument.
-   */
-  public static final int MSGID_ARG_SUBCOMMAND_DUPLICATE_ARGUMENT_NAME =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 80;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an argument to a subcommand with a name that conflicts with the name of
-   * a global argument.  This takes two arguments, which are the argument name
-   * and the subcommand name.
-   */
-  public static final int MSGID_ARG_SUBCOMMAND_ARGUMENT_GLOBAL_CONFLICT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 81;
-
-
-
-  /**
-   * The message ID for the message that will be used if a subcommand has
-   * multiple arguments with the same short ID.  This takes four arguments,
-   * which are the name of the new argument being added, the name of the
-   * subcommand, the string representation of the short identifier, and the
-   * name of the existing argument with the same short ID.
-   */
-  public static final int MSGID_ARG_SUBCOMMAND_DUPLICATE_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 82;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an argument to a subcommand with a short ID that conflicts with the
-   * short ID of a global argument.  This takes four arguments, which are the
-   * argument name, the subcommand name, a string representation of the short ID
-   * character, and the name of the conflicting global argument.
-   */
-  public static final int
-       MSGID_ARG_SUBCOMMAND_ARGUMENT_SHORT_ID_GLOBAL_CONFLICT =
-            CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 83;
-
-
-
-  /**
-   * The message ID for the message that will be used if a subcommand has
-   * multiple arguments with the same long ID.  This takes four arguments,
-   * which are the name of the new argument being added, the name of the
-   * subcommand, the long identifier, and the name of the existing argument with
-   * the same long ID.
-   */
-  public static final int MSGID_ARG_SUBCOMMAND_DUPLICATE_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 84;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add an argument to a subcommand with a long ID that conflicts with the long
-   * ID of a global argument.  This takes four arguments, which are the
-   * argument name, the subcommand name, the long ID string, and the name of the
-   * conflicting global argument.
-   */
-  public static final int
-       MSGID_ARG_SUBCOMMAND_ARGUMENT_LONG_ID_GLOBAL_CONFLICT =
-            CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 85;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a global argument with a name that conflicts with that of another
-   * global argument.  This takes a single argument, which is the name of the
-   * global argument.
-   */
-  public static final int MSGID_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_NAME =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 86;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a global argument with a name that conflicts with the name of a
-   * subcommand argument.  This takes two arguments, which are the name of the
-   * global argument and the name of the subcommand.
-   */
-  public static final int MSGID_SUBCMDPARSER_GLOBAL_ARG_NAME_SUBCMD_CONFLICT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 87;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a global argument with a short ID that conflicts with that of another
-   * global argument.  This takes three arguments, which are the string
-   * representation of the short ID character, the name of the new global
-   * argument, and the name of the existing global argument with the same short
-   * ID.
-   */
-  public static final int MSGID_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 88;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a global argument with a short ID that conflicts with that of a
-   * subcommand argument.  This takes four arguments, which are the string
-   * representation of the short ID character, the name of the new global
-   * argument, the name of the conflicting argument, and the name of the
-   * associated subcommand.
-   */
-  public static final int MSGID_SUBCMDPARSER_GLOBAL_ARG_SHORT_ID_CONFLICT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 89;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a global argument with a long ID that conflicts with that of another
-   * global argument.  This takes three arguments, which are the long ID string,
-   * the name of the new global argument, and the name of the existing global
-   * argument with the same long ID.
-   */
-  public static final int MSGID_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 90;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * add a global argument with a long ID that conflicts with that of a
-   * subcommand argument.  This takes four arguments, which are the long ID
-   * string, the name of the new global argument, the name of the conflicting
-   * argument, and the name of the associated subcommand.
-   */
-  public static final int MSGID_SUBCMDPARSER_GLOBAL_ARG_LONG_ID_CONFLICT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 91;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to read the specified properties file.  This takes two
-   * arguments, which are the path to the properties file and a string
-   * representation of the exception that was caught.
-   */
-  public static final int MSGID_SUBCMDPARSER_CANNOT_READ_PROPERTIES_FILE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 92;
-
-
-
-  /**
-   * The message ID for the message that will be used if a command-line argument
-   * is provided without a name.  This takes a single argument, which is the
-   * provided argument string.
-   */
-  public static final int MSGID_SUBCMDPARSER_LONG_ARG_WITHOUT_NAME =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 93;
-
-
-
-  /**
-   * The message ID for the message that will be used if a command-line argument
-   * is provided with a long ID that does not map to a valid global argument.
-   * This takes one argument, which is the provided long argument ID string.
-   */
-  public static final int MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 94;
-
-
-
-  /**
-   * The message ID for the message that will be used if a command-line argument
-   * is provided with a long ID that does not map to a valid global or
-   * subcommand argument.  This takes one argument, which is the provided
-   * argument long ID string.
-   */
-  public static final int MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 95;
-
-
-
-  /**
-   * The message ID for the message that will be used if a command-line argument
-   * is used which requires a value but for which none was provided.  This takes
-   * a single argument, which is the long identifier string for the argument.
-   */
-  public static final int
-       MSGID_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID =
-            CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 96;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value provided for a
-   * long argument was unacceptable.  This takes three arguments, which are the
-   * rejected value, the name of the long argument, and the reason the value was
-   * rejected.
-   */
-  public static final int MSGID_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 97;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple values were
-   * provided for a long argument.  This takes a single argument, which is the
-   * name of the long argument.
-   */
-  public static final int MSGID_SUBCMDPARSER_NOT_MULTIVALUED_FOR_LONG_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 98;
-
-
-
-  /**
-   * The message ID for the message that will be used if a long argument does
-   * not take a value but one was provided for it.  This takes a single
-   * argument, which is the name of the long argument.
-   */
-  public static final int MSGID_SUBCMDPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 99;
-
-
-
-  /**
-   * The message ID for the message that will be used if the "-" character by
-   * itself is used as an argument.  This does not take any arguments.
-   */
-  public static final int MSGID_SUBCMDPARSER_INVALID_DASH_AS_ARGUMENT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 100;
-
-
-
-  /**
-   * The message ID for the message that will be used if a command-line argument
-   * is provided with a short ID that does not map to a valid global argument.
-   * This takes one argument, which is a string representation of the provided
-   * short argument ID character.
-   */
-  public static final int MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 101;
-
-
-
-  /**
-   * The message ID for the message that will be used if a command-line argument
-   * is provided with a short ID that does not map to a valid global or
-   * subcommand argument.  This takes one argument, which is a string
-   * representation of the provided short argument ID character.
-   */
-  public static final int MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 102;
-
-
-
-  /**
-   * The message ID for the message that will be used if a short argument
-   * requires a value but none was provided.  This takes a single argument,
-   * which is the name of the provided short argument.
-   */
-  public static final int
-       MSGID_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID =
-            CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 103;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value provided for a
-   * short argument was unacceptable.  This takes three arguments, which are the
-   * rejected value, the name of the short argument, and the reason the value
-   * was rejected.
-   */
-  public static final int MSGID_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 104;
-
-
-
-  /**
-   * The message ID for the message that will be used if multiple values were
-   * provided for a short argument.  This takes a single argument, which is the
-   * name of the short argument.
-   */
-  public static final int MSGID_SUBCMDPARSER_NOT_MULTIVALUED_FOR_SHORT_ID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 105;
-
-
-
-  /**
-   * The message ID for the message that will be used if a series of short
-   * arguments are provided in a single block where one of the characters other
-   * than the first is associated with an argument that requires a value.  This
-   * takes three arguments, which are the string representation of the argument
-   * character at the beginning of the block, the string of characters other
-   * than the first character in that block, and the string representation of
-   * the character that is associated with an argument that takes a value.
-   */
-  public static final int MSGID_SUBCMDPARSER_CANT_MIX_ARGS_WITH_VALUES =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 106;
-
-
-
-  /**
-   * The message ID for the message that will be used if a provided argument
-   * does not start with one or two dashes and is not the name of a valid
-   * subcommand.  This takes a single argument, which is the provided
-   * command-line argument.
-   */
-  public static final int MSGID_SUBCMDPARSER_INVALID_ARGUMENT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 107;
-
-
-
-  /**
-   * The message ID for the message that will be used if a multiple subcommands
-   * were provided.  This takes two arguments, which are the name of the new
-   * new subcommand that was encountered and the name of the subcommand that had
-   * previously been identified.
-   */
-  public static final int MSGID_SUBCMDPARSER_MULTIPLE_SUBCOMMANDS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 108;
-
-
-
-  /**
-   * The message ID for the message that will be used if a required argument is
-   * not assigned a value.  This takes a single argument, which is the name of
-   * the missing required argument.
-   */
-  public static final int MSGID_SUBCMDPARSER_NO_VALUE_FOR_REQUIRED_ARG =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 109;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP URL doesn't
-   * contain a "://" after the scheme.  It takes a single argument, which is the
-   * provided URL string.
-   */
-  public static final int MSGID_LDAPURL_NO_COLON_SLASH_SLASH =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 110;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP URL doesn't
-   * contain a scheme.  It takes a single argument, which is the provided URL
-   * string.
-   */
-  public static final int MSGID_LDAPURL_NO_SCHEME =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 111;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP URL doesn't
-   * contain a host before the colon and port.  It takes a single argument,
-   * which is the provided URL string.
-   */
-  public static final int MSGID_LDAPURL_NO_HOST =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 112;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP URL doesn't
-   * contain a port after the host and colon.  It takes a single argument,
-   * which is the provided URL string.
-   */
-  public static final int MSGID_LDAPURL_NO_PORT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 113;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurred while
-   * attempting to decode the port.  This takes two arguments, which are the
-   * provided URL string and the host string.
-   */
-  public static final int MSGID_LDAPURL_CANNOT_DECODE_PORT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 114;
-
-
-
-  /**
-   * The message ID for the message that will be used if the port in an LDAP URL
-   * is outside the valid range.  This takes two arguments, which are the
-   * provided URL string and the decoded port number.
-   */
-  public static final int MSGID_LDAPURL_INVALID_PORT =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 115;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP URL has an
-   * invalid scope.  This takes two arguments, which are the provided URL string
-   * and the invalid scope string.
-   */
-  public static final int MSGID_LDAPURL_INVALID_SCOPE_STRING =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 116;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP URL portion
-   * cannot be decoded because a percent sign is not followed by two hex digits.
-   * This takes two arguments, which are the provided URL portion and the
-   * position of the percent sign.
-   */
-  public static final int MSGID_LDAPURL_PERCENT_TOO_CLOSE_TO_END =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 117;
-
-
-
-  /**
-   * The message ID for the message that will be used if an LDAP URL portion
-   * cannot be decoded because one of the two bytes following a percent sign is
-   * not a valid hex character.  This takes two arguments, which are the
-   * provided URL portion and the position of the illegal hex digit.
-   */
-  public static final int MSGID_LDAPURL_INVALID_HEX_BYTE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 118;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * attempting to create a UTF-8 string from a byte array.  This takes a
-   * single argument, which is a string representation of the exception that was
-   * caught.
-   */
-  public static final int MSGID_LDAPURL_CANNOT_CREATE_UTF8_STRING =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 119;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * decoded as a named character set because it does not have a colon.  This
-   * takes a single argument, which is the value string.
-   */
-  public static final int MSGID_CHARSET_NO_COLON =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 120;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * create a named character set without a name.  This does not take any
-   * arguments.
-   */
-  public static final int MSGID_CHARSET_CONSTRUCTOR_NO_NAME =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 121;
-
-
-
-  /**
-   * The message ID for the message that will be used if a character set name
-   * has an illegal character.  This takes two arguments, which are the
-   * provided character set name and the position of the illegal character.
-   */
-  public static final int MSGID_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 122;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * decoded as a named character set because it does not have a name.  This
-   * takes a single argument, which is the value string.
-   */
-  public static final int MSGID_CHARSET_NO_NAME =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 123;
-
-
-
-  /**
-   * The message ID for the message that will be used if a value cannot be
-   * decoded as a named character set because it does not have any characters
-   * for the character set.  This takes a single argument, which is the value
-   * string.
-   */
-  public static final int MSGID_CHARSET_NO_CHARS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 124;
-
-
-
-  /**
-   * The message ID for the message that will be used to express a length of
-   * time in seconds.  This takes a single argument, which is the number of
-   * seconds.
-   */
-  public static final int MSGID_TIME_IN_SECONDS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 125;
-
-
-
-  /**
-   * The message ID for the message that will be used to express a length of
-   * time in minutes and seconds.  This takes two arguments, which are the
-   * number of minutes and seconds.
-   */
-  public static final int MSGID_TIME_IN_MINUTES_SECONDS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 126;
-
-
-
-  /**
-   * The message ID for the message that will be used to express a length of
-   * time in hours, minutes, and seconds.  This takes three arguments, which are
-   * the number of hours, minutes, and seconds.
-   */
-  public static final int MSGID_TIME_IN_HOURS_MINUTES_SECONDS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 127;
-
-
-
-  /**
-   * The message ID for the message that will be used to express a length of
-   * time in days, hours, minutes, and seconds.  This takes four arguments,
-   * which is are number of days, hours, minutes, and seconds.
-   */
-  public static final int MSGID_TIME_IN_DAYS_HOURS_MINUTES_SECONDS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 128;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that the account has been
-   * temporarily locked.
-   */
-  public static final int MSGID_ACCTNOTTYPE_ACCOUNT_TEMPORARILY_LOCKED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 129;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that the account has been
-   * permanently locked.
-   */
-  public static final int MSGID_ACCTNOTTYPE_ACCOUNT_PERMANENTLY_LOCKED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 130;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that the account has been
-   * unlocked by an administrator.
-   */
-  public static final int MSGID_ACCTNOTTYPE_ACCOUNT_UNLOCKED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 131;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that an authentication
-   * attempt failed because the account had been idle for too long.
-   */
-  public static final int MSGID_ACCTNOTTYPE_ACCOUNT_IDLE_LOCKED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 132;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that an authentication
-   * attempt failed because the password had been administratively reset but not
-   * changed by the user in the necessary window.
-   */
-  public static final int MSGID_ACCTNOTTYPE_ACCOUNT_RESET_LOCKED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 133;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that the account has been
-   * administratively disabled.
-   */
-  public static final int MSGID_ACCTNOTTYPE_ACCOUNT_DISABLED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 134;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that the account has been
-   * administratively re-enabled.
-   */
-  public static final int MSGID_ACCTNOTTYPE_ACCOUNT_ENABLED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 135;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that an authentication
-   * attempt failed because the account had expired.
-   */
-  public static final int MSGID_ACCTNOTTYPE_ACCOUNT_EXPIRED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 136;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that an authentication
-   * attempt failed because the user's password had expired.
-   */
-  public static final int MSGID_ACCTNOTTYPE_PASSWORD_EXPIRED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 137;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that the user's password will
-   * expire in the near future.
-   */
-  public static final int MSGID_ACCTNOTTYPE_PASSWORD_EXPIRING =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 138;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that the user's password was
-   * reset by an administrator.
-   */
-  public static final int MSGID_ACCTNOTTYPE_PASSWORD_RESET =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 139;
-
-
-
-  /**
-   * The message ID for the message that will be used as the identifier string
-   * for an account status notification indicating that the user's password was
-   * changed by the user.
-   */
-  public static final int MSGID_ACCTNOTTYPE_PASSWORD_CHANGED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 140;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * set the permissions of a file that does not exist.  This takes a single
-   * argument, which is the path to the specified file.
-   */
-  public static final int MSGID_FILEPERM_SET_NO_SUCH_FILE =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 141;
-
-
-
-  /**
-   * The message ID for the message that will be used if an error occurs while
-   * trying to execute the chmod command.  This takes two arguments, which are
-   * the path to the file and a message explaining the problem that occurred.
-   */
-  public static final int MSGID_FILEPERM_CANNOT_EXEC_CHMOD =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 142;
-
-
-
-  /**
-   * The message ID for the message that will be used if an exception is thrown
-   * while attempting to update file permissions.  This takes a single argument,
-   * which is the path to the file being updated.
-   */
-  public static final int MSGID_FILEPERM_SET_JAVA_EXCEPTION =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 143;
-
-
-
-  /**
-   * The message ID for the message that will be used if at least one attempt
-   * to update file permissions failed, but at least one attempt was successful.
-   * This takes a single argument, which is the path to the file being updated.
-   */
-  public static final int MSGID_FILEPERM_SET_JAVA_FAILED_ALTERED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 144;
-
-
-
-  /**
-   * The message ID for the message that will be used if all attempts to update
-   * file permissions failed.  This takes a single argument, which is the path
-   * to the file being updated.
-   */
-  public static final int MSGID_FILEPERM_SET_JAVA_FAILED_UNALTERED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 145;
-
-
-
-  /**
-   * The message ID for the message that will be used if an invalid UNIX mode
-   * string is provided.  This takes a single argument, which is the provided
-   * mode string.
-   */
-  public static final int MSGID_FILEPERM_INVALID_UNIX_MODE_STRING =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 146;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * use the exec method when the server has been configured to disallow that
-   * capability.
-   */
-  public static final int MSGID_EXEC_DISABLED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 147;
-
-
-  /**
-   * The message ID for the message that will be used if a Validator check
-   * fails.  This signals that there is a method invocation that violates
-   * the pre-conditions of the method.
-   */
-  public static final int MSGID_VALIDATOR_PRECONDITION_NOT_MET =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 148;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * Global option.  This does not take any arguments.
-   */
-  public static final int MSGID_GLOBAL_OPTIONS =
-    CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 149;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * Global option reference.  This does take one argument.
-   */
-  public static final int MSGID_GLOBAL_OPTIONS_REFERENCE =
-    CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 150;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * Global option reference.  This does take 2 arguments.
-   */
-  public static final int MSGID_SUBCMD_OPTIONS =
-    CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 151;
-
-  /**
-   * The message ID for the message that will be used as the usage
-   * prefix. This does not take any arguments.
-   */
-  public static final int MSGID_ARGPARSER_USAGE =
-    CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 152;
-
-  /**
-   * The message ID for the message that will be used as the heading
-   * for the table of sub-commands. This does not take any arguments.
-   */
-  public static final int MSGID_SUBCMDPARSER_SUBCMD_HEADING =
-    CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 153;
-
-  /**
-   * The message ID for the message that will be used as the reference
-   * to a --help-xxx argument which can be used to obtain usage
-   * information on a specific subset of sub-commands. This takes a
-   * single argument which is the name of the application.
-   */
-  public static final int MSGID_SUBCMDPARSER_SUBCMD_REFERENCE =
-    CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 154;
-
-  /**
-   * The message ID for the message that will be used as the heading
-   * for the table of global arguments. This does not take any
-   * arguments.
-   */
-  public static final int MSGID_SUBCMDPARSER_GLOBAL_HEADING =
-    CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 155;
-
-  /**
-   * The message ID for the message that will be used as the description of the
-   * Global option reference.  This does take one argument.
-   */
-  public static final int MSGID_GLOBAL_HELP_REFERENCE =
-    CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 156;
-
-
-  /**
-   * The message ID for the message that will be used an attempt to rename a
-   * file fails because the existing target file cannot be deleted.  This takes
-   * a single argument, which is the provided path of the file to move.
-   */
-  public static final int MSGID_RENAMEFILE_CANNOT_RENAME =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 157;
-
-  /**
-   * The message ID for the message that will be used an attempt to rename a
-   * file fails because the rename operation fails.  This takes two
-   * arguments, the source and target file names.
-   */
-  public static final int MSGID_RENAMEFILE_CANNOT_DELETE_TARGET =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 158;
-
-  /**
-   * The message ID for the message that will be used if a client certificate is
-   * rejected because it is expired.  This takes two arguments, which are the
-   * subject DN of the certificate and a string representation of the notAfter
-   * date.
-   */
-  public static final int MSGID_EXPCHECK_TRUSTMGR_CLIENT_CERT_EXPIRED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 159;
-
-
-
-  /**
-   * The message ID for the message that will be used if a client certificate is
-   * rejected because it is not yet valid.  This takes two arguments, which are
-   * the subject DN of the certificate and a string representation of the
-   * notBefore date.
-   */
-  public static final int MSGID_EXPCHECK_TRUSTMGR_CLIENT_CERT_NOT_YET_VALID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 160;
-
-
-
-  /**
-   * The message ID for the message that will be used if a server certificate is
-   * rejected because it is expired.  This takes two arguments, which are the
-   * subject DN of the certificate and a string representation of the notAfter
-   * date.
-   */
-  public static final int MSGID_EXPCHECK_TRUSTMGR_SERVER_CERT_EXPIRED =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 161;
-
-
-
-  /**
-   * The message ID for the message that will be used if a server certificate is
-   * rejected because it is not yet valid.  This takes two arguments, which are
-   * the subject DN of the certificate and a string representation of the
-   * notBefore date.
-   */
-  public static final int MSGID_EXPCHECK_TRUSTMGR_SERVER_CERT_NOT_YET_VALID =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 162;
-
-
-
-  /**
-   * The message ID for the warning message that will be used if an entry is
-   * read from an LDIF file that contains an attribute value that violates the
-   * associated syntax.  This takes five arguments, which are the DN of the
-   * entry, the starting line number for the entry, the invalid value, the name
-   * of the attribute, and a message explaining the reason that the value is not
-   * acceptable.
-   */
-  public static final int MSGID_LDIF_VALUE_VIOLATES_SYNTAX =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_WARNING | 163;
-
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * write a skip file but the specified file already exists.  This takes a
-   * single argument, which is the name of the file.
-   */
-  public static final int MSGID_SKIP_FILE_EXISTS =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 164;
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * read an LDIF entry, but that entry does not match the criteria.
-   * This takes three arguments, which are the DN of the entry,
-   * the starting line number for the entry, and a message that explains why
-   * it does not match the criteria.
-   */
-  public static final int MSGID_LDIF_SKIP =
-       CATEGORY_MASK_UTIL | SEVERITY_MASK_MILD_ERROR | 165;
-
-
-  /**
-   * The message ID for the message that will be used as the heading
-   * for the table of sub-commands. This does not take any arguments.
-   */
-  public static final int MSGID_SUBCMDPARSER_SUBCMD_HELP_HEADING =
-    CATEGORY_MASK_UTIL | SEVERITY_MASK_INFORMATIONAL | 166;
-
-
-  /**
-   * The message ID for the message that will be used if an attempt is made to
-   * start the Directory Server if it is already running.  It does not take any
-   * arguments.
-   */
-  public static final int MSGID_EMBEDUTILS_SERVER_ALREADY_RUNNING =
-    CATEGORY_MASK_UTIL | SEVERITY_MASK_SEVERE_ERROR | 167;
-
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages()
-  {
-    registerMessage(MSGID_BASE64_DECODE_INVALID_LENGTH,
-                    "The value %s cannot be base64-decoded because it does " +
-                    "not have a length that is a multiple of four bytes");
-    registerMessage(MSGID_BASE64_DECODE_INVALID_CHARACTER,
-                    "The value %s cannot be base64-decoded because it " +
-                    "contains an illegal character %s that is not allowed in "+
-                    "base64-encoded values");
-
-
-    registerMessage(MSGID_HEX_DECODE_INVALID_LENGTH,
-                    "The value %s cannot be decoded as a hexadecimal string " +
-                    "because it does not have a length that is a multiple of " +
-                    "two bytes");
-    registerMessage(MSGID_HEX_DECODE_INVALID_CHARACTER,
-                    "The value %s cannot be decoded as a hexadecimal string " +
-                    "because it contains an illegal character %s that is not " +
-                    "a valid hexadecimal digit");
-
-
-    registerMessage(MSGID_EXEC_DISABLED,
-                    "The %s command will not be allowed because the " +
-                    "Directory Server has been configured to refuse the use " +
-                    "of the exec method");
-
-
-    registerMessage(MSGID_LDIF_INVALID_LEADING_SPACE,
-                    "Unable to parse line %d (\"%s\") from the LDIF source " +
-                    "because the line started with a space but there were no " +
-                    "previous lines in the entry to which this line could be " +
-                    "appended");
-    registerMessage(MSGID_LDIF_NO_ATTR_NAME,
-                    "Unable to parse LDIF entry starting at line %d because " +
-                    "the line \"%s\" does not include an attribute name");
-    registerMessage(MSGID_LDIF_NO_DN,
-                    "Unable to parse LDIF entry starting at line %d because " +
-                    "the first line does not contain a DN (the first line " +
-                    "was \"%s\"");
-    registerMessage(MSGID_LDIF_INVALID_DN_SEPARATOR,
-                    "Unable to parse LDIF entry starting at line %d because " +
-                    "line \"%s\" contained an invalid separator between the " +
-                    "\"dn\" prefix and the actual distinguished name");
-    registerMessage(MSGID_LDIF_INVALID_DN,
-                    "Unable to parse LDIF entry starting at line %d because " +
-                    "an error occurred while trying to parse the value of " +
-                    "line \"%s\" as a distinguished name:  %s");
-    registerMessage(MSGID_LDIF_INVALID_ATTR_SEPARATOR,
-                    "Unable to parse LDIF entry %s starting at line %d " +
-                    "because line \"%s\" contained an invalid separator " +
-                    "between the attribute name and value");
-    registerMessage(MSGID_LDIF_COULD_NOT_BASE64_DECODE_DN,
-                    "Unable to parse LDIF entry starting at line %d " +
-                    "because it was not possible to base64-decode the DN " +
-                    "on line \"%s\":  %s");
-    registerMessage(MSGID_LDIF_COULD_NOT_BASE64_DECODE_ATTR,
-                    "Unable to parse LDIF entry %s starting at line %d " +
-                    "because it was not possible to base64-decode the " +
-                    "attribute on line \"%s\":  %s");
-    registerMessage(MSGID_LDIF_DUPLICATE_OBJECTCLASS,
-                    "Entry %s read from LDIF starting at line %d includes a " +
-                    "duplicate objectclass value %s.  The second occurrence " +
-                    "of that objectclass has been skipped");
-    registerMessage(MSGID_LDIF_VALUE_VIOLATES_SYNTAX,
-                    "Entry %s read from LDIF starting at line %d includes " +
-                    "value '%s' for attribute %s that is invalid according " +
-                    "to the associated syntax:  %s");
-    registerMessage(MSGID_LDIF_DUPLICATE_ATTR,
-                    "Entry %s read from LDIF starting at line %d includes a " +
-                    "duplicate attribute %s with value %s.  The second " +
-                    "occurrence of that attribute value has been skipped");
-    registerMessage(MSGID_LDIF_MULTIPLE_VALUES_FOR_SINGLE_VALUED_ATTR,
-                    "Entry %s starting at line %d includes multiple values " +
-                    "for single-valued attribute %s");
-    registerMessage(MSGID_LDIF_INVALID_ATTR_SYNTAX,
-                    "Unable to parse LDIF entry %s starting at line %d " +
-                    "because it has an invalid value \"%s\" for attribute " +
-                    "%s:  %s");
-    registerMessage(MSGID_LDIF_SCHEMA_VIOLATION,
-                    "Entry %s read from LDIF starting at line %d is not " +
-                    "valid because it violates the server's schema " +
-                    "configuration:  %s");
-    registerMessage(MSGID_LDIF_SKIP,
-                    "Skipping entry %s because the DN is not one that " +
-                    "should be included based on the include and " +
-                    "exclude branches");
-    registerMessage(MSGID_LDIF_FILE_EXISTS,
-                    "The specified LDIF file %s already exists and the " +
-                    "export configuration indicates that no attempt should " +
-                    "be made to append to or replace the file");
-    registerMessage(MSGID_LDIF_INVALID_URL,
-                    "Unable to parse LDIF entry %s starting at line %d " +
-                    "because the value of attribute %s was to be read from a " +
-                    "URL but the URL was invalid:  %s");
-    registerMessage(MSGID_LDIF_URL_IO_ERROR,
-                    "Unable to parse LDIF entry %s starting at line %d " +
-                    "because the value of attribute %s was to be read from " +
-                    "URL %s but an error occurred while trying to read that " +
-                    "content:  %s");
-    registerMessage(MSGID_REJECT_FILE_EXISTS,
-                    "The specified reject file %s already exists and the " +
-                    "import configuration indicates that no attempt should " +
-                    "be made to append to or replace the file");
-    registerMessage(MSGID_SKIP_FILE_EXISTS,
-                    "The specified skip file %s already exists and the " +
-                    "import configuration indicates that no attempt should " +
-                    "be made to append to or replace the file");
-    registerMessage(MSGID_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT,
-                    "An error occurred while attempting to determine whether " +
-                    "LDIF entry \"%s\" starting at line %d should be " +
-                    "imported as a result of the include and exclude filter " +
-                    "configuration:  %s");
-    registerMessage(MSGID_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_EXPORT,
-                    "An error occurred while attempting to determine whether " +
-                    "LDIF entry \"%s\" should be exported as a result of the " +
-                    "include and exclude filter configuration:  %s");
-    registerMessage(MSGID_LDIF_INVALID_DELETE_ATTRIBUTES,
-                    "Error in the LDIF change record entry. " +
-                    "Invalid attributes specified for the delete operation");
-    registerMessage(MSGID_LDIF_NO_MOD_DN_ATTRIBUTES,
-                    "Error in the LDIF change record entry. " +
-                    "No attributes specified for the mod DN operation");
-    registerMessage(MSGID_LDIF_NO_DELETE_OLDRDN_ATTRIBUTE,
-                    "Error in the LDIF change record entry. " +
-                    "No delete old RDN attribute specified for the mod " +
-                    "DN operation");
-    registerMessage(MSGID_LDIF_INVALID_DELETE_OLDRDN_ATTRIBUTE,
-                    "Error in the LDIF change record entry. " +
-                    "Invalid value \"%s\" for the delete old RDN attribute " +
-                    "specified for the mod DN operation");
-    registerMessage(MSGID_LDIF_INVALID_CHANGERECORD_ATTRIBUTE,
-                    "Error in the LDIF change record entry. " +
-                    "Invalid attribute \"%s\" specified. " +
-                    "Expecting attribute \"%s\"");
-    registerMessage(MSGID_LDIF_INVALID_MODIFY_ATTRIBUTE,
-                    "Error in the LDIF change record entry. " +
-                    "Invalid attribute \"%s\" specified. " +
-                    "Expecting one of the following attributes \"%s\"");
-    registerMessage(MSGID_LDIF_INVALID_CHANGETYPE_ATTRIBUTE,
-                    "Error in the LDIF change record entry. " +
-                    "Invalid value \"%s\" for the changetype specified. " +
-                    "Expecting one of the following values \"%s\"");
-    registerMessage(MSGID_LDIF_INVALID_MODIFY_ATTRIBUTE_VAL,
-                    "Error in the LDIF change record entry. " +
-                    "Invalid value for the \"%s\" attribute specified. ");
-
-
-    registerMessage(MSGID_SCHEMANAME_EMPTY_VALUE,
-                    "The provided value could not be parsed to determine " +
-                    "whether it contained a valid schema element name or OID " +
-                    "because it was null or empty");
-    registerMessage(MSGID_SCHEMANAME_ILLEGAL_CHAR,
-                    "The provided value \"%s\" does not contain a valid " +
-                    "schema element name or OID because it contains an " +
-                    "illegal character %s at position %d");
-    registerMessage(MSGID_SCHEMANAME_CONSECUTIVE_PERIODS,
-                    "The provided value \"%s\" does not contain a valid " +
-                    "schema element name or OID because the numeric OID " +
-                    "contains two consecutive periods at position %d");
-
-
-    registerMessage(MSGID_ARG_NO_IDENTIFIER,
-                    "The %s argument does not have either a single-character " +
-                    "or a long identifier that may be used to specify it.  " +
-                    "At least one of these must be specified for each " +
-                    "argument");
-    registerMessage(MSGID_ARG_NO_VALUE_PLACEHOLDER,
-                    "The %s argument is configured to take a value but no " +
-                    "value placeholder has been defined for it");
-    registerMessage(MSGID_ARG_NO_INT_VALUE,
-                    "The %s argument does not have any value that may be " +
-                    "retrieved as an integer");
-    registerMessage(MSGID_ARG_CANNOT_DECODE_AS_INT,
-                    "The provided value \"%s\" for the %s argument cannot be " +
-                    "decoded as an integer");
-    registerMessage(MSGID_ARG_INT_MULTIPLE_VALUES,
-                    "The %s argument has multiple values and therefore " +
-                    "cannot be decoded as a single integer value");
-    registerMessage(MSGID_ARG_NO_BOOLEAN_VALUE,
-                    "The %s argument does not have any value that may be " +
-                    "retrieved as a Boolean");
-    registerMessage(MSGID_ARG_CANNOT_DECODE_AS_BOOLEAN,
-                    "The provided value \"%s\" for the %s argument cannot be " +
-                    "decoded as a Boolean");
-    registerMessage(MSGID_ARG_BOOLEAN_MULTIPLE_VALUES,
-                    "The %s argument has multiple values and therefore " +
-                    "cannot be decoded as a single Boolean value");
-
-
-    registerMessage(MSGID_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND,
-                    "The %s argument configuration is invalid because the " +
-                    "lower bound of %d is greater than the upper bound of %d");
-    registerMessage(MSGID_INTARG_VALUE_BELOW_LOWER_BOUND,
-                    "The provided %s value %d is unacceptable because it is " +
-                    "below the lower bound of %d");
-    registerMessage(MSGID_INTARG_VALUE_ABOVE_UPPER_BOUND,
-                    "The provided %s value %d is unacceptable because it is " +
-                    "above the upper bound of %d");
-
-
-    registerMessage(MSGID_BOOLEANARG_NO_VALUE_ALLOWED,
-                    "The provided %s value is unacceptable because Boolean " +
-                    "arguments are never allowed to have values");
-
-
-    registerMessage(MSGID_MCARG_VALUE_NOT_ALLOWED,
-                    "The provided %s value %s is unacceptable because it is " +
-                    "not included in the set of allowed values for that " +
-                    "argument");
-
-
-    registerMessage(MSGID_FILEARG_NO_SUCH_FILE,
-                    "The file %s specified for argument %s does not exist");
-    registerMessage(MSGID_FILEARG_CANNOT_VERIFY_FILE_EXISTENCE,
-                    "An error occurred while trying to verify the existence " +
-                    "of file %s specified for argument %s:  %s");
-    registerMessage(MSGID_FILEARG_CANNOT_OPEN_FILE,
-                    "An error occurred while trying to open file %s " +
-                    "specified for argument %s for reading:  %s");
-    registerMessage(MSGID_FILEARG_CANNOT_READ_FILE,
-                    "An error occurred while trying to read from file %s " +
-                    "specified for argument %s:  %s");
-    registerMessage(MSGID_FILEARG_EMPTY_FILE,
-                    "The file %s specified for argument %s exists but is " +
-                    "empty");
-
-
-    registerMessage(MSGID_ARGPARSER_DUPLICATE_SHORT_ID,
-                    "Cannot add argument %s to the argument list because " +
-                    "its short identifier -%s conflicts with the %s argument " +
-                    "that has already been defined");
-    registerMessage(MSGID_ARGPARSER_DUPLICATE_LONG_ID,
-                    "Cannot add argument %s to the argument list because " +
-                    "its long identifier --%s conflicts with the %s argument " +
-                    "that has already been defined");
-    registerMessage(MSGID_ARGPARSER_CANNOT_READ_PROPERTIES_FILE,
-                    "An error occurred while attempting to read the contents " +
-                    "of the argument properties file %s:  %s");
-    registerMessage(MSGID_ARGPARSER_TOO_MANY_TRAILING_ARGS,
-                    "The provided set of command-line arguments contained " +
-                    "too many unnamed trailing arguments.  The maximum " +
-                    "number of allowed trailing arguments is %d");
-    registerMessage(MSGID_ARGPARSER_LONG_ARG_WITHOUT_NAME,
-                    "The provided argument \"%s\" is invalid because it does " +
-                    "not include the argument name");
-    registerMessage(MSGID_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID,
-                    "Argument \"--%s\" is not allowed for use with this " +
-                    "program");
-    registerMessage(MSGID_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID,
-                    "Argument \"--%s\" requires a value but none was provided");
-    registerMessage(MSGID_ARGPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID,
-                    "The provided value \"%s\" for argument \"--%s\" is not " +
-                    "acceptable:  %s");
-    registerMessage(MSGID_ARGPARSER_NOT_MULTIVALUED_FOR_LONG_ID,
-                    "The argument \"--%s\" was included multiple times in " +
-                    "the provided set of arguments but it does not allow " +
-                    "multiple values");
-    registerMessage(MSGID_ARGPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE,
-                    "A value was provided for argument \"--%s\" but that " +
-                    "argument does not take a value");
-    registerMessage(MSGID_ARGPARSER_INVALID_DASH_AS_ARGUMENT,
-                    "The dash character by itself is invalid for use as an " +
-                    "argument name");
-    registerMessage(MSGID_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID,
-                    "Argument \"-%s\" is not allowed for use with this " +
-                    "program");
-    registerMessage(MSGID_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID,
-                    "Argument \"-%s\" requires a value but none was provided");
-    registerMessage(MSGID_ARGPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID,
-                    "The provided value \"%s\" for argument \"-%s\" is not " +
-                    "acceptable:  %s");
-    registerMessage(MSGID_ARGPARSER_NOT_MULTIVALUED_FOR_SHORT_ID,
-                    "The argument \"-%s\" was included multiple times in the " +
-                    "provided set of arguments but it does not allow " +
-                    "multiple values");
-    registerMessage(MSGID_ARGPARSER_CANT_MIX_ARGS_WITH_VALUES,
-                    "The provided argument block \"-%s%s\" is illegal " +
-                    "because the \"%s\" argument requires a value but is in " +
-                    "the same block as at least one other argument that " +
-                    "doesn't require a value");
-    registerMessage(MSGID_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT,
-                    "Argument \"%s\" does not start with one or two dashes " +
-                    "and unnamed trailing arguments are not allowed");
-    registerMessage(MSGID_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS,
-                    "At least %d unnamed trailing arguments are required " +
-                    "in the argument list, but too few were provided");
-    registerMessage(MSGID_ARGPARSER_NO_VALUE_FOR_REQUIRED_ARG,
-                    "The argument \"--%s\" is required to have a value but "+
-                    "none was provided in the argument list and no default " +
-                    "value is available");
-
-
-    registerMessage(MSGID_MOVEFILE_NO_SUCH_FILE,
-                    "The file to move %s does not exist");
-    registerMessage(MSGID_MOVEFILE_NOT_FILE,
-                    "The file to move %s exists but is not a file");
-    registerMessage(MSGID_MOVEFILE_NO_SUCH_DIRECTORY,
-                    "The target directory %s does not exist");
-    registerMessage(MSGID_MOVEFILE_NOT_DIRECTORY,
-                    "The target directory %s exists but is not a directory");
-
-
-    registerMessage(MSGID_EMAILMSG_INVALID_SENDER_ADDRESS,
-                    "The provided sender address %s is invalid:  %s");
-    registerMessage(MSGID_EMAILMSG_INVALID_RECIPIENT_ADDRESS,
-                    "The provided recipient address %s is invalid:  %s");
-    registerMessage(MSGID_EMAILMSG_CANNOT_SEND,
-                    "The specified e-mail message could not be sent using " +
-                    "any of the configured mail servers");
-
-
-    registerMessage(MSGID_ARG_SUBCOMMAND_DUPLICATE_SUBCOMMAND,
-                    "The argument parser already has a %s subcommand");
-    registerMessage(MSGID_ARG_SUBCOMMAND_DUPLICATE_ARGUMENT_NAME,
-                    "There are multiple arguments for subcommand %s with " +
-                    "name %s");
-    registerMessage(MSGID_ARG_SUBCOMMAND_ARGUMENT_GLOBAL_CONFLICT,
-                    "Argument %s for subcommand %s conflicts with a global " +
-                    "argument with the same name");
-    registerMessage(MSGID_ARG_SUBCOMMAND_DUPLICATE_SHORT_ID,
-                    "Argument %s for subcommand %s has a short identifier " +
-                    "-%s that conflicts with that of argument %s");
-    registerMessage(MSGID_ARG_SUBCOMMAND_ARGUMENT_SHORT_ID_GLOBAL_CONFLICT,
-                    "Argument %s for subcommand %s has a short ID -%s that " +
-                    "conflicts with that of global argument %s");
-    registerMessage(MSGID_ARG_SUBCOMMAND_DUPLICATE_LONG_ID,
-                    "Argument %s for subcommand %s has a long identifier " +
-                    "--%s that conflicts with that of argument %s");
-    registerMessage(MSGID_ARG_SUBCOMMAND_ARGUMENT_LONG_ID_GLOBAL_CONFLICT,
-                    "Argument %s for subcommand %s has a long ID --%s that " +
-                    "conflicts with that of global argument %s");
-
-
-    registerMessage(MSGID_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_NAME,
-                    "There is already another global argument named \"%s\"");
-    registerMessage(MSGID_SUBCMDPARSER_GLOBAL_ARG_NAME_SUBCMD_CONFLICT,
-                    "The argument name %s conflicts with the name of another " +
-                    "argument associated with the %s subcommand");
-    registerMessage(MSGID_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_SHORT_ID,
-                    "Short ID -%s for global argument %s conflicts with the " +
-                    "short ID of another global argument %s");
-    registerMessage(MSGID_SUBCMDPARSER_GLOBAL_ARG_SHORT_ID_CONFLICT,
-                    "Short ID -%s for global argument %s conflicts with the " +
-                    "short ID for the %s argument associated with subcommand " +
-                    "%s");
-    registerMessage(MSGID_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_LONG_ID,
-                    "Long ID --%s for global argument %s conflicts with the " +
-                    "long ID of another global argument %s");
-    registerMessage(MSGID_SUBCMDPARSER_GLOBAL_ARG_LONG_ID_CONFLICT,
-                    "Long ID --%s for global argument %s conflicts with the " +
-                    "long ID for the %s argument associated with subcommand " +
-                    "%s");
-    registerMessage(MSGID_SUBCMDPARSER_CANNOT_READ_PROPERTIES_FILE,
-                    "An error occurred while attempting to read the contents " +
-                    "of the argument properties file %s:  %s");
-    registerMessage(MSGID_SUBCMDPARSER_LONG_ARG_WITHOUT_NAME,
-                    "The provided command-line argument \"%s\" does not " +
-                    "contain an argument name");
-    registerMessage(MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_LONG_ID,
-                    "The provided argument \"--%s\" is not a valid global " +
-                    "argument identifier");
-    registerMessage(MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_LONG_ID,
-                    "The provided argument \"--%s\" is not a valid global or " +
-                    "subcommand argument identifier");
-    registerMessage(MSGID_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID,
-                    "Command-line argument \"--%s\" requires a value but " +
-                    "none was given");
-    registerMessage(MSGID_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID,
-                    "The provided value \"%s\" for argument \"--%s\" is not " +
-                    "acceptable:  %s");
-    registerMessage(MSGID_SUBCMDPARSER_NOT_MULTIVALUED_FOR_LONG_ID,
-                    "The argument \"--%s\" was included multiple times in " +
-                    "the provided set of arguments but it does not allow " +
-                    "multiple values");
-    registerMessage(MSGID_SUBCMDPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE,
-                    "A value was provided for argument \"--%s\" but that " +
-                    "argument does not take a value");
-    registerMessage(MSGID_SUBCMDPARSER_INVALID_DASH_AS_ARGUMENT,
-                    "The dash character by itself is invalid for use as an " +
-                    "argument name");
-    registerMessage(MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID,
-                    "The provided argument \"-%s\" is not a valid global " +
-                    "argument identifier");
-    registerMessage(MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID,
-                    "The provided argument \"-%s\" is not a valid global or " +
-                    "subcommand argument identifier");
-    registerMessage(MSGID_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID,
-                    "Argument \"-%s\" requires a value but none was provided");
-    registerMessage(MSGID_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID,
-                    "The provided value \"%s\" for argument \"-%s\" is not " +
-                    "acceptable:  %s");
-    registerMessage(MSGID_SUBCMDPARSER_NOT_MULTIVALUED_FOR_SHORT_ID,
-                    "The argument \"-%s\" was included multiple times in the " +
-                    "provided set of arguments but it does not allow " +
-                    "multiple values");
-    registerMessage(MSGID_SUBCMDPARSER_CANT_MIX_ARGS_WITH_VALUES,
-                    "The provided argument block \"-%s%s\" is illegal " +
-                    "because the \"%s\" argument requires a value but is " +
-                    "in the same block as at least one other argument that " +
-                    "doesn't require a value");
-    registerMessage(MSGID_SUBCMDPARSER_INVALID_ARGUMENT,
-                    "The provided argument \"%s\" is not recognized");
-    registerMessage(MSGID_SUBCMDPARSER_MULTIPLE_SUBCOMMANDS,
-                    "The provided argument \"%s\" specifies a valid " +
-                    "subcommand, but another subcommand \"%s\" was also " +
-                    "given.  Only a single subcommand may be provided");
-    registerMessage(MSGID_SUBCMDPARSER_NO_VALUE_FOR_REQUIRED_ARG,
-                    "The argument \"--%s\" must be specified");
-
-
-    registerMessage(MSGID_LDAPURL_NO_COLON_SLASH_SLASH,
-                    "The provided string \"%s\" cannot be decoded as an LDAP " +
-                    "URL because it does not contain the necessary :// " +
-                    "component to separate the scheme from the rest of the " +
-                    "URL");
-    registerMessage(MSGID_LDAPURL_NO_SCHEME,
-                    "The provided string \"%s\" cannot be decoded as an LDAP " +
-                    "URL because it does not contain a protocol scheme");
-    registerMessage(MSGID_LDAPURL_NO_HOST,
-                    "The provided string \"%s\" cannot be decoded as an LDAP " +
-                    "URL because it does not contain a host before the colon " +
-                    "to specify the port number");
-    registerMessage(MSGID_LDAPURL_NO_PORT,
-                    "The provided string \"%s\" cannot be decoded as an LDAP " +
-                    "URL because it does not contain a port number after the " +
-                    "colon following the host");
-    registerMessage(MSGID_LDAPURL_CANNOT_DECODE_PORT,
-                    "The provided string \"%s\" cannot be decoded as an LDAP " +
-                    "URL because the port number portion %s cannot be " +
-                    "decoded as an integer");
-    registerMessage(MSGID_LDAPURL_INVALID_PORT,
-                    "The provided string \"%s\" cannot be decoded as an LDAP " +
-                    "URL because the provided port number %d is not within " +
-                    "the valid range between 1 and 65535");
-    registerMessage(MSGID_LDAPURL_INVALID_SCOPE_STRING,
-                    "The provided string \"%s\" cannot be decoded as an LDAP " +
-                    "URL because the scope string %s was not one of the " +
-                    "allowed values of base, one, sub, or subordinate");
-    registerMessage(MSGID_LDAPURL_PERCENT_TOO_CLOSE_TO_END,
-                    "The provided URL component \"%s\" could not be decoded " +
-                    "because the percent character at byte %d was not " +
-                    "followed by two hexadecimal digits");
-    registerMessage(MSGID_LDAPURL_INVALID_HEX_BYTE,
-                    "The provided URL component \"%s\" could not be " +
-                    "decoded because the character at byte %d was not a " +
-                    "valid hexadecimal digit");
-    registerMessage(MSGID_LDAPURL_CANNOT_CREATE_UTF8_STRING,
-                    "An error occurred while attempting to represent a byte " +
-                    "array as a UTF-8 string during the course of decoding a " +
-                    "portion of an LDAP URL:  %s");
-
-
-    registerMessage(MSGID_CHARSET_CONSTRUCTOR_NO_NAME,
-                    "The named character set is invalid because it does not " +
-                    "contain a name");
-    registerMessage(MSGID_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR,
-                    "The named character set is invalid because the provide " +
-                    "name \"%s\" has an invalid character at position %d.  " +
-                    "Only ASCII alphabetic characters are allowed in the " +
-                    "name");
-    registerMessage(MSGID_CHARSET_NO_COLON,
-                    "Cannot decode value \"%s\" as a named character set " +
-                    "because it does not contain a colon to separate the " +
-                    "name from the set of characters");
-    registerMessage(MSGID_CHARSET_NO_NAME,
-                    "Cannot decode value \"%s\" as a named character set " +
-                    "because it does not contain a name to use for the " +
-                    "character set");
-    registerMessage(MSGID_CHARSET_NO_CHARS,
-                    "Cannot decode value \"%s\" as a named character set " +
-                    "because there are no characters to include in the set");
-
-
-    registerMessage(MSGID_TIME_IN_SECONDS,
-                    "%d seconds");
-    registerMessage(MSGID_TIME_IN_MINUTES_SECONDS,
-                    "%d minutes, %s seconds");
-    registerMessage(MSGID_TIME_IN_HOURS_MINUTES_SECONDS,
-                    "%d hours, %d minutes, %s seconds");
-    registerMessage(MSGID_TIME_IN_DAYS_HOURS_MINUTES_SECONDS,
-                    "%d days, %d hours, %d minutes, %s seconds");
-
-
-    registerMessage(MSGID_ACCTNOTTYPE_ACCOUNT_TEMPORARILY_LOCKED,
-                    "account-temporarily-locked");
-    registerMessage(MSGID_ACCTNOTTYPE_ACCOUNT_PERMANENTLY_LOCKED,
-                    "account-permanently-locked");
-    registerMessage(MSGID_ACCTNOTTYPE_ACCOUNT_UNLOCKED,
-                    "account-unlocked");
-    registerMessage(MSGID_ACCTNOTTYPE_ACCOUNT_IDLE_LOCKED,
-                    "account-idle-locked");
-    registerMessage(MSGID_ACCTNOTTYPE_ACCOUNT_RESET_LOCKED,
-                    "account-reset-locked");
-    registerMessage(MSGID_ACCTNOTTYPE_ACCOUNT_DISABLED,
-                    "account-disabled");
-    registerMessage(MSGID_ACCTNOTTYPE_ACCOUNT_ENABLED,
-                    "account-enabled");
-    registerMessage(MSGID_ACCTNOTTYPE_ACCOUNT_EXPIRED,
-                    "account-expired");
-    registerMessage(MSGID_ACCTNOTTYPE_PASSWORD_EXPIRED,
-                    "password-expired");
-    registerMessage(MSGID_ACCTNOTTYPE_PASSWORD_EXPIRING,
-                    "password-expiring");
-    registerMessage(MSGID_ACCTNOTTYPE_PASSWORD_RESET,
-                    "password-reset");
-    registerMessage(MSGID_ACCTNOTTYPE_PASSWORD_CHANGED,
-                    "password-changed");
-
-
-    registerMessage(MSGID_FILEPERM_SET_NO_SUCH_FILE,
-                    "Unable to set permissions for file %s because it does " +
-                    "not exist");
-    registerMessage(MSGID_FILEPERM_CANNOT_EXEC_CHMOD,
-                    "Unable to execute the chmod command to set file " +
-                    "permissions on %s:  %s");
-    registerMessage(MSGID_FILEPERM_SET_JAVA_EXCEPTION,
-                    "One or more exceptions were thrown in the process of " +
-                    "updating the file permissions for %s.  Some of the " +
-                    "permissions for the file may have been altered");
-    registerMessage(MSGID_FILEPERM_SET_JAVA_FAILED_ALTERED,
-                    "One or more updates to the file permissions for %s " +
-                    "failed, but at least one update was successful.  Some " +
-                    "of the permissions for the file may have been altered");
-    registerMessage(MSGID_FILEPERM_SET_JAVA_FAILED_UNALTERED,
-                    "All of the attempts to update the file permissions for " +
-                    "%s failed.  The file should be left with its original " +
-                    "permissions");
-    registerMessage(MSGID_FILEPERM_INVALID_UNIX_MODE_STRING,
-                    "The provided string %s does not represent a valid UNIX " +
-                    "file mode.  UNIX file modes must be a three-character " +
-                    "string in which each character is a numeric digit " +
-                    "between zero and seven");
-
-    registerMessage(MSGID_VALIDATOR_PRECONDITION_NOT_MET,
-                    "A precondition of the invoked method was not met.  This " +
-                    "This usually means there is a defect somewhere in the " +
-                    "call stack.  Details: %s");
-
-    registerMessage(MSGID_GLOBAL_OPTIONS,
-                    "Global Options:");
-    registerMessage(MSGID_GLOBAL_OPTIONS_REFERENCE,
-                    "See \"%s --help\"");
-    registerMessage(MSGID_SUBCMD_OPTIONS,
-                    "SubCommand Options:");
-    registerMessage(MSGID_ARGPARSER_USAGE,
-                    "Usage:");
-    registerMessage(MSGID_SUBCMDPARSER_SUBCMD_HEADING,
-                    "Available subcommands:");
-    registerMessage(MSGID_SUBCMDPARSER_SUBCMD_HELP_HEADING,
-                    "To get the list of subcommands use:");
-    registerMessage(MSGID_SUBCMDPARSER_SUBCMD_REFERENCE,
-                    "See \"%s --help-{category}\"");
-    registerMessage(MSGID_SUBCMDPARSER_GLOBAL_HEADING,
-                    "The accepted value for global options are:");
-    registerMessage(MSGID_GLOBAL_HELP_REFERENCE,
-                    "See \"%s --help\" to get more usage help");
-
-    registerMessage(MSGID_RENAMEFILE_CANNOT_DELETE_TARGET,
-                    "Failed to delete target file %s.  Make sure the file is " +
-                    "not currently in use by this or another application");
-
-    registerMessage(MSGID_RENAMEFILE_CANNOT_RENAME,
-                    "Failed to rename file %s to %s");
-
-
-    registerMessage(MSGID_EXPCHECK_TRUSTMGR_CLIENT_CERT_EXPIRED,
-                    "Refusing to trust client or issuer certificate '%s' " +
-                    "because it expired on %s");
-    registerMessage(MSGID_EXPCHECK_TRUSTMGR_CLIENT_CERT_NOT_YET_VALID,
-                    "Refusing to trust client or issuer certificate '%s' " +
-                    "because it is not valid until %s");
-    registerMessage(MSGID_EXPCHECK_TRUSTMGR_SERVER_CERT_EXPIRED,
-                    "Refusing to trust server or issuer certificate '%s' " +
-                    "because it expired on %s");
-    registerMessage(MSGID_EXPCHECK_TRUSTMGR_SERVER_CERT_NOT_YET_VALID,
-                    "Refusing to trust server or issuer certificate '%s' " +
-                    "because it is not valid until %s");
-
-
-    registerMessage(MSGID_EMBEDUTILS_SERVER_ALREADY_RUNNING,
-                    "The Directory Server cannot be started because it is " +
-                    "already running");
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/VersionMessages.java b/opendj-sdk/opends/src/server/org/opends/server/messages/VersionMessages.java
deleted file mode 100644
index 283deb4..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/VersionMessages.java
+++ /dev/null
@@ -1,151 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
- */
-
-package org.opends.server.messages;
-
-import static org.opends.server.messages.MessageHandler.registerMessage;
-import static org.opends.server.messages.MessageHandler.
-        CATEGORY_MASK_VERSION_COMPATIBITY_ISSUES;
-import static org.opends.server.messages.MessageHandler.
-        SEVERITY_MASK_INFORMATIONAL;
-
-/**
- * Messages relating to incompatible version events (also known as 'flag-days')
- * that might cause potential issues or problems with upgrade or reversions
- * of a particular installation from one version to another.  These messages
- * are usually shown to the user during an upgrade or reversion process to
- * alert them to any postential issues.
- */
-public class VersionMessages {
-
-  /**
-   * Message detailing possible upgrade issues caused by the upgrade of the
-   * Berkley DB libraries in SVN rev 890.
-   */
-  public static final int MSGID_890_UPGRADE =
-       CATEGORY_MASK_VERSION_COMPATIBITY_ISSUES |
-               SEVERITY_MASK_INFORMATIONAL | 1;
-
-  /**
-   * Message detailing possible reversion issues caused by the upgrade of the
-   * Berkley DB libraries in SVN rev 890.
-   */
-  public static final int MSGID_890_REVERSION =
-       CATEGORY_MASK_VERSION_COMPATIBITY_ISSUES |
-               SEVERITY_MASK_INFORMATIONAL | 2;
-
-  /**
-   * Message detailing possible upgrade issues cause by the database
-   * record format change committed with SVN rev 1582.
-   */
-  public static final int MSGID_1582_UPGRADE =
-       CATEGORY_MASK_VERSION_COMPATIBITY_ISSUES |
-               SEVERITY_MASK_INFORMATIONAL | 3;
-
-  /**
-   * Message detailing possible reversion issues cause by the database
-   * record format change committed with SVN rev 1582.
-   */
-  public static final int MSGID_1582_REVERSION =
-       CATEGORY_MASK_VERSION_COMPATIBITY_ISSUES |
-               SEVERITY_MASK_INFORMATIONAL | 4;
-
-  /**
-   * Message detailing possible reversion issues cause by the database
-   * record format change committed with SVN rev 2049.
-   */
-  public static final int MSGID_2049_UPGRADE =
-       CATEGORY_MASK_VERSION_COMPATIBITY_ISSUES |
-               SEVERITY_MASK_INFORMATIONAL | 5;
-
-  /**
-   * Message detailing possible reversion issues cause by the database
-   * record format change committed with SVN rev 2049.
-   */
-  public static final int MSGID_2049_REVERSION =
-       CATEGORY_MASK_VERSION_COMPATIBITY_ISSUES |
-               SEVERITY_MASK_INFORMATIONAL | 6;
-
-  /**
-   * Associates a set of generic messages with the message IDs defined in this
-   * class.
-   */
-  public static void registerMessages() {
-    registerMessage(MSGID_890_UPGRADE,
-            "With this upgrade, the Berkley DB Java Edition JAR " +
-                    "will be upgraded to version 3.2.13 which introduces " +
-                    "incompatibilities to the data format.  Consequently " +
-                    "if at a later time you wish to revert this installation " +
-                    "to its prior version you will have to export the data " +
-                    "from this server and reimport it once the reversion " +
-                    "has finished");
-
-    registerMessage(MSGID_890_REVERSION,
-            "With this reversion, the Berkley DB Java Editiong JAR " +
-                    "will be downgraded to an older version which uses a " +
-                    "different data format than the current version." +
-                    "In order to revert this server you will have to export " +
-                    "the data from this server and reimport it after the " +
-                    "reversion has finished");
-
-    registerMessage(MSGID_1582_UPGRADE,
-            "This upgrade introduces improvements to the data format " +
-                    "which are not backward compatible with the current " +
-                    "version.  Consequently " +
-                    "if at a later time you wish to revert this installation " +
-                    "to its prior version you will have to export the data " +
-                    "from this server and reimport it once the reversion " +
-                    "has finished");
-
-    registerMessage(MSGID_1582_REVERSION,
-            "With this reversion the data format used to store data by the " +
-                    "server will be reverted to a prior version.  " +
-                    "In order to revert this server you will have to export " +
-                    "the data from this server and reimport it after the " +
-                    "reversion has finished");
-
-
-    registerMessage(MSGID_2049_UPGRADE,
-            "This upgrade introduces improvements to the data format " +
-                    "which are not backward compatible with the current " +
-                    "version.  Consequently " +
-                    "if at a later time you wish to revert this installation " +
-                    "to its prior version you will have to export the data " +
-                    "from this server and reimport it once the reversion " +
-                    "has finished");
-
-    registerMessage(MSGID_2049_REVERSION,
-            "With this reversion the data format used to store data by the " +
-                    "server will be reverted to a prior version.  " +
-                    "In order to revert this server you will have to export " +
-                    "the data from this server and reimport it after the " +
-                    "reversion has finished");
-
-
-  }
-
-}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/messages/package-info.java b/opendj-sdk/opends/src/server/org/opends/server/messages/package-info.java
deleted file mode 100644
index 24fe92d..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/messages/package-info.java
+++ /dev/null
@@ -1,45 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-
-
-
-/**
- * Defines all the messages that may be used in the Directory Server,
- * particularly those that may appear in error messages and/or are included in
- * responses to clients.  Each message definition consists of two parts.  The
- * first part is an integer value that uniquely identifies that message among
- * all other messages in the server (information about the message category and
- * severity are encoded in that identifier).  The second element is a default
- * format string that will be used to generate the message associated with a
- * particular message ID.  These format strings may contain tags that will be
- * replaced with additional arguments provided at the time the message is
- * generated.  The default format strings may be overridden using properties
- * files that associated different format strings with message IDs, which can be
- * used to help internationalize the messages that are generated.
- */
-package org.opends.server.messages;
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/plugins/EntryUUIDPlugin.java b/opendj-sdk/opends/src/server/org/opends/server/plugins/EntryUUIDPlugin.java
index 34084c8..870c436 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/plugins/EntryUUIDPlugin.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/plugins/EntryUUIDPlugin.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.plugins;
+import org.opends.messages.Message;
 
 
 
@@ -56,8 +57,8 @@
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.operation.PreOperationAddOperation;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.PluginMessages.*;
+import static org.opends.messages.PluginMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -144,9 +145,9 @@
 
 
         default:
-          int msgID = MSGID_PLUGIN_ENTRYUUID_INVALID_PLUGIN_TYPE;
-          String message = getMessage(msgID, t.toString());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_PLUGIN_ENTRYUUID_INVALID_PLUGIN_TYPE.get(t.toString());
+          throw new ConfigException(message);
       }
     }
   }
@@ -234,7 +235,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(configuration, unacceptableReasons);
   }
@@ -245,7 +246,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(PluginCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -262,8 +263,8 @@
 
 
         default:
-          int msgID = MSGID_PLUGIN_ENTRYUUID_INVALID_PLUGIN_TYPE;
-          String message = getMessage(msgID, pluginType.toString());
+          Message message = ERR_PLUGIN_ENTRYUUID_INVALID_PLUGIN_TYPE.get(
+                  pluginType.toString());
           unacceptableReasons.add(message);
           configAcceptable = false;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/plugins/LDAPADListPlugin.java b/opendj-sdk/opends/src/server/org/opends/server/plugins/LDAPADListPlugin.java
index 711669b..9664fdf 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/plugins/LDAPADListPlugin.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/plugins/LDAPADListPlugin.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.plugins;
+import org.opends.messages.Message;
 
 
 import java.util.LinkedHashSet;
@@ -47,8 +48,8 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.PluginMessages.*;
+import static org.opends.messages.PluginMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -96,9 +97,9 @@
     // The set of plugin types must contain only the pre-parse search element.
     if (pluginTypes.isEmpty())
     {
-      int    msgID   = MSGID_PLUGIN_ADLIST_NO_PLUGIN_TYPES;
-      String message = getMessage(msgID, String.valueOf(configuration.dn()));
-      throw new ConfigException(msgID, message);
+      Message message = ERR_PLUGIN_ADLIST_NO_PLUGIN_TYPES.get(
+          String.valueOf(configuration.dn()));
+      throw new ConfigException(message);
     }
     else
     {
@@ -106,11 +107,9 @@
       {
         if (t != PluginType.PRE_PARSE_SEARCH)
         {
-          int    msgID   = MSGID_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE;
-          String message = getMessage(msgID,
-                                      String.valueOf(configuration.dn()),
-                                      String.valueOf(t));
-          throw new ConfigException(msgID, message);
+          Message message = ERR_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE.get(
+              String.valueOf(configuration.dn()), String.valueOf(t));
+          throw new ConfigException(message);
         }
       }
     }
@@ -198,7 +197,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(configuration, unacceptableReasons);
   }
@@ -209,7 +208,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(PluginCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -224,10 +223,9 @@
 
 
         default:
-          int    msgID   = MSGID_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE;
-          String message = getMessage(msgID,
-                                      String.valueOf(configuration.dn()),
-                                      String.valueOf(pluginType));
+          Message message = ERR_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE.get(
+                  String.valueOf(configuration.dn()),
+                  String.valueOf(pluginType));
           unacceptableReasons.add(message);
           configAcceptable = false;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/plugins/LastModPlugin.java b/opendj-sdk/opends/src/server/org/opends/server/plugins/LastModPlugin.java
index c33700b..5afc808 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/plugins/LastModPlugin.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/plugins/LastModPlugin.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.plugins;
+import org.opends.messages.Message;
 
 
 
@@ -57,8 +58,8 @@
 
 import static org.opends.server.config.ConfigConstants.*;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.PluginMessages.*;
+import static org.opends.messages.PluginMessages.*;
+
 import static org.opends.server.util.TimeThread.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -142,9 +143,9 @@
 
 
         default:
-          int msgID = MSGID_PLUGIN_LASTMOD_INVALID_PLUGIN_TYPE;
-          String message = getMessage(msgID, t.toString());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_PLUGIN_LASTMOD_INVALID_PLUGIN_TYPE.get(t.toString());
+          throw new ConfigException(message);
       }
     }
   }
@@ -239,7 +240,7 @@
 
       // This should never happen.
       modifyOperation.setResultCode(DirectoryConfig.getServerErrorResultCode());
-      modifyOperation.appendErrorMessage(de.getErrorMessage());
+      modifyOperation.appendErrorMessage(de.getMessageObject());
       return new PreOperationPluginResult(false, false, true);
     }
 
@@ -266,7 +267,7 @@
 
       // This should never happen.
       modifyOperation.setResultCode(DirectoryConfig.getServerErrorResultCode());
-      modifyOperation.appendErrorMessage(de.getErrorMessage());
+      modifyOperation.appendErrorMessage(de.getMessageObject());
       return new PreOperationPluginResult(false, false, true);
     }
 
@@ -329,7 +330,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(configuration, unacceptableReasons);
   }
@@ -340,7 +341,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(PluginCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -358,8 +359,8 @@
 
 
         default:
-          int msgID = MSGID_PLUGIN_LASTMOD_INVALID_PLUGIN_TYPE;
-          String message = getMessage(msgID, pluginType.toString());
+          Message message = ERR_PLUGIN_LASTMOD_INVALID_PLUGIN_TYPE.get(
+                  pluginType.toString());
           unacceptableReasons.add(message);
           configAcceptable = false;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/plugins/PasswordPolicyImportPlugin.java b/opendj-sdk/opends/src/server/org/opends/server/plugins/PasswordPolicyImportPlugin.java
index e4706c0..25a05d9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/plugins/PasswordPolicyImportPlugin.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/plugins/PasswordPolicyImportPlugin.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.plugins;
+import org.opends.messages.Message;
 
 
 
@@ -62,17 +63,14 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.extensions.ExtensionsConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.PluginMessages.*;
+import static org.opends.messages.PluginMessages.*;
+import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -156,9 +154,9 @@
 
 
         default:
-          int msgID = MSGID_PLUGIN_PWPIMPORT_INVALID_PLUGIN_TYPE;
-          String message = getMessage(msgID, t.toString());
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_PLUGIN_PWPIMPORT_INVALID_PLUGIN_TYPE.get(t.toString());
+          throw new ConfigException(message);
       }
     }
 
@@ -186,10 +184,9 @@
                   AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
         if (defaultAuthPasswordSchemes[0] == null)
         {
-          int    msgID   = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES;
-          String message = getMessage(msgID,
-                                      AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
-          throw new ConfigException(msgID, message);
+          Message message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES.get(
+              AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
+          throw new ConfigException(message);
         }
       }
     }
@@ -204,9 +201,9 @@
              DirectoryServer.getAuthPasswordStorageScheme(schemeName);
         if (defaultAuthPasswordSchemes[i] == null)
         {
-          int    msgID   = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME;
-          String message = getMessage(msgID, schemeName);
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME.get(schemeName);
+          throw new ConfigException(message);
         }
         i++;
       }
@@ -235,9 +232,9 @@
                   toLowerCase(STORAGE_SCHEME_NAME_SALTED_SHA_1));
         if (defaultUserPasswordSchemes[0] == null)
         {
-          int    msgID   = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES;
-          String message = getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_SHA_1);
-          throw new ConfigException(msgID, message);
+          Message message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES.get(
+              STORAGE_SCHEME_NAME_SALTED_SHA_1);
+          throw new ConfigException(message);
         }
       }
     }
@@ -252,9 +249,9 @@
              DirectoryServer.getPasswordStorageScheme(toLowerCase(schemeName));
         if (defaultUserPasswordSchemes[i] == null)
         {
-          int    msgID   = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME;
-          String message = getMessage(msgID, schemeName);
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME.get(schemeName);
+          throw new ConfigException(message);
         }
         i++;
       }
@@ -354,21 +351,17 @@
             policy = DirectoryServer.getPasswordPolicy(policyDN);
             if (policy == null)
             {
-              int    msgID   = MSGID_PLUGIN_PWIMPORT_NO_SUCH_POLICY;
-              String message = getMessage(msgID, String.valueOf(entry.getDN()),
-                                          String.valueOf(policyDN));
-              logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              Message message = WARN_PLUGIN_PWIMPORT_NO_SUCH_POLICY.get(
+                  String.valueOf(entry.getDN()), String.valueOf(policyDN));
+              logError(message);
             }
             break policyLoop;
           }
           catch (DirectoryException de)
           {
-            int    msgID   = MSGID_PLUGIN_PWIMPORT_CANNOT_DECODE_POLICY_DN;
-            String message = getMessage(msgID, String.valueOf(entry.getDN()),
-                                        de.getErrorMessage());
-            logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            Message message = WARN_PLUGIN_PWIMPORT_CANNOT_DECODE_POLICY_DN.get(
+                String.valueOf(entry.getDN()), de.getMessageObject());
+            logError(message);
             break policyLoop;
           }
         }
@@ -416,13 +409,12 @@
                       TRACER.debugCaught(DebugLogLevel.ERROR, e);
                     }
 
-                    int msgID = MSGID_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD;
-                    String message = getMessage(msgID,
-                         policy.getPasswordAttribute().getNameOrOID(),
-                         String.valueOf(entry.getDN()),
-                         stackTraceToSingleLineString(e));
-                    logError(ErrorLogCategory.PLUGIN,
-                             ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+                    Message message =
+                      ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD.
+                          get(policy.getPasswordAttribute().getNameOrOID(),
+                              String.valueOf(entry.getDN()),
+                              stackTraceToSingleLineString(e));
+                    logError(message);
 
                     encodedValueList.clear();
                     break;
@@ -449,13 +441,12 @@
                       TRACER.debugCaught(DebugLogLevel.ERROR, e);
                     }
 
-                    int msgID = MSGID_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD;
-                    String message = getMessage(msgID,
-                         policy.getPasswordAttribute().getNameOrOID(),
-                         String.valueOf(entry.getDN()),
-                         stackTraceToSingleLineString(e));
-                    logError(ErrorLogCategory.PLUGIN,
-                             ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+                    Message message =
+                      ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD.
+                          get(policy.getPasswordAttribute().getNameOrOID(),
+                              String.valueOf(entry.getDN()),
+                              stackTraceToSingleLineString(e));
+                    logError(message);
 
                     encodedValueList.clear();
                     break;
@@ -515,12 +506,10 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int    msgID   = MSGID_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD;
-              String message = getMessage(msgID, t.getNameOrOID(),
-                                          String.valueOf(entry.getDN()),
-                                          stackTraceToSingleLineString(e));
-              logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                       message, msgID);
+              Message message = ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD.
+                  get(t.getNameOrOID(), String.valueOf(entry.getDN()),
+                      stackTraceToSingleLineString(e));
+              logError(message);
 
               encodedValueList.clear();
               break;
@@ -575,12 +564,10 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int    msgID   = MSGID_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD;
-              String message = getMessage(msgID, t.getNameOrOID(),
-                                          String.valueOf(entry.getDN()),
-                                          stackTraceToSingleLineString(e));
-              logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                       message, msgID);
+              Message message = ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD.
+                  get(t.getNameOrOID(), String.valueOf(entry.getDN()),
+                      stackTraceToSingleLineString(e));
+              logError(message);
 
               encodedValueList.clear();
               break;
@@ -606,7 +593,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     PasswordPolicyImportPluginCfg config =
          (PasswordPolicyImportPluginCfg) configuration;
@@ -620,7 +607,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PasswordPolicyImportPluginCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -635,8 +622,8 @@
 
 
         default:
-          int msgID = MSGID_PLUGIN_PWPIMPORT_INVALID_PLUGIN_TYPE;
-          String message = getMessage(msgID, pluginType.toString());
+          Message message = ERR_PLUGIN_PWPIMPORT_INVALID_PLUGIN_TYPE.get(
+                  pluginType.toString());
           unacceptableReasons.add(message);
           configAcceptable = false;
       }
@@ -655,9 +642,8 @@
                 AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
       if (defaultAuthSchemes[0] == null)
       {
-        int    msgID   = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES;
-        String message = getMessage(msgID,
-                                    AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
+        Message message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES.get(
+                AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
         unacceptableReasons.add(message);
         configAcceptable = false;
       }
@@ -673,8 +659,8 @@
              DirectoryServer.getAuthPasswordStorageScheme(schemeName);
         if (defaultAuthSchemes[i] == null)
         {
-          int    msgID   = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME;
-          String message = getMessage(msgID, schemeName);
+          Message message = ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME.get(
+                  schemeName);
           unacceptableReasons.add(message);
           configAcceptable = false;
         }
@@ -695,8 +681,8 @@
                 toLowerCase(STORAGE_SCHEME_NAME_SALTED_SHA_1));
       if (defaultUserSchemes[0] == null)
       {
-        int    msgID   = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES;
-        String message = getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_SHA_1);
+        Message message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES.get(
+                STORAGE_SCHEME_NAME_SALTED_SHA_1);
         unacceptableReasons.add(message);
         configAcceptable = false;
       }
@@ -712,8 +698,8 @@
              DirectoryServer.getPasswordStorageScheme(toLowerCase(schemeName));
         if (defaultUserSchemes[i] == null)
         {
-          int    msgID   = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME;
-          String message = getMessage(msgID, schemeName);
+          Message message = ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME.get(
+                  schemeName);
           unacceptableReasons.add(message);
           configAcceptable = false;
         }
@@ -735,7 +721,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
 
     // Get the set of default password storage schemes for auth password
@@ -764,9 +750,8 @@
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
 
-          int msgID = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES;
-          messages.add(getMessage(msgID,
-                                  AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1));
+          messages.add(ERR_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES.get(
+                  AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1));
         }
       }
     }
@@ -782,8 +767,8 @@
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
 
-          int msgID = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME;
-          messages.add(getMessage(msgID, schemeName));
+          messages.add(ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME.get(
+                  schemeName));
         }
         i++;
       }
@@ -814,8 +799,8 @@
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
 
-          int msgID = MSGID_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES;
-          messages.add(getMessage(msgID, STORAGE_SCHEME_NAME_SALTED_SHA_1));
+          messages.add(ERR_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES.get(
+                  STORAGE_SCHEME_NAME_SALTED_SHA_1));
         }
       }
     }
@@ -831,8 +816,8 @@
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
 
-          int msgID = MSGID_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME;
-          messages.add(getMessage(msgID, schemeName));
+          messages.add(ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME.get(
+                  schemeName));
         }
         i++;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/plugins/profiler/ProfileViewer.java b/opendj-sdk/opends/src/server/org/opends/server/plugins/profiler/ProfileViewer.java
index 9d01fa6..dbdd0c9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/plugins/profiler/ProfileViewer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/plugins/profiler/ProfileViewer.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.plugins.profiler;
+import org.opends.messages.Message;
 
 
 
@@ -57,8 +58,7 @@
 import org.opends.server.util.args.BooleanArgument;
 import org.opends.server.util.args.StringArgument;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.PluginMessages.*;
+import static org.opends.messages.PluginMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -108,7 +108,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_PROFILEVIEWER_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_PROFILEVIEWER_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.plugins.profiler.ProfileViewer",
                             toolDescription, false);
@@ -121,22 +121,24 @@
       fileNames =
         new StringArgument("filenames", 'f', "fileName", true, true, true,
                            "{file}", null, null,
-                           MSGID_PROFILEVIEWER_DESCRIPTION_FILENAMES);
+                           INFO_PROFILEVIEWER_DESCRIPTION_FILENAMES.get());
       argParser.addArgument(fileNames);
 
-      useGUI = new BooleanArgument("usegui", 'g', "useGUI",
-                                   MSGID_PROFILEVIEWER_DESCRIPTION_USE_GUI);
+      useGUI = new BooleanArgument(
+              "usegui", 'g', "useGUI",
+              INFO_PROFILEVIEWER_DESCRIPTION_USE_GUI.get());
       argParser.addArgument(useGUI);
 
-      displayUsage = new BooleanArgument("help", 'H', "help",
-                                         MSGID_PROFILEVIEWER_DESCRIPTION_USAGE);
+      displayUsage = new BooleanArgument(
+              "help", 'H', "help",
+              INFO_PROFILEVIEWER_DESCRIPTION_USAGE.get());
       argParser.addArgument(displayUsage);
       argParser.setUsageArgument(displayUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_PROFILEVIEWER_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message =
+              ERR_PROFILEVIEWER_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       System.err.println(message);
       System.exit(1);
@@ -150,8 +152,8 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_PROFILEVIEWER_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message =
+              ERR_PROFILEVIEWER_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       System.err.println(message);
       System.err.println(argParser.getUsage());
@@ -177,8 +179,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_PROFILEVIEWER_CANNOT_PROCESS_DATA_FILE;
-        String message = getMessage(msgID, filename,
+        Message message =
+                ERR_PROFILEVIEWER_CANNOT_PROCESS_DATA_FILE.get(filename,
                                     stackTraceToSingleLineString(e));
         System.err.println(message);
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java b/opendj-sdk/opends/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java
index af4fa00..71e709c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.plugins.profiler;
+import org.opends.messages.Message;
 
 
 
@@ -44,17 +45,15 @@
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DirectoryConfig;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ResultCode;
 import org.opends.server.util.TimeThread;
 
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.PluginMessages.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.PluginMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -150,9 +149,9 @@
     // Make sure that this plugin is only registered as a startup plugin.
     if (pluginTypes.isEmpty())
     {
-      int    msgID   = MSGID_PLUGIN_PROFILER_NO_PLUGIN_TYPES;
-      String message = getMessage(msgID, String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message = ERR_PLUGIN_PROFILER_NO_PLUGIN_TYPES.get(
+          String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
     else
     {
@@ -160,10 +159,9 @@
       {
         if (t != PluginType.STARTUP)
         {
-          int    msgID   = MSGID_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE;
-          String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                      String.valueOf(t));
-          throw new ConfigException(msgID, message);
+          Message message = ERR_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE.get(
+              String.valueOf(configEntryDN), String.valueOf(t));
+          throw new ConfigException(message);
         }
       }
     }
@@ -173,10 +171,9 @@
     File profileDirectory = getFileForPath(configuration.getProfileDirectory());
     if (! (profileDirectory.exists() && profileDirectory.isDirectory()))
     {
-      int    msgID   = MSGID_PLUGIN_PROFILER_INVALID_PROFILE_DIR;
-      String message = getMessage(msgID, profileDirectory.getAbsolutePath(),
-                                  String.valueOf(configEntryDN));
-      throw new ConfigException(msgID, message);
+      Message message = WARN_PLUGIN_PROFILER_INVALID_PROFILE_DIR.get(
+          profileDirectory.getAbsolutePath(), String.valueOf(configEntryDN));
+      throw new ConfigException(message);
     }
   }
 
@@ -211,12 +208,10 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA;
-          String message = getMessage(msgID, String.valueOf(configEntryDN),
-                                      filename,
-                                      stackTraceToSingleLineString(e));
-          logError(ErrorLogCategory.PLUGIN, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA.
+              get(String.valueOf(configEntryDN), filename,
+                  stackTraceToSingleLineString(e));
+          ErrorLogger.logError(message);
         }
       }
     }
@@ -249,7 +244,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     ProfilerPluginCfg config = (ProfilerPluginCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -262,7 +257,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       ProfilerPluginCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -270,8 +265,8 @@
     // Make sure that the plugin is only registered as a startup plugin.
     if (configuration.getPluginType().isEmpty())
     {
-      int    msgID   = MSGID_PLUGIN_PROFILER_NO_PLUGIN_TYPES;
-      String message = getMessage(msgID, String.valueOf(cfgEntryDN));
+      Message message = ERR_PLUGIN_PROFILER_NO_PLUGIN_TYPES.get(
+              String.valueOf(cfgEntryDN));
       unacceptableReasons.add(message);
       configAcceptable = false;
     }
@@ -281,8 +276,8 @@
       {
         if (t != PluginCfgDefn.PluginType.STARTUP)
         {
-          int    msgID   = MSGID_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE;
-          String message = getMessage(msgID, String.valueOf(cfgEntryDN),
+          Message message = ERR_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE.get(
+                  String.valueOf(cfgEntryDN),
                                       String.valueOf(t));
           unacceptableReasons.add(message);
           configAcceptable = false;
@@ -296,10 +291,9 @@
     File profileDirectory = getFileForPath(configuration.getProfileDirectory());
     if (! (profileDirectory.exists() && profileDirectory.isDirectory()))
     {
-      int msgID = MSGID_PLUGIN_PROFILER_INVALID_PROFILE_DIR;
-      unacceptableReasons.add(getMessage(msgID,
-                                         profileDirectory.getAbsolutePath(),
-                                         String.valueOf(cfgEntryDN)));
+      unacceptableReasons.add(WARN_PLUGIN_PROFILER_INVALID_PROFILE_DIR.get(
+              profileDirectory.getAbsolutePath(),
+              String.valueOf(cfgEntryDN)));
       configAcceptable = false;
     }
 
@@ -321,7 +315,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<String> messages            = new ArrayList<String>();
+    ArrayList<Message> messages            = new ArrayList<Message>();
 
     currentConfig = configuration;
 
@@ -339,13 +333,13 @@
                  new ProfilerThread(configuration.getProfileSampleInterval());
             profilerThread.start();
 
-            int msgID = MSGID_PLUGIN_PROFILER_STARTED_PROFILING;
-            messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+            messages.add(INFO_PLUGIN_PROFILER_STARTED_PROFILING.get(
+                    String.valueOf(configEntryDN)));
           }
           else
           {
-            int msgID = MSGID_PLUGIN_PROFILER_ALREADY_PROFILING;
-            messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+            messages.add(INFO_PLUGIN_PROFILER_ALREADY_PROFILING.get(
+                    String.valueOf(configEntryDN)));
           }
         }
         break;
@@ -357,15 +351,15 @@
         {
           if (profilerThread == null)
           {
-            int msgID = MSGID_PLUGIN_PROFILER_NOT_RUNNING;
-            messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+            messages.add(INFO_PLUGIN_PROFILER_NOT_RUNNING.get(
+                    String.valueOf(configEntryDN)));
           }
           else
           {
             profilerThread.stopProfiling();
 
-            int msgID = MSGID_PLUGIN_PROFILER_STOPPED_PROFILING;
-            messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+            messages.add(INFO_PLUGIN_PROFILER_STOPPED_PROFILING.get(
+                    String.valueOf(configEntryDN)));
 
             String filename =
                  getFileForPath(
@@ -376,9 +370,9 @@
             {
               profilerThread.writeCaptureData(filename);
 
-              msgID = MSGID_PLUGIN_PROFILER_WROTE_PROFILE_DATA;
-              messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                                      filename));
+              messages.add(INFO_PLUGIN_PROFILER_WROTE_PROFILE_DATA.get(
+                      String.valueOf(configEntryDN),
+                      filename));
             }
             catch (Exception e)
             {
@@ -387,10 +381,10 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              msgID = MSGID_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA;
-              messages.add(getMessage(msgID, String.valueOf(configEntryDN),
-                                      filename,
-                                      stackTraceToSingleLineString(e)));
+              messages.add(ERR_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA.get(
+                      String.valueOf(configEntryDN),
+                      filename,
+                      stackTraceToSingleLineString(e)));
 
               resultCode = DirectoryConfig.getServerErrorResultCode();
             }
@@ -407,15 +401,15 @@
         {
           if (profilerThread == null)
           {
-            int msgID = MSGID_PLUGIN_PROFILER_NOT_RUNNING;
-            messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+            messages.add(INFO_PLUGIN_PROFILER_NOT_RUNNING.get(
+                    String.valueOf(configEntryDN)));
           }
           else
           {
             profilerThread.stopProfiling();
 
-            int msgID = MSGID_PLUGIN_PROFILER_STOPPED_PROFILING;
-            messages.add(getMessage(msgID, String.valueOf(configEntryDN)));
+            messages.add(INFO_PLUGIN_PROFILER_STOPPED_PROFILING.get(
+                    String.valueOf(configEntryDN)));
 
             profilerThread = null;
           }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Boolean.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Boolean.java
index 6444f6c..433ce33 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Boolean.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Boolean.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -149,16 +149,15 @@
   {
     if (value == null)
     {
-      int    msgID   = MSGID_ASN1_BOOLEAN_SET_VALUE_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_BOOLEAN_SET_VALUE_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if (value.length != 1)
     {
-      int msgID = MSGID_ASN1_BOOLEAN_SET_VALUE_INVALID_LENGTH;
-      String message = getMessage(msgID, value.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_BOOLEAN_SET_VALUE_INVALID_LENGTH.get(value.length);
+      throw new ASN1Exception(message);
     }
 
     booleanValue = (value[0] != 0x00);
@@ -182,17 +181,16 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_ASN1_BOOLEAN_DECODE_ELEMENT_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_BOOLEAN_DECODE_ELEMENT_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     byte[] value = element.value();
     if (value.length != 1)
     {
-      int    msgID   = MSGID_ASN1_BOOLEAN_DECODE_ELEMENT_INVALID_LENGTH;
-      String message = getMessage(msgID, value.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_BOOLEAN_DECODE_ELEMENT_INVALID_LENGTH.get(value.length);
+      throw new ASN1Exception(message);
     }
 
     boolean booleanValue = (value[0] != 0x00);
@@ -219,16 +217,15 @@
     // a valid ASN.1 Boolean element.
     if (encodedElement == null)
     {
-      int    msgID   = MSGID_ASN1_BOOLEAN_DECODE_ARRAY_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_BOOLEAN_DECODE_ARRAY_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if (encodedElement.length < 3)
     {
-      int    msgID   = MSGID_ASN1_BOOLEAN_SHORT_ELEMENT;
-      String message = getMessage(msgID, encodedElement.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_BOOLEAN_SHORT_ELEMENT.get(encodedElement.length);
+      throw new ASN1Exception(message);
     }
 
 
@@ -242,15 +239,13 @@
       int numLengthBytes = length;
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
       else if (encodedElement.length < (2 + numLengthBytes))
       {
-        int    msgID   = MSGID_ASN1_TRUNCATED_LENGTH;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
       length = 0x00;
@@ -266,19 +261,18 @@
     // in the value.
     if ((encodedElement.length - valueStartPos) != length)
     {
-      int    msgID   = MSGID_ASN1_LENGTH_MISMATCH;
-      String message = getMessage(msgID, length,
-                                  (encodedElement.length - valueStartPos));
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LENGTH_MISMATCH.get(
+          length, (encodedElement.length - valueStartPos));
+      throw new ASN1Exception(message);
     }
 
 
     // Make sure that the decoded length is exactly one byte.
     if (length != 1)
     {
-      int    msgID   = MSGID_ASN1_BOOLEAN_DECODE_ARRAY_INVALID_LENGTH;
-      String message = getMessage(msgID, length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_BOOLEAN_DECODE_ARRAY_INVALID_LENGTH.get(length);
+      throw new ASN1Exception(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Element.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Element.java
index 44eb285..54d6dda 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Element.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Element.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
@@ -35,8 +36,7 @@
 import org.opends.server.api.ProtocolElement;
 import org.opends.server.types.ByteString;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -573,15 +573,13 @@
     // a valid ASN.1 element.
     if (encodedElement == null)
     {
-      int    msgID   = MSGID_ASN1_NULL_ELEMENT;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_NULL_ELEMENT.get();
+      throw new ASN1Exception(message);
     }
     else if (encodedElement.length < 2)
     {
-      int    msgID   = MSGID_ASN1_SHORT_ELEMENT;
-      String message = getMessage(msgID, encodedElement.length);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SHORT_ELEMENT.get(encodedElement.length);
+      throw new ASN1Exception(message);
     }
 
 
@@ -595,15 +593,13 @@
       int numLengthBytes = length;
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
       else if (encodedElement.length < (2 + numLengthBytes))
       {
-        int    msgID   = MSGID_ASN1_TRUNCATED_LENGTH;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
       length = 0x00;
@@ -619,10 +615,9 @@
     // in the value.
     if ((encodedElement.length - valueStartPos) != length)
     {
-      int    msgID   = MSGID_ASN1_LENGTH_MISMATCH;
-      String message = getMessage(msgID, length,
-                                  (encodedElement.length - valueStartPos));
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LENGTH_MISMATCH.get(
+          length, (encodedElement.length - valueStartPos));
+      throw new ASN1Exception(message);
     }
 
 
@@ -658,16 +653,14 @@
     // a valid ASN.1 element.
     if (encodedElement == null)
     {
-      int    msgID   = MSGID_ASN1_NULL_ELEMENT;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_NULL_ELEMENT.get();
+      throw new ASN1Exception(message);
     }
     else if ((startPos < 0) || (startPos+length > encodedElement.length) ||
              (length < 2))
     {
-      int    msgID   = MSGID_ASN1_SHORT_ELEMENT;
-      String message = getMessage(msgID, encodedElement.length);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SHORT_ELEMENT.get(encodedElement.length);
+      throw new ASN1Exception(message);
     }
 
 
@@ -681,15 +674,13 @@
       int numLengthBytes = elementLength;
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
       else if (startPos+length < (2 + numLengthBytes))
       {
-        int    msgID   = MSGID_ASN1_TRUNCATED_LENGTH;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
       elementLength = 0x00;
@@ -705,10 +696,9 @@
     // in the value.
     if ((startPos+length - valueStartPos) != elementLength)
     {
-      int    msgID   = MSGID_ASN1_LENGTH_MISMATCH;
-      String message = getMessage(msgID, elementLength,
-                                  (startPos+length - valueStartPos));
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LENGTH_MISMATCH.get(
+          elementLength, (startPos+length - valueStartPos));
+      throw new ASN1Exception(message);
     }
 
 
@@ -865,9 +855,8 @@
     // Make sure that the element array is not null.
     if (encodedElements == null)
     {
-      int    msgID   = MSGID_ASN1_ELEMENT_SET_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_ELEMENT_SET_NULL.get();
+      throw new ASN1Exception(message);
     }
 
 
@@ -880,9 +869,8 @@
       byte type = encodedElements[startPos++];
       if (startPos >= encodedElements.length)
       {
-        int    msgID   = MSGID_ASN1_ELEMENT_SET_NO_LENGTH;
-        String message = getMessage(msgID);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_ELEMENT_SET_NO_LENGTH.get();
+        throw new ASN1Exception(message);
       }
 
 
@@ -893,16 +881,16 @@
         int numLengthBytes = length;
         if (numLengthBytes > 4)
         {
-          int    msgID   = MSGID_ASN1_ELEMENT_SET_INVALID_NUM_LENGTH_BYTES;
-          String message = getMessage(msgID, numLengthBytes);
-          throw new ASN1Exception(msgID, message);
+          Message message =
+              ERR_ASN1_ELEMENT_SET_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+          throw new ASN1Exception(message);
         }
 
         if (numLengthBytes > encodedElements.length - startPos)
         {
-          int    msgID   = MSGID_ASN1_ELEMENT_SET_TRUNCATED_LENGTH;
-          String message = getMessage(msgID, numLengthBytes);
-          throw new ASN1Exception(msgID, message);
+          Message message =
+              ERR_ASN1_ELEMENT_SET_TRUNCATED_LENGTH.get(numLengthBytes);
+          throw new ASN1Exception(message);
         }
 
         length = 0x00;
@@ -916,10 +904,9 @@
       // Make sure that there are at least enough bytes to hold the value.
       if (length > encodedElements.length - startPos)
       {
-        int    msgID   = MSGID_ASN1_ELEMENT_SET_TRUNCATED_VALUE;
-        String message = getMessage(msgID, length,
-                                    (encodedElements.length-startPos));
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_ELEMENT_SET_TRUNCATED_VALUE.get(
+            length, (encodedElements.length-startPos));
+        throw new ASN1Exception(message);
       }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Enumerated.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Enumerated.java
index 653270a..28a8dfa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Enumerated.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Enumerated.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -149,16 +149,15 @@
   {
     if (value == null)
     {
-      int    msgID   = MSGID_ASN1_ENUMERATED_SET_VALUE_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_ENUMERATED_SET_VALUE_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if ((value.length < 1) || (value.length > 4))
     {
-      int    msgID   = MSGID_ASN1_ENUMERATED_SET_VALUE_INVALID_LENGTH;
-      String message = getMessage(msgID, value.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_ENUMERATED_SET_VALUE_INVALID_LENGTH.get(value.length);
+      throw new ASN1Exception(message);
     }
 
     intValue = 0;
@@ -187,17 +186,16 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_ASN1_ENUMERATED_DECODE_ELEMENT_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_ENUMERATED_DECODE_ELEMENT_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     byte[] value = element.value();
     if ((value.length < 1) || (value.length > 4))
     {
-      int    msgID   = MSGID_ASN1_ENUMERATED_DECODE_ELEMENT_INVALID_LENGTH;
-      String message = getMessage(msgID, value.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_ENUMERATED_DECODE_ELEMENT_INVALID_LENGTH.get(value.length);
+      throw new ASN1Exception(message);
     }
 
     int intValue = 0;
@@ -229,16 +227,15 @@
     // a valid ASN.1 enumerated element.
     if (encodedElement == null)
     {
-      int    msgID   = MSGID_ASN1_ENUMERATED_DECODE_ARRAY_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_ENUMERATED_DECODE_ARRAY_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if (encodedElement.length < 3)
     {
-      int    msgID   = MSGID_ASN1_ENUMERATED_SHORT_ELEMENT;
-      String message = getMessage(msgID, encodedElement.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_ENUMERATED_SHORT_ELEMENT.get(encodedElement.length);
+      throw new ASN1Exception(message);
     }
 
 
@@ -252,15 +249,13 @@
       int numLengthBytes = length;
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
       else if (encodedElement.length < (2 + numLengthBytes))
       {
-        int    msgID   = MSGID_ASN1_TRUNCATED_LENGTH;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
       length = 0x00;
@@ -276,19 +271,18 @@
     // in the value.
     if ((encodedElement.length - valueStartPos) != length)
     {
-      int    msgID   = MSGID_ASN1_LENGTH_MISMATCH;
-      String message = getMessage(msgID, length,
-                                  (encodedElement.length - valueStartPos));
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LENGTH_MISMATCH.get(
+          length, (encodedElement.length - valueStartPos));
+      throw new ASN1Exception(message);
     }
 
 
     // Make sure that the decoded length is between 1 and 4 bytes.
     if ((length < 1) || (length > 4))
     {
-      int    msgID   = MSGID_ASN1_ENUMERATED_DECODE_ARRAY_INVALID_LENGTH;
-      String message = getMessage(msgID, length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_ENUMERATED_DECODE_ARRAY_INVALID_LENGTH.get(length);
+      throw new ASN1Exception(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Exception.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Exception.java
index 1edd006..2bc27b2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Exception.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Exception.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
@@ -50,24 +51,16 @@
 
 
 
-  // The message ID for the message associated with this initialization
-  // exception.
-  private int messageID;
-
 
 
   /**
    * Creates a new ASN.1 exception with the provided message.
    *
-   * @param  messageID  The unique identifier for the associated message.
    * @param  message    The message that explains the problem that occurred.
    */
-  public ASN1Exception(int messageID, String message)
+  public ASN1Exception(Message message)
   {
     super(message);
-
-
-    this.messageID = messageID;
   }
 
 
@@ -76,28 +69,15 @@
    * Creates a new ASN.1 exception with the provided message and root
    * cause.
    *
-   * @param  messageID  The unique identifier for the associated message.
    * @param  message    The message that explains the problem that occurred.
    * @param  cause      The exception that was caught to trigger this exception.
    */
-  public ASN1Exception(int messageID, String message, Throwable cause)
+  public ASN1Exception(Message message, Throwable cause)
   {
     super(message, cause);
-
-
-    this.messageID = messageID;
   }
 
 
 
-  /**
-   * Retrieves the unique identifier for the associated message.
-   *
-   * @return  The unique identifier for the associated message.
-   */
-  public int getMessageID()
-  {
-    return messageID;
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Integer.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Integer.java
index 61a8746..96b77da 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Integer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Integer.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -149,16 +149,15 @@
   {
     if (value == null)
     {
-      int    msgID   = MSGID_ASN1_INTEGER_SET_VALUE_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_INTEGER_SET_VALUE_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if ((value.length < 1) || (value.length > 4))
     {
-      int    msgID   = MSGID_ASN1_INTEGER_SET_VALUE_INVALID_LENGTH;
-      String message = getMessage(msgID, value.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_INTEGER_SET_VALUE_INVALID_LENGTH.get(value.length);
+      throw new ASN1Exception(message);
     }
 
     intValue = 0;
@@ -187,17 +186,16 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_ASN1_INTEGER_DECODE_ELEMENT_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_INTEGER_DECODE_ELEMENT_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     byte[] value = element.value();
     if ((value.length < 1) || (value.length > 4))
     {
-      int    msgID   = MSGID_ASN1_INTEGER_DECODE_ELEMENT_INVALID_LENGTH;
-      String message = getMessage(msgID, value.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_INTEGER_DECODE_ELEMENT_INVALID_LENGTH.get(value.length);
+      throw new ASN1Exception(message);
     }
 
     int intValue = 0;
@@ -229,16 +227,15 @@
     // a valid ASN.1 integer element.
     if (encodedElement == null)
     {
-      int    msgID   = MSGID_ASN1_INTEGER_DECODE_ARRAY_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_INTEGER_DECODE_ARRAY_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if (encodedElement.length < 3)
     {
-      int    msgID   = MSGID_ASN1_INTEGER_SHORT_ELEMENT;
-      String message = getMessage(msgID, encodedElement.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_INTEGER_SHORT_ELEMENT.get(encodedElement.length);
+      throw new ASN1Exception(message);
     }
 
 
@@ -252,15 +249,13 @@
       int numLengthBytes = length;
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
       else if (encodedElement.length < (2 + numLengthBytes))
       {
-        int    msgID   = MSGID_ASN1_TRUNCATED_LENGTH;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
       length = 0x00;
@@ -276,19 +271,18 @@
     // in the value.
     if ((encodedElement.length - valueStartPos) != length)
     {
-      int    msgID   = MSGID_ASN1_LENGTH_MISMATCH;
-      String message = getMessage(msgID, length,
-                                  (encodedElement.length - valueStartPos));
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LENGTH_MISMATCH.get(
+          length, (encodedElement.length - valueStartPos));
+      throw new ASN1Exception(message);
     }
 
 
     // Make sure that the decoded length is between 1 and 4 bytes.
     if ((length < 1) || (length > 4))
     {
-      int    msgID   = MSGID_ASN1_INTEGER_DECODE_ARRAY_INVALID_LENGTH;
-      String message = getMessage(msgID, length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_INTEGER_DECODE_ARRAY_INVALID_LENGTH.get(length);
+      throw new ASN1Exception(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Long.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Long.java
index fbabff7..a3b136e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Long.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Long.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -162,16 +162,15 @@
   {
     if (value == null)
     {
-      int    msgID   = MSGID_ASN1_INTEGER_SET_VALUE_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_INTEGER_SET_VALUE_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if ((value.length < 1) || (value.length > 8))
     {
-      int    msgID   = MSGID_ASN1_LONG_SET_VALUE_INVALID_LENGTH;
-      String message = getMessage(msgID, value.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_LONG_SET_VALUE_INVALID_LENGTH.get(value.length);
+      throw new ASN1Exception(message);
     }
 
     longValue = 0;
@@ -200,17 +199,16 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_ASN1_INTEGER_DECODE_ELEMENT_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_INTEGER_DECODE_ELEMENT_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     byte[] value = element.value();
     if ((value.length < 1) || (value.length > 8))
     {
-      int    msgID   = MSGID_ASN1_LONG_DECODE_ELEMENT_INVALID_LENGTH;
-      String message = getMessage(msgID, value.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_LONG_DECODE_ELEMENT_INVALID_LENGTH.get(value.length);
+      throw new ASN1Exception(message);
     }
 
     long longValue = 0;
@@ -241,16 +239,15 @@
     // a valid ASN.1 long element.
     if (encodedElement == null)
     {
-      int    msgID   = MSGID_ASN1_INTEGER_DECODE_ARRAY_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_INTEGER_DECODE_ARRAY_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if (encodedElement.length < 3)
     {
-      int    msgID   = MSGID_ASN1_INTEGER_SHORT_ELEMENT;
-      String message = getMessage(msgID, encodedElement.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_INTEGER_SHORT_ELEMENT.get(encodedElement.length);
+      throw new ASN1Exception(message);
     }
 
 
@@ -264,15 +261,13 @@
       int numLengthBytes = length;
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
       else if (encodedElement.length < (2 + numLengthBytes))
       {
-        int    msgID   = MSGID_ASN1_TRUNCATED_LENGTH;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
       length = 0x00;
@@ -288,19 +283,17 @@
     // in the value.
     if ((encodedElement.length - valueStartPos) != length)
     {
-      int    msgID   = MSGID_ASN1_LENGTH_MISMATCH;
-      String message = getMessage(msgID, length,
-                                  (encodedElement.length - valueStartPos));
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LENGTH_MISMATCH.get(
+          length, (encodedElement.length - valueStartPos));
+      throw new ASN1Exception(message);
     }
 
 
     // Make sure that the decoded length is between 1 and 8 bytes.
     if ((length < 1) || (length > 8))
     {
-      int    msgID   = MSGID_ASN1_LONG_DECODE_ARRAY_INVALID_LENGTH;
-      String message = getMessage(msgID, length);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LONG_DECODE_ARRAY_INVALID_LENGTH.get(length);
+      throw new ASN1Exception(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Null.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Null.java
index 6a695b4..9f6a845 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Null.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Null.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -92,9 +92,9 @@
   {
     if ((value != null) && (value.length != 0))
     {
-      int    msgID   = MSGID_ASN1_NULL_SET_VALUE_INVALID_LENGTH;
-      String message = getMessage(msgID, value.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_NULL_SET_VALUE_INVALID_LENGTH.get(value.length);
+      throw new ASN1Exception(message);
     }
   }
 
@@ -115,17 +115,16 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_ASN1_NULL_DECODE_ELEMENT_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_NULL_DECODE_ELEMENT_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     byte[] value = element.value();
     if (value.length != 0)
     {
-      int    msgID   = MSGID_ASN1_NULL_DECODE_ELEMENT_INVALID_LENGTH;
-      String message = getMessage(msgID, value.length);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_NULL_DECODE_ELEMENT_INVALID_LENGTH.get(value.length);
+      throw new ASN1Exception(message);
     }
 
     return new ASN1Null(element.getType());
@@ -150,16 +149,14 @@
     // a valid ASN.1 null element.
     if (encodedElement == null)
     {
-      int    msgID   = MSGID_ASN1_NULL_DECODE_ARRAY_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_NULL_DECODE_ARRAY_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if (encodedElement.length < 2)
     {
-      int    msgID   = MSGID_ASN1_SHORT_ELEMENT;
-      String message = getMessage(msgID, encodedElement.length);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SHORT_ELEMENT.get(encodedElement.length);
+      throw new ASN1Exception(message);
     }
 
 
@@ -173,15 +170,13 @@
       int numLengthBytes = length;
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
       else if (encodedElement.length < (2 + numLengthBytes))
       {
-        int    msgID   = MSGID_ASN1_TRUNCATED_LENGTH;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
       length = 0x00;
@@ -197,19 +192,17 @@
     // in the value.
     if ((encodedElement.length - valueStartPos) != length)
     {
-      int    msgID   = MSGID_ASN1_LENGTH_MISMATCH;
-      String message = getMessage(msgID, length,
-                                  (encodedElement.length - valueStartPos));
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LENGTH_MISMATCH.get(
+          length, (encodedElement.length - valueStartPos));
+      throw new ASN1Exception(message);
     }
 
 
     // Make sure that the decoded length is exactly zero byte.
     if (length != 0)
     {
-      int    msgID   = MSGID_ASN1_NULL_DECODE_ARRAY_INVALID_LENGTH;
-      String message = getMessage(msgID, length);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_NULL_DECODE_ARRAY_INVALID_LENGTH.get(length);
+      throw new ASN1Exception(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1OctetString.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1OctetString.java
index 98e0572..27789f0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1OctetString.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1OctetString.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -127,6 +127,20 @@
    * Creates a new ASN.1 octet string element with the default type and the
    * provided value.
    *
+   * @param  messageValue  The value for this ASN.1 octet string element as a
+   *                      string.
+   */
+  public ASN1OctetString(Message messageValue)
+  {
+    this(messageValue != null ? messageValue.toString() : null);
+  }
+
+
+
+  /**
+   * Creates a new ASN.1 octet string element with the default type and the
+   * provided value.
+   *
    * @param  stringValue  The value for this ASN.1 octet string element as a
    *                      string.
    */
@@ -330,9 +344,8 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_ASN1_OCTET_STRING_DECODE_ELEMENT_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_OCTET_STRING_DECODE_ELEMENT_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     return new ASN1OctetString(element.getType(), element.value());
@@ -358,16 +371,14 @@
     // a valid ASN.1 element.
     if (encodedElement == null)
     {
-      int    msgID   = MSGID_ASN1_OCTET_STRING_DECODE_ARRAY_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_OCTET_STRING_DECODE_ARRAY_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if (encodedElement.length < 2)
     {
-      int    msgID   = MSGID_ASN1_SHORT_ELEMENT;
-      String message = getMessage(msgID, encodedElement.length);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SHORT_ELEMENT.get(encodedElement.length);
+      throw new ASN1Exception(message);
     }
 
 
@@ -381,15 +392,13 @@
       int numLengthBytes = length;
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
       else if (encodedElement.length < (2 + numLengthBytes))
       {
-        int    msgID   = MSGID_ASN1_TRUNCATED_LENGTH;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
       length = 0x00;
@@ -405,10 +414,9 @@
     // in the value.
     if ((encodedElement.length - valueStartPos) != length)
     {
-      int    msgID   = MSGID_ASN1_LENGTH_MISMATCH;
-      String message = getMessage(msgID, length,
-                                  (encodedElement.length - valueStartPos));
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LENGTH_MISMATCH.get(
+          length, (encodedElement.length - valueStartPos));
+      throw new ASN1Exception(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Reader.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Reader.java
index 23d94c7..6d28876 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Reader.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Reader.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
@@ -35,8 +36,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 
 
 
@@ -217,9 +217,9 @@
       // Make sure that there are an acceptable number of bytes in the length.
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_ELEMENT_SET_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message =
+            ERR_ASN1_ELEMENT_SET_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
 
@@ -231,9 +231,9 @@
         {
           // We've reached the end of the stream in the middle of the value.
           // This is not good, so throw an exception.
-          int    msgID   = MSGID_ASN1_ELEMENT_SET_TRUNCATED_LENGTH;
-          String message = getMessage(msgID, numLengthBytes);
-          throw new IOException(message);
+          Message message =
+              ERR_ASN1_ELEMENT_SET_TRUNCATED_LENGTH.get(numLengthBytes);
+          throw new IOException(message.toString());
         }
 
         length = (length << 8) | lengthByte;
@@ -250,9 +250,9 @@
     }
     else if ((maxElementSize > 0) && (length > maxElementSize))
     {
-      int    msgID   = MSGID_ASN1_READER_MAX_SIZE_EXCEEDED;
-      String message = getMessage(msgID, length, maxElementSize);
-      throw new ASN1Exception(msgID, message);
+      Message message =
+          ERR_ASN1_READER_MAX_SIZE_EXCEEDED.get(length, maxElementSize);
+      throw new ASN1Exception(message);
     }
 
 
@@ -266,9 +266,9 @@
       int bytesRead = inputStream.read(value, readPos, bytesNeeded);
       if (bytesRead < 0)
       {
-        int    msgID   = MSGID_ASN1_ELEMENT_SET_TRUNCATED_VALUE;
-        String message = getMessage(msgID, length, bytesNeeded);
-        throw new IOException(message);
+        Message message =
+            ERR_ASN1_ELEMENT_SET_TRUNCATED_VALUE.get(length, bytesNeeded);
+        throw new IOException(message.toString());
       }
 
       bytesNeeded -= bytesRead;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Sequence.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Sequence.java
index abe1332..5e0ba00 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Sequence.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Sequence.java
@@ -25,14 +25,14 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
 import java.util.ArrayList;
 import java.util.Iterator;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -212,9 +212,8 @@
   {
     if (value == null)
     {
-      int    msgID   = MSGID_ASN1_SEQUENCE_SET_VALUE_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SEQUENCE_SET_VALUE_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     elements = decodeElements(value);
@@ -238,9 +237,8 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_ASN1_SEQUENCE_DECODE_ELEMENT_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SEQUENCE_DECODE_ELEMENT_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     byte[] value = element.value();
@@ -268,16 +266,14 @@
     // a valid ASN.1 sequence element.
     if (encodedElement == null)
     {
-      int    msgID   = MSGID_ASN1_SEQUENCE_DECODE_ARRAY_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SEQUENCE_DECODE_ARRAY_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if (encodedElement.length < 2)
     {
-      int    msgID   = MSGID_ASN1_SHORT_ELEMENT;
-      String message = getMessage(msgID, encodedElement.length);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SHORT_ELEMENT.get(encodedElement.length);
+      throw new ASN1Exception(message);
     }
 
 
@@ -291,15 +287,13 @@
       int numLengthBytes = length;
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
       else if (encodedElement.length < (2 + numLengthBytes))
       {
-        int    msgID   = MSGID_ASN1_TRUNCATED_LENGTH;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
       length = 0x00;
@@ -315,10 +309,9 @@
     // in the value.
     if ((encodedElement.length - valueStartPos) != length)
     {
-      int    msgID   = MSGID_ASN1_LENGTH_MISMATCH;
-      String message = getMessage(msgID, length,
-                                  (encodedElement.length - valueStartPos));
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LENGTH_MISMATCH.get(
+          length, (encodedElement.length - valueStartPos));
+      throw new ASN1Exception(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Set.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Set.java
index 6b1d80a..9161f60 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Set.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/asn1/ASN1Set.java
@@ -25,14 +25,14 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.asn1;
+import org.opends.messages.Message;
 
 
 
 import java.util.ArrayList;
 import java.util.Iterator;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -212,9 +212,8 @@
   {
     if (value == null)
     {
-      int    msgID   = MSGID_ASN1_SET_SET_VALUE_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SET_SET_VALUE_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     elements = decodeElements(value);
@@ -238,9 +237,8 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_ASN1_SET_DECODE_ELEMENT_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SET_DECODE_ELEMENT_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     byte[] value = element.value();
@@ -267,16 +265,14 @@
     // a valid ASN.1 set element.
     if (encodedElement == null)
     {
-      int    msgID   = MSGID_ASN1_SET_DECODE_ARRAY_NULL;
-      String message = getMessage(msgID);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SET_DECODE_ARRAY_NULL.get();
+      throw new ASN1Exception(message);
     }
 
     if (encodedElement.length < 2)
     {
-      int    msgID   = MSGID_ASN1_SHORT_ELEMENT;
-      String message = getMessage(msgID, encodedElement.length);
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_SHORT_ELEMENT.get(encodedElement.length);
+      throw new ASN1Exception(message);
     }
 
 
@@ -290,15 +286,13 @@
       int numLengthBytes = length;
       if (numLengthBytes > 4)
       {
-        int    msgID   = MSGID_ASN1_INVALID_NUM_LENGTH_BYTES;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
       else if (encodedElement.length < (2 + numLengthBytes))
       {
-        int    msgID   = MSGID_ASN1_TRUNCATED_LENGTH;
-        String message = getMessage(msgID, numLengthBytes);
-        throw new ASN1Exception(msgID, message);
+        Message message = ERR_ASN1_TRUNCATED_LENGTH.get(numLengthBytes);
+        throw new ASN1Exception(message);
       }
 
       length = 0x00;
@@ -314,10 +308,9 @@
     // in the value.
     if ((encodedElement.length - valueStartPos) != length)
     {
-      int    msgID   = MSGID_ASN1_LENGTH_MISMATCH;
-      String message = getMessage(msgID, length,
-                                  (encodedElement.length - valueStartPos));
-      throw new ASN1Exception(msgID, message);
+      Message message = ERR_ASN1_LENGTH_MISMATCH.get(
+          length, (encodedElement.length - valueStartPos));
+      throw new ASN1Exception(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/internal/InternalClientConnection.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/internal/InternalClientConnection.java
index 0a94e98..5c7b3f9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/internal/InternalClientConnection.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/internal/InternalClientConnection.java
@@ -25,13 +25,15 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.internal;
+import org.opends.messages.Message;
 
 
 
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.getExceptionMessage;
 
@@ -69,8 +71,8 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.IntermediateResponse;
 import org.opends.server.types.LDAPException;
 import org.opends.server.types.Modification;
@@ -241,10 +243,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      logError(ErrorLogCategory.CONNECTION_HANDLING,
-               ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_INTERNAL_CANNOT_DECODE_DN, fullDNString,
-               getExceptionMessage(de));
+      logError(ERR_INTERNAL_CANNOT_DECODE_DN.get(
+          fullDNString, getExceptionMessage(de)));
     }
 
     connectionID  = nextConnectionID.getAndDecrement();
@@ -1370,7 +1370,7 @@
     {
       throw new DirectoryException(
                      ResultCode.valueOf(le.getResultCode()),
-                     le.getErrorMessage(), le.getMessageID(), le);
+                     le.getErrorMessage(), le);
     }
 
     return processSearch(new ASN1OctetString(rawBaseDN), scope,
@@ -1420,7 +1420,7 @@
     {
       throw new DirectoryException(
                      ResultCode.valueOf(le.getResultCode()),
-                     le.getErrorMessage(), le.getMessageID(), le);
+                     le.getErrorMessage(), le);
     }
 
     return processSearch(new ASN1OctetString(rawBaseDN), scope,
@@ -1475,7 +1475,7 @@
     {
       throw new DirectoryException(
                      ResultCode.valueOf(le.getResultCode()),
-                     le.getErrorMessage(), le.getMessageID(), le);
+                     le.getErrorMessage(), le);
     }
 
     return processSearch(new ASN1OctetString(rawBaseDN), scope,
@@ -1798,14 +1798,10 @@
    * @param  message           The message to send to the client.  It
    *                           may be <CODE>null</CODE> if no
    *                           notification is to be sent.
-   * @param  messageID         The unique identifier associated with
-   *                           the message to send to the client.  It
-   *                           may be -1 if no notification is to be
-   *                           sent.
    */
   public void disconnect(DisconnectReason disconnectReason,
-                         boolean sendNotification, String message,
-                         int messageID)
+                         boolean sendNotification,
+                         Message message)
   {
     // No implementation is required since there is nothing to
     // disconnect.  Further, since there is no real disconnect, we can
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/internal/InternalConnectionHandler.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/internal/InternalConnectionHandler.java
index 7ad0b55..8f748fc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/internal/InternalConnectionHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/internal/InternalConnectionHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.internal;
+import org.opends.messages.Message;
 
 
 
@@ -41,7 +42,6 @@
 
 
 
-
 /**
  * This class defines a Directory Server connection handler that will
  * handle internal "connections".
@@ -140,7 +140,7 @@
    *                           connection handler should also be
    *                           closed.
    */
-  public void finalizeConnectionHandler(String finalizeReason,
+  public void finalizeConnectionHandler(Message finalizeReason,
                                         boolean closeConnections)
   {
     // No implementation is required.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java
index ddb9022..c3e5d43 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.jmx;
+import org.opends.messages.Message;
 
 
 
@@ -70,8 +71,9 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.ProtocolMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.ProtocolMessages.*;
+
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -149,7 +151,7 @@
       disconnect(
           DisconnectReason.ADMIN_LIMIT_EXCEEDED,
           true,
-          MSGID_LDAP_CONNHANDLER_REJECTED_BY_SERVER);
+          ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER.get());
     }
     operationList = new LinkedList<AbstractOperation>();
 
@@ -211,7 +213,7 @@
 
     //
     // Ok, we can perform the unbind: call finalize
-    disconnect(DisconnectReason.CLIENT_DISCONNECT, false, null, -1);
+    disconnect(DisconnectReason.CLIENT_DISCONNECT, false, null);
   }
 
 
@@ -487,9 +489,8 @@
     // Check if we have enough privilege
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      int msgID = MSGID_JMX_ADD_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      addOperation.setErrorMessage(new StringBuilder(message));
+      Message message = ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES.get();
+      addOperation.setErrorMessage(new MessageBuilder(message));
       addOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -531,9 +532,8 @@
     // Check if we have enough privilege
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      int msgID = MSGID_JMX_ADD_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      addOperation.setErrorMessage(new StringBuilder(message));
+      Message message = ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES.get();
+      addOperation.setErrorMessage(new MessageBuilder(message));
       addOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -562,9 +562,8 @@
     // Check if we have enough privilege
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      int msgID = MSGID_JMX_DELETE_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      deleteOperation.setErrorMessage(new StringBuilder(message));
+      Message message = ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES.get();
+      deleteOperation.setErrorMessage(new MessageBuilder(message));
       deleteOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -597,9 +596,8 @@
     // Check if we have enough privilege
     if (! hasPrivilege(Privilege.JMX_READ, null))
     {
-      int msgID = MSGID_JMX_SEARCH_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      compareOperation.setErrorMessage(new StringBuilder(message));
+      Message message = ERR_JMX_SEARCH_INSUFFICIENT_PRIVILEGES.get();
+      compareOperation.setErrorMessage(new MessageBuilder(message));
       compareOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -628,9 +626,8 @@
     // Check if we have enough privilege
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      int msgID = MSGID_JMX_DELETE_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      deleteOperation.setErrorMessage(new StringBuilder(message));
+      Message message = ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES.get();
+      deleteOperation.setErrorMessage(new MessageBuilder(message));
       deleteOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -686,9 +683,8 @@
 
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      int msgID = MSGID_JMX_MODIFY_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      modifyOperation.setErrorMessage(new StringBuilder(message));
+      Message message = ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES.get();
+      modifyOperation.setErrorMessage(new MessageBuilder(message));
       modifyOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -721,9 +717,8 @@
                              modifications);
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      int msgID = MSGID_JMX_MODIFY_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      modifyOperation.setErrorMessage(new StringBuilder(message));
+      Message message = ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES.get();
+      modifyOperation.setErrorMessage(new MessageBuilder(message));
       modifyOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -779,9 +774,8 @@
 
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      int msgID = MSGID_JMX_MODDN_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      modifyDNOperation.setErrorMessage(new StringBuilder(message));
+      Message message = ERR_JMX_MODDN_INSUFFICIENT_PRIVILEGES.get();
+      modifyDNOperation.setErrorMessage(new MessageBuilder(message));
       modifyDNOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -819,9 +813,8 @@
 
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      int msgID = MSGID_JMX_MODDN_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      modifyDNOperation.setErrorMessage(new StringBuilder(message));
+      Message message = ERR_JMX_MODDN_INSUFFICIENT_PRIVILEGES.get();
+      modifyDNOperation.setErrorMessage(new MessageBuilder(message));
       modifyDNOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -885,9 +878,8 @@
 
     if (! hasPrivilege(Privilege.JMX_READ, null))
     {
-      int msgID = MSGID_JMX_SEARCH_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      searchOperation.setErrorMessage(new StringBuilder(message));
+      Message message = ERR_JMX_SEARCH_INSUFFICIENT_PRIVILEGES.get();
+      searchOperation.setErrorMessage(new MessageBuilder(message));
       searchOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -1018,13 +1010,10 @@
    * @param  message           The message to send to the client.  It may be
    *                           <CODE>null</CODE> if no notification is to be
    *                           sent.
-   * @param  messageID         The unique identifier associated with the message
-   *                           to send to the client.  It may be -1 if no
-   *                           notification is to be sent.
    */
   public void disconnect(DisconnectReason disconnectReason,
-                         boolean sendNotification, String message,
-                         int messageID)
+                         boolean sendNotification,
+                         Message message)
   {
     // we are already performing a disconnect
     if (disconnectStarted)
@@ -1061,7 +1050,7 @@
       PluginConfigManager pluginManager =
            DirectoryServer.getPluginConfigManager();
       pluginManager.invokePostDisconnectPlugins(this, disconnectReason,
-                                                messageID, message);
+                                                message);
     }
     catch (Exception e)
     {
@@ -1266,7 +1255,7 @@
   protected void finalize()
   {
     super.finalize();
-    disconnect(DisconnectReason.OTHER, false, null, -1);
+    disconnect(DisconnectReason.OTHER, false, null);
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java
index 5111e2d..8b54232 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java
@@ -25,12 +25,13 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.jmx;
+import org.opends.messages.Message;
 
 
 
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 import java.net.InetSocketAddress;
@@ -53,8 +54,8 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.HostPort;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
@@ -122,7 +123,7 @@
       JMXConnectionHandlerCfg config) {
     // Create variables to include in the response.
     ResultCode resultCode = ResultCode.SUCCESS;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     // Determine whether or not the RMI connection needs restarting.
     boolean rmiConnectorRestart = false;
@@ -164,7 +165,7 @@
       catch (RuntimeException e)
       {
         resultCode = ResultCode.OPERATIONS_ERROR;
-        messages.add(e.getMessage());
+        messages.add(Message.raw(e.getMessage()));
       }
     }
 
@@ -187,7 +188,7 @@
    *          associated with the connection handler should also be
    *          closed.
    */
-  public void finalizeConnectionHandler(String finalizeReason,
+  public void finalizeConnectionHandler(Message finalizeReason,
       boolean closeConnections) {
     // Make sure that we don't get notified of any more changes.
     currentConfig.removeJMXChangeListener(this);
@@ -329,24 +330,19 @@
       KeyManagerProvider provider = DirectoryServer
           .getKeyManagerProvider(keyManagerProviderDN);
       if (provider == null) {
-        int msgID = MSGID_JMX_CONNHANDLER_INVALID_KEYMANAGER_DN;
-        String message = getMessage(msgID, String
-            .valueOf(config.dn()), String
-            .valueOf(keyManagerProviderDN));
-        throw new ConfigException(msgID, message);
+        Message message = ERR_JMX_CONNHANDLER_INVALID_KEYMANAGER_DN.get(
+            String.valueOf(config.dn()), String.valueOf(keyManagerProviderDN));
+        throw new ConfigException(message);
       }
     }
 
     // Issue warning if there is not key manager by SSL is enabled.
     if (config.isUseSSL() && keyManagerProviderDN == null) {
       // TODO: give a more useful feedback message.
-      logError(ErrorLogCategory.CONFIGURATION,
-          ErrorLogSeverity.SEVERE_WARNING,
-          MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_USE_SSL);
-      int msgID = MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_USE_SSL;
-      String message = getMessage(msgID,
+      Message message = ERR_JMX_CONNHANDLER_CANNOT_DETERMINE_USE_SSL.get(
           String.valueOf(currentConfig.dn()), "");
-      throw new ConfigException(msgID, message);
+      logError(message);
+      throw new ConfigException(message);
     }
 
     // Configuration is ok.
@@ -364,13 +360,11 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_JMX_CONNHANDLER_CANNOT_BIND;
-      String message = getMessage(msgID, String.valueOf(config.dn()),
-                                  config.getListenPort(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.CONNECTION_HANDLING,
-               ErrorLogSeverity.SEVERE_ERROR, message, msgID);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_JMX_CONNHANDLER_CANNOT_BIND.
+          get(String.valueOf(config.dn()), config.getListenPort(),
+              getExceptionMessage(e));
+      logError(message);
+      throw new InitializationException(message);
     }
     finally
     {
@@ -431,7 +425,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(ConnectionHandlerCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     JMXConnectionHandlerCfg config = (JMXConnectionHandlerCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -444,7 +438,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       JMXConnectionHandlerCfg config,
-      List<String> unacceptableReasons) {
+      List<Message> unacceptableReasons) {
     boolean isAcceptable = true;
 
     //  Validate the key manager provider DN.
@@ -453,19 +447,19 @@
       KeyManagerProvider provider = DirectoryServer
           .getKeyManagerProvider(keyManagerProviderDN);
       if (provider == null) {
-        int msgID = MSGID_JMX_CONNHANDLER_INVALID_KEYMANAGER_DN;
-        unacceptableReasons.add(getMessage(msgID, String
-            .valueOf(config.dn()), String
-            .valueOf(keyManagerProviderDN)));
+
+        unacceptableReasons.add(ERR_JMX_CONNHANDLER_INVALID_KEYMANAGER_DN.get(
+                String.valueOf(config.dn()),
+                String.valueOf(keyManagerProviderDN)));
         isAcceptable = false;
       }
     }
 
     if (config.isUseSSL() && keyManagerProviderDN == null) {
       // TODO: give a more useful feedback message.
-      int msgID = MSGID_JMX_CONNHANDLER_CANNOT_DETERMINE_USE_SSL;
-      unacceptableReasons.add(getMessage(msgID, String.valueOf(config
-          .dn()), ""));
+
+      unacceptableReasons.add(ERR_JMX_CONNHANDLER_CANNOT_DETERMINE_USE_SSL.get(
+              String.valueOf(config.dn()), ""));
       isAcceptable = false;
     }
 
@@ -490,7 +484,7 @@
   /**
    * {@inheritDoc}
    */
-  public void processServerShutdown(String reason) {
+  public void processServerShutdown(Message reason) {
     // We should also close the RMI registry.
     rmiConnector.finalizeConnectionHandler(true, true);
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java
index 1fcd21f..cbc28b4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.jmx;
+import org.opends.messages.Message;
 
 import java.util.*;
 
@@ -35,7 +36,7 @@
 import org.opends.server.core.BindOperationBasis;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.PluginConfigManager;
-import org.opends.server.messages.CoreMessages;
+import org.opends.messages.CoreMessages;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.protocols.ldap.LDAPResultCode;
 import org.opends.server.types.Control;
@@ -47,8 +48,7 @@
 import org.opends.server.types.LDAPException;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
@@ -247,7 +247,7 @@
     {
       LDAPException ldapEx = new LDAPException(
           LDAPResultCode.INVALID_CREDENTIALS,
-          CoreMessages.MSGID_RESULT_INVALID_CREDENTIALS, null);
+          CoreMessages.INFO_RESULT_INVALID_CREDENTIALS.get());
       SecurityException se = new SecurityException();
       se.initCause(ldapEx);
       throw se;
@@ -286,14 +286,12 @@
       // Check JMX_READ privilege.
       if (! jmxClientConnection.hasPrivilege(Privilege.JMX_READ, null))
       {
-        int msgID = MSGID_JMX_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_JMX_INSUFFICIENT_PRIVILEGES.get();
 
         jmxClientConnection.disconnect(DisconnectReason.CONNECTION_REJECTED,
-            false, msgID);
+            false, message);
 
-        SecurityException se = new SecurityException(message);
-        throw se;
+        throw new SecurityException(message.toString());
       }
       return jmxClientConnection;
     }
@@ -303,7 +301,7 @@
       // Set the initcause.
       LDAPException ldapEx = new LDAPException(
           LDAPResultCode.INVALID_CREDENTIALS,
-          CoreMessages.MSGID_RESULT_INVALID_CREDENTIALS, null);
+          CoreMessages.INFO_RESULT_INVALID_CREDENTIALS.get());
       SecurityException se = new SecurityException("return code: "
           + bindOp.getResultCode());
       se.initCause(ldapEx);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AbandonRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AbandonRequestProtocolOp.java
index f501536..112ea38 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AbandonRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AbandonRequestProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -35,8 +36,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -161,9 +161,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_ABANDON_REQUEST_DECODE_ID;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_ABANDON_REQUEST_DECODE_ID.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
     return new AbandonRequestProtocolOp(idToAbandon);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddRequestProtocolOp.java
index 55da3a4..1fab827 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddRequestProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -43,8 +44,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -222,18 +222,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_ADD_REQUEST_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_ADD_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if (numElements != 2)
     {
-      int    msgID   = MSGID_LDAP_ADD_REQUEST_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_ADD_REQUEST_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -249,9 +249,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_ADD_REQUEST_DECODE_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_ADD_REQUEST_DECODE_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -274,9 +273,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_ADD_REQUEST_DECODE_ATTRS;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_ADD_REQUEST_DECODE_ATTRS.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddResponseProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddResponseProtocolOp.java
index e97eb02..bd1f072 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddResponseProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddResponseProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -73,7 +73,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private String errorMessage;
+  private Message errorMessage;
 
 
 
@@ -100,7 +100,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public AddResponseProtocolOp(int resultCode, String errorMessage)
+  public AddResponseProtocolOp(int resultCode, Message errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -119,7 +119,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public AddResponseProtocolOp(int resultCode, String errorMessage,
+  public AddResponseProtocolOp(int resultCode, Message errorMessage,
                                DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -160,7 +160,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -172,7 +172,7 @@
    *
    * @param  errorMessage  The error message for this response.
    */
-  public void setErrorMessage(String errorMessage)
+  public void setErrorMessage(Message errorMessage)
   {
     this.errorMessage = errorMessage;
   }
@@ -318,18 +318,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 3) || (numElements > 4))
     {
-      int    msgID   = MSGID_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -345,9 +344,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_RESULT_CODE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -371,16 +370,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_MATCHED_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    String errorMessage;
+    Message errorMessage;
     try
     {
-      errorMessage = elements.get(2).decodeAsOctetString().stringValue();
+      errorMessage = Message.raw(
+              elements.get(2).decodeAsOctetString().stringValue());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -393,9 +393,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_ERROR_MESSAGE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -424,9 +424,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_RESULT_DECODE_REFERRALS;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message =
+            ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/BindRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/BindRequestProtocolOp.java
index 894150d..976b7eb 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/BindRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/BindRequestProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -40,8 +41,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -370,18 +370,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_BIND_REQUEST_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_BIND_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if (numElements != 3)
     {
-      int    msgID   = MSGID_LDAP_BIND_REQUEST_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, String.valueOf(numElements));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_BIND_REQUEST_DECODE_INVALID_ELEMENT_COUNT.get(
+          numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -397,9 +397,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_BIND_REQUEST_DECODE_VERSION;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_BIND_REQUEST_DECODE_VERSION.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -415,9 +415,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_BIND_REQUEST_DECODE_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_BIND_REQUEST_DECODE_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -439,9 +438,9 @@
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_LDAP_BIND_REQUEST_DECODE_PASSWORD;
-            String message = getMessage(msgID, String.valueOf(e));
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+            Message message =
+                ERR_LDAP_BIND_REQUEST_DECODE_PASSWORD.get(String.valueOf(e));
+            throw new LDAPException(PROTOCOL_ERROR, message, e);
           }
 
           break;
@@ -460,16 +459,16 @@
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_LDAP_BIND_REQUEST_DECODE_SASL_INFO;
-            String message = getMessage(msgID, String.valueOf(e));
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+            Message message =
+                ERR_LDAP_BIND_REQUEST_DECODE_SASL_INFO.get(String.valueOf(e));
+            throw new LDAPException(PROTOCOL_ERROR, message, e);
           }
 
           break;
         default:
-          int msgID = MSGID_LDAP_BIND_REQUEST_DECODE_INVALID_CRED_TYPE;
-          String message = getMessage(msgID, element.getType());
-          throw new LDAPException(AUTH_METHOD_NOT_SUPPORTED, msgID, message);
+          Message message = ERR_LDAP_BIND_REQUEST_DECODE_INVALID_CRED_TYPE.get(
+              element.getType());
+          throw new LDAPException(AUTH_METHOD_NOT_SUPPORTED, message);
       }
     }
     catch (LDAPException le)
@@ -483,9 +482,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_BIND_REQUEST_DECODE_CREDENTIALS;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_BIND_REQUEST_DECODE_CREDENTIALS.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/BindResponseProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/BindResponseProtocolOp.java
index 0219b95..53b0523 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/BindResponseProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/BindResponseProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -76,7 +76,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private String errorMessage;
+  private Message errorMessage;
 
 
 
@@ -104,7 +104,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public BindResponseProtocolOp(int resultCode, String errorMessage)
+  public BindResponseProtocolOp(int resultCode, Message errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -124,7 +124,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public BindResponseProtocolOp(int resultCode, String errorMessage,
+  public BindResponseProtocolOp(int resultCode, Message errorMessage,
                                 DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -145,9 +145,8 @@
    * @param  matchedDN              The matched DN for this response.
    * @param  referralURLs           The referral URLs for this response.
    * @param  serverSASLCredentials  The server SASL credentials for this
-   *                                response.
    */
-  public BindResponseProtocolOp(int resultCode, String errorMessage,
+  public BindResponseProtocolOp(int resultCode, Message errorMessage,
                                 DN matchedDN, List<String> referralURLs,
                                 ASN1OctetString serverSASLCredentials)
   {
@@ -190,7 +189,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -202,7 +201,7 @@
    *
    * @param  errorMessage  The error message for this response.
    */
-  public void setErrorMessage(String errorMessage)
+  public void setErrorMessage(Message errorMessage)
   {
     this.errorMessage = errorMessage;
   }
@@ -380,18 +379,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 3) || (numElements > 5))
     {
-      int    msgID   = MSGID_LDAP_BIND_RESULT_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_BIND_RESULT_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -407,9 +405,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_RESULT_CODE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -433,16 +431,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_MATCHED_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    String errorMessage;
+    Message errorMessage;
     try
     {
-      errorMessage = elements.get(2).decodeAsOctetString().stringValue();
+      errorMessage =
+              Message.raw(elements.get(2).decodeAsOctetString().stringValue());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -455,9 +454,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_ERROR_MESSAGE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -490,9 +489,9 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int msgID = MSGID_LDAP_RESULT_DECODE_REFERRALS;
-              String message = getMessage(msgID, String.valueOf(e));
-              throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+              Message message =
+                  ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
+              throw new LDAPException(PROTOCOL_ERROR, message, e);
             }
 
             break;
@@ -510,16 +509,17 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int msgID = MSGID_LDAP_BIND_RESULT_DECODE_SERVER_SASL_CREDENTIALS;
-              String message = getMessage(msgID, String.valueOf(e));
-              throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+              Message message =
+                  ERR_LDAP_BIND_RESULT_DECODE_SERVER_SASL_CREDENTIALS.
+                    get(String.valueOf(e));
+              throw new LDAPException(PROTOCOL_ERROR, message, e);
             }
 
             break;
           default:
-            int    msgID   = MSGID_LDAP_BIND_RESULT_DECODE_INVALID_TYPE;
-            String message = getMessage(msgID, element.getType());
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+            Message message =
+                ERR_LDAP_BIND_RESULT_DECODE_INVALID_TYPE.get(element.getType());
+            throw new LDAPException(PROTOCOL_ERROR, message);
         }
         break;
       case 5:
@@ -541,9 +541,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_LDAP_RESULT_DECODE_REFERRALS;
-          String message = getMessage(msgID, String.valueOf(e));
-          throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+          Message message =
+              ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
+          throw new LDAPException(PROTOCOL_ERROR, message, e);
         }
 
         try
@@ -557,9 +557,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_LDAP_BIND_RESULT_DECODE_SERVER_SASL_CREDENTIALS;
-          String message = getMessage(msgID, String.valueOf(e));
-          throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+          Message message = ERR_LDAP_BIND_RESULT_DECODE_SERVER_SASL_CREDENTIALS.
+              get(String.valueOf(e));
+          throw new LDAPException(PROTOCOL_ERROR, message, e);
         }
 
         break;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareRequestProtocolOp.java
index b6fad85..1f5fdd2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareRequestProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -38,8 +39,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -229,18 +229,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_COMPARE_REQUEST_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_COMPARE_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if (numElements != 2)
     {
-      int    msgID   = MSGID_LDAP_COMPARE_REQUEST_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_COMPARE_REQUEST_DECODE_INVALID_ELEMENT_COUNT.
+          get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -256,9 +256,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_COMPARE_REQUEST_DECODE_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_COMPARE_REQUEST_DECODE_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -274,18 +274,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_COMPARE_REQUEST_DECODE_AVA;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_COMPARE_REQUEST_DECODE_AVA.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     numElements = avaElements.size();
     if (numElements != 2)
     {
-      int    msgID   = MSGID_LDAP_COMPARE_REQUEST_DECODE_AVA_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_COMPARE_REQUEST_DECODE_AVA_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -301,9 +301,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_COMPARE_REQUEST_DECODE_TYPE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_COMPARE_REQUEST_DECODE_TYPE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -319,9 +319,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_COMPARE_REQUEST_DECODE_VALUE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_COMPARE_REQUEST_DECODE_VALUE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareResponseProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareResponseProtocolOp.java
index fa62c55..bb44805 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareResponseProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareResponseProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -73,7 +73,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private String errorMessage;
+  private Message errorMessage;
 
 
 
@@ -100,7 +100,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public CompareResponseProtocolOp(int resultCode, String errorMessage)
+  public CompareResponseProtocolOp(int resultCode, Message errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -119,7 +119,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public CompareResponseProtocolOp(int resultCode, String errorMessage,
+  public CompareResponseProtocolOp(int resultCode, Message errorMessage,
                                    DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -160,7 +160,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -172,7 +172,7 @@
    *
    * @param  errorMessage  The error message for this response.
    */
-  public void setErrorMessage(String errorMessage)
+  public void setErrorMessage(Message errorMessage)
   {
     this.errorMessage = errorMessage;
   }
@@ -319,18 +319,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 3) || (numElements > 4))
     {
-      int    msgID   = MSGID_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -346,9 +345,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_RESULT_CODE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -372,16 +371,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_MATCHED_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    String errorMessage;
+    Message errorMessage;
     try
     {
-      errorMessage = elements.get(2).decodeAsOctetString().stringValue();
+      errorMessage =
+              Message.raw(elements.get(2).decodeAsOctetString().stringValue());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -394,9 +394,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_ERROR_MESSAGE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -425,9 +425,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_RESULT_DECODE_REFERRALS;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message =
+            ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteRequestProtocolOp.java
index 32596d7..1bf6252 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteRequestProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -35,8 +36,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -157,9 +157,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_DELETE_REQUEST_DECODE_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_DELETE_REQUEST_DECODE_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteResponseProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteResponseProtocolOp.java
index 183292f..deaf2fe 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteResponseProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteResponseProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -76,7 +76,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private String errorMessage;
+  private Message errorMessage;
 
 
 
@@ -103,7 +103,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public DeleteResponseProtocolOp(int resultCode, String errorMessage)
+  public DeleteResponseProtocolOp(int resultCode, Message 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 DeleteResponseProtocolOp(int resultCode, String errorMessage,
+  public DeleteResponseProtocolOp(int resultCode, Message errorMessage,
                                   DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -163,7 +163,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -175,7 +175,7 @@
    *
    * @param  errorMessage  The error message for this response.
    */
-  public void setErrorMessage(String errorMessage)
+  public void setErrorMessage(Message errorMessage)
   {
     this.errorMessage = errorMessage;
   }
@@ -322,18 +322,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 3) || (numElements > 4))
     {
-      int    msgID   = MSGID_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -349,9 +348,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_RESULT_CODE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -375,16 +374,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_MATCHED_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    String errorMessage;
+    Message errorMessage;
     try
     {
-      errorMessage = elements.get(2).decodeAsOctetString().stringValue();
+      errorMessage = Message.raw(
+              elements.get(2).decodeAsOctetString().stringValue());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -397,9 +397,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_ERROR_MESSAGE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -428,9 +428,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_RESULT_DECODE_REFERRALS;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message =
+            ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ExtendedRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ExtendedRequestProtocolOp.java
index 53ab3a2..d6de727 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ExtendedRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ExtendedRequestProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -38,8 +39,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -217,18 +217,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_EXTENDED_REQUEST_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_EXTENDED_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 1) || (numElements > 2))
     {
-      int    msgID   = MSGID_LDAP_EXTENDED_REQUEST_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_EXTENDED_REQUEST_DECODE_INVALID_ELEMENT_COUNT.
+          get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -244,9 +244,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_EXTENDED_REQUEST_DECODE_OID;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_EXTENDED_REQUEST_DECODE_OID.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -264,9 +264,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_EXTENDED_REQUEST_DECODE_VALUE;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message =
+            ERR_LDAP_EXTENDED_REQUEST_DECODE_VALUE.get(String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
     }
     else
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ExtendedResponseProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ExtendedResponseProtocolOp.java
index 7130468..1192b65 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ExtendedResponseProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ExtendedResponseProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -76,7 +76,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private String errorMessage;
+  private Message errorMessage;
 
   // The OID for this extended response.
   private String oid;
@@ -108,7 +108,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public ExtendedResponseProtocolOp(int resultCode, String errorMessage)
+  public ExtendedResponseProtocolOp(int resultCode, Message errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -129,7 +129,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public ExtendedResponseProtocolOp(int resultCode, String errorMessage,
+  public ExtendedResponseProtocolOp(int resultCode, Message errorMessage,
                                     DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -153,7 +153,7 @@
    * @param  oid           The OID for this extended response.
    * @param  value         The value for this extended response.
    */
-  public ExtendedResponseProtocolOp(int resultCode, String errorMessage,
+  public ExtendedResponseProtocolOp(int resultCode, Message errorMessage,
                                     DN matchedDN, List<String> referralURLs,
                                     String oid, ASN1OctetString value)
   {
@@ -197,7 +197,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -209,7 +209,7 @@
    *
    * @param  errorMessage  The error message for this response.
    */
-  public void setErrorMessage(String errorMessage)
+  public void setErrorMessage(Message errorMessage)
   {
     this.errorMessage = errorMessage;
   }
@@ -417,18 +417,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 3) || (numElements > 6))
     {
-      int    msgID   = MSGID_LDAP_EXTENDED_RESULT_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_EXTENDED_RESULT_DECODE_INVALID_ELEMENT_COUNT.
+          get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -444,9 +443,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_RESULT_CODE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -470,16 +469,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_MATCHED_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    String errorMessage;
+    Message errorMessage;
     try
     {
-      errorMessage = elements.get(2).decodeAsOctetString().stringValue();
+      errorMessage = Message.raw(
+              elements.get(2).decodeAsOctetString().stringValue());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -492,9 +492,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_ERROR_MESSAGE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -525,9 +525,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int msgID = MSGID_LDAP_EXTENDED_RESULT_DECODE_REFERRALS;
-            String message = getMessage(msgID, String.valueOf(e));
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+            Message message = ERR_LDAP_EXTENDED_RESULT_DECODE_REFERRALS.get(
+                String.valueOf(e));
+            throw new LDAPException(PROTOCOL_ERROR, message, e);
           }
 
           break;
@@ -543,9 +543,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int msgID = MSGID_LDAP_EXTENDED_RESULT_DECODE_OID;
-            String message = getMessage(msgID, String.valueOf(e));
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+            Message message =
+                ERR_LDAP_EXTENDED_RESULT_DECODE_OID.get(String.valueOf(e));
+            throw new LDAPException(PROTOCOL_ERROR, message, e);
           }
 
           break;
@@ -561,16 +561,16 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int msgID = MSGID_LDAP_EXTENDED_RESULT_DECODE_VALUE;
-            String message = getMessage(msgID, String.valueOf(e));
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+            Message message =
+                ERR_LDAP_EXTENDED_RESULT_DECODE_VALUE.get(String.valueOf(e));
+            throw new LDAPException(PROTOCOL_ERROR, message, e);
           }
 
           break;
         default:
-          int    msgID   = MSGID_LDAP_EXTENDED_RESULT_DECODE_INVALID_TYPE;
-          String message = getMessage(msgID, element.getType());
-          throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+          Message message = ERR_LDAP_EXTENDED_RESULT_DECODE_INVALID_TYPE.get(
+              element.getType());
+          throw new LDAPException(PROTOCOL_ERROR, message);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/IntermediateResponseProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/IntermediateResponseProtocolOp.java
index 5480929..3c27621 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/IntermediateResponseProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/IntermediateResponseProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -39,8 +40,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -226,18 +226,19 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_INTERMEDIATE_RESPONSE_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_INTERMEDIATE_RESPONSE_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if (numElements > 2)
     {
-      int msgID = MSGID_LDAP_INTERMEDIATE_RESPONSE_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_INTERMEDIATE_RESPONSE_DECODE_INVALID_ELEMENT_COUNT.
+            get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -262,9 +263,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, ae);
             }
 
-            int msgID = MSGID_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_OID;
-            String message = getMessage(msgID, ae.getMessage());
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+            Message message = ERR_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_OID.
+                get(ae.getMessage());
+            throw new LDAPException(PROTOCOL_ERROR, message);
           }
           break;
         case TYPE_INTERMEDIATE_RESPONSE_VALUE:
@@ -279,15 +280,16 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, ae);
             }
 
-            int msgID = MSGID_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_VALUE;
-            String message = getMessage(msgID, ae.getMessage());
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+            Message message =
+                ERR_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_VALUE.
+                  get(ae.getMessage());
+            throw new LDAPException(PROTOCOL_ERROR, message);
           }
           break;
         default:
-          int msgID = MSGID_LDAP_INTERMEDIATE_RESPONSE_INVALID_ELEMENT_TYPE;
-          String message = getMessage(msgID, byteToHex(e.getType()));
-          throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+          Message message = ERR_LDAP_INTERMEDIATE_RESPONSE_INVALID_ELEMENT_TYPE.
+              get(byteToHex(e.getType()));
+          throw new LDAPException(PROTOCOL_ERROR, message);
       }
     }
     else if (elements.size() == 2)
@@ -303,9 +305,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ae);
         }
 
-        int msgID = MSGID_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_OID;
-        String message = getMessage(msgID, ae.getMessage());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        Message message = ERR_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_OID.get(
+            ae.getMessage());
+        throw new LDAPException(PROTOCOL_ERROR, message);
       }
 
       try
@@ -319,9 +321,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ae);
         }
 
-        int msgID = MSGID_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_OID;
-        String message = getMessage(msgID, ae.getMessage());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        Message message = ERR_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_OID.get(
+            ae.getMessage());
+        throw new LDAPException(PROTOCOL_ERROR, message);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPAttribute.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPAttribute.java
index 087ab23..4025512 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPAttribute.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPAttribute.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -43,8 +44,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -303,10 +303,10 @@
     {
       if (! attributeValues.add(new AttributeValue(attrType, value)))
       {
-        int    msgID   = MSGID_LDAP_ATTRIBUTE_DUPLICATE_VALUES;
-        String message = getMessage(msgID, attributeType);
-        throw new LDAPException(LDAPResultCode.ATTRIBUTE_OR_VALUE_EXISTS, msgID,
-                                message);
+        Message message =
+            ERR_LDAP_ATTRIBUTE_DUPLICATE_VALUES.get(attributeType);
+        throw new LDAPException(
+                LDAPResultCode.ATTRIBUTE_OR_VALUE_EXISTS, message);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
index cbf90ee..34b157d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -32,10 +33,9 @@
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
-import static org.opends.server.util.StaticUtils.getBacktrace;
 import static org.opends.server.util.StaticUtils.getExceptionMessage;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
@@ -82,8 +82,8 @@
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DisconnectReason;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.IntermediateResponse;
 import org.opends.server.types.Operation;
 import org.opends.server.types.ResultCode;
@@ -271,7 +271,7 @@
     if (connectionID < 0)
     {
       disconnect(DisconnectReason.ADMIN_LIMIT_EXCEEDED, true,
-                 MSGID_LDAP_CONNHANDLER_REJECTED_BY_SERVER);
+                 ERR_LDAP_CONNHANDLER_REJECTED_BY_SERVER.get());
     }
   }
 
@@ -584,16 +584,15 @@
       // This must mean that the operation has either not yet completed or that
       // it completed without a result for some reason.  In any case, log a
       // message and set the response to "operations error".
-      logError(ErrorLogCategory.REQUEST_HANDLING, ErrorLogSeverity.MILD_ERROR,
-               MSGID_LDAP_CLIENT_SEND_RESPONSE_NO_RESULT_CODE,
-               operation.getOperationType().toString(),
-               operation.getConnectionID(), operation.getOperationID());
+      logError(ERR_LDAP_CLIENT_SEND_RESPONSE_NO_RESULT_CODE.
+          get(operation.getOperationType().toString(),
+              operation.getConnectionID(), operation.getOperationID()));
       resultCode = DirectoryServer.getServerErrorResultCode();
     }
 
 
-    StringBuilder errorMessage = operation.getErrorMessage();
-    DN            matchedDN    = operation.getMatchedDN();
+    MessageBuilder errorMessage = operation.getErrorMessage();
+    DN             matchedDN    = operation.getMatchedDN();
 
 
     // Referrals are not allowed for LDAPv2 clients.
@@ -605,7 +604,7 @@
       if (resultCode == ResultCode.REFERRAL)
       {
         resultCode = ResultCode.CONSTRAINT_VIOLATION;
-        errorMessage.append(getMessage(MSGID_LDAPV2_REFERRAL_RESULT_CHANGED));
+        errorMessage.append(ERR_LDAPV2_REFERRAL_RESULT_CHANGED.get());
       }
 
       List<String> opReferrals = operation.getReferralURLs();
@@ -621,8 +620,8 @@
           referralsStr.append(iterator.next());
         }
 
-        errorMessage.append(getMessage(MSGID_LDAPV2_REFERRALS_OMITTED,
-                                       String.valueOf(referralsStr)));
+        errorMessage.append(ERR_LDAPV2_REFERRALS_OMITTED.get(
+                String.valueOf(referralsStr)));
       }
     }
     else
@@ -635,63 +634,64 @@
     {
       case ADD:
         protocolOp = new AddResponseProtocolOp(resultCode.getIntValue(),
-                                               errorMessage.toString(),
+                                               errorMessage.toMessage(),
                                                matchedDN, referralURLs);
         break;
       case BIND:
         ASN1OctetString serverSASLCredentials =
              ((BindOperationBasis) operation).getServerSASLCredentials();
         protocolOp = new BindResponseProtocolOp(resultCode.getIntValue(),
-                              errorMessage.toString(), matchedDN,
+                              errorMessage.toMessage(), matchedDN,
                               referralURLs, serverSASLCredentials);
         break;
       case COMPARE:
         protocolOp = new CompareResponseProtocolOp(resultCode.getIntValue(),
-                                                   errorMessage.toString(),
+                                                   errorMessage.toMessage(),
                                                    matchedDN, referralURLs);
         break;
       case DELETE:
         protocolOp = new DeleteResponseProtocolOp(resultCode.getIntValue(),
-                                                  errorMessage.toString(),
+                                                  errorMessage.toMessage(),
                                                   matchedDN, referralURLs);
         break;
       case EXTENDED:
         // If this an LDAPv2 client, then we can't send this.
         if (ldapVersion == 2)
         {
-          logError(ErrorLogCategory.REQUEST_HANDLING,
-                   ErrorLogSeverity.MILD_WARNING,
-                   MSGID_LDAPV2_SKIPPING_EXTENDED_RESPONSE,
-                   getConnectionID(), String.valueOf(operation));
+          logError(ERR_LDAPV2_SKIPPING_EXTENDED_RESPONSE.get(
+              getConnectionID(), operation.getOperationID(),
+                  String.valueOf(operation)));
           return null;
         }
 
         ExtendedOperationBasis extOp = (ExtendedOperationBasis) operation;
         protocolOp = new ExtendedResponseProtocolOp(resultCode.getIntValue(),
-                              errorMessage.toString(), matchedDN, referralURLs,
+                              errorMessage.toMessage(), matchedDN, referralURLs,
                               extOp.getResponseOID(), extOp.getResponseValue());
         break;
       case MODIFY:
         protocolOp = new ModifyResponseProtocolOp(resultCode.getIntValue(),
-                                                  errorMessage.toString(),
+                                                  errorMessage.toMessage(),
                                                   matchedDN, referralURLs);
         break;
       case MODIFY_DN:
         protocolOp = new ModifyDNResponseProtocolOp(resultCode.getIntValue(),
-                                                    errorMessage.toString(),
+                                                    errorMessage.toMessage(),
                                                     matchedDN, referralURLs);
         break;
       case SEARCH:
         protocolOp = new SearchResultDoneProtocolOp(resultCode.getIntValue(),
-                                                    errorMessage.toString(),
+                                                    errorMessage.toMessage(),
                                                     matchedDN, referralURLs);
         break;
       default:
         // This must be a type of operation that doesn't have a response.  This
         // shouldn't happen, so log a message and return.
-        logError(ErrorLogCategory.REQUEST_HANDLING, ErrorLogSeverity.MILD_ERROR,
-                 MSGID_LDAP_CLIENT_SEND_RESPONSE_INVALID_OP,
-                 String.valueOf(operation));
+        logError(ERR_LDAP_CLIENT_SEND_RESPONSE_INVALID_OP.get(
+                String.valueOf(operation.getOperationType()),
+                getConnectionID(),
+                operation.getOperationID(),
+                String.valueOf(operation)));
         return null;
     }
 
@@ -781,12 +781,10 @@
     // client for the rest of the operation.
     if (ldapVersion == 2)
     {
-      int    msgID   = MSGID_LDAPV2_SKIPPING_SEARCH_REFERENCE;
-      String message = getMessage(msgID, getConnectionID(),
-                                  searchOperation.getOperationID(),
-                                  String.valueOf(searchReference));
-      logError(ErrorLogCategory.REQUEST_HANDLING,
-               ErrorLogSeverity.MILD_WARNING, message, msgID);
+      Message message = ERR_LDAPV2_SKIPPING_SEARCH_REFERENCE.
+          get(getConnectionID(), searchOperation.getOperationID(),
+              String.valueOf(searchReference));
+      logError(message);
       return false;
     }
 
@@ -907,8 +905,7 @@
 
         // We were unable to send the message due to some other internal
         // problem.  Disconnect from the client and return.
-        disconnect(DisconnectReason.SERVER_ERROR, true, -1, String.valueOf(e),
-                   getBacktrace(e));
+        disconnect(DisconnectReason.SERVER_ERROR, true, null);
         return;
       }
     }
@@ -920,8 +917,7 @@
       }
 
       // FIXME -- Log a message or something
-      disconnect(DisconnectReason.SERVER_ERROR, true, -1, String.valueOf(e),
-                 getBacktrace(e));
+      disconnect(DisconnectReason.SERVER_ERROR, true, null);
       return;
     }
     finally
@@ -945,13 +941,10 @@
    * @param  message           The message to include in the disconnect
    *                           notification response.  It may be
    *                           <CODE>null</CODE> if no message is to be sent.
-   * @param  messageID         The unique identifier associated with the message
-   *                           to send to the client.  It may be -1 if no
-   *                           notification is to be sent.
    */
   public void disconnect(DisconnectReason disconnectReason,
-                         boolean sendNotification, String message,
-                         int messageID)
+                         boolean sendNotification,
+                         Message message)
   {
     // If we are already in the middle of a disconnect, then don't do anything.
     if (disconnectRequested)
@@ -1034,11 +1027,10 @@
         }
 
 
-        String errMsg;
+        Message errMsg;
         if (message == null)
         {
-          errMsg =
-               getMessage(MSGID_LDAP_CLIENT_GENERIC_NOTICE_OF_DISCONNECTION);
+          errMsg = INFO_LDAP_CLIENT_GENERIC_NOTICE_OF_DISCONNECTION.get();
         }
         else
         {
@@ -1100,13 +1092,7 @@
 
 
     // Log a disconnect message.
-    if(messageID == -1)
-    {
-      logDisconnect(this, disconnectReason, null);
-    } else
-    {
-      logDisconnect(this, disconnectReason, message);
-    }
+    logDisconnect(this, disconnectReason, message);
 
 
     try
@@ -1114,7 +1100,7 @@
       PluginConfigManager pluginManager =
            DirectoryServer.getPluginConfigManager();
       pluginManager.invokePostDisconnectPlugins(this, disconnectReason,
-                                                messageID, message);
+              message);
     }
     catch (Exception e)
     {
@@ -1181,10 +1167,8 @@
       // reject the operation.
       if (disconnectRequested)
       {
-        int    msgID   = MSGID_LDAP_CLIENT_DISCONNECT_IN_PROGRESS;
-        String message = getMessage(msgID);
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = WARN_LDAP_CLIENT_DISCONNECT_IN_PROGRESS.get();
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
 
@@ -1193,9 +1177,8 @@
       AbstractOperation op = operationsInProgress.get(messageID);
       if (op != null)
       {
-        int    msgID   = MSGID_LDAP_CLIENT_DUPLICATE_MESSAGE_ID;
-        String message = getMessage(msgID, messageID);
-        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, msgID);
+        Message message = WARN_LDAP_CLIENT_DUPLICATE_MESSAGE_ID.get(messageID);
+        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
 
@@ -1226,10 +1209,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_CLIENT_CANNOT_ENQUEUE;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message =
+          WARN_LDAP_CLIENT_CANNOT_ENQUEUE.get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID, e);
+                                   message, e);
     }
     finally
     {
@@ -1510,7 +1493,7 @@
             if (elementLength == 0)
             {
               disconnect(DisconnectReason.PROTOCOL_ERROR, true,
-                         MSGID_LDAP_CLIENT_DECODE_ZERO_BYTE_VALUE);
+                         ERR_LDAP_CLIENT_DECODE_ZERO_BYTE_VALUE.get());
               return false;
             }
 
@@ -1519,9 +1502,9 @@
             if ((connectionHandler.getMaxRequestSize() > 0) &&
                 (elementLength > connectionHandler.getMaxRequestSize()))
             {
-              disconnect(DisconnectReason.MAX_REQUEST_SIZE_EXCEEDED, true,
-                         MSGID_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED,
-                         elementLength, connectionHandler.getMaxRequestSize());
+              Message m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get(
+                elementLength, connectionHandler.getMaxRequestSize());
+              disconnect(DisconnectReason.MAX_REQUEST_SIZE_EXCEEDED, true, m);
               return false;
             }
 
@@ -1537,9 +1520,9 @@
             {
               // We cannot handle multi-byte lengths in which more than four
               // bytes are used to encode the length.
-              disconnect(DisconnectReason.PROTOCOL_ERROR, true,
-                         MSGID_LDAP_CLIENT_DECODE_INVALID_MULTIBYTE_LENGTH,
-                         elementLengthBytesNeeded);
+              Message m = ERR_LDAP_CLIENT_DECODE_INVALID_MULTIBYTE_LENGTH.get(
+                elementLengthBytesNeeded);
+              disconnect(DisconnectReason.PROTOCOL_ERROR, true, m);
               return false;
             }
 
@@ -1558,7 +1541,7 @@
               if (elementLength == 0)
               {
                 disconnect(DisconnectReason.PROTOCOL_ERROR, true,
-                           MSGID_LDAP_CLIENT_DECODE_ZERO_BYTE_VALUE);
+                           ERR_LDAP_CLIENT_DECODE_ZERO_BYTE_VALUE.get());
                 return false;
               }
 
@@ -1568,9 +1551,9 @@
                   (elementLength > connectionHandler.getMaxRequestSize()))
               {
                 disconnect(DisconnectReason.MAX_REQUEST_SIZE_EXCEEDED, true,
-                           MSGID_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED,
-                           elementLength,
-                           connectionHandler.getMaxRequestSize());
+                           ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get(
+                                   elementLength,
+                                   connectionHandler.getMaxRequestSize()));
                 return false;
               }
 
@@ -1612,7 +1595,7 @@
             if (elementLength == 0)
             {
               disconnect(DisconnectReason.PROTOCOL_ERROR, true,
-                         MSGID_LDAP_CLIENT_DECODE_ZERO_BYTE_VALUE);
+                         ERR_LDAP_CLIENT_DECODE_ZERO_BYTE_VALUE.get());
               return false;
             }
 
@@ -1622,8 +1605,9 @@
                 (elementLength > connectionHandler.getMaxRequestSize()))
             {
               disconnect(DisconnectReason.MAX_REQUEST_SIZE_EXCEEDED, true,
-                         MSGID_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED,
-                         elementLength, connectionHandler.getMaxRequestSize());
+                         ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get(
+                                 elementLength,
+                                 connectionHandler.getMaxRequestSize()));
               return false;
             }
 
@@ -1674,10 +1658,9 @@
               {
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
-
-              disconnect(DisconnectReason.PROTOCOL_ERROR, true,
-                         MSGID_LDAP_CLIENT_DECODE_ASN1_FAILED,
-                         String.valueOf(e));
+              Message m = ERR_LDAP_CLIENT_DECODE_ASN1_FAILED.get(
+                String.valueOf(e));
+              disconnect(DisconnectReason.PROTOCOL_ERROR, true, m);
               return false;
             }
 
@@ -1694,10 +1677,9 @@
               {
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
-
-              disconnect(DisconnectReason.PROTOCOL_ERROR, true,
-                         MSGID_LDAP_CLIENT_DECODE_LDAP_MESSAGE_FAILED,
-                         String.valueOf(e));
+              Message m = ERR_LDAP_CLIENT_DECODE_LDAP_MESSAGE_FAILED.get(
+                String.valueOf(e));
+              disconnect(DisconnectReason.PROTOCOL_ERROR, true, m);
               return false;
             }
 
@@ -1725,11 +1707,10 @@
           // This should never happen.  There is an invalid internal read state.
           // The only recourse that we have is to log a message and disconnect
           // the client.
-          int    msgID   = MSGID_LDAP_CLIENT_INVALID_DECODE_STATE;
-          String message = getMessage(msgID, elementReadState);
-          logError(ErrorLogCategory.REQUEST_HANDLING,
-                   ErrorLogSeverity.SEVERE_ERROR, message, msgID);
-          disconnect(DisconnectReason.SERVER_ERROR, true, message, msgID);
+          Message message =
+              ERR_LDAP_CLIENT_INVALID_DECODE_STATE.get(elementReadState);
+          logError(message);
+          disconnect(DisconnectReason.SERVER_ERROR, true, message);
           return false;
       }
     }
@@ -1813,10 +1794,9 @@
         case OP_TYPE_UNBIND_REQUEST:
           return processUnbindRequest(message, opControls);
         default:
-          int msgID = MSGID_LDAP_DISCONNECT_DUE_TO_INVALID_REQUEST_TYPE;
-          String msg = getMessage(msgID, message.getProtocolOpName(),
-                                  message.getMessageID());
-          disconnect(DisconnectReason.PROTOCOL_ERROR, true, msg, msgID);
+          Message msg = ERR_LDAP_DISCONNECT_DUE_TO_INVALID_REQUEST_TYPE.get(
+                  message.getProtocolOpName(), message.getMessageID());
+          disconnect(DisconnectReason.PROTOCOL_ERROR, true, msg);
           return false;
       }
     }
@@ -1827,10 +1807,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_DISCONNECT_DUE_TO_PROCESSING_FAILURE;
-      String msg = getMessage(msgID, message.getProtocolOpName(),
-                              message.getMessageID(), String.valueOf(e));
-      disconnect(DisconnectReason.SERVER_ERROR, true, msg, msgID);
+      Message msg = ERR_LDAP_DISCONNECT_DUE_TO_PROCESSING_FAILURE.get(
+              message.getProtocolOpName(),
+              message.getMessageID(), String.valueOf(e));
+      disconnect(DisconnectReason.SERVER_ERROR, true, msg);
       return false;
     }
   }
@@ -1890,11 +1870,11 @@
       // LDAPv2 clients aren't allowed to send controls.
       AddResponseProtocolOp responseOp =
            new AddResponseProtocolOp(LDAPResultCode.PROTOCOL_ERROR,
-                    getMessage(MSGID_LDAPV2_CONTROLS_NOT_ALLOWED));
+                    ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       sendLDAPMessage(securityProvider,
                       new LDAPMessage(message.getMessageID(), responseOp));
       disconnect(DisconnectReason.PROTOCOL_ERROR, false,
-                 MSGID_LDAPV2_CONTROLS_NOT_ALLOWED);
+                 ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       return false;
     }
 
@@ -1918,7 +1898,7 @@
 
       AddResponseProtocolOp responseOp =
            new AddResponseProtocolOp(de.getResultCode().getIntValue(),
-                                     de.getErrorMessage(), de.getMatchedDN(),
+                                     de.getMessageObject(), de.getMatchedDN(),
                                      de.getReferralURLs());
 
       List<Control> responseControls = addOp.getResponseControls();
@@ -1970,11 +1950,11 @@
           BindResponseProtocolOp responseOp =
                new BindResponseProtocolOp(
                         LDAPResultCode.INAPPROPRIATE_AUTHENTICATION,
-                        getMessage(MSGID_LDAPV2_CLIENTS_NOT_ALLOWED));
+                        ERR_LDAPV2_CLIENTS_NOT_ALLOWED.get());
           sendLDAPMessage(securityProvider,
                           new LDAPMessage(message.getMessageID(), responseOp));
           disconnect(DisconnectReason.PROTOCOL_ERROR, false,
-                     MSGID_LDAPV2_CLIENTS_NOT_ALLOWED);
+                     ERR_LDAPV2_CLIENTS_NOT_ALLOWED.get());
           return false;
         }
 
@@ -1983,11 +1963,11 @@
           // LDAPv2 clients aren't allowed to send controls.
           BindResponseProtocolOp responseOp =
                new BindResponseProtocolOp(LDAPResultCode.PROTOCOL_ERROR,
-                        getMessage(MSGID_LDAPV2_CONTROLS_NOT_ALLOWED));
+                        ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
           sendLDAPMessage(securityProvider,
                           new LDAPMessage(message.getMessageID(), responseOp));
           disconnect(DisconnectReason.PROTOCOL_ERROR, false,
-                     MSGID_LDAPV2_CONTROLS_NOT_ALLOWED);
+                     ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
           return false;
         }
 
@@ -2023,10 +2003,10 @@
         // 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.
-        int msgID = MSGID_LDAP_INVALID_BIND_AUTH_TYPE;
-        String msg = getMessage(msgID, message.getMessageID(),
+        Message msg =
+                ERR_LDAP_INVALID_BIND_AUTH_TYPE.get(message.getMessageID(),
                           String.valueOf(protocolOp.getAuthenticationType()));
-        disconnect(DisconnectReason.PROTOCOL_ERROR, true, msg, msgID);
+        disconnect(DisconnectReason.PROTOCOL_ERROR, true, msg);
         return false;
     }
 
@@ -2044,7 +2024,7 @@
 
       BindResponseProtocolOp responseOp =
            new BindResponseProtocolOp(de.getResultCode().getIntValue(),
-                                      de.getErrorMessage(), de.getMatchedDN(),
+                                      de.getMessageObject(), de.getMatchedDN(),
                                       de.getReferralURLs());
 
       List<Control> responseControls = bindOp.getResponseControls();
@@ -2062,10 +2042,9 @@
       // If it was a protocol error, then terminate the connection.
       if (de.getResultCode() == ResultCode.PROTOCOL_ERROR)
       {
-        int msgID = MSGID_LDAP_DISCONNECT_DUE_TO_BIND_PROTOCOL_ERROR;
-        String msg = getMessage(msgID, message.getMessageID(),
-                                de.getErrorMessage());
-        disconnect(DisconnectReason.PROTOCOL_ERROR, true, msg, msgID);
+        Message msg = ERR_LDAP_DISCONNECT_DUE_TO_BIND_PROTOCOL_ERROR.get(
+                message.getMessageID(), de.getMessageObject());
+        disconnect(DisconnectReason.PROTOCOL_ERROR, true, msg);
       }
     }
 
@@ -2096,11 +2075,11 @@
       // LDAPv2 clients aren't allowed to send controls.
       CompareResponseProtocolOp responseOp =
            new CompareResponseProtocolOp(LDAPResultCode.PROTOCOL_ERROR,
-                    getMessage(MSGID_LDAPV2_CONTROLS_NOT_ALLOWED));
+                    ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       sendLDAPMessage(securityProvider,
                       new LDAPMessage(message.getMessageID(), responseOp));
       disconnect(DisconnectReason.PROTOCOL_ERROR, false,
-                 MSGID_LDAPV2_CONTROLS_NOT_ALLOWED);
+                 ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       return false;
     }
 
@@ -2125,7 +2104,7 @@
 
       CompareResponseProtocolOp responseOp =
            new CompareResponseProtocolOp(de.getResultCode().getIntValue(),
-                                         de.getErrorMessage(),
+                                         de.getMessageObject(),
                                          de.getMatchedDN(),
                                          de.getReferralURLs());
 
@@ -2169,11 +2148,11 @@
       // LDAPv2 clients aren't allowed to send controls.
       DeleteResponseProtocolOp responseOp =
            new DeleteResponseProtocolOp(LDAPResultCode.PROTOCOL_ERROR,
-                    getMessage(MSGID_LDAPV2_CONTROLS_NOT_ALLOWED));
+                    ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       sendLDAPMessage(securityProvider,
                       new LDAPMessage(message.getMessageID(), responseOp));
       disconnect(DisconnectReason.PROTOCOL_ERROR, false,
-                 MSGID_LDAPV2_CONTROLS_NOT_ALLOWED);
+                 ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       return false;
     }
 
@@ -2197,7 +2176,8 @@
 
       DeleteResponseProtocolOp responseOp =
            new DeleteResponseProtocolOp(de.getResultCode().getIntValue(),
-                                        de.getErrorMessage(), de.getMatchedDN(),
+                                        de.getMessageObject(),
+                                        de.getMatchedDN(),
                                         de.getReferralURLs());
 
       List<Control> responseControls = deleteOp.getResponseControls();
@@ -2240,12 +2220,10 @@
     // they can understand, so we have no choice but to close the connection.
     if (ldapVersion == 2)
     {
-      int msgID = MSGID_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED;
-      String msg = getMessage(msgID, getConnectionID(), message.getMessageID());
-      logError(ErrorLogCategory.REQUEST_HANDLING, ErrorLogSeverity.MILD_ERROR,
-               msg, msgID);
-
-      disconnect(DisconnectReason.PROTOCOL_ERROR, false, msg, msgID);
+      Message msg = ERR_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED.get(
+          getConnectionID(), message.getMessageID());
+      logError(msg);
+      disconnect(DisconnectReason.PROTOCOL_ERROR, false, msg);
       return false;
     }
 
@@ -2276,7 +2254,7 @@
 
       ExtendedResponseProtocolOp responseOp =
            new ExtendedResponseProtocolOp(de.getResultCode().getIntValue(),
-                                          de.getErrorMessage(),
+                                          de.getMessageObject(),
                                           de.getMatchedDN(),
                                           de.getReferralURLs());
 
@@ -2320,11 +2298,11 @@
       // LDAPv2 clients aren't allowed to send controls.
       ModifyResponseProtocolOp responseOp =
            new ModifyResponseProtocolOp(LDAPResultCode.PROTOCOL_ERROR,
-                    getMessage(MSGID_LDAPV2_CONTROLS_NOT_ALLOWED));
+                    ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       sendLDAPMessage(securityProvider,
                       new LDAPMessage(message.getMessageID(), responseOp));
       disconnect(DisconnectReason.PROTOCOL_ERROR, false,
-                 MSGID_LDAPV2_CONTROLS_NOT_ALLOWED);
+                 ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       return false;
     }
 
@@ -2348,7 +2326,8 @@
 
       ModifyResponseProtocolOp responseOp =
            new ModifyResponseProtocolOp(de.getResultCode().getIntValue(),
-                                        de.getErrorMessage(), de.getMatchedDN(),
+                                        de.getMessageObject(),
+                                        de.getMatchedDN(),
                                         de.getReferralURLs());
 
       List<Control> responseControls = modifyOp.getResponseControls();
@@ -2391,11 +2370,11 @@
       // LDAPv2 clients aren't allowed to send controls.
       ModifyDNResponseProtocolOp responseOp =
            new ModifyDNResponseProtocolOp(LDAPResultCode.PROTOCOL_ERROR,
-                    getMessage(MSGID_LDAPV2_CONTROLS_NOT_ALLOWED));
+                    ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       sendLDAPMessage(securityProvider,
                       new LDAPMessage(message.getMessageID(), responseOp));
       disconnect(DisconnectReason.PROTOCOL_ERROR, false,
-                 MSGID_LDAPV2_CONTROLS_NOT_ALLOWED);
+                 ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       return false;
     }
 
@@ -2422,7 +2401,7 @@
 
       ModifyDNResponseProtocolOp responseOp =
            new ModifyDNResponseProtocolOp(de.getResultCode().getIntValue(),
-                                          de.getErrorMessage(),
+                                          de.getMessageObject(),
                                           de.getMatchedDN(),
                                           de.getReferralURLs());
 
@@ -2466,11 +2445,11 @@
       // LDAPv2 clients aren't allowed to send controls.
       SearchResultDoneProtocolOp responseOp =
            new SearchResultDoneProtocolOp(LDAPResultCode.PROTOCOL_ERROR,
-                    getMessage(MSGID_LDAPV2_CONTROLS_NOT_ALLOWED));
+                    ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       sendLDAPMessage(securityProvider,
                       new LDAPMessage(message.getMessageID(), responseOp));
       disconnect(DisconnectReason.PROTOCOL_ERROR, false,
-                 MSGID_LDAPV2_CONTROLS_NOT_ALLOWED);
+                 ERR_LDAPV2_CONTROLS_NOT_ALLOWED.get());
       return false;
     }
 
@@ -2499,7 +2478,7 @@
 
       SearchResultDoneProtocolOp responseOp =
            new SearchResultDoneProtocolOp(de.getResultCode().getIntValue(),
-                                          de.getErrorMessage(),
+                                          de.getMessageObject(),
                                           de.getMatchedDN(),
                                           de.getReferralURLs());
 
@@ -2630,15 +2609,15 @@
    * @return  <CODE>true</CODE> if TLS is available on the underlying client
    *          connection, or <CODE>false</CODE> if it is not.
    */
-  public boolean tlsProtectionAvailable(StringBuilder unavailableReason)
+  public boolean tlsProtectionAvailable(MessageBuilder unavailableReason)
   {
     // Make sure that this client connection does not already have some other
     // security provider enabled.
     if (! (securityProvider instanceof NullConnectionSecurityProvider))
     {
-      int msgID = MSGID_LDAP_TLS_EXISTING_SECURITY_PROVIDER;
-      unavailableReason.append(getMessage(msgID,
-           securityProvider.getSecurityMechanismName()));
+
+      unavailableReason.append(ERR_LDAP_TLS_EXISTING_SECURITY_PROVIDER.get(
+              securityProvider.getSecurityMechanismName()));
       return false;
     }
 
@@ -2647,8 +2626,8 @@
     // operation.
     if (! connectionHandler.allowStartTLS())
     {
-      int msgID = MSGID_LDAP_TLS_STARTTLS_NOT_ALLOWED;
-      unavailableReason.append(getMessage(msgID));
+
+      unavailableReason.append(ERR_LDAP_TLS_STARTTLS_NOT_ALLOWED.get());
       return false;
     }
 
@@ -2680,9 +2659,9 @@
 
         tlsSecurityProvider = null;
 
-        int msgID = MSGID_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER;
-        unavailableReason.append(getMessage(msgID,
-                                            stackTraceToSingleLineString(e)));
+
+        unavailableReason.append(ERR_LDAP_TLS_CANNOT_CREATE_TLS_PROVIDER.get(
+                stackTraceToSingleLineString(e)));
         return false;
       }
     }
@@ -2709,12 +2688,11 @@
   {
     if (tlsSecurityProvider == null)
     {
-      int    msgID   = MSGID_LDAP_TLS_NO_PROVIDER;
-      String message = getMessage(msgID);
+      Message message = ERR_LDAP_TLS_NO_PROVIDER.get();
 
-      disconnect(DisconnectReason.OTHER, false, message, msgID);
+      disconnect(DisconnectReason.OTHER, false, message);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
     clearSecurityProvider = securityProvider;
@@ -2737,12 +2715,11 @@
   public void disableTLSConnectionSecurityProvider()
          throws DirectoryException
   {
-    int    msgID   = MSGID_LDAP_TLS_CLOSURE_NOT_ALLOWED;
-    String message = getMessage(msgID);
+    Message message = ERR_LDAP_TLS_CLOSURE_NOT_ALLOWED.get();
 
-    disconnect(DisconnectReason.OTHER, false, message, msgID);
+    disconnect(DisconnectReason.OTHER, false, message);
     throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                 message, msgID);
+                                 message);
   }
 
 
@@ -2765,10 +2742,9 @@
   {
     if (clearSecurityProvider == null)
     {
-      int    msgID   = MSGID_LDAP_NO_CLEAR_SECURITY_PROVIDER;
-      String message = getMessage(msgID, toString());
+      Message message = ERR_LDAP_NO_CLEAR_SECURITY_PROVIDER.get(toString());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   message, msgID);
+                                   message);
     }
 
     sendLDAPMessage(clearSecurityProvider,
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java
index a19f5ac..706ba3d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -32,8 +33,8 @@
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -74,8 +75,8 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DisconnectReason;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.HostPort;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
@@ -243,7 +244,7 @@
     // Create variables to include in the response.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<String> messages = new ArrayList<String>();
+    ArrayList<Message> messages = new ArrayList<Message>();
 
     // Note that the following properties cannot be modified:
     //
@@ -313,7 +314,7 @@
    *          associated with the connection handler should also be
    *          closed.
    */
-  public void finalizeConnectionHandler(String finalizeReason,
+  public void finalizeConnectionHandler(Message finalizeReason,
       boolean closeConnections) {
     shutdownRequested = true;
     currentConfig.removeLDAPChangeListener(this);
@@ -579,10 +580,9 @@
   {
     // SSL and StartTLS are mutually exclusive.
     if (config.isAllowStartTLS() && config.isUseSSL()) {
-      int msgID = MSGID_LDAP_CONNHANDLER_CANNOT_HAVE_SSL_AND_STARTTLS;
-      String message = getMessage(msgID, String.valueOf(config.dn()));
-      logError(ErrorLogCategory.CONFIGURATION,
-          ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+      Message message = ERR_LDAP_CONNHANDLER_CANNOT_HAVE_SSL_AND_STARTTLS.get(
+          String.valueOf(config.dn()));
+      logError(message);
     }
 
     if (config.isAllowStartTLS() || config.isUseSSL())
@@ -590,36 +590,34 @@
       // Validate the key manager provider DN.
       DN keyManagerProviderDN = config.getKeyManagerProviderDN();
       if (keyManagerProviderDN == null) {
-        int msgID = MSGID_LDAP_CONNHANDLER_NO_KEYMANAGER_DN;
-        String message = getMessage(msgID, String.valueOf(config.dn()));
-        throw new ConfigException(msgID, message);
+        Message message = ERR_LDAP_CONNHANDLER_NO_KEYMANAGER_DN.get(
+            String.valueOf(config.dn()));
+        throw new ConfigException(message);
       } else {
         KeyManagerProvider provider = DirectoryServer
             .getKeyManagerProvider(keyManagerProviderDN);
         if (provider == null) {
-          int msgID = MSGID_LDAP_CONNHANDLER_INVALID_KEYMANAGER_DN;
-          String message = getMessage(msgID, String
-              .valueOf(config.dn()), String
-              .valueOf(keyManagerProviderDN));
-          throw new ConfigException(msgID, message);
+          Message message = ERR_LDAP_CONNHANDLER_INVALID_KEYMANAGER_DN.
+              get(String.valueOf(config.dn()),
+                  String.valueOf(keyManagerProviderDN));
+          throw new ConfigException(message);
         }
       }
 
       // Validate the trust manager provider DN.
       DN trustManagerProviderDN = config.getTrustManagerProviderDN();
       if (trustManagerProviderDN == null) {
-        int msgID = MSGID_LDAP_CONNHANDLER_NO_TRUSTMANAGER_DN;
-        String message = getMessage(msgID, String.valueOf(config.dn()));
-        throw new ConfigException(msgID, message);
+        Message message = ERR_LDAP_CONNHANDLER_NO_TRUSTMANAGER_DN.get(
+            String.valueOf(config.dn()));
+        throw new ConfigException(message);
       } else {
         TrustManagerProvider provider = DirectoryServer
             .getTrustManagerProvider(trustManagerProviderDN);
         if (provider == null) {
-          int msgID = MSGID_LDAP_CONNHANDLER_INVALID_TRUSTMANAGER_DN;
-          String message = getMessage(msgID, String
-              .valueOf(config.dn()), String
-              .valueOf(trustManagerProviderDN));
-          throw new ConfigException(msgID, message);
+          Message message = ERR_LDAP_CONNHANDLER_INVALID_TRUSTMANAGER_DN.
+              get(String.valueOf(config.dn()),
+                  String.valueOf(trustManagerProviderDN));
+          throw new ConfigException(message);
         }
       }
     }
@@ -633,10 +631,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED;
-      String message = getMessage(msgID, config.dn(),
-          stackTraceToSingleLineString(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED.get(
+          String.valueOf(config.dn()), stackTraceToSingleLineString(e));
+      throw new InitializationException(message, e);
     }
 
     // Get the SSL auth policy.
@@ -748,13 +745,11 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_LDAP_CONNHANDLER_CANNOT_BIND;
-          String message = getMessage(msgID, String.valueOf(config.dn()),
-                                      a.getHostAddress(), listenPort,
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.CONNECTION_HANDLING,
-                   ErrorLogSeverity.SEVERE_ERROR, message, msgID);
-          throw new InitializationException(msgID, message);
+          Message message = ERR_LDAP_CONNHANDLER_CANNOT_BIND.
+              get(String.valueOf(config.dn()), a.getHostAddress(), listenPort,
+                  getExceptionMessage(e));
+          logError(message);
+          throw new InitializationException(message);
         }
       }
     }
@@ -792,7 +787,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(ConnectionHandlerCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     LDAPConnectionHandlerCfg config = (LDAPConnectionHandlerCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -805,14 +800,15 @@
    */
   public boolean isConfigurationChangeAcceptable(
       LDAPConnectionHandlerCfg config,
-      List<String> unacceptableReasons) {
+      List<Message> unacceptableReasons) {
     boolean isAcceptable = true;
 
     // SSL and StartTLS are mutually exclusive.
     if (config.isAllowStartTLS() && config.isUseSSL()) {
-      int msgID = MSGID_LDAP_CONNHANDLER_CANNOT_HAVE_SSL_AND_STARTTLS;
-      unacceptableReasons.add(getMessage(msgID, String.valueOf(config
-          .dn())));
+
+      unacceptableReasons.add(
+              ERR_LDAP_CONNHANDLER_CANNOT_HAVE_SSL_AND_STARTTLS.get(
+                      String.valueOf(config.dn())));
       isAcceptable = false;
     }
 
@@ -821,18 +817,19 @@
       // Validate the key manager provider DN.
       DN keyManagerProviderDN = config.getKeyManagerProviderDN();
       if (keyManagerProviderDN == null) {
-        int msgID = MSGID_LDAP_CONNHANDLER_NO_KEYMANAGER_DN;
-        String message = getMessage(msgID, String.valueOf(config.dn()));
+        Message message = ERR_LDAP_CONNHANDLER_NO_KEYMANAGER_DN.get(
+                String.valueOf(config.dn()));
         unacceptableReasons.add(message);
         isAcceptable = false;
       } else {
         KeyManagerProvider provider = DirectoryServer
             .getKeyManagerProvider(keyManagerProviderDN);
         if (provider == null) {
-          int msgID = MSGID_LDAP_CONNHANDLER_INVALID_KEYMANAGER_DN;
-          unacceptableReasons.add(getMessage(msgID, String
-              .valueOf(config.dn()), String
-              .valueOf(keyManagerProviderDN)));
+
+          unacceptableReasons.add(
+                  ERR_LDAP_CONNHANDLER_INVALID_KEYMANAGER_DN.get(
+                          String.valueOf(config.dn()),
+                          String.valueOf(keyManagerProviderDN)));
           isAcceptable = false;
         }
       }
@@ -840,18 +837,19 @@
       // Validate the trust manager provider DN.
       DN trustManagerProviderDN = config.getTrustManagerProviderDN();
       if (trustManagerProviderDN == null) {
-        int msgID = MSGID_LDAP_CONNHANDLER_NO_TRUSTMANAGER_DN;
-        String message = getMessage(msgID, String.valueOf(config.dn()));
+        Message message = ERR_LDAP_CONNHANDLER_NO_TRUSTMANAGER_DN.get(
+                String.valueOf(config.dn()));
         unacceptableReasons.add(message);
         isAcceptable = false;
       } else {
         TrustManagerProvider provider = DirectoryServer
             .getTrustManagerProvider(trustManagerProviderDN);
         if (provider == null) {
-          int msgID = MSGID_LDAP_CONNHANDLER_INVALID_TRUSTMANAGER_DN;
-          unacceptableReasons.add(getMessage(msgID, String
-              .valueOf(config.dn()), String
-              .valueOf(trustManagerProviderDN)));
+
+          unacceptableReasons.add(
+                  ERR_LDAP_CONNHANDLER_INVALID_TRUSTMANAGER_DN.get(
+                          String.valueOf(config.dn()),
+                          String.valueOf(trustManagerProviderDN)));
           isAcceptable = false;
         }
       }
@@ -879,7 +877,7 @@
   /**
    * {@inheritDoc}
    */
-  public void processServerShutdown(String reason) {
+  public void processServerShutdown(Message reason) {
     shutdownRequested = true;
 
     try {
@@ -911,9 +909,7 @@
           cleanUpSelector();
           listening = false;
 
-          logError(ErrorLogCategory.CONNECTION_HANDLING,
-              ErrorLogSeverity.NOTICE,
-              MSGID_LDAP_CONNHANDLER_STOPPED_LISTENING, handlerName);
+          logError(ERR_LDAP_CONNHANDLER_STOPPED_LISTENING.get(handlerName));
         }
 
         try {
@@ -942,20 +938,16 @@
             channel.register(selector, SelectionKey.OP_ACCEPT);
             numRegistered++;
 
-            logError(ErrorLogCategory.CONNECTION_HANDLING,
-                ErrorLogSeverity.NOTICE,
-                MSGID_LDAP_CONNHANDLER_STARTED_LISTENING, handlerName);
+            logError(ERR_LDAP_CONNHANDLER_STARTED_LISTENING.get(handlerName));
           } catch (Exception e) {
             if (debugEnabled())
             {
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            logError(ErrorLogCategory.CONNECTION_HANDLING,
-                ErrorLogSeverity.SEVERE_ERROR,
-                MSGID_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED,
-                currentConfig.dn(), a.getHostAddress(), listenPort,
-                stackTraceToSingleLineString(e));
+            logError(ERR_LDAP_CONNHANDLER_CREATE_CHANNEL_FAILED.
+                get(String.valueOf(currentConfig.dn()), a.getHostAddress(),
+                    listenPort, stackTraceToSingleLineString(e)));
           }
         }
 
@@ -963,9 +955,8 @@
         // consider the connection handler disabled and require
         // administrative action before trying again.
         if (numRegistered == 0) {
-          logError(ErrorLogCategory.CONNECTION_HANDLING,
-              ErrorLogSeverity.FATAL_ERROR,
-              MSGID_LDAP_CONNHANDLER_NO_ACCEPTORS, currentConfig.dn());
+          logError(ERR_LDAP_CONNHANDLER_NO_ACCEPTORS.get(
+                  String.valueOf(currentConfig.dn())));
 
           enabled = false;
           continue;
@@ -1013,9 +1004,9 @@
                     clientConnection.disconnect(
                         DisconnectReason.CONNECTION_REJECTED,
                         currentConfig.isSendRejectionNotice(),
-                        MSGID_LDAP_CONNHANDLER_DENIED_CLIENT,
-                        clientConnection.getClientHostPort(),
-                        clientConnection.getServerHostPort());
+                        ERR_LDAP_CONNHANDLER_DENIED_CLIENT.get(
+                          clientConnection.getClientHostPort(),
+                          clientConnection.getServerHostPort()));
 
                     iterator.remove();
                     continue;
@@ -1030,10 +1021,9 @@
                     clientConnection.disconnect(
                         DisconnectReason.CONNECTION_REJECTED,
                         currentConfig.isSendRejectionNotice(),
-                        MSGID_LDAP_CONNHANDLER_DISALLOWED_CLIENT,
-                        clientConnection.getClientHostPort(),
-                        clientConnection.getServerHostPort());
-
+                        ERR_LDAP_CONNHANDLER_DISALLOWED_CLIENT.get(
+                          clientConnection.getClientHostPort(),
+                          clientConnection.getServerHostPort()));
                     iterator.remove();
                     continue;
                   }
@@ -1059,8 +1049,8 @@
 
                     clientConnection.disconnect(
                          DisconnectReason.SECURITY_PROBLEM, false,
-                         MSGID_LDAP_CONNHANDLER_CANNOT_SET_SECURITY_PROVIDER,
-                         String.valueOf(e));
+                         ERR_LDAP_CONNHANDLER_CANNOT_SET_SECURITY_PROVIDER.get(
+                          String.valueOf(e)));
                     iterator.remove();
                     continue;
                   }
@@ -1098,19 +1088,16 @@
                       TRACER.debugCaught(DebugLogLevel.ERROR, e);
                     }
 
-                    int msgID =
-                      MSGID_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT;
-                    String message = getMessage(msgID,
-                        clientConnection.getClientHostPort(),
-                        clientConnection.getServerHostPort(),
-                        getExceptionMessage(e));
-
-                    logError(ErrorLogCategory.CONNECTION_HANDLING,
-                        ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+                    Message message =
+                      INFO_LDAP_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT.
+                          get(clientConnection.getClientHostPort(),
+                              clientConnection.getServerHostPort(),
+                              getExceptionMessage(e));
+                    logError(message);
 
                     clientConnection.disconnect(
                         DisconnectReason.SERVER_ERROR, currentConfig
-                            .isSendRejectionNotice(), message, msgID);
+                            .isSendRejectionNotice(), message);
 
                     iterator.remove();
                     continue;
@@ -1135,29 +1122,25 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            logError(ErrorLogCategory.CONNECTION_HANDLING,
-                ErrorLogSeverity.SEVERE_WARNING,
-                MSGID_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION,
-                currentConfig.dn(), getExceptionMessage(e));
+            logError(ERR_LDAP_CONNHANDLER_CANNOT_ACCEPT_CONNECTION.get(
+                String.valueOf(currentConfig.dn()), getExceptionMessage(e)));
 
             if (lastIterationFailed) {
               // The last time through the accept loop we also
               // encountered a failure. Rather than enter a potential
               // infinite loop of failures, disable this acceptor and
               // log an error.
-              int msgID = MSGID_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES;
-              String message = getMessage(msgID, String
-                  .valueOf(currentConfig.dn()),
-                  stackTraceToSingleLineString(e));
-
-              logError(ErrorLogCategory.CONNECTION_HANDLING,
-                  ErrorLogSeverity.FATAL_ERROR, message, msgID);
+              Message message =
+                ERR_LDAP_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES.
+                    get(String.valueOf(currentConfig.dn()),
+                        stackTraceToSingleLineString(e));
+              logError(message);
 
               DirectoryServer
                   .sendAlertNotification(
                       this,
                       ALERT_TYPE_LDAP_CONNECTION_HANDLER_CONSECUTIVE_FAILURES,
-                      msgID, message);
+                          message);
 
               enabled = false;
 
@@ -1180,17 +1163,14 @@
         // 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.
-        int msgID = MSGID_LDAP_CONNHANDLER_UNCAUGHT_ERROR;
-        String message = getMessage(msgID, String
-            .valueOf(currentConfig.dn()),
-            stackTraceToSingleLineString(e));
-
-        logError(ErrorLogCategory.CONNECTION_HANDLING,
-            ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+        Message message = ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR.
+            get(String.valueOf(currentConfig.dn()),
+                stackTraceToSingleLineString(e));
+        logError(message);
 
         DirectoryServer.sendAlertNotification(this,
-            ALERT_TYPE_LDAP_CONNECTION_HANDLER_UNCAUGHT_ERROR, msgID,
-            message);
+            ALERT_TYPE_LDAP_CONNECTION_HANDLER_UNCAUGHT_ERROR,
+                message);
 
         try {
           cleanUpSelector();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPControl.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPControl.java
index da1edd4..b5ba3a9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPControl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPControl.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -40,8 +41,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
@@ -194,9 +194,8 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_LDAP_CONTROL_DECODE_NULL;
-      String message = getMessage(msgID);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_CONTROL_DECODE_NULL.get();
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -212,18 +211,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_CONTROL_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_CONTROL_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 1) || (numElements > 3))
     {
-      int    msgID   = MSGID_LDAP_CONTROL_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_CONTROL_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -239,9 +237,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_CONTROL_DECODE_OID;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_CONTROL_DECODE_OID.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -271,9 +268,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e2);
             }
 
-            int msgID = MSGID_LDAP_CONTROL_DECODE_CRITICALITY;
-            String message = getMessage(msgID, String.valueOf(e));
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message, e2);
+            Message message =
+                ERR_LDAP_CONTROL_DECODE_CRITICALITY.get(String.valueOf(e));
+            throw new LDAPException(PROTOCOL_ERROR, message, e2);
           }
           break;
         case UNIVERSAL_OCTET_STRING_TYPE:
@@ -290,15 +287,15 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e2);
             }
 
-            int msgID = MSGID_LDAP_CONTROL_DECODE_VALUE;
-            String message = getMessage(msgID, String.valueOf(e));
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message, e2);
+            Message message =
+                ERR_LDAP_CONTROL_DECODE_VALUE.get(String.valueOf(e));
+            throw new LDAPException(PROTOCOL_ERROR, message, e2);
           }
           break;
         default:
-          int    msgID   = MSGID_LDAP_CONTROL_DECODE_INVALID_TYPE;
-          String message = getMessage(msgID, e.getType());
-          throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+          Message message =
+              ERR_LDAP_CONTROL_DECODE_INVALID_TYPE.get(e.getType());
+          throw new LDAPException(PROTOCOL_ERROR, message);
       }
 
       return new LDAPControl(oid, isCritical, value);
@@ -317,9 +314,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_CONTROL_DECODE_CRITICALITY;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message =
+            ERR_LDAP_CONTROL_DECODE_CRITICALITY.get(String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
 
       ASN1OctetString value;
@@ -334,9 +331,8 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_CONTROL_DECODE_VALUE;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message = ERR_LDAP_CONTROL_DECODE_VALUE.get(String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
 
       return new LDAPControl(oid, isCritical, value);
@@ -360,9 +356,8 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_LDAP_CONTROL_DECODE_CONTROLS_NULL;
-      String message = getMessage(msgID);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_CONTROL_DECODE_CONTROLS_NULL.get();
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -373,9 +368,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAP_CONTROL_DECODE_CONTROLS_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_CONTROL_DECODE_CONTROLS_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPFilter.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPFilter.java
index 589565e..217539d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPFilter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPFilter.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -52,8 +53,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -304,9 +304,8 @@
   {
     if (filterString == null)
     {
-      int msgID = MSGID_LDAP_FILTER_STRING_NULL;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_FILTER_STRING_NULL.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -330,9 +329,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_UNCAUGHT_EXCEPTION;
-      String message = getMessage(msgID, filterString, String.valueOf(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_FILTER_UNCAUGHT_EXCEPTION.get(
+          filterString, String.valueOf(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message, e);
     }
   }
 
@@ -361,9 +360,8 @@
     int length = endPos - startPos;
     if (length <= 0)
     {
-      int msgID = MSGID_LDAP_FILTER_STRING_NULL;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_FILTER_STRING_NULL.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     // If the filter is enclosed in a pair of apostrophes ("single-quotes") it
@@ -371,9 +369,9 @@
     if (1 < filterString.length()
          && filterString.startsWith("'") && filterString.endsWith("'"))
     {
-      int msgID = MSGID_LDAP_FILTER_ENCLOSED_IN_APOSTROPHES;
-      String message = getMessage(msgID, filterString);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_FILTER_ENCLOSED_IN_APOSTROPHES.get(filterString);
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     // If the filter is surrounded by parentheses (which it should be), then
@@ -387,9 +385,9 @@
       }
       else
       {
-        int    msgID   = MSGID_LDAP_FILTER_MISMATCHED_PARENTHESES;
-        String message = getMessage(msgID, filterString, startPos, endPos);
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message = ERR_LDAP_FILTER_MISMATCHED_PARENTHESES.get(
+            filterString, startPos, endPos);
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
     }
 
@@ -429,9 +427,9 @@
 
     if (equalPos <= startPos)
     {
-      int    msgID   = MSGID_LDAP_FILTER_NO_EQUAL_SIGN;
-      String message = getMessage(msgID, filterString, startPos, endPos);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_FILTER_NO_EQUAL_SIGN.get(filterString, startPos, endPos);
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -561,11 +559,9 @@
           // switch statement more efficient.  We'll fall through to the default
           // clause to reject them.
         default:
-          int    msgID   = MSGID_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE;
-          String message = getMessage(msgID, attrType,
-                                      String.valueOf(attrType.charAt(i)), i);
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                  message);
+          Message message = ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE.get(
+              attrType, String.valueOf(attrType.charAt(i)), i);
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
     }
 
@@ -612,10 +608,9 @@
             // binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString, equalPos+i+1);
-              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                      message);
+              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                  filterString, equalPos+i+1);
+              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             byte byteValue = 0;
@@ -675,10 +670,9 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString, equalPos+i+1);
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                    filterString, equalPos+i+1);
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             switch (valueBytes[++i])
@@ -737,10 +731,9 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString, equalPos+i+1);
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                    filterString, equalPos+i+1);
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             valueBuffer.put(byteValue);
@@ -800,9 +793,9 @@
     {
       if (filterType == FilterType.NOT)
       {
-        int    msgID   = MSGID_LDAP_FILTER_NOT_EXACTLY_ONE;
-        String message = getMessage(msgID, filterString, startPos, endPos);
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message =
+            ERR_LDAP_FILTER_NOT_EXACTLY_ONE.get(filterString, startPos, endPos);
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
       else
       {
@@ -818,9 +811,9 @@
     if ((filterString.charAt(startPos) != '(') ||
         (filterString.charAt(endPos-1) != ')'))
     {
-      int msgID = MSGID_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES;
-      String message = getMessage(msgID, filterString, startPos, endPos);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES.get(
+          filterString, startPos, endPos);
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -851,17 +844,16 @@
         }
         else if (pendingOpens < 0)
         {
-          int    msgID   = MSGID_LDAP_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS;
-          String message = getMessage(msgID, filterString, i);
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                  message);
+          Message message = ERR_LDAP_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS.
+              get(filterString, i);
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
       }
       else if (pendingOpens <= 0)
       {
-        int    msgID   = MSGID_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES;
-        String message = getMessage(msgID, filterString, startPos, endPos);
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message = ERR_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES.get(
+            filterString, startPos, endPos);
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
     }
 
@@ -870,9 +862,9 @@
     // list of open parenthesis positions must be empty.
     if (pendingOpens != 0)
     {
-      int    msgID   = MSGID_LDAP_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS;
-      String message = getMessage(msgID, filterString, openPos);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS.get(
+          filterString, openPos);
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -881,9 +873,9 @@
     {
       if (filterComponents.size() != 1)
       {
-        int    msgID   = MSGID_LDAP_FILTER_NOT_EXACTLY_ONE;
-        String message = getMessage(msgID, filterString, startPos, endPos);
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message =
+            ERR_LDAP_FILTER_NOT_EXACTLY_ONE.get(filterString, startPos, endPos);
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
       RawFilter notComponent = filterComponents.get(0);
       return new LDAPFilter(filterType, null, notComponent, null, null,
@@ -946,9 +938,9 @@
     // If there were no asterisks, then this isn't a substring filter.
     if (asteriskPositions.isEmpty())
     {
-      int msgID = MSGID_LDAP_FILTER_SUBSTRING_NO_ASTERISKS;
-      String message = getMessage(msgID, filterString, equalPos+1, endPos);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_FILTER_SUBSTRING_NO_ASTERISKS.get(
+          filterString, equalPos+1, endPos);
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -973,10 +965,9 @@
             // binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString, equalPos+i+1);
-              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                      message);
+              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                  filterString, equalPos+i+1);
+              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             byte byteValue = 0;
@@ -1036,10 +1027,9 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString, equalPos+i+1);
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                    filterString, equalPos+i+1);
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             switch (valueBytes[++i])
@@ -1098,10 +1088,9 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString, equalPos+i+1);
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                    filterString, equalPos+i+1);
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             buffer.put(byteValue);
@@ -1143,10 +1132,9 @@
             // binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString, equalPos+i+1);
-              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                      message);
+              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                  filterString, equalPos+i+1);
+              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             byte byteValue = 0;
@@ -1206,10 +1194,9 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString, equalPos+i+1);
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                    filterString, equalPos+i+1);
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             switch (valueBytes[++i])
@@ -1268,10 +1255,9 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString, equalPos+i+1);
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                    filterString, equalPos+i+1);
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             buffer.put(byteValue);
@@ -1321,10 +1307,9 @@
             // binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString, equalPos+i+1);
-              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                      message);
+              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                  filterString, equalPos+i+1);
+              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             byte byteValue = 0;
@@ -1384,10 +1369,9 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString, equalPos+i+1);
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                    filterString, equalPos+i+1);
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             switch (valueBytes[++i])
@@ -1446,10 +1430,9 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString, equalPos+i+1);
-                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                        message);
+                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                    filterString, equalPos+i+1);
+                throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
 
             buffer.put(byteValue);
@@ -1537,9 +1520,9 @@
       int colonPos = filterString.indexOf(':',startPos);
       if (colonPos < 0)
       {
-        int    msgID   = MSGID_LDAP_FILTER_EXTENSIBLE_MATCH_NO_COLON;
-        String message = getMessage(msgID, filterString, startPos);
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message = ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_COLON.get(
+            filterString, startPos);
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
 
 
@@ -1591,10 +1574,9 @@
           // binary value.
           if ((i + 2) >= valueBytes.length)
           {
-            int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-            String message = getMessage(msgID, filterString, equalPos+i+1);
-            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                    message);
+            Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                filterString, equalPos+i+1);
+            throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
 
           byte byteValue = 0;
@@ -1654,10 +1636,9 @@
               byteValue = (byte) 0xF0;
               break;
             default:
-              int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString, equalPos+i+1);
-              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                      message);
+              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                  filterString, equalPos+i+1);
+              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
 
           switch (valueBytes[++i])
@@ -1716,10 +1697,9 @@
               byteValue |= (byte) 0x0F;
               break;
             default:
-              int    msgID   = MSGID_LDAP_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString, equalPos+i+1);
-              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                      message);
+              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                  filterString, equalPos+i+1);
+              throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
 
           valueBuffer.put(byteValue);
@@ -1745,9 +1725,9 @@
     // and/or a matching rule ID.
     if ((attributeType == null) && (matchingRuleID == null))
     {
-      int    msgID   = MSGID_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR;
-      String message = getMessage(msgID, filterString, startPos);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR.get(
+          filterString, startPos);
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -2110,9 +2090,8 @@
     {
       if (matchingRuleID == null)
       {
-        int    msgID   = MSGID_LDAP_FILTER_VALUE_WITH_NO_ATTR_OR_MR;
-        String message = getMessage(msgID);
-        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, msgID);
+        Message message = ERR_LDAP_FILTER_VALUE_WITH_NO_ATTR_OR_MR.get();
+        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
       else
       {
@@ -2120,10 +2099,10 @@
              DirectoryServer.getMatchingRule(toLowerCase(matchingRuleID));
         if (mr == null)
         {
-          int    msgID   = MSGID_LDAP_FILTER_UNKNOWN_MATCHING_RULE;
-          String message = getMessage(msgID, matchingRuleID);
+          Message message =
+              ERR_LDAP_FILTER_UNKNOWN_MATCHING_RULE.get(matchingRuleID);
           throw new DirectoryException(ResultCode.INAPPROPRIATE_MATCHING,
-                                       message, msgID);
+                                       message);
         }
         else
         {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPMessage.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPMessage.java
index 9bcc85b..cb92230 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPMessage.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPMessage.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -40,8 +41,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
 
@@ -594,18 +594,17 @@
   {
     if (messageSequence == null)
     {
-      int    msgID   = MSGID_LDAP_MESSAGE_DECODE_NULL;
-      String message = getMessage(msgID);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_MESSAGE_DECODE_NULL.get();
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
     ArrayList<ASN1Element> elements = messageSequence.elements();
     int numElements = elements.size();
     if ((numElements < 2) || (numElements > 3))
     {
-      int    msgID   = MSGID_LDAP_MESSAGE_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_MESSAGE_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -621,9 +620,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MESSAGE_DECODE_MESSAGE_ID;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_MESSAGE_DECODE_MESSAGE_ID.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -639,9 +638,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MESSAGE_DECODE_PROTOCOL_OP;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_MESSAGE_DECODE_PROTOCOL_OP.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -659,9 +658,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_MESSAGE_DECODE_CONTROLS;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message =
+            ERR_LDAP_MESSAGE_DECODE_CONTROLS.get(String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
     }
     else
@@ -713,9 +712,13 @@
     buffer.append("LDAPMessage(msgID=");
     buffer.append(messageID);
     buffer.append(", protocolOp=");
-    protocolOp.toString(buffer);
+    if (protocolOp != null) {
+      protocolOp.toString(buffer);
+    } else {
+      buffer.append("null");
+    }
 
-    if (! controls.isEmpty())
+    if (controls != null && !controls.isEmpty())
     {
       buffer.append(", controls={ ");
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPModification.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPModification.java
index 9621137..9318c09 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPModification.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPModification.java
@@ -34,10 +34,6 @@
 import org.opends.server.types.RawAttribute;
 import org.opends.server.types.RawModification;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
-import static org.opends.server.protocols.ldap.LDAPConstants.*;
-import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java
index 32b6994..c7eb6bf 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -45,14 +46,12 @@
 import org.opends.server.types.InitializationException;
 
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import org.opends.server.loggers.ErrorLogger;
+import static org.opends.messages.ProtocolMessages.*;
+
 import org.opends.server.types.DisconnectReason;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -138,9 +137,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_REQHANDLER_OPEN_SELECTOR_FAILED;
-      String message = getMessage(msgID, handlerName, String.valueOf(e));
-      throw new InitializationException(msgID, message, e);
+      Message message = ERR_LDAP_REQHANDLER_OPEN_SELECTOR_FAILED.get(
+          handlerName, String.valueOf(e));
+      throw new InitializationException(message, e);
     }
 
     try
@@ -160,9 +159,9 @@
             (ste.getMethodName().indexOf("poll") >= 0) &&
             ioe.getMessage().equalsIgnoreCase("Invalid argument"))
         {
-          int    msgID   = MSGID_LDAP_REQHANDLER_DETECTED_JVM_ISSUE_CR6322825;
-          String message = getMessage(msgID, String.valueOf(ioe));
-          throw new InitializationException(msgID, message, ioe);
+          Message message = ERR_LDAP_REQHANDLER_DETECTED_JVM_ISSUE_CR6322825.
+              get(String.valueOf(ioe));
+          throw new InitializationException(message, ioe);
         }
       }
     }
@@ -234,7 +233,7 @@
                   // FIXME -- Should we log this?
                   key.cancel();
                   clientConnection.disconnect(DisconnectReason.SERVER_ERROR,
-                                              false, String.valueOf(e), -1);
+                                              false, null);
                 }
               }
               catch (Exception e)
@@ -252,7 +251,7 @@
                 if (clientConnection != null)
                 {
                   clientConnection.disconnect(DisconnectReason.SERVER_ERROR,
-                                              false, String.valueOf(e), -1);
+                                              false, null);
                 }
               }
             }
@@ -282,11 +281,9 @@
 
             // This should not happen, and it would have caused our reader
             // thread to die.  Log a severe error.
-            int    msgID   = MSGID_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION;
-            String message = getMessage(msgID, getName(),
-                                        getExceptionMessage(e));
-            logError(ErrorLogCategory.REQUEST_HANDLING,
-                     ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+            Message message = ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION.
+                get(getName(), getExceptionMessage(e));
+            ErrorLogger.logError(message);
           }
           finally
           {
@@ -316,8 +313,8 @@
           }
 
           c.disconnect(DisconnectReason.SERVER_ERROR, true,
-                       MSGID_LDAP_REQHANDLER_CANNOT_REGISTER, handlerName,
-                       String.valueOf(e));
+                       ERR_LDAP_REQHANDLER_CANNOT_REGISTER.get(handlerName,
+                       String.valueOf(e)));
         }
       }
     }
@@ -345,7 +342,7 @@
     if (shutdownRequested)
     {
       clientConnection.disconnect(DisconnectReason.SERVER_SHUTDOWN, true,
-           MSGID_LDAP_REQHANDLER_REJECT_DUE_TO_SHUTDOWN);
+           ERR_LDAP_REQHANDLER_REJECT_DUE_TO_SHUTDOWN.get());
       return false;
     }
 
@@ -361,7 +358,7 @@
     else
     {
       clientConnection.disconnect(DisconnectReason.ADMIN_LIMIT_EXCEEDED, true,
-           MSGID_LDAP_REQHANDLER_REJECT_DUE_TO_QUEUE_FULL, handlerName);
+           ERR_LDAP_REQHANDLER_REJECT_DUE_TO_QUEUE_FULL.get(handlerName));
       return false;
     }
   }
@@ -503,7 +500,7 @@
    *
    * @param  reason  The human-readable reason for the shutdown.
    */
-  public void processServerShutdown(String reason)
+  public void processServerShutdown(Message reason)
   {
     shutdownRequested = true;
 
@@ -517,8 +514,8 @@
         try
         {
           c.disconnect(DisconnectReason.SERVER_SHUTDOWN, true,
-                       MSGID_LDAP_REQHANDLER_DEREGISTER_DUE_TO_SHUTDOWN,
-                       reason);
+                       ERR_LDAP_REQHANDLER_DEREGISTER_DUE_TO_SHUTDOWN.get(
+                               reason));
         }
         catch (Exception e)
         {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPResultCode.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPResultCode.java
index 3e9552c..7130939 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPResultCode.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPResultCode.java
@@ -25,14 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
+import static org.opends.messages.CoreMessages.*;
 /**
  * This class defines a set of constants that correspond to the result codes
  * defined in the LDAP protocol.  Note that many (but not all) of the result
@@ -606,211 +603,211 @@
    */
   public static String toString(int resultCode)
   {
-    int msgID;
+    Message message;
 
     switch (resultCode)
     {
       case SUCCESS:
-        msgID = MSGID_RESULT_SUCCESS;
+        message = INFO_RESULT_SUCCESS.get();
         break;
       case OPERATIONS_ERROR:
-        msgID = MSGID_RESULT_OPERATIONS_ERROR;
+        message = INFO_RESULT_OPERATIONS_ERROR.get();
         break;
       case PROTOCOL_ERROR:
-        msgID = MSGID_RESULT_PROTOCOL_ERROR;
+        message = INFO_RESULT_PROTOCOL_ERROR.get();
         break;
       case TIME_LIMIT_EXCEEDED:
-        msgID = MSGID_RESULT_TIME_LIMIT_EXCEEDED;
+        message = INFO_RESULT_TIME_LIMIT_EXCEEDED.get();
         break;
       case SIZE_LIMIT_EXCEEDED:
-        msgID = MSGID_RESULT_SIZE_LIMIT_EXCEEDED;
+        message = INFO_RESULT_SIZE_LIMIT_EXCEEDED.get();
         break;
       case COMPARE_FALSE:
-        msgID = MSGID_RESULT_COMPARE_FALSE;
+        message = INFO_RESULT_COMPARE_FALSE.get();
         break;
       case COMPARE_TRUE:
-        msgID = MSGID_RESULT_COMPARE_TRUE;
+        message = INFO_RESULT_COMPARE_TRUE.get();
         break;
       case AUTH_METHOD_NOT_SUPPORTED:
-        msgID = MSGID_RESULT_AUTH_METHOD_NOT_SUPPORTED;
+        message = INFO_RESULT_AUTH_METHOD_NOT_SUPPORTED.get();
         break;
       case STRONG_AUTH_REQUIRED:
-        msgID = MSGID_RESULT_STRONG_AUTH_REQUIRED;
+        message = INFO_RESULT_STRONG_AUTH_REQUIRED.get();
         break;
       case REFERRAL:
-        msgID = MSGID_RESULT_REFERRAL;
+        message = INFO_RESULT_REFERRAL.get();
         break;
       case ADMIN_LIMIT_EXCEEDED:
-        msgID = MSGID_RESULT_ADMIN_LIMIT_EXCEEDED;
+        message = INFO_RESULT_ADMIN_LIMIT_EXCEEDED.get();
         break;
       case UNAVAILABLE_CRITICAL_EXTENSION:
-        msgID = MSGID_RESULT_UNAVAILABLE_CRITICAL_EXTENSION;
+        message = INFO_RESULT_UNAVAILABLE_CRITICAL_EXTENSION.get();
         break;
       case CONFIDENTIALITY_REQUIRED:
-        msgID = MSGID_RESULT_CONFIDENTIALITY_REQUIRED;
+        message = INFO_RESULT_CONFIDENTIALITY_REQUIRED.get();
         break;
       case SASL_BIND_IN_PROGRESS:
-        msgID = MSGID_RESULT_SASL_BIND_IN_PROGRESS;
+        message = INFO_RESULT_SASL_BIND_IN_PROGRESS.get();
         break;
       case NO_SUCH_ATTRIBUTE:
-        msgID = MSGID_RESULT_NO_SUCH_ATTRIBUTE;
+        message = INFO_RESULT_NO_SUCH_ATTRIBUTE.get();
         break;
       case UNDEFINED_ATTRIBUTE_TYPE:
-        msgID = MSGID_RESULT_UNDEFINED_ATTRIBUTE_TYPE;
+        message = INFO_RESULT_UNDEFINED_ATTRIBUTE_TYPE.get();
         break;
       case INAPPROPRIATE_MATCHING:
-        msgID = MSGID_RESULT_INAPPROPRIATE_MATCHING;
+        message = INFO_RESULT_INAPPROPRIATE_MATCHING.get();
         break;
       case CONSTRAINT_VIOLATION:
-        msgID = MSGID_RESULT_CONSTRAINT_VIOLATION;
+        message = INFO_RESULT_CONSTRAINT_VIOLATION.get();
         break;
       case ATTRIBUTE_OR_VALUE_EXISTS:
-        msgID = MSGID_RESULT_ATTRIBUTE_OR_VALUE_EXISTS;
+        message = INFO_RESULT_ATTRIBUTE_OR_VALUE_EXISTS.get();
         break;
       case INVALID_ATTRIBUTE_SYNTAX:
-        msgID = MSGID_RESULT_INVALID_ATTRIBUTE_SYNTAX;
+        message = INFO_RESULT_INVALID_ATTRIBUTE_SYNTAX.get();
         break;
       case NO_SUCH_OBJECT:
-        msgID = MSGID_RESULT_NO_SUCH_OBJECT;
+        message = INFO_RESULT_NO_SUCH_OBJECT.get();
         break;
       case ALIAS_PROBLEM:
-        msgID = MSGID_RESULT_ALIAS_PROBLEM;
+        message = INFO_RESULT_ALIAS_PROBLEM.get();
         break;
       case INVALID_DN_SYNTAX:
-        msgID = MSGID_RESULT_INVALID_DN_SYNTAX;
+        message = INFO_RESULT_INVALID_DN_SYNTAX.get();
         break;
       case ALIAS_DEREFERENCING_PROBLEM:
-        msgID = MSGID_RESULT_ALIAS_DEREFERENCING_PROBLEM;
+        message = INFO_RESULT_ALIAS_DEREFERENCING_PROBLEM.get();
         break;
       case INAPPROPRIATE_AUTHENTICATION:
-        msgID = MSGID_RESULT_INAPPROPRIATE_AUTHENTICATION;
+        message = INFO_RESULT_INAPPROPRIATE_AUTHENTICATION.get();
         break;
       case INVALID_CREDENTIALS:
-        msgID = MSGID_RESULT_INVALID_CREDENTIALS;
+        message = INFO_RESULT_INVALID_CREDENTIALS.get();
         break;
       case INSUFFICIENT_ACCESS_RIGHTS:
-        msgID = MSGID_RESULT_INSUFFICIENT_ACCESS_RIGHTS;
+        message = INFO_RESULT_INSUFFICIENT_ACCESS_RIGHTS.get();
         break;
       case BUSY:
-        msgID = MSGID_RESULT_BUSY;
+        message = INFO_RESULT_BUSY.get();
         break;
       case UNAVAILABLE:
-        msgID = MSGID_RESULT_UNAVAILABLE;
+        message = INFO_RESULT_UNAVAILABLE.get();
         break;
       case UNWILLING_TO_PERFORM:
-        msgID = MSGID_RESULT_UNWILLING_TO_PERFORM;
+        message = INFO_RESULT_UNWILLING_TO_PERFORM.get();
         break;
       case LOOP_DETECT:
-        msgID = MSGID_RESULT_LOOP_DETECT;
+        message = INFO_RESULT_LOOP_DETECT.get();
         break;
       case SORT_CONTROL_MISSING:
-        msgID = MSGID_RESULT_SORT_CONTROL_MISSING;
+        message = INFO_RESULT_SORT_CONTROL_MISSING.get();
         break;
       case OFFSET_RANGE_ERROR:
-        msgID = MSGID_RESULT_OFFSET_RANGE_ERROR;
+        message = INFO_RESULT_OFFSET_RANGE_ERROR.get();
         break;
       case NAMING_VIOLATION:
-        msgID = MSGID_RESULT_NAMING_VIOLATION;
+        message = INFO_RESULT_NAMING_VIOLATION.get();
         break;
       case OBJECTCLASS_VIOLATION:
-        msgID = MSGID_RESULT_OBJECTCLASS_VIOLATION;
+        message = INFO_RESULT_OBJECTCLASS_VIOLATION.get();
         break;
       case NOT_ALLOWED_ON_NONLEAF:
-        msgID = MSGID_RESULT_NOT_ALLOWED_ON_NONLEAF;
+        message = INFO_RESULT_NOT_ALLOWED_ON_NONLEAF.get();
         break;
       case NOT_ALLOWED_ON_RDN:
-        msgID = MSGID_RESULT_NOT_ALLOWED_ON_RDN;
+        message = INFO_RESULT_NOT_ALLOWED_ON_RDN.get();
         break;
       case ENTRY_ALREADY_EXISTS:
-        msgID = MSGID_RESULT_ENTRY_ALREADY_EXISTS;
+        message = INFO_RESULT_ENTRY_ALREADY_EXISTS.get();
         break;
       case OBJECTCLASS_MODS_PROHIBITED:
-        msgID = MSGID_RESULT_OBJECTCLASS_MODS_PROHIBITED;
+        message = INFO_RESULT_OBJECTCLASS_MODS_PROHIBITED.get();
         break;
       case AFFECTS_MULTIPLE_DSAS:
-        msgID = MSGID_RESULT_AFFECTS_MULTIPLE_DSAS;
+        message = INFO_RESULT_AFFECTS_MULTIPLE_DSAS.get();
         break;
       case VIRTUAL_LIST_VIEW_ERROR:
-        msgID = MSGID_RESULT_VIRTUAL_LIST_VIEW_ERROR;
+        message = INFO_RESULT_VIRTUAL_LIST_VIEW_ERROR.get();
         break;
       case CLIENT_SIDE_SERVER_DOWN:
-        msgID = MSGID_RESULT_CLIENT_SIDE_SERVER_DOWN;
+        message = INFO_RESULT_CLIENT_SIDE_SERVER_DOWN.get();
         break;
       case CLIENT_SIDE_LOCAL_ERROR:
-        msgID = MSGID_RESULT_CLIENT_SIDE_LOCAL_ERROR;
+        message = INFO_RESULT_CLIENT_SIDE_LOCAL_ERROR.get();
         break;
       case CLIENT_SIDE_ENCODING_ERROR:
-        msgID = MSGID_RESULT_CLIENT_SIDE_ENCODING_ERROR;
+        message = INFO_RESULT_CLIENT_SIDE_ENCODING_ERROR.get();
         break;
       case CLIENT_SIDE_DECODING_ERROR:
-        msgID = MSGID_RESULT_CLIENT_SIDE_DECODING_ERROR;
+        message = INFO_RESULT_CLIENT_SIDE_DECODING_ERROR.get();
         break;
       case CLIENT_SIDE_TIMEOUT:
-        msgID = MSGID_RESULT_CLIENT_SIDE_TIMEOUT;
+        message = INFO_RESULT_CLIENT_SIDE_TIMEOUT.get();
         break;
       case CLIENT_SIDE_AUTH_UNKNOWN:
-        msgID = MSGID_RESULT_CLIENT_SIDE_AUTH_UNKNOWN;
+        message = INFO_RESULT_CLIENT_SIDE_AUTH_UNKNOWN.get();
         break;
       case CLIENT_SIDE_FILTER_ERROR:
-        msgID = MSGID_RESULT_CLIENT_SIDE_FILTER_ERROR;
+        message = INFO_RESULT_CLIENT_SIDE_FILTER_ERROR.get();
         break;
       case CLIENT_SIDE_USER_CANCELLED:
-        msgID = MSGID_RESULT_CLIENT_SIDE_USER_CANCELLED;
+        message = INFO_RESULT_CLIENT_SIDE_USER_CANCELLED.get();
         break;
       case CLIENT_SIDE_PARAM_ERROR:
-        msgID = MSGID_RESULT_CLIENT_SIDE_PARAM_ERROR;
+        message = INFO_RESULT_CLIENT_SIDE_PARAM_ERROR.get();
         break;
       case CLIENT_SIDE_NO_MEMORY:
-        msgID = MSGID_RESULT_CLIENT_SIDE_NO_MEMORY;
+        message = INFO_RESULT_CLIENT_SIDE_NO_MEMORY.get();
         break;
       case CLIENT_SIDE_CONNECT_ERROR:
-        msgID = MSGID_RESULT_CLIENT_SIDE_CONNECT_ERROR;
+        message = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
         break;
       case CLIENT_SIDE_NOT_SUPPORTED:
-        msgID = MSGID_RESULT_CLIENT_SIDE_NOT_SUPPORTED;
+        message = INFO_RESULT_CLIENT_SIDE_NOT_SUPPORTED.get();
         break;
       case CLIENT_SIDE_CONTROL_NOT_FOUND:
-        msgID = MSGID_RESULT_CLIENT_SIDE_CONTROL_NOT_FOUND;
+        message = INFO_RESULT_CLIENT_SIDE_CONTROL_NOT_FOUND.get();
         break;
       case CLIENT_SIDE_NO_RESULTS_RETURNED:
-        msgID = MSGID_RESULT_CLIENT_SIDE_NO_RESULTS_RETURNED;
+        message = INFO_RESULT_CLIENT_SIDE_NO_RESULTS_RETURNED.get();
         break;
       case CLIENT_SIDE_MORE_RESULTS_TO_RETURN:
-        msgID = MSGID_RESULT_CLIENT_SIDE_MORE_RESULTS_TO_RETURN;
+        message = INFO_RESULT_CLIENT_SIDE_MORE_RESULTS_TO_RETURN.get();
         break;
       case CLIENT_SIDE_CLIENT_LOOP:
-        msgID = MSGID_RESULT_CLIENT_SIDE_CLIENT_LOOP;
+        message = INFO_RESULT_CLIENT_SIDE_CLIENT_LOOP.get();
         break;
       case CLIENT_SIDE_REFERRAL_LIMIT_EXCEEDED:
-        msgID = MSGID_RESULT_CLIENT_SIDE_REFERRAL_LIMIT_EXCEEDED;
+        message = INFO_RESULT_CLIENT_SIDE_REFERRAL_LIMIT_EXCEEDED.get();
         break;
       case CANCELED:
-        msgID = MSGID_RESULT_CANCELED;
+        message = INFO_RESULT_CANCELED.get();
         break;
       case NO_SUCH_OPERATION:
-        msgID = MSGID_RESULT_NO_SUCH_OPERATION;
+        message = INFO_RESULT_NO_SUCH_OPERATION.get();
         break;
       case TOO_LATE:
-        msgID = MSGID_RESULT_TOO_LATE;
+        message = INFO_RESULT_TOO_LATE.get();
         break;
       case CANNOT_CANCEL:
-        msgID = MSGID_RESULT_CANNOT_CANCEL;
+        message = INFO_RESULT_CANNOT_CANCEL.get();
         break;
       case ASSERTION_FAILED:
-        msgID = MSGID_RESULT_ASSERTION_FAILED;
+        message = INFO_RESULT_ASSERTION_FAILED.get();
         break;
       case AUTHORIZATION_DENIED:
-        msgID = MSGID_RESULT_AUTHORIZATION_DENIED;
+        message = INFO_RESULT_AUTHORIZATION_DENIED.get();
         break;
       case NO_OPERATION:
-        msgID = MSGID_RESULT_NO_OPERATION;
+        message = INFO_RESULT_NO_OPERATION.get();
         break;
       default:
-        msgID = MSGID_RESULT_OTHER;
+        message = INFO_RESULT_OTHER.get();
         break;
     }
 
-    return getMessage(msgID);
+    return message.toString();
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
index 39e0d17..360e339 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -44,8 +45,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 
 
@@ -211,9 +211,9 @@
     // dynamically loaded from the configuration.  Rather, it should be
     // explicitly created and registered by the LDAP connection handler or an
     // LDAP client connection.
-    int    msgID   = MSGID_LDAP_STATS_INVALID_MONITOR_INITIALIZATION;
-    String message = getMessage(msgID, String.valueOf(configuration.dn()));
-    throw new ConfigException(msgID, message);
+    Message message = ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION.get(
+        String.valueOf(configuration.dn()));
+    throw new ConfigException(message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyDNRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyDNRequestProtocolOp.java
index a53f248..b7ed56a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyDNRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyDNRequestProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -39,8 +40,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -285,18 +285,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_MODIFY_DN_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 3) || (numElements > 4))
     {
-      int msgID = MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_MODIFY_DN_REQUEST_DECODE_INVALID_ELEMENT_COUNT.
+          get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -312,9 +312,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_MODIFY_DN_REQUEST_DECODE_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -330,9 +330,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_RDN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_RDN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -348,9 +348,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_DELETE_OLD_RDN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_MODIFY_DN_REQUEST_DECODE_DELETE_OLD_RDN.get(
+          String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -368,9 +368,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_SUPERIOR;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message = ERR_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_SUPERIOR.get(
+            String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
     }
     else
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyDNResponseProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyDNResponseProtocolOp.java
index 0649e5a..ad9b7da 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyDNResponseProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyDNResponseProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -73,7 +73,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private String errorMessage;
+  private Message errorMessage;
 
 
 
@@ -100,7 +100,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public ModifyDNResponseProtocolOp(int resultCode, String errorMessage)
+  public ModifyDNResponseProtocolOp(int resultCode, Message errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -119,7 +119,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public ModifyDNResponseProtocolOp(int resultCode, String errorMessage,
+  public ModifyDNResponseProtocolOp(int resultCode, Message errorMessage,
                                     DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -160,7 +160,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -172,7 +172,7 @@
    *
    * @param  errorMessage  The error message for this response.
    */
-  public void setErrorMessage(String errorMessage)
+  public void setErrorMessage(Message errorMessage)
   {
     this.errorMessage = errorMessage;
   }
@@ -319,18 +319,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 3) || (numElements > 4))
     {
-      int    msgID   = MSGID_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -346,9 +345,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_RESULT_CODE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -372,16 +371,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_MATCHED_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    String errorMessage;
+    Message errorMessage;
     try
     {
-      errorMessage = elements.get(2).decodeAsOctetString().stringValue();
+      errorMessage = Message.raw(
+              elements.get(2).decodeAsOctetString().stringValue());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -394,9 +394,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_ERROR_MESSAGE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -425,9 +425,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_RESULT_DECODE_REFERRALS;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message =
+            ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyRequestProtocolOp.java
index d1d4fe1..63ed22a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyRequestProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -40,8 +41,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -219,18 +219,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MODIFY_REQUEST_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_MODIFY_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if (numElements != 2)
     {
-      int    msgID   = MSGID_LDAP_MODIFY_REQUEST_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_MODIFY_REQUEST_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -246,9 +246,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MODIFY_REQUEST_DECODE_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_MODIFY_REQUEST_DECODE_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -271,9 +271,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MODIFY_REQUEST_DECODE_MODS;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_MODIFY_REQUEST_DECODE_MODS.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyResponseProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyResponseProtocolOp.java
index 3cece07..cee345a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyResponseProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyResponseProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -73,7 +73,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private String errorMessage;
+  private Message errorMessage;
 
 
 
@@ -100,7 +100,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public ModifyResponseProtocolOp(int resultCode, String errorMessage)
+  public ModifyResponseProtocolOp(int resultCode, Message errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -119,7 +119,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public ModifyResponseProtocolOp(int resultCode, String errorMessage,
+  public ModifyResponseProtocolOp(int resultCode, Message errorMessage,
                                   DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -160,7 +160,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -172,7 +172,7 @@
    *
    * @param  errorMessage  The error message for this response.
    */
-  public void setErrorMessage(String errorMessage)
+  public void setErrorMessage(Message errorMessage)
   {
     this.errorMessage = errorMessage;
   }
@@ -319,18 +319,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 3) || (numElements > 4))
     {
-      int msgID = MSGID_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -346,9 +345,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_RESULT_CODE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -372,16 +371,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_MATCHED_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    String errorMessage;
+    Message errorMessage;
     try
     {
-      errorMessage = elements.get(2).decodeAsOctetString().stringValue();
+      errorMessage = Message.raw(
+              elements.get(2).decodeAsOctetString().stringValue());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -394,9 +394,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_ERROR_MESSAGE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -425,9 +425,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_RESULT_DECODE_REFERRALS;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message =
+            ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ProtocolOp.java
index 071a062..78cddfa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ProtocolOp.java
@@ -25,14 +25,14 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
 import org.opends.server.protocols.asn1.ASN1Element;
 import org.opends.server.types.LDAPException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 
@@ -87,9 +87,8 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_LDAP_PROTOCOL_OP_DECODE_NULL;
-      String message = getMessage(msgID);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_PROTOCOL_OP_DECODE_NULL.get();
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
     switch (element.getType())
@@ -103,9 +102,9 @@
       case 0x47:                                                         // 0x47
       case 0x48:                                                         // 0x48
       case 0x49:                                                         // 0x49
-        int    msgID   = MSGID_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE;
-        String message = getMessage(msgID, element.getType());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        Message message =
+            ERR_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE.get(element.getType());
+        throw new LDAPException(PROTOCOL_ERROR, message);
       case OP_TYPE_DELETE_REQUEST:                                       // 0x4A
         return DeleteRequestProtocolOp.decodeDeleteRequest(element);
       case 0x4B:                                                         // 0x4B
@@ -113,9 +112,9 @@
       case 0x4D:                                                         // 0x4D
       case 0x4E:                                                         // 0x4E
       case 0x4F:                                                         // 0x4F
-        msgID   = MSGID_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE;
-        message = getMessage(msgID, element.getType());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        message =
+            ERR_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE.get(element.getType());
+        throw new LDAPException(PROTOCOL_ERROR, message);
       case OP_TYPE_ABANDON_REQUEST:                                      // 0x50
         return AbandonRequestProtocolOp.decodeAbandonRequest(element);
       case 0x51:                                                         // 0x51
@@ -133,17 +132,17 @@
       case 0x5D:                                                         // 0x5D
       case 0x5E:                                                         // 0x5E
       case 0x5F:                                                         // 0x5F
-        msgID   = MSGID_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE;
-        message = getMessage(msgID, element.getType());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        message =
+            ERR_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE.get(element.getType());
+        throw new LDAPException(PROTOCOL_ERROR, message);
       case OP_TYPE_BIND_REQUEST:                                         // 0x60
         return BindRequestProtocolOp.decodeBindRequest(element);
       case OP_TYPE_BIND_RESPONSE:                                        // 0x61
         return BindResponseProtocolOp.decodeBindResponse(element);
       case 0x62:                                                         // 0x62
-        msgID   = MSGID_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE;
-        message = getMessage(msgID, element.getType());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        message =
+            ERR_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE.get(element.getType());
+        throw new LDAPException(PROTOCOL_ERROR, message);
       case OP_TYPE_SEARCH_REQUEST:                                       // 0x63
         return SearchRequestProtocolOp.decodeSearchRequest(element);
       case OP_TYPE_SEARCH_RESULT_ENTRY:                                  // 0x64
@@ -159,9 +158,9 @@
       case OP_TYPE_ADD_RESPONSE:                                         // 0x69
         return AddResponseProtocolOp.decodeAddResponse(element);
       case 0x6A:                                                         // 0x6A
-        msgID   = MSGID_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE;
-        message = getMessage(msgID, element.getType());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        message =
+            ERR_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE.get(element.getType());
+        throw new LDAPException(PROTOCOL_ERROR, message);
       case OP_TYPE_DELETE_RESPONSE:                                      // 0x6B
         return DeleteResponseProtocolOp.decodeDeleteResponse(element);
       case OP_TYPE_MODIFY_DN_REQUEST:                                    // 0x6C
@@ -175,17 +174,17 @@
       case 0x70:                                                         // 0x70
       case 0x71:                                                         // 0x71
       case 0x72:                                                         // 0x72
-        msgID   = MSGID_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE;
-        message = getMessage(msgID, element.getType());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        message =
+            ERR_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE.get(element.getType());
+        throw new LDAPException(PROTOCOL_ERROR, message);
       case OP_TYPE_SEARCH_RESULT_REFERENCE:                              // 0x73
         return SearchResultReferenceProtocolOp.decodeSearchReference(element);
       case 0x74:                                                         // 0x74
       case 0x75:                                                         // 0x75
       case 0x76:                                                         // 0x76
-        msgID   = MSGID_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE;
-        message = getMessage(msgID, element.getType());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        message =
+            ERR_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE.get(element.getType());
+        throw new LDAPException(PROTOCOL_ERROR, message);
       case OP_TYPE_EXTENDED_REQUEST:                                     // 0x77
         return ExtendedRequestProtocolOp.decodeExtendedRequest(element);
       case OP_TYPE_EXTENDED_RESPONSE:                                    // 0x78
@@ -194,9 +193,9 @@
         return
              IntermediateResponseProtocolOp.decodeIntermediateResponse(element);
       default:
-        msgID   = MSGID_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE;
-        message = getMessage(msgID, element.getType());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        message =
+            ERR_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE.get(element.getType());
+        throw new LDAPException(PROTOCOL_ERROR, message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchRequestProtocolOp.java
index 65d9493..1da9025 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchRequestProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -45,8 +46,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -413,18 +413,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REQUEST_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if (numElements != 8)
     {
-      int    msgID   = MSGID_LDAP_SEARCH_REQUEST_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_SEARCH_REQUEST_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -440,9 +440,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REQUEST_DECODE_BASE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REQUEST_DECODE_BASE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -465,9 +465,9 @@
           break;
         default:
           int    scopeValue = elements.get(1).decodeAsEnumerated().intValue();
-          int    msgID      = MSGID_LDAP_SEARCH_REQUEST_DECODE_INVALID_SCOPE;
-          String message    = getMessage(msgID, scopeValue);
-          throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+          Message message =
+              ERR_LDAP_SEARCH_REQUEST_DECODE_INVALID_SCOPE.get(scopeValue);
+          throw new LDAPException(PROTOCOL_ERROR, message);
       }
     }
     catch (LDAPException le)
@@ -481,9 +481,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REQUEST_DECODE_SCOPE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REQUEST_DECODE_SCOPE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -506,9 +506,9 @@
           break;
         default:
           int    derefValue = elements.get(2).decodeAsEnumerated().intValue();
-          int    msgID      = MSGID_LDAP_SEARCH_REQUEST_DECODE_INVALID_DEREF;
-          String message    = getMessage(msgID, derefValue);
-          throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+          Message message =
+              ERR_LDAP_SEARCH_REQUEST_DECODE_INVALID_DEREF.get(derefValue);
+          throw new LDAPException(PROTOCOL_ERROR, message);
       }
     }
     catch (LDAPException le)
@@ -522,9 +522,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REQUEST_DECODE_DEREF;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REQUEST_DECODE_DEREF.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -540,9 +540,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REQUEST_DECODE_SIZE_LIMIT;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REQUEST_DECODE_SIZE_LIMIT.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -558,9 +558,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REQUEST_DECODE_TIME_LIMIT;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REQUEST_DECODE_TIME_LIMIT.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -576,9 +576,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REQUEST_DECODE_TYPES_ONLY;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REQUEST_DECODE_TYPES_ONLY.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -594,9 +594,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REQUEST_DECODE_FILTER;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REQUEST_DECODE_FILTER.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -618,9 +618,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REQUEST_DECODE_ATTRIBUTES;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REQUEST_DECODE_ATTRIBUTES.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultDoneProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultDoneProtocolOp.java
index c2f5c87..4109f27 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultDoneProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultDoneProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -73,7 +73,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private String errorMessage;
+  private Message errorMessage;
 
 
 
@@ -100,7 +100,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public SearchResultDoneProtocolOp(int resultCode, String errorMessage)
+  public SearchResultDoneProtocolOp(int resultCode, Message errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -119,7 +119,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public SearchResultDoneProtocolOp(int resultCode, String errorMessage,
+  public SearchResultDoneProtocolOp(int resultCode, Message errorMessage,
                                     DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -160,7 +160,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -172,7 +172,7 @@
    *
    * @param  errorMessage  The error message for this response.
    */
-  public void setErrorMessage(String errorMessage)
+  public void setErrorMessage(Message errorMessage)
   {
     this.errorMessage = errorMessage;
   }
@@ -326,18 +326,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if ((numElements < 3) || (numElements > 4))
     {
-      int    msgID   = MSGID_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -353,9 +352,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_RESULT_CODE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -379,16 +378,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_MATCHED_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    String errorMessage;
+    Message errorMessage;
     try
     {
-      errorMessage = elements.get(2).decodeAsOctetString().stringValue();
+      errorMessage =
+              Message.raw(elements.get(2).decodeAsOctetString().stringValue());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -401,9 +401,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_RESULT_DECODE_ERROR_MESSAGE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -432,9 +432,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_LDAP_RESULT_DECODE_REFERRALS;
-        String message = getMessage(msgID, String.valueOf(e));
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+        Message message =
+            ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
+        throw new LDAPException(PROTOCOL_ERROR, message, e);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultEntryProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultEntryProtocolOp.java
index ce61f60..7bb19a8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultEntryProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultEntryProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -52,8 +53,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -275,18 +275,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_SEARCH_ENTRY_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_ENTRY_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if (numElements != 2)
     {
-      int    msgID   = MSGID_LDAP_SEARCH_ENTRY_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_SEARCH_ENTRY_DECODE_INVALID_ELEMENT_COUNT.get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -302,9 +302,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_SEARCH_ENTRY_DECODE_DN;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_SEARCH_ENTRY_DECODE_DN.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -327,9 +326,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_SEARCH_ENTRY_DECODE_ATTRS;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_ENTRY_DECODE_ATTRS.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultReferenceProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultReferenceProtocolOp.java
index 4ea0884..7a49e38 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultReferenceProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/SearchResultReferenceProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -41,8 +42,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -191,9 +191,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REFERENCE_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REFERENCE_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -212,9 +212,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_SEARCH_REFERENCE_DECODE_URLS;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_SEARCH_REFERENCE_DECODE_URLS.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/UnbindRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/UnbindRequestProtocolOp.java
index e76d922..03a00da 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/UnbindRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/UnbindRequestProtocolOp.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.protocols.ldap;
+import org.opends.messages.Message;
 
 
 
@@ -35,8 +36,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -127,9 +127,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_UNBIND_DECODE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_UNBIND_DECODE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/Historical.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/Historical.java
index 6b84831..f2c4f8a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/Historical.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/Historical.java
@@ -25,10 +25,10 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.plugin;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 
 import java.util.HashMap;
 import java.util.Iterator;
@@ -46,8 +46,6 @@
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.Modification;
 import org.opends.server.types.ModificationType;
 import org.opends.server.types.operation.PreOperationAddOperation;
@@ -78,6 +76,12 @@
   public static final String HISTORICALATTRIBUTENAME = "ds-sync-hist";
 
   /**
+   * Name used to store attachment of historical information in the
+   * operation.
+   */
+  public static final String HISTORICAL = "ds-synch-historical";
+
+  /**
    * The AttributeType associated to the attribute used to store
    * hitorical information.
    */
@@ -410,11 +414,8 @@
       // Any exception happening here means that the coding of the hsitorical
       // information was wrong.
       // Log an error and continue with an empty historical.
-      int    msgID   = MSGID_BAD_HISTORICAL;
-      String message = getMessage(msgID, entry.getDN().toString());
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_BAD_HISTORICAL.get(entry.getDN().toString());
+      logError(message);
     }
 
     /* set the reference to the historical information in the entry */
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ListenerThread.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ListenerThread.java
index 1e626cf..8ecc49b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ListenerThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ListenerThread.java
@@ -25,19 +25,17 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.plugin;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.protocol.UpdateMessage;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 
 /**
  * Thread that is used to get messages from the Replication servers
@@ -101,10 +99,9 @@
          * listener.replay so that the thread never dies even in case
          * of problems.
          */
-        int msgID = MSGID_EXCEPTION_RECEIVING_REPLICATION_MESSAGE;
-        String message = getMessage(msgID, stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-            ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+        Message message = ERR_EXCEPTION_RECEIVING_REPLICATION_MESSAGE.get(
+            stackTraceToSingleLineString(e));
+        logError(message);
       }
     }
     if (debugEnabled())
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
index e21ca23..016582b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
@@ -42,6 +42,7 @@
 import org.opends.server.api.SynchronizationProvider;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
+
 import org.opends.server.types.BackupConfig;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
@@ -64,8 +65,8 @@
 import org.opends.server.types.operation.PreOperationDeleteOperation;
 import org.opends.server.types.operation.PreOperationModifyDNOperation;
 import org.opends.server.types.operation.PreOperationModifyOperation;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.ReplicationMessages.*;
 
 /**
  * This class is used to load the Replication code inside the JVM
@@ -193,7 +194,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(
-      MultimasterDomainCfg configuration, List<String> unacceptableReasons)
+      MultimasterDomainCfg configuration, List<Message> unacceptableReasons)
   {
     return ReplicationDomain.isConfigurationAcceptable(
       configuration, unacceptableReasons);
@@ -332,12 +333,14 @@
       return new SynchronizationProviderResult(true);
 
     Historical historicalInformation = (Historical)
-                            modifyOperation.getAttachment(HISTORICAL);
+                            modifyOperation.getAttachment(
+                                    Historical.HISTORICAL);
     if (historicalInformation == null)
     {
       Entry entry = modifyOperation.getModifiedEntry();
       historicalInformation = Historical.load(entry);
-      modifyOperation.setAttachment(HISTORICAL, historicalInformation);
+      modifyOperation.setAttachment(Historical.HISTORICAL,
+              historicalInformation);
     }
 
     historicalInformation.generateState(modifyOperation);
@@ -549,7 +552,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(
-      MultimasterDomainCfg configuration, List<String> unacceptableReasons)
+      MultimasterDomainCfg configuration, List<Message> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/PersistentServerState.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/PersistentServerState.java
index 7702c2d..1ca43bf 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/PersistentServerState.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/PersistentServerState.java
@@ -25,10 +25,10 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.plugin;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
@@ -51,8 +51,6 @@
 import org.opends.server.types.Control;
 import org.opends.server.types.DN;
 import org.opends.server.types.DereferencePolicy;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.LDAPException;
 import org.opends.server.types.ModificationType;
 import org.opends.server.types.RawModification;
@@ -147,13 +145,10 @@
     if (((search.getResultCode() != ResultCode.SUCCESS)) &&
         ((search.getResultCode() != ResultCode.NO_SUCH_OBJECT)))
     {
-      int msgID = MSGID_ERROR_SEARCHING_RUV;
-      String message = getMessage(msgID,
-          search.getResultCode().getResultCodeName(),
-          search.toString(), search.getErrorMessage(),
-          baseDn.toString());
-      logError(ErrorLogCategory.SYNCHRONIZATION, ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
+      Message message = ERR_ERROR_SEARCHING_RUV.
+          get(search.getResultCode().getResultCodeName(), search.toString(),
+              search.getErrorMessage(), baseDn.toString());
+      logError(message);
     }
 
     SearchResultEntry resultEntry = null;
@@ -231,12 +226,12 @@
     ResultCode result = op.getResultCode();
     if (result != ResultCode.SUCCESS)
     {
-      int msgID = MSGID_ERROR_UPDATING_RUV;
-      String message = getMessage(msgID, op.getResultCode().getResultCodeName(),
-          op.toString(), op.getErrorMessage(), baseDn.toString(),
-          Thread.currentThread().getStackTrace());
-      logError(ErrorLogCategory.SYNCHRONIZATION, ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
+      Message message = ERR_ERROR_UPDATING_RUV.get(
+              op.getResultCode().getResultCodeName().toString(),
+              op.toString(),
+              op.getErrorMessage().toString(),
+              baseDn.toString());
+      logError(message);
     }
     return result;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationBroker.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationBroker.java
index c3a35a1..69fede4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationBroker.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationBroker.java
@@ -25,12 +25,13 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.plugin;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.io.IOException;
@@ -64,8 +65,6 @@
 import org.opends.server.replication.protocol.WindowProbe;
 import org.opends.server.types.DN;
 import org.opends.server.types.DereferencePolicy;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.SearchResultEntry;
 import org.opends.server.types.SearchResultReference;
@@ -187,11 +186,8 @@
     this.servers = servers;
     if (servers.size() < 1)
     {
-      int    msgID   = MSGID_NEED_MORE_THAN_ONE_CHANGELOG_SERVER;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.NOTICE,
-               message, msgID);
+      Message message = NOTE_NEED_MORE_THAN_ONE_CHANGELOG_SERVER.get();
+      logError(message);
     }
 
     this.rcvWindow = this.maxRcvWindow;
@@ -301,18 +297,16 @@
                  * of our changes, we are going to try another server
                  * but before log a notice message
                  */
-                int    msgID   = MSGID_CHANGELOG_MISSING_CHANGES;
-                String message = getMessage(msgID, server);
-                logError(ErrorLogCategory.SYNCHRONIZATION,
-                    ErrorLogSeverity.NOTICE,
-                    message, msgID);
+                Message message = NOTE_CHANGELOG_MISSING_CHANGES.get(server);
+                logError(message);
               }
               else
               {
                 replayOperations.clear();
-                logError(ErrorLogCategory.SYNCHRONIZATION,
-                    ErrorLogSeverity.NOTICE,
-                    "going to search for changes", 1);
+
+                 // TODO: i18n
+                logError(Message.raw("going to search for changes"));
+
                 /*
                  * Get all the changes that have not been seen by this
                  * replicationServer and update it
@@ -339,11 +333,8 @@
                    * TODO : REPAIR : log an error for the repair tool
                    * that will need to resynchronize the servers.
                    */
-                  int    msgID   = MSGID_CANNOT_RECOVER_CHANGES;
-                  String message = getMessage(msgID);
-                  logError(ErrorLogCategory.SYNCHRONIZATION,
-                      ErrorLogSeverity.FATAL_ERROR,
-                      message, msgID);
+                  Message message = NOTE_CANNOT_RECOVER_CHANGES.get();
+                  logError(message);
                 }
                 else
                 {
@@ -352,15 +343,11 @@
                   connected = true;
                   for (FakeOperation replayOp : replayOperations)
                   {
-                    logError(ErrorLogCategory.SYNCHRONIZATION,
-                        ErrorLogSeverity.NOTICE,
-                        "sendingChange", 1);
+                    logError(Message.raw("sendingChange")); // TODO: i18n
                     session.publish(replayOp.generateMessage());
                   }
                   startHeartBeat();
-                  logError(ErrorLogCategory.SYNCHRONIZATION,
-                      ErrorLogSeverity.NOTICE,
-                      "changes sent", 1);
+                  logError(Message.raw("changes sent")); // TODO: i18n
                   break;
                 }
               }
@@ -376,20 +363,14 @@
             {
               // the error message is only logged once to avoid overflowing
               // the error log
-              int    msgID   = MSGID_NO_CHANGELOG_SERVER_LISTENING;
-              String message = getMessage(msgID, server);
-              logError(ErrorLogCategory.SYNCHRONIZATION,
-                  ErrorLogSeverity.NOTICE,
-                  message, msgID);
+              Message message = NOTE_NO_CHANGELOG_SERVER_LISTENING.get(server);
+              logError(message);
             }
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_EXCEPTION_STARTING_SESSION;
-            String message = getMessage(msgID);
-            logError(ErrorLogCategory.SYNCHRONIZATION,
-                ErrorLogSeverity.SEVERE_ERROR,
-                message + stackTraceToSingleLineString(e), msgID);
+            Message message = NOTE_EXCEPTION_STARTING_SESSION.get();
+            logError(message);
           }
           finally
           {
@@ -417,11 +398,8 @@
            * changes that this server has already processed, start again
            * the loop looking for any replicationServer.
            */
-          int    msgID   = MSGID_COULD_NOT_FIND_CHANGELOG_WITH_MY_CHANGES;
-          String message = getMessage(msgID);
-          logError(ErrorLogCategory.SYNCHRONIZATION,
-              ErrorLogSeverity.NOTICE,
-              message, msgID);
+          Message message = NOTE_COULD_NOT_FIND_CHANGELOG_WITH_MY_CHANGES.get();
+          logError(message);
           checkState = false;
         }
       }
@@ -438,11 +416,9 @@
           sendWindow.release(Integer.MAX_VALUE);
         this.sendWindow = new Semaphore(maxSendWindow);
         connectPhaseLock.notify();
-        int    msgID   = MSGID_NOW_FOUND_CHANGELOG;
-        String message =
-          getMessage(msgID, replicationServer, baseDn.toString());
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-            ErrorLogSeverity.NOTICE, message, msgID);
+        Message message =
+            NOTE_NOW_FOUND_CHANGELOG.get(replicationServer, baseDn.toString());
+        logError(message);
       }
       else
       {
@@ -456,10 +432,9 @@
           checkState = false;
           connectionError = true;
           connectPhaseLock.notify();
-          int    msgID   = MSGID_COULD_NOT_FIND_CHANGELOG;
-          String message = getMessage(msgID, baseDn.toString());
-          logError(ErrorLogCategory.SYNCHRONIZATION,
-              ErrorLogSeverity.NOTICE, message, msgID);
+          Message message =
+              NOTE_COULD_NOT_FIND_CHANGELOG.get(baseDn.toString());
+          logError(message);
         }
       }
     }
@@ -519,11 +494,10 @@
         this.connect();
       } catch (Exception e)
       {
-        int    msgID   = MSGID_EXCEPTION_STARTING_SESSION;
-        String message = getMessage(msgID) + stackTraceToSingleLineString(e);
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-                 ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        MessageBuilder mb = new MessageBuilder();
+        mb.append(NOTE_EXCEPTION_STARTING_SESSION.get());
+        mb.append(stackTraceToSingleLineString(e));
+        logError(mb.toMessage());
       }
       if ((!connected) && (!shutdown))
       {
@@ -683,11 +657,9 @@
       {
         if (shutdown == false)
         {
-          int    msgID   = MSGID_DISCONNECTED_FROM_CHANGELOG;
-          String message = getMessage(msgID, replicationServer);
-          logError(ErrorLogCategory.SYNCHRONIZATION,
-              ErrorLogSeverity.NOTICE,
-              message + " " + e.getMessage(), msgID);
+          Message message =
+              NOTE_DISCONNECTED_FROM_CHANGELOG.get(replicationServer);
+          logError(message);
           this.reStart(failingSession);
         }
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java
index 4b71da6..31d803d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java
@@ -25,14 +25,15 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.plugin;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.config.ConfigConstants.DN_BACKEND_BASE;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.*;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ToolMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.replication.plugin.Historical.ENTRYUIDNAME;
 import static org.opends.server.replication.protocol.OperationContext.*;
 import static org.opends.server.util.StaticUtils.createEntry;
@@ -104,8 +105,6 @@
 import org.opends.server.types.DereferencePolicy;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.LDAPException;
 import org.opends.server.types.LDIFExportConfig;
 import org.opends.server.types.LDIFImportConfig;
@@ -555,7 +554,7 @@
    * If not set the ResultCode and the response message,
    * interrupt the operation, and return false
    *
-   * @param   Operation  The Operation that needs to be checked.
+   * @param   op  The Operation that needs to be checked.
    *
    * @return  true when it OK to process the Operation, false otherwise.
    *          When false is returned the resultCode and the reponse message
@@ -578,12 +577,10 @@
       }
       else
       {
-        String msg =
-          getMessage(MSGID_REPLICATION_COULD_NOT_CONNECT, baseDN.toString());
+        Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(baseDN.toString());
         DirectoryException result =
           new DirectoryException(
-              ResultCode.UNWILLING_TO_PERFORM, msg,
-              MSGID_REPLICATION_COULD_NOT_CONNECT);
+              ResultCode.UNWILLING_TO_PERFORM, msg);
 
         op.setResponseData(result);
 
@@ -733,7 +730,8 @@
        * Solve the conflicts between modify operations
        */
       Historical historicalInformation = Historical.load(modifiedEntry);
-      modifyOperation.setAttachment(HISTORICAL, historicalInformation);
+      modifyOperation.setAttachment(Historical.HISTORICAL,
+                                    historicalInformation);
 
       if (historicalInformation.replayOperation(modifyOperation, modifiedEntry))
       {
@@ -795,7 +793,7 @@
               // The server is in the shutdown process
               return null;
             }
-            log("Broker received message :" + msg);
+            log(Message.raw("Broker received message :" + msg));
             if (msg instanceof AckMessage)
             {
               AckMessage ack = (AckMessage) msg;
@@ -829,12 +827,14 @@
               catch(DirectoryException de)
               {
                 // Return an error message to notify the sender
-                int msgID = de.getMessageID();
                 ErrorMessage errorMsg =
                   new ErrorMessage(initMsg.getsenderID(),
-                                   msgID, de.getMessage());
-                log(getMessage(msgID,
-                               backend.getBackendID()) + de.getMessage());
+                                   de.getMessageObject());
+                MessageBuilder mb = new MessageBuilder();
+                mb.append(de.getMessageObject());
+                mb.append("Backend ID: ");
+                mb.append(backend.getBackendID());
+                log(mb.toMessage());
                 broker.publish(errorMsg);
               }
             }
@@ -933,11 +933,9 @@
          * It should never happen.
          */
         pendingChanges.remove(curChangeNumber);
-        int    msgID   = MSGID_UNKNOWN_TYPE;
-        String message = getMessage(msgID, op.getOperationType().toString());
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-                 ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message =
+            ERR_UNKNOWN_TYPE.get(op.getOperationType().toString());
+        logError(message);
         return;
       }
     }
@@ -957,12 +955,9 @@
       }
       catch  (NoSuchElementException e)
       {
-        int msgID = MSGID_OPERATION_NOT_FOUND_IN_PENDING;
-        String message = getMessage(msgID, curChangeNumber.toString(),
-                                    op.toString());
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-                 ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_OPERATION_NOT_FOUND_IN_PENDING.get(
+            curChangeNumber.toString(), op.toString());
+        logError(message);
         return;
       }
 
@@ -1278,10 +1273,8 @@
         // Continue with the next change but the servers could now become
         // inconsistent.
         // TODO : REPAIR : Should let the repair tool know about this
-        int msgID = MSGID_LOOP_REPLAYING_OPERATION;
-        String message = getMessage(msgID, op.toString());
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-            ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+        Message message = ERR_LOOP_REPLAYING_OPERATION.get(op.toString());
+        logError(message);
         numUnresolvedNamingConflicts.incrementAndGet();
 
         updateError(changeNumber);
@@ -1289,30 +1282,21 @@
     }
     catch (ASN1Exception e)
     {
-      int msgID = MSGID_EXCEPTION_DECODING_OPERATION;
-      String message = getMessage(msgID, msg) +
-      stackTraceToSingleLineString(e);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-          ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
+      Message message = ERR_EXCEPTION_DECODING_OPERATION.get(
+              String.valueOf(msg) + stackTraceToSingleLineString(e));
+      logError(message);
     }
     catch (LDAPException e)
     {
-      int msgID = MSGID_EXCEPTION_DECODING_OPERATION;
-      String message = getMessage(msgID, msg) +
-      stackTraceToSingleLineString(e);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-          ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
+      Message message = ERR_EXCEPTION_DECODING_OPERATION.get(
+              String.valueOf(msg) + stackTraceToSingleLineString(e));
+      logError(message);
     }
     catch (DataFormatException e)
     {
-      int msgID = MSGID_EXCEPTION_DECODING_OPERATION;
-      String message = getMessage(msgID, msg) +
-      stackTraceToSingleLineString(e);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-          ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
+      Message message = ERR_EXCEPTION_DECODING_OPERATION.get(
+              String.valueOf(msg) + stackTraceToSingleLineString(e));
+      logError(message);
     }
     catch (Exception e)
     {
@@ -1324,20 +1308,16 @@
          * to be inconsistent.
          * TODO : REPAIR : Should let the repair tool know about this
          */
-        int msgID = MSGID_EXCEPTION_REPLAYING_OPERATION;
-        String message = getMessage(msgID, stackTraceToSingleLineString(e),
-            op.toString());
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-            ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+        Message message = ERR_EXCEPTION_REPLAYING_OPERATION.get(
+            stackTraceToSingleLineString(e), op.toString());
+        logError(message);
         updateError(changeNumber);
       }
       else
       {
-        int msgID = MSGID_EXCEPTION_DECODING_OPERATION;
-        String message = getMessage(msgID, stackTraceToSingleLineString(e),
-            msg.toString());
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-            ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+        Message message = ERR_EXCEPTION_DECODING_OPERATION.get(
+                String.valueOf(msg) + stackTraceToSingleLineString(e));
+        logError(message);
       }
     }
     finally
@@ -1813,19 +1793,26 @@
       }
       else
       {
-        int    msgID   = MSGID_CANNOT_RENAME_CONFLICT_ENTRY;
-        String message = getMessage(msgID) + entryDN + " " + conflictOp + " "
-                         + op.getResultCode();
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-            message, msgID);
+        MessageBuilder mb = new MessageBuilder();
+        mb.append(ERR_CANNOT_RENAME_CONFLICT_ENTRY.get());
+        mb.append(String.valueOf(entryDN));
+        mb.append(" ");
+        mb.append(String.valueOf(conflictOp));
+        mb.append(" ");
+        mb.append(String.valueOf(op.getResultCode()));
+        logError(mb.toMessage());
         // TODO : log error and information for the REPAIR tool.
       }
     } catch (DirectoryException e)
     {
-      int    msgID   = MSGID_EXCEPTION_RENAME_CONFLICT_ENTRY;
-      String message = getMessage(msgID) + entryDN + " " + conflictOp + " " + e;
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(ERR_EXCEPTION_RENAME_CONFLICT_ENTRY.get());
+      mb.append(String.valueOf(entryDN));
+      mb.append(" ");
+      mb.append(String.valueOf(conflictOp));
+      mb.append(" ");
+      mb.append(e.getLocalizedMessage());
+      logError(mb.toMessage());
       // TODO log errror and information for the REPAIR tool.
     }
   }
@@ -1849,11 +1836,14 @@
 
     if (newOp.getResultCode() != ResultCode.SUCCESS)
     {
-      int    msgID   = MSGID_CANNOT_RENAME_CONFLICT_ENTRY;
-      String message = getMessage(msgID) + dn + " " + conflictOp + " "
-                       + newOp.getResultCode();
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(ERR_CANNOT_RENAME_CONFLICT_ENTRY.get());
+      mb.append(String.valueOf(dn));
+      mb.append(" ");
+      mb.append(String.valueOf(conflictOp));
+      mb.append(" ");
+      mb.append(String.valueOf(newOp.getResultCode()));
+      logError(mb.toMessage());
       /*
        * TODO : REPAIR should log information for the repair tool.
        */
@@ -1886,10 +1876,12 @@
     ModifyOperation newOp = conn.processModify(currentDN, mods);
     if (newOp.getResultCode() != ResultCode.SUCCESS)
     {
-      int    msgID   = MSGID_CANNOT_ADD_CONFLICT_ATTRIBUTE;
-      String message = getMessage(msgID) + op + " " + newOp.getResultCode();
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(ERR_CANNOT_ADD_CONFLICT_ATTRIBUTE.get());
+      mb.append(String.valueOf(op));
+      mb.append(" ");
+      mb.append(String.valueOf(newOp.getResultCode()));
+      logError(mb.toMessage());
       /*
        * TODO : REPAIR should log information for the repair tool.
        */
@@ -1900,7 +1892,7 @@
    * Add the conflict object class to an entry that could
    * not be added because it is conflicting with another entry.
    *
-   * @param addOp          The conflicting Add Operation.
+   * @param msg            The conflicting Add Operation.
    *
    * @throws ASN1Exception When an encoding error happenned manipulating the
    *                       msg.
@@ -2137,7 +2129,7 @@
           // The server is in the shutdown process
           return null;
         }
-        log("receiveEntryBytes: received " + msg);
+        log(Message.raw("receiveEntryBytes: received " + msg));
         if (msg instanceof EntryMessage)
         {
           // FIXME
@@ -2160,7 +2152,7 @@
           // by returning null
           ErrorMessage errorMsg = (ErrorMessage)msg;
           ieContext.exception = new DirectoryException(ResultCode.OTHER,
-              errorMsg.getDetails() , errorMsg.getMsgID());
+              errorMsg.getDetails());
           return null;
         }
         else
@@ -2171,7 +2163,7 @@
       catch(Exception e)
       {
         ieContext.exception = new DirectoryException(ResultCode.OTHER,
-            "received an unexpected message type" , 1, e);
+            Message.raw("received an unexpected message type"), e);
       }
       return null;
     }
@@ -2190,7 +2182,7 @@
     if (ieContext != null)
     {
       ieContext.exception = new DirectoryException(ResultCode.OTHER,
-          errorMsg.getDetails() , errorMsg.getMsgID());
+          errorMsg.getDetails());
 
       if (ieContext.initializeTask instanceof InitializeTask)
       {
@@ -2259,7 +2251,7 @@
    * Log debug message.
    * @param message The message to log.
    */
-  private void log(String message)
+  private void log(Message message)
   {
     if (debugEnabled())
     {
@@ -2284,23 +2276,21 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_LDIFEXPORT_CANNOT_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-            String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-            message, msgID);
+        Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         throw new DirectoryException(
-            ResultCode.OTHER, message, msgID, null);
+            ResultCode.OTHER, message, null);
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFEXPORT_CANNOT_LOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-          message + " " + stackTraceToSingleLineString(e), msgID);
+      Message message =
+          ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+                  backend.getBackendID(), e.getLocalizedMessage());
+      logError(message);
       throw new DirectoryException(
-          ResultCode.OTHER, message, msgID, null);
+          ResultCode.OTHER, message, null);
     }
 
     ReplLDIFOutputStream os = new ReplLDIFOutputStream(this);
@@ -2317,21 +2307,19 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_LDIFEXPORT_ERROR_DURING_EXPORT;
-      String message = getMessage(msgID, de.getErrorMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-          msgID);
+      Message message =
+          ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(de.getMessageObject());
+      logError(message);
       throw new DirectoryException(
-          ResultCode.OTHER, message, msgID, null);
+          ResultCode.OTHER, message, null);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFEXPORT_ERROR_DURING_EXPORT;
-      String message = getMessage(msgID, stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-          msgID);
+      Message message = ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(
+          stackTraceToSingleLineString(e));
+      logError(message);
       throw new DirectoryException(
-          ResultCode.OTHER, message, msgID, null);
+          ResultCode.OTHER, message, null);
     }
     finally
     {
@@ -2345,24 +2333,20 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_UNLOCK_BACKEND;
-          String message = getMessage(msgID, backend.getBackendID(),
-              String.valueOf(failureReason));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-              message, msgID);
+          Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+              backend.getBackendID(), String.valueOf(failureReason));
+          logError(message);
           throw new DirectoryException(
-              ResultCode.OTHER, message, msgID, null);
+              ResultCode.OTHER, message, null);
         }
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFEXPORT_CANNOT_UNLOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-            stackTraceToSingleLineString(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-            message, msgID);
+        Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+            backend.getBackendID(), stackTraceToSingleLineString(e));
+        logError(message);
         throw new DirectoryException(
-            ResultCode.OTHER, message, msgID, null);
+            ResultCode.OTHER, message, null);
       }
     }
   }
@@ -2381,33 +2365,30 @@
     Backend domainBackend = DirectoryServer.getBackend(baseDN);
     if (domainBackend == null)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BASE_DN;
-      String message = getMessage(msgID, DN_BACKEND_BASE);
+      Message message = ERR_CANNOT_DECODE_BASE_DN.get(DN_BACKEND_BASE, "");
       throw new DirectoryException(
-          ResultCode.OTHER, message, msgID, null);
+          ResultCode.OTHER, message, null);
     }
 
     // Retrieves its configuration
     BackendCfg backendCfg = TaskUtils.getConfigEntry(domainBackend);
     if (backendCfg == null)
     {
-      int    msgID   = MSGID_LDIFIMPORT_NO_BACKENDS_FOR_ID;
-      String message = getMessage(msgID, domainBackend.getBackendID());
-      logError(ErrorLogCategory.BACKEND,
-          ErrorLogSeverity.SEVERE_ERROR, message, msgID);
+      Message message =
+          ERR_LDIFIMPORT_NO_BACKENDS_FOR_ID.get();
+      logError(message);
       throw new DirectoryException(
-          ResultCode.OTHER, message, msgID, null);
+          ResultCode.OTHER, message, null);
     }
 
     this.backend = domainBackend;
     if (! domainBackend.supportsLDIFImport())
     {
-      int    msgID   = MSGID_LDIFIMPORT_CANNOT_IMPORT;
-      String message = getMessage(msgID, baseDN);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-          ErrorLogSeverity.NOTICE, message, msgID);
+      Message message = ERR_LDIFIMPORT_CANNOT_IMPORT.get(
+              String.valueOf(baseDN));
+      logError(message);
       throw new DirectoryException(
-          ResultCode.OTHER, message, msgID, null);
+          ResultCode.OTHER, message, null);
     }
   }
 
@@ -2481,7 +2462,7 @@
         // We shold check here that this is a server implied
         // in the current domain.
 
-        log("Source decoded for import:" + source);
+        log(Message.raw("Source decoded for import:" + source));
         return source;
       }
     }
@@ -2491,15 +2472,13 @@
     }
 
     ResultCode resultCode = ResultCode.OTHER;
-    int errorMessageID = MSGID_INVALID_IMPORT_SOURCE;
-    String message = getMessage(errorMessageID);
-
+    Message message = ERR_INVALID_IMPORT_SOURCE.get();
     if (cause != null)
       throw new DirectoryException(
-          resultCode, message, errorMessageID, cause);
+          resultCode, message, cause);
     else
       throw new DirectoryException(
-          resultCode, message, errorMessageID);
+          resultCode, message);
   }
 
   /**
@@ -2534,15 +2513,14 @@
       cause = e;
     }
     ResultCode resultCode = ResultCode.OTHER;
-    int errorMessageID = MSGID_INVALID_EXPORT_TARGET;
-    String message = getMessage(errorMessageID);
+    Message message = ERR_INVALID_EXPORT_TARGET.get();
 
     if (cause != null)
       throw new DirectoryException(
-          resultCode, message, errorMessageID, cause);
+          resultCode, message, cause);
     else
       throw new DirectoryException(
-          resultCode, message, errorMessageID);
+          resultCode, message);
 
   }
 
@@ -2552,10 +2530,9 @@
     if (ieContext != null)
     {
       // Rejects 2 simultaneous exports
-      int msgID = MSGID_SIMULTANEOUS_IMPORT_EXPORT_REJECTED;
-      String message = getMessage(msgID);
+      Message message = ERR_SIMULTANEOUS_IMPORT_EXPORT_REJECTED.get();
       throw new DirectoryException(ResultCode.OTHER,
-          message, msgID);
+          message);
     }
 
     ieContext = new IEContext();
@@ -2611,8 +2588,8 @@
         baseDN, serverId, ieContext.exportTarget, requestorID,
         backend.getEntryCount());
 
-    log("SD : publishes " + initializeMessage +
-        " for #entries=" + backend.getEntryCount() + ieContext.entryLeftCount);
+    log(Message.raw("SD : publishes " + initializeMessage +
+        " for #entries=" + backend.getEntryCount() + ieContext.entryLeftCount));
 
     broker.publish(initializeMessage);
 
@@ -2630,10 +2607,7 @@
     catch(DirectoryException de)
     {
       // Notify the peer of the failure
-      int msgID = de.getMessageID();
-      ErrorMessage errorMsg =
-        new ErrorMessage(target,
-                         msgID, de.getMessage());
+      ErrorMessage errorMsg = new ErrorMessage(target, de.getMessageObject());
       broker.publish(errorMsg);
 
       releaseIEContext();
@@ -2661,12 +2635,10 @@
     StringBuilder failureReason = new StringBuilder();
     if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
     {
-      int    msgID   = MSGID_LDIFIMPORT_CANNOT_LOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-          String.valueOf(failureReason));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
-      throw new DirectoryException(ResultCode.OTHER, message, msgID);
+      Message message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
+          backend.getBackendID(), String.valueOf(failureReason));
+      logError(message);
+      throw new DirectoryException(ResultCode.OTHER, message);
     }
   }
 
@@ -2681,7 +2653,7 @@
     LDIFImportConfig importConfig = null;
     try
     {
-      log("startImport");
+      log(Message.raw("startImport"));
 
       if (initializeMessage.getRequestorID() == serverId)
       {
@@ -2723,8 +2695,8 @@
     }
     catch(Exception e)
     {
-      throw new DirectoryException(ResultCode.OTHER, e.getLocalizedMessage(),
-          2);// FIXME
+      throw new DirectoryException(ResultCode.OTHER,
+              Message.raw(e.getLocalizedMessage()));
     }
     finally
     {
@@ -2743,7 +2715,7 @@
 
       releaseIEContext();
 
-      log("End importBackend");
+      log(Message.raw("End importBackend"));
     }
     // Success
   }
@@ -2762,12 +2734,10 @@
     // Release lock
     if (!LockFileManager.releaseLock(lockFile, failureReason))
     {
-      int    msgID   = MSGID_LDIFIMPORT_CANNOT_UNLOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-          String.valueOf(failureReason));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
-      throw new DirectoryException(ResultCode.OTHER, message, msgID);
+      Message message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
+          backend.getBackendID(), String.valueOf(failureReason));
+      logError(message);
+      throw new DirectoryException(ResultCode.OTHER, message);
     }
 
     // FIXME setBackendEnabled should be part taskUtils ?
@@ -2794,10 +2764,9 @@
     {
       if (!( provider instanceof MultimasterReplication))
       {
-        int msgID = MSGID_INVALID_PROVIDER;
-        String message = getMessage(msgID);
+        Message message = ERR_INVALID_PROVIDER.get();
         throw new DirectoryException(ResultCode.OTHER,
-            message, msgID);
+            message);
       }
 
       // From the domainDN retrieves the replication domain
@@ -2810,20 +2779,20 @@
       if (replicationDomain != null)
       {
         // Should never happen
-        int msgID = MSGID_MULTIPLE_MATCHING_DOMAIN;
-        String message = getMessage(msgID);
+        Message message = ERR_MULTIPLE_MATCHING_DOMAIN.get();
         throw new DirectoryException(ResultCode.OTHER,
-            message, msgID);
+            message);
       }
       replicationDomain = sdomain;
     }
 
     if (replicationDomain == null)
     {
-      int msgID = MSGID_NO_MATCHING_DOMAIN;
-      String message = getMessage(msgID) + " " + baseDN;
+      MessageBuilder mb = new MessageBuilder(ERR_NO_MATCHING_DOMAIN.get());
+      mb.append(" ");
+      mb.append(String.valueOf(baseDN));
       throw new DirectoryException(ResultCode.OTHER,
-         message, msgID);
+         mb.toMessage());
     }
     return replicationDomain;
   }
@@ -2888,13 +2857,13 @@
    * @return true if the configuration is acceptable, false other wise.
    */
   public static boolean isConfigurationAcceptable(
-      MultimasterDomainCfg configuration, List<String> unacceptableReasons)
+      MultimasterDomainCfg configuration, List<Message> unacceptableReasons)
   {
     // Check that there is not already a domain with the same DN
     DN dn = configuration.getReplicationDN();
     if (MultimasterReplication.findDomain(dn,null) != null)
     {
-      String message = getMessage(MSGID_SYNC_INVALID_DN, dn.toString());
+      Message message = ERR_SYNC_INVALID_DN.get();
       unacceptableReasons.add(message);
       return false;
     }
@@ -2930,7 +2899,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-         MultimasterDomainCfg configuration, List<String> unacceptableReasons)
+         MultimasterDomainCfg configuration, List<Message> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationServerListener.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationServerListener.java
index ba7061a..f1bea6d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationServerListener.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationServerListener.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.plugin;
+import org.opends.messages.Message;
 
 import java.util.List;
 
@@ -37,6 +38,7 @@
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.ResultCode;
 
+
 /**
  * This class is used to create and object that can
  * register in the admin framework as a listener for changes, add and delete
@@ -96,7 +98,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(
-      ReplicationServerCfg configuration, List<String> unacceptableReasons)
+      ReplicationServerCfg configuration, List<Message> unacceptableReasons)
   {
     return ReplicationServer.isConfigurationAcceptable(
       configuration, unacceptableReasons);
@@ -130,7 +132,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(
-      ReplicationServerCfg configuration, List<String> unacceptableReasons)
+      ReplicationServerCfg configuration, List<Message> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/protocol/ErrorMessage.java b/opendj-sdk/opends/src/server/org/opends/server/replication/protocol/ErrorMessage.java
index 5448167..5c3d41d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/protocol/ErrorMessage.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/protocol/ErrorMessage.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.protocol;
+import org.opends.messages.Message;
 
 import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
@@ -42,21 +43,21 @@
 
   // Specifies the messageID built form the error that was detected
   private int msgID;
+
   // Specifies the complementary details about the error that was detected
-  private String details = null;
+  private Message details = null;
 
   /**
    * Create a InitializeMessage.
    * @param sender The server ID of the server that send this message.
    * @param destination The destination server or servers of this message.
-   * @param msgID The error message ID.
    * @param details The details of the error.
    */
-  public ErrorMessage(short sender, short destination, int msgID,
-      String details)
+  public ErrorMessage(short sender, short destination,
+                      Message details)
   {
     super(sender, destination);
-    this.msgID  = msgID;
+    this.msgID  = details.getDescriptor().getId();
     this.details = details;
   }
 
@@ -64,13 +65,12 @@
    * Create a InitializeMessage.
    *
    * @param destination replication server id
-   * @param msgID error message ID
    * @param details details of the error
    */
-  public ErrorMessage(short destination, int msgID, String details)
+  public ErrorMessage(short destination, Message details)
   {
     super((short)-2, destination);
-    this.msgID  = msgID;
+    this.msgID  = details.getDescriptor().getId();
     this.details = details;
   }
 
@@ -110,7 +110,7 @@
 
       // Details
       length = getNextLength(in, pos);
-      details = new String(in, pos, length, "UTF-8");
+      details = Message.raw(new String(in, pos, length, "UTF-8"));
       pos += length +1;
 
     }
@@ -125,7 +125,7 @@
    *
    * @return the base DN from this InitializeMessage.
    */
-  public String getDetails()
+  public Message getDetails()
   {
     return details;
   }
@@ -153,7 +153,7 @@
       byte[] byteSender = String.valueOf(senderID).getBytes("UTF-8");
       byte[] byteDestination = String.valueOf(destination).getBytes("UTF-8");
       byte[] byteErrMsgId = String.valueOf(msgID).getBytes("UTF-8");
-      byte[] byteDetails = details.getBytes("UTF-8");
+      byte[] byteDetails = details.toString().getBytes("UTF-8");
 
       int length = 1 + byteSender.length + 1
                      + byteDestination.length + 1
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java
index a30dc7c..8807098 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java
@@ -25,10 +25,10 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.server;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.util.ArrayList;
@@ -43,8 +43,6 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.util.TimeThread;
 import org.opends.server.core.DirectoryServer;
@@ -330,11 +328,10 @@
         }
       } catch (Exception end)
       {
-        int    msgID   = MSGID_EXCEPTION_CHANGELOG_TRIM_FLUSH;
-        String message = getMessage(msgID) + stackTraceToSingleLineString(end);
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-                 ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        MessageBuilder mb = new MessageBuilder();
+        mb.append(ERR_EXCEPTION_CHANGELOG_TRIM_FLUSH.get());
+        mb.append(stackTraceToSingleLineString(end));
+        logError(mb.toMessage());
       }
     }
     // call flush a last time before exiting to make sure that
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationCache.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
index 24a167f..ef31ab3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
@@ -25,10 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.server;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.io.IOException;
@@ -47,8 +48,6 @@
 import org.opends.server.replication.protocol.UpdateMessage;
 import org.opends.server.replication.protocol.ReplServerInfoMessage;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 
 import com.sleepycat.je.DatabaseException;
 
@@ -179,11 +178,10 @@
            * This replicationServer therefore can't do it's job properly anymore
            * and needs to close all its connections and shutdown itself.
            */
-          int    msgID   = MSGID_CHANGELOG_SHUTDOWN_DATABASE_ERROR;
-          String message = getMessage(msgID) + stackTraceToSingleLineString(e);
-          logError(ErrorLogCategory.SYNCHRONIZATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          MessageBuilder mb = new MessageBuilder();
+          mb.append(ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR.get());
+          mb.append(stackTraceToSingleLineString(e));
+          logError(mb.toMessage());
           replicationServer.shutdown();
           return;
         }
@@ -245,12 +243,9 @@
       {
         // looks like two LDAP servers have the same serverId
         // log an error message and drop this connection.
-        int    msgID   = MSGID_DUPLICATE_SERVER_ID;
-        String message = getMessage(msgID, oldHandler.toString(),
-            handler.toString(), handler.getServerId());
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-                 ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_DUPLICATE_SERVER_ID.get(
+            oldHandler.toString(), handler.toString(), handler.getServerId());
+        logError(message);
         return false;
       }
       connectedServers.put(handler.getServerId(), handler);
@@ -314,12 +309,10 @@
         {
           // looks like two replication servers have the same serverId
           // log an error message and drop this connection.
-          int    msgID   = MSGID_DUPLICATE_REPLICATION_SERVER_ID;
-          String message = getMessage(msgID, oldHandler.getServerAddressURL(),
-                handler.getServerAddressURL(), handler.getServerId());
-          logError(ErrorLogCategory.SYNCHRONIZATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_DUPLICATE_REPLICATION_SERVER_ID.
+              get(oldHandler.getServerAddressURL(),
+                  handler.getServerAddressURL(), handler.getServerId());
+          logError(message);
         }
         return false;
       }
@@ -577,9 +570,11 @@
 
     if (servers.isEmpty())
     {
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get());
+      mb.append("serverID:" + msg.getDestination());
       ErrorMessage errMsg = new ErrorMessage(
-          msg.getsenderID(), MSGID_NO_REACHABLE_PEER_IN_THE_DOMAIN,
-          "serverID:" + msg.getDestination());
+              msg.getsenderID(), mb.toMessage());
       try
       {
         senderHandler.send(errMsg);
@@ -591,12 +586,10 @@
          * An error happened trying the send back an ack to this server.
          * Log an error and close the connection to this server.
          */
-        int msgID = MSGID_CHANGELOG_ERROR_SENDING_ERROR;
-        String message = getMessage(msgID, this.toString())
-        + stackTraceToSingleLineString(ioe);
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-            ErrorLogSeverity.SEVERE_ERROR,
-            message, msgID);
+        MessageBuilder mb2 = new MessageBuilder();
+        mb2.append(ERR_CHANGELOG_ERROR_SENDING_ERROR.get(this.toString()));
+        mb2.append(stackTraceToSingleLineString(ioe));
+        logError(mb2.toMessage());
         senderHandler.shutdown();
       }
     }
@@ -614,13 +607,12 @@
            * An error happened trying the send back an ack to this server.
            * Log an error and close the connection to this server.
            */
-          int msgID = MSGID_CHANGELOG_ERROR_SENDING_MSG;
-          String message = getMessage(msgID, this.toString())
-          + stackTraceToSingleLineString(ioe) + " "
-          + msg.getClass().getCanonicalName();
-          logError(ErrorLogCategory.SYNCHRONIZATION,
-              ErrorLogSeverity.SEVERE_ERROR,
-              message, msgID);
+          MessageBuilder mb = new MessageBuilder();
+          mb.append(ERR_CHANGELOG_ERROR_SENDING_MSG.get(this.toString()));
+          mb.append(stackTraceToSingleLineString(ioe));
+          mb.append(" ");
+          mb.append(msg.getClass().getCanonicalName());
+          logError(mb.toMessage());
           senderHandler.shutdown();
           // TODO Handle error properly (sender timeout in addition)
         }
@@ -671,12 +663,10 @@
          * An error happened trying the send back an ack to this server.
          * Log an error and close the connection to this server.
          */
-        int    msgID   = MSGID_CHANGELOG_ERROR_SENDING_ACK;
-        String message = getMessage(msgID, this.toString())
-        + stackTraceToSingleLineString(e);
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-            ErrorLogSeverity.SEVERE_ERROR,
-            message, msgID);
+        MessageBuilder mb = new MessageBuilder();
+        mb.append(ERR_CHANGELOG_ERROR_SENDING_ACK.get(this.toString()));
+        mb.append(stackTraceToSingleLineString(e));
+        logError(mb.toMessage());
         handler.shutdown();
       }
     }
@@ -793,12 +783,10 @@
            * An error happened trying the send back an ack to this server.
            * Log an error and close the connection to this server.
            */
-          int    msgID   = MSGID_CHANGELOG_ERROR_SENDING_INFO;
-          String message = getMessage(msgID, this.toString())
-          + stackTraceToSingleLineString(e);
-          logError(ErrorLogCategory.SYNCHRONIZATION,
-              ErrorLogSeverity.SEVERE_ERROR,
-              message, msgID);
+          MessageBuilder mb = new MessageBuilder();
+          mb.append(ERR_CHANGELOG_ERROR_SENDING_INFO.get(this.toString()));
+          mb.append(stackTraceToSingleLineString(e));
+          logError(mb.toMessage());
           handler.shutdown();
         }
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDB.java
index c8116e1..f1b67af 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDB.java
@@ -25,18 +25,16 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.server;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.util.List;
 import java.io.UnsupportedEncodingException;
 
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.replication.common.ChangeNumber;
 import org.opends.server.replication.protocol.UpdateMessage;
 
@@ -106,11 +104,10 @@
           db.put(txn, key, data);
         } catch (DatabaseException e)
         {
-          int    msgID   = MSGID_CHANGELOG_SHUTDOWN_DATABASE_ERROR;
-          String message = getMessage(msgID) + stackTraceToSingleLineString(e);
-          logError(ErrorLogCategory.SYNCHRONIZATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          MessageBuilder mb = new MessageBuilder();
+          mb.append(ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR.get());
+          mb.append(stackTraceToSingleLineString(e));
+          logError(mb.toMessage());
           replicationServer.shutdown();
         }
       }
@@ -120,11 +117,10 @@
     }
     catch (DatabaseException e)
     {
-      int    msgID   = MSGID_CHANGELOG_SHUTDOWN_DATABASE_ERROR;
-      String message = getMessage(msgID) + stackTraceToSingleLineString(e);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR.get());
+      mb.append(stackTraceToSingleLineString(e));
+      logError(mb.toMessage());
       if (txn != null)
       {
         try
@@ -139,11 +135,10 @@
     }
     catch (UnsupportedEncodingException e)
     {
-      int    msgID   = MSGID_CHANGELOG_UNSUPPORTED_UTF8_ENCODING;
-      String message = getMessage(msgID) + stackTraceToSingleLineString(e);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-          ErrorLogSeverity.SEVERE_ERROR,
-          message, msgID);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(ERR_CHANGELOG_UNSUPPORTED_UTF8_ENCODING.get());
+      mb.append(stackTraceToSingleLineString(e));
+      logError(mb.toMessage());
       replicationServer.shutdown();
       if (txn != null)
       {
@@ -170,12 +165,10 @@
       db.close();
     } catch (DatabaseException e)
     {
-      int    msgID   = MSGID_EXCEPTION_CLOSING_DATABASE;
-      String message = getMessage(msgID, this.toString())  +
-                                 stackTraceToSingleLineString(e);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.NOTICE,
-               message, msgID);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(NOTE_EXCEPTION_CLOSING_DATABASE.get(this.toString()));
+      mb.append(stackTraceToSingleLineString(e));
+      logError(mb.toMessage());
     }
   }
 
@@ -254,11 +247,10 @@
       {
       }
       /* database is faulty */
-      int    msgID   = MSGID_CHANGELOG_SHUTDOWN_DATABASE_ERROR;
-      String message = getMessage(msgID) + stackTraceToSingleLineString(e);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR.get());
+      mb.append(stackTraceToSingleLineString(e));
+      logError(mb.toMessage());
       replicationServer.shutdown();
       return null;
     }
@@ -295,11 +287,10 @@
       return new ChangeNumber(str);
     } catch (DatabaseException e)
     {
-      int    msgID   = MSGID_CHANGELOG_SHUTDOWN_DATABASE_ERROR;
-      String message = getMessage(msgID) + stackTraceToSingleLineString(e);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR.get());
+      mb.append(stackTraceToSingleLineString(e));
+      logError(mb.toMessage());
       replicationServer.shutdown();
       return null;
     }
@@ -384,11 +375,10 @@
         cursor = null;
       } catch (DatabaseException e)
       {
-        int    msgID   = MSGID_CHANGELOG_SHUTDOWN_DATABASE_ERROR;
-        String message = getMessage(msgID) + stackTraceToSingleLineString(e);
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-                 ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        MessageBuilder mb = new MessageBuilder();
+        mb.append(ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR.get());
+        mb.append(stackTraceToSingleLineString(e));
+        logError(mb.toMessage());
         replicationServer.shutdown();
       }
       if (txn != null)
@@ -398,11 +388,10 @@
           txn.commit();
         } catch (DatabaseException e)
         {
-          int    msgID   = MSGID_CHANGELOG_SHUTDOWN_DATABASE_ERROR;
-          String message = getMessage(msgID) + stackTraceToSingleLineString(e);
-          logError(ErrorLogCategory.SYNCHRONIZATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          MessageBuilder mb = new MessageBuilder();
+          mb.append(ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR.get());
+          mb.append(stackTraceToSingleLineString(e));
+          logError(mb.toMessage());
           replicationServer.shutdown();
         }
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDBException.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDBException.java
index 35a7461..d1e9b60 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDBException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDBException.java
@@ -25,13 +25,13 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.server;
+import org.opends.messages.Message;
 
 
 
 import org.opends.server.types.IdentifiedException;
 
 
-
 /**
  * This class define an Exception that must be used when some error
  * condition was detected in the replicationServer database that cannot be
@@ -39,7 +39,6 @@
  */
 public class ReplicationDBException extends IdentifiedException
 {
-  private int messageID;
 
   private static final long serialVersionUID = -8812600147768060090L;
 
@@ -48,22 +47,11 @@
    * This Exception must be used when the full replicationServer service is
    * compromised by the exception
    *
-   * @param  messageID  The unique message ID for the provided message.
    * @param  message    The message to use for this exception.
    */
-  public ReplicationDBException(int messageID, String message)
+  public ReplicationDBException(Message message)
   {
     super(message);
-
-    this.messageID = messageID;
   }
 
-  /**
-   * Returns the message Id associated to this Exception.
-   * @return the message ID associated to this Exception.
-   */
-  public int getMessageID()
-  {
-    return messageID;
-  }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDbEnv.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDbEnv.java
index a706310..0a4f630 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDbEnv.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDbEnv.java
@@ -25,10 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.server;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.io.File;
@@ -36,8 +37,6 @@
 
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 
 import com.sleepycat.je.Cursor;
 import com.sleepycat.je.Database;
@@ -134,11 +133,9 @@
             baseDn = DN.decode(str[1]);
           } catch (DirectoryException e)
           {
-            int    msgID   = MSGID_IGNORE_BAD_DN_IN_DATABASE_IDENTIFIER;
-            String message = getMessage(msgID, str[1]);
-            logError(ErrorLogCategory.SYNCHRONIZATION,
-                     ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message =
+                ERR_IGNORE_BAD_DN_IN_DATABASE_IDENTIFIER.get(str[1]);
+            logError(message);
           }
           DbHandler dbHandler =
             new DbHandler(serverId, baseDn, replicationServer, this);
@@ -147,12 +144,15 @@
         } catch (NumberFormatException e)
         {
           // should never happen
-          throw new ReplicationDBException(0,
-              "replicationServer state database has a wrong format");
+          // TODO: i18n
+          throw new ReplicationDBException(Message.raw(
+              "replicationServer state database has a wrong format"));
         } catch (UnsupportedEncodingException e)
         {
           // should never happens
-          throw new ReplicationDBException(0, "need UTF-8 support");
+          // TODO: i18n
+          throw new ReplicationDBException(Message.raw(
+                  "need UTF-8 support"));
         }
         status = cursor.getNext(key, data, LockMode.DEFAULT);
       }
@@ -236,11 +236,10 @@
       dbEnvironment.close();
     } catch (DatabaseException e)
     {
-      int    msgID   = MSGID_ERROR_CLOSING_CHANGELOG_ENV;
-      String message = getMessage(msgID) + stackTraceToSingleLineString(e);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(ERR_ERROR_CLOSING_CHANGELOG_ENV.get());
+      mb.append(stackTraceToSingleLineString(e));
+      logError(mb.toMessage());
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 7027dda..3e28dc0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -25,10 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.server;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
+
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.StaticUtils.getFileForPath;
 
 import java.io.File;
@@ -57,8 +59,6 @@
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ResultCode;
 
 import com.sleepycat.je.DatabaseException;
@@ -139,8 +139,13 @@
     }
     catch (Exception e)
     {
-      throw new ConfigException(MSGID_FILE_CHECK_CREATE_FAILED,
-          e.getMessage() + " " + getFileForPath(dbDirname));
+
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(e.getLocalizedMessage());
+      mb.append(" ");
+      mb.append(String.valueOf(getFileForPath(dbDirname)));
+      Message msg = ERR_FILE_CHECK_CREATE_FAILED.get(mb.toString());
+      throw new ConfigException(msg, e);
     }
 
     initialize(replicationServerId, replicationPort);
@@ -223,11 +228,8 @@
           }
           catch (IOException e)
           {
-            int msgID = MSGID_COULD_NOT_SOLVE_HOSTNAME;
-            String message = getMessage(msgID, hostname);
-            logError(ErrorLogCategory.SYNCHRONIZATION,
-                     ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message = ERR_COULD_NOT_SOLVE_HOSTNAME.get(hostname);
+            logError(message);
           }
         }
       }
@@ -325,29 +327,21 @@
 
     } catch (DatabaseException e)
     {
-      int msgID = MSGID_COULD_NOT_INITIALIZE_DB;
-      String message = getMessage(msgID, dbDirname);
-      logError(ErrorLogCategory.SYNCHRONIZATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_COULD_NOT_INITIALIZE_DB.get(dbDirname);
+      logError(message);
     } catch (ReplicationDBException e)
     {
-      int msgID = MSGID_COULD_NOT_READ_DB;
-      String message = getMessage(msgID, dbDirname);
-      message += getMessage(e.getMessageID());
-      logError(ErrorLogCategory.SYNCHRONIZATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_COULD_NOT_READ_DB.get(dbDirname);
+      logError(message);
     } catch (UnknownHostException e)
     {
-      int msgID = MSGID_UNKNOWN_HOSTNAME;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.SYNCHRONIZATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_UNKNOWN_HOSTNAME.get();
+      logError(message);
     } catch (IOException e)
     {
-      int msgID = MSGID_COULD_NOT_BIND_CHANGELOG;
-      String message = getMessage(msgID, changelogPort, e.getMessage());
-      logError(ErrorLogCategory.SYNCHRONIZATION, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message =
+          ERR_COULD_NOT_BIND_CHANGELOG.get(changelogPort, e.getMessage());
+      logError(message);
     }
   }
 
@@ -449,7 +443,7 @@
    * @return true if the configuration is acceptable, false other wise.
    */
   public static boolean isConfigurationAcceptable(
-      ReplicationServerCfg configuration, List<String> unacceptableReasons)
+      ReplicationServerCfg configuration, List<Message> unacceptableReasons)
   {
     int port = configuration.getReplicationPort();
 
@@ -461,8 +455,7 @@
     }
     catch (Exception e)
     {
-      String message = getMessage(MSGID_COULD_NOT_BIND_CHANGELOG, port,
-                                  e.getMessage());
+      Message message = ERR_COULD_NOT_BIND_CHANGELOG.get(port, e.getMessage());
       unacceptableReasons.add(message);
       return false;
     }
@@ -484,7 +477,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      ReplicationServerCfg configuration, List<String> unacceptableReasons)
+      ReplicationServerCfg configuration, List<Message> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
index 9dc3848..1a888a9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -25,13 +25,13 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.server;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.io.IOException;
@@ -67,8 +67,6 @@
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.util.TimeThread;
 
@@ -360,12 +358,10 @@
     catch (Exception e)
     {
       // some problem happened, reject the connection
-      int    msgID   = MSGID_CHANGELOG_CONNECTION_ERROR;
-      String message = getMessage(msgID, this.toString())
-                                  + stackTraceToSingleLineString(e);
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(ERR_CHANGELOG_CONNECTION_ERROR.get(this.toString()));
+      mb.append(stackTraceToSingleLineString(e));
+      logError(mb.toMessage());
       try
       {
         session.close();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerReader.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerReader.java
index 0c0875d..e61446f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerReader.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerReader.java
@@ -25,10 +25,10 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.server;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 
 
@@ -47,8 +47,6 @@
 import org.opends.server.replication.protocol.WindowMessage;
 import org.opends.server.replication.protocol.WindowProbe;
 import org.opends.server.replication.protocol.ReplServerInfoMessage;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.loggers.debug.DebugTracer;
 
 
@@ -177,11 +175,8 @@
            * The remote server has sent an unknown message,
            * close the conenction.
            */
-          int    msgID   = MSGID_READER_NULL_MSG;
-          String message = getMessage(msgID, handler.toString());
-          logError(ErrorLogCategory.SYNCHRONIZATION,
-                   ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = NOTE_READER_NULL_MSG.get(handler.toString());
+          logError(message);
           return;
         }
       }
@@ -192,33 +187,24 @@
        * Log a message and exit from this loop
        * So that this handler is stopped.
        */
-      int    msgID   = MSGID_SERVER_DISCONNECT;
-      String message = getMessage(msgID, handler.toString());
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.NOTICE,
-               message + ": " + e.getMessage(), msgID);
+      Message message = NOTE_SERVER_DISCONNECT.get(handler.toString());
+      logError(message);
     } catch (ClassNotFoundException e)
     {
       /*
        * The remote server has sent an unknown message,
        * close the conenction.
        */
-      int    msgID   = MSGID_UNKNOWN_MESSAGE;
-      String message = getMessage(msgID, handler.toString());
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.NOTICE,
-               message, msgID);
+      Message message = ERR_UNKNOWN_MESSAGE.get(handler.toString());
+      logError(message);
     } catch (Exception e)
     {
       /*
        * The remote server has sent an unknown message,
        * close the conenction.
        */
-      int    msgID   = MSGID_READER_EXCEPTION;
-      String message = getMessage(msgID, handler.toString());
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = NOTE_READER_EXCEPTION.get(handler.toString());
+      logError(message);
     }
     finally
     {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerWriter.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerWriter.java
index 6018ed9..9a865a0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerWriter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerWriter.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.replication.server;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
 
 import java.io.IOException;
 import java.net.SocketException;
@@ -40,8 +40,6 @@
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.protocol.ProtocolSession;
 import org.opends.server.replication.protocol.UpdateMessage;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 
 
 /**
@@ -114,11 +112,8 @@
        * The remote host has disconnected and this particular Tree is going to
        * be removed, just ignore the exception and let the thread die as well
        */
-      int    msgID   = MSGID_SERVER_DISCONNECT;
-      String message = getMessage(msgID, handler.toString());
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.NOTICE,
-               message, msgID);
+      Message message = NOTE_SERVER_DISCONNECT.get(handler.toString());
+      logError(message);
     }
     catch (SocketException e)
     {
@@ -126,11 +121,8 @@
        * The remote host has disconnected and this particular Tree is going to
        * be removed, just ignore the exception and let the thread die as well
        */
-      int    msgID   = MSGID_SERVER_DISCONNECT;
-      String message = getMessage(msgID, handler.toString());
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.NOTICE,
-               message, msgID);
+      Message message = NOTE_SERVER_DISCONNECT.get(handler.toString());
+      logError(message);
     }
     catch (Exception e)
     {
@@ -138,11 +130,8 @@
        * An unexpected error happened.
        * Log an error and close the connection.
        */
-      int    msgID   = MSGID_WRITER_UNEXPECTED_EXCEPTION;
-      String message = getMessage(msgID, handler.toString());
-      logError(ErrorLogCategory.SYNCHRONIZATION,
-               ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_WRITER_UNEXPECTED_EXCEPTION.get(handler.toString());
+      logError(message);
     }
     finally {
       try
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/AbsoluteSubtreeSpecificationSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/AbsoluteSubtreeSpecificationSyntax.java
index 74205ae..38b867a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/AbsoluteSubtreeSpecificationSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/AbsoluteSubtreeSpecificationSyntax.java
@@ -30,7 +30,8 @@
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 import org.opends.server.admin.std.server.AttributeSyntaxCfg;
@@ -46,8 +47,8 @@
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 /**
  * This class defines the absolute subtree specification attribute
@@ -105,25 +106,22 @@
     defaultEqualityMatchingRule = DirectoryServer
         .getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null) {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-          MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-          EMR_OCTET_STRING_OID, SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_NAME));
     }
 
     defaultOrderingMatchingRule = DirectoryServer
         .getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null) {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-          MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-          OMR_OCTET_STRING_OID, SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_NAME));
     }
 
     defaultSubstringMatchingRule = DirectoryServer
         .getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null) {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-          MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-          SMR_OCTET_STRING_OID, SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_ABSOLUTE_SUBTREE_SPECIFICATION_NAME));
     }
   }
 
@@ -227,7 +225,7 @@
    *         use with this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                  StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Use the subtree specification code to make this determination.
     try {
@@ -240,7 +238,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      invalidReason.append(e.getErrorMessage());
+      invalidReason.append(e.getMessageObject());
       return false;
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/AciSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/AciSyntax.java
index ac5f07b..10fd99c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/AciSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/AciSyntax.java
@@ -37,15 +37,16 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.DN;
 import org.opends.server.types.DebugLogLevel;
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import org.opends.server.authorization.dseecompat.Aci;
 import org.opends.server.authorization.dseecompat.AciException;
@@ -105,9 +106,8 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_IA5_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_IA5_OID, SYNTAX_ACI_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_IA5_OID, SYNTAX_ACI_NAME));
     }
 
     // We don't need an ordering matching rule.
@@ -117,9 +117,8 @@
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_IA5_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_IA5_OID, SYNTAX_ACI_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_IA5_OID, SYNTAX_ACI_NAME));
     }
   }
 
@@ -234,7 +233,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     try
     {
@@ -247,10 +246,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      logError(ErrorLogCategory.ACCESS_CONTROL,
-               ErrorLogSeverity.SEVERE_WARNING,
-               e.getMessage(), e.getMessageID());
-      invalidReason.append(e.getMessage());
+      logError(e.getMessageObject());
+      invalidReason.append(e.getMessageObject());
       return false;
     }
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/AttributeTypeSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/AttributeTypeSyntax.java
index 4b79b57..9085263 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/AttributeTypeSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/AttributeTypeSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -47,8 +48,9 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -115,30 +117,27 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE;
-      String message = getMessage(msgID, EMR_CASE_IGNORE_OID,
-                                  SYNTAX_ATTRIBUTE_TYPE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_ATTRIBUTE_TYPE_NAME);
+      throw new InitializationException(message);
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE;
-      String message = getMessage(msgID, OMR_CASE_IGNORE_OID,
-                                  SYNTAX_ATTRIBUTE_TYPE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_ATTRIBUTE_TYPE_NAME);
+      throw new InitializationException(message);
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE;
-      String message = getMessage(msgID, SMR_CASE_IGNORE_OID,
-                                  SYNTAX_ATTRIBUTE_TYPE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_ATTRIBUTE_TYPE_NAME);
+      throw new InitializationException(message);
     }
 
     // This syntax is one of the Directory Server's core syntaxes and therefore
@@ -232,7 +231,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // We'll use the decodeAttributeType method to determine if the value is
     // acceptable.
@@ -248,7 +247,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      invalidReason.append(de.getErrorMessage());
+      invalidReason.append(de.getMessageObject());
       return false;
     }
   }
@@ -302,10 +301,9 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_EMPTY_VALUE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_EMPTY_VALUE.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -314,10 +312,10 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_EXPECTED_OPEN_PARENTHESIS;
-      String message = getMessage(msgID, valueStr, (pos-1), c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_EXPECTED_OPEN_PARENTHESIS.get(
+          valueStr, (pos-1), String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -331,10 +329,9 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -354,10 +351,11 @@
         {
           if (lastWasPeriod)
           {
-            int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, valueStr, (pos-1));
+            Message message =
+              ERR_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                  get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -367,10 +365,11 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message =
+            ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
+                get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -392,10 +391,10 @@
         else
         {
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message 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, msgID);
+                                       message);
         }
       }
     }
@@ -406,10 +405,9 @@
     String oid;
     if (pos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
     else
     {
@@ -427,10 +425,9 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -470,10 +467,11 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_UNEXPECTED_CLOSE_PARENTHESIS;
-          String message = getMessage(msgID, valueStr, (pos-1));
+          Message message =
+            ERR_ATTR_SYNTAX_ATTRTYPE_UNEXPECTED_CLOSE_PARENTHESIS.
+                get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         break;
@@ -530,10 +528,11 @@
         else
         {
           // This is an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR.get(
+                      valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
       else if (lowerTokenName.equals("desc"))
@@ -568,11 +567,10 @@
           {
             // This is bad because we don't know what the superior attribute
             // type is so we can't base this attribute type on it.
-            int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUPERIOR_TYPE;
-            String message = getMessage(msgID, String.valueOf(oid),
-                                        String.valueOf(woidBuffer));
+            Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUPERIOR_TYPE.
+                get(String.valueOf(oid), String.valueOf(woidBuffer));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
         }
 
@@ -608,11 +606,10 @@
         {
           // This is bad because we have no idea what the equality matching
           // rule should be.
-          int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_EQUALITY_MR;
-          String message = getMessage(msgID, String.valueOf(oid),
-                                      String.valueOf(woidBuffer));
+          Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_EQUALITY_MR.get(
+              String.valueOf(oid), String.valueOf(woidBuffer));
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -631,11 +628,10 @@
         {
           // This is bad because we have no idea what the ordering matching
           // rule should be.
-          int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_ORDERING_MR;
-          String message = getMessage(msgID, String.valueOf(oid),
-                                      String.valueOf(woidBuffer));
+          Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_ORDERING_MR.get(
+              String.valueOf(oid), String.valueOf(woidBuffer));
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -654,11 +650,10 @@
         {
           // This is bad because we have no idea what the substring matching
           // rule should be.
-          int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUBSTRING_MR;
-          String message = getMessage(msgID, String.valueOf(oid),
-                                      String.valueOf(woidBuffer));
+          Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUBSTRING_MR.get(
+              String.valueOf(oid), String.valueOf(woidBuffer));
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -688,23 +683,22 @@
               // The next character must be a space.
               if ((c = lowerStr.charAt(pos)) != ' ')
               {
-                int msgID =
-                     MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID;
-                String message = getMessage(msgID, valueStr, c, (pos-1));
+                Message message =
+                  ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
+                      get(valueStr, String.valueOf(c), (pos-1));
                 throw new DirectoryException(
-                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID);
+                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
               }
 
               break;
             }
             else if (! isDigit(c))
             {
-              int msgID =
-                   MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message =
+                ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
+                    get(valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
           else
@@ -718,12 +712,11 @@
             {
               if (lastWasPeriod)
               {
-                int msgID =
-                     MSGID_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID;
-                String message = getMessage(msgID, valueStr, (pos-1));
+                Message message =
+                    ERR_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                      get(valueStr, (pos-1));
                 throw new DirectoryException(
-                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID);
+                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
               }
               else
               {
@@ -743,11 +736,11 @@
             }
             else
             {
-              int msgID =
-                   MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message =
+                ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
+                    get(valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -755,11 +748,10 @@
         syntax = schema.getSyntax(oidBuffer.toString());
         if (syntax == null)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SYNTAX;
-          String message = getMessage(msgID, String.valueOf(oid),
-                                      String.valueOf(oidBuffer));
+          Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SYNTAX.get(
+              String.valueOf(oid), String.valueOf(oidBuffer));
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                       message, msgID);
+                                       message);
         }
 
         if (approximateMatchingRule == null)
@@ -843,12 +835,10 @@
           // This must be an illegal usage.
           attributeUsage = AttributeUsage.USER_APPLICATIONS;
 
-          int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_INVALID_ATTRIBUTE_USAGE;
-          String message = getMessage(msgID, String.valueOf(oid),
-                                      String.valueOf(usageBuffer),
-                                      String.valueOf(attributeUsage));
+          Message message = WARN_ATTR_SYNTAX_ATTRTYPE_INVALID_ATTRIBUTE_USAGE.
+              get(String.valueOf(oid), usageStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
       else
@@ -874,11 +864,9 @@
       {
         // This is bad because we have no idea what the approximate matching
         // rule should be.
-        int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_APPROXIMATE_MR;
-        String message = getMessage(msgID, String.valueOf(oid),
-                                    String.valueOf(ruleName));
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_APPROXIMATE_MR.get(
+            String.valueOf(oid), String.valueOf(ruleName));
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
       else
       {
@@ -894,28 +882,26 @@
     {
       if (superiorType.getUsage() != attributeUsage)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_INVALID_SUPERIOR_USAGE;
-        String message = getMessage(msgID, oid, String.valueOf(attributeUsage),
-                                    superiorType.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = WARN_ATTR_SYNTAX_ATTRTYPE_INVALID_SUPERIOR_USAGE.get(
+            oid, String.valueOf(attributeUsage), superiorType.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
 
       if (superiorType.isCollective() != isCollective)
       {
-        int msgID;
+        Message message;
         if (isCollective)
         {
-          msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_COLLECTIVE_FROM_NONCOLLECTIVE;
+          message = WARN_ATTR_SYNTAX_ATTRTYPE_COLLECTIVE_FROM_NONCOLLECTIVE.get(
+                  oid, superiorType.getNameOrOID());
         }
         else
         {
-          msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_NONCOLLECTIVE_FROM_COLLECTIVE;
+          message =
+                  WARN_ATTR_SYNTAX_ATTRTYPE_NONCOLLECTIVE_FROM_COLLECTIVE.get(
+                    oid, superiorType.getNameOrOID());
         }
-
-        String message = getMessage(msgID, oid, superiorType.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
 
@@ -924,10 +910,9 @@
     // userApplications.
     if (isCollective && (attributeUsage != AttributeUsage.USER_APPLICATIONS))
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_COLLECTIVE_IS_OPERATIONAL;
-      String message = getMessage(msgID, oid);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message =
+          WARN_ATTR_SYNTAX_ATTRTYPE_COLLECTIVE_IS_OPERATIONAL.get(oid);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
 
@@ -936,10 +921,9 @@
     if (isNoUserModification &&
         (attributeUsage == AttributeUsage.USER_APPLICATIONS))
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_NO_USER_MOD_NOT_OPERATIONAL;
-      String message = getMessage(msgID, oid);
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message =
+          WARN_ATTR_SYNTAX_ATTRTYPE_NO_USER_MOD_NOT_OPERATIONAL.get(oid);
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
 
@@ -983,10 +967,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1042,20 +1025,19 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = WARN_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS.get(
+          valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1079,10 +1061,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1129,20 +1110,19 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = WARN_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS.get(
+          valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1167,10 +1147,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1210,10 +1189,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1230,10 +1208,11 @@
         {
           if (lastWasPeriod)
           {
-            int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, lowerStr, (startPos-1));
+            Message message =
+              ERR_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                  get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -1255,10 +1234,11 @@
           }
 
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
+                get(lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -1292,19 +1272,20 @@
           }
 
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message 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, msgID);
+                                       message);
         }
       }
     }
     else
     {
-      int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR;
-      String message = getMessage(msgID, lowerStr, c, startPos);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR.
+                  get(lowerStr, String.valueOf(c), startPos);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1318,10 +1299,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1361,10 +1341,9 @@
 
     if (startPos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1396,10 +1375,10 @@
 
         if (startPos >= length)
         {
-          int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-          String message = getMessage(msgID, valueStr);
+          Message message =
+              ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -1411,10 +1390,11 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, startPos);
+          Message message =
+              ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR.get(
+                      valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -1445,10 +1425,9 @@
 
     if (startPos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1476,7 +1455,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       AttributeTypeDescriptionAttributeSyntaxCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // The configuration will always be acceptable.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/AuthPasswordExactEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/AuthPasswordExactEqualityMatchingRule.java
index df5baa3..82aae41 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/AuthPasswordExactEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/AuthPasswordExactEqualityMatchingRule.java
@@ -37,8 +37,8 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 
 import org.opends.server.types.DebugLogLevel;
@@ -180,8 +180,7 @@
         case REJECT:
           throw de;
         case WARN:
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                   de.getErrorMessage(), de.getMessageID());
+          logError(de.getMessageObject());
           return new ASN1OctetString(value.stringValue());
         default:
           return new ASN1OctetString(value.stringValue());
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/AuthPasswordSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/AuthPasswordSyntax.java
index 25c56bb..ab5007a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/AuthPasswordSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/AuthPasswordSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -38,13 +39,13 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -84,9 +85,8 @@
          DirectoryServer.getEqualityMatchingRule(EMR_AUTH_PASSWORD_EXACT_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_AUTH_PASSWORD_EXACT_NAME, SYNTAX_AUTH_PASSWORD_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_AUTH_PASSWORD_EXACT_NAME, SYNTAX_AUTH_PASSWORD_NAME));
     }
   }
 
@@ -204,7 +204,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     try
     {
@@ -213,7 +213,7 @@
     }
     catch (DirectoryException de)
     {
-      invalidReason.append(de.getErrorMessage());
+      invalidReason.append(de.getMessageObject());
       return false;
     }
   }
@@ -308,10 +308,9 @@
         case '$':
           break readScheme;
         default:
-          int    msgID   = MSGID_ATTR_SYNTAX_AUTHPW_INVALID_SCHEME_CHAR;
-          String message = getMessage(msgID, pos);
+          Message message = ERR_ATTR_SYNTAX_AUTHPW_INVALID_SCHEME_CHAR.get(pos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
       }
     }
 
@@ -319,10 +318,9 @@
     // The scheme must consist of at least one character.
     if (scheme.length() == 0)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_AUTHPW_NO_SCHEME;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_AUTHPW_NO_SCHEME.get();
+      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
+              message);
     }
 
 
@@ -339,10 +337,9 @@
     }
     else
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_AUTHPW_NO_SCHEME_SEPARATOR;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_AUTHPW_NO_SCHEME_SEPARATOR.get();
+      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
+              message);
     }
 
     while ((pos < length) && (authPasswordValue.charAt(pos) == ' '))
@@ -368,10 +365,10 @@
       }
       else
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_INFO_CHAR;
-        String message = getMessage(msgID, pos);
+        Message message =
+            ERR_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_INFO_CHAR.get(pos);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -379,10 +376,9 @@
     // The authInfo element must consist of at least one character.
     if (scheme.length() == 0)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -399,10 +395,9 @@
     }
     else
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO_SEPARATOR;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO_SEPARATOR.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
     while ((pos < length) && (authPasswordValue.charAt(pos) == ' '))
@@ -428,10 +423,10 @@
       }
       else
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_VALUE_CHAR;
-        String message = getMessage(msgID, pos);
+        Message message =
+            ERR_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_VALUE_CHAR.get(pos);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -439,10 +434,9 @@
     // The authValue element must consist of at least one character.
     if (scheme.length() == 0)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_AUTHPW_NO_AUTH_VALUE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_VALUE.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -456,10 +450,9 @@
       }
       else
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_AUTHPW_INVALID_TRAILING_CHAR;
-        String message = getMessage(msgID, pos);
+        Message message = ERR_ATTR_SYNTAX_AUTHPW_INVALID_TRAILING_CHAR.get(pos);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/BinarySyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/BinarySyntax.java
index 9b36778..1e6e101 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/BinarySyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/BinarySyntax.java
@@ -39,10 +39,9 @@
 import org.opends.server.types.ByteString;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 
 
 
@@ -88,27 +87,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OCTET_STRING_OID, SYNTAX_BINARY_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_BINARY_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_OCTET_STRING_OID, SYNTAX_BINARY_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_BINARY_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_OCTET_STRING_OID, SYNTAX_BINARY_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_BINARY_NAME));
     }
   }
 
@@ -224,7 +220,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // All values will be acceptable for the binary syntax.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java
index 09620c5..509718f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java
@@ -34,6 +34,7 @@
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
+
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
@@ -41,12 +42,9 @@
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.Message;
 import static org.opends.server.schema.SchemaConstants.*;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
-
 
 
 /**
@@ -148,17 +146,16 @@
     int length = valueString.length();
     if (length < 3)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_BIT_STRING_TOO_SHORT;
-      String message = getMessage(msgID, value.stringValue());
 
+      Message message = WARN_ATTR_SYNTAX_BIT_STRING_TOO_SHORT.get(
+              value.stringValue());
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
         case REJECT:
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         case WARN:
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                   message, msgID);
+          logError(message);
           return new ASN1OctetString(valueString);
         default:
           return new ASN1OctetString(valueString);
@@ -170,17 +167,18 @@
         (valueString.charAt(length-2) != '\'') ||
         (valueString.charAt(length-1) != 'B'))
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED;
-      String message = getMessage(msgID, value.stringValue());
+
+      Message message = WARN_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED.get(
+              value.stringValue());
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
         case REJECT:
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         case WARN:
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                   message, msgID);
+          logError(
+                  message);
           return new ASN1OctetString(valueString);
         default:
           return new ASN1OctetString(valueString);
@@ -197,18 +195,17 @@
           // These characters are fine.
           break;
         default:
-          int    msgID   = MSGID_ATTR_SYNTAX_BIT_STRING_INVALID_BIT;
-          String message = getMessage(msgID, value.stringValue(),
-                                      valueString.charAt(i));
+
+          Message message = WARN_ATTR_SYNTAX_BIT_STRING_INVALID_BIT.get(
+                  value.stringValue(), String.valueOf(valueString.charAt(i)));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            logError(message);
             return new ASN1OctetString(valueString);
           default:
             return new ASN1OctetString(valueString);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/BitStringSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/BitStringSyntax.java
index 7ed74bf..7c79ac1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/BitStringSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/BitStringSyntax.java
@@ -37,12 +37,12 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -82,9 +82,8 @@
          DirectoryServer.getEqualityMatchingRule(EMR_BIT_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_BIT_STRING_OID, SYNTAX_BIT_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_BIT_STRING_OID, SYNTAX_BIT_STRING_NAME));
     }
   }
 
@@ -202,15 +201,15 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     String valueString = value.stringValue().toUpperCase();
 
     int length = valueString.length();
     if (length < 3)
     {
-      invalidReason.append(getMessage(MSGID_ATTR_SYNTAX_BIT_STRING_TOO_SHORT,
-                                      value.stringValue()));
+      invalidReason.append(
+              WARN_ATTR_SYNTAX_BIT_STRING_TOO_SHORT.get(value.stringValue()));
       return false;
     }
 
@@ -219,8 +218,8 @@
         (valueString.charAt(length-2) != '\'') ||
         (valueString.charAt(length-1) != 'B'))
     {
-      invalidReason.append(getMessage(MSGID_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED,
-                                      value.stringValue()));
+      invalidReason.append(
+              WARN_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED.get(value.stringValue()));
       return false;
     }
 
@@ -234,10 +233,8 @@
           // These characters are fine.
           break;
         default:
-          invalidReason.append(getMessage(
-                                    MSGID_ATTR_SYNTAX_BIT_STRING_INVALID_BIT,
-                                    value.stringValue(),
-                                    valueString.charAt(i)));
+          invalidReason.append(WARN_ATTR_SYNTAX_BIT_STRING_INVALID_BIT.get(
+                  value.stringValue(), String.valueOf(valueString.charAt(i))));
           return false;
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/BooleanEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/BooleanEqualityMatchingRule.java
index d21ffb9..afc147b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/BooleanEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/BooleanEqualityMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -37,16 +38,12 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
-
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -156,17 +153,16 @@
     }
     else
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ILLEGAL_BOOLEAN;
-      String message = getMessage(msgID, value.stringValue());
+      Message message = WARN_ATTR_SYNTAX_ILLEGAL_BOOLEAN.get(
+              value.stringValue());
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
         case REJECT:
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         case WARN:
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                   message, msgID);
+          ErrorLogger.logError(message);
           return new ASN1OctetString(valueString);
         default:
           return new ASN1OctetString(valueString);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/BooleanSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/BooleanSyntax.java
index eec2ce7..e345502 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/BooleanSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/BooleanSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -41,17 +42,16 @@
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class defines the Boolean attribute syntax, which only allows values of
  * "TRUE" or "FALSE" (although this implementation is more flexible and will
@@ -108,9 +108,8 @@
          DirectoryServer.getEqualityMatchingRule(EMR_BOOLEAN_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_BOOLEAN_OID, SYNTAX_BOOLEAN_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_BOOLEAN_OID, SYNTAX_BOOLEAN_NAME));
     }
   }
 
@@ -228,7 +227,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     String valueString = value.stringValue().toUpperCase();
 
@@ -243,8 +242,8 @@
 
     if (! returnValue)
     {
-      invalidReason.append(getMessage(MSGID_ATTR_SYNTAX_ILLEGAL_BOOLEAN,
-                                      value.stringValue()));
+      invalidReason.append(WARN_ATTR_SYNTAX_ILLEGAL_BOOLEAN.get(
+              value.stringValue()));
     }
 
     return returnValue;
@@ -300,10 +299,9 @@
     }
     else
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ILLEGAL_BOOLEAN;
-      String message = getMessage(msgID, valueString);
+      Message message = WARN_ATTR_SYNTAX_ILLEGAL_BOOLEAN.get(valueString);
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactIA5EqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactIA5EqualityMatchingRule.java
index 46ecc66..32c557a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactIA5EqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactIA5EqualityMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -37,16 +38,12 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
-
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -181,19 +178,19 @@
         // 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.
-        int    msgID   = MSGID_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER;
-        String message = getMessage(msgID, value.stringValue(), c);
+
+        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+                value.stringValue(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
             if (! logged)
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              ErrorLogger.logError(message);
               logged = true;
             }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactIA5SubstringMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactIA5SubstringMatchingRule.java
index 2a6ffd1..12aaca8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactIA5SubstringMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactIA5SubstringMatchingRule.java
@@ -34,17 +34,16 @@
 import org.opends.server.api.SubstringMatchingRule;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
+
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.Message;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -182,19 +181,18 @@
         // 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.
-        int    msgID   = MSGID_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER;
-        String message = getMessage(msgID, value.stringValue(), c);
+        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+                value.stringValue(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
             if (! logged)
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               logged = true;
             }
 
@@ -268,19 +266,18 @@
         // 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.
-        int    msgID   = MSGID_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER;
-        String message = getMessage(msgID, substring.stringValue(), c);
+        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+                substring.stringValue(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
             if (! logged)
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              logError(message);
               logged = true;
             }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactOrderingMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactOrderingMatchingRule.java
index 89cb176..8dd8685 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactOrderingMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/CaseExactOrderingMatchingRule.java
@@ -36,8 +36,7 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/CaseIgnoreIA5EqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/CaseIgnoreIA5EqualityMatchingRule.java
index caf6dd0..62f236a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/CaseIgnoreIA5EqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/CaseIgnoreIA5EqualityMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -37,17 +38,13 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
-
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -182,19 +179,19 @@
         // 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.
-        int    msgID   = MSGID_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER;
-        String message = getMessage(msgID, value.stringValue(), c);
+
+        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+                value.stringValue(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
             if (! logged)
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              ErrorLogger.logError(message);
               logged = true;
             }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/CaseIgnoreIA5SubstringMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/CaseIgnoreIA5SubstringMatchingRule.java
index b584c02..f4ec8f8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/CaseIgnoreIA5SubstringMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/CaseIgnoreIA5SubstringMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -37,17 +38,13 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
-
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -182,19 +179,18 @@
         // 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.
-        int    msgID   = MSGID_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER;
-        String message = getMessage(msgID, value.stringValue(), c);
+        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+                value.stringValue(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
             if (! logged)
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              ErrorLogger.logError(message);
               logged = true;
             }
 
@@ -268,19 +264,18 @@
         // 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.
-        int    msgID   = MSGID_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER;
-        String message = getMessage(msgID, substring.stringValue(), c);
+        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+                substring.stringValue(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
             if (! logged)
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              ErrorLogger.logError(message);
               logged = true;
             }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/CertificateListSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/CertificateListSyntax.java
index 628ad97..f5d04e0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/CertificateListSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/CertificateListSyntax.java
@@ -37,15 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the certificate list attribute syntax.  This should be
  * restricted to holding only X.509 certificate lists, but we will accept any
@@ -89,27 +89,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OCTET_STRING_OID, SYNTAX_CERTLIST_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_CERTLIST_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_OCTET_STRING_OID, SYNTAX_CERTLIST_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_CERTLIST_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_OCTET_STRING_OID, SYNTAX_CERTLIST_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_CERTLIST_NAME));
     }
   }
 
@@ -225,7 +222,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // All values will be acceptable for the certificate list syntax.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/CertificatePairSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/CertificatePairSyntax.java
index 0f4410a..3d17600 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/CertificatePairSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/CertificatePairSyntax.java
@@ -37,15 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the certificate pair attribute syntax.  This should be
  * restricted to holding only X.509 certificate pairs, but we will accept any
@@ -89,27 +89,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OCTET_STRING_OID, SYNTAX_CERTPAIR_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_CERTPAIR_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_OCTET_STRING_OID, SYNTAX_CERTPAIR_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_CERTPAIR_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_OCTET_STRING_OID, SYNTAX_CERTPAIR_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_CERTPAIR_NAME));
     }
   }
 
@@ -225,7 +222,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // All values will be acceptable for the certificate pair syntax.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/CertificateSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/CertificateSyntax.java
index 1ae79f9..e8ef672 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/CertificateSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/CertificateSyntax.java
@@ -37,15 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the certificate attribute syntax.  This should be
  * restricted to holding only X.509 certificates, but we will accept any set of
@@ -88,27 +88,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OCTET_STRING_OID, SYNTAX_CERTIFICATE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_CERTIFICATE_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_OCTET_STRING_OID, SYNTAX_CERTIFICATE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_CERTIFICATE_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_OCTET_STRING_OID, SYNTAX_CERTIFICATE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_CERTIFICATE_NAME));
     }
   }
 
@@ -224,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // All values will be acceptable for the certificate syntax.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/CountryStringSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/CountryStringSyntax.java
index 98f2b6a..12e13a2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/CountryStringSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/CountryStringSyntax.java
@@ -37,18 +37,17 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.PrintableString.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
-
 /**
  * This class defines the country string attribute syntax, which should be a
  * two-character ISO 3166 country code.  However, for maintainability, it will
@@ -95,36 +94,32 @@
          DirectoryServer.getApproximateMatchingRule(AMR_DOUBLE_METAPHONE_OID);
     if (defaultApproximateMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE,
-               AMR_DOUBLE_METAPHONE_OID, SYNTAX_COUNTRY_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE.get(
+          AMR_DOUBLE_METAPHONE_OID, SYNTAX_COUNTRY_STRING_NAME));
     }
 
     defaultEqualityMatchingRule =
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_COUNTRY_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_COUNTRY_STRING_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_COUNTRY_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_COUNTRY_STRING_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_COUNTRY_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_COUNTRY_STRING_NAME));
     }
   }
 
@@ -239,13 +234,13 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     String stringValue = toLowerCase(value.stringValue());
     if (stringValue.length() != 2)
     {
-      invalidReason.append(getMessage(
-                         MSGID_ATTR_SYNTAX_COUNTRY_STRING_INVALID_LENGTH));
+      invalidReason.append(
+              ERR_ATTR_SYNTAX_COUNTRY_STRING_INVALID_LENGTH.get(stringValue));
       return false;
     }
 
@@ -253,8 +248,8 @@
     if ((! isPrintableCharacter(stringValue.charAt(0))) ||
         (! isPrintableCharacter(stringValue.charAt(1))))
     {
-      invalidReason.append(getMessage(
-                         MSGID_ATTR_SYNTAX_COUNTRY_STRING_NOT_PRINTABLE));
+      invalidReason.append(
+              ERR_ATTR_SYNTAX_COUNTRY_STRING_NOT_PRINTABLE.get(stringValue));
       return false;
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/DITContentRuleSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/DITContentRuleSyntax.java
index 6c925c0..bf8bb39 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/DITContentRuleSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/DITContentRuleSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -54,8 +55,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -111,30 +112,27 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE;
-      String message = getMessage(msgID, EMR_CASE_IGNORE_OID,
-                                  SYNTAX_DIT_CONTENT_RULE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_DIT_CONTENT_RULE_NAME);
+      throw new InitializationException(message);
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE;
-      String message = getMessage(msgID, OMR_CASE_IGNORE_OID,
-                                  SYNTAX_DIT_CONTENT_RULE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_DIT_CONTENT_RULE_NAME);
+      throw new InitializationException(message);
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE;
-      String message = getMessage(msgID, SMR_CASE_IGNORE_OID,
-                                  SYNTAX_DIT_CONTENT_RULE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_DIT_CONTENT_RULE_NAME);
+      throw new InitializationException(message);
     }
   }
 
@@ -215,7 +213,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // We'll use the decodeDITContentRule method to determine if the value is
     // acceptable.
@@ -231,7 +229,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      invalidReason.append(de.getErrorMessage());
+      invalidReason.append(de.getMessageObject());
       return false;
     }
   }
@@ -284,10 +282,9 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_EMPTY_VALUE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_EMPTY_VALUE.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -296,10 +293,10 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_EXPECTED_OPEN_PARENTHESIS;
-      String message = getMessage(msgID, valueStr, (pos-1), c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_EXPECTED_OPEN_PARENTHESIS.get(
+          valueStr, (pos-1), String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -313,10 +310,9 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -336,10 +332,10 @@
         {
           if (lastWasPeriod)
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, valueStr, (pos-1));
+            Message message = ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -349,10 +345,10 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message 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, msgID);
+                                       message);
         }
         else
         {
@@ -374,10 +370,10 @@
         else
         {
           // This must have been an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message 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, msgID);
+                                       message);
         }
       }
     }
@@ -388,10 +384,9 @@
     String oid;
     if (pos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
     else
     {
@@ -410,20 +405,17 @@
       }
       else
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DCR_UNKNOWN_STRUCTURAL_CLASS;
-        String message = getMessage(msgID, valueStr, oid);
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message =
+            ERR_ATTR_SYNTAX_DCR_UNKNOWN_STRUCTURAL_CLASS.get(valueStr, oid);
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
     else if (structuralClass.getObjectClassType() != ObjectClassType.STRUCTURAL)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_STRUCTURAL_CLASS_NOT_STRUCTURAL;
-      String message =
-           getMessage(msgID, valueStr, oid, structuralClass.getNameOrOID(),
-                      String.valueOf(structuralClass.getObjectClassType()));
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message 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);
     }
 
 
@@ -437,10 +429,9 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -477,10 +468,10 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DCR_UNEXPECTED_CLOSE_PARENTHESIS;
-          String message = getMessage(msgID, valueStr, (pos-1));
+          Message message = ERR_ATTR_SYNTAX_DCR_UNEXPECTED_CLOSE_PARENTHESIS.
+              get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         break;
@@ -535,10 +526,11 @@
         else
         {
           // This is an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
+                      valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
       else if (lowerTokenName.equals("desc"))
@@ -583,22 +575,21 @@
               }
               else
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS;
-                String message = getMessage(msgID, valueStr,
-                                            woidBuffer.toString());
+                Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS.
+                    get(valueStr, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                             message, msgID);
+                                             message);
               }
             }
             else if (oc.getObjectClassType() != ObjectClassType.AUXILIARY)
             {
               // This isn't good because it isn't an auxiliary class.
-              int msgID = MSGID_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY;
-              String message = getMessage(msgID, valueStr,
-                                          woidBuffer.toString(),
-                                          oc.getObjectClassType().toString());
+              Message message =
+                  ERR_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY.
+                    get(valueStr, woidBuffer.toString(),
+                        oc.getObjectClassType().toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
 
             ocs.add(oc);
@@ -614,10 +605,11 @@
             }
             else if (c != '$')
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message =
+                  ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
+                          valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -637,21 +629,20 @@
             }
             else
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS;
-              String message = getMessage(msgID, valueStr,
-                                          woidBuffer.toString());
+              Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS.get(
+                  valueStr, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
           else if (oc.getObjectClassType() != ObjectClassType.AUXILIARY)
           {
             // This isn't good because it isn't an auxiliary class.
-            int msgID = MSGID_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY;
-            String message = getMessage(msgID, valueStr, woidBuffer.toString(),
-                                        oc.getObjectClassType().toString());
+            Message message = ERR_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY.
+                get(valueStr, woidBuffer.toString(),
+                    oc.getObjectClassType().toString());
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
 
           ocs.add(oc);
@@ -687,11 +678,10 @@
               }
               else
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR;
-                String message = getMessage(msgID, valueStr,
-                                            woidBuffer.toString());
+                Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get(
+                    valueStr, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                             message, msgID);
+                                             message);
               }
             }
 
@@ -708,10 +698,11 @@
             }
             else if (c != '$')
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message =
+                  ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
+                          valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -732,11 +723,10 @@
             }
             else
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR;
-              String message = getMessage(msgID, valueStr,
-                                          woidBuffer.toString());
+              Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get(
+                  valueStr, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
 
@@ -773,11 +763,10 @@
               }
               else
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR;
-                String message = getMessage(msgID, valueStr,
-                                            woidBuffer.toString());
+                Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get(
+                    valueStr, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                             message, msgID);
+                                             message);
               }
             }
 
@@ -794,10 +783,11 @@
             }
             else if (c != '$')
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message =
+                  ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
+                          valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -818,11 +808,10 @@
             }
             else
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR;
-              String message = getMessage(msgID, valueStr,
-                                          woidBuffer.toString());
+              Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get(
+                  valueStr, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
 
@@ -859,11 +848,10 @@
               }
               else
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR;
-                String message = getMessage(msgID, valueStr,
-                                            woidBuffer.toString());
+                Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR.
+                    get(valueStr, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                             message, msgID);
+                                             message);
               }
             }
 
@@ -880,10 +868,11 @@
             }
             else if (c != '$')
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message =
+                  ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
+                          valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -904,11 +893,10 @@
             }
             else
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR;
-              String message = getMessage(msgID, valueStr,
-                                          woidBuffer.toString());
+              Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR.get(
+                  valueStr, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
 
@@ -936,22 +924,20 @@
     {
       if (structuralClass.isRequired(t))
       {
-        int msgID = MSGID_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_STRUCTURAL;
-        String message = getMessage(msgID, valueStr, t.getNameOrOID(),
-                                    structuralClass.getNameOrOID());
-        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                     msgID);
+        Message message = ERR_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_STRUCTURAL.
+            get(valueStr, t.getNameOrOID(), structuralClass.getNameOrOID());
+        throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
 
       for (ObjectClass oc : auxiliaryClasses)
       {
         if (oc.isRequired(t))
         {
-          int msgID = MSGID_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_AUXILIARY;
-          String message = getMessage(msgID, valueStr, t.getNameOrOID(),
-                                      oc.getNameOrOID());
-          throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                       msgID);
+          Message message =
+              ERR_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_AUXILIARY.
+                get(valueStr, t.getNameOrOID(), oc.getNameOrOID());
+          throw new DirectoryException(
+                  ResultCode.CONSTRAINT_VIOLATION, message);
         }
       }
     }
@@ -995,10 +981,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1054,20 +1039,20 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS.get(
+                  valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1091,10 +1076,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1141,20 +1125,20 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS.get(
+                  valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1179,10 +1163,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1222,10 +1205,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1242,10 +1224,10 @@
         {
           if (lastWasPeriod)
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, lowerStr, (startPos-1));
+            Message message = ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -1267,10 +1249,10 @@
           }
 
           // This must have been an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message 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, msgID);
+                                       message);
         }
         else
         {
@@ -1305,19 +1287,20 @@
           }
 
           // This must have been an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message 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, msgID);
+                                       message);
         }
       }
     }
     else
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR;
-      String message = getMessage(msgID, lowerStr, c, startPos);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
+                  lowerStr, String.valueOf(c), startPos);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1331,10 +1314,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1375,10 +1357,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1410,10 +1391,9 @@
 
         if (startPos >= length)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-          String message = getMessage(msgID, valueStr);
+          Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -1425,10 +1405,11 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_DCR_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, startPos);
+          Message message =
+              ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
+                      valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -1459,10 +1440,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DCR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/DITStructureRuleSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/DITStructureRuleSyntax.java
index f38f0cc..bc05d92 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/DITStructureRuleSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/DITStructureRuleSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -52,8 +53,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -109,30 +110,27 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE;
-      String message = getMessage(msgID, EMR_CASE_IGNORE_OID,
-                                  SYNTAX_DIT_STRUCTURE_RULE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_DIT_STRUCTURE_RULE_NAME);
+      throw new InitializationException(message);
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE;
-      String message = getMessage(msgID, OMR_CASE_IGNORE_OID,
-                                  SYNTAX_DIT_STRUCTURE_RULE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_DIT_STRUCTURE_RULE_NAME);
+      throw new InitializationException(message);
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE;
-      String message = getMessage(msgID, SMR_CASE_IGNORE_OID,
-                                  SYNTAX_DIT_STRUCTURE_RULE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_DIT_STRUCTURE_RULE_NAME);
+      throw new InitializationException(message);
     }
   }
 
@@ -213,7 +211,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // We'll use the decodeDITStructureRule method to determine if the value is
     // acceptable.
@@ -229,7 +227,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      invalidReason.append(de.getErrorMessage());
+      invalidReason.append(de.getMessageObject());
       return false;
     }
   }
@@ -283,10 +281,9 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_EMPTY_VALUE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_EMPTY_VALUE.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -295,10 +292,10 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_EXPECTED_OPEN_PARENTHESIS;
-      String message = getMessage(msgID, valueStr, (pos-1), c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_EXPECTED_OPEN_PARENTHESIS.get(
+          valueStr, (pos-1), String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -312,10 +309,9 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -325,10 +321,10 @@
     {
       if (! isDigit(c))
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID;
-        String message = getMessage(msgID, valueStr, c, (pos-1));
+        Message 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, msgID);
+                                     message);
       }
     }
 
@@ -337,10 +333,9 @@
     int ruleID;
     if (pos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
     else
     {
@@ -358,10 +353,9 @@
     {
       // This means that the end of the value was reached before we could find
       // the rule ID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -393,10 +387,10 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DSR_UNEXPECTED_CLOSE_PARENTHESIS;
-          String message = getMessage(msgID, valueStr, (pos-1));
+          Message message = ERR_ATTR_SYNTAX_DSR_UNEXPECTED_CLOSE_PARENTHESIS.
+              get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         break;
@@ -451,10 +445,11 @@
         else
         {
           // This is an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR.get(
+                      valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
       else if (lowerTokenName.equals("desc"))
@@ -481,10 +476,10 @@
         nameForm = schema.getNameForm(woidBuffer.toString());
         if ((nameForm == null) && (! allowUnknownElements))
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DSR_UNKNOWN_NAME_FORM;
-          String message = getMessage(msgID, valueStr, woidBuffer.toString());
+          Message message = ERR_ATTR_SYNTAX_DSR_UNKNOWN_NAME_FORM.get(
+              valueStr, woidBuffer.toString());
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
       else if (lowerTokenName.equals("sup"))
@@ -508,10 +503,10 @@
 
             if (pos >= length)
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-              String message = getMessage(msgID, lowerStr);
+              Message message =
+                  ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
 
             // Read the next integer value.
@@ -520,11 +515,10 @@
             {
               if (! isDigit(c))
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID;
-                String message = getMessage(msgID, valueStr, c, (pos-1));
+                Message 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,
-                               msgID);
+                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
               }
             }
 
@@ -533,10 +527,10 @@
             int supRuleID;
             if (pos >= length)
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-              String message = getMessage(msgID, valueStr);
+              Message message =
+                  ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
             else
             {
@@ -552,11 +546,10 @@
             {
               if (! allowUnknownElements)
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_DSR_UNKNOWN_RULE_ID;
-                String message = getMessage(msgID, valueStr, supRuleID);
+                Message message = ERR_ATTR_SYNTAX_DSR_UNKNOWN_RULE_ID.get(
+                    valueStr, supRuleID);
                 throw new DirectoryException(
-                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID);
+                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
               }
             }
             else
@@ -573,10 +566,10 @@
 
             if (pos >= length)
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-              String message = getMessage(msgID, lowerStr);
+              Message message =
+                  ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
 
 
@@ -592,11 +585,10 @@
 
               if (pos >= length)
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-                String message = getMessage(msgID, lowerStr);
+                Message message =
+                    ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
                 throw new DirectoryException(
-                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID);
+                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
               }
 
               break;
@@ -607,10 +599,9 @@
         {
           if (pos >= length)
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-            String message = getMessage(msgID, lowerStr);
+            Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
 
           // Read the next integer value.
@@ -619,10 +610,10 @@
           {
             if (! isDigit(c))
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message 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, msgID);
+                                           message);
             }
           }
 
@@ -631,10 +622,9 @@
           int supRuleID;
           if (pos >= length)
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-            String message = getMessage(msgID, valueStr);
+            Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -649,10 +639,10 @@
           {
             if (! allowUnknownElements)
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DSR_UNKNOWN_RULE_ID;
-              String message = getMessage(msgID, valueStr, supRuleID);
+              Message message =
+                  ERR_ATTR_SYNTAX_DSR_UNKNOWN_RULE_ID.get(valueStr, supRuleID);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
           else
@@ -669,10 +659,9 @@
 
           if (pos >= length)
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-            String message = getMessage(msgID, lowerStr);
+            Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
         }
 
@@ -694,10 +683,9 @@
 
     if ((nameForm == null) && (! nameFormGiven))
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_NO_NAME_FORM;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_NO_NAME_FORM.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -738,10 +726,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -797,20 +784,20 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_DSR_EXPECTED_QUOTE_AT_POS.get(
+                  valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -834,10 +821,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -884,20 +870,20 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_DSR_EXPECTED_QUOTE_AT_POS.get(
+                  valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -922,10 +908,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -965,10 +950,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -985,10 +969,10 @@
         {
           if (lastWasPeriod)
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_DSR_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, lowerStr, (startPos-1));
+            Message message = ERR_ATTR_SYNTAX_DSR_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -1010,10 +994,10 @@
           }
 
           // This must have been an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message 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, msgID);
+                                       message);
         }
         else
         {
@@ -1048,19 +1032,20 @@
           }
 
           // This must have been an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message 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, msgID);
+                                       message);
         }
       }
     }
     else
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR;
-      String message = getMessage(msgID, lowerStr, c, startPos);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR.get(
+                  lowerStr, String.valueOf(c), startPos);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1074,10 +1059,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1117,10 +1101,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1152,10 +1135,9 @@
 
         if (startPos >= length)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-          String message = getMessage(msgID, valueStr);
+          Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -1167,10 +1149,11 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_DSR_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, startPos);
+          Message message =
+              ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR.get(
+                      valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -1201,10 +1184,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DSR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/DeliveryMethodSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/DeliveryMethodSyntax.java
index 27c9fe1..0078774 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/DeliveryMethodSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/DeliveryMethodSyntax.java
@@ -40,12 +40,12 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -138,36 +138,32 @@
          DirectoryServer.getApproximateMatchingRule(AMR_DOUBLE_METAPHONE_OID);
     if (defaultApproximateMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE,
-               AMR_DOUBLE_METAPHONE_OID, SYNTAX_DELIVERY_METHOD_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE.get(
+          AMR_DOUBLE_METAPHONE_OID, SYNTAX_DELIVERY_METHOD_NAME));
     }
 
     defaultEqualityMatchingRule =
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_DELIVERY_METHOD_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_DELIVERY_METHOD_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_DELIVERY_METHOD_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_DELIVERY_METHOD_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_DELIVERY_METHOD_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_DELIVERY_METHOD_NAME));
     }
   }
 
@@ -282,15 +278,14 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     String stringValue = toLowerCase(value.stringValue());
     StringTokenizer tokenizer = new StringTokenizer(stringValue, " $");
     if (! tokenizer.hasMoreTokens())
     {
-      invalidReason.append(getMessage(
-                                MSGID_ATTR_SYNTAX_DELIVERY_METHOD_NO_ELEMENTS,
-                                value.stringValue()));
+      invalidReason.append(ERR_ATTR_SYNTAX_DELIVERY_METHOD_NO_ELEMENTS.get(
+              value.stringValue()));
       return false;
     }
 
@@ -299,9 +294,8 @@
       String token = tokenizer.nextToken();
       if (! allowedValues.contains(token))
       {
-        invalidReason.append(getMessage(
-                           MSGID_ATTR_SYNTAX_DELIVERY_METHOD_INVALID_ELEMENT,
-                           value.stringValue(), token));
+        invalidReason.append(ERR_ATTR_SYNTAX_DELIVERY_METHOD_INVALID_ELEMENT
+                .get(value.stringValue(), token));
         return false;
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/DirectoryStringFirstComponentEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/DirectoryStringFirstComponentEqualityMatchingRule.java
index 4c5a376..db30bb0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/DirectoryStringFirstComponentEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/DirectoryStringFirstComponentEqualityMatchingRule.java
@@ -37,8 +37,6 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/DirectoryStringSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/DirectoryStringSyntax.java
index 6ab7656..acaae9e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/DirectoryStringSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/DirectoryStringSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -44,18 +45,15 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
-import static org.opends.server.schema.SchemaConstants.*;
-import static org.opends.server.util.StaticUtils.*;
+import static org.opends.messages.SchemaMessages.*;
 
+import org.opends.messages.MessageBuilder;
+import static org.opends.server.schema.SchemaConstants.*;
 
 
 /**
@@ -130,36 +128,32 @@
          DirectoryServer.getApproximateMatchingRule(AMR_DOUBLE_METAPHONE_OID);
     if (defaultApproximateMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE,
-               AMR_DOUBLE_METAPHONE_OID, SYNTAX_DIRECTORY_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE.get(
+          AMR_DOUBLE_METAPHONE_OID, SYNTAX_DIRECTORY_STRING_NAME));
     }
 
     defaultEqualityMatchingRule =
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_DIRECTORY_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_DIRECTORY_STRING_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_DIRECTORY_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_DIRECTORY_STRING_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_DIRECTORY_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_DIRECTORY_STRING_NAME));
     }
 
 
@@ -298,7 +292,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     if (allowZeroLengthValues || (value.value().length > 0))
     {
@@ -306,8 +300,8 @@
     }
     else
     {
-      int msgID = MSGID_ATTR_SYNTAX_DIRECTORYSTRING_INVALID_ZEROLENGTH_VALUE;
-      invalidReason.append(getMessage(msgID));
+      invalidReason.append(
+              ERR_ATTR_SYNTAX_DIRECTORYSTRING_INVALID_ZEROLENGTH_VALUE.get());
       return false;
     }
   }
@@ -336,7 +330,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       DirectoryStringAttributeSyntaxCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // The configuration will always be acceptable.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java
index ef63e70..bb1354e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -45,8 +46,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -187,11 +187,10 @@
       if (DirectoryServer.getSyntaxEnforcementPolicy() ==
           AcceptRejectWarn.REJECT)
       {
-        int msgID = MSGID_ATTR_SYNTAX_DN_INVALID;
-        String message = getMessage(msgID, value.stringValue(),
-                                    String.valueOf(e));
+        Message message = ERR_ATTR_SYNTAX_DN_INVALID.get(
+            value.stringValue(), String.valueOf(e));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
       else
       {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/DistinguishedNameSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/DistinguishedNameSyntax.java
index a0f4077..e3ba5d0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/DistinguishedNameSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/DistinguishedNameSyntax.java
@@ -41,19 +41,16 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class defines the distinguished name attribute syntax, which is used for
  * attributes that hold distinguished names (DNs).  Equality and substring
@@ -117,18 +114,16 @@
          DirectoryServer.getEqualityMatchingRule(EMR_DN_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE, EMR_DN_OID,
-               SYNTAX_DN_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_DN_OID, SYNTAX_DN_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_DN_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_DN_NAME));
     }
   }
 
@@ -245,7 +240,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Use the DN code to make this determination.
     try
@@ -261,7 +256,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      invalidReason.append(de.getErrorMessage());
+      invalidReason.append(de.getMessageObject());
       return false;
     }
     catch (Exception e)
@@ -271,8 +266,8 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ATTR_SYNTAX_DN_INVALID;
-      invalidReason.append(getMessage(msgID, value.stringValue(),
+
+      invalidReason.append(ERR_ATTR_SYNTAX_DN_INVALID.get(value.stringValue(),
                                       String.valueOf(e)));
 
       return false;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/EnhancedGuideSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/EnhancedGuideSyntax.java
index ca69b8a..7892263 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/EnhancedGuideSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/EnhancedGuideSyntax.java
@@ -37,17 +37,16 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
-
 /**
  * This class implements the enhanced guide attribute syntax, which may be used
  * to provide criteria for generating search filters for entries of a given
@@ -90,27 +89,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OCTET_STRING_OID, SYNTAX_ENHANCED_GUIDE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_ENHANCED_GUIDE_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_OCTET_STRING_OID, SYNTAX_ENHANCED_GUIDE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_ENHANCED_GUIDE_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_OCTET_STRING_OID, SYNTAX_ENHANCED_GUIDE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_ENHANCED_GUIDE_NAME));
     }
   }
 
@@ -226,7 +222,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Get a lowercase string version of the provided value.
     String valueStr = toLowerCase(value.stringValue());
@@ -237,8 +233,9 @@
     int sharpPos = valueStr.indexOf('#');
     if (sharpPos < 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_SHARP;
-      invalidReason.append(getMessage(msgID, valueStr));
+
+      invalidReason.append(
+              ERR_ATTR_SYNTAX_ENHANCEDGUIDE_NO_SHARP.get(valueStr));
       return false;
     }
 
@@ -248,8 +245,8 @@
     int    ocLength = ocName.length();
     if (ocLength == 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_OC;
-      invalidReason.append(getMessage(msgID, valueStr));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_ENHANCEDGUIDE_NO_OC.get(valueStr));
       return false;
     }
 
@@ -263,8 +260,9 @@
     int lastSharpPos = valueStr.lastIndexOf('#');
     if (lastSharpPos == sharpPos)
     {
-      int msgID = MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_FINAL_SHARP;
-      invalidReason.append(getMessage(msgID, valueStr));
+
+      invalidReason.append(
+              ERR_ATTR_SYNTAX_ENHANCEDGUIDE_NO_FINAL_SHARP.get(valueStr));
       return false;
     }
 
@@ -275,13 +273,16 @@
     {
       if (scopeStr.length() == 0)
       {
-        int msgID = MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_SCOPE;
-        invalidReason.append(getMessage(msgID, valueStr));
+
+        invalidReason.append(
+                ERR_ATTR_SYNTAX_ENHANCEDGUIDE_NO_SCOPE.get(valueStr));
       }
       else
       {
-        int msgID = MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_INVALID_SCOPE;
-        invalidReason.append(getMessage(msgID, valueStr, scopeStr));
+
+        invalidReason.append(
+                ERR_ATTR_SYNTAX_ENHANCEDGUIDE_INVALID_SCOPE.get(
+                        valueStr, scopeStr));
       }
 
       return false;
@@ -294,8 +295,9 @@
     int    criteriaLength = criteria.length();
     if (criteriaLength == 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_ENHANCEDGUIDE_NO_CRITERIA;
-      invalidReason.append(getMessage(msgID, valueStr));
+
+      invalidReason.append(
+              ERR_ATTR_SYNTAX_ENHANCEDGUIDE_NO_CRITERIA.get(valueStr));
       return false;
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/FaxNumberSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/FaxNumberSyntax.java
index dc13684..b93fae8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/FaxNumberSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/FaxNumberSyntax.java
@@ -39,12 +39,12 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -122,27 +122,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_FAXNUMBER_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_FAXNUMBER_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_FAXNUMBER_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_FAXNUMBER_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_FAXNUMBER_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_FAXNUMBER_NAME));
     }
   }
 
@@ -258,7 +255,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Get a lowercase string representation of the value and find its length.
     String valueString = toLowerCase(value.stringValue());
@@ -268,8 +265,8 @@
     // The value must contain at least one character.
     if (valueLength == 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_FAXNUMBER_EMPTY;
-      invalidReason.append(getMessage(msgID));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_FAXNUMBER_EMPTY.get());
       return false;
     }
 
@@ -278,8 +275,9 @@
     char c = valueString.charAt(0);
     if (! PrintableString.isPrintableCharacter(c))
     {
-      int msgID = MSGID_ATTR_SYNTAX_FAXNUMBER_NOT_PRINTABLE;
-      invalidReason.append(getMessage(msgID, valueString, c, 0));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_FAXNUMBER_NOT_PRINTABLE.get(
+              valueString, String.valueOf(c), 0));
       return false;
     }
 
@@ -299,8 +297,9 @@
       {
         if (! PrintableString.isPrintableCharacter(c))
         {
-          int msgID = MSGID_ATTR_SYNTAX_FAXNUMBER_NOT_PRINTABLE;
-          invalidReason.append(getMessage(msgID, valueString, c, pos));
+
+          invalidReason.append(ERR_ATTR_SYNTAX_FAXNUMBER_NOT_PRINTABLE.get(
+                  valueString, String.valueOf(c), pos));
         }
       }
     }
@@ -311,8 +310,9 @@
       // character was a dollar sign.
       if (c == '$')
       {
-        int msgID = MSGID_ATTR_SYNTAX_FAXNUMBER_END_WITH_DOLLAR;
-        invalidReason.append(getMessage(msgID, valueString));
+
+        invalidReason.append(ERR_ATTR_SYNTAX_FAXNUMBER_END_WITH_DOLLAR.get(
+                valueString));
         return false;
       }
       else
@@ -333,9 +333,9 @@
         String paramStr = valueString.substring(paramStartPos, pos);
         if (! ALLOWED_FAX_PARAMETERS.contains(paramStr))
         {
-          int msgID = MSGID_ATTR_SYNTAX_FAXNUMBER_ILLEGAL_PARAMETER;
-          invalidReason.append(getMessage(msgID, valueString, paramStr,
-                                          paramStartPos, (pos-1)));
+
+          invalidReason.append(ERR_ATTR_SYNTAX_FAXNUMBER_ILLEGAL_PARAMETER.get(
+                  valueString, paramStr, paramStartPos, (pos-1)));
           return false;
         }
 
@@ -349,9 +349,8 @@
     String paramStr = valueString.substring(paramStartPos);
     if (! ALLOWED_FAX_PARAMETERS.contains(paramStr))
     {
-      int msgID = MSGID_ATTR_SYNTAX_FAXNUMBER_ILLEGAL_PARAMETER;
-      invalidReason.append(getMessage(msgID, valueString, paramStr,
-                                      paramStartPos, (pos-1)));
+      invalidReason.append(ERR_ATTR_SYNTAX_FAXNUMBER_ILLEGAL_PARAMETER.get(
+              valueString, paramStr, paramStartPos, (pos-1)));
       return false;
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/FaxSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/FaxSyntax.java
index 3f7bbe9..c6b5b57 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/FaxSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/FaxSyntax.java
@@ -37,15 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the fax attribute syntax.  This should be restricted to
  * holding only fax message contents, but we will accept any set of bytes.  It
@@ -88,27 +88,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OCTET_STRING_OID, SYNTAX_FAX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_FAX_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_OCTET_STRING_OID, SYNTAX_FAX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_FAX_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_OCTET_STRING_OID, SYNTAX_FAX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_FAX_NAME));
     }
   }
 
@@ -224,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // All values will be acceptable for the fax syntax.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeEqualityMatchingRule.java
index 928acc1..3ea5b80 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeEqualityMatchingRule.java
@@ -39,8 +39,6 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 
 import org.opends.server.types.DebugLogLevel;
@@ -208,8 +206,7 @@
           throw de;
 
         case WARN:
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                   de.getErrorMessage(), de.getMessageID());
+          logError(de.getMessageObject());
           return new ASN1OctetString(value.value());
 
         default:
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeOrderingMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeOrderingMatchingRule.java
index fd4f15f..774d218 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeOrderingMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeOrderingMatchingRule.java
@@ -39,8 +39,8 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.InitializationException;
 
 import org.opends.server.types.DebugLogLevel;
@@ -218,8 +218,7 @@
           throw de;
 
         case WARN:
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                   de.getErrorMessage(), de.getMessageID());
+          logError(de.getMessageObject());
           return new ASN1OctetString(value.value());
 
         default:
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeSyntax.java
index 8b2d141..1950fbf 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/GeneralizedTimeSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -47,16 +48,16 @@
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
 
 import org.opends.server.types.DebugLogLevel;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 
@@ -142,27 +143,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_GENERALIZED_TIME_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_GENERALIZED_TIME_OID, SYNTAX_GENERALIZED_TIME_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_GENERALIZED_TIME_OID, SYNTAX_GENERALIZED_TIME_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_GENERALIZED_TIME_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_GENERALIZED_TIME_OID, SYNTAX_GENERALIZED_TIME_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_GENERALIZED_TIME_OID, SYNTAX_GENERALIZED_TIME_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_GENERALIZED_TIME_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_GENERALIZED_TIME_NAME));
     }
   }
 
@@ -278,7 +276,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     try
     {
@@ -287,7 +285,7 @@
     }
     catch (DirectoryException de)
     {
-      invalidReason.append(de.getErrorMessage());
+      invalidReason.append(de.getMessageObject());
       return false;
     }
   }
@@ -409,10 +407,10 @@
     int    length      = valueString.length();
     if (length < 11)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_TOO_SHORT;
-      String message = getMessage(msgID, valueString);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          WARN_ATTR_SYNTAX_GENERALIZED_TIME_TOO_SHORT.get(valueString);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -463,11 +461,10 @@
           break;
 
         default:
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_YEAR;
-          String message = getMessage(msgID, valueString,
-                                      valueString.charAt(i));
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_YEAR.get(
+              valueString, String.valueOf(valueString.charAt(i)));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
       }
     }
 
@@ -519,11 +516,11 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH;
-            String message = getMessage(msgID, valueString,
+            Message message =
+                WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString,
                                         valueString.substring(4, 6));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
       case '1':
@@ -543,19 +540,19 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH;
-            String message = getMessage(msgID, valueString,
+            Message message =
+                WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString,
                                         valueString.substring(4, 6));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH;
-        String message = getMessage(msgID, valueString,
+        Message message =
+            WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString,
                                     valueString.substring(4, 6));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
     }
 
 
@@ -609,11 +606,11 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY;
-            String message = getMessage(msgID, valueString,
+            Message message =
+                WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString,
                                         valueString.substring(6, 8));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
 
@@ -662,11 +659,11 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY;
-            String message = getMessage(msgID, valueString,
+            Message message =
+                WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString,
                                         valueString.substring(6, 8));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
 
@@ -715,11 +712,11 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY;
-            String message = getMessage(msgID, valueString,
+            Message message =
+                WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString,
                                         valueString.substring(6, 8));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
 
@@ -736,20 +733,20 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY;
-            String message = getMessage(msgID, valueString,
+            Message message =
+                WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString,
                                         valueString.substring(6, 8));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
 
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY;
-        String message = getMessage(msgID, valueString,
+        Message message =
+            WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString,
                                     valueString.substring(6, 8));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
     }
 
 
@@ -803,11 +800,11 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR;
-            String message = getMessage(msgID, valueString,
+            Message message =
+                WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString,
                                         valueString.substring(8, 10));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
 
@@ -855,11 +852,11 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR;
-            String message = getMessage(msgID, valueString,
+            Message message =
+                WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString,
                                         valueString.substring(8, 10));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
 
@@ -883,20 +880,20 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR;
-            String message = getMessage(msgID, valueString,
+            Message message =
+                WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString,
                                         valueString.substring(8, 10));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
 
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR;
-        String message = getMessage(msgID, valueString,
+        Message message =
+            WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString,
                                     valueString.substring(8, 10));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
     }
 
 
@@ -917,10 +914,10 @@
         // be a digit between 0 and 9.
         if (length < 13)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, m1, 10);
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+              valueString, String.valueOf(m1), 10);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -968,11 +965,11 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE;
-            String message = getMessage(msgID, valueString,
+            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE.
+                get(valueString,
                                         valueString.substring(10, 12));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
 
         break;
@@ -999,18 +996,18 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME;
-            String message = getMessage(msgID, valueString, String.valueOf(e));
+            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+                get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID, e);
+                                         message, e);
           }
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, m1, 10);
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+              valueString, String.valueOf(m1), 10);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
       case '+':
@@ -1037,18 +1034,18 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME;
-            String message = getMessage(msgID, valueString, String.valueOf(e));
+            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+                get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID, e);
+                                         message, e);
           }
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, m1, 10);
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+              valueString, String.valueOf(m1), 10);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
       case '.':
@@ -1057,10 +1054,10 @@
                                       minute, second, 3600000);
 
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-        String message = getMessage(msgID, valueString, m1, 10);
+        Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+            valueString, String.valueOf(m1), 10);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
     }
 
 
@@ -1081,10 +1078,10 @@
         // be a digit between 0 and 9.
         if (length < 15)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, s1, 12);
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+              valueString, String.valueOf(s1), 12);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -1132,11 +1129,11 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE;
-            String message = getMessage(msgID, valueString,
+            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE.
+                get(valueString,
                                         valueString.substring(12, 14));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
 
         break;
@@ -1146,19 +1143,19 @@
         // a 0.
         if (length < 15)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, s1, 12);
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+              valueString, String.valueOf(s1), 12);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         if (valueString.charAt(13) != '0')
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SECOND;
-          String message = getMessage(msgID, valueString,
+          Message message =
+              WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SECOND.get(valueString,
                                       valueString.substring(12, 14));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         second = 60;
@@ -1186,18 +1183,18 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME;
-            String message = getMessage(msgID, valueString, String.valueOf(e));
+            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+                get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID, e);
+                                         message, e);
           }
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, s1, 12);
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+              valueString, String.valueOf(s1), 12);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
       case '+':
@@ -1224,18 +1221,18 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME;
-            String message = getMessage(msgID, valueString, String.valueOf(e));
+            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+                get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID, e);
+                                         message, e);
           }
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, s1, 12);
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+              valueString, String.valueOf(s1), 12);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
       case '.':
@@ -1244,10 +1241,10 @@
                                       minute, second, 60000);
 
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-        String message = getMessage(msgID, valueString, s1, 12);
+        Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+            valueString, String.valueOf(s1), 12);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
     }
 
 
@@ -1284,19 +1281,18 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME;
-            String message = getMessage(msgID, valueString, String.valueOf(e));
+            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+                get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID, e);
+                                         message, e);
           }
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString,
-                                      valueString.charAt(14), 14);
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+              valueString, String.valueOf(valueString.charAt(14)), 14);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
       case '+':
@@ -1323,27 +1319,25 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME;
-            String message = getMessage(msgID, valueString, String.valueOf(e));
+            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+                get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID, e);
+                                         message, e);
           }
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString,
-                                      valueString.charAt(14), 14);
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+              valueString, String.valueOf(valueString.charAt(14)), 14);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-        String message = getMessage(msgID, valueString, valueString.charAt(14),
-                                    14);
+        Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+            valueString, String.valueOf(valueString.charAt(14)), 14);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
     }
   }
 
@@ -1410,11 +1404,11 @@
           // This is only acceptable if we're at the end of the value.
           if (i != (value.length() - 1))
           {
-            int msgID =
-                 MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_FRACTION_CHAR;
-            String message = getMessage(msgID, value, String.valueOf(c));
+            Message message =
+                WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_FRACTION_CHAR.
+                  get(value, String.valueOf(c));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
 
           timeZone = TimeZone.getTimeZone(TIME_ZONE_UTC);
@@ -1426,27 +1420,28 @@
           break outerLoop;
 
         default:
-          int msgID = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_FRACTION_CHAR;
-          String message = getMessage(msgID, value, String.valueOf(c));
+          Message message =
+              WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_FRACTION_CHAR.
+                get(value, String.valueOf(c));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
       }
     }
 
     if (fractionBuffer.length() == 2)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_EMPTY_FRACTION;
-      String message = getMessage(msgID, value);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          WARN_ATTR_SYNTAX_GENERALIZED_TIME_EMPTY_FRACTION.get(value);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
     if (timeZone == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_NO_TIME_ZONE_INFO;
-      String message = getMessage(msgID, value);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          WARN_ATTR_SYNTAX_GENERALIZED_TIME_NO_TIME_ZONE_INFO.get(value);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
     Double fractionValue = Double.parseDouble(fractionBuffer.toString());
@@ -1470,10 +1465,10 @@
 
       // This should only happen if the provided date wasn't legal
       // (e.g., September 31).
-      int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME;
-      String message = getMessage(msgID, value, String.valueOf(e));
+      Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.get(
+          value, String.valueOf(e));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                   message, msgID, e);
+                                   message, e);
     }
   }
 
@@ -1498,10 +1493,10 @@
     String offSetStr = value.substring(startPos);
     if ((offSetStr.length() != 3) && (offSetStr.length() != 5))
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET;
-      String message = getMessage(msgID, value, offSetStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.get(
+          value, offSetStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1514,10 +1509,11 @@
         break;
 
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET;
-        String message = getMessage(msgID, value, offSetStr);
-        throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+        Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.get(
+            value, offSetStr);
+        throw new DirectoryException(
+                ResultCode.INVALID_ATTRIBUTE_SYNTAX,
+                message);
     }
 
 
@@ -1542,10 +1538,10 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET;
-            String message = getMessage(msgID, value, offSetStr);
+            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
+                get(value, offSetStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
 
@@ -1560,18 +1556,18 @@
             break;
 
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET;
-            String message = getMessage(msgID, value, offSetStr);
+            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
+                get(value, offSetStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
         }
         break;
 
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET;
-        String message = getMessage(msgID, value, offSetStr);
+        Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.get(
+            value, offSetStr);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID);
+                                     message);
     }
 
 
@@ -1603,18 +1599,19 @@
               break;
 
             default:
-              int msgID = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET;
-              String message = getMessage(msgID, value, offSetStr);
+              Message message =
+                  WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
+                    get(value, offSetStr);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
           }
           break;
 
         default:
-          int    msgID   = MSGID_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET;
-          String message = getMessage(msgID, value, offSetStr);
+          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
+              get(value, offSetStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/GuideSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/GuideSyntax.java
index ebcd162..8d693df 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/GuideSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/GuideSyntax.java
@@ -37,17 +37,16 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
-
 /**
  * This class implements the guide attribute syntax, which may be used to
  * provide criteria for generating search filters for entries, optionally tied
@@ -90,27 +89,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OCTET_STRING_OID, SYNTAX_GUIDE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_GUIDE_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_OCTET_STRING_OID, SYNTAX_GUIDE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_GUIDE_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_OCTET_STRING_OID, SYNTAX_GUIDE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_GUIDE_NAME));
     }
   }
 
@@ -226,7 +222,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Get a lowercase string version of the provided value.
     String valueStr = toLowerCase(value.stringValue());
@@ -246,8 +242,8 @@
     int    ocLength = ocName.length();
     if (ocLength == 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_GUIDE_NO_OC;
-      invalidReason.append(getMessage(msgID, valueStr));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_NO_OC.get(valueStr));
       return false;
     }
 
@@ -259,7 +255,7 @@
 
     // The rest of the value must be the criteria.
     return criteriaIsValid(valueStr.substring(sharpPos+1), valueStr,
-                           invalidReason);
+            invalidReason);
   }
 
 
@@ -278,7 +274,7 @@
    *          criteria, or <CODE>false</CODE> if not.
    */
   public static boolean criteriaIsValid(String criteria, String valueStr,
-                                        StringBuilder invalidReason)
+                                        MessageBuilder invalidReason)
   {
     // See if the criteria starts with a '!'.  If so, then just evaluate
     // everything after that as a criteria.
@@ -327,9 +323,10 @@
               }
               else
               {
-                int msgID = MSGID_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR;
-                invalidReason.append(getMessage(msgID, valueStr, criteria, c,
-                                                (i+1)));
+
+                invalidReason.append(
+                        ERR_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR.get(
+                                valueStr, criteria, c, (i+1)));
                 return false;
               }
             }
@@ -344,8 +341,9 @@
 
       // If we've gotten here, then we went through the entire value without
       // finding the appropriate closing parenthesis.
-      int msgID = MSGID_ATTR_SYNTAX_GUIDE_MISSING_CLOSE_PAREN;
-      invalidReason.append(getMessage(msgID, valueStr, criteria));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_MISSING_CLOSE_PAREN.get(
+              valueStr, criteria));
       return false;
     }
 
@@ -371,8 +369,8 @@
           }
           else
           {
-            int msgID = MSGID_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR;
-            invalidReason.append(getMessage(msgID, valueStr, criteria, c, 5));
+            invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR.get(
+                    valueStr, criteria, c, 5));
             return false;
           }
         }
@@ -394,16 +392,16 @@
           }
           else
           {
-            int msgID = MSGID_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR;
-            invalidReason.append(getMessage(msgID, valueStr, criteria, c, 6));
+            invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR.get(
+                    valueStr, criteria, c, 6));
             return false;
           }
         }
       }
       else
       {
-        int msgID = MSGID_ATTR_SYNTAX_GUIDE_INVALID_QUESTION_MARK;
-        invalidReason.append(getMessage(msgID, valueStr, criteria));
+        invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_INVALID_QUESTION_MARK.get(
+                valueStr, criteria));
         return false;
       }
     }
@@ -423,20 +421,20 @@
     int dollarPos = criteria.indexOf('$');
     if (dollarPos < 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_GUIDE_NO_DOLLAR;
-      invalidReason.append(getMessage(msgID, valueStr, criteria));
+      invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_NO_DOLLAR.get(
+              valueStr, criteria));
       return false;
     }
     else if (dollarPos == 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_GUIDE_NO_ATTR;
-      invalidReason.append(getMessage(msgID, valueStr, criteria));
+      invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_NO_ATTR.get(
+              valueStr, criteria));
       return false;
     }
     else if (dollarPos == (criteria.length()-1))
     {
-      int msgID = MSGID_ATTR_SYNTAX_GUIDE_NO_MATCH_TYPE;
-      invalidReason.append(getMessage(msgID, valueStr, criteria));
+      invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_NO_MATCH_TYPE.get(
+              valueStr, criteria));
       return false;
     }
     else
@@ -463,9 +461,8 @@
         }
         else
         {
-          int msgID = MSGID_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE;
-          invalidReason.append(getMessage(msgID, valueStr, criteria,
-                                          dollarPos+1));
+          invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE.get(
+                  valueStr, criteria, dollarPos+1));
           return false;
         }
 
@@ -477,9 +474,8 @@
         }
         else
         {
-          int msgID = MSGID_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE;
-          invalidReason.append(getMessage(msgID, valueStr, criteria,
-                                          dollarPos+1));
+          invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE.get(
+                  valueStr, criteria, dollarPos+1));
           return false;
         }
 
@@ -491,9 +487,8 @@
         }
         else
         {
-          int msgID = MSGID_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE;
-          invalidReason.append(getMessage(msgID, valueStr, criteria,
-                                          dollarPos+1));
+          invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE.get(
+                  valueStr, criteria, dollarPos+1));
           return false;
         }
 
@@ -505,9 +500,8 @@
         }
         else
         {
-          int msgID = MSGID_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE;
-          invalidReason.append(getMessage(msgID, valueStr, criteria,
-                                          dollarPos+1));
+          invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE.get(
+                  valueStr, criteria, dollarPos+1));
           return false;
         }
 
@@ -519,16 +513,14 @@
         }
         else
         {
-          int msgID = MSGID_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE;
-          invalidReason.append(getMessage(msgID, valueStr, criteria,
-                                          dollarPos+1));
+          invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE.get(
+                  valueStr, criteria, dollarPos+1));
           return false;
         }
 
       default:
-        int msgID = MSGID_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE;
-        invalidReason.append(getMessage(msgID, valueStr, criteria,
-                                        dollarPos+1));
+        invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_INVALID_MATCH_TYPE.get(
+                valueStr, criteria, dollarPos+1));
         return false;
     }
 
@@ -549,8 +541,8 @@
       }
       else
       {
-        int msgID = MSGID_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR;
-        invalidReason.append(getMessage(msgID, valueStr, criteria, c, endPos));
+        invalidReason.append(ERR_ATTR_SYNTAX_GUIDE_ILLEGAL_CHAR.get(
+                valueStr, criteria, c, endPos));
         return false;
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/IA5StringSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/IA5StringSyntax.java
index 5950a56..015fdb4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/IA5StringSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/IA5StringSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -37,16 +38,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the IA5 string attribute syntax, which is simply a
  * set of ASCII characters.  By default, they will be treated in a
@@ -93,36 +93,32 @@
          DirectoryServer.getApproximateMatchingRule(AMR_DOUBLE_METAPHONE_OID);
     if (defaultApproximateMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE,
-               AMR_DOUBLE_METAPHONE_OID, SYNTAX_IA5_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE.get(
+          AMR_DOUBLE_METAPHONE_OID, SYNTAX_IA5_STRING_NAME));
     }
 
     defaultEqualityMatchingRule =
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_IA5_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_IA5_OID, SYNTAX_IA5_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_IA5_OID, SYNTAX_IA5_STRING_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_IA5_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_IA5_STRING_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_IA5_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_IA5_OID, SYNTAX_IA5_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_IA5_OID, SYNTAX_IA5_STRING_NAME));
     }
   }
 
@@ -237,7 +233,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // We will allow any value that does not contain any non-ASCII characters.
     // Empty values are acceptable as well.
@@ -245,8 +241,9 @@
     {
       if ((b & 0x7F) != b)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER;
-        String message = getMessage(msgID, value.stringValue(), ((char) b));
+
+        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+                value.stringValue(), String.valueOf(b));
         invalidReason.append(message);
         return false;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerEqualityMatchingRule.java
index be3cd79..de8ef8e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerEqualityMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -37,16 +38,12 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
-
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -164,21 +161,19 @@
               }
               else
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_INITIAL_ZERO;
-                String message = getMessage(msgID, value.stringValue());
+                Message message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
+                        value.stringValue());
 
                 switch (DirectoryServer.getSyntaxEnforcementPolicy())
                 {
                   case REJECT:
                     throw new DirectoryException(
-                                   ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+                                  ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
                   case WARN:
                     if (! logged)
                     {
                       logged = true;
-                      logError(ErrorLogCategory.SCHEMA,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      ErrorLogger.logError(message);
                     }
                     break;
                 }
@@ -188,21 +183,19 @@
               // This is OK as long as the first character isn't a dash.
               if (buffer.charAt(0) == '-')
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_INITIAL_ZERO;
-                String message = getMessage(msgID, value.stringValue());
+                Message message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
+                        value.stringValue());
 
                 switch (DirectoryServer.getSyntaxEnforcementPolicy())
                 {
                   case REJECT:
                     throw new DirectoryException(
-                                   ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+                                  ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
                   case WARN:
                     if (! logged)
                     {
                       logged = true;
-                      logError(ErrorLogCategory.SCHEMA,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      ErrorLogger.logError(message);
                     }
                     break;
                 }
@@ -253,42 +246,38 @@
           }
           else
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_MISPLACED_DASH;
-            String message = getMessage(msgID, value.stringValue());
+            Message message = WARN_ATTR_SYNTAX_INTEGER_MISPLACED_DASH.get(
+                    value.stringValue());
 
             switch (DirectoryServer.getSyntaxEnforcementPolicy())
             {
               case REJECT:
                 throw new DirectoryException(
-                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID);
+                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
               case WARN:
                 if (! logged)
                 {
                   logged = true;
-                  logError(ErrorLogCategory.SCHEMA,
-                           ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                  ErrorLogger.logError(message);
                 }
                 break;
             }
           }
           break;
         default:
-          int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER;
-          String message = getMessage(msgID, value.stringValue(),
-                                      ((char) valueBytes[i]), i);
+          Message message = WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER.get(
+                  value.stringValue(),
+                  ((char) valueBytes[i]), i);
           switch (DirectoryServer.getSyntaxEnforcementPolicy())
           {
             case REJECT:
               throw new DirectoryException(
-                             ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                             msgID);
+                             ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
             case WARN:
               if (! logged)
               {
                 logged = true;
-                logError(ErrorLogCategory.SCHEMA,
-                         ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                ErrorLogger.logError(message);
               }
               break;
           }
@@ -297,21 +286,20 @@
 
     if (buffer.length() == 0)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_EMPTY_VALUE;
-      String message = getMessage(msgID, value.stringValue());
+      Message message = WARN_ATTR_SYNTAX_INTEGER_EMPTY_VALUE.get(
+              value.stringValue());
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
         case REJECT:
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
 
         case WARN:
           if (! logged)
           {
             logged = true;
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            ErrorLogger.logError(message);
           }
 
           buffer.append("0");
@@ -324,21 +312,19 @@
     }
     else if ((buffer.length() == 1) && (buffer.charAt(0) == '-'))
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE;
-      String message = getMessage(msgID, value.stringValue());
-
+      Message message = WARN_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE.get(
+              value.stringValue());
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
         case REJECT:
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
 
         case WARN:
           if (! logged)
           {
             logged = true;
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            ErrorLogger.logError(message);
           }
 
           buffer.setCharAt(0, '0');
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerFirstComponentEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerFirstComponentEqualityMatchingRule.java
index 2824faa..1626232 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerFirstComponentEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerFirstComponentEqualityMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -41,8 +42,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -277,10 +277,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_EMR_INTFIRSTCOMP_NO_INITIAL_PARENTHESIS;
-        String message = getMessage(msgID, String.valueOf(valueString));
+        Message message = ERR_EMR_INTFIRSTCOMP_NO_INITIAL_PARENTHESIS.get(
+            String.valueOf(valueString));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                     message, msgID, e);
+                                     message, e);
       }
     }
 
@@ -293,10 +293,10 @@
 
     if (pos >= valueLength)
     {
-      int    msgID   = MSGID_EMR_INTFIRSTCOMP_NO_NONSPACE;
-      String message = getMessage(msgID, String.valueOf(valueString));
+      Message message =
+          ERR_EMR_INTFIRSTCOMP_NO_NONSPACE.get(String.valueOf(valueString));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -310,10 +310,10 @@
 
     if (pos >= valueLength)
     {
-      int    msgID   = MSGID_EMR_INTFIRSTCOMP_NO_SPACE_AFTER_INT;
-      String message = getMessage(msgID, String.valueOf(valueString));
+      Message message = ERR_EMR_INTFIRSTCOMP_NO_SPACE_AFTER_INT.get(
+          String.valueOf(valueString));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -330,10 +330,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_EMR_INTFIRSTCOMP_FIRST_COMPONENT_NOT_INT;
-      String message = getMessage(msgID, String.valueOf(valueString));
+      Message message = ERR_EMR_INTFIRSTCOMP_FIRST_COMPONENT_NOT_INT.get(
+          String.valueOf(valueString));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerOrderingMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerOrderingMatchingRule.java
index ef302c4..492cedd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerOrderingMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerOrderingMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -35,14 +36,11 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -171,21 +169,20 @@
               }
               else
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_INITIAL_ZERO;
-                String message = getMessage(msgID, value.stringValue());
+
+                Message message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
+                        value.stringValue());
 
                 switch (DirectoryServer.getSyntaxEnforcementPolicy())
                 {
                   case REJECT:
                     throw new DirectoryException(
-                                   ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+                                 ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
                   case WARN:
                     if (! logged)
                     {
                       logged = true;
-                      logError(ErrorLogCategory.SCHEMA,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      logError(message);
                     }
                     break;
                 }
@@ -195,21 +192,21 @@
               // This is OK as long as the first character isn't a dash.
               if (buffer.charAt(0) == '-')
               {
-                int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_INITIAL_ZERO;
-                String message = getMessage(msgID, value.stringValue());
+
+                Message message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
+                        value.stringValue());
 
                 switch (DirectoryServer.getSyntaxEnforcementPolicy())
                 {
                   case REJECT:
                     throw new DirectoryException(
-                                   ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+                                  ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
                   case WARN:
                     if (! logged)
                     {
                       logged = true;
-                      logError(ErrorLogCategory.SCHEMA,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      logError(
+                              message);
                     }
                     break;
                 }
@@ -260,42 +257,40 @@
           }
           else
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_MISPLACED_DASH;
-            String message = getMessage(msgID, value.stringValue());
+            Message message = WARN_ATTR_SYNTAX_INTEGER_MISPLACED_DASH.get(
+                    value.stringValue());
 
             switch (DirectoryServer.getSyntaxEnforcementPolicy())
             {
               case REJECT:
                 throw new DirectoryException(
-                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID);
+                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
               case WARN:
                 if (! logged)
                 {
                   logged = true;
-                  logError(ErrorLogCategory.SCHEMA,
-                           ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                  logError(
+                          message);
                 }
                 break;
             }
           }
           break;
         default:
-          int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER;
-          String message = getMessage(msgID, value.stringValue(),
-                                      ((char) valueBytes[i]), i);
+          Message message = WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER.get(
+                  value.stringValue(),
+                  ((char) valueBytes[i]), i);
           switch (DirectoryServer.getSyntaxEnforcementPolicy())
           {
             case REJECT:
               throw new DirectoryException(
-                             ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                             msgID);
+                             ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
             case WARN:
               if (! logged)
               {
                 logged = true;
-                logError(ErrorLogCategory.SCHEMA,
-                         ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                logError(
+                        message);
               }
               break;
           }
@@ -304,21 +299,21 @@
 
     if (buffer.length() == 0)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_EMPTY_VALUE;
-      String message = getMessage(msgID, value.stringValue());
+      Message message = WARN_ATTR_SYNTAX_INTEGER_EMPTY_VALUE.get(
+              value.stringValue());
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
         case REJECT:
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
 
         case WARN:
           if (! logged)
           {
             logged = true;
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            logError(
+                    message);
           }
 
           buffer.append("0");
@@ -331,21 +326,21 @@
     }
     else if ((buffer.length() == 1) && (buffer.charAt(0) == '-'))
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE;
-      String message = getMessage(msgID, value.stringValue());
+      Message message = WARN_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE.get(
+              value.stringValue());
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
         case REJECT:
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
 
         case WARN:
           if (! logged)
           {
             logged = true;
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            logError(
+                    message);
           }
 
           buffer.setCharAt(0, '0');
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerSyntax.java
index 4af0dea..c2874b4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/IntegerSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -40,17 +41,16 @@
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class defines the integer attribute syntax, which holds an
  * arbitrarily-long integer value.  Equality, ordering, and substring matching
@@ -88,10 +88,10 @@
       }
       catch (NumberFormatException e)
       {
-        int msgID = MSGID_ATTR_SYNTAX_ILLEGAL_INTEGER;
-        String message = getMessage(msgID, nvalue.stringValue());
+        Message message =
+            WARN_ATTR_SYNTAX_ILLEGAL_INTEGER.get(nvalue.stringValue());
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-            message, msgID);
+            message);
       }
     }
   };
@@ -121,27 +121,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_INTEGER_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_INTEGER_OID, SYNTAX_INTEGER_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_INTEGER_OID, SYNTAX_INTEGER_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_INTEGER_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_INTEGER_OID, SYNTAX_INTEGER_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_INTEGER_OID, SYNTAX_INTEGER_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_EXACT_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_EXACT_OID, SYNTAX_INTEGER_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_EXACT_OID, SYNTAX_INTEGER_NAME));
     }
   }
 
@@ -257,15 +254,15 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     String valueString = value.stringValue();
     int    length      = valueString.length();
 
     if (length == 0)
     {
-      invalidReason.append(getMessage(MSGID_ATTR_SYNTAX_INTEGER_EMPTY_VALUE,
-                                      valueString));
+      invalidReason.append(
+              WARN_ATTR_SYNTAX_INTEGER_EMPTY_VALUE.get(valueString));
       return false;
     }
     else if (length == 1)
@@ -284,13 +281,13 @@
         case '9':
           return true;
         case '-':
-          int msgID = MSGID_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE;
-          invalidReason.append(getMessage(msgID, valueString));
+          invalidReason.append(WARN_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE.get(
+                  valueString));
           return false;
         default:
-          msgID = MSGID_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER;
-          invalidReason.append(getMessage(msgID, valueString,
-                                          valueString.charAt(0), 0));
+          invalidReason.append(WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER.get(
+                  valueString,
+                  valueString.charAt(0), 0));
           return false;
       }
     }
@@ -301,8 +298,8 @@
       switch (valueString.charAt(0))
       {
         case '0':
-          int msgID = MSGID_ATTR_SYNTAX_INTEGER_INITIAL_ZERO;
-          invalidReason.append(getMessage(msgID, valueString));
+          invalidReason.append(WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
+                  valueString));
           return false;
         case '1':
         case '2':
@@ -320,9 +317,9 @@
           negative = true;
           break;
         default:
-          msgID = MSGID_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER;
-          invalidReason.append(getMessage(msgID, valueString,
-                                          valueString.charAt(0), 0));
+          invalidReason.append(WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER.get(
+                  valueString,
+                  valueString.charAt(0), 0));
           return false;
       }
 
@@ -332,8 +329,8 @@
           // This is fine as long as the value isn't negative.
           if (negative)
           {
-            int msgID = MSGID_ATTR_SYNTAX_INTEGER_INITIAL_ZERO;
-            invalidReason.append(getMessage(msgID, valueString));
+            invalidReason.append(WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
+                    valueString));
             return false;
           }
           break;
@@ -349,9 +346,9 @@
           // These are all fine.
           break;
         default:
-          int msgID = MSGID_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER;
-          invalidReason.append(getMessage(msgID, valueString,
-                                          valueString.charAt(0), 0));
+          invalidReason.append(WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER.get(
+                  valueString,
+                  valueString.charAt(0), 0));
           return false;
       }
 
@@ -372,9 +369,9 @@
             // These are all fine.
             break;
           default:
-            int msgID = MSGID_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER;
-            invalidReason.append(getMessage(msgID, valueString,
-                                            valueString.charAt(0), 0));
+            invalidReason.append(WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER.get(
+                    valueString,
+                    valueString.charAt(0), 0));
             return false;
         }
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/JPEGSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/JPEGSyntax.java
index 395caf3..9de4950 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/JPEGSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/JPEGSyntax.java
@@ -37,15 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the JPEG attribute syntax.  This should be restricted
  * to holding only JPEG image contents, but we will accept any set of bytes.  It
@@ -88,27 +88,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OCTET_STRING_OID, SYNTAX_JPEG_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_JPEG_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_OCTET_STRING_OID, SYNTAX_JPEG_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_JPEG_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_OCTET_STRING_OID, SYNTAX_JPEG_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_JPEG_NAME));
     }
   }
 
@@ -224,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // All values will be acceptable for the JPEG syntax.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java
index 08c4f6d..3b40a9c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -38,21 +39,20 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.*;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
-
 /**
  * This class defines the LDAP syntax description syntax, which is used to
  * hold attribute syntax definitions in the server schema.  The format of this
@@ -103,27 +103,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_LDAP_SYNTAX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_LDAP_SYNTAX_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_LDAP_SYNTAX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_LDAP_SYNTAX_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_LDAP_SYNTAX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_LDAP_SYNTAX_NAME));
     }
   }
 
@@ -239,7 +236,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Get string representations of the provided value using the provided form
     // and with all lowercase characters.
@@ -260,8 +257,8 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_EMPTY_VALUE;
-      invalidReason.append(getMessage(msgID));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_ATTRSYNTAX_EMPTY_VALUE.get());
       return false;
     }
 
@@ -271,8 +268,10 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_OPEN_PARENTHESIS;
-      invalidReason.append(getMessage(msgID, valueStr, (pos-1), c));
+
+      invalidReason.append(
+              ERR_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_OPEN_PARENTHESIS.get(
+                      valueStr, (pos-1), String.valueOf(c)));
       return false;
     }
 
@@ -287,8 +286,8 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE;
-      invalidReason.append(getMessage(msgID, valueStr));
+      invalidReason.append(ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(
+              valueStr));
       return false;
     }
 
@@ -309,9 +308,9 @@
         {
           if (lastWasPeriod)
           {
-            int msgID =
-                 MSGID_ATTR_SYNTAX_ATTRSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            invalidReason.append(getMessage(msgID, valueStr, (pos-1)));
+            invalidReason.append(
+                    ERR_ATTR_SYNTAX_ATTRSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID.get(
+                            valueStr, (pos-1)));
             return false;
           }
           else
@@ -322,8 +321,9 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          invalidReason.append(getMessage(msgID, valueStr, c, (pos-1)));
+          invalidReason.append(
+                  ERR_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID.get(
+                          valueStr, String.valueOf(c), (pos-1)));
           return false;
         }
         else
@@ -346,8 +346,10 @@
         else
         {
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_IN_STRING_OID;
-          invalidReason.append(getMessage(msgID, valueStr, c, (pos-1)));
+
+          invalidReason.append(
+                  ERR_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_IN_STRING_OID.get(
+                          valueStr, String.valueOf(c), (pos-1)));
           return false;
         }
       }
@@ -359,8 +361,8 @@
     String oid;
     if (pos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE;
-      invalidReason.append(getMessage(msgID, valueStr));
+      invalidReason.append(ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(
+              valueStr));
       return false;
     }
     else
@@ -379,8 +381,8 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE;
-      invalidReason.append(getMessage(msgID, valueStr));
+      invalidReason.append(ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(
+              valueStr));
       return false;
     }
 
@@ -391,8 +393,9 @@
     {
       if (pos < length)
       {
-        int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS;
-        invalidReason.append(getMessage(msgID, valueStr, (pos-1)));
+        invalidReason.append(
+                ERR_ATTR_SYNTAX_ATTRSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS.get(
+                        valueStr, (pos-1)));
         return false;
       }
 
@@ -415,16 +418,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_TOKEN;
-      invalidReason.append(getMessage(msgID, valueStr, pos,
-                                      getExceptionMessage(e)));
+      invalidReason.append(
+              ERR_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_TOKEN.get(
+                      valueStr, pos, getExceptionMessage(e)));
       return false;
     }
 
     if (! tokenName.equals("desc"))
     {
-      int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_TOKEN_NOT_DESC;
-      invalidReason.append(getMessage(msgID, valueStr, tokenName));
+      invalidReason.append(ERR_ATTR_SYNTAX_ATTRSYNTAX_TOKEN_NOT_DESC.get(
+              valueStr, tokenName));
       return false;
     }
 
@@ -442,9 +445,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_VALUE;
-      invalidReason.append(getMessage(msgID, valueStr, pos,
-                                      getExceptionMessage(e)));
+      invalidReason.append(
+              ERR_ATTR_SYNTAX_ATTRSYNTAX_CANNOT_READ_DESC_VALUE.get(
+                      valueStr, pos, getExceptionMessage(e)));
       return false;
     }
     //Check if we have a RFC 4512 style extension.
@@ -457,8 +460,9 @@
           {
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
-            int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_INVALID_EXTENSION;
-            invalidReason.append(getMessage(msgID, getExceptionMessage(e)));
+            invalidReason.append(
+                    ERR_ATTR_SYNTAX_ATTRSYNTAX_INVALID_EXTENSION.get(
+                            getExceptionMessage(e)));
             return false;
         }
     }
@@ -467,8 +471,10 @@
     // be anything after it (except maybe some spaces).
     if ((c = valueStr.charAt(pos++)) != ')')
     {
-      int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_CLOSE_PARENTHESIS;
-      invalidReason.append(getMessage(msgID, valueStr, pos, c));
+
+      invalidReason.append(
+              ERR_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_CLOSE_PARENTHESIS.get(
+                      valueStr, pos, String.valueOf(c)));
       return false;
     }
 
@@ -477,8 +483,10 @@
       c = valueStr.charAt(pos++);
       if (c != ' ')
       {
-        int msgID = MSGID_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_AFTER_CLOSE;
-        invalidReason.append(getMessage(msgID, valueStr, c, pos));
+
+        invalidReason.append(
+                ERR_ATTR_SYNTAX_ATTRSYNTAX_ILLEGAL_CHAR_AFTER_CLOSE.get(
+                        valueStr, String.valueOf(c), pos));
         return false;
       }
     }
@@ -520,10 +528,10 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -579,20 +587,20 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = WARN_ATTR_SYNTAX_ATTRSYNTAX_EXPECTED_QUOTE_AT_POS.get(
+          valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -616,10 +624,10 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -662,21 +670,21 @@
           String tokenName = tokenNameBuffer.toString();
           if((tokenName.length() <= 2) || (!tokenName.startsWith("X-")))
           {
-              int    msgID  =
-                  MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER;
-              String message = getMessage(msgID, valueStr);
+              Message message =
+                ERR_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER.get(
+                        valueStr, pos);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                      message, msgID);
+                      message);
           }
           String xstring = tokenName.substring(2);
           //Only allow a-z,A-Z,-,_ characters after X-
           if(xstring.split("^[A-Za-z_-]+").length > 0)
           {
-              int    msgID   =
-                  MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER;
-              String message = getMessage(msgID, valueStr);
+              Message message =
+                ERR_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER.get(
+                        valueStr, pos);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                      message, msgID);
+                      message);
           }
           if((c=valueStr.charAt(pos)) == '\'')
           {
@@ -692,18 +700,18 @@
               pos++;
           } else
           {
-              int    msgID   =
-                  MSGID_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER;
-              String message = getMessage(msgID, valueStr);
+              Message message =
+                ERR_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER.get(
+                        valueStr, pos);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                      message, msgID);
+                      message);
           }
           if (pos >= len)
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE;
-            String message = getMessage(msgID, valueStr);
+            Message message =
+                ERR_ATTR_SYNTAX_ATTRSYNTAX_TRUNCATED_VALUE.get(valueStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           if(valueStr.charAt(pos) == ')')
               break;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleSyntax.java
index 413ded5..08e4c2d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -41,16 +42,16 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
 
 import org.opends.server.types.DebugLogLevel;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -105,27 +106,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_NAME));
     }
   }
 
@@ -241,7 +239,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Get string representations of the provided value using the provided form
     // and with all lowercase characters.
@@ -262,8 +260,8 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      int msgID = MSGID_ATTR_SYNTAX_MR_EMPTY_VALUE;
-      invalidReason.append(getMessage(msgID));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_MR_EMPTY_VALUE.get());
       return false;
     }
 
@@ -273,8 +271,9 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      int msgID = MSGID_ATTR_SYNTAX_MR_EXPECTED_OPEN_PARENTHESIS;
-      invalidReason.append(getMessage(msgID, valueStr, (pos-1), c));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_MR_EXPECTED_OPEN_PARENTHESIS.get(
+              valueStr, (pos-1), String.valueOf(c)));
       return false;
     }
 
@@ -289,8 +288,8 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int msgID = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-      invalidReason.append(getMessage(msgID, valueStr));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr));
       return false;
     }
 
@@ -311,8 +310,10 @@
         {
           if (lastWasPeriod)
           {
-            int msgID = MSGID_ATTR_SYNTAX_MR_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            invalidReason.append(getMessage(msgID, valueStr, (pos-1)));
+
+            invalidReason.append(
+                    ERR_ATTR_SYNTAX_MR_DOUBLE_PERIOD_IN_NUMERIC_OID.get(
+                            valueStr, (pos-1)));
             return false;
           }
           else
@@ -323,8 +324,10 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_MR_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          invalidReason.append(getMessage(msgID, valueStr, c, (pos-1)));
+
+          invalidReason.append(
+                  ERR_ATTR_SYNTAX_MR_ILLEGAL_CHAR_IN_NUMERIC_OID.get(
+                          valueStr, String.valueOf(c), (pos-1)));
           return false;
         }
         else
@@ -347,8 +350,10 @@
         else
         {
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_MR_ILLEGAL_CHAR_IN_STRING_OID;
-          invalidReason.append(getMessage(msgID, valueStr, c, (pos-1)));
+
+          invalidReason.append(
+                  ERR_ATTR_SYNTAX_MR_ILLEGAL_CHAR_IN_STRING_OID.get(
+                          valueStr, String.valueOf(c), (pos-1)));
           return false;
         }
       }
@@ -360,8 +365,8 @@
     String oid;
     if (pos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-      invalidReason.append(getMessage(msgID, valueStr));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr));
       return false;
     }
     else
@@ -380,8 +385,8 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int msgID = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-      invalidReason.append(getMessage(msgID, valueStr));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr));
       return false;
     }
 
@@ -415,7 +420,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        invalidReason.append(de.getErrorMessage());
+        invalidReason.append(de.getMessageObject());
         return false;
       }
 
@@ -426,8 +431,10 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          int msgID = MSGID_ATTR_SYNTAX_MR_UNEXPECTED_CLOSE_PARENTHESIS;
-          invalidReason.append(getMessage(msgID, valueStr, (pos-1)));
+
+          invalidReason.append(
+                  ERR_ATTR_SYNTAX_MR_UNEXPECTED_CLOSE_PARENTHESIS.get(
+                          valueStr, (pos-1)));
           return false;
         }
 
@@ -456,7 +463,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            invalidReason.append(de.getErrorMessage());
+            invalidReason.append(de.getMessageObject());
             return false;
           }
 
@@ -479,7 +486,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            invalidReason.append(de.getErrorMessage());
+            invalidReason.append(de.getMessageObject());
             return false;
           }
 
@@ -516,7 +523,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                invalidReason.append(de.getErrorMessage());
+                invalidReason.append(de.getMessageObject());
                 return false;
               }
 
@@ -527,8 +534,9 @@
         else
         {
           // This is an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_MR_ILLEGAL_CHAR;
-          invalidReason.append(getMessage(msgID, valueStr, c, (pos-1)));
+
+          invalidReason.append(ERR_ATTR_SYNTAX_MR_ILLEGAL_CHAR.get(
+                  valueStr, String.valueOf(c), (pos-1)));
           return false;
         }
       }
@@ -549,7 +557,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          invalidReason.append(de.getErrorMessage());
+          invalidReason.append(de.getMessageObject());
           return false;
         }
       }
@@ -575,7 +583,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          invalidReason.append(de.getErrorMessage());
+          invalidReason.append(de.getMessageObject());
           return false;
         }
 
@@ -585,10 +593,9 @@
                                                     false);
         if (syntax == null)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_MR_UNKNOWN_SYNTAX;
-          String message = getMessage(msgID, valueStr, oidBuffer.toString());
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                   message, msgID);
+          Message message = ERR_ATTR_SYNTAX_MR_UNKNOWN_SYNTAX.get(
+              valueStr, oidBuffer.toString());
+          logError(message);
 
           syntax = DirectoryServer.getDefaultAttributeSyntax();
         }
@@ -613,7 +620,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          invalidReason.append(de.getErrorMessage());
+          invalidReason.append(de.getMessageObject());
           return false;
         }
 
@@ -625,8 +632,8 @@
     // Make sure that a syntax was specified.
     if (syntax == null)
     {
-      int msgID = MSGID_ATTR_SYNTAX_MR_NO_SYNTAX;
-      invalidReason.append(getMessage(msgID, valueStr));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_MR_NO_SYNTAX.get(valueStr));
       return false;
     }
 
@@ -667,10 +674,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -726,20 +732,20 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MR_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_MR_EXPECTED_QUOTE_AT_POS.get(
+                  valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -763,10 +769,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -813,20 +818,20 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MR_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_MR_EXPECTED_QUOTE_AT_POS.get(
+                  valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -851,10 +856,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -894,10 +898,10 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -914,11 +918,11 @@
         {
           if (lastWasPeriod)
           {
-            int msgID =
-                 MSGID_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, lowerStr, (startPos-1));
+            Message message =
+                ERR_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                  get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -940,10 +944,11 @@
           }
 
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message message =
+                  ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID.get(
+                          lowerStr, String.valueOf(c), (startPos - 1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -977,19 +982,21 @@
           }
 
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message message =
+                  ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID.
+                          get(lowerStr, String.valueOf(c), (startPos - 1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
     else
     {
-      int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR;
-      String message = getMessage(msgID, lowerStr, c, startPos);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+                  lowerStr, String.valueOf(c), startPos);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1003,10 +1010,10 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1046,10 +1053,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1081,10 +1087,9 @@
 
         if (startPos >= length)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-          String message = getMessage(msgID, valueStr);
+          Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -1096,10 +1101,11 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_MR_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, startPos);
+          Message message =
+              ERR_ATTR_SYNTAX_MR_ILLEGAL_CHAR.get(
+                      valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -1130,10 +1136,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MR_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java
index e12647f..665bd17 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -53,8 +54,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -110,30 +111,27 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE;
-      String message = getMessage(msgID, EMR_CASE_IGNORE_OID,
-                                  SYNTAX_MATCHING_RULE_USE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_USE_NAME);
+      throw new InitializationException(message);
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE;
-      String message = getMessage(msgID, OMR_CASE_IGNORE_OID,
-                                  SYNTAX_MATCHING_RULE_USE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_USE_NAME);
+      throw new InitializationException(message);
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE;
-      String message = getMessage(msgID, SMR_CASE_IGNORE_OID,
-                                  SYNTAX_MATCHING_RULE_USE_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_USE_NAME);
+      throw new InitializationException(message);
     }
   }
 
@@ -214,7 +212,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // We'll use the decodeMatchingRuleUse method to determine if the value is
     // acceptable.
@@ -230,7 +228,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      invalidReason.append(de.getErrorMessage());
+      invalidReason.append(de.getMessageObject());
       return false;
     }
   }
@@ -284,10 +282,9 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_EMPTY_VALUE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_EMPTY_VALUE.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -296,10 +293,10 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_EXPECTED_OPEN_PARENTHESIS;
-      String message = getMessage(msgID, valueStr, (pos-1), c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_EXPECTED_OPEN_PARENTHESIS.get(
+          valueStr, (pos-1), String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -313,10 +310,9 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -336,10 +332,11 @@
         {
           if (lastWasPeriod)
           {
-            int msgID = MSGID_ATTR_SYNTAX_MRUSE_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, valueStr, (pos-1));
+            Message message =
+                ERR_ATTR_SYNTAX_MRUSE_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                  get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -349,10 +346,10 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message 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, msgID);
+                                       message);
         }
         else
         {
@@ -374,10 +371,10 @@
         else
         {
           // This must have been an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message 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, msgID);
+                                       message);
         }
       }
     }
@@ -388,10 +385,9 @@
     String oid;
     if (pos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
     else
     {
@@ -405,10 +401,10 @@
     {
       // This is bad because the matching rule use is associated with a matching
       // rule that we don't know anything about.
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_UNKNOWN_MATCHING_RULE;
-      String message = getMessage(msgID, valueStr, oid);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_MRUSE_UNKNOWN_MATCHING_RULE.get(valueStr, oid);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -422,10 +418,9 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -454,10 +449,10 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_UNEXPECTED_CLOSE_PARENTHESIS;
-          String message = getMessage(msgID, valueStr, (pos-1));
+          Message message = ERR_ATTR_SYNTAX_MRUSE_UNEXPECTED_CLOSE_PARENTHESIS.
+              get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         break;
@@ -512,10 +507,11 @@
         else
         {
           // This is an illegal character.
-          int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR.get(
+                      valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
       else if (lowerTokenName.equals("desc"))
@@ -561,10 +557,10 @@
               }
               else
               {
-                int msgID = MSGID_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR;
-                String message = getMessage(msgID, oid, woidBuffer.toString());
+                Message message = ERR_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR.get(
+                    oid, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                             message, msgID);
+                                             message);
               }
             }
 
@@ -581,10 +577,11 @@
             }
             else if (c != '$')
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message =
+                  ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR.get(
+                          valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -605,10 +602,10 @@
             }
             else
             {
-              int msgID = MSGID_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR;
-              String message = getMessage(msgID, oid, woidBuffer.toString());
+              Message message = ERR_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR.get(
+                  oid, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
 
@@ -633,10 +630,9 @@
     // Make sure that the set of attributes was defined.
     if (attributes == null)
     {
-      int msgID = MSGID_ATTR_SYNTAX_MRUSE_NO_ATTR;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_NO_ATTR.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -677,10 +673,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -736,20 +731,19 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS.get(
+          valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -773,10 +767,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -823,20 +816,19 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS.get(
+          valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -861,10 +853,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -904,10 +895,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -924,10 +914,11 @@
         {
           if (lastWasPeriod)
           {
-            int msgID = MSGID_ATTR_SYNTAX_MRUSE_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, lowerStr, (startPos-1));
+            Message message =
+                ERR_ATTR_SYNTAX_MRUSE_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                  get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -949,10 +940,10 @@
           }
 
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message 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, msgID);
+                                       message);
         }
         else
         {
@@ -986,19 +977,20 @@
           }
 
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message 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, msgID);
+                                       message);
         }
       }
     }
     else
     {
-      int msgID = MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR;
-      String message = getMessage(msgID, lowerStr, c, startPos);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR.get(
+                  lowerStr, String.valueOf(c), startPos);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1012,10 +1004,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1055,10 +1046,9 @@
 
     if (startPos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1090,10 +1080,9 @@
 
         if (startPos >= length)
         {
-          int msgID = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-          String message = getMessage(msgID, valueStr);
+          Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -1105,10 +1094,11 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, startPos);
+          Message message =
+              ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR.get(
+                      valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -1139,10 +1129,9 @@
 
     if (startPos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java
index 197a691..c2c1aec 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java
@@ -38,20 +38,19 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.*;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
-
 /**
  * This class implements the name and optional UID attribute syntax, which holds
  * values consisting of a DN, optionally followed by an octothorpe (#) and a bit
@@ -98,18 +97,16 @@
          DirectoryServer.getEqualityMatchingRule(EMR_UNIQUE_MEMBER_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_UNIQUE_MEMBER_OID, SYNTAX_NAME_AND_OPTIONAL_UID_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_UNIQUE_MEMBER_OID, SYNTAX_NAME_AND_OPTIONAL_UID_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_NAME_AND_OPTIONAL_UID_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_NAME_AND_OPTIONAL_UID_NAME));
     }
   }
 
@@ -226,7 +223,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     String valueString = value.stringValue().trim();
     int    valueLength = valueString.length();
@@ -260,9 +257,9 @@
 
       // We couldn't normalize the DN for some reason.  The value cannot be
       // acceptable.
-      int msgID = MSGID_ATTR_SYNTAX_NAMEANDUID_INVALID_DN;
-      invalidReason.append(getMessage(msgID, valueString,
-                                      getExceptionMessage(e)));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_NAMEANDUID_INVALID_DN.get(
+              valueString, getExceptionMessage(e)));
       return false;
     }
 
@@ -278,8 +275,10 @@
         char c = valueString.charAt(i);
         if (! ((c == '0') || (c == '1')))
         {
-          int msgID = MSGID_ATTR_SYNTAX_NAMEANDUID_ILLEGAL_BINARY_DIGIT;
-          invalidReason.append(getMessage(msgID, valueString, c, i));
+
+          invalidReason.append(
+                  ERR_ATTR_SYNTAX_NAMEANDUID_ILLEGAL_BINARY_DIGIT.get(
+                          valueString, String.valueOf(c), i));
           return false;
         }
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/NameFormSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/NameFormSyntax.java
index 231f395..495b1d7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/NameFormSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/NameFormSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -54,8 +55,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -110,30 +111,27 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE;
-      String message = getMessage(msgID, EMR_CASE_IGNORE_OID,
-                                  SYNTAX_NAME_FORM_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_NAME_FORM_NAME);
+      throw new InitializationException(message);
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE;
-      String message = getMessage(msgID, OMR_CASE_IGNORE_OID,
-                                  SYNTAX_NAME_FORM_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_NAME_FORM_NAME);
+      throw new InitializationException(message);
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE;
-      String message = getMessage(msgID, SMR_CASE_IGNORE_OID,
-                                  SYNTAX_NAME_FORM_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_NAME_FORM_NAME);
+      throw new InitializationException(message);
     }
   }
 
@@ -214,7 +212,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // We'll use the decodeNameForm method to determine if the value is
     // acceptable.
@@ -230,7 +228,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      invalidReason.append(de.getErrorMessage());
+      invalidReason.append(de.getMessageObject());
       return false;
     }
   }
@@ -283,10 +281,9 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_EMPTY_VALUE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_EMPTY_VALUE.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -295,10 +292,10 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_EXPECTED_OPEN_PARENTHESIS;
-      String message = getMessage(msgID, valueStr, (pos-1), c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_OPEN_PARENTHESIS.get(
+          valueStr, (pos-1), c);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -312,10 +309,9 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -335,11 +331,11 @@
         {
           if (lastWasPeriod)
           {
-            int msgID =
-                 MSGID_ATTR_SYNTAX_NAME_FORM_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, valueStr, (pos-1));
+            Message message =
+                ERR_ATTR_SYNTAX_NAME_FORM_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                  get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -349,10 +345,11 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_NUMERIC_OID.
+                get(valueStr, c, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -374,10 +371,11 @@
         else
         {
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_STRING_OID.
+                get(valueStr, c, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
@@ -388,10 +386,9 @@
     String oid;
     if (pos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
     else
     {
@@ -409,10 +406,9 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -446,10 +442,11 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_UNEXPECTED_CLOSE_PARENTHESIS;
-          String message = getMessage(msgID, valueStr, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_NAME_FORM_UNEXPECTED_CLOSE_PARENTHESIS.
+                get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         break;
@@ -504,10 +501,10 @@
         else
         {
           // This is an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(valueStr, c, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
       else if (lowerTokenName.equals("desc"))
@@ -542,11 +539,11 @@
           }
           else
           {
-            int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_STRUCTURAL_CLASS;
-            String message = getMessage(msgID, String.valueOf(oid),
-                                        String.valueOf(woidBuffer));
+            Message message =
+                ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_STRUCTURAL_CLASS.
+                  get(String.valueOf(oid), String.valueOf(woidBuffer));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
         }
         else if (structuralClass.getObjectClassType() !=
@@ -554,15 +551,13 @@
         {
           // This is bad because the associated structural class type is not
           // structural.
-          int msgID =
-               MSGID_ATTR_SYNTAX_NAME_FORM_STRUCTURAL_CLASS_NOT_STRUCTURAL;
-          String message =
-               getMessage(msgID, String.valueOf(oid),
-                          String.valueOf(woidBuffer),
-                          structuralClass.getNameOrOID(),
-                          String.valueOf(structuralClass.getObjectClassType()));
-          throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                       msgID);
+          Message message =
+              ERR_ATTR_SYNTAX_NAME_FORM_STRUCTURAL_CLASS_NOT_STRUCTURAL.
+                get(String.valueOf(oid), String.valueOf(woidBuffer),
+                    structuralClass.getNameOrOID(),
+                    String.valueOf(structuralClass.getObjectClassType()));
+          throw new DirectoryException(
+                  ResultCode.CONSTRAINT_VIOLATION, message);
         }
       }
       else if (lowerTokenName.equals("must"))
@@ -593,10 +588,11 @@
               }
               else
               {
-                int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_REQUIRED_ATTR;
-                String message = getMessage(msgID, oid, woidBuffer.toString());
+                Message message =
+                    ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_REQUIRED_ATTR.
+                      get(oid, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                             message, msgID);
+                                             message);
               }
             }
 
@@ -613,10 +609,10 @@
             }
             else if (c != '$')
             {
-              int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message = ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(
+                  valueStr, c, (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -637,10 +633,10 @@
             }
             else
             {
-              int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_REQUIRED_ATTR;
-              String message = getMessage(msgID, oid, woidBuffer.toString());
+              Message message = ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_REQUIRED_ATTR.
+                  get(oid, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
 
@@ -677,10 +673,11 @@
               }
               else
               {
-                int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_OPTIONAL_ATTR;
-                String message = getMessage(msgID, oid, woidBuffer.toString());
+                Message message =
+                    ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_OPTIONAL_ATTR.
+                      get(oid, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                             message, msgID);
+                                             message);
               }
             }
 
@@ -697,10 +694,10 @@
             }
             else if (c != '$')
             {
-              int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message = ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(
+                  valueStr, c, (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -721,10 +718,10 @@
             }
             else
             {
-              int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_UNKNOWN_OPTIONAL_ATTR;
-              String message = getMessage(msgID, oid, woidBuffer.toString());
+              Message message = ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_OPTIONAL_ATTR.
+                  get(oid, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
 
@@ -750,10 +747,10 @@
     // be valid.
     if (structuralClass == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_NO_STRUCTURAL_CLASS;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_NAME_FORM_NO_STRUCTURAL_CLASS.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -793,10 +790,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -852,20 +848,19 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS.get(
+          valueStr, startPos, c);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -889,10 +884,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -939,20 +933,19 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS.get(
+          valueStr, startPos, c);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -977,10 +970,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1020,10 +1012,9 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1040,11 +1031,11 @@
         {
           if (lastWasPeriod)
           {
-            int msgID =
-                 MSGID_ATTR_SYNTAX_NAME_FORM_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, lowerStr, (startPos-1));
+            Message message =
+                ERR_ATTR_SYNTAX_NAME_FORM_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                  get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -1066,10 +1057,11 @@
           }
 
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_NUMERIC_OID.
+                get(lowerStr, c, (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -1103,19 +1095,20 @@
           }
 
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_STRING_OID.
+                get(lowerStr, c, (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
     else
     {
-      int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR;
-      String message = getMessage(msgID, lowerStr, c, startPos);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(lowerStr, c, startPos);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1129,10 +1122,9 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1172,10 +1164,9 @@
 
     if (startPos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1207,10 +1198,10 @@
 
         if (startPos >= length)
         {
-          int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-          String message = getMessage(msgID, valueStr);
+          Message message =
+              ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -1222,10 +1213,10 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, startPos);
+          Message message =
+              ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(valueStr, c, startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -1256,10 +1247,9 @@
 
     if (startPos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java
index 8d43e50..70abba3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -37,17 +38,13 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
-
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -160,19 +157,19 @@
       else if (c != ' ')
       {
         // This is an illegal character.  Either log it or reject it.
-        int    msgID   = MSGID_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR;
-        String message = getMessage(msgID, valueString, c, i);
+
+        Message message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
+                valueString, String.valueOf(c), i);
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
             if (! logged)
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              ErrorLogger.logError(message);
               logged = true;
             }
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringOrderingMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringOrderingMatchingRule.java
index a0880f6..0deb480 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringOrderingMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringOrderingMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -35,17 +36,13 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
-
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -167,19 +164,19 @@
       else if (c != ' ')
       {
         // This is an illegal character.  Either log it or reject it.
-        int    msgID   = MSGID_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR;
-        String message = getMessage(msgID, valueString, c, i);
+
+        Message message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
+                valueString, String.valueOf(c), i);
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
             if (! logged)
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              ErrorLogger.logError(message);
               logged = true;
             }
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringSubstringMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringSubstringMatchingRule.java
index 38c8e4a..9b9bd42 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringSubstringMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringSubstringMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -37,17 +38,13 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
-
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -159,19 +156,19 @@
       else if (c != ' ')
       {
         // This is an illegal character.  Either log it or reject it.
-        int    msgID   = MSGID_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR;
-        String message = getMessage(msgID, valueString, c, i);
+
+        Message message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
+                valueString, String.valueOf(c), i);
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
             if (! logged)
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              ErrorLogger.logError(message);
               logged = true;
             }
         }
@@ -212,19 +209,19 @@
       else if (c != ' ')
       {
         // This is an illegal character.  Either log it or reject it.
-        int    msgID   = MSGID_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR;
-        String message = getMessage(msgID, valueString, c, i);
+
+        Message message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
+                valueString, String.valueOf(c), i);
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           case WARN:
             if (! logged)
             {
-              logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                       message, msgID);
+              ErrorLogger.logError(message);
               logged = true;
             }
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringSyntax.java
index 0707a27..a4af9f8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/NumericStringSyntax.java
@@ -37,18 +37,17 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
-
-/**
+/**                                               O
  * This class implements the numeric string attribute syntax, which may be hold
  * one or more numeric digits and/or spaces.  Equality, ordering, and substring
  * matching will be allowed by default.
@@ -90,27 +89,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_NUMERIC_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_NUMERIC_STRING_OID, SYNTAX_NUMERIC_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_NUMERIC_STRING_OID, SYNTAX_NUMERIC_STRING_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_NUMERIC_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_NUMERIC_STRING_OID, SYNTAX_NUMERIC_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_NUMERIC_STRING_OID, SYNTAX_NUMERIC_STRING_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_EXACT_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_NUMERIC_STRING_OID, SYNTAX_NUMERIC_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_NUMERIC_STRING_OID, SYNTAX_NUMERIC_STRING_NAME));
     }
   }
 
@@ -226,7 +222,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     String valueString = value.stringValue();
     int    length      = valueString.length();
@@ -235,8 +231,8 @@
     // It must have at least one digit or space.
     if (length == 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_NUMERIC_STRING_EMPTY_VALUE;
-      invalidReason.append(getMessage(msgID));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_NUMERIC_STRING_EMPTY_VALUE.get());
       return false;
     }
 
@@ -248,8 +244,9 @@
       char c = valueString.charAt(i);
       if (! (isDigit(c) || (c == ' ')))
       {
-        int msgID = MSGID_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR;
-        invalidReason.append(getMessage(msgID, valueString, c, i));
+
+        invalidReason.append(WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
+                valueString, String.valueOf(c), i));
         return false;
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/OIDSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/OIDSyntax.java
index 513b6cc..8801146 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/OIDSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/OIDSyntax.java
@@ -37,16 +37,16 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
-
 /**
  * This class defines the OID syntax, which holds either an identifier name or
  * a numeric OID.  Equality and substring matching will be allowed by default.
@@ -85,18 +85,16 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OID_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OID_OID, SYNTAX_OID_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OID_OID, SYNTAX_OID_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_OID_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_OID_NAME));
     }
   }
 
@@ -213,11 +211,11 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     String lowerValue = toLowerCase(value.stringValue());
     return isValidSchemaElement(lowerValue, 0, lowerValue.length(),
-                                invalidReason);
+            invalidReason);
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/ObjectClassSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/ObjectClassSyntax.java
index 1793f94..87761fa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/ObjectClassSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/ObjectClassSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -55,8 +56,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -112,30 +113,27 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE;
-      String message = getMessage(msgID, EMR_CASE_IGNORE_OID,
-                                  SYNTAX_OBJECTCLASS_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_OBJECTCLASS_NAME);
+      throw new InitializationException(message);
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE;
-      String message = getMessage(msgID, OMR_CASE_IGNORE_OID,
-                                  SYNTAX_OBJECTCLASS_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_OBJECTCLASS_NAME);
+      throw new InitializationException(message);
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE;
-      String message = getMessage(msgID, SMR_CASE_IGNORE_OID,
-                                  SYNTAX_OBJECTCLASS_NAME);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_OBJECTCLASS_NAME);
+      throw new InitializationException(message);
     }
   }
 
@@ -216,7 +214,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // We'll use the decodeObjectClass method to determine if the value is
     // acceptable.
@@ -232,7 +230,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      invalidReason.append(de.getErrorMessage());
+      invalidReason.append(de.getMessageObject());
       return false;
     }
   }
@@ -285,10 +283,9 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_EMPTY_VALUE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_EMPTY_VALUE.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -297,10 +294,10 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_OPEN_PARENTHESIS;
-      String message = getMessage(msgID, valueStr, (pos-1), c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_OPEN_PARENTHESIS.
+          get(valueStr, (pos-1), String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -314,10 +311,10 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -337,11 +334,11 @@
         {
           if (lastWasPeriod)
           {
-            int msgID =
-                 MSGID_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, valueStr, (pos-1));
+            Message message =
+                ERR_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                  get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -351,10 +348,11 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID.
+                get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -376,10 +374,11 @@
         else
         {
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID.
+                get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
@@ -390,10 +389,10 @@
     String oid;
     if (pos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
     else
     {
@@ -411,10 +410,10 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -449,11 +448,11 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          int msgID =
-               MSGID_ATTR_SYNTAX_OBJECTCLASS_UNEXPECTED_CLOSE_PARENTHESIS;
-          String message = getMessage(msgID, valueStr, (pos-1));
+          Message message =
+              ERR_ATTR_SYNTAX_OBJECTCLASS_UNEXPECTED_CLOSE_PARENTHESIS.
+                get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         break;
@@ -510,10 +509,10 @@
         else
         {
           // This is an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, (pos-1));
+          Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+              valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
       else if (lowerTokenName.equals("desc"))
@@ -548,11 +547,11 @@
           {
             // This is bad because we don't know what the superior objectclass
             // is so we can't base this objectclass on it.
-            int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_SUPERIOR_CLASS;
-            String message = getMessage(msgID, String.valueOf(oid),
-                                        String.valueOf(woidBuffer));
+            Message message =
+                WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_SUPERIOR_CLASS.
+                  get(String.valueOf(oid), String.valueOf(woidBuffer));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
         }
 
@@ -611,10 +610,11 @@
               {
                 // This isn't good because it means that the objectclass
                 // requires an attribute type that we don't know anything about.
-                int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_REQUIRED_ATTR;
-                String message = getMessage(msgID, oid, woidBuffer.toString());
+                Message message =
+                    WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_REQUIRED_ATTR.
+                      get(oid, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                             message, msgID);
+                                             message);
               }
             }
 
@@ -631,10 +631,10 @@
             }
             else if (c != '$')
             {
-              int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+                  valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -655,10 +655,11 @@
             {
               // This isn't good because it means that the objectclass requires
               // an attribute type that we don't know anything about.
-              int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_REQUIRED_ATTR;
-              String message = getMessage(msgID, oid, woidBuffer.toString());
+              Message message =
+                  WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_REQUIRED_ATTR.
+                    get(oid, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
 
@@ -695,10 +696,11 @@
               {
                 // This isn't good because it means that the objectclass allows
                 // an attribute type that we don't know anything about.
-                int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_OPTIONAL_ATTR;
-                String message = getMessage(msgID, oid, woidBuffer.toString());
+                Message message =
+                  WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_OPTIONAL_ATTR.
+                      get(oid, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                             message, msgID);
+                                             message);
               }
             }
 
@@ -715,10 +717,10 @@
             }
             else if (c != '$')
             {
-              int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR;
-              String message = getMessage(msgID, valueStr, c, (pos-1));
+              Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+                  valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             }
           }
         }
@@ -739,10 +741,11 @@
             {
               // This isn't good because it means that the objectclass allows an
               // attribute type that we don't know anything about.
-              int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_OPTIONAL_ATTR;
-              String message = getMessage(msgID, oid, woidBuffer.toString());
+              Message message =
+                WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_OPTIONAL_ATTR.
+                    get(oid, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                           message, msgID);
+                                           message);
             }
           }
 
@@ -779,12 +782,12 @@
           // Abstract classes may only inherit from other abstract classes.
           if (superiorType != ObjectClassType.ABSTRACT)
           {
-            int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE;
-            String message = getMessage(msgID, oid, objectClassType.toString(),
-                                        superiorType.toString(),
-                                        superiorClass.getNameOrOID());
+            Message message =
+              WARN_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE.
+                  get(oid, objectClassType.toString(), superiorType.toString(),
+                      superiorClass.getNameOrOID());
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
           break;
 
@@ -794,12 +797,12 @@
           if ((superiorType != ObjectClassType.ABSTRACT) &&
               (superiorType != ObjectClassType.AUXILIARY))
           {
-            int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE;
-            String message = getMessage(msgID, oid, objectClassType.toString(),
-                                        superiorType.toString(),
-                                        superiorClass.getNameOrOID());
+            Message message =
+              WARN_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE.
+                  get(oid, objectClassType.toString(), superiorType.toString(),
+                      superiorClass.getNameOrOID());
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
           break;
 
@@ -809,23 +812,23 @@
           if ((superiorType != ObjectClassType.ABSTRACT) &&
               (superiorType != ObjectClassType.STRUCTURAL))
           {
-            int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE;
-            String message = getMessage(msgID, oid, objectClassType.toString(),
-                                        superiorType.toString(),
-                                        superiorClass.getNameOrOID());
+            Message message =
+              WARN_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE.
+                  get(oid, objectClassType.toString(), superiorType.toString(),
+                      superiorClass.getNameOrOID());
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
 
           // Structural classes must have the "top" objectclass somewhere in the
           // superior chain.
           if (! superiorChainIncludesTop(superiorClass))
           {
-            int msgID =
-                 MSGID_ATTR_SYNTAX_OBJECTCLASS_STRUCTURAL_SUPERIOR_NOT_TOP;
-            String message = getMessage(msgID, oid);
+            Message message =
+              WARN_ATTR_SYNTAX_OBJECTCLASS_STRUCTURAL_SUPERIOR_NOT_TOP.
+                  get(oid);
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
           break;
       }
@@ -870,10 +873,10 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -929,20 +932,20 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = WARN_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS.get(
+          valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -966,10 +969,10 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1016,20 +1019,20 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The next character must be a single quote.
     if (c != '\'')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS;
-      String message = getMessage(msgID, valueStr, startPos, c);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = WARN_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS.get(
+          valueStr, startPos, String.valueOf(c));
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1054,10 +1057,10 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1097,10 +1100,10 @@
 
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1117,11 +1120,11 @@
         {
           if (lastWasPeriod)
           {
-            int msgID =
-                 MSGID_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID;
-            String message = getMessage(msgID, lowerStr, (startPos-1));
+            Message message =
+              ERR_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID.
+                  get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -1143,10 +1146,11 @@
           }
 
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message message =
+            ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID.
+                get(lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -1180,19 +1184,21 @@
           }
 
           // This must have been an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID;
-          String message = getMessage(msgID, lowerStr, c, (startPos-1));
+          Message message =
+            ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID.
+                get(lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
     else
     {
-      int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR;
-      String message = getMessage(msgID, lowerStr, c, startPos);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+                  lowerStr, String.valueOf(c), startPos);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1206,10 +1212,10 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, lowerStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1249,10 +1255,10 @@
 
     if (startPos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -1284,10 +1290,10 @@
 
         if (startPos >= length)
         {
-          int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-          String message = getMessage(msgID, valueStr);
+          Message message =
+              ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -1299,10 +1305,10 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, startPos);
+          Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+              valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -1333,10 +1339,10 @@
 
     if (startPos >= length)
     {
-      int msgID = MSGID_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE;
-      String message = getMessage(msgID, valueStr);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message =
+          ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/ObjectIdentifierEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/ObjectIdentifierEqualityMatchingRule.java
index a58ef14..85f636d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/ObjectIdentifierEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/ObjectIdentifierEqualityMatchingRule.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import java.util.Arrays;
@@ -39,19 +40,15 @@
 import org.opends.server.types. AttributeType;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.NameForm;
 import org.opends.server.types.ObjectClass;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
-
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -200,7 +197,7 @@
     switch (DirectoryServer.getSyntaxEnforcementPolicy())
     {
       case REJECT:
-        StringBuilder invalidReason = new StringBuilder();
+        MessageBuilder invalidReason = new MessageBuilder();
         if (isValidSchemaElement(lowerValue, 0, lowerValue.length(),
                                 invalidReason))
         {
@@ -208,23 +205,20 @@
         }
         else
         {
-          int msgID = MSGID_ATTR_SYNTAX_OID_INVALID_VALUE;
-          String message = getMessage(msgID, lowerValue,
-                                      invalidReason.toString());
+          Message message = ERR_ATTR_SYNTAX_OID_INVALID_VALUE.get(
+              lowerValue, invalidReason.toString());
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
       case WARN:
-        invalidReason = new StringBuilder();
+        invalidReason = new MessageBuilder();
         if (! isValidSchemaElement(lowerValue, 0, lowerValue.length(),
                                    invalidReason))
         {
-          int msgID = MSGID_ATTR_SYNTAX_OID_INVALID_VALUE;
-          String message = getMessage(msgID, lowerValue,
-                                      invalidReason.toString());
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_WARNING,
-                   message, msgID);
+          Message message = ERR_ATTR_SYNTAX_OID_INVALID_VALUE.get(
+              lowerValue, invalidReason.toString());
+          ErrorLogger.logError(message);
         }
 
         return new ASN1OctetString(lowerValue);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/OctetStringSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/OctetStringSyntax.java
index f466517..2ab9bdc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/OctetStringSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/OctetStringSyntax.java
@@ -37,15 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the octet string attribute syntax, which is equivalent
  * to the binary syntax and should be considered a replacement for it.
@@ -88,27 +88,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OCTET_STRING_OID, SYNTAX_OCTET_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_OCTET_STRING_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_OCTET_STRING_OID, SYNTAX_OCTET_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_OCTET_STRING_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_OCTET_STRING_OID, SYNTAX_OCTET_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_OCTET_STRING_NAME));
     }
   }
 
@@ -224,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // All values will be acceptable for the octet string syntax.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/OtherMailboxSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/OtherMailboxSyntax.java
index 036658b..a951ac3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/OtherMailboxSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/OtherMailboxSyntax.java
@@ -37,16 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the other mailbox attribute syntax, which consists of a
  * printable string component (the mailbox type) followed by a dollar sign and
@@ -87,18 +86,16 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_LIST_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_LIST_OID, SYNTAX_OTHER_MAILBOX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_LIST_OID, SYNTAX_OTHER_MAILBOX_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_LIST_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_LIST_OID, SYNTAX_OTHER_MAILBOX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_LIST_OID, SYNTAX_OTHER_MAILBOX_NAME));
     }
   }
 
@@ -215,14 +212,14 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Check to see if the provided value was null.  If so, then that's not
     // acceptable.
     if (value == null)
     {
-      int msgID = MSGID_ATTR_SYNTAX_OTHER_MAILBOX_EMPTY_VALUE;
-      invalidReason.append(getMessage(msgID));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_OTHER_MAILBOX_EMPTY_VALUE.get());
       return false;
     }
 
@@ -233,8 +230,8 @@
     int    valueLength = valueString.length();
     if (valueLength == 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_OTHER_MAILBOX_EMPTY_VALUE;
-      invalidReason.append(getMessage(msgID));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_OTHER_MAILBOX_EMPTY_VALUE.get());
       return false;
     }
 
@@ -249,8 +246,9 @@
       {
         if (pos == 0)
         {
-          int msgID = MSGID_ATTR_SYNTAX_OTHER_MAILBOX_NO_MBTYPE;
-          invalidReason.append(getMessage(msgID, valueString));
+
+          invalidReason.append(ERR_ATTR_SYNTAX_OTHER_MAILBOX_NO_MBTYPE.get(
+                  valueString));
           return false;
         }
 
@@ -259,8 +257,10 @@
       }
       else if (! PrintableString.isPrintableCharacter(c))
       {
-        int msgID = MSGID_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MBTYPE_CHAR;
-        invalidReason.append(getMessage(msgID, valueString, c, pos));
+
+        invalidReason.append(
+                ERR_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MBTYPE_CHAR.get(
+                        valueString, String.valueOf(c), pos));
         return false;
       }
     }
@@ -269,8 +269,9 @@
     // Make sure there is at least one character left for the mailbox.
     if (pos >= valueLength)
     {
-      int msgID = MSGID_ATTR_SYNTAX_OTHER_MAILBOX_NO_MAILBOX;
-      invalidReason.append(getMessage(msgID, valueString));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_OTHER_MAILBOX_NO_MAILBOX.get(
+              valueString));
       return false;
     }
 
@@ -281,8 +282,9 @@
       char c = valueString.charAt(pos);
       if (c != (c & 0x7F))
       {
-        int msgID = MSGID_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MB_CHAR;
-        invalidReason.append(getMessage(msgID, valueString, c, pos));
+
+        invalidReason.append(ERR_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MB_CHAR.get(
+                valueString, String.valueOf(c), pos));
         return false;
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/PostalAddressSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/PostalAddressSyntax.java
index 16c6c0d..74ca70e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/PostalAddressSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/PostalAddressSyntax.java
@@ -37,15 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the postal address attribute syntax, which is a list of
  * UCS (Universal Character Set, as defined in the ISO 10646 specification and
@@ -87,18 +87,16 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_DIRECTORY_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_DIRECTORY_STRING_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_DIRECTORY_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_DIRECTORY_STRING_NAME));
     }
   }
 
@@ -215,7 +213,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // We'll allow any value.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/PresentationAddressSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/PresentationAddressSyntax.java
index 028a65f..0b43653 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/PresentationAddressSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/PresentationAddressSyntax.java
@@ -37,15 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the presentation address attribute syntax, which is
  * defined in RFC 1278.  However, because this LDAP syntax is being deprecated,
@@ -91,36 +91,32 @@
          DirectoryServer.getApproximateMatchingRule(AMR_DOUBLE_METAPHONE_OID);
     if (defaultApproximateMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE,
-               AMR_DOUBLE_METAPHONE_OID, SYNTAX_PRESENTATION_ADDRESS_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE.get(
+          AMR_DOUBLE_METAPHONE_OID, SYNTAX_PRESENTATION_ADDRESS_NAME));
     }
 
     defaultEqualityMatchingRule =
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_PRESENTATION_ADDRESS_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_PRESENTATION_ADDRESS_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_PRESENTATION_ADDRESS_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_PRESENTATION_ADDRESS_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_PRESENTATION_ADDRESS_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_PRESENTATION_ADDRESS_NAME));
     }
   }
 
@@ -235,7 +231,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // We will accept any value for this syntax.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/PrintableStringSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/PrintableStringSyntax.java
index 74b2558..e3edc4b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/PrintableStringSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/PrintableStringSyntax.java
@@ -37,16 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the printable string attribute syntax, which is simply
  * a string of characters from a limited ASCII character set (uppercase and
@@ -94,36 +93,32 @@
          DirectoryServer.getApproximateMatchingRule(AMR_DOUBLE_METAPHONE_OID);
     if (defaultApproximateMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE,
-               AMR_DOUBLE_METAPHONE_OID, SYNTAX_PRINTABLE_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE.get(
+          AMR_DOUBLE_METAPHONE_OID, SYNTAX_PRINTABLE_STRING_NAME));
     }
 
     defaultEqualityMatchingRule =
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_PRINTABLE_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_PRINTABLE_STRING_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_PRINTABLE_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_PRINTABLE_STRING_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_PRINTABLE_STRING_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_PRINTABLE_STRING_NAME));
     }
   }
 
@@ -238,14 +233,14 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Check to see if the provided value was null.  If so, then that's not
     // acceptable.
     if (value == null)
     {
-      int msgID = MSGID_ATTR_SYNTAX_PRINTABLE_STRING_EMPTY_VALUE;
-      invalidReason.append(getMessage(msgID));
+
+      invalidReason.append(WARN_ATTR_SYNTAX_PRINTABLE_STRING_EMPTY_VALUE.get());
       return false;
     }
 
@@ -256,8 +251,8 @@
     int    valueLength = valueString.length();
     if (valueLength == 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_PRINTABLE_STRING_EMPTY_VALUE;
-      invalidReason.append(getMessage(msgID));
+
+      invalidReason.append(WARN_ATTR_SYNTAX_PRINTABLE_STRING_EMPTY_VALUE.get());
       return false;
     }
 
@@ -268,8 +263,10 @@
       char c = valueString.charAt(i);
       if (! PrintableString.isPrintableCharacter(c))
       {
-        int msgID = MSGID_ATTR_SYNTAX_PRINTABLE_STRING_ILLEGAL_CHARACTER;
-        invalidReason.append(getMessage(msgID, valueString, c, i));
+
+        invalidReason.append(
+                WARN_ATTR_SYNTAX_PRINTABLE_STRING_ILLEGAL_CHARACTER.get(
+                        valueString, String.valueOf(c), i));
         return false;
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/ProtocolInformationSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/ProtocolInformationSyntax.java
index fb5ddb3..baf1fb8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/ProtocolInformationSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/ProtocolInformationSyntax.java
@@ -37,15 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the protocol information attribute syntax, which is
  * being deprecated.  As such, this implementation behaves exactly like the
@@ -91,36 +91,32 @@
          DirectoryServer.getApproximateMatchingRule(AMR_DOUBLE_METAPHONE_OID);
     if (defaultApproximateMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE,
-               AMR_DOUBLE_METAPHONE_OID, SYNTAX_PROTOCOL_INFORMATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_APPROXIMATE_MATCHING_RULE.get(
+          AMR_DOUBLE_METAPHONE_OID, SYNTAX_PROTOCOL_INFORMATION_NAME));
     }
 
     defaultEqualityMatchingRule =
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_PROTOCOL_INFORMATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_PROTOCOL_INFORMATION_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_PROTOCOL_INFORMATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_PROTOCOL_INFORMATION_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_PROTOCOL_INFORMATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_PROTOCOL_INFORMATION_NAME));
     }
   }
 
@@ -235,7 +231,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // We will accept any value for this syntax.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/RFC3672SubtreeSpecificationSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/RFC3672SubtreeSpecificationSyntax.java
index e769338..bb22e5f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/RFC3672SubtreeSpecificationSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/RFC3672SubtreeSpecificationSyntax.java
@@ -30,7 +30,8 @@
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 import org.opends.server.admin.std.server.AttributeSyntaxCfg;
@@ -47,8 +48,8 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 /**
  * This class defines the subtree specification attribute syntax, which
@@ -135,25 +136,22 @@
     defaultEqualityMatchingRule = DirectoryServer
         .getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null) {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-          MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-          EMR_OCTET_STRING_OID, SYNTAX_RFC3672_SUBTREE_SPECIFICATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_RFC3672_SUBTREE_SPECIFICATION_NAME));
     }
 
     defaultOrderingMatchingRule = DirectoryServer
         .getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null) {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-          MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-          OMR_OCTET_STRING_OID, SYNTAX_RFC3672_SUBTREE_SPECIFICATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_RFC3672_SUBTREE_SPECIFICATION_NAME));
     }
 
     defaultSubstringMatchingRule = DirectoryServer
         .getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null) {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-          MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-          SMR_OCTET_STRING_OID, SYNTAX_RFC3672_SUBTREE_SPECIFICATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_RFC3672_SUBTREE_SPECIFICATION_NAME));
     }
   }
 
@@ -257,7 +255,7 @@
    *         use with this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason) {
+                                   MessageBuilder invalidReason) {
 
     // Use the subtree specification code to make this determination.
     try {
@@ -270,7 +268,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      invalidReason.append(e.getErrorMessage());
+      invalidReason.append(e.getMessageObject());
       return false;
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/RelativeSubtreeSpecificationSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/RelativeSubtreeSpecificationSyntax.java
index 0933fb2..55823f0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/RelativeSubtreeSpecificationSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/RelativeSubtreeSpecificationSyntax.java
@@ -30,7 +30,8 @@
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 import org.opends.server.admin.std.server.AttributeSyntaxCfg;
@@ -47,8 +48,8 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 /**
  * This class defines the relative subtree specification attribute
@@ -138,25 +139,22 @@
     defaultEqualityMatchingRule = DirectoryServer
         .getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null) {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-          MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-          EMR_OCTET_STRING_OID, SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_NAME));
     }
 
     defaultOrderingMatchingRule = DirectoryServer
         .getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null) {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-          MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-          OMR_OCTET_STRING_OID, SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_NAME));
     }
 
     defaultSubstringMatchingRule = DirectoryServer
         .getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null) {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-          MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-          SMR_OCTET_STRING_OID, SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_RELATIVE_SUBTREE_SPECIFICATION_NAME));
     }
   }
 
@@ -260,7 +258,7 @@
    *         use with this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason) {
+                                   MessageBuilder invalidReason) {
 
     // Use the subtree specification code to make this determination.
     try {
@@ -273,7 +271,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      invalidReason.append(e.getErrorMessage());
+      invalidReason.append(e.getMessageObject());
       return false;
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/SubstringAssertionSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/SubstringAssertionSyntax.java
index 6c77013..937a6b8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/SubstringAssertionSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/SubstringAssertionSyntax.java
@@ -37,16 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class defines the substring assertion attribute syntax, which contains
  * one or more substring components, as used in a substring search filter.  For
@@ -90,27 +89,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_SUBSTRING_ASSERTION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_SUBSTRING_ASSERTION_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_SUBSTRING_ASSERTION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_SUBSTRING_ASSERTION_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_SUBSTRING_ASSERTION_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_SUBSTRING_ASSERTION_NAME));
     }
   }
 
@@ -226,7 +222,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder 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
@@ -242,8 +238,7 @@
     {
       if (valueString.charAt(0) == '*')
       {
-        int msgID = MSGID_ATTR_SYNTAX_SUBSTRING_ONLY_WILDCARD;
-        invalidReason.append(getMessage(msgID));
+        invalidReason.append(WARN_ATTR_SYNTAX_SUBSTRING_ONLY_WILDCARD.get());
 
         return false;
       }
@@ -258,9 +253,9 @@
       {
         if ((valueString.charAt(i) == '*') && (valueString.charAt(i-1) == '*'))
         {
-          int msgID = MSGID_ATTR_SYNTAX_SUBSTRING_CONSECUTIVE_WILDCARDS;
-          invalidReason.append(getMessage(msgID));
-
+          invalidReason.append(
+                  WARN_ATTR_SYNTAX_SUBSTRING_CONSECUTIVE_WILDCARDS.get(
+                          valueString, i));
           return false;
         }
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/SupportedAlgorithmSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/SupportedAlgorithmSyntax.java
index c30a8e4..d0f4f52 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/SupportedAlgorithmSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/SupportedAlgorithmSyntax.java
@@ -37,15 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the supported algorithm attribute syntax.  This should
  * be restricted to holding only X.509 supported algorithms, but we will accept
@@ -89,27 +89,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_OCTET_STRING_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_OCTET_STRING_OID, SYNTAX_SUPPORTED_ALGORITHM_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_OCTET_STRING_OID, SYNTAX_SUPPORTED_ALGORITHM_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_OCTET_STRING_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_OCTET_STRING_OID, SYNTAX_SUPPORTED_ALGORITHM_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_OCTET_STRING_OID, SYNTAX_SUPPORTED_ALGORITHM_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_OCTET_STRING_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_OCTET_STRING_OID, SYNTAX_SUPPORTED_ALGORITHM_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_OCTET_STRING_OID, SYNTAX_SUPPORTED_ALGORITHM_NAME));
     }
   }
 
@@ -225,7 +222,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // All values will be acceptable for the supported algorithm syntax.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/TelephoneNumberSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/TelephoneNumberSyntax.java
index 573ebfc..f484616 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/TelephoneNumberSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/TelephoneNumberSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -41,14 +42,14 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.ConfigChangeResult;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -103,18 +104,16 @@
          DirectoryServer.getEqualityMatchingRule(EMR_TELEPHONE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_TELEPHONE_OID, SYNTAX_TELEPHONE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_TELEPHONE_OID, SYNTAX_TELEPHONE_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_TELEPHONE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_TELEPHONE_OID, SYNTAX_TELEPHONE_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_TELEPHONE_OID, SYNTAX_TELEPHONE_NAME));
     }
 
 
@@ -253,14 +252,14 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // No matter what, the value can't be empty or null.
     String valueStr;
     if ((value == null) ||
         ((valueStr = value.stringValue().trim()).length() == 0))
     {
-      invalidReason.append(getMessage(MSGID_ATTR_SYNTAX_TELEPHONE_EMPTY));
+      invalidReason.append(ERR_ATTR_SYNTAX_TELEPHONE_EMPTY.get());
       return false;
     }
 
@@ -273,8 +272,7 @@
       // acceptable.
       if (valueStr.charAt(0) != '+')
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_TELEPHONE_NO_PLUS;
-        String message = getMessage(msgID, valueStr);
+        Message message = ERR_ATTR_SYNTAX_TELEPHONE_NO_PLUS.get(valueStr);
         invalidReason.append(message);
         return false;
       }
@@ -293,8 +291,8 @@
         }
         else if (! isSeparator(c))
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_TELEPHONE_ILLEGAL_CHAR;
-          String message = getMessage(msgID, valueStr, c, i);
+          Message message = ERR_ATTR_SYNTAX_TELEPHONE_ILLEGAL_CHAR.get(
+                  valueStr, String.valueOf(c), i);
           invalidReason.append(message);
           return false;
         }
@@ -302,8 +300,7 @@
 
       if (! digitSeen)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_TELEPHONE_NO_DIGITS;
-        String message = getMessage(msgID, valueStr);
+        Message message = ERR_ATTR_SYNTAX_TELEPHONE_NO_DIGITS.get(valueStr);
         invalidReason.append(message);
         return false;
       }
@@ -325,8 +322,7 @@
       }
 
       // If we made it here, then we didn't find any digits.
-      int    msgID   = MSGID_ATTR_SYNTAX_TELEPHONE_NO_DIGITS;
-      String message = getMessage(msgID, valueStr);
+      Message message = ERR_ATTR_SYNTAX_TELEPHONE_NO_DIGITS.get(valueStr);
       invalidReason.append(message);
       return false;
     }
@@ -362,7 +358,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       TelephoneNumberAttributeSyntaxCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     // The configuration will always be acceptable.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/TeletexTerminalIdentifierSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/TeletexTerminalIdentifierSyntax.java
index 37a1c89..652a15b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/TeletexTerminalIdentifierSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/TeletexTerminalIdentifierSyntax.java
@@ -39,12 +39,12 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -120,27 +120,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_TELETEX_TERM_ID_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_TELETEX_TERM_ID_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_TELETEX_TERM_ID_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_TELETEX_TERM_ID_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_TELETEX_TERM_ID_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_TELETEX_TERM_ID_NAME));
     }
   }
 
@@ -256,7 +253,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Get a lowercase string representation of the value and find its length.
     String valueString = value.stringValue();
@@ -266,8 +263,8 @@
     // The value must contain at least one character.
     if (valueLength == 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_TELETEXID_EMPTY;
-      invalidReason.append(getMessage(msgID));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_TELETEXID_EMPTY.get());
       return false;
     }
 
@@ -276,8 +273,9 @@
     char c = valueString.charAt(0);
     if (! PrintableString.isPrintableCharacter(c))
     {
-      int msgID = MSGID_ATTR_SYNTAX_TELETEXID_NOT_PRINTABLE;
-      invalidReason.append(getMessage(msgID, valueString, c, 0));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_TELETEXID_NOT_PRINTABLE.get(
+              valueString, String.valueOf(c), 0));
       return false;
     }
 
@@ -297,8 +295,9 @@
       {
         if (! PrintableString.isPrintableCharacter(c))
         {
-          int msgID = MSGID_ATTR_SYNTAX_TELETEXID_NOT_PRINTABLE;
-          invalidReason.append(getMessage(msgID, valueString, c, pos));
+
+          invalidReason.append(ERR_ATTR_SYNTAX_TELETEXID_NOT_PRINTABLE.get(
+                  valueString, String.valueOf(c), pos));
         }
       }
     }
@@ -309,8 +308,9 @@
       // character was a dollar sign.
       if (c == '$')
       {
-        int msgID = MSGID_ATTR_SYNTAX_TELETEXID_END_WITH_DOLLAR;
-        invalidReason.append(getMessage(msgID, valueString));
+
+        invalidReason.append(ERR_ATTR_SYNTAX_TELETEXID_END_WITH_DOLLAR.get(
+                valueString));
         return false;
       }
       else
@@ -346,17 +346,18 @@
         int colonPos = paramStr.indexOf(':');
         if (colonPos < 0)
         {
-          int msgID = MSGID_ATTR_SYNTAX_TELETEXID_PARAM_NO_COLON;
-          invalidReason.append(getMessage(msgID, valueString, paramStr,
-                                          paramStartPos));
+
+          invalidReason.append(ERR_ATTR_SYNTAX_TELETEXID_PARAM_NO_COLON.get(
+                  valueString));
           return false;
         }
 
         String paramName = paramStr.substring(0, colonPos);
         if (! ALLOWED_TTX_PARAMETERS.contains(paramName))
         {
-          int msgID = MSGID_ATTR_SYNTAX_TELETEXID_ILLEGAL_PARAMETER;
-          invalidReason.append(getMessage(msgID, valueString, paramName));
+
+          invalidReason.append(ERR_ATTR_SYNTAX_TELETEXID_ILLEGAL_PARAMETER.get(
+                  valueString, paramName));
           return false;
         }
 
@@ -371,17 +372,18 @@
     int colonPos = paramStr.indexOf(':');
     if (colonPos < 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_TELETEXID_PARAM_NO_COLON;
-      invalidReason.append(getMessage(msgID, valueString, paramStr,
-                                      paramStartPos));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_TELETEXID_PARAM_NO_COLON.get(
+              valueString));
       return false;
     }
 
     String paramName = paramStr.substring(0, colonPos);
     if (! ALLOWED_TTX_PARAMETERS.contains(paramName))
     {
-      int msgID = MSGID_ATTR_SYNTAX_TELETEXID_ILLEGAL_PARAMETER;
-      invalidReason.append(getMessage(msgID, valueString, paramName));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_TELETEXID_ILLEGAL_PARAMETER.get(
+              valueString, paramName));
       return false;
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/TelexNumberSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/TelexNumberSyntax.java
index 2d1578a..74a2212 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/TelexNumberSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/TelexNumberSyntax.java
@@ -37,16 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the telex number attribute syntax, which contains three
  * printable strings separated by dollar sign characters.  Equality, ordering,
@@ -89,27 +88,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_CASE_IGNORE_OID, SYNTAX_TELEX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_CASE_IGNORE_OID, SYNTAX_TELEX_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_CASE_IGNORE_OID, SYNTAX_TELEX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_CASE_IGNORE_OID, SYNTAX_TELEX_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_TELEX_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_TELEX_NAME));
     }
   }
 
@@ -225,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Get a string representation of the value and find its length.
     String valueString = value.stringValue();
@@ -233,8 +229,8 @@
 
     if (valueLength < 5)
     {
-      int msgID = MSGID_ATTR_SYNTAX_TELEX_TOO_SHORT;
-      invalidReason.append(getMessage(msgID, valueString));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_TELEX_TOO_SHORT.get(valueString));
       return false;
     }
 
@@ -243,8 +239,9 @@
     char c = valueString.charAt(0);
     if (! PrintableString.isPrintableCharacter(c))
     {
-      int msgID = MSGID_ATTR_SYNTAX_TELEX_NOT_PRINTABLE;
-      invalidReason.append(getMessage(msgID, valueString, c, 0));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_TELEX_NOT_PRINTABLE.get(
+              valueString, String.valueOf(c), 0));
       return false;
     }
 
@@ -264,16 +261,17 @@
       {
         if (! PrintableString.isPrintableCharacter(c))
         {
-          int msgID = MSGID_ATTR_SYNTAX_TELEX_ILLEGAL_CHAR;
-          invalidReason.append(getMessage(msgID, valueString, c, pos));
+
+          invalidReason.append(ERR_ATTR_SYNTAX_TELEX_ILLEGAL_CHAR.get(
+                  valueString, String.valueOf(c), pos));
         }
       }
     }
 
     if (pos >= valueLength)
     {
-      int msgID = MSGID_ATTR_SYNTAX_TELEX_TRUNCATED;
-      invalidReason.append(getMessage(msgID, valueString));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_TELEX_TRUNCATED.get(valueString));
       return false;
     }
 
@@ -282,8 +280,9 @@
     c = valueString.charAt(pos++);
     if (! PrintableString.isPrintableCharacter(c))
     {
-      int msgID = MSGID_ATTR_SYNTAX_TELEX_NOT_PRINTABLE;
-      invalidReason.append(getMessage(msgID, valueString, c, (pos-1)));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_TELEX_NOT_PRINTABLE.get(
+              valueString, String.valueOf(c), (pos-1)));
       return false;
     }
 
@@ -302,8 +301,9 @@
       {
         if (! PrintableString.isPrintableCharacter(c))
         {
-          int msgID = MSGID_ATTR_SYNTAX_TELEX_ILLEGAL_CHAR;
-          invalidReason.append(getMessage(msgID, valueString, c, pos));
+
+          invalidReason.append(ERR_ATTR_SYNTAX_TELEX_ILLEGAL_CHAR.get(
+                  valueString, String.valueOf(c), pos));
           return false;
         }
       }
@@ -311,8 +311,8 @@
 
     if (pos >= valueLength)
     {
-      int msgID = MSGID_ATTR_SYNTAX_TELEX_TRUNCATED;
-      invalidReason.append(getMessage(msgID, valueString));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_TELEX_TRUNCATED.get(valueString));
       return false;
     }
 
@@ -321,8 +321,9 @@
     c = valueString.charAt(pos++);
     if (! PrintableString.isPrintableCharacter(c))
     {
-      int msgID = MSGID_ATTR_SYNTAX_TELEX_NOT_PRINTABLE;
-      invalidReason.append(getMessage(msgID, valueString, c, (pos-1)));
+
+      invalidReason.append(ERR_ATTR_SYNTAX_TELEX_NOT_PRINTABLE.get(
+              valueString, String.valueOf(c), (pos-1)));
       return false;
     }
 
@@ -334,8 +335,9 @@
       c = valueString.charAt(pos);
       if (! PrintableString.isPrintableCharacter(c))
       {
-        int msgID = MSGID_ATTR_SYNTAX_TELEX_ILLEGAL_CHAR;
-        invalidReason.append(getMessage(msgID, valueString, c, pos));
+
+        invalidReason.append(ERR_ATTR_SYNTAX_TELEX_ILLEGAL_CHAR.get(
+                valueString, String.valueOf(c), pos));
         return false;
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/UTCTimeSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/UTCTimeSyntax.java
index 48c4552..fcd0ca1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/UTCTimeSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/UTCTimeSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -45,16 +46,16 @@
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.*;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 
@@ -143,27 +144,24 @@
          DirectoryServer.getEqualityMatchingRule(EMR_GENERALIZED_TIME_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_GENERALIZED_TIME_OID, SYNTAX_UTC_TIME_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_GENERALIZED_TIME_OID, SYNTAX_UTC_TIME_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_GENERALIZED_TIME_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_GENERALIZED_TIME_OID, SYNTAX_UTC_TIME_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_GENERALIZED_TIME_OID, SYNTAX_UTC_TIME_NAME));
     }
 
     defaultSubstringMatchingRule =
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE,
-               SMR_CASE_IGNORE_OID, SYNTAX_UTC_TIME_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+          SMR_CASE_IGNORE_OID, SYNTAX_UTC_TIME_NAME));
     }
   }
 
@@ -279,7 +277,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // Get the value as a string and verify that it is at least long enough for
     // "YYYYMMDDhhmmZ", which is the shortest allowed value.
@@ -287,8 +285,7 @@
     int    length      = valueString.length();
     if (length < 11)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_TOO_SHORT;
-      String message = getMessage(msgID, valueString);
+      Message message = ERR_ATTR_SYNTAX_UTC_TIME_TOO_SHORT.get(valueString);
       invalidReason.append(message);
       return false;
     }
@@ -313,9 +310,8 @@
           // These are all fine.
           break;
         default:
-          int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_YEAR;
-          String message = getMessage(msgID, valueString,
-                                      valueString.charAt(i));
+          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_YEAR.get(
+                  valueString, String.valueOf(valueString.charAt(i)));
           invalidReason.append(message);
           return false;
       }
@@ -344,9 +340,8 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH;
-            String message = getMessage(msgID, valueString,
-                                        valueString.substring(2, 4));
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH.get(
+                    valueString, valueString.substring(2, 4));
             invalidReason.append(message);
             return false;
         }
@@ -361,17 +356,15 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH;
-            String message = getMessage(msgID, valueString,
-                                        valueString.substring(2, 4));
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH.get(
+                    valueString, valueString.substring(2, 4));
             invalidReason.append(message);
             return false;
         }
         break;
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH;
-        String message = getMessage(msgID, valueString,
-                                    valueString.substring(2, 4));
+        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH.get(
+                valueString, valueString.substring(2, 4));
         invalidReason.append(message);
         return false;
     }
@@ -402,9 +395,8 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_DAY;
-            String message = getMessage(msgID, valueString,
-                                        valueString.substring(4, 6));
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(
+                    valueString, valueString.substring(4, 6));
             invalidReason.append(message);
             return false;
         }
@@ -428,9 +420,8 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_DAY;
-            String message = getMessage(msgID, valueString,
-                                        valueString.substring(4, 6));
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(
+                    valueString, valueString.substring(4, 6));
             invalidReason.append(message);
             return false;
         }
@@ -444,16 +435,14 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_DAY;
-            String message = getMessage(msgID, valueString,
-                                        valueString.substring(4, 6));
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(
+                    valueString, valueString.substring(4, 6));
             invalidReason.append(message);
             return false;
         }
         break;
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_DAY;
-        String message = getMessage(msgID, valueString,
+        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(valueString,
                                     valueString.substring(4, 6));
         invalidReason.append(message);
         return false;
@@ -484,9 +473,8 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR;
-            String message = getMessage(msgID, valueString,
-                                        valueString.substring(6, 8));
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR.get(
+                    valueString, valueString.substring(6, 8));
             invalidReason.append(message);
             return false;
         }
@@ -502,16 +490,14 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR;
-            String message = getMessage(msgID, valueString,
-                                        valueString.substring(6, 8));
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR.get(
+                    valueString, valueString.substring(6, 8));
             invalidReason.append(message);
             return false;
         }
         break;
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR;
-        String message = getMessage(msgID, valueString,
+        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR.get(valueString,
                                     valueString.substring(6, 8));
         invalidReason.append(message);
         return false;
@@ -533,8 +519,8 @@
         // be a digit between 0 and 9.
         if (length < 11)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, m1, 8);
+          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+                  valueString, String.valueOf(m1), 8);
           invalidReason.append(message);
           return false;
         }
@@ -554,9 +540,8 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_MINUTE;
-            String message = getMessage(msgID, valueString,
-                                        valueString.substring(8, 10));
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MINUTE.get(
+                    valueString, valueString.substring(8, 10));
             invalidReason.append(message);
             return false;
         }
@@ -564,8 +549,8 @@
         break;
 
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR;
-        String message = getMessage(msgID, valueString, m1, 8);
+        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+                valueString, String.valueOf(m1), 8);
         invalidReason.append(message);
         return false;
     }
@@ -588,8 +573,8 @@
         // be a digit between 0 and 9.
         if (length < 13)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, s1, 10);
+          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+                  valueString, String.valueOf(s1), 10);
           invalidReason.append(message);
           return false;
         }
@@ -609,9 +594,8 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND;
-            String message = getMessage(msgID, valueString,
-                                        valueString.substring(10, 12));
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND.get(
+                    valueString, valueString.substring(10, 12));
             invalidReason.append(message);
             return false;
         }
@@ -622,17 +606,17 @@
         // a 0.
         if (length < 13)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, s1, 10);
+
+          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+                  valueString, String.valueOf(s1), 10);
           invalidReason.append(message);
           return false;
         }
 
         if (valueString.charAt(11) != '0')
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND;
-          String message = getMessage(msgID, valueString,
-                                      valueString.substring(10, 12));
+          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND.get(
+                  valueString, valueString.substring(10, 12));
           invalidReason.append(message);
           return false;
         }
@@ -646,8 +630,8 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, s1, 10);
+          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+                  valueString, String.valueOf(s1), 10);
           invalidReason.append(message);
           return false;
         }
@@ -662,15 +646,15 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString, s1, 10);
+          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+                  valueString, String.valueOf(s1), 10);
           invalidReason.append(message);
           return false;
         }
 
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR;
-        String message = getMessage(msgID, valueString, s1, 10);
+        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+                valueString, String.valueOf(s1), 10);
         invalidReason.append(message);
         return false;
     }
@@ -688,9 +672,8 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString,
-                                      valueString.charAt(12), 12);
+          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+                  valueString, String.valueOf(valueString.charAt(12)), 12);
           invalidReason.append(message);
           return false;
         }
@@ -705,17 +688,15 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR;
-          String message = getMessage(msgID, valueString,
-                                      valueString.charAt(12), 12);
+          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+                  valueString, String.valueOf(valueString.charAt(12)), 12);
           invalidReason.append(message);
           return false;
         }
 
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR;
-        String message = getMessage(msgID, valueString, valueString.charAt(12),
-                                    12);
+        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+                valueString, String.valueOf(valueString.charAt(12)), 12);
         invalidReason.append(message);
         return false;
     }
@@ -739,13 +720,12 @@
    *          <CODE>false</CODE> if it is not.
    */
   private boolean hasValidOffset(String value, int startPos,
-                                 StringBuilder invalidReason)
+                                 MessageBuilder invalidReason)
   {
     int offsetLength = value.length() - startPos;
     if (offsetLength < 2)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_TOO_SHORT;
-      String message = getMessage(msgID, value);
+      Message message = ERR_ATTR_SYNTAX_UTC_TIME_TOO_SHORT.get(value);
       invalidReason.append(message);
       return false;
     }
@@ -770,8 +750,7 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET;
-            String message = getMessage(msgID, value,
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
                                         value.substring(startPos,
                                                         startPos+offsetLength));
             invalidReason.append(message);
@@ -788,8 +767,7 @@
             // These are all fine.
             break;
           default:
-            int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET;
-            String message = getMessage(msgID, value,
+            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
                                         value.substring(startPos,
                                                         startPos+offsetLength));
             invalidReason.append(message);
@@ -797,8 +775,7 @@
         }
         break;
       default:
-        int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET;
-        String message = getMessage(msgID, value,
+        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
                                     value.substring(startPos,
                                                     startPos+offsetLength));
         invalidReason.append(message);
@@ -833,17 +810,16 @@
               // These are all fine.
               break;
             default:
-              int msgID = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET;
-              String message =
-                   getMessage(msgID, value,value.substring(startPos,
-                                                      startPos+offsetLength));
+              Message message =
+                   ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(
+                           value,value.substring(startPos,
+                           startPos+offsetLength));
               invalidReason.append(message);
               return false;
           }
           break;
         default:
-          int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET;
-          String message = getMessage(msgID, value,
+          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
                                       value.substring(startPos,
                                                       startPos+offsetLength));
           invalidReason.append(message);
@@ -937,11 +913,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_ATTR_SYNTAX_UTC_TIME_CANNOT_PARSE;
-      String message = getMessage(msgID, valueString, String.valueOf(e));
-
+      Message message = ERR_ATTR_SYNTAX_UTC_TIME_CANNOT_PARSE.get(
+          valueString, String.valueOf(e));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                   message, msgID, e);
+                                   message, e);
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDEqualityMatchingRule.java
index ee1a804..6780079 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDEqualityMatchingRule.java
@@ -34,17 +34,16 @@
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
+
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.Message;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -146,17 +145,15 @@
     byte[] valueBytes = value.value();
     if (valueBytes.length != 36)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UUID_INVALID_LENGTH;
-      String message = getMessage(msgID, value.stringValue(),
-                                  valueBytes.length);
+      Message message = WARN_ATTR_SYNTAX_UUID_INVALID_LENGTH.get(
+              value.stringValue(), valueBytes.length);
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
         case REJECT:
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         case WARN:
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          logError(message);
           return new ASN1OctetString(valueBytes);
         default:
           return new ASN1OctetString(valueBytes);
@@ -177,18 +174,16 @@
         case 23:
           if (normBytes[i] != '-')
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_UUID_EXPECTED_DASH;
-            String message = getMessage(msgID, value.stringValue(), i,
-                                        String.valueOf(normBytes[i]));
+            Message message = WARN_ATTR_SYNTAX_UUID_EXPECTED_DASH.get(
+                    value.stringValue(), i, String.valueOf(normBytes[i]));
             switch (DirectoryServer.getSyntaxEnforcementPolicy())
             {
               case REJECT:
                 throw new DirectoryException(
-                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID);
+                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
               case WARN:
-                logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.MILD_ERROR,
-                         message, msgID);
+                logError(
+                        message);
                 return new ASN1OctetString(valueBytes);
               default:
                 return new ASN1OctetString(valueBytes);
@@ -235,18 +230,16 @@
               normBytes[i] = 'f';
               break;
             default:
-              int    msgID   = MSGID_ATTR_SYNTAX_UUID_EXPECTED_HEX;
-              String message = getMessage(msgID, value.stringValue(), i,
-                                          String.valueOf(normBytes[i]));
+              Message message = WARN_ATTR_SYNTAX_UUID_EXPECTED_HEX.get(
+                      value.stringValue(), i, String.valueOf(normBytes[i]));
               switch (DirectoryServer.getSyntaxEnforcementPolicy())
               {
                 case REJECT:
                   throw new DirectoryException(
-                                 ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                 msgID);
+                                 ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
                 case WARN:
-                  logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.MILD_ERROR,
-                           message, msgID);
+                  logError(
+                          message);
                   return new ASN1OctetString(valueBytes);
                 default:
                   return new ASN1OctetString(valueBytes);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDOrderingMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDOrderingMatchingRule.java
index 31e0575..f4c3c89 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDOrderingMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDOrderingMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -35,16 +36,12 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
-
+import org.opends.server.loggers.ErrorLogger;
 
 
 /**
@@ -154,17 +151,15 @@
     byte[] valueBytes = value.value();
     if (valueBytes.length != 36)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_UUID_INVALID_LENGTH;
-      String message = getMessage(msgID, value.stringValue(),
-                                  valueBytes.length);
+      Message message = WARN_ATTR_SYNTAX_UUID_INVALID_LENGTH.get(
+              value.stringValue(), valueBytes.length);
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
         case REJECT:
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         case WARN:
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
           return new ASN1OctetString(valueBytes);
         default:
           return new ASN1OctetString(valueBytes);
@@ -185,18 +180,15 @@
         case 23:
           if (normBytes[i] != '-')
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_UUID_EXPECTED_DASH;
-            String message = getMessage(msgID, value.stringValue(), i,
-                                        String.valueOf(normBytes[i]));
+            Message message = WARN_ATTR_SYNTAX_UUID_EXPECTED_DASH.get(
+                    value.stringValue(), i, String.valueOf(normBytes[i]));
             switch (DirectoryServer.getSyntaxEnforcementPolicy())
             {
               case REJECT:
                 throw new DirectoryException(
-                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                               msgID);
+                               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
               case WARN:
-                logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.MILD_ERROR,
-                         message, msgID);
+                ErrorLogger.logError(message);
                 return new ASN1OctetString(valueBytes);
               default:
                 return new ASN1OctetString(valueBytes);
@@ -243,18 +235,15 @@
               normBytes[i] = 'f';
               break;
             default:
-              int    msgID   = MSGID_ATTR_SYNTAX_UUID_EXPECTED_HEX;
-              String message = getMessage(msgID, value.stringValue(), i,
-                                          String.valueOf(normBytes[i]));
+              Message message = WARN_ATTR_SYNTAX_UUID_EXPECTED_HEX.get(
+                      value.stringValue(), i, String.valueOf(normBytes[i]));
               switch (DirectoryServer.getSyntaxEnforcementPolicy())
               {
                 case REJECT:
                   throw new DirectoryException(
-                                 ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                 msgID);
+                                 ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
                 case WARN:
-                  logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.MILD_ERROR,
-                           message, msgID);
+                  ErrorLogger.logError(message);
                   return new ASN1OctetString(valueBytes);
                 default:
                   return new ASN1OctetString(valueBytes);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDSyntax.java
index 5ea57a8..fe5b5b8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/UUIDSyntax.java
@@ -37,16 +37,15 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
-
 /**
  * This class implements the UUID syntax, which is defined in RFC 4530.
  * Equality and ordering matching will be allowed by default.
@@ -85,18 +84,16 @@
          DirectoryServer.getEqualityMatchingRule(EMR_UUID_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_UUID_OID, SYNTAX_UUID_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_UUID_OID, SYNTAX_UUID_NAME));
     }
 
     defaultOrderingMatchingRule =
          DirectoryServer.getOrderingMatchingRule(OMR_UUID_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE,
-               OMR_UUID_OID, SYNTAX_UUID_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+          OMR_UUID_OID, SYNTAX_UUID_NAME));
     }
   }
 
@@ -213,7 +210,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder 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,
@@ -222,8 +219,8 @@
     String valueString = value.stringValue();
     if (valueString.length() != 36)
     {
-      int msgID = MSGID_ATTR_SYNTAX_UUID_INVALID_LENGTH;
-      invalidReason.append(getMessage(msgID, valueString,
+
+      invalidReason.append(WARN_ATTR_SYNTAX_UUID_INVALID_LENGTH.get(valueString,
                                       valueString.length()));
       return false;
     }
@@ -240,9 +237,9 @@
         case 23:
           if (valueString.charAt(i) != '-')
           {
-            int msgID = MSGID_ATTR_SYNTAX_UUID_EXPECTED_DASH;
-            invalidReason.append(getMessage(msgID, valueString, i,
-                                            valueString.charAt(i)));
+
+            invalidReason.append(WARN_ATTR_SYNTAX_UUID_EXPECTED_DASH.get(
+                    valueString, i, String.valueOf(valueString.charAt(i))));
             return false;
           }
           break;
@@ -273,9 +270,9 @@
             case 'F':
               break;
             default:
-              int msgID = MSGID_ATTR_SYNTAX_UUID_EXPECTED_HEX;
-              invalidReason.append(getMessage(msgID, valueString, i,
-                                              valueString.charAt(i)));
+
+              invalidReason.append(WARN_ATTR_SYNTAX_UUID_EXPECTED_HEX.get(
+                      valueString, i, String.valueOf(valueString.charAt(i))));
               return false;
           }
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java
index 1d305da..4beeb91 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -38,17 +39,14 @@
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.loggers.ErrorLogger.*;
+import org.opends.server.loggers.ErrorLogger;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -193,17 +191,16 @@
       // 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.
-      int msgID = MSGID_ATTR_SYNTAX_NAMEANDUID_INVALID_DN;
-      String message = getMessage(msgID, valueString, getExceptionMessage(e));
+      Message message = ERR_ATTR_SYNTAX_NAMEANDUID_INVALID_DN.get(
+              valueString, getExceptionMessage(e));
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
         case REJECT:
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                       message, msgID);
+                                       message);
         case WARN:
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.MILD_ERROR,
-                   message, msgID);
+          ErrorLogger.logError(message);
 
           valueBuffer.append(toLowerCase(valueString).substring(0, dnEndPos));
           break;
@@ -235,20 +232,18 @@
         {
           // There was an invalid binary digit.  We'll either throw an exception
           // or log a message and continue, based on the server's configuration.
-          int    msgID   = MSGID_ATTR_SYNTAX_NAMEANDUID_ILLEGAL_BINARY_DIGIT;
-          String message = getMessage(msgID, valueString, c, i);
+          Message message = ERR_ATTR_SYNTAX_NAMEANDUID_ILLEGAL_BINARY_DIGIT.get(
+                  valueString, String.valueOf(c), i);
 
           switch (DirectoryServer.getSyntaxEnforcementPolicy())
           {
             case REJECT:
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                           message, msgID);
+                                           message);
             case WARN:
               if (! logged)
               {
-                logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.MILD_ERROR,
-                         message, msgID);
-
+                ErrorLogger.logError(message);
                 logged = true;
               }
               break;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/schema/UserPasswordSyntax.java b/opendj-sdk/opends/src/server/org/opends/server/schema/UserPasswordSyntax.java
index 0e504c9..3ed29cc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/schema/UserPasswordSyntax.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/schema/UserPasswordSyntax.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.schema;
+import org.opends.messages.Message;
 
 
 
@@ -38,18 +39,17 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
-
 /**
  * This class defines an attribute syntax used for storing values that have been
  * encoded using a password storage scheme.  The format for attribute values
@@ -94,9 +94,8 @@
          DirectoryServer.getEqualityMatchingRule(EMR_USER_PASSWORD_EXACT_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-               MSGID_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE,
-               EMR_USER_PASSWORD_EXACT_NAME, SYNTAX_USER_PASSWORD_NAME);
+      logError(ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+          EMR_USER_PASSWORD_EXACT_NAME, SYNTAX_USER_PASSWORD_NAME));
     }
   }
 
@@ -214,7 +213,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteString value,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder 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.
@@ -241,20 +240,18 @@
     // Make sure that there actually is a value to decode.
     if ((userPasswordValue == null) || (userPasswordValue.length() == 0))
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_USERPW_NO_VALUE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_USERPW_NO_VALUE.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
     // The first character of an encoded value must be an opening curly brace.
     if (userPasswordValue.charAt(0) != '{')
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_USERPW_NO_OPENING_BRACE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_USERPW_NO_OPENING_BRACE.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -262,10 +259,9 @@
     int closePos = userPasswordValue.indexOf('}');
     if (closePos < 0)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_USERPW_NO_CLOSING_BRACE;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_USERPW_NO_CLOSING_BRACE.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
@@ -275,10 +271,9 @@
 
     if (schemeName.length() == 0)
     {
-      int msgID = MSGID_ATTR_SYNTAX_USERPW_NO_SCHEME;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                                   msgID);
+      Message message = ERR_ATTR_SYNTAX_USERPW_NO_SCHEME.get();
+      throw new DirectoryException(
+              ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
index b4d2bca..148e322 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 
 
@@ -50,8 +51,6 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LockManager;
 import org.opends.server.types.Modification;
@@ -63,8 +62,7 @@
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.TaskMessages.*;
+import static org.opends.messages.TaskMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -102,10 +100,9 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.UPDATE_SCHEMA, operation))
       {
-        int    msgID   = MSGID_TASK_ADDSCHEMAFILE_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_TASK_ADDSCHEMAFILE_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -117,11 +114,9 @@
     List<Attribute> attrList = taskEntry.getAttribute(attrType);
     if ((attrList == null) || attrList.isEmpty())
     {
-      int    msgID   = MSGID_TASK_ADDSCHEMAFILE_NO_FILENAME;
-      String message = getMessage(msgID, ATTR_TASK_ADDSCHEMAFILE_FILENAME,
-                                  String.valueOf(taskEntry.getDN()));
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_TASK_ADDSCHEMAFILE_NO_FILENAME.get(
+          ATTR_TASK_ADDSCHEMAFILE_FILENAME, String.valueOf(taskEntry.getDN()));
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
 
@@ -142,10 +137,10 @@
           if ((! schemaFile.exists()) ||
               (! schemaFile.getParent().equals(schemaDirectory)))
           {
-            int    msgID   = MSGID_TASK_ADDSCHEMAFILE_NO_SUCH_FILE;
-            String message = getMessage(msgID, filename, schemaDirectory);
+            Message message = ERR_TASK_ADDSCHEMAFILE_NO_SUCH_FILE.get(
+                filename, schemaDirectory);
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
         }
         catch (Exception e)
@@ -155,11 +150,10 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_TASK_ADDSCHEMAFILE_ERROR_CHECKING_FOR_FILE;
-          String message = getMessage(msgID, filename, schemaDirectory,
-                                      getExceptionMessage(e));
+          Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_CHECKING_FOR_FILE.get(
+              filename, schemaDirectory, getExceptionMessage(e));
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                       message, msgID, e);
+                                       message, e);
         }
       }
     }
@@ -184,11 +178,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ce);
         }
 
-        int    msgID   = MSGID_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE;
-        String message = getMessage(msgID, String.valueOf(schemaFile),
-                                    ce.getMessage());
+        Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.get(
+            String.valueOf(schemaFile), ce.getMessage());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, ce);
+                                     message, ce);
       }
       catch (InitializationException ie)
       {
@@ -197,11 +190,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ie);
         }
 
-        int    msgID   = MSGID_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE;
-        String message = getMessage(msgID, String.valueOf(schemaFile),
-                                    ie.getMessage());
+        Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.get(
+            String.valueOf(schemaFile), ie.getMessage());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                     message, msgID, ie);
+                                     message, ie);
       }
     }
   }
@@ -224,10 +216,9 @@
 
     if (schemaLock == null)
     {
-      int    msgID   = MSGID_TASK_ADDSCHEMAFILE_CANNOT_LOCK_SCHEMA;
-      String message = getMessage(msgID, String.valueOf(schemaDN));
-      logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_TASK_ADDSCHEMAFILE_CANNOT_LOCK_SCHEMA.get(
+          String.valueOf(schemaDN));
+      logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
 
@@ -280,11 +271,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, ce);
           }
 
-          int    msgID   = MSGID_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE;
-          String message = getMessage(msgID, String.valueOf(schemaFile),
-                                      ce.getMessage());
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.
+              get(String.valueOf(schemaFile), ce.getMessage());
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
         catch (InitializationException ie)
@@ -294,11 +283,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, ie);
           }
 
-          int    msgID   = MSGID_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE;
-          String message = getMessage(msgID, String.valueOf(schemaFile),
-                                      ie.getMessage());
-          logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.
+              get(String.valueOf(schemaFile), ie.getMessage());
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
       }
@@ -319,11 +306,10 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int msgID = MSGID_TASK_ADDSCHEMAFILE_CANNOT_NOTIFY_SYNC_PROVIDER;
-            String message = getMessage(msgID, provider.getClass().getName(),
-                                        getExceptionMessage(e));
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message =
+                ERR_TASK_ADDSCHEMAFILE_CANNOT_NOTIFY_SYNC_PROVIDER.
+                  get(provider.getClass().getName(), getExceptionMessage(e));
+            logError(message);
           }
         }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/BackupTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/BackupTask.java
index 00c80f8..f04ec5d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/BackupTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/BackupTask.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.core.DirectoryServer.getAttributeType;
-import static org.opends.server.messages.TaskMessages.*;
-import static org.opends.server.messages.ToolMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.TaskMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.DATE_FORMAT_GMT_TIME;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.util.ServerConstants.
@@ -50,8 +50,6 @@
 import org.opends.server.types.BackupDirectory;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.Operation;
 import org.opends.server.types.Privilege;
 import org.opends.server.types.ResultCode;
@@ -108,10 +106,9 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.BACKEND_BACKUP, operation))
       {
-        int    msgID   = MSGID_TASK_BACKUP_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_TASK_BACKUP_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -207,21 +204,17 @@
     {
       if (!backendIDList.isEmpty())
       {
-        int    msgID   = MSGID_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID;
-        String message = getMessage(msgID, ATTR_TASK_BACKUP_ALL,
-                                    ATTR_TASK_BACKUP_BACKEND_ID);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID.get(
+            ATTR_TASK_BACKUP_ALL, ATTR_TASK_BACKUP_BACKEND_ID);
+        logError(message);
         return false;
       }
     }
     else if (backendIDList.isEmpty())
     {
-      int    msgID   = MSGID_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID;
-      String message = getMessage(msgID, ATTR_TASK_BACKUP_ALL,
-                                  ATTR_TASK_BACKUP_BACKEND_ID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID.get(
+          ATTR_TASK_BACKUP_ALL, ATTR_TASK_BACKUP_BACKEND_ID);
+      logError(message);
       return false;
     }
 
@@ -241,12 +234,10 @@
     {
       if (! incremental)
       {
-        int    msgID   = MSGID_BACKUPDB_INCREMENTAL_BASE_REQUIRES_INCREMENTAL;
-        String message = getMessage(msgID,
-                                    ATTR_TASK_BACKUP_INCREMENTAL_BASE_ID,
-                                    ATTR_TASK_BACKUP_INCREMENTAL);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_BACKUPDB_INCREMENTAL_BASE_REQUIRES_INCREMENTAL.
+            get(ATTR_TASK_BACKUP_INCREMENTAL_BASE_ID,
+                ATTR_TASK_BACKUP_INCREMENTAL);
+        logError(message);
         return false;
       }
     }
@@ -256,12 +247,9 @@
     // was given.
     if (signHash && (! hash))
     {
-      int    msgID   = MSGID_BACKUPDB_SIGN_REQUIRES_HASH;
-      String message = getMessage(msgID,
-                                  ATTR_TASK_BACKUP_SIGN_HASH,
-                                  ATTR_TASK_BACKUP_HASH);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_BACKUPDB_SIGN_REQUIRES_HASH.get(
+          ATTR_TASK_BACKUP_SIGN_HASH, ATTR_TASK_BACKUP_HASH);
+      logError(message);
       return false;
     }
 
@@ -275,9 +263,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_BACKUPDB_CANNOT_CREATE_BACKUP_DIR;
-        String message = getMessage(msgID, backupDirectory.getPath(),
-                                    getExceptionMessage(e));
+        Message message = ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR.get(
+                backupDirectory.getPath(), getExceptionMessage(e));
         System.err.println(message);
         return false;
       }
@@ -308,17 +295,14 @@
         Backend b = DirectoryServer.getBackend(id);
         if (b == null || configEntries.get(id) == null)
         {
-          int    msgID   = MSGID_BACKUPDB_NO_BACKENDS_FOR_ID;
-          String message = getMessage(msgID, id);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_BACKUPDB_NO_BACKENDS_FOR_ID.get(id);
+          logError(message);
         }
         else if (! b.supportsBackup())
         {
-          int    msgID   = MSGID_BACKUPDB_BACKUP_NOT_SUPPORTED;
-          String message = getMessage(msgID, b.getBackendID());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                   msgID);
+          Message message =
+              WARN_BACKUPDB_BACKUP_NOT_SUPPORTED.get(b.getBackendID());
+          logError(message);
         }
         else
         {
@@ -337,10 +321,8 @@
     // If there are no backends to archive, then print an error and exit.
     if (backendsToArchive.isEmpty())
     {
-      int    msgID   = MSGID_BACKUPDB_NO_BACKENDS_TO_ARCHIVE;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = WARN_BACKUPDB_NO_BACKENDS_TO_ARCHIVE.get();
+      logError(message);
       return false;
     }
 
@@ -378,19 +360,16 @@
         }
         catch (ConfigException ce)
         {
-          int msgID   = MSGID_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR;
-          String message = getMessage(msgID, descriptorPath, ce.getMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR.get(
+              descriptorPath, ce.getMessage());
+          logError(message);
           return false;
         }
         catch (Exception e)
         {
-          int msgID   = MSGID_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR;
-          String message = getMessage(msgID, descriptorPath,
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR.get(
+              descriptorPath, getExceptionMessage(e));
+          logError(message);
           return false;
         }
       }
@@ -407,11 +386,9 @@
       }
       catch (Exception e)
       {
-        int msgID   = MSGID_BACKUPDB_CANNOT_CREATE_BACKUP_DIR;
-        String message = getMessage(msgID, backupLocation.getPath(),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR.get(
+            backupLocation.getPath(), getExceptionMessage(e));
+        logError(message);
         return false;
       }
 
@@ -440,21 +417,17 @@
     catch (DirectoryException de)
     {
       DirectoryServer.notifyBackupEnded(b, backupConfig, false);
-      int msgID   = MSGID_BACKUPDB_ERROR_DURING_BACKUP;
-      String message = getMessage(msgID, b.getBackendID(),
-                                  de.getErrorMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_BACKUPDB_ERROR_DURING_BACKUP.get(
+          b.getBackendID(), de.getMessageObject());
+      logError(message);
       return false;
     }
     catch (Exception e)
     {
       DirectoryServer.notifyBackupEnded(b, backupConfig, false);
-      int msgID   = MSGID_BACKUPDB_ERROR_DURING_BACKUP;
-      String message = getMessage(msgID, b.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_BACKUPDB_ERROR_DURING_BACKUP.get(
+          b.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return false;
     }
 
@@ -474,21 +447,17 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_BACKUPDB_CANNOT_LOCK_BACKEND;
-        String message = getMessage(msgID, b.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
+            b.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         return false;
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_BACKUPDB_CANNOT_LOCK_BACKEND;
-      String message = getMessage(msgID, b.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
+          b.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return false;
     }
 
@@ -508,21 +477,17 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        int msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-        String message = getMessage(msgID, b.getBackendID(),
-                             String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+            b.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         return false;
       }
     }
     catch (Exception e)
     {
-      int msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-      String message = getMessage(msgID, b.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND,
-               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+      Message message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+          b.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return false;
     }
 
@@ -568,10 +533,8 @@
 
       try
       {
-        int    msgID = MSGID_BACKUPDB_STARTING_BACKUP;
-        String message = getMessage(msgID, b.getBackendID());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                 msgID);
+        Message message = NOTE_BACKUPDB_STARTING_BACKUP.get(b.getBackendID());
+        logError(message);
 
 
         // Get the path to the directory to use for this backup.  If we will be
@@ -610,18 +573,14 @@
     // in the process.
     if (errorsEncountered)
     {
-      int    msgID = MSGID_BACKUPDB_COMPLETED_WITH_ERRORS;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-               msgID);
+      Message message = NOTE_BACKUPDB_COMPLETED_WITH_ERRORS.get();
+      logError(message);
       return TaskState.COMPLETED_WITH_ERRORS;
     }
     else
     {
-      int    msgID = MSGID_BACKUPDB_COMPLETED_SUCCESSFULLY;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-               msgID);
+      Message message = NOTE_BACKUPDB_COMPLETED_SUCCESSFULLY.get();
+      logError(message);
       return TaskState.COMPLETED_SUCCESSFULLY;
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/DisconnectClientTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/DisconnectClientTask.java
index adaf290..9298e61 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/DisconnectClientTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/DisconnectClientTask.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 
 
@@ -42,14 +43,11 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.Operation;
 import org.opends.server.types.Privilege;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.TaskMessages.*;
+import static org.opends.messages.TaskMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -69,7 +67,7 @@
   private long connectionID;
 
   // The disconnect message to send to the client.
-  private String disconnectMessage;
+  private Message disconnectMessage;
 
 
 
@@ -88,10 +86,9 @@
       ClientConnection conn = operation.getClientConnection();
       if (! conn.hasPrivilege(Privilege.DISCONNECT_CLIENT, operation))
       {
-        int    msgID   = MSGID_TASK_DISCONNECT_NO_PRIVILEGE;
-        String message = getMessage(msgID);
+        Message message = ERR_TASK_DISCONNECT_NO_PRIVILEGE.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -116,10 +113,10 @@
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_TASK_DISCONNECT_INVALID_CONN_ID;
-            String message = getMessage(msgID, v.getStringValue());
+            Message message =
+                ERR_TASK_DISCONNECT_INVALID_CONN_ID.get(v.getStringValue());
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID, e);
+                                         message, e);
           }
         }
       }
@@ -127,10 +124,10 @@
 
     if (connectionID < 0)
     {
-      int    msgID   = MSGID_TASK_DISCONNECT_NO_CONN_ID;
-      String message = getMessage(msgID, ATTR_TASK_DISCONNECT_CONN_ID);
+      Message message =
+          ERR_TASK_DISCONNECT_NO_CONN_ID.get(ATTR_TASK_DISCONNECT_CONN_ID);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -159,10 +156,10 @@
           }
           else
           {
-            int    msgID   = MSGID_TASK_DISCONNECT_INVALID_NOTIFY_CLIENT;
-            String message = getMessage(msgID, stringValue);
+            Message message =
+                ERR_TASK_DISCONNECT_INVALID_NOTIFY_CLIENT.get(stringValue);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
         }
       }
@@ -170,7 +167,7 @@
 
 
     // Get the disconnect message.
-    disconnectMessage = getMessage(MSGID_TASK_DISCONNECT_GENERIC_MESSAGE);
+    disconnectMessage = INFO_TASK_DISCONNECT_GENERIC_MESSAGE.get();
     attrType = DirectoryServer.getAttributeType(ATTR_TASK_DISCONNECT_MESSAGE,
                                                 true);
     attrList = taskEntry.getAttribute(attrType);
@@ -181,7 +178,7 @@
       {
         for (AttributeValue v : a.getValues())
         {
-          disconnectMessage = v.getStringValue();
+          disconnectMessage = Message.raw(v.getStringValue());
           break disconnectMessageLoop;
         }
       }
@@ -216,19 +213,17 @@
     // terminate it.
     if (clientConnection == null)
     {
-      int    msgID   = MSGID_TASK_DISCONNECT_NO_SUCH_CONNECTION;
-      String message = getMessage(msgID, connectionID);
-
-      logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_TASK_DISCONNECT_NO_SUCH_CONNECTION.get(
+                  String.valueOf(connectionID));
+      logError(message);
 
       return TaskState.COMPLETED_WITH_ERRORS;
     }
     else
     {
       clientConnection.disconnect(DisconnectReason.ADMIN_DISCONNECT,
-                                  notifyClient, disconnectMessage,
-                                  MSGID_TASK_DISCONNECT_MESSAGE);
+                                  notifyClient, disconnectMessage);
       return TaskState.COMPLETED_SUCCESSFULLY;
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java
index 7b17401..15a8a9c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/EnterLockdownModeTask.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 
 
@@ -38,8 +39,7 @@
 import org.opends.server.types.Operation;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.TaskMessages.*;
+import static org.opends.messages.TaskMessages.*;
 
 
 
@@ -65,20 +65,16 @@
       DN authzDN = operation.getAuthorizationDN();
       if ((authzDN == null) || (! DirectoryServer.isRootDN(authzDN)))
       {
-        int msgID = MSGID_TASK_ENTERLOCKDOWN_NOT_ROOT;
-        String message = getMessage(msgID);
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_TASK_ENTERLOCKDOWN_NOT_ROOT.get();
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
       InetAddress clientAddress =
            operation.getClientConnection().getRemoteAddress();
       if ((clientAddress != null) && (! clientAddress.isLoopbackAddress()))
       {
-        int msgID = MSGID_TASK_ENTERLOCKDOWN_NOT_LOOPBACK;
-        String message = getMessage(msgID);
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_TASK_ENTERLOCKDOWN_NOT_LOOPBACK.get();
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/ExportTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/ExportTask.java
index cbb902c..8ac3217 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/ExportTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/ExportTask.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 import static org.opends.server.core.DirectoryServer.getAttributeType;
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.TaskMessages.*;
-import static org.opends.server.messages.ToolMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.TaskMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
@@ -43,8 +43,6 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ExistingFileBehavior;
 import org.opends.server.types.LDIFExportConfig;
 import org.opends.server.types.Operation;
@@ -92,10 +90,9 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.LDIF_EXPORT, operation))
       {
-        int    msgID   = MSGID_TASK_LDIFEXPORT_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_TASK_LDIFEXPORT_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -253,20 +250,16 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+              filterString, de.getMessageObject());
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+              filterString, getExceptionMessage(e));
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
       }
@@ -288,20 +281,16 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+              filterString, de.getMessageObject());
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+              filterString, getExceptionMessage(e));
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
       }
@@ -315,18 +304,14 @@
 
     if (backend == null)
     {
-      int    msgID   = MSGID_LDIFEXPORT_NO_BACKENDS_FOR_ID;
-      String message = getMessage(msgID, backendID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_LDIFEXPORT_NO_BACKENDS_FOR_ID.get(backendID);
+      logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
     else if (! backend.supportsLDIFExport())
     {
-      int    msgID   = MSGID_LDIFEXPORT_CANNOT_EXPORT_BACKEND;
-      String message = getMessage(msgID, backendID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_LDIFEXPORT_CANNOT_EXPORT_BACKEND.get(backendID);
+      logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
 
@@ -348,18 +333,16 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE;
-          String message = getMessage(msgID, s, de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+              s, de.getMessageObject());
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE;
-          String message = getMessage(msgID, s, getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+              s, getExceptionMessage(e));
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
 
@@ -384,28 +367,25 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE;
-          String message = getMessage(msgID, s, de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+              s, de.getMessageObject());
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE;
-          String message = getMessage(msgID, s, getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+              s, getExceptionMessage(e));
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
 
         if (! Backend.handlesEntry(includeBranch, defaultIncludeBranches,
                                    excludeBranches))
         {
-          int    msgID   = MSGID_LDIFEXPORT_INVALID_INCLUDE_BASE;
-          String message = getMessage(msgID, s, backendID);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message =
+              ERR_LDIFEXPORT_INVALID_INCLUDE_BASE.get(s, backendID);
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
 
@@ -461,21 +441,17 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_LOCK_BACKEND;
-          String message = getMessage(msgID, backend.getBackendID(),
-                                      String.valueOf(failureReason));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+              backend.getBackendID(), String.valueOf(failureReason));
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFEXPORT_CANNOT_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+            backend.getBackendID(), getExceptionMessage(e));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
 
@@ -493,19 +469,17 @@
         catch (DirectoryException de)
         {
           DirectoryServer.notifyExportEnded(backend, exportConfig, false);
-          int    msgID   = MSGID_LDIFEXPORT_ERROR_DURING_EXPORT;
-          String message = getMessage(msgID, de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message =
+              ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(de.getMessageObject());
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
         catch (Exception e)
         {
           DirectoryServer.notifyExportEnded(backend, exportConfig, false);
-          int    msgID   = MSGID_LDIFEXPORT_ERROR_DURING_EXPORT;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message =
+              ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(getExceptionMessage(e));
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
       }
@@ -518,21 +492,17 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.releaseLock(lockFile, failureReason))
           {
-            int    msgID   = MSGID_LDIFEXPORT_CANNOT_UNLOCK_BACKEND;
-            String message = getMessage(msgID, backend.getBackendID(),
-                                        String.valueOf(failureReason));
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+                backend.getBackendID(), String.valueOf(failureReason));
+            logError(message);
             return TaskState.COMPLETED_WITH_ERRORS;
           }
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_UNLOCK_BACKEND;
-          String message = getMessage(msgID, backend.getBackendID(),
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                   message, msgID);
+          Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+              backend.getBackendID(), getExceptionMessage(e));
+          logError(message);
           return TaskState.COMPLETED_WITH_ERRORS;
         }
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/ImportTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/ImportTask.java
index e2615ce..3027835 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/ImportTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/ImportTask.java
@@ -25,10 +25,10 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.TaskMessages.*;
-import static org.opends.server.messages.ToolMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.TaskMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
@@ -47,8 +47,8 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.ExistingFileBehavior;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.Operation;
@@ -107,10 +107,9 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.LDIF_IMPORT, operation))
       {
-        int    msgID   = MSGID_TASK_LDIFIMPORT_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_TASK_LDIFIMPORT_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -227,11 +226,9 @@
     // "backendID" argument was provided.
     if(includeBranchStrings.isEmpty() && backendID == null)
     {
-      int    msgID   = MSGID_LDIFIMPORT_MISSING_BACKEND_ARGUMENT;
-      String message = getMessage(msgID, typeIncludeBranch.getNameOrOID(),
-                                  typeBackendID.getNameOrOID());
-      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                   msgID);
+      Message message = ERR_LDIFIMPORT_MISSING_BACKEND_ARGUMENT.get(
+          typeIncludeBranch.getNameOrOID(), typeBackendID.getNameOrOID());
+      throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
     Backend backend = null;
@@ -250,17 +247,15 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE;
-        String message = getMessage(msgID, s, de.getErrorMessage());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+            s, de.getMessageObject());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE;
-        String message = getMessage(msgID, s, getExceptionMessage(e));
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+            s, getExceptionMessage(e));
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
       if(! includeBranches.contains(includeBranch))
@@ -277,17 +272,15 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE;
-        String message = getMessage(msgID, s, de.getErrorMessage());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+            s, de.getMessageObject());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE;
-        String message = getMessage(msgID, s, getExceptionMessage(e));
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+            s, getExceptionMessage(e));
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
       if (! excludeBranches.contains(excludeBranch))
@@ -304,11 +297,9 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER;
-        String message = getMessage(msgID, filterString,
-                                    de.getErrorMessage());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+            filterString, de.getMessageObject());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -320,11 +311,9 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER;
-        String message = getMessage(msgID, filterString,
-                                    de.getErrorMessage());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+            filterString, de.getMessageObject());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
 
@@ -333,17 +322,13 @@
       backend = DirectoryServer.getBackend(backendID);
       if (backend == null)
       {
-        int    msgID   = MSGID_LDIFIMPORT_NO_BACKENDS_FOR_ID;
-        String message = getMessage(msgID, backendID);
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_LDIFIMPORT_NO_BACKENDS_FOR_ID.get();
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (! backend.supportsLDIFImport())
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_IMPORT;
-        String message = getMessage(msgID, backendID);
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message 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
       // base was included, and the "append" ption was not provided, the
@@ -358,11 +343,9 @@
           builder.append(dn.toNormalizedString());
           builder.append(" ");
         }
-        int    msgID   = MSGID_LDIFIMPORT_MISSING_CLEAR_BACKEND;
-        String message = getMessage(msgID, builder.toString(),
-                                    typeClearBackend.getNameOrOID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_LDIFIMPORT_MISSING_CLEAR_BACKEND.get(
+            builder.toString(), typeClearBackend.getNameOrOID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
     else
@@ -380,12 +363,10 @@
           else if(backend != locatedBackend)
           {
             // The include branches span across multiple backends.
-            int    msgID   = MSGID_LDIFIMPORT_INVALID_INCLUDE_BASE;
-            String message = getMessage(msgID,
-                                        includeBranch.toNormalizedString(),
-                                        backend.getBackendID());
+            Message message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
+                includeBranch.toNormalizedString(), backend.getBackendID());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                         message, msgID);
+                                         message);
           }
         }
       }
@@ -403,11 +384,9 @@
       if (! Backend.handlesEntry(includeBranch, defaultIncludeBranches,
                                  excludeBranches))
       {
-        int    msgID   = MSGID_LDIFIMPORT_INVALID_INCLUDE_BASE;
-        String message = getMessage(msgID, includeBranch.toNormalizedString(),
-                                    backend.getBackendID());
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
+            includeBranch.toNormalizedString(), backend.getBackendID());
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
   }
@@ -459,11 +438,9 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER;
-        String message = getMessage(msgID, filterString,
-                                    de.getErrorMessage());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+            filterString, de.getMessageObject());
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
     }
@@ -478,11 +455,9 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER;
-        String message = getMessage(msgID, filterString,
-                                    de.getErrorMessage());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+            filterString, de.getMessageObject());
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
     }
@@ -505,18 +480,16 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE;
-        String message = getMessage(msgID, s, de.getErrorMessage());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+            s, de.getMessageObject());
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE;
-        String message = getMessage(msgID, s, getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+            s, getExceptionMessage(e));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
 
@@ -532,18 +505,14 @@
 
       if (backend == null)
       {
-        int    msgID   = MSGID_LDIFIMPORT_NO_BACKENDS_FOR_ID;
-        String message = getMessage(msgID, backendID);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_NO_BACKENDS_FOR_ID.get();
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
       else if (! backend.supportsLDIFImport())
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_IMPORT;
-        String message = getMessage(msgID, backendID);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_IMPORT.get(backendID);
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
       // Make sure that if the "backendID" argument was provided, no include
@@ -560,11 +529,9 @@
           builder.append(" / ");
           builder.append(backend.getBaseDNs()[i].toNormalizedString());
         }
-        int    msgID   = MSGID_LDIFIMPORT_MISSING_CLEAR_BACKEND;
-        String message = getMessage(msgID, builder.toString(),
-                                    ATTR_IMPORT_CLEAR_BACKEND);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_MISSING_CLEAR_BACKEND.get(
+            builder.toString(), ATTR_IMPORT_CLEAR_BACKEND);
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
     }
@@ -583,12 +550,9 @@
           else if(backend != locatedBackend)
           {
             // The include branches span across multiple backends.
-            int    msgID   = MSGID_LDIFIMPORT_INVALID_INCLUDE_BASE;
-            String message = getMessage(msgID,
-                                        includeBranch.toNormalizedString(),
-                                        backend.getBackendID());
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
+                includeBranch.toNormalizedString(), backend.getBackendID());
+            logError(message);
             return TaskState.STOPPED_BY_ERROR;
           }
         }
@@ -636,18 +600,16 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE;
-        String message = getMessage(msgID, s, de.getErrorMessage());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+            s, de.getMessageObject());
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE;
-        String message = getMessage(msgID, s, getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+            s, getExceptionMessage(e));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
 
@@ -669,11 +631,9 @@
         if (! Backend.handlesEntry(includeBranch, defaultIncludeBranches,
                                    excludeBranches))
         {
-          int    msgID   = MSGID_LDIFIMPORT_INVALID_INCLUDE_BASE;
-          String message = getMessage(msgID, includeBranch.toNormalizedString(),
-                                      backend.getBackendID());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
+              includeBranch.toNormalizedString(), backend.getBackendID());
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
       }
@@ -716,10 +676,9 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE;
-        String message = getMessage(msgID, rejectFile, getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE.get(
+            rejectFile, getExceptionMessage(e));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
     }
@@ -742,10 +701,9 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE;
-        String message = getMessage(msgID, skipFile, getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE.get(
+            skipFile, getExceptionMessage(e));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
     }
@@ -772,8 +730,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               e.getErrorMessage(), e.getMessageID());
+      logError(e.getMessageObject());
       return TaskState.STOPPED_BY_ERROR;
     }
 
@@ -787,11 +744,9 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_LOCK_BACKEND;
-          String message = getMessage(msgID, backend.getBackendID(),
-                                      String.valueOf(failureReason));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
+              backend.getBackendID(), String.valueOf(failureReason));
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
       }
@@ -802,11 +757,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
+            backend.getBackendID(), getExceptionMessage(e));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
 
@@ -824,10 +777,9 @@
         }
 
         DirectoryServer.notifyImportEnded(backend, importConfig, false);
-        int    msgID   = MSGID_LDIFIMPORT_ERROR_DURING_IMPORT;
-        String message = getMessage(msgID, de.getErrorMessage());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message =
+            ERR_LDIFIMPORT_ERROR_DURING_IMPORT.get(de.getMessageObject());
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
       catch (Exception e)
@@ -838,10 +790,9 @@
         }
 
         DirectoryServer.notifyImportEnded(backend, importConfig, false);
-        int    msgID   = MSGID_LDIFIMPORT_ERROR_DURING_IMPORT;
-        String message = getMessage(msgID, getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message =
+            ERR_LDIFIMPORT_ERROR_DURING_IMPORT.get(getExceptionMessage(e));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
       finally
@@ -853,11 +804,9 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.releaseLock(lockFile, failureReason))
           {
-            int    msgID   = MSGID_LDIFIMPORT_CANNOT_UNLOCK_BACKEND;
-            String message = getMessage(msgID, backend.getBackendID(),
-                                        String.valueOf(failureReason));
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                     message, msgID);
+            Message message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
+                backend.getBackendID(), String.valueOf(failureReason));
+            logError(message);
             return TaskState.COMPLETED_WITH_ERRORS;
           }
         }
@@ -868,11 +817,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_UNLOCK_BACKEND;
-          String message = getMessage(msgID, backend.getBackendID(),
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                   message, msgID);
+          Message message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
+              backend.getBackendID(), getExceptionMessage(e));
+          logError(message);
           return TaskState.COMPLETED_WITH_ERRORS;
         }
 
@@ -896,8 +843,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 e.getErrorMessage(), e.getMessageID());
+        logError(e.getMessageObject());
         return TaskState.STOPPED_BY_ERROR;
       }
       DirectoryServer.notifyImportEnded(backend, importConfig, true);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/InitializeTargetTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/InitializeTargetTask.java
index c4cf747..787dd48 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/InitializeTargetTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/InitializeTargetTask.java
@@ -25,13 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.core.DirectoryServer.getAttributeType;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
 
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
@@ -39,7 +38,7 @@
 
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
-import org.opends.server.messages.TaskMessages;
+import org.opends.messages.TaskMessages;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.replication.plugin.ReplicationDomain;
 import org.opends.server.types.Attribute;
@@ -48,8 +47,8 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.Modification;
 import org.opends.server.types.ModificationType;
 import org.opends.server.types.ResultCode;
@@ -103,10 +102,11 @@
     }
     catch(Exception e)
     {
-      int    msgID   = TaskMessages.MSGID_TASK_INITIALIZE_INVALID_DN;
-      String message = getMessage(msgID) + e.getMessage();
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(TaskMessages.ERR_TASK_INITIALIZE_INVALID_DN.get());
+      mb.append(e.getLocalizedMessage());
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-          message, msgID);
+              mb.toMessage());
     }
     domain=ReplicationDomain.retrievesReplicationDomain(domainDN);
 
@@ -134,9 +134,10 @@
     catch(DirectoryException de)
     {
       // This log will go to the task log message
-      logError(ErrorLogCategory.TASK,
-          ErrorLogSeverity.SEVERE_ERROR,
-          "Initialize Task stopped by error" + de.getErrorMessage(), 1);
+      MessageBuilder mb = new MessageBuilder();
+      mb.append("Initialize Task stopped by error");
+      mb.append(de.getMessageObject());
+      logError(mb.toMessage());
 
       return TaskState.STOPPED_BY_ERROR;
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/InitializeTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/InitializeTask.java
index 4d58886..603c2c7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/InitializeTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/InitializeTask.java
@@ -25,21 +25,19 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.core.DirectoryServer.getAttributeType;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
 import java.util.List;
 
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
-import org.opends.server.messages.TaskMessages;
+import org.opends.messages.TaskMessages;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.replication.plugin.ReplicationDomain;
 import org.opends.server.types.Attribute;
@@ -48,8 +46,6 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.Modification;
 import org.opends.server.types.ModificationType;
 import org.opends.server.types.ResultCode;
@@ -113,10 +109,11 @@
     }
     catch(Exception e)
     {
-      int    msgID   = TaskMessages.MSGID_TASK_INITIALIZE_INVALID_DN;
-      String message = getMessage(msgID) + e.getMessage();
+      MessageBuilder mb = new MessageBuilder();
+      mb.append(TaskMessages.ERR_TASK_INITIALIZE_INVALID_DN.get());
+      mb.append(e.getMessage());
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-          message, msgID);
+          mb.toMessage());
     }
 
     domain = ReplicationDomain.retrievesReplicationDomain(domainDN);
@@ -161,10 +158,7 @@
     catch(InterruptedException ie) {}
     catch(DirectoryException de)
     {
-      int msgID   = de.getMessageID();
-      String message = getMessage(msgID, de.getErrorMessage());
-      logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      logError(de.getMessageObject());
       initState = TaskState.STOPPED_BY_ERROR;
     }
 
@@ -189,10 +183,7 @@
     {
       if (de != null)
       {
-        int msgID   = de.getMessageID();
-        String message = getMessage(msgID, de.getErrorMessage());
-        logError(ErrorLogCategory.TASK, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        logError(de.getMessageObject());
       }
       if (debugEnabled())
       {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java
index 36b70ff..d6433ee 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 
 
@@ -38,8 +39,7 @@
 import org.opends.server.types.Operation;
 import org.opends.server.types.ResultCode;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.TaskMessages.*;
+import static org.opends.messages.TaskMessages.*;
 
 
 
@@ -65,20 +65,16 @@
       DN authzDN = operation.getAuthorizationDN();
       if ((authzDN == null) || (! DirectoryServer.isRootDN(authzDN)))
       {
-        int msgID = MSGID_TASK_LEAVELOCKDOWN_NOT_ROOT;
-        String message = getMessage(msgID);
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_TASK_LEAVELOCKDOWN_NOT_ROOT.get();
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
       InetAddress clientAddress =
            operation.getClientConnection().getRemoteAddress();
       if ((clientAddress != null) && (! clientAddress.isLoopbackAddress()))
       {
-        int msgID = MSGID_TASK_LEAVELOCKDOWN_NOT_LOOPBACK;
-        String message = getMessage(msgID);
-        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message,
-                                     msgID);
+        Message message = ERR_TASK_LEAVELOCKDOWN_NOT_LOOPBACK.get();
+        throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/RebuildTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/RebuildTask.java
index a99c3d9..f2ca592 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/RebuildTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/RebuildTask.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
@@ -36,8 +37,8 @@
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.Operation;
 import org.opends.server.types.Privilege;
 import org.opends.server.types.ResultCode;
@@ -50,23 +51,22 @@
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.TaskMessages.
-    MSGID_TASK_INDEXREBUILD_INSUFFICIENT_PRIVILEGES;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.
-    MSGID_REBUILDINDEX_ERROR_DURING_REBUILD;
-import static org.opends.server.messages.ToolMessages.
-    MSGID_REBUILDINDEX_WRONG_BACKEND_TYPE;
-import static org.opends.server.messages.ToolMessages.
-    MSGID_NO_BACKENDS_FOR_BASE;
-import static org.opends.server.messages.ToolMessages.
-    MSGID_CANNOT_DECODE_BASE_DN;
-import static org.opends.server.messages.ToolMessages.
-    MSGID_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND;
-import static org.opends.server.messages.ToolMessages.
-    MSGID_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND;
-import static org.opends.server.messages.ToolMessages.
-    MSGID_REBUILDINDEX_CANNOT_UNLOCK_BACKEND;
+import static org.opends.messages.TaskMessages.
+    ERR_TASK_INDEXREBUILD_INSUFFICIENT_PRIVILEGES;
+import static org.opends.messages.ToolMessages.
+    ERR_REBUILDINDEX_ERROR_DURING_REBUILD;
+import static org.opends.messages.ToolMessages.
+    ERR_REBUILDINDEX_WRONG_BACKEND_TYPE;
+import static org.opends.messages.ToolMessages.
+    ERR_NO_BACKENDS_FOR_BASE;
+import static org.opends.messages.ToolMessages.
+    ERR_CANNOT_DECODE_BASE_DN;
+import static org.opends.messages.ToolMessages.
+    ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND;
+import static org.opends.messages.ToolMessages.
+    ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND;
+import static org.opends.messages.ToolMessages.
+    WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND;
 import static org.opends.server.config.ConfigConstants.
     ATTR_REBUILD_BASE_DN;
 import static org.opends.server.config.ConfigConstants.
@@ -106,10 +106,9 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.LDIF_IMPORT, operation))
       {
-        int    msgID   = MSGID_TASK_INDEXREBUILD_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_TASK_INDEXREBUILD_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -153,10 +152,9 @@
     }
     catch(DirectoryException de)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BASE_DN;
-      String message = getMessage(msgID, baseDN, de.getErrorMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message =
+          ERR_CANNOT_DECODE_BASE_DN.get(baseDN, de.getMessageObject());
+      logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
 
@@ -172,19 +170,15 @@
 
     if(backend == null)
     {
-      int    msgID   = MSGID_NO_BACKENDS_FOR_BASE;
-      String message = getMessage(msgID, baseDN);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_NO_BACKENDS_FOR_BASE.get(baseDN);
+      logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
 
     if (!(backend instanceof BackendImpl))
     {
-      int    msgID   = MSGID_REBUILDINDEX_WRONG_BACKEND_TYPE;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_REBUILDINDEX_WRONG_BACKEND_TYPE.get();
+      logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
 
@@ -207,8 +201,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 e.getErrorMessage(), e.getMessageID());
+        logError(e.getMessageObject());
         return TaskState.STOPPED_BY_ERROR;
       }
 
@@ -216,21 +209,17 @@
       {
         if(! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
         {
-          int    msgID   = MSGID_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND;
-          String message = getMessage(msgID, backend.getBackendID(),
-                                      String.valueOf(failureReason));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(
+              backend.getBackendID(), String.valueOf(failureReason));
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(
+            backend.getBackendID(), getExceptionMessage(e));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
     }
@@ -240,21 +229,17 @@
       {
         if(! LockFileManager.acquireSharedLock(lockFile, failureReason))
         {
-          int    msgID   = MSGID_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND;
-          String message = getMessage(msgID, backend.getBackendID(),
-                                      String.valueOf(failureReason));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND.get(
+              backend.getBackendID(), String.valueOf(failureReason));
+          logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND.get(
+            backend.getBackendID(), getExceptionMessage(e));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
 
@@ -274,10 +259,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_REBUILDINDEX_ERROR_DURING_REBUILD;
-      String message = getMessage(msgID, e.getMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message =
+          ERR_REBUILDINDEX_ERROR_DURING_REBUILD.get(e.getMessage());
+      logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
 
@@ -288,21 +272,17 @@
       failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_REBUILDINDEX_CANNOT_UNLOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         return TaskState.COMPLETED_WITH_ERRORS;
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_REBUILDINDEX_CANNOT_UNLOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-               message, msgID);
+      Message message = WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return TaskState.COMPLETED_WITH_ERRORS;
     }
 
@@ -320,8 +300,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 e.getErrorMessage(), e.getMessageID());
+        logError(e.getMessageObject());
         return TaskState.STOPPED_BY_ERROR;
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/RestartTaskThread.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/RestartTaskThread.java
index 98e6f39..2000d68 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/RestartTaskThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/RestartTaskThread.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 
 
@@ -59,7 +60,7 @@
 
 
   // The shutdown message that will be used.
-  private String shutdownMessage;
+  private Message shutdownMessage;
 
 
 
@@ -69,7 +70,7 @@
    *
    * @param  shutdownMessage  The shutdown message that will be used.
    */
-  public RestartTaskThread(String shutdownMessage)
+  public RestartTaskThread(Message shutdownMessage)
   {
     super("Restart Task Thread");
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/RestoreTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/RestoreTask.java
index 5098980..76bb5f3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/RestoreTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/RestoreTask.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 import static org.opends.server.core.DirectoryServer.getAttributeType;
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.TaskMessages.*;
-import static org.opends.server.messages.ToolMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.TaskMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -51,8 +51,8 @@
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.Operation;
 import org.opends.server.types.Privilege;
 import org.opends.server.types.RestoreConfig;
@@ -94,10 +94,9 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.BACKEND_RESTORE, operation))
       {
-        int    msgID   = MSGID_TASK_RESTORE_INSUFFICIENT_PRIVILEGES;
-        String message = getMessage(msgID);
+        Message message = ERR_TASK_RESTORE_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -145,21 +144,17 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_RESTOREDB_CANNOT_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         return false;
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_RESTOREDB_CANNOT_LOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return false;
     }
     return true;
@@ -178,21 +173,17 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_RESTOREDB_CANNOT_UNLOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         return false;
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_RESTOREDB_CANNOT_UNLOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-               message, msgID);
+      Message message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return false;
     }
     return true;
@@ -212,11 +203,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY;
-      String message = getMessage(msgID, backupDirectory,
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY.get(
+          String.valueOf(backupDirectory), getExceptionMessage(e));
+      logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
 
@@ -228,10 +217,10 @@
       BackupInfo backupInfo = backupDir.getBackupInfo(backupID);
       if (backupInfo == null)
       {
-        int    msgID   = MSGID_RESTOREDB_INVALID_BACKUP_ID;
-        String message = getMessage(msgID, backupID, backupDirectory);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message =
+            ERR_RESTOREDB_INVALID_BACKUP_ID.get(
+                    backupID, String.valueOf(backupDirectory));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
     }
@@ -240,10 +229,10 @@
       BackupInfo latestBackup = backupDir.getLatestBackup();
       if (latestBackup == null)
       {
-        int    msgID   = MSGID_RESTOREDB_NO_BACKUPS_IN_DIRECTORY;
-        String message = getMessage(msgID, backupDirectory);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message =
+            ERR_RESTOREDB_NO_BACKUPS_IN_DIRECTORY.get(
+                    String.valueOf(backupDirectory));
+        logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
       else
@@ -267,11 +256,9 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int    msgID   = MSGID_RESTOREDB_NO_BACKENDS_FOR_DN;
-      String message = getMessage(msgID, backupDirectory,
-                                  configEntryDN.toString());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_RESTOREDB_NO_BACKENDS_FOR_DN.get(
+          String.valueOf(backupDirectory), configEntryDN.toString());
+      logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
 
@@ -283,10 +270,9 @@
 
     if (! backend.supportsRestore())
     {
-      int    msgID   = MSGID_RESTOREDB_CANNOT_RESTORE;
-      String message = getMessage(msgID, backend.getBackendID());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_RESTOREDB_CANNOT_RESTORE.get(backend.getBackendID());
+      logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
 
@@ -312,8 +298,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               e.getErrorMessage(), e.getMessageID());
+      logError(e.getMessageObject());
       return TaskState.STOPPED_BY_ERROR;
     }
 
@@ -335,21 +320,17 @@
           catch (DirectoryException de)
           {
             DirectoryServer.notifyRestoreEnded(backend, restoreConfig, false);
-            int    msgID   = MSGID_RESTOREDB_ERROR_DURING_BACKUP;
-            String message = getMessage(msgID, backupID, backupDir.getPath(),
-                                        de.getErrorMessage());
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
+                backupID, backupDir.getPath(), de.getMessageObject());
+            logError(message);
             errorsEncountered = true;
           }
           catch (Exception e)
           {
             DirectoryServer.notifyRestoreEnded(backend, restoreConfig, false);
-            int    msgID   = MSGID_RESTOREDB_ERROR_DURING_BACKUP;
-            String message = getMessage(msgID, backupID, backupDir.getPath(),
-                                        getExceptionMessage(e));
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
+                backupID, backupDir.getPath(), getExceptionMessage(e));
+            logError(message);
             errorsEncountered = true;
           }
         }
@@ -381,8 +362,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 e.getErrorMessage(), e.getMessageID());
+        logError(e.getMessageObject());
         errorsEncountered = true;
       }
       DirectoryServer.notifyRestoreEnded(backend, restoreConfig, true);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/ShutdownTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/ShutdownTask.java
index 683bf66..58cc374 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/ShutdownTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/ShutdownTask.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 
 
@@ -45,8 +46,7 @@
 import org.opends.server.types.ResultCode;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.TaskMessages.*;
+import static org.opends.messages.TaskMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -66,7 +66,7 @@
   private boolean restart;
 
   // The shutdown message that will be used.
-  private String shutdownMessage;
+  private Message shutdownMessage;
 
 
 
@@ -88,8 +88,8 @@
     Entry taskEntry = getTaskEntry();
 
     restart         = false;
-    shutdownMessage = getMessage(MSGID_TASK_SHUTDOWN_DEFAULT_MESSAGE,
-                                 String.valueOf(taskEntry.getDN()));
+    shutdownMessage = INFO_TASK_SHUTDOWN_DEFAULT_MESSAGE.get(
+        String.valueOf(taskEntry.getDN()));
 
     AttributeType attrType =
          DirectoryServer.getAttributeType(ATTR_SHUTDOWN_MESSAGE, true);
@@ -102,9 +102,8 @@
       {
         String valueString = values.iterator().next().getStringValue();
 
-        shutdownMessage = getMessage(MSGID_TASK_SHUTDOWN_CUSTOM_MESSAGE,
-                                     String.valueOf(taskEntry.getDN()),
-                                     String.valueOf(valueString));
+        shutdownMessage = INFO_TASK_SHUTDOWN_CUSTOM_MESSAGE.get(
+            String.valueOf(taskEntry.getDN()), String.valueOf(valueString));
       }
     }
 
@@ -138,10 +137,10 @@
         if (! clientConnection.hasPrivilege(Privilege.SERVER_RESTART,
                                             operation))
         {
-          int    msgID   = MSGID_TASK_SHUTDOWN_INSUFFICIENT_RESTART_PRIVILEGES;
-          String message = getMessage(msgID);
+          Message message =
+              ERR_TASK_SHUTDOWN_INSUFFICIENT_RESTART_PRIVILEGES.get();
           throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                       message, msgID);
+                                       message);
         }
       }
       else
@@ -149,10 +148,10 @@
         if (! clientConnection.hasPrivilege(Privilege.SERVER_SHUTDOWN,
                                             operation))
         {
-          int    msgID   = MSGID_TASK_SHUTDOWN_INSUFFICIENT_SHUTDOWN_PRIVILEGES;
-          String message = getMessage(msgID);
+          Message message =
+              ERR_TASK_SHUTDOWN_INSUFFICIENT_SHUTDOWN_PRIVILEGES.get();
           throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-                                       message, msgID);
+                                       message);
         }
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/ShutdownTaskThread.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/ShutdownTaskThread.java
index 3f4cc55..5037779 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/ShutdownTaskThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/ShutdownTaskThread.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tasks;
+import org.opends.messages.Message;
 
 
 
@@ -51,7 +52,7 @@
 
 
   // The shutdown message that will be used.
-  private String shutdownMessage;
+  private Message shutdownMessage;
 
 
 
@@ -61,7 +62,7 @@
    *
    * @param  shutdownMessage  The shutdown message that will be used.
    */
-  public ShutdownTaskThread(String shutdownMessage)
+  public ShutdownTaskThread(Message shutdownMessage)
   {
     super("Shutdown Task Thread");
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/TaskUtils.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/TaskUtils.java
index 8239c98..d3fb92b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/TaskUtils.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/TaskUtils.java
@@ -29,10 +29,10 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.ToolMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ConfigMessages.
-     MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.messages.ToolMessages.*;
+import static org.opends.messages.ConfigMessages.
+     INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID;
 import static org.opends.server.util.StaticUtils.*;
 
 import org.opends.server.api.Backend;
@@ -41,9 +41,10 @@
 import org.opends.server.config.StringConfigAttribute;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.ModifyOperation;
-import org.opends.server.loggers.ErrorLogger;
 import org.opends.server.types.DebugLogLevel;
-import org.opends.server.messages.TaskMessages;
+
+import org.opends.messages.TaskMessages;
+import org.opends.messages.Message;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.protocols.ldap.LDAPAttribute;
 import org.opends.server.protocols.ldap.LDAPModification;
@@ -52,8 +53,6 @@
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ModificationType;
 import org.opends.server.types.RawModification;
 import org.opends.server.types.ResultCode;
@@ -90,33 +89,28 @@
   {
     try
     {
-      int msgID = MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID;
+
       StringConfigAttribute idStub =
-           new StringConfigAttribute(ATTR_BACKEND_ID,
-                                     getMessage(msgID),
-                                     true, false, true);
+           new StringConfigAttribute(
+                   ATTR_BACKEND_ID,
+                   INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID.get(),
+                   true, false, true);
       StringConfigAttribute idAttr =
            (StringConfigAttribute) configEntry.getConfigAttribute(idStub);
       return idAttr.activeValue();
     }
     catch (ConfigException ce)
     {
-      int    msgID   = MSGID_CANNOT_DETERMINE_BACKEND_ID;
-      String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                  ce.getMessage());
-      ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                           ErrorLogSeverity.SEVERE_ERROR,
-                           message, msgID);
+      Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+          String.valueOf(configEntry.getDN()), ce.getMessage());
+      logError(message);
       return null;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CANNOT_DETERMINE_BACKEND_ID;
-      String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                  getExceptionMessage(e));
-      ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                           ErrorLogSeverity.SEVERE_ERROR,
-                           message, msgID);
+      Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+          String.valueOf(configEntry.getDN()), getExceptionMessage(e));
+      logError(message);
       return null;
     }
   }
@@ -140,21 +134,16 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BACKEND_BASE_DN;
-      String message = getMessage(msgID, DN_BACKEND_BASE, de.getErrorMessage());
-      ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                           ErrorLogSeverity.SEVERE_ERROR,
-                           message, msgID);
+      Message message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
+          DN_BACKEND_BASE, de.getMessageObject());
+      logError(message);
       return configEntries;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BACKEND_BASE_DN;
-      String message = getMessage(msgID, DN_BACKEND_BASE,
-                                  getExceptionMessage(e));
-      ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                           ErrorLogSeverity.SEVERE_ERROR,
-                           message, msgID);
+      Message message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
+          DN_BACKEND_BASE, getExceptionMessage(e));
+      logError(message);
       return configEntries;
     }
 
@@ -165,21 +154,16 @@
     }
     catch (ConfigException ce)
     {
-      int    msgID   = MSGID_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY;
-      String message = getMessage(msgID, DN_BACKEND_BASE, ce.getMessage());
-      ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                           ErrorLogSeverity.SEVERE_ERROR,
-                           message, msgID);
+      Message message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
+          DN_BACKEND_BASE, ce.getMessage());
+      logError(message);
       return configEntries;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY;
-      String message = getMessage(msgID, DN_BACKEND_BASE,
-                                  getExceptionMessage(e));
-      ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                           ErrorLogSeverity.SEVERE_ERROR,
-                           message, msgID);
+      Message message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
+          DN_BACKEND_BASE, getExceptionMessage(e));
+      logError(message);
       return configEntries;
     }
 
@@ -193,10 +177,12 @@
       String backendID;
       try
       {
-        int msgID = MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID;
+
         StringConfigAttribute idStub =
-             new StringConfigAttribute(ATTR_BACKEND_ID, getMessage(msgID),
-                                       true, false, true);
+             new StringConfigAttribute(
+                     ATTR_BACKEND_ID,
+                     INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID.get(),
+                     true, false, true);
         StringConfigAttribute idAttr =
              (StringConfigAttribute) configEntry.getConfigAttribute(idStub);
         if (idAttr == null)
@@ -210,22 +196,16 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_DETERMINE_BACKEND_ID;
-        String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                    ce.getMessage());
-        ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                             ErrorLogSeverity.SEVERE_ERROR,
-                             message, msgID);
+        Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+            String.valueOf(configEntry.getDN()), ce.getMessage());
+        logError(message);
         continue;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_DETERMINE_BACKEND_ID;
-        String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                    getExceptionMessage(e));
-        ErrorLogger.logError(ErrorLogCategory.BACKEND,
-                             ErrorLogSeverity.SEVERE_ERROR,
-                             message, msgID);
+        Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+            String.valueOf(configEntry.getDN()), getExceptionMessage(e));
+        logError(message);
         continue;
       }
 
@@ -278,7 +258,7 @@
     catch (ConfigException e)
     {
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(), e.getMessageID(), e);
+                                   e.getMessageObject(), e);
     }
 
     ArrayList<ASN1OctetString> valueList = new ArrayList<ASN1OctetString>(1);
@@ -300,10 +280,9 @@
     ResultCode resultCode = internalModify.getResultCode();
     if (resultCode != ResultCode.SUCCESS)
     {
-      int msgID;
-      msgID = TaskMessages.MSGID_TASK_CANNOT_ENABLE_BACKEND;
-      String message = getMessage(msgID, backendDNString);
-      throw new DirectoryException(resultCode, message, msgID);
+      Message message =
+          TaskMessages.ERR_TASK_CANNOT_ENABLE_BACKEND.get(backendDNString);
+      throw new DirectoryException(resultCode, message);
     }
   }
 
@@ -329,7 +308,7 @@
     catch (ConfigException e)
     {
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
-                                   e.getMessage(), e.getMessageID(), e);
+                                   e.getMessageObject(), e);
     }
 
     ArrayList<ASN1OctetString> valueList = new ArrayList<ASN1OctetString>(1);
@@ -351,10 +330,9 @@
     ResultCode resultCode = internalModify.getResultCode();
     if (resultCode != ResultCode.SUCCESS)
     {
-      int msgID;
-      msgID = TaskMessages.MSGID_TASK_CANNOT_DISABLE_BACKEND;
-      String message = getMessage(msgID, backendDNString);
-      throw new DirectoryException(resultCode, message, msgID);
+      Message message =
+          TaskMessages.ERR_TASK_CANNOT_DISABLE_BACKEND.get(backendDNString);
+      throw new DirectoryException(resultCode, message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/BackUpDB.java b/opendj-sdk/opends/src/server/org/opends/server/tools/BackUpDB.java
index c3e2a9d..c2b8623 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/BackUpDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/BackUpDB.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -48,13 +49,11 @@
 import org.opends.server.extensions.ConfigFileHandler;
 import org.opends.server.loggers.ThreadFilterTextErrorLogPublisher;
 import org.opends.server.loggers.TextWriter;
-import org.opends.server.loggers.ErrorLogger;
+import static org.opends.server.loggers.ErrorLogger.*;
 import org.opends.server.types.BackupConfig;
 import org.opends.server.types.BackupDirectory;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.NullOutputStream;
 import org.opends.server.util.args.ArgumentException;
@@ -62,9 +61,7 @@
 import org.opends.server.util.args.BooleanArgument;
 import org.opends.server.util.args.StringArgument;
 
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -93,7 +90,7 @@
 
     if(errorLogPublisher != null)
     {
-      ErrorLogger.removeErrorLogPublisher(errorLogPublisher);
+      removeErrorLogPublisher(errorLogPublisher);
     }
 
     if(retCode != 0)
@@ -167,7 +164,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_BACKUPDB_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_BACKUPDB_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.BackUpDB", toolDescription,
                             false);
@@ -182,7 +179,7 @@
                               OPTION_LONG_CONFIG_CLASS, true, false,
                               true, OPTION_VALUE_CONFIG_CLASS,
                               ConfigFileHandler.class.getName(), null,
-                              MSGID_DESCRIPTION_CONFIG_CLASS);
+                              INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -190,7 +187,7 @@
       configFile =
            new StringArgument("configfile", 'f', "configFile", true, false,
                               true, "{configFile}", null, null,
-                              MSGID_DESCRIPTION_CONFIG_FILE);
+                              INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -198,74 +195,76 @@
       backendID =
            new StringArgument("backendid", 'n', "backendID", false, true, true,
                               "{backendID}", null, null,
-                              MSGID_BACKUPDB_DESCRIPTION_BACKEND_ID);
+                              INFO_BACKUPDB_DESCRIPTION_BACKEND_ID.get());
       argParser.addArgument(backendID);
 
 
-      backUpAll = new BooleanArgument("backupall", 'a', "backUpAll",
-                                      MSGID_BACKUPDB_DESCRIPTION_BACKUP_ALL);
+      backUpAll = new BooleanArgument(
+              "backupall", 'a', "backUpAll",
+              INFO_BACKUPDB_DESCRIPTION_BACKUP_ALL.get());
       argParser.addArgument(backUpAll);
 
 
       backupIDString =
            new StringArgument("backupid", 'I', "backupID", false, false, true,
                               "{backupID}", null, null,
-                              MSGID_BACKUPDB_DESCRIPTION_BACKUP_ID);
+                              INFO_BACKUPDB_DESCRIPTION_BACKUP_ID.get());
       argParser.addArgument(backupIDString);
 
 
       backupDirectory =
            new StringArgument("backupdirectory", 'd', "backupDirectory", true,
                               false, true, "{backupDir}", null, null,
-                              MSGID_BACKUPDB_DESCRIPTION_BACKUP_DIR);
+                              INFO_BACKUPDB_DESCRIPTION_BACKUP_DIR.get());
       argParser.addArgument(backupDirectory);
 
 
-      incremental = new BooleanArgument("incremental", 'i', "incremental",
-                                        MSGID_BACKUPDB_DESCRIPTION_INCREMENTAL);
+      incremental = new BooleanArgument(
+              "incremental", 'i', "incremental",
+              INFO_BACKUPDB_DESCRIPTION_INCREMENTAL.get());
       argParser.addArgument(incremental);
 
 
       incrementalBaseID =
-           new StringArgument("incrementalbaseid", 'B', "incrementalBaseID",
-                              false, false, true, "{backupID}", null, null,
-                              MSGID_BACKUPDB_DESCRIPTION_INCREMENTAL_BASE_ID);
+           new StringArgument(
+                   "incrementalbaseid", 'B', "incrementalBaseID",
+                   false, false, true, "{backupID}", null, null,
+                   INFO_BACKUPDB_DESCRIPTION_INCREMENTAL_BASE_ID.get());
       argParser.addArgument(incrementalBaseID);
 
 
       compress = new BooleanArgument("compress", OPTION_SHORT_COMPRESS,
                                      OPTION_LONG_COMPRESS,
-                                     MSGID_BACKUPDB_DESCRIPTION_COMPRESS);
+                                     INFO_BACKUPDB_DESCRIPTION_COMPRESS.get());
       argParser.addArgument(compress);
 
 
       encrypt = new BooleanArgument("encrypt", 'y', "encrypt",
-                                    MSGID_BACKUPDB_DESCRIPTION_ENCRYPT);
+                                    INFO_BACKUPDB_DESCRIPTION_ENCRYPT.get());
       argParser.addArgument(encrypt);
 
 
       hash = new BooleanArgument("hash", 'h', "hash",
-                                 MSGID_BACKUPDB_DESCRIPTION_HASH);
+                                 INFO_BACKUPDB_DESCRIPTION_HASH.get());
       argParser.addArgument(hash);
 
 
       signHash =
            new BooleanArgument("signhash", 's', "signHash",
-                               MSGID_BACKUPDB_DESCRIPTION_SIGN_HASH);
+                               INFO_BACKUPDB_DESCRIPTION_SIGN_HASH.get());
       argParser.addArgument(signHash);
 
 
       displayUsage =
            new BooleanArgument("help", OPTION_SHORT_HELP,
                                OPTION_LONG_HELP,
-                               MSGID_DESCRIPTION_USAGE);
+                               INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(displayUsage);
       argParser.setUsageArgument(displayUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -279,8 +278,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -302,18 +300,18 @@
     {
       if (backendID.isPresent())
       {
-        int    msgID   = MSGID_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID;
-        String message = getMessage(msgID, backUpAll.getLongIdentifier(),
-                                    backendID.getLongIdentifier());
+        Message message = ERR_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID.get(
+                backUpAll.getLongIdentifier(),
+                backendID.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
     }
     else if (! backendID.isPresent())
     {
-      int    msgID   = MSGID_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID;
-      String message = getMessage(msgID, backUpAll.getLongIdentifier(),
-                                  backendID.getLongIdentifier());
+      Message message = ERR_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID.get(
+              backUpAll.getLongIdentifier(),
+              backendID.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -340,10 +338,10 @@
     {
       if (! incremental.isPresent())
       {
-        int    msgID   = MSGID_BACKUPDB_INCREMENTAL_BASE_REQUIRES_INCREMENTAL;
-        String message = getMessage(msgID,
-                                    incrementalBaseID.getLongIdentifier(),
-                                    incremental.getLongIdentifier());
+        Message message =
+                ERR_BACKUPDB_INCREMENTAL_BASE_REQUIRES_INCREMENTAL.get(
+                        incrementalBaseID.getLongIdentifier(),
+                        incremental.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -360,9 +358,9 @@
     // was given.
     if (signHash.isPresent() && (! hash.isPresent()))
     {
-      int    msgID   = MSGID_BACKUPDB_SIGN_REQUIRES_HASH;
-      String message = getMessage(msgID, signHash.getLongIdentifier(),
-                                  hash.getLongIdentifier());
+      Message message = ERR_BACKUPDB_SIGN_REQUIRES_HASH.get(
+              signHash.getLongIdentifier(),
+              hash.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -378,9 +376,9 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_BACKUPDB_CANNOT_CREATE_BACKUP_DIR;
-        String message = getMessage(msgID, backupDirectory.getValue(),
-                                    getExceptionMessage(e));
+        Message message = ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR.get(
+                backupDirectory.getValue(),
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -399,8 +397,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SERVER_BOOTSTRAP_ERROR;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -412,15 +410,13 @@
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -434,22 +430,19 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -463,22 +456,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -491,22 +484,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -519,7 +512,7 @@
         errorLogPublisher =
             new ThreadFilterTextErrorLogPublisher(Thread.currentThread(),
                                                   new TextWriter.STREAM(out));
-        ErrorLogger.addErrorLogPublisher(errorLogPublisher);
+        addErrorLogPublisher(errorLogPublisher);
 
       }
       catch(Exception e)
@@ -573,10 +566,9 @@
         {
           if (! b.supportsBackup())
           {
-            int    msgID   = MSGID_BACKUPDB_BACKUP_NOT_SUPPORTED;
-            String message = getMessage(msgID, b.getBackendID());
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-                     msgID);
+            Message message =
+                WARN_BACKUPDB_BACKUP_NOT_SUPPORTED.get(b.getBackendID());
+            logError(message);
           }
           else
           {
@@ -591,10 +583,8 @@
       {
         for (String id : requestedBackends)
         {
-          int    msgID   = MSGID_BACKUPDB_NO_BACKENDS_FOR_ID;
-          String message = getMessage(msgID, id);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_BACKUPDB_NO_BACKENDS_FOR_ID.get(id);
+          logError(message);
         }
 
         return 1;
@@ -609,10 +599,8 @@
     // If there are no backends to archive, then print an error and exit.
     if (backendsToArchive.isEmpty())
     {
-      int    msgID   = MSGID_BACKUPDB_NO_BACKENDS_TO_ARCHIVE;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = WARN_BACKUPDB_NO_BACKENDS_TO_ARCHIVE.get();
+      logError(message);
       return 1;
     }
 
@@ -628,31 +616,25 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
         {
-          int    msgID   = MSGID_BACKUPDB_CANNOT_LOCK_BACKEND;
-          String message = getMessage(msgID, b.getBackendID(),
-                                      String.valueOf(failureReason));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
+              b.getBackendID(), String.valueOf(failureReason));
+          logError(message);
           errorsEncountered = true;
           continue;
         }
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_BACKUPDB_CANNOT_LOCK_BACKEND;
-        String message = getMessage(msgID, b.getBackendID(),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
+            b.getBackendID(), getExceptionMessage(e));
+        logError(message);
         errorsEncountered = true;
         continue;
       }
 
 
-      int    msgID = MSGID_BACKUPDB_STARTING_BACKUP;
-      String message = getMessage(msgID, b.getBackendID());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-               msgID);
+      Message message = NOTE_BACKUPDB_STARTING_BACKUP.get(b.getBackendID());
+      logError(message);
 
 
       // Get the config entry for this backend.
@@ -693,10 +675,9 @@
           }
           catch (ConfigException ce)
           {
-            msgID   = MSGID_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR;
-            message = getMessage(msgID, descriptorPath, ce.getMessage());
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            message = ERR_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR.get(
+                descriptorPath, ce.getMessage());
+            logError(message);
             errorsEncountered = true;
 
             try
@@ -705,30 +686,25 @@
               StringBuilder failureReason = new StringBuilder();
               if (! LockFileManager.releaseLock(lockFile, failureReason))
               {
-                msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-                message = getMessage(msgID, b.getBackendID(),
-                                     String.valueOf(failureReason));
-                logError(ErrorLogCategory.BACKEND,
-                         ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+                    b.getBackendID(), String.valueOf(failureReason));
+                logError(message);
               }
             }
             catch (Exception e)
             {
-              msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-              message = getMessage(msgID, b.getBackendID(),
-                                   getExceptionMessage(e));
-              logError(ErrorLogCategory.BACKEND,
-                       ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+              message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+                  b.getBackendID(), getExceptionMessage(e));
+              logError(message);
             }
 
             continue;
           }
           catch (Exception e)
           {
-            msgID   = MSGID_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR;
-            message = getMessage(msgID, descriptorPath, getExceptionMessage(e));
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            message = ERR_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR.get(
+                descriptorPath, getExceptionMessage(e));
+            logError(message);
             errorsEncountered = true;
 
             try
@@ -737,20 +713,16 @@
               StringBuilder failureReason = new StringBuilder();
               if (! LockFileManager.releaseLock(lockFile, failureReason))
               {
-                msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-                message = getMessage(msgID, b.getBackendID(),
-                                     String.valueOf(failureReason));
-                logError(ErrorLogCategory.BACKEND,
-                         ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+                    b.getBackendID(), String.valueOf(failureReason));
+                logError(message);
               }
             }
             catch (Exception e2)
             {
-              msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-              message = getMessage(msgID, b.getBackendID(),
-                                   getExceptionMessage(e2));
-              logError(ErrorLogCategory.BACKEND,
-                       ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+              message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+                  b.getBackendID(), getExceptionMessage(e2));
+              logError(message);
             }
 
             continue;
@@ -769,10 +741,9 @@
         }
         catch (Exception e)
         {
-          msgID   = MSGID_BACKUPDB_CANNOT_CREATE_BACKUP_DIR;
-          message = getMessage(msgID, backupDirPath, getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          message = ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR.get(
+              backupDirPath, getExceptionMessage(e));
+          logError(message);
           errorsEncountered = true;
 
           try
@@ -781,20 +752,16 @@
             StringBuilder failureReason = new StringBuilder();
             if (! LockFileManager.releaseLock(lockFile, failureReason))
             {
-              msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-              message = getMessage(msgID, b.getBackendID(),
-                                   String.valueOf(failureReason));
-              logError(ErrorLogCategory.BACKEND,
-                       ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+              message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+                  b.getBackendID(), String.valueOf(failureReason));
+              logError(message);
             }
           }
           catch (Exception e2)
           {
-            msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-            message = getMessage(msgID, b.getBackendID(),
-                                 getExceptionMessage(e2));
-            logError(ErrorLogCategory.BACKEND,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+                b.getBackendID(), getExceptionMessage(e2));
+            logError(message);
           }
 
           continue;
@@ -817,11 +784,9 @@
       StringBuilder unsupportedReason = new StringBuilder();
       if (! b.supportsBackup(backupConfig, unsupportedReason))
       {
-        msgID   = MSGID_BACKUPDB_CANNOT_BACKUP;
-        message = getMessage(msgID, b.getBackendID(),
-                             unsupportedReason.toString());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        message = ERR_BACKUPDB_CANNOT_BACKUP.get(
+            b.getBackendID(), unsupportedReason.toString());
+        logError(message);
         errorsEncountered = true;
 
         try
@@ -830,20 +795,16 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.releaseLock(lockFile, failureReason))
           {
-            msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-            message = getMessage(msgID, b.getBackendID(),
-                                 String.valueOf(failureReason));
-            logError(ErrorLogCategory.BACKEND,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+                b.getBackendID(), String.valueOf(failureReason));
+            logError(message);
           }
         }
         catch (Exception e2)
         {
-          msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-          message = getMessage(msgID, b.getBackendID(),
-                               getExceptionMessage(e2));
-          logError(ErrorLogCategory.BACKEND,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+              b.getBackendID(), getExceptionMessage(e2));
+          logError(message);
         }
 
         continue;
@@ -857,11 +818,9 @@
       }
       catch (DirectoryException de)
       {
-        msgID   = MSGID_BACKUPDB_ERROR_DURING_BACKUP;
-        message = getMessage(msgID, b.getBackendID(),
-                                    de.getErrorMessage());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        message = ERR_BACKUPDB_ERROR_DURING_BACKUP.get(
+            b.getBackendID(), de.getMessageObject());
+        logError(message);
         errorsEncountered = true;
 
         try
@@ -870,29 +829,25 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.releaseLock(lockFile, failureReason))
           {
-            msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-            message = getMessage(msgID, b.getBackendID(),
-                                 String.valueOf(failureReason));
-            logError(ErrorLogCategory.BACKEND,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+                b.getBackendID(), String.valueOf(failureReason));
+            logError(message);
           }
         }
         catch (Exception e)
         {
-          msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-          message = getMessage(msgID, b.getBackendID(), getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+              b.getBackendID(), getExceptionMessage(e));
+          logError(message);
         }
 
         continue;
       }
       catch (Exception e)
       {
-        msgID   = MSGID_BACKUPDB_ERROR_DURING_BACKUP;
-        message = getMessage(msgID, b.getBackendID(), getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        message = ERR_BACKUPDB_ERROR_DURING_BACKUP.get(
+            b.getBackendID(), getExceptionMessage(e));
+        logError(message);
         errorsEncountered = true;
 
         try
@@ -901,20 +856,16 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.releaseLock(lockFile, failureReason))
           {
-            msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-            message = getMessage(msgID, b.getBackendID(),
-                                 String.valueOf(failureReason));
-            logError(ErrorLogCategory.BACKEND,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+                b.getBackendID(), String.valueOf(failureReason));
+            logError(message);
           }
         }
         catch (Exception e2)
         {
-          msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-          message = getMessage(msgID, b.getBackendID(),
-                               getExceptionMessage(e2));
-          logError(ErrorLogCategory.BACKEND,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+              b.getBackendID(), getExceptionMessage(e2));
+          logError(message);
         }
 
         continue;
@@ -928,20 +879,17 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-          msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-          message = getMessage(msgID, b.getBackendID(),
-                               String.valueOf(failureReason));
-          logError(ErrorLogCategory.BACKEND,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+              b.getBackendID(), String.valueOf(failureReason));
+          logError(message);
           errorsEncountered = true;
         }
       }
       catch (Exception e)
       {
-        msgID   = MSGID_BACKUPDB_CANNOT_UNLOCK_BACKEND;
-        message = getMessage(msgID, b.getBackendID(), getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+            b.getBackendID(), getExceptionMessage(e));
+        logError(message);
         errorsEncountered = true;
       }
     }
@@ -951,17 +899,13 @@
     // in the process.
     if (errorsEncountered)
     {
-      int    msgID = MSGID_BACKUPDB_COMPLETED_WITH_ERRORS;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-               msgID);
+      Message message = NOTE_BACKUPDB_COMPLETED_WITH_ERRORS.get();
+      logError(message);
     }
     else
     {
-      int    msgID = MSGID_BACKUPDB_COMPLETED_SUCCESSFULLY;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.NOTICE, message,
-               msgID);
+      Message message = NOTE_BACKUPDB_COMPLETED_SUCCESSFULLY.get();
+      logError(message);
     }
     return 0;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/BackendToolUtils.java b/opendj-sdk/opends/src/server/org/opends/server/tools/BackendToolUtils.java
index 0965381..9f9b75f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/BackendToolUtils.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/BackendToolUtils.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import org.opends.server.api.Backend;
 import org.opends.server.config.ConfigEntry;
@@ -33,15 +34,12 @@
 import org.opends.server.config.DNConfigAttribute;
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.core.DirectoryServer;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.ToolMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ConfigMessages.*;
 import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.messages.ToolMessages.*;
+import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.admin.std.server.BackendCfg;
 import org.opends.server.admin.std.server.RootCfg;
@@ -82,19 +80,16 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BACKEND_BASE_DN;
-      String message = getMessage(msgID, DN_BACKEND_BASE, de.getErrorMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
+          DN_BACKEND_BASE, de.getMessageObject());
+      logError(message);
       return 1;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BACKEND_BASE_DN;
-      String message = getMessage(msgID, DN_BACKEND_BASE,
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
+          DN_BACKEND_BASE, getExceptionMessage(e));
+      logError(message);
       return 1;
     }
 
@@ -105,19 +100,16 @@
     }
     catch (ConfigException ce)
     {
-      int    msgID   = MSGID_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY;
-      String message = getMessage(msgID, DN_BACKEND_BASE, ce.getMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
+          DN_BACKEND_BASE, ce.getMessage());
+      logError(message);
       return 1;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY;
-      String message = getMessage(msgID, DN_BACKEND_BASE,
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
+          DN_BACKEND_BASE, getExceptionMessage(e));
+      logError(message);
       return 1;
     }
 
@@ -132,9 +124,10 @@
       String backendID;
       try
       {
-        int msgID = MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID;
+
         StringConfigAttribute idStub =
-             new StringConfigAttribute(ATTR_BACKEND_ID, getMessage(msgID),
+             new StringConfigAttribute(ATTR_BACKEND_ID,
+                     INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID.get(),
                                        true, false, true);
         StringConfigAttribute idAttr =
              (StringConfigAttribute) configEntry.getConfigAttribute(idStub);
@@ -149,20 +142,16 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_DETERMINE_BACKEND_ID;
-        String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                    ce.getMessage());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+            String.valueOf(configEntry.getDN()), ce.getMessage());
+        logError(message);
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_DETERMINE_BACKEND_ID;
-        String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+            String.valueOf(configEntry.getDN()), getExceptionMessage(e));
+        logError(message);
         return 1;
       }
 
@@ -172,10 +161,12 @@
       String backendClassName;
       try
       {
-        int msgID = MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_CLASS;
+
         StringConfigAttribute classStub =
-             new StringConfigAttribute(ATTR_BACKEND_CLASS, getMessage(msgID),
-                                       true, false, false);
+             new StringConfigAttribute(
+                     ATTR_BACKEND_CLASS,
+                     INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_CLASS.get(),
+                     true, false, false);
         StringConfigAttribute classAttr =
              (StringConfigAttribute) configEntry.getConfigAttribute(classStub);
         if (classAttr == null)
@@ -189,20 +180,16 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_DETERMINE_BACKEND_CLASS;
-        String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                    ce.getMessage());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_CANNOT_DETERMINE_BACKEND_CLASS.get(
+            String.valueOf(configEntry.getDN()), ce.getMessage());
+        logError(message);
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_DETERMINE_BACKEND_CLASS;
-        String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_CANNOT_DETERMINE_BACKEND_CLASS.get(
+            String.valueOf(configEntry.getDN()), getExceptionMessage(e));
+        logError(message);
         return 1;
       }
 
@@ -213,12 +200,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_BACKEND_CLASS;
-        String message = getMessage(msgID, backendClassName,
-                                    String.valueOf(configEntry.getDN()),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_CANNOT_LOAD_BACKEND_CLASS.
+            get(backendClassName, String.valueOf(configEntry.getDN()),
+                getExceptionMessage(e));
+        logError(message);
         return 1;
       }
 
@@ -233,12 +218,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INSTANTIATE_BACKEND_CLASS;
-        String message = getMessage(msgID, backendClassName,
-                                    String.valueOf(configEntry.getDN()),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_CANNOT_INSTANTIATE_BACKEND_CLASS.
+            get(backendClassName, String.valueOf(configEntry.getDN()),
+                getExceptionMessage(e));
+        logError(message);
         return 1;
       }
 
@@ -248,19 +231,19 @@
       List<DN> baseDNs = null;
       try
       {
-        int msgID = MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS;
+
         DNConfigAttribute baseDNStub =
-             new DNConfigAttribute(ATTR_BACKEND_BASE_DN, getMessage(msgID),
-                                   true, true, true);
+             new DNConfigAttribute(
+                     ATTR_BACKEND_BASE_DN,
+                     INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS.get(),
+                     true, true, true);
         DNConfigAttribute baseDNAttr =
              (DNConfigAttribute) configEntry.getConfigAttribute(baseDNStub);
         if (baseDNAttr == null)
         {
-          msgID = MSGID_NO_BASES_FOR_BACKEND;
-          String message = getMessage(msgID,
-                                      String.valueOf(configEntry.getDN()));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message =
+              ERR_NO_BASES_FOR_BACKEND.get(String.valueOf(configEntry.getDN()));
+          logError(message);
         }
         else
         {
@@ -269,11 +252,9 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_DETERMINE_BASES_FOR_BACKEND;
-        String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_CANNOT_DETERMINE_BASES_FOR_BACKEND.get(
+            String.valueOf(configEntry.getDN()), getExceptionMessage(e));
+        logError(message);
         return 1;
       }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/ClientException.java b/opendj-sdk/opends/src/server/org/opends/server/tools/ClientException.java
index b42cedf..929b739 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/ClientException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/ClientException.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -54,9 +55,6 @@
   // problem.
   private int exitCode;
 
-  // The message ID for the message associated with this client exception.
-  private int messageID;
-
 
 
   /**
@@ -64,15 +62,13 @@
    *
    * @param  exitCode   The exit code that may be used if the client considers
    *                    this to be a fatal problem.
-   * @param  messageID  The unique identifier for the associated message.
    * @param  message    The message that explains the problem that occurred.
    */
-  public ClientException(int exitCode, int messageID, String message)
+  public ClientException(int exitCode, Message message)
   {
     super(message);
 
     this.exitCode  = exitCode;
-    this.messageID = messageID;
   }
 
 
@@ -82,17 +78,14 @@
    *
    * @param  exitCode   The exit code that may be used if the client considers
    *                    this to be a fatal problem.
-   * @param  messageID  The unique identifier for the associated message.
    * @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, int messageID, String message,
-                         Throwable cause)
+  public ClientException(int exitCode, Message message, Throwable cause)
   {
     super(message, cause);
 
     this.exitCode  = exitCode;
-    this.messageID = messageID;
   }
 
 
@@ -110,15 +103,5 @@
   }
 
 
-
-  /**
-   * Retrieves the unique identifier for the associated message.
-   *
-   * @return  The unique identifier for the associated message.
-   */
-  public int getMessageID()
-  {
-    return messageID;
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/ConfigureDS.java b/opendj-sdk/opends/src/server/org/opends/server/tools/ConfigureDS.java
index 756fc29..7bee3b8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/ConfigureDS.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/ConfigureDS.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -54,11 +55,10 @@
 import org.opends.server.util.args.StringArgument;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.ExtensionsMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.messages.ExtensionMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -171,14 +171,14 @@
     StringArgument    certNickName;
     StringArgument    keyManagerPath;
 
-    String toolDescription = getMessage(MSGID_CONFIGDS_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_CONFIGDS_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
     try
     {
       configFile = new StringArgument("configfile", 'c', "configFile", true,
                                       false, true, "{configFile}", null, null,
-                                      MSGID_DESCRIPTION_CONFIG_FILE);
+                                      INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -186,7 +186,7 @@
                              OPTION_LONG_CONFIG_CLASS, false,
                              false, true, OPTION_VALUE_CONFIG_CLASS,
                              ConfigFileHandler.class.getName(), null,
-                             MSGID_DESCRIPTION_CONFIG_CLASS);
+                             INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -194,23 +194,23 @@
                                     "ldapPort", false, false,
                                      true, "{ldapPort}", 389, null, true, 1,
                                      true, 65535,
-                                     MSGID_CONFIGDS_DESCRIPTION_LDAP_PORT);
+                                     INFO_CONFIGDS_DESCRIPTION_LDAP_PORT.get());
       argParser.addArgument(ldapPort);
 
       ldapsPort = new IntegerArgument("ldapsPort", 'P', "ldapsPort", false,
           false, true, "{ldapPort}", 636, null, true, 1, true, 65535,
-          MSGID_CONFIGDS_DESCRIPTION_LDAPS_PORT);
+          INFO_CONFIGDS_DESCRIPTION_LDAPS_PORT.get());
       argParser.addArgument(ldapsPort);
 
       enableStartTLS = new BooleanArgument("enableStartTLS",
           OPTION_SHORT_START_TLS, "enableStartTLS",
-          MSGID_CONFIGDS_DESCRIPTION_ENABLE_START_TLS);
+          INFO_CONFIGDS_DESCRIPTION_ENABLE_START_TLS.get());
       argParser.addArgument(enableStartTLS);
 
       jmxPort = new IntegerArgument("jmxport", 'x', "jmxPort", false, false,
           true, "{jmxPort}", SetupUtils.getDefaultJMXPort(), null, true, 1,
           true, 65535,
-          MSGID_CONFIGDS_DESCRIPTION_JMX_PORT);
+          INFO_CONFIGDS_DESCRIPTION_JMX_PORT.get());
       argParser.addArgument(jmxPort);
 
       keyManagerProviderDN = new StringArgument("keymanagerproviderdn",
@@ -220,7 +220,7 @@
           true, "{keyManagerProviderDN}",
           null,
           null,
-          MSGID_CONFIGDS_DESCRIPTION_KEYMANAGER_PROVIDER_DN);
+          INFO_CONFIGDS_DESCRIPTION_KEYMANAGER_PROVIDER_DN.get());
       argParser.addArgument(keyManagerProviderDN);
 
       trustManagerProviderDN = new StringArgument("trustmanagerproviderdn",
@@ -230,7 +230,7 @@
           true, "{trustManagerProviderDN}",
           null,
           null,
-          MSGID_CONFIGDS_DESCRIPTION_TRUSTMANAGER_PROVIDER_DN);
+          INFO_CONFIGDS_DESCRIPTION_TRUSTMANAGER_PROVIDER_DN.get());
       argParser.addArgument(trustManagerProviderDN);
 
       keyManagerPath = new StringArgument("keymanagerpath",
@@ -240,7 +240,7 @@
           "{keyManagerPath}",
           null,
           null,
-          MSGID_CONFIGDS_DESCRIPTION_KEYMANAGER_PATH);
+          INFO_CONFIGDS_DESCRIPTION_KEYMANAGER_PATH.get());
       argParser.addArgument(keyManagerPath);
 
       certNickName = new StringArgument("certnickname",
@@ -250,47 +250,50 @@
           true, "{certNickName}",
           null,
           null,
-          MSGID_CONFIGDS_DESCRIPTION_CERTNICKNAME);
+          INFO_CONFIGDS_DESCRIPTION_CERTNICKNAME.get());
       argParser.addArgument(certNickName);
 
-      baseDNString = new StringArgument("basedn", OPTION_SHORT_BASEDN,
-                                        OPTION_LONG_BASEDN, false, true,
-                                        true, OPTION_VALUE_BASEDN,
-                                        "dc=example,dc=com",
-                                        null,
-                                        MSGID_CONFIGDS_DESCRIPTION_BASE_DN);
+      baseDNString = new StringArgument(
+          "basedn", OPTION_SHORT_BASEDN,
+          OPTION_LONG_BASEDN, false, true,
+          true, OPTION_VALUE_BASEDN,
+          "dc=example,dc=com",
+          null,
+          INFO_CONFIGDS_DESCRIPTION_BASE_DN.get());
       argParser.addArgument(baseDNString);
 
-      rootDNString = new StringArgument("rootdn", OPTION_SHORT_ROOT_USER_DN,
-                                        OPTION_LONG_ROOT_USER_DN, false, false,
-                                        true, OPTION_VALUE_ROOT_USER_DN,
-                                        "cn=Directory Manager", null,
-                                        MSGID_CONFIGDS_DESCRIPTION_ROOT_DN);
+      rootDNString = new StringArgument(
+          "rootdn", OPTION_SHORT_ROOT_USER_DN,
+          OPTION_LONG_ROOT_USER_DN, false, false,
+          true, OPTION_VALUE_ROOT_USER_DN,
+          "cn=Directory Manager", null,
+          INFO_CONFIGDS_DESCRIPTION_ROOT_DN.get());
       argParser.addArgument(rootDNString);
 
-      rootPassword = new StringArgument("rootpw", OPTION_SHORT_BINDPWD,
-                                        "rootPassword", false,
-                                        false, true, "{rootUserPW}", null, null,
-                                        MSGID_CONFIGDS_DESCRIPTION_ROOT_PW);
+      rootPassword = new StringArgument(
+          "rootpw", OPTION_SHORT_BINDPWD,
+          "rootPassword", false,
+          false, true, "{rootUserPW}", null, null,
+          INFO_CONFIGDS_DESCRIPTION_ROOT_PW.get());
       argParser.addArgument(rootPassword);
 
-      rootPasswordFile = new FileBasedArgument("rootpwfile",
-                                  OPTION_SHORT_BINDPWD_FILE,
-                                  "rootPasswordFile", false, false,
-                                  "{filename}", null, null,
-                                  MSGID_CONFIGDS_DESCRIPTION_ROOT_PW_FILE);
+      rootPasswordFile = new FileBasedArgument(
+          "rootpwfile",
+          OPTION_SHORT_BINDPWD_FILE,
+          "rootPasswordFile", false, false,
+          "{filename}", null, null,
+          INFO_CONFIGDS_DESCRIPTION_ROOT_PW_FILE.get());
       argParser.addArgument(rootPasswordFile);
 
       showUsage = new BooleanArgument("showusage", OPTION_SHORT_HELP,
                                       OPTION_LONG_HELP,
-                                      MSGID_DESCRIPTION_USAGE);
+                                      INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -303,8 +306,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       System.err.println(argParser.getUsage());
@@ -324,8 +326,7 @@
     if (! (baseDNString.isPresent() || ldapPort.isPresent() ||
         jmxPort.isPresent() || rootDNString.isPresent()))
     {
-      int    msgID   = MSGID_CONFIGDS_NO_CONFIG_CHANGES;
-      String message = getMessage(msgID);
+      Message message = ERR_CONFIGDS_NO_CONFIG_CHANGES.get();
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       System.err.println(argParser.getUsage());
       return 1;
@@ -342,9 +343,8 @@
       {
         if (ports.contains(ldapsPort.getIntValue()))
         {
-          int    msgID   = MSGID_CONFIGDS_PORT_ALREADY_SPECIFIED;
-          String message = getMessage(msgID,
-              String.valueOf(ldapsPort.getIntValue()));
+          Message message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
+                  String.valueOf(ldapsPort.getIntValue()));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           System.err.println(argParser.getUsage());
           return 1;
@@ -358,9 +358,8 @@
       {
         if (ports.contains(jmxPort.getIntValue()))
         {
-          int    msgID   = MSGID_CONFIGDS_PORT_ALREADY_SPECIFIED;
-          String message = getMessage(msgID,
-              String.valueOf(jmxPort.getIntValue()));
+          Message message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
+                  String.valueOf(jmxPort.getIntValue()));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           System.err.println(argParser.getUsage());
           return 1;
@@ -373,8 +372,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -391,10 +389,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIGDS_CANNOT_INITIALIZE_JMX;
-      String message = getMessage(msgID,
-                                  String.valueOf(configFile.getValue()),
-                                  e.getMessage());
+      Message message = ERR_CONFIGDS_CANNOT_INITIALIZE_JMX.get(
+              String.valueOf(configFile.getValue()),
+              e.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -406,10 +403,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIGDS_CANNOT_INITIALIZE_CONFIG;
-      String message = getMessage(msgID,
-                                  String.valueOf(configFile.getValue()),
-                                  e.getMessage());
+      Message message = ERR_CONFIGDS_CANNOT_INITIALIZE_CONFIG.get(
+              String.valueOf(configFile.getValue()),
+              e.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -420,10 +416,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CONFIGDS_CANNOT_INITIALIZE_SCHEMA;
-      String message = getMessage(msgID,
-                                  String.valueOf(configFile.getValue()),
-                                  e.getMessage());
+      Message message = ERR_CONFIGDS_CANNOT_INITIALIZE_SCHEMA.get(
+              String.valueOf(configFile.getValue()),
+              e.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -436,9 +431,9 @@
     if (! LockFileManager.acquireExclusiveLock(serverLockFileName,
                                                failureReason))
     {
-      int    msgID   = MSGID_CONFIGDS_CANNOT_ACQUIRE_SERVER_LOCK;
-      String message = getMessage(msgID, String.valueOf(serverLockFileName),
-                                  String.valueOf(failureReason));
+      Message message = ERR_CONFIGDS_CANNOT_ACQUIRE_SERVER_LOCK.get(
+              String.valueOf(serverLockFileName),
+              String.valueOf(failureReason));
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -460,9 +455,9 @@
           }
           catch (DirectoryException de)
           {
-            int    msgID   = MSGID_CONFIGDS_CANNOT_PARSE_BASE_DN;
-            String message = getMessage(msgID, String.valueOf(dnString),
-                                        de.getErrorMessage());
+            Message message = ERR_CONFIGDS_CANNOT_PARSE_BASE_DN.get(
+                    String.valueOf(dnString),
+                    de.getMessageObject());
             System.err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
           }
@@ -482,10 +477,9 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_PARSE_ROOT_DN;
-          String message = getMessage(msgID,
-                                      String.valueOf(rootDNString.getValue()),
-                                      de.getErrorMessage());
+          Message message = ERR_CONFIGDS_CANNOT_PARSE_ROOT_DN.get(
+                  String.valueOf(rootDNString.getValue()),
+                  de.getMessageObject());
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -500,8 +494,7 @@
         }
         else
         {
-          int    msgID   = MSGID_CONFIGDS_NO_ROOT_PW;
-          String message = getMessage(msgID);
+          Message message = ERR_CONFIGDS_NO_ROOT_PW.get();
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -523,10 +516,10 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_PARSE_KEYMANAGER_PROVIDER_DN;
-          String message = getMessage(msgID,
-              keyManagerProviderDN.getValue(),
-              de.getErrorMessage());
+          Message message =
+                  ERR_CONFIGDS_CANNOT_PARSE_KEYMANAGER_PROVIDER_DN.get(
+                          keyManagerProviderDN.getValue(),
+                          de.getMessageObject());
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -537,9 +530,7 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIG_KEYMANAGER_CANNOT_GET_BASE;
-          String message = getMessage(msgID,
-              keyManagerProviderDN.getValue(),
+          Message message = ERR_CONFIG_KEYMANAGER_CANNOT_GET_BASE.get(
               String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -556,10 +547,8 @@
         }
         catch (DirectoryException de)
         {
-          int  msgID   = MSGID_CONFIGDS_CANNOT_PARSE_TRUSTMANAGER_PROVIDER_DN;
-          String message = getMessage(msgID,
-              trustManagerProviderDN.getValue(),
-              de.getErrorMessage());
+          Message message = ERR_CONFIGDS_CANNOT_PARSE_TRUSTMANAGER_PROVIDER_DN.
+                  get(trustManagerProviderDN.getValue(), de.getMessageObject());
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -570,10 +559,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIG_TRUSTMANAGER_CANNOT_GET_BASE;
-          String message = getMessage(msgID,
-              trustManagerProviderDN.getValue(),
-              String.valueOf(e));
+          Message message = ERR_CONFIG_TRUSTMANAGER_CANNOT_GET_BASE.get(
+                String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -584,9 +571,8 @@
       {
         if (!keyManagerProviderDN.isPresent())
         {
-          int    msgID   = MSGID_CONFIGDS_KEYMANAGER_PROVIDER_DN_REQUIRED;
-          String message = getMessage(msgID,
-              keyManagerProviderDN.getLongIdentifier(),
+          Message message = ERR_CONFIGDS_KEYMANAGER_PROVIDER_DN_REQUIRED.get(
+                  keyManagerProviderDN.getLongIdentifier(),
               keyManagerPath.getLongIdentifier());
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -602,16 +588,17 @@
           DN jeBackendDN = DN.decode(DN_JE_BACKEND);
           ConfigEntry configEntry = configHandler.getConfigEntry(jeBackendDN);
 
-          int msgID = MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS;
           DNConfigAttribute baseDNAttr =
-               new DNConfigAttribute(ATTR_BACKEND_BASE_DN, getMessage(msgID),
+               new DNConfigAttribute(
+                       ATTR_BACKEND_BASE_DN,
+                       INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS.get(),
                                      true, true, false, baseDNs);
           configEntry.putConfigAttribute(baseDNAttr);
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_UPDATE_BASE_DN;
-          String message = getMessage(msgID, String.valueOf(e));
+          Message message = ERR_CONFIGDS_CANNOT_UPDATE_BASE_DN.get(
+                  String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -627,17 +614,18 @@
           ConfigEntry configEntry =
                configHandler.getConfigEntry(ldapListenerDN);
 
-          int msgID = MSGID_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT;
+
           IntegerConfigAttribute portAttr =
-               new IntegerConfigAttribute(ATTR_LISTEN_PORT, getMessage(msgID),
+               new IntegerConfigAttribute(ATTR_LISTEN_PORT,
+                       INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT.get(),
                                           true, false, true, true, 1, true,
                                           65535, ldapPort.getIntValue());
           configEntry.putConfigAttribute(portAttr);
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_UPDATE_LDAP_PORT;
-          String message = getMessage(msgID, String.valueOf(e));
+          Message message = ERR_CONFIGDS_CANNOT_UPDATE_LDAP_PORT.get(
+                  String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -652,22 +640,24 @@
           ConfigEntry configEntry =
                configHandler.getConfigEntry(ldapListenerDN);
 
-          int msgID = MSGID_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT;
+
           IntegerConfigAttribute portAttr =
-               new IntegerConfigAttribute(ATTR_LISTEN_PORT, getMessage(msgID),
+               new IntegerConfigAttribute(ATTR_LISTEN_PORT,
+                       INFO_LDAP_CONNHANDLER_DESCRIPTION_LISTEN_PORT.get(),
                                           true, false, true, true, 1, true,
                                           65535, ldapsPort.getIntValue());
           configEntry.putConfigAttribute(portAttr);
-          msgID = MSGID_LDAPS_CONNHANDLER_DESCRIPTION_ENABLE;
+
           BooleanConfigAttribute enablePortAttr =
             new BooleanConfigAttribute(ATTR_CONNECTION_HANDLER_ENABLED,
-                getMessage(msgID), true, true, true);
+                INFO_LDAPS_CONNHANDLER_DESCRIPTION_ENABLE.get(),
+                    true, true, true);
           configEntry.putConfigAttribute(enablePortAttr);
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_UPDATE_LDAPS_PORT;
-          String message = getMessage(msgID, String.valueOf(e));
+          Message message = ERR_CONFIGDS_CANNOT_UPDATE_LDAPS_PORT.get(
+                  String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -682,22 +672,24 @@
           ConfigEntry configEntry =
                configHandler.getConfigEntry(jmxListenerDN);
 
-          int msgID = MSGID_JMX_CONNHANDLER_DESCRIPTION_LISTEN_PORT;
           IntegerConfigAttribute portAttr =
-               new IntegerConfigAttribute(ATTR_LISTEN_PORT, getMessage(msgID),
-                                          true, false, true, true, 1, true,
-                                          65535, jmxPort.getIntValue());
+               new IntegerConfigAttribute(
+                       ATTR_LISTEN_PORT,
+                       INFO_JMX_CONNHANDLER_DESCRIPTION_LISTEN_PORT.get(),
+                       true, false, true, true, 1, true,
+                       65535, jmxPort.getIntValue());
           configEntry.putConfigAttribute(portAttr);
-          msgID = MSGID_JMX_CONNHANDLER_DESCRIPTION_ENABLE;
+
           BooleanConfigAttribute enablePortAttr =
             new BooleanConfigAttribute(ATTR_CONNECTION_HANDLER_ENABLED,
-                getMessage(msgID), true, true, true);
+                INFO_JMX_CONNHANDLER_DESCRIPTION_ENABLE.get(),
+                    true, true, true);
           configEntry.putConfigAttribute(enablePortAttr);
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_UPDATE_JMX_PORT;
-          String message = getMessage(msgID, String.valueOf(e));
+          Message message = ERR_CONFIGDS_CANNOT_UPDATE_JMX_PORT.get(
+                  String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -712,16 +704,17 @@
           ConfigEntry configEntry =
                configHandler.getConfigEntry(ldapListenerDN);
 
-          int msgID = MSGID_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_STARTTLS;
+
           BooleanConfigAttribute startTLS =
             new BooleanConfigAttribute(ATTR_ALLOW_STARTTLS,
-                getMessage(msgID), true, true, true);
+                INFO_LDAP_CONNHANDLER_DESCRIPTION_ALLOW_STARTTLS.get(),
+                    true, true, true);
           configEntry.putConfigAttribute(startTLS);
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_ENABLE_STARTTLS;
-          String message = getMessage(msgID, String.valueOf(e));
+          Message message = ERR_CONFIGDS_CANNOT_ENABLE_STARTTLS.get(
+                  String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -738,16 +731,16 @@
             DN dn = DN.decode(keyManagerProviderDN.getValue());
             ConfigEntry configEntry = configHandler.getConfigEntry(dn);
 
-            int msgID = MSGID_CONFIG_KEYMANAGER_DESCRIPTION_ENABLED;
             BooleanConfigAttribute enableAttr =
               new BooleanConfigAttribute(ATTR_KEYMANAGER_ENABLED,
-                  getMessage(msgID), true, true, true);
+                  INFO_CONFIG_KEYMANAGER_DESCRIPTION_ENABLED.get(),
+                      true, true, true);
             configEntry.putConfigAttribute(enableAttr);
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_CONFIGDS_CANNOT_ENABLE_KEYMANAGER;
-            String message = getMessage(msgID, String.valueOf(e));
+            Message message = ERR_CONFIGDS_CANNOT_ENABLE_KEYMANAGER.get(
+                    String.valueOf(e));
             System.err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
           }
@@ -762,9 +755,9 @@
             ConfigEntry configEntry =
               configHandler.getConfigEntry(ldapListenerDN);
 
-            int msgID = MSGID_LDAP_CONNHANDLER_DESCRIPTION_KEYMANAGER_DN;
             StringConfigAttribute keyManagerProviderAttr =
-              new StringConfigAttribute(ATTR_KEYMANAGER_DN, getMessage(msgID),
+              new StringConfigAttribute(ATTR_KEYMANAGER_DN,
+                      INFO_LDAP_CONNHANDLER_DESCRIPTION_KEYMANAGER_DN.get(),
                   false, false, true, keyManagerProviderDN.getValue());
             configEntry.putConfigAttribute(keyManagerProviderAttr);
           }
@@ -776,18 +769,18 @@
             ConfigEntry configEntry =
               configHandler.getConfigEntry(ldapsListenerDN);
 
-            int msgID = MSGID_LDAP_CONNHANDLER_DESCRIPTION_KEYMANAGER_DN;
             StringConfigAttribute keyManagerProviderAttr =
               new StringConfigAttribute(ATTR_KEYMANAGER_DN,
-                  getMessage(msgID), false, false,
+                  INFO_LDAP_CONNHANDLER_DESCRIPTION_KEYMANAGER_DN.get(),
+                      false, false,
                   true, keyManagerProviderDN.getValue());
             configEntry.putConfigAttribute(keyManagerProviderAttr);
           }
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_UPDATE_KEYMANAGER_REFERENCE;
-          String message = getMessage(msgID, String.valueOf(e));
+          Message message = ERR_CONFIGDS_CANNOT_UPDATE_KEYMANAGER_REFERENCE.get(
+                  String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -800,10 +793,9 @@
             DN dn = DN.decode(keyManagerProviderDN.getValue());
             ConfigEntry configEntry = configHandler.getConfigEntry(dn);
 
-            int msgID = MSGID_FILE_KEYMANAGER_DESCRIPTION_FILE;
             StringConfigAttribute pathAttr =
               new StringConfigAttribute(ATTR_KEYSTORE_FILE,
-                  getMessage(msgID), true, true, true,
+                  INFO_FILE_KEYMANAGER_DESCRIPTION_FILE.get(), true, true, true,
                   keyManagerPath.getValue());
             configEntry.putConfigAttribute(pathAttr);
           }
@@ -825,16 +817,16 @@
             DN dn = DN.decode(trustManagerProviderDN.getValue());
             ConfigEntry configEntry = configHandler.getConfigEntry(dn);
 
-            int msgID = MSGID_CONFIG_TRUSTMANAGER_DESCRIPTION_ENABLED;
             BooleanConfigAttribute enableAttr =
               new BooleanConfigAttribute(ATTR_TRUSTMANAGER_ENABLED,
-                  getMessage(msgID), true, true, true);
+                  ERR_CONFIG_TRUSTMANAGER_DESCRIPTION_ENABLED.get(),
+                      true, true, true);
             configEntry.putConfigAttribute(enableAttr);
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_CONFIGDS_CANNOT_ENABLE_TRUSTMANAGER;
-            String message = getMessage(msgID, String.valueOf(e));
+            Message message = ERR_CONFIGDS_CANNOT_ENABLE_TRUSTMANAGER.get(
+                    String.valueOf(e));
             System.err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
           }
@@ -849,10 +841,10 @@
             ConfigEntry configEntry =
               configHandler.getConfigEntry(ldapListenerDN);
 
-            int msgID = MSGID_LDAP_CONNHANDLER_DESCRIPTION_TRUSTMANAGER_DN;
             StringConfigAttribute trustManagerProviderAttr =
               new StringConfigAttribute(ATTR_TRUSTMANAGER_DN,
-                  getMessage(msgID), false, false,
+                  INFO_LDAP_CONNHANDLER_DESCRIPTION_TRUSTMANAGER_DN.get(),
+                      false, false,
                   true, trustManagerProviderDN.getValue());
             configEntry.putConfigAttribute(trustManagerProviderAttr);
           }
@@ -864,18 +856,19 @@
             ConfigEntry configEntry =
               configHandler.getConfigEntry(ldapsListenerDN);
 
-            int msgID = MSGID_LDAP_CONNHANDLER_DESCRIPTION_TRUSTMANAGER_DN;
             StringConfigAttribute trustManagerProviderAttr =
               new StringConfigAttribute(ATTR_TRUSTMANAGER_DN,
-                  getMessage(msgID), false, false,
+                  INFO_LDAP_CONNHANDLER_DESCRIPTION_TRUSTMANAGER_DN.get(),
+                      false, false,
                   true, trustManagerProviderDN.getValue());
             configEntry.putConfigAttribute(trustManagerProviderAttr);
           }
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_UPDATE_TRUSTMANAGER_REFERENCE;
-          String message = getMessage(msgID, String.valueOf(e));
+          Message message =
+                  ERR_CONFIGDS_CANNOT_UPDATE_TRUSTMANAGER_REFERENCE.get(
+                          String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -885,9 +878,10 @@
       {
         try
         {
-          int msgID = MSGID_LDAP_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME;
           StringConfigAttribute certNickNameAttr =
-            new StringConfigAttribute(ATTR_SSL_CERT_NICKNAME, getMessage(msgID),
+            new StringConfigAttribute(
+                    ATTR_SSL_CERT_NICKNAME,
+                    INFO_LDAP_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME.get(),
                 false, false, true, certNickName.getValue());
 
           if (ldapPort.isPresent())
@@ -912,9 +906,9 @@
 
           if (jmxPort.isPresent())
           {
-            msgID = MSGID_JMX_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME;
             certNickNameAttr = new StringConfigAttribute(ATTR_SSL_CERT_NICKNAME,
-                getMessage(msgID), false, false, true, certNickName.getValue());
+                INFO_JMX_CONNHANDLER_DESCRIPTION_SSL_CERT_NICKNAME.get(),
+                    false, false, true, certNickName.getValue());
 
             // Use the key manager specified for the JMX connection handler.
             DN jmxListenerDN = DN.decode(DN_JMX_CONNECTION_HANDLER);
@@ -926,8 +920,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_UPDATE_CERT_NICKNAME;
-          String message = getMessage(msgID, String.valueOf(e));
+          Message message = ERR_CONFIGDS_CANNOT_UPDATE_CERT_NICKNAME.get(
+                  String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -942,10 +936,11 @@
           DN rootUserDN = DN.decode(DN_ROOT_USER);
           ConfigEntry configEntry = configHandler.getConfigEntry(rootUserDN);
 
-          int msgID = MSGID_CONFIG_ROOTDN_DESCRIPTION_ALTERNATE_BIND_DN;
           DNConfigAttribute bindDNAttr =
-               new DNConfigAttribute(ATTR_ROOTDN_ALTERNATE_BIND_DN,
-                                     getMessage(msgID), false, true, false,
+               new DNConfigAttribute(
+                       ATTR_ROOTDN_ALTERNATE_BIND_DN,
+                       INFO_CONFIG_ROOTDN_DESCRIPTION_ALTERNATE_BIND_DN.get(),
+                       false, true, false,
                                      rootDN);
           configEntry.putConfigAttribute(bindDNAttr);
 
@@ -953,14 +948,14 @@
           String encodedPassword =
                SaltedSHA512PasswordStorageScheme.encodeOffline(rootPWBytes);
           StringConfigAttribute bindPWAttr =
-               new StringConfigAttribute(ATTR_USER_PASSWORD, "", false, false,
-                                         false, encodedPassword);
+               new StringConfigAttribute(ATTR_USER_PASSWORD, Message.EMPTY,
+                                         false, false, false, encodedPassword);
           configEntry.putConfigAttribute(bindPWAttr);
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_CONFIGDS_CANNOT_UPDATE_ROOT_USER;
-          String message = getMessage(msgID, String.valueOf(e));
+          Message message = ERR_CONFIGDS_CANNOT_UPDATE_ROOT_USER.get(
+                  String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -972,14 +967,13 @@
       {
         configHandler.writeUpdatedConfig();
 
-        int    msgID   = MSGID_CONFIGDS_WROTE_UPDATED_CONFIG;
-        String message = getMessage(msgID);
+        Message message = INFO_CONFIGDS_WROTE_UPDATED_CONFIG.get();
         System.out.println(wrapText(message, MAX_LINE_WIDTH));
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_CONFIGDS_CANNOT_WRITE_UPDATED_CONFIG;
-        String message = getMessage(msgID, de.getErrorMessage());
+        Message message = ERR_CONFIGDS_CANNOT_WRITE_UPDATED_CONFIG.get(
+                de.getMessageObject());
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/ConfigureWindowsService.java b/opendj-sdk/opends/src/server/org/opends/server/tools/ConfigureWindowsService.java
index ef389f6..d0a10b3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/ConfigureWindowsService.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/ConfigureWindowsService.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -42,8 +43,7 @@
 import org.opends.server.util.args.BooleanArgument;
 import org.opends.server.util.args.StringArgument;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.MAX_LINE_WIDTH;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -213,8 +213,8 @@
     }
 
 //  Define all the arguments that may be used with this program.
-    String toolDescription =
-      getMessage(MSGID_CONFIGURE_WINDOWS_SERVICE_TOOL_DESCRIPTION);
+    Message toolDescription =
+        INFO_CONFIGURE_WINDOWS_SERVICE_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME,
         toolDescription, false);
     BooleanArgument enableService = null;
@@ -226,34 +226,33 @@
     try
     {
       enableService = new BooleanArgument("enableservice", 'e', "enableService",
-          MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_ENABLE);
+          INFO_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_ENABLE.get());
       argParser.addArgument(enableService);
 
       disableService = new BooleanArgument("disableservice", 'd',
           "disableService",
-          MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_DISABLE);
+          INFO_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_DISABLE.get());
       argParser.addArgument(disableService);
 
       serviceState = new BooleanArgument("servicestate", 's',
           "serviceState",
-          MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_STATE);
+          INFO_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_STATE.get());
       argParser.addArgument(serviceState);
 
       cleanupService = new StringArgument("cleanupservice", 'c',
           "cleanupService", false, false, true, "{serviceName}", null, null,
-          MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_CLEANUP);
+          INFO_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_CLEANUP.get());
       argParser.addArgument(cleanupService);
 
       showUsage = new BooleanArgument("showusage", OPTION_SHORT_HELP,
           OPTION_LONG_HELP,
-          MSGID_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_SHOWUSAGE);
+          INFO_CONFIGURE_WINDOWS_SERVICE_DESCRIPTION_SHOWUSAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage, out);
     }
     catch (ArgumentException ae)
     {
-      int msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       returnValue = ERROR;
@@ -268,8 +267,7 @@
       }
       catch (ArgumentException ae)
       {
-        int msgID = MSGID_ERROR_PARSING_ARGS;
-        String message = getMessage(msgID, ae.getMessage());
+        Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
@@ -301,16 +299,14 @@
       }
       if (nArgs > 1)
       {
-        int msgID = MSGID_CONFIGURE_WINDOWS_SERVICE_TOO_MANY_ARGS;
-        String message = getMessage(msgID, (Object[])null);
+        Message 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)
       {
-        int msgID = MSGID_CONFIGURE_WINDOWS_SERVICE_TOO_FEW_ARGS;
-        String message = getMessage(msgID, (Object[])null);
+        Message message = ERR_CONFIGURE_WINDOWS_SERVICE_TOO_FEW_ARGS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
         returnValue = ERROR;
@@ -403,7 +399,7 @@
   public static int enableService(PrintStream out, PrintStream err)
   {
     int returnValue;
-    String msg;
+    Message msg;
     String serverRoot = getServerRoot();
 
     String[] cmd;
@@ -418,8 +414,8 @@
           getBinaryFullPath(),
           "create",
           serverRoot,
-          getMessage(MSGID_WINDOWS_SERVICE_NAME, (Object[]) null),
-          getMessage(MSGID_WINDOWS_SERVICE_DESCRIPTION, serverRoot),
+          INFO_WINDOWS_SERVICE_NAME.get().toString(),
+          INFO_WINDOWS_SERVICE_DESCRIPTION.get(serverRoot).toString(),
           DEBUG_OPTION
       };
     }
@@ -429,8 +425,8 @@
           getBinaryFullPath(),
           "create",
           serverRoot,
-          getMessage(MSGID_WINDOWS_SERVICE_NAME, (Object[]) null),
-          getMessage(MSGID_WINDOWS_SERVICE_DESCRIPTION, serverRoot),
+          INFO_WINDOWS_SERVICE_NAME.get().toString(),
+          INFO_WINDOWS_SERVICE_DESCRIPTION.get(serverRoot).toString(),
           DEBUG_OPTION
       };
     }
@@ -442,32 +438,27 @@
       {
       case 0:
         returnValue = SERVICE_ENABLE_SUCCESS;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_SUCCESSULLY_ENABLED,
-            (Object[])null);
+        msg = INFO_WINDOWS_SERVICE_SUCCESSULLY_ENABLED.get();
         out.println(wrapText(msg, MAX_LINE_WIDTH));
         break;
       case 1:
         returnValue = SERVICE_ALREADY_ENABLED;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_ALREADY_ENABLED,
-            (Object[])null);
+        msg = INFO_WINDOWS_SERVICE_ALREADY_ENABLED.get();
         out.println(wrapText(msg, MAX_LINE_WIDTH));
         break;
       case 2:
         returnValue = SERVICE_NAME_ALREADY_IN_USE;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_NAME_ALREADY_IN_USE,
-            (Object[])null);
+        msg = ERR_WINDOWS_SERVICE_NAME_ALREADY_IN_USE.get();
         err.println(wrapText(msg, MAX_LINE_WIDTH));
         break;
       case 3:
         returnValue = SERVICE_ENABLE_ERROR;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_ENABLE_ERROR,
-            (Object[])null);
+        msg = ERR_WINDOWS_SERVICE_ENABLE_ERROR.get();
         err.println(wrapText(msg, MAX_LINE_WIDTH));
         break;
       default:
         returnValue = SERVICE_ENABLE_ERROR;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_ENABLE_ERROR,
-            (Object[])null);
+        msg = ERR_WINDOWS_SERVICE_ENABLE_ERROR.get();
         err.println(wrapText(msg, MAX_LINE_WIDTH));
       }
     }
@@ -476,8 +467,7 @@
       err.println("Fucking throwable: "+t);
       t.printStackTrace();
       returnValue = SERVICE_ENABLE_ERROR;
-      msg = getMessage(MSGID_WINDOWS_SERVICE_ENABLE_ERROR,
-          (Object[])null);
+      msg = ERR_WINDOWS_SERVICE_ENABLE_ERROR.get();
       err.println(wrapText(msg, MAX_LINE_WIDTH));
     }
     return returnValue;
@@ -496,7 +486,7 @@
   public static int disableService(PrintStream out, PrintStream err)
   {
     int returnValue;
-    String msg;
+    Message msg;
     String serverRoot = getServerRoot();
     String[] cmd;
     if (isVista())
@@ -528,32 +518,27 @@
       {
       case 0:
         returnValue = SERVICE_DISABLE_SUCCESS;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_SUCCESSULLY_DISABLED,
-            (Object[])null);
+        msg = INFO_WINDOWS_SERVICE_SUCCESSULLY_DISABLED.get();
         out.println(msg);
         break;
       case 1:
         returnValue = SERVICE_ALREADY_DISABLED;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_ALREADY_DISABLED,
-            (Object[])null);
+        msg = INFO_WINDOWS_SERVICE_ALREADY_DISABLED.get();
         out.println(msg);
         break;
       case 2:
         returnValue = SERVICE_MARKED_FOR_DELETION;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_MARKED_FOR_DELETION,
-            (Object[])null);
+        msg = WARN_WINDOWS_SERVICE_MARKED_FOR_DELETION.get();
         out.println(msg);
         break;
       case 3:
         returnValue = SERVICE_DISABLE_ERROR;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_DISABLE_ERROR,
-            (Object[])null);
+        msg = ERR_WINDOWS_SERVICE_DISABLE_ERROR.get();
         err.println(msg);
         break;
       default:
         returnValue = SERVICE_DISABLE_ERROR;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_DISABLE_ERROR,
-            (Object[])null);
+        msg = ERR_WINDOWS_SERVICE_DISABLE_ERROR.get();
         err.println(msg);
       }
     }
@@ -561,8 +546,7 @@
     {
       t.printStackTrace();
       returnValue = SERVICE_DISABLE_ERROR;
-      msg = getMessage(MSGID_WINDOWS_SERVICE_DISABLE_ERROR,
-          (Object[])null);
+      msg = ERR_WINDOWS_SERVICE_DISABLE_ERROR.get();
       err.println(msg);
     }
     return returnValue;
@@ -583,7 +567,7 @@
       PrintStream err)
   {
     int returnValue;
-    String msg;
+    Message msg;
     String[] cmd;
     if (isVista())
     {
@@ -614,35 +598,34 @@
       {
       case 0:
         returnValue = SERVICE_CLEANUP_SUCCESS;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_CLEANUP_SUCCESS, serviceName);
+        msg = INFO_WINDOWS_SERVICE_CLEANUP_SUCCESS.get(serviceName);
         out.println(msg);
         break;
       case 1:
         returnValue = SERVICE_NOT_FOUND;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_CLEANUP_NOT_FOUND, serviceName);
+        msg = ERR_WINDOWS_SERVICE_CLEANUP_NOT_FOUND.get(serviceName);
         err.println(msg);
         break;
       case 2:
         returnValue = SERVICE_CLEANUP_MARKED_FOR_DELETION;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_CLEANUP_MARKED_FOR_DELETION,
-            serviceName);
+        msg = WARN_WINDOWS_SERVICE_CLEANUP_MARKED_FOR_DELETION.get(serviceName);
         out.println(msg);
         break;
       case 3:
         returnValue = SERVICE_CLEANUP_ERROR;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_CLEANUP_ERROR, serviceName);
+        msg = ERR_WINDOWS_SERVICE_CLEANUP_ERROR.get(serviceName);
         err.println(msg);
         break;
       default:
         returnValue = SERVICE_CLEANUP_ERROR;
-        msg = getMessage(MSGID_WINDOWS_SERVICE_CLEANUP_ERROR, serviceName);
+        msg = ERR_WINDOWS_SERVICE_CLEANUP_ERROR.get(serviceName);
         err.println(msg);
       }
     }
     catch (Throwable t)
     {
       returnValue = SERVICE_CLEANUP_ERROR;
-      msg = getMessage(MSGID_WINDOWS_SERVICE_CLEANUP_ERROR, serviceName);
+      msg = ERR_WINDOWS_SERVICE_CLEANUP_ERROR.get(serviceName);
       err.println(msg);
     }
     return returnValue;
@@ -660,7 +643,7 @@
   public static int serviceState(PrintStream out, PrintStream err)
   {
     int returnValue;
-    String msg;
+    Message msg;
     String serviceName = null;
 
     String serverRoot = getServerRoot();
@@ -707,8 +690,7 @@
         returnValue = SERVICE_STATE_ENABLED;
         if (out != null)
         {
-          msg = getMessage(MSGID_WINDOWS_SERVICE_ENABLED,
-            serviceName);
+          msg = INFO_WINDOWS_SERVICE_ENABLED.get(serviceName);
           out.println(msg);
         }
         break;
@@ -716,8 +698,7 @@
         returnValue = SERVICE_STATE_DISABLED;
         if (out != null)
         {
-          msg = getMessage(MSGID_WINDOWS_SERVICE_DISABLED,
-            (Object[])null);
+          msg = INFO_WINDOWS_SERVICE_DISABLED.get();
           out.println(msg);
         }
         break;
@@ -725,8 +706,7 @@
         returnValue = SERVICE_STATE_ERROR;
         if (out != null)
         {
-          msg = getMessage(MSGID_WINDOWS_SERVICE_STATE_ERROR,
-            (Object[])null);
+          msg = ERR_WINDOWS_SERVICE_STATE_ERROR.get();
           out.println(msg);
         }
         break;
@@ -734,8 +714,7 @@
         returnValue = SERVICE_STATE_ERROR;
         if (err != null)
         {
-          msg = getMessage(MSGID_WINDOWS_SERVICE_STATE_ERROR,
-            (Object[])null);
+          msg = ERR_WINDOWS_SERVICE_STATE_ERROR.get();
           err.println(msg);
         }
       }
@@ -745,8 +724,7 @@
       returnValue = SERVICE_STATE_ERROR;
       if (err != null)
       {
-        msg = getMessage(MSGID_WINDOWS_SERVICE_STATE_ERROR,
-          (Object[])null);
+        msg = ERR_WINDOWS_SERVICE_STATE_ERROR.get();
         err.println(wrapText(msg, MAX_LINE_WIDTH));
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/EncodePassword.java b/opendj-sdk/opends/src/server/org/opends/server/tools/EncodePassword.java
index 03349b0..944aa76 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/EncodePassword.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/EncodePassword.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -54,8 +55,7 @@
 import org.opends.server.util.args.FileBasedArgument;
 import org.opends.server.util.args.StringArgument;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -156,7 +156,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_ENCPW_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_ENCPW_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.EncodePassword",
                             toolDescription, false);
@@ -166,35 +166,37 @@
     // parser.
     try
     {
-      listSchemes = new BooleanArgument("listschemes", 'l', "listSchemes",
-                                        MSGID_ENCPW_DESCRIPTION_LISTSCHEMES);
+      listSchemes = new BooleanArgument(
+              "listschemes", 'l', "listSchemes",
+              INFO_ENCPW_DESCRIPTION_LISTSCHEMES.get());
       argParser.addArgument(listSchemes);
 
 
       clearPassword = new StringArgument("clearpw", 'c', "clearPassword", false,
                                          false, true, "{clearPW}", null, null,
-                                         MSGID_ENCPW_DESCRIPTION_CLEAR_PW);
+                                         INFO_ENCPW_DESCRIPTION_CLEAR_PW.get());
       argParser.addArgument(clearPassword);
 
 
       clearPasswordFile =
            new FileBasedArgument("clearpwfile", 'f', "clearPasswordFile", false,
                                  false, "{filename}", null, null,
-                                 MSGID_ENCPW_DESCRIPTION_CLEAR_PW_FILE);
+                                 INFO_ENCPW_DESCRIPTION_CLEAR_PW_FILE.get());
       argParser.addArgument(clearPasswordFile);
 
 
-      encodedPassword = new StringArgument("encodedpw", 'e', "encodedPassword",
-                                           false, false, true, "{encodedPW}",
-                                           null, null,
-                                           MSGID_ENCPW_DESCRIPTION_ENCODED_PW);
+      encodedPassword = new StringArgument(
+              "encodedpw", 'e', "encodedPassword",
+              false, false, true, "{encodedPW}",
+              null, null,
+              INFO_ENCPW_DESCRIPTION_ENCODED_PW.get());
       argParser.addArgument(encodedPassword);
 
 
       encodedPasswordFile =
            new FileBasedArgument("encodedpwfile", 'E', "encodedPasswordFile",
                                  false, false, "{filename}", null, null,
-                                 MSGID_ENCPW_DESCRIPTION_ENCODED_PW_FILE);
+                                 INFO_ENCPW_DESCRIPTION_ENCODED_PW_FILE.get());
       argParser.addArgument(encodedPasswordFile);
 
 
@@ -203,7 +205,7 @@
                                        true, false, true,
                                        OPTION_VALUE_CONFIG_CLASS,
                                        ConfigFileHandler.class.getName(), null,
-                                       MSGID_DESCRIPTION_CONFIG_CLASS);
+                                       INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -211,40 +213,40 @@
       configFile = new StringArgument("configfile", 'F', "configFile",
                                       true, false, true, "{configFile}", null,
                                       null,
-                                      MSGID_DESCRIPTION_CONFIG_FILE);
+                                      INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
 
       schemeName = new StringArgument("scheme", 's', "storageScheme", false,
                                       false, true, "{scheme}", null, null,
-                                      MSGID_ENCPW_DESCRIPTION_SCHEME);
+                                      INFO_ENCPW_DESCRIPTION_SCHEME.get());
       argParser.addArgument(schemeName);
 
 
-      authPasswordSyntax = new BooleanArgument("authpasswordsyntax", 'a',
-                                               "authPasswordSyntax",
-                                               MSGID_ENCPW_DESCRIPTION_AUTHPW);
+      authPasswordSyntax = new BooleanArgument(
+              "authpasswordsyntax", 'a',
+              "authPasswordSyntax",
+              INFO_ENCPW_DESCRIPTION_AUTHPW.get());
       argParser.addArgument(authPasswordSyntax);
 
 
       useCompareResultCode =
            new BooleanArgument("usecompareresultcode", 'r',
                                "useCompareResultCode",
-                               MSGID_ENCPW_DESCRIPTION_USE_COMPARE_RESULT);
+                               INFO_ENCPW_DESCRIPTION_USE_COMPARE_RESULT.get());
       argParser.addArgument(useCompareResultCode);
 
 
       showUsage = new BooleanArgument("usage", OPTION_SHORT_HELP,
                                       OPTION_LONG_HELP,
-                                      MSGID_DESCRIPTION_USAGE);
+                                      INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage, out);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -258,8 +260,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -278,8 +279,8 @@
     // Check for conflicting arguments.
     if (clearPassword.isPresent() && clearPasswordFile.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, clearPassword.getLongIdentifier(),
+      Message message =
+              ERR_TOOL_CONFLICTING_ARGS.get(clearPassword.getLongIdentifier(),
                                   clearPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -287,8 +288,8 @@
 
     if (encodedPassword.isPresent() && encodedPasswordFile.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, encodedPassword.getLongIdentifier(),
+      Message message =
+              ERR_TOOL_CONFLICTING_ARGS.get(encodedPassword.getLongIdentifier(),
                                   encodedPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -311,9 +312,9 @@
       }
       else
       {
-        int    msgID = MSGID_ENCPW_NO_CLEAR_PW;
-        String message = getMessage(msgID, clearPassword.getLongIdentifier(),
-                                    clearPasswordFile.getLongIdentifier());
+        Message message =
+                ERR_ENCPW_NO_CLEAR_PW.get(clearPassword.getLongIdentifier(),
+                clearPasswordFile.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
         return 1;
@@ -322,8 +323,8 @@
       if ((! encodedPassword.isPresent()) && (! encodedPasswordFile.isPresent())
            && (! schemeName.isPresent()))
       {
-        int    msgID   = MSGID_ENCPW_NO_SCHEME;
-        String message = getMessage(msgID, schemeName.getLongIdentifier());
+        Message message =
+                ERR_ENCPW_NO_SCHEME.get(schemeName.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
         return 1;
@@ -364,8 +365,8 @@
       }
       catch (Exception e)
       {
-        int msgID = MSGID_SERVER_BOOTSTRAP_ERROR;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message =
+                ERR_SERVER_BOOTSTRAP_ERROR.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -377,15 +378,13 @@
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -399,22 +398,19 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -428,22 +424,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -458,22 +454,23 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message =
+                ERR_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES.get(
+                        ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES.get(
+                ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -489,8 +486,7 @@
              DirectoryServer.getAuthPasswordStorageSchemes();
         if (storageSchemes.isEmpty())
         {
-          int msgID = MSGID_ENCPW_NO_STORAGE_SCHEMES;
-          String message = getMessage(msgID);
+          Message message = ERR_ENCPW_NO_STORAGE_SCHEMES.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
         }
         else
@@ -521,8 +517,7 @@
              DirectoryServer.getPasswordStorageSchemes();
         if (storageSchemes.isEmpty())
         {
-          int msgID = MSGID_ENCPW_NO_STORAGE_SCHEMES;
-          String message = getMessage(msgID);
+          Message message = ERR_ENCPW_NO_STORAGE_SCHEMES.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
         }
         else
@@ -573,15 +568,15 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_ENCPW_INVALID_ENCODED_AUTHPW;
-          String message = getMessage(msgID, de.getErrorMessage());
+          Message message = ERR_ENCPW_INVALID_ENCODED_AUTHPW.get(
+                  de.getMessageObject());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_ENCPW_INVALID_ENCODED_AUTHPW;
-          String message = getMessage(msgID, String.valueOf(e));
+          Message message = ERR_ENCPW_INVALID_ENCODED_AUTHPW.get(
+                  String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -590,16 +585,15 @@
              DirectoryServer.getAuthPasswordStorageScheme(scheme);
         if (storageScheme == null)
         {
-          int    msgID   = MSGID_ENCPW_NO_SUCH_AUTH_SCHEME;
-          String message = getMessage(msgID, scheme);
+          Message message = ERR_ENCPW_NO_SUCH_AUTH_SCHEME.get(
+                  scheme);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
 
         if (storageScheme.authPasswordMatches(clearPW, authInfo, authValue))
         {
-          int    msgID   = MSGID_ENCPW_PASSWORDS_MATCH;
-          String message = getMessage(msgID);
+          Message message = INFO_ENCPW_PASSWORDS_MATCH.get();
           out.println(message);
 
           if (useCompareResultCode.isPresent())
@@ -613,8 +607,7 @@
         }
         else
         {
-          int    msgID   = MSGID_ENCPW_PASSWORDS_DO_NOT_MATCH;
-          String message = getMessage(msgID);
+          Message message = INFO_ENCPW_PASSWORDS_DO_NOT_MATCH.get();
           out.println(message);
 
           if (useCompareResultCode.isPresent())
@@ -644,23 +637,22 @@
                  DirectoryServer.getPasswordStorageScheme(userPWElements[0]);
             if (storageScheme == null)
             {
-              int    msgID   = MSGID_ENCPW_NO_SUCH_SCHEME;
-              String message = getMessage(msgID, userPWElements[0]);
+              Message message = ERR_ENCPW_NO_SUCH_SCHEME.get(userPWElements[0]);
               err.println(wrapText(message, MAX_LINE_WIDTH));
               return 1;
             }
           }
           catch (DirectoryException de)
           {
-            int    msgID   = MSGID_ENCPW_INVALID_ENCODED_USERPW;
-            String message = getMessage(msgID, de.getErrorMessage());
+            Message message = ERR_ENCPW_INVALID_ENCODED_USERPW.get(
+                    de.getMessageObject());
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_ENCPW_INVALID_ENCODED_USERPW;
-            String message = getMessage(msgID, String.valueOf(e));
+            Message message = ERR_ENCPW_INVALID_ENCODED_USERPW.get(
+                    String.valueOf(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
           }
@@ -669,8 +661,8 @@
         {
           if (! schemeName.isPresent())
           {
-            int    msgID   = MSGID_ENCPW_NO_SCHEME;
-            String message = getMessage(msgID, schemeName.getLongIdentifier());
+            Message message = ERR_ENCPW_NO_SCHEME.get(
+                    schemeName.getLongIdentifier());
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
           }
@@ -681,8 +673,7 @@
           storageScheme = directoryServer.getPasswordStorageScheme(scheme);
           if (storageScheme == null)
           {
-            int    msgID   = MSGID_ENCPW_NO_SUCH_SCHEME;
-            String message = getMessage(msgID, scheme);
+            Message message = ERR_ENCPW_NO_SUCH_SCHEME.get(scheme);
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
           }
@@ -691,8 +682,7 @@
         if (storageScheme.passwordMatches(clearPW,
                                           new ASN1OctetString(encodedPWString)))
         {
-          int    msgID   = MSGID_ENCPW_PASSWORDS_MATCH;
-          String message = getMessage(msgID);
+          Message message = INFO_ENCPW_PASSWORDS_MATCH.get();
           out.println(message);
 
           if (useCompareResultCode.isPresent())
@@ -706,8 +696,7 @@
         }
         else
         {
-          int    msgID   = MSGID_ENCPW_PASSWORDS_DO_NOT_MATCH;
-          String message = getMessage(msgID);
+          Message message = INFO_ENCPW_PASSWORDS_DO_NOT_MATCH.get();
           out.println(message);
 
           if (useCompareResultCode.isPresent())
@@ -731,8 +720,7 @@
         storageScheme = DirectoryServer.getAuthPasswordStorageScheme(scheme);
         if (storageScheme == null)
         {
-          int    msgID   = MSGID_ENCPW_NO_SUCH_AUTH_SCHEME;
-          String message = getMessage(msgID, scheme);
+          Message message = ERR_ENCPW_NO_SUCH_AUTH_SCHEME.get(scheme);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -743,8 +731,7 @@
         storageScheme = DirectoryServer.getPasswordStorageScheme(scheme);
         if (storageScheme == null)
         {
-          int    msgID   = MSGID_ENCPW_NO_SUCH_SCHEME;
-          String message = getMessage(msgID, scheme);
+          Message message = ERR_ENCPW_NO_SUCH_SCHEME.get(scheme);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -756,21 +743,19 @@
         {
           encodedPW = storageScheme.encodeAuthPassword(clearPW);
 
-          int    msgID   = MSGID_ENCPW_ENCODED_PASSWORD;
-          String message = getMessage(msgID, encodedPW.stringValue());
+          Message message = ERR_ENCPW_ENCODED_PASSWORD.get(
+                  encodedPW.stringValue());
           out.println(message);
         }
         catch (DirectoryException de)
         {
-          int msgID = MSGID_ENCPW_CANNOT_ENCODE;
-          String message = getMessage(msgID, de.getErrorMessage());
+          Message message = ERR_ENCPW_CANNOT_ENCODE.get(de.getMessageObject());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
         catch (Exception e)
         {
-          int msgID = MSGID_ENCPW_CANNOT_ENCODE;
-          String message = getMessage(msgID, getExceptionMessage(e));
+          Message message = ERR_ENCPW_CANNOT_ENCODE.get(getExceptionMessage(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -781,21 +766,19 @@
         {
           encodedPW = storageScheme.encodePasswordWithScheme(clearPW);
 
-          int    msgID   = MSGID_ENCPW_ENCODED_PASSWORD;
-          String message = getMessage(msgID, encodedPW.stringValue());
+          Message message =
+                  ERR_ENCPW_ENCODED_PASSWORD.get(encodedPW.stringValue());
           out.println(message);
         }
         catch (DirectoryException de)
         {
-          int msgID = MSGID_ENCPW_CANNOT_ENCODE;
-          String message = getMessage(msgID, de.getErrorMessage());
+          Message message = ERR_ENCPW_CANNOT_ENCODE.get(de.getMessageObject());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
         catch (Exception e)
         {
-          int msgID = MSGID_ENCPW_CANNOT_ENCODE;
-          String message = getMessage(msgID, getExceptionMessage(e));
+          Message message = ERR_ENCPW_CANNOT_ENCODE.get(getExceptionMessage(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/ExportLDIF.java b/opendj-sdk/opends/src/server/org/opends/server/tools/ExportLDIF.java
index 72d74fe..a79da18 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/ExportLDIF.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/ExportLDIF.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -44,12 +45,9 @@
 import org.opends.server.extensions.ConfigFileHandler;
 import org.opends.server.loggers.ThreadFilterTextErrorLogPublisher;
 import org.opends.server.loggers.TextWriter;
-import org.opends.server.loggers.ErrorLogger;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ExistingFileBehavior;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LDIFExportConfig;
@@ -61,9 +59,8 @@
 import org.opends.server.util.args.IntegerArgument;
 import org.opends.server.util.args.StringArgument;
 
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -91,7 +88,7 @@
 
     if(errorLogPublisher != null)
     {
-      ErrorLogger.removeErrorLogPublisher(errorLogPublisher);
+      removeErrorLogPublisher(errorLogPublisher);
     }
 
     if(retCode != 0)
@@ -170,7 +167,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_LDIFEXPORT_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LDIFEXPORT_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.ExportLDIF",
                             toolDescription, false);
@@ -185,7 +182,7 @@
                               OPTION_LONG_CONFIG_CLASS, true, false,
                               true, OPTION_VALUE_CONFIG_CLASS,
                               ConfigFileHandler.class.getName(), null,
-                              MSGID_DESCRIPTION_CONFIG_CLASS);
+                              INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -193,7 +190,7 @@
       configFile =
            new StringArgument("configfile", 'f', "configFile", true, false,
                               true, "{configFile}", null, null,
-                              MSGID_DESCRIPTION_CONFIG_FILE);
+                              INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -202,108 +199,109 @@
            new StringArgument("ldiffile", OPTION_SHORT_LDIF_FILE,
                               OPTION_LONG_LDIF_FILE,true, false, true,
                               OPTION_VALUE_LDIF_FILE, null, null,
-                              MSGID_LDIFEXPORT_DESCRIPTION_LDIF_FILE);
+                              INFO_LDIFEXPORT_DESCRIPTION_LDIF_FILE.get());
       argParser.addArgument(ldifFile);
 
 
-      appendToLDIF =
-           new BooleanArgument("appendldif", 'a', "appendToLDIF",
-                               MSGID_LDIFEXPORT_DESCRIPTION_APPEND_TO_LDIF);
+      appendToLDIF = new BooleanArgument(
+                   "appendldif", 'a', "appendToLDIF",
+                   INFO_LDIFEXPORT_DESCRIPTION_APPEND_TO_LDIF.get());
       argParser.addArgument(appendToLDIF);
 
 
       backendID =
            new StringArgument("backendid", 'n', "backendID", true, false, true,
                               "{backendID}", null, null,
-                              MSGID_LDIFEXPORT_DESCRIPTION_BACKEND_ID);
+                              INFO_LDIFEXPORT_DESCRIPTION_BACKEND_ID.get());
       argParser.addArgument(backendID);
 
 
       includeBranchStrings =
            new StringArgument("includebranch", 'b', "includeBranch", false,
                               true, true, "{branchDN}", null, null,
-                              MSGID_LDIFEXPORT_DESCRIPTION_INCLUDE_BRANCH);
+                              INFO_LDIFEXPORT_DESCRIPTION_INCLUDE_BRANCH.get());
       argParser.addArgument(includeBranchStrings);
 
 
       excludeBranchStrings =
            new StringArgument("excludebranch", 'B', "excludeBranch", false,
                               true, true, "{branchDN}", null, null,
-                              MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_BRANCH);
+                              INFO_LDIFEXPORT_DESCRIPTION_EXCLUDE_BRANCH.get());
       argParser.addArgument(excludeBranchStrings);
 
 
       includeAttributeStrings =
-           new StringArgument("includeattribute", 'i', "includeAttribute",
-                              false, true, true, "{attribute}", null, null,
-                              MSGID_LDIFEXPORT_DESCRIPTION_INCLUDE_ATTRIBUTE);
+           new StringArgument(
+                   "includeattribute", 'i', "includeAttribute",
+                   false, true, true, "{attribute}", null, null,
+                   INFO_LDIFEXPORT_DESCRIPTION_INCLUDE_ATTRIBUTE.get());
       argParser.addArgument(includeAttributeStrings);
 
 
       excludeAttributeStrings =
-           new StringArgument("excludeattribute", 'e', "excludeAttribute",
-                              false, true, true, "{attribute}", null, null,
-                              MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_ATTRIBUTE);
+           new StringArgument(
+                   "excludeattribute", 'e', "excludeAttribute",
+                   false, true, true, "{attribute}", null, null,
+                   INFO_LDIFEXPORT_DESCRIPTION_EXCLUDE_ATTRIBUTE.get());
       argParser.addArgument(excludeAttributeStrings);
 
 
       includeFilterStrings =
            new StringArgument("includefilter", 'I', "includeFilter",
                               false, true, true, "{filter}", null, null,
-                              MSGID_LDIFEXPORT_DESCRIPTION_INCLUDE_FILTER);
+                              INFO_LDIFEXPORT_DESCRIPTION_INCLUDE_FILTER.get());
       argParser.addArgument(includeFilterStrings);
 
 
       excludeFilterStrings =
            new StringArgument("excludefilter", 'E', "excludeFilter",
                               false, true, true, "{filter}", null, null,
-                              MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_FILTER);
+                              INFO_LDIFEXPORT_DESCRIPTION_EXCLUDE_FILTER.get());
       argParser.addArgument(excludeFilterStrings);
 
 
       excludeOperationalAttrs =
            new BooleanArgument("excludeoperational", 'O', "excludeOperational",
-                    MSGID_LDIFEXPORT_DESCRIPTION_EXCLUDE_OPERATIONAL);
+                    INFO_LDIFEXPORT_DESCRIPTION_EXCLUDE_OPERATIONAL.get());
       argParser.addArgument(excludeOperationalAttrs);
 
 
       wrapColumn =
            new IntegerArgument("wrapcolumn", 'w', "wrapColumn", false, false,
                                true, "{wrapColumn}", 0, null, true, 0, false, 0,
-                               MSGID_LDIFEXPORT_DESCRIPTION_WRAP_COLUMN);
+                               INFO_LDIFEXPORT_DESCRIPTION_WRAP_COLUMN.get());
       argParser.addArgument(wrapColumn);
 
 
       compressLDIF =
            new BooleanArgument("compressldif", OPTION_SHORT_COMPRESS,
                                OPTION_LONG_COMPRESS,
-                               MSGID_LDIFEXPORT_DESCRIPTION_COMPRESS_LDIF);
+                               INFO_LDIFEXPORT_DESCRIPTION_COMPRESS_LDIF.get());
       argParser.addArgument(compressLDIF);
 
 
       encryptLDIF =
            new BooleanArgument("encryptldif", 'y', "encryptLDIF",
-                               MSGID_LDIFEXPORT_DESCRIPTION_ENCRYPT_LDIF);
+                               INFO_LDIFEXPORT_DESCRIPTION_ENCRYPT_LDIF.get());
       argParser.addArgument(encryptLDIF);
 
 
       signHash =
            new BooleanArgument("signhash", 's', "signHash",
-                               MSGID_LDIFEXPORT_DESCRIPTION_SIGN_HASH);
+                               INFO_LDIFEXPORT_DESCRIPTION_SIGN_HASH.get());
       argParser.addArgument(signHash);
 
 
       displayUsage =
            new BooleanArgument("help", OPTION_SHORT_HELP,
                                OPTION_LONG_HELP,
-                               MSGID_DESCRIPTION_USAGE);
+                               INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(displayUsage);
       argParser.setUsageArgument(displayUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -317,8 +315,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -346,8 +343,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SERVER_BOOTSTRAP_ERROR;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message =
+                ERR_SERVER_BOOTSTRAP_ERROR.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -359,15 +356,13 @@
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -381,22 +376,19 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -410,22 +402,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -438,22 +430,23 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message =
+                ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                        getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -466,7 +459,7 @@
         errorLogPublisher =
             new ThreadFilterTextErrorLogPublisher(Thread.currentThread(),
                                                   new TextWriter.STREAM(out));
-        ErrorLogger.addErrorLogPublisher(errorLogPublisher);
+        addErrorLogPublisher(errorLogPublisher);
 
       }
       catch(Exception e)
@@ -486,22 +479,23 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message =
+                ERR_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message =
+                ERR_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message =
+                ERR_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS.get(
+                        getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -568,20 +562,16 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+              filterString, de.getMessageObject());
+          logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+              filterString, getExceptionMessage(e));
+          logError(message);
           return 1;
         }
       }
@@ -603,20 +593,16 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+              filterString, de.getMessageObject());
+          logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+              filterString, getExceptionMessage(e));
+          logError(message);
           return 1;
         }
       }
@@ -654,28 +640,25 @@
       }
       else
       {
-        int    msgID   = MSGID_LDIFEXPORT_MULTIPLE_BACKENDS_FOR_ID;
-        String message = getMessage(msgID, backendID.getValue());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message =
+            ERR_LDIFEXPORT_MULTIPLE_BACKENDS_FOR_ID.get(backendID.getValue());
+        logError(message);
         return 1;
       }
     }
 
     if (backend == null)
     {
-      int    msgID   = MSGID_LDIFEXPORT_NO_BACKENDS_FOR_ID;
-      String message = getMessage(msgID, backendID.getValue());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_LDIFEXPORT_NO_BACKENDS_FOR_ID.get(backendID.getValue());
+      logError(message);
       return 1;
     }
     else if (! backend.supportsLDIFExport())
     {
-      int    msgID   = MSGID_LDIFEXPORT_CANNOT_EXPORT_BACKEND;
-      String message = getMessage(msgID, backendID.getValue());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_LDIFEXPORT_CANNOT_EXPORT_BACKEND.get(backendID.getValue());
+      logError(message);
       return 1;
     }
 
@@ -691,18 +674,16 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE;
-          String message = getMessage(msgID, s, de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+              s, de.getMessageObject());
+          logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE;
-          String message = getMessage(msgID, s, getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+              s, getExceptionMessage(e));
+          logError(message);
           return 1;
         }
 
@@ -727,28 +708,25 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE;
-          String message = getMessage(msgID, s, de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+              s, de.getMessageObject());
+          logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE;
-          String message = getMessage(msgID, s, getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+              s, getExceptionMessage(e));
+          logError(message);
           return 1;
         }
 
         if (! Backend.handlesEntry(includeBranch, defaultIncludeBranches,
                                    excludeBranches))
         {
-          int    msgID   = MSGID_LDIFEXPORT_INVALID_INCLUDE_BASE;
-          String message = getMessage(msgID, s, backendID.getValue());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message =
+              ERR_LDIFEXPORT_INVALID_INCLUDE_BASE.get(s, backendID.getValue());
+          logError(message);
           return 1;
         }
 
@@ -795,10 +773,9 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_LDIFEXPORT_CANNOT_DECODE_WRAP_COLUMN_AS_INTEGER;
-      String message = getMessage(msgID, wrapColumn.getValue());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_LDIFEXPORT_CANNOT_DECODE_WRAP_COLUMN_AS_INTEGER.get(
+          wrapColumn.getValue());
+      logError(message);
       return 1;
     }
 
@@ -815,21 +792,17 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_LDIFEXPORT_CANNOT_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         return 0;
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFEXPORT_CANNOT_LOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return 0;
     }
 
@@ -841,17 +814,15 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_LDIFEXPORT_ERROR_DURING_EXPORT;
-      String message = getMessage(msgID, de.getErrorMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(de.getMessageObject());
+      logError(message);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFEXPORT_ERROR_DURING_EXPORT;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(getExceptionMessage(e));
+      logError(message);
     }
 
 
@@ -862,20 +833,16 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_LDIFEXPORT_CANNOT_UNLOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFEXPORT_CANNOT_UNLOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-               message, msgID);
+      Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/ImportLDIF.java b/opendj-sdk/opends/src/server/org/opends/server/tools/ImportLDIF.java
index 1b60234..9d52fcd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/ImportLDIF.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/ImportLDIF.java
@@ -47,13 +47,11 @@
 import org.opends.server.extensions.ConfigFileHandler;
 import org.opends.server.loggers.ThreadFilterTextErrorLogPublisher;
 import org.opends.server.loggers.TextWriter;
-import org.opends.server.loggers.ErrorLogger;
+
 import org.opends.server.tools.makeldif.TemplateFile;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ExistingFileBehavior;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.LDIFImportConfig;
@@ -68,8 +66,8 @@
 
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
+import org.opends.messages.Message;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -102,7 +100,7 @@
 
     if(errorLogPublisher != null)
     {
-      ErrorLogger.removeErrorLogPublisher(errorLogPublisher);
+      removeErrorLogPublisher(errorLogPublisher);
     }
 
     if(retCode != 0)
@@ -190,7 +188,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_LDIFIMPORT_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LDIFIMPORT_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.ImportLDIF",
                             toolDescription, false);
@@ -205,7 +203,7 @@
                               OPTION_LONG_CONFIG_CLASS, true, false,
                               true, OPTION_VALUE_CONFIG_CLASS,
                               ConfigFileHandler.class.getName(), null,
-                              MSGID_DESCRIPTION_CONFIG_CLASS);
+                              INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -213,7 +211,7 @@
       configFile =
            new StringArgument("configfile", 'f', "configFile", true, false,
                               true, "{configFile}", null, null,
-                              MSGID_DESCRIPTION_CONFIG_FILE);
+                              INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -222,100 +220,104 @@
            new StringArgument("ldiffile", OPTION_SHORT_LDIF_FILE,
                               OPTION_LONG_LDIF_FILE, false, true, true,
                               OPTION_VALUE_LDIF_FILE, null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_LDIF_FILE);
+                              INFO_LDIFIMPORT_DESCRIPTION_LDIF_FILE.get());
       argParser.addArgument(ldifFiles);
 
 
       templateFile =
            new StringArgument("templatefile", 't', "templateFile", false, false,
                               true, "{templateFile}", null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_TEMPLATE_FILE);
+                              INFO_LDIFIMPORT_DESCRIPTION_TEMPLATE_FILE.get());
       argParser.addArgument(templateFile);
 
 
       append =
            new BooleanArgument("append", 'a', "append",
-                               MSGID_LDIFIMPORT_DESCRIPTION_APPEND);
+                               INFO_LDIFIMPORT_DESCRIPTION_APPEND.get());
       argParser.addArgument(append);
 
 
       replaceExisting =
-           new BooleanArgument("replaceexisting", 'r', "replaceExisting",
-                               MSGID_LDIFIMPORT_DESCRIPTION_REPLACE_EXISTING);
+           new BooleanArgument(
+                   "replaceexisting", 'r', "replaceExisting",
+                   INFO_LDIFIMPORT_DESCRIPTION_REPLACE_EXISTING.get());
       argParser.addArgument(replaceExisting);
 
 
       backendID =
            new StringArgument("backendid", 'n', "backendID", false, false, true,
                               "{backendID}", null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_BACKEND_ID);
+                              INFO_LDIFIMPORT_DESCRIPTION_BACKEND_ID.get());
       argParser.addArgument(backendID);
 
       clearBackend =
           new BooleanArgument("clearbackend", 'F', "clearBackend",
-                              MSGID_LDIFIMPORT_DESCRIPTION_CLEAR_BACKEND);
+                              INFO_LDIFIMPORT_DESCRIPTION_CLEAR_BACKEND.get());
       argParser.addArgument(clearBackend);
 
 
       includeBranchStrings =
            new StringArgument("includebranch", 'b', "includeBranch", false,
                               true, true, "{branchDN}", null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_INCLUDE_BRANCH);
+                              INFO_LDIFIMPORT_DESCRIPTION_INCLUDE_BRANCH.get());
       argParser.addArgument(includeBranchStrings);
 
 
       excludeBranchStrings =
            new StringArgument("excludebranch", 'B', "excludeBranch", false,
                               true, true, "{branchDN}", null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_EXCLUDE_BRANCH);
+                              INFO_LDIFIMPORT_DESCRIPTION_EXCLUDE_BRANCH.get());
       argParser.addArgument(excludeBranchStrings);
 
 
       includeAttributeStrings =
-           new StringArgument("includeattribute", 'i', "includeAttribute",
-                              false, true, true, "{attribute}", null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_INCLUDE_ATTRIBUTE);
+           new StringArgument(
+                   "includeattribute", 'i', "includeAttribute",
+                   false, true, true, "{attribute}", null, null,
+                   INFO_LDIFIMPORT_DESCRIPTION_INCLUDE_ATTRIBUTE.get());
       argParser.addArgument(includeAttributeStrings);
 
 
       excludeAttributeStrings =
-           new StringArgument("excludeattribute", 'e', "excludeAttribute",
-                              false, true, true, "{attribute}", null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_EXCLUDE_ATTRIBUTE);
+           new StringArgument(
+                   "excludeattribute", 'e', "excludeAttribute",
+                   false, true, true, "{attribute}", null, null,
+                   INFO_LDIFIMPORT_DESCRIPTION_EXCLUDE_ATTRIBUTE.get());
       argParser.addArgument(excludeAttributeStrings);
 
 
       includeFilterStrings =
-           new StringArgument("includefilter", 'I', "includeFilter",
-                              false, true, true, "{filter}", null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_INCLUDE_FILTER);
+           new StringArgument(
+                   "includefilter", 'I', "includeFilter",
+                   false, true, true, "{filter}", null, null,
+                   INFO_LDIFIMPORT_DESCRIPTION_INCLUDE_FILTER.get());
       argParser.addArgument(includeFilterStrings);
 
 
       excludeFilterStrings =
            new StringArgument("excludefilter", 'E', "excludeFilter",
                               false, true, true, "{filter}", null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_EXCLUDE_FILTER);
+                              INFO_LDIFIMPORT_DESCRIPTION_EXCLUDE_FILTER.get());
       argParser.addArgument(excludeFilterStrings);
 
 
       rejectFile =
            new StringArgument("rejectfile", 'R', "rejectFile", false, false,
                               true, "{rejectFile}", null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_REJECT_FILE);
+                              INFO_LDIFIMPORT_DESCRIPTION_REJECT_FILE.get());
       argParser.addArgument(rejectFile);
 
 
       skipFile =
            new StringArgument("skipfile", 'K', "skipFile", false, false,
                               true, "{skipFile}", null, null,
-                              MSGID_LDIFIMPORT_DESCRIPTION_SKIP_FILE);
+                              INFO_LDIFIMPORT_DESCRIPTION_SKIP_FILE.get());
       argParser.addArgument(skipFile);
 
 
       overwrite =
            new BooleanArgument("overwrite", 'O', "overwrite",
-                               MSGID_LDIFIMPORT_DESCRIPTION_OVERWRITE);
+                               INFO_LDIFIMPORT_DESCRIPTION_OVERWRITE.get());
       argParser.addArgument(overwrite);
 
 
@@ -324,49 +326,48 @@
                                OPTION_LONG_RANDOM_SEED, false, false,
                                true, OPTION_VALUE_RANDOM_SEED,
                                0, null, false, 0, false, 0,
-                               MSGID_LDIFIMPORT_DESCRIPTION_RANDOM_SEED);
+                               INFO_LDIFIMPORT_DESCRIPTION_RANDOM_SEED.get());
       argParser.addArgument(randomSeed);
 
 
       skipSchemaValidation =
            new BooleanArgument("skipschema", 'S', "skipSchemaValidation",
-                    MSGID_LDIFIMPORT_DESCRIPTION_SKIP_SCHEMA_VALIDATION);
+                    INFO_LDIFIMPORT_DESCRIPTION_SKIP_SCHEMA_VALIDATION.get());
       argParser.addArgument(skipSchemaValidation);
 
 
       countRejects =
            new BooleanArgument("countrejects", null, "countRejects",
-                               MSGID_LDIFIMPORT_DESCRIPTION_COUNT_REJECTS);
+                               INFO_LDIFIMPORT_DESCRIPTION_COUNT_REJECTS.get());
       argParser.addArgument(countRejects);
 
 
       isCompressed =
            new BooleanArgument("iscompressed", 'c', "isCompressed",
-                               MSGID_LDIFIMPORT_DESCRIPTION_IS_COMPRESSED);
+                               INFO_LDIFIMPORT_DESCRIPTION_IS_COMPRESSED.get());
       argParser.addArgument(isCompressed);
 
 
       isEncrypted =
            new BooleanArgument("isencrypted", 'y', "isEncrypted",
-                               MSGID_LDIFIMPORT_DESCRIPTION_IS_ENCRYPTED);
+                               INFO_LDIFIMPORT_DESCRIPTION_IS_ENCRYPTED.get());
       argParser.addArgument(isEncrypted);
 
 
       quietMode = new BooleanArgument("quietmode", 'q', "quiet",
-                                      MSGID_LDIFIMPORT_DESCRIPTION_QUIET);
+                                      INFO_LDIFIMPORT_DESCRIPTION_QUIET.get());
       argParser.addArgument(quietMode);
 
 
       displayUsage =
            new BooleanArgument("help", OPTION_SHORT_HELP, OPTION_LONG_HELP,
-                               MSGID_DESCRIPTION_USAGE);
+                               INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(displayUsage);
       argParser.setUsageArgument(displayUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -380,8 +381,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -403,18 +403,18 @@
     {
       if (templateFile.isPresent())
       {
-        int    msgID   = MSGID_LDIFIMPORT_CONFLICTING_OPTIONS;
-        String message = getMessage(msgID, ldifFiles.getLongIdentifier(),
-                                    templateFile.getLongIdentifier());
+        Message message = ERR_LDIFIMPORT_CONFLICTING_OPTIONS.get(
+                ldifFiles.getLongIdentifier(),
+                templateFile.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
     }
     else if (! templateFile.isPresent())
     {
-      int    msgID   = MSGID_LDIFIMPORT_MISSING_REQUIRED_ARGUMENT;
-      String message = getMessage(msgID, ldifFiles.getLongIdentifier(),
-                                  templateFile.getLongIdentifier());
+      Message message = ERR_LDIFIMPORT_MISSING_REQUIRED_ARGUMENT.get(
+              ldifFiles.getLongIdentifier(),
+              templateFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -423,10 +423,9 @@
     // "backendID" argument was provided.
     if(!includeBranchStrings.isPresent() && !backendID.isPresent())
     {
-      int    msgID   = MSGID_LDIFIMPORT_MISSING_BACKEND_ARGUMENT;
-      String message = getMessage(msgID,
-                                  includeBranchStrings.getLongIdentifier(),
-                                  backendID.getLongIdentifier());
+      Message message = ERR_LDIFIMPORT_MISSING_BACKEND_ARGUMENT.get(
+              includeBranchStrings.getLongIdentifier(),
+              backendID.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -443,8 +442,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SERVER_BOOTSTRAP_ERROR;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -456,15 +455,13 @@
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -478,22 +475,19 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -507,22 +501,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+                ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+                ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -535,22 +529,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -565,7 +559,7 @@
           errorLogPublisher =
               new ThreadFilterTextErrorLogPublisher(Thread.currentThread(),
                                                     new TextWriter.STREAM(out));
-          ErrorLogger.addErrorLogPublisher(errorLogPublisher);
+          addErrorLogPublisher(errorLogPublisher);
 
         }
         catch(Exception e)
@@ -583,22 +577,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY.get(
+                ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY.get(
+                ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -613,22 +607,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
+                ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
+                ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -721,20 +715,16 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+              filterString, de.getMessageObject());
+          logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+              filterString, getExceptionMessage(e));
+          logError(message);
           return 1;
         }
       }
@@ -756,20 +746,16 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+              filterString, de.getMessageObject());
+          logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER;
-          String message = getMessage(msgID, filterString,
-                                      getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+              filterString, getExceptionMessage(e));
+          logError(message);
           return 1;
         }
       }
@@ -797,18 +783,16 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE;
-          String message = getMessage(msgID, s, de.getErrorMessage());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+              s, de.getMessageObject());
+          logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE;
-          String message = getMessage(msgID, s, getExceptionMessage(e));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+              s, getExceptionMessage(e));
+          logError(message);
           return 1;
         }
 
@@ -868,28 +852,23 @@
       }
       else
       {
-        int    msgID   = MSGID_LDIFIMPORT_MULTIPLE_BACKENDS_FOR_ID;
-        String message = getMessage(msgID);
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_MULTIPLE_BACKENDS_FOR_ID.get();
+        logError(message);
         return 1;
       }
     }
 
     if (backend == null)
     {
-      int    msgID   = MSGID_LDIFIMPORT_NO_BACKENDS_FOR_ID;
-      String message = getMessage(msgID, backendID.getValue());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_LDIFIMPORT_NO_BACKENDS_FOR_ID.get();
+      logError(message);
       return 1;
     }
     else if (! backend.supportsLDIFImport())
     {
-      int    msgID   = MSGID_LDIFIMPORT_CANNOT_IMPORT;
-      String message = getMessage(msgID, backendID.getValue());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_LDIFIMPORT_CANNOT_IMPORT.get(backendID.getValue());
+      logError(message);
       return 1;
     }
 
@@ -928,9 +907,8 @@
         builder.append(" / ");
         builder.append(backend.getBaseDNs()[i].toNormalizedString());
       }
-      int    msgID   = MSGID_LDIFIMPORT_MISSING_CLEAR_BACKEND;
-      String message = getMessage(msgID, builder.toString(),
-                                  clearBackend.getLongIdentifier());
+      Message message = ERR_LDIFIMPORT_MISSING_CLEAR_BACKEND.get(
+              builder.toString(), clearBackend.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -944,18 +922,16 @@
       }
       catch (DirectoryException de)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE;
-        String message = getMessage(msgID, s, de.getErrorMessage());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+            s, de.getMessageObject());
+        logError(message);
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE;
-        String message = getMessage(msgID, s, getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+            s, getExceptionMessage(e));
+        logError(message);
         return 1;
       }
 
@@ -977,11 +953,9 @@
         if (! Backend.handlesEntry(includeBranch, defaultIncludeBranches,
                                    excludeBranches))
         {
-          int    msgID   = MSGID_LDIFIMPORT_INVALID_INCLUDE_BASE;
-          String message = getMessage(msgID, includeBranch.toNormalizedString(),
-                                      backendID.getValue());
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
+              includeBranch.toNormalizedString(), backendID.getValue());
+          logError(message);
           return 1;
         }
       }
@@ -999,10 +973,8 @@
         File f = new File(pathname);
         if (!f.canRead())
         {
-          int    msgID   = MSGID_LDIFIMPORT_CANNOT_READ_FILE;
-          String message = getMessage(msgID, pathname);
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_LDIFIMPORT_CANNOT_READ_FILE.get(pathname);
+          logError(message);
           badFileCount++;
         }
       }
@@ -1032,18 +1004,16 @@
                             PATH_MAKELDIF_RESOURCE_DIR;
       TemplateFile tf = new TemplateFile(resourcePath, random);
 
-      ArrayList<String> warnings = new ArrayList<String>();
+      ArrayList<Message> warnings = new ArrayList<Message>();
       try
       {
         tf.parse(templateFile.getValue(), warnings);
       }
       catch (Exception e)
       {
-        int msgID = MSGID_LDIFIMPORT_CANNOT_PARSE_TEMPLATE_FILE;
-        String message = getMessage(msgID, templateFile.getValue(),
-                                    e.getMessage());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_TEMPLATE_FILE.get(
+            templateFile.getValue(), e.getMessage());
+        logError(message);
         return 1;
       }
 
@@ -1096,11 +1066,9 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE;
-        String message = getMessage(msgID, rejectFile.getValue(),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE.get(
+            rejectFile.getValue(), getExceptionMessage(e));
+        logError(message);
         return 1;
       }
     }
@@ -1124,11 +1092,9 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE;
-        String message = getMessage(msgID, skipFile.getValue(),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE.get(
+            skipFile.getValue(), getExceptionMessage(e));
+        logError(message);
         return 1;
       }
     }
@@ -1145,21 +1111,17 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         return 1;
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFIMPORT_CANNOT_LOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return 1;
     }
 
@@ -1183,18 +1145,16 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_LDIFIMPORT_ERROR_DURING_IMPORT;
-      String message = getMessage(msgID, de.getErrorMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_LDIFIMPORT_ERROR_DURING_IMPORT.get(de.getMessageObject());
+      logError(message);
       retCode = 1;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFIMPORT_ERROR_DURING_IMPORT;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_LDIFIMPORT_ERROR_DURING_IMPORT.get(getExceptionMessage(e));
+      logError(message);
       retCode = 1;
     }
 
@@ -1206,21 +1166,17 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_LDIFIMPORT_CANNOT_UNLOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         retCode = 1;
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFIMPORT_CANNOT_UNLOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-               message, msgID);
+      Message message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
       retCode = 1;
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/InstallDS.java b/opendj-sdk/opends/src/server/org/opends/server/tools/InstallDS.java
index 679f741..9592d21 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/InstallDS.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/InstallDS.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -51,8 +52,7 @@
 import org.opends.server.util.args.IntegerArgument;
 import org.opends.server.util.args.StringArgument;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -171,7 +171,7 @@
 
 
     // Create and initialize the argument parser for this program.
-    String toolDescription = getMessage(MSGID_INSTALLDS_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_INSTALLDS_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
     BooleanArgument   addBaseEntry;
@@ -195,108 +195,125 @@
 
     try
     {
-      testOnly = new BooleanArgument("test", 't', "testOnly",
-                                     MSGID_INSTALLDS_DESCRIPTION_TESTONLY);
+      testOnly = new BooleanArgument(
+              "test", 't', "testOnly",
+              INFO_INSTALLDS_DESCRIPTION_TESTONLY.get());
       testOnly.setHidden(true);
       argParser.addArgument(testOnly);
 
-      progName = new StringArgument("progname", 'P', "programName", false,
-                                    false, true, "{programName}", programName,
-                                    null, MSGID_INSTALLDS_DESCRIPTION_PROGNAME);
+      progName = new StringArgument(
+              "progname", 'P', "programName", false,
+              false, true, "{programName}", programName,
+              null, INFO_INSTALLDS_DESCRIPTION_PROGNAME.get());
       progName.setHidden(true);
       argParser.addArgument(progName);
 
-      configFile = new StringArgument("configfile", 'c', "configFile", false,
-                                      false, true, "{configFile}", null, null,
-                                      MSGID_DESCRIPTION_CONFIG_FILE);
+      configFile = new StringArgument(
+              "configfile", 'c', "configFile", false,
+              false, true, "{configFile}", null, null,
+              INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
-      configClass = new StringArgument("configclass", OPTION_SHORT_CONFIG_CLASS,
-                             OPTION_LONG_CONFIG_CLASS, false,
-                             false, true, OPTION_VALUE_CONFIG_CLASS,
-                             ConfigFileHandler.class.getName(), null,
-                             MSGID_DESCRIPTION_CONFIG_CLASS);
+      configClass = new StringArgument(
+              "configclass", OPTION_SHORT_CONFIG_CLASS,
+              OPTION_LONG_CONFIG_CLASS, false,
+              false, true, OPTION_VALUE_CONFIG_CLASS,
+              ConfigFileHandler.class.getName(), null,
+              INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
       // NOTE:  This argument isn't actually used for anything, but it provides
       // consistency with the setup script, which does take a --cli option.
-      cliMode = new BooleanArgument("cli", null, OPTION_LONG_CLI,
-                                    MSGID_INSTALLDS_DESCRIPTION_CLI);
+      cliMode = new BooleanArgument(
+              "cli", null, OPTION_LONG_CLI,
+              INFO_INSTALLDS_DESCRIPTION_CLI.get());
       argParser.addArgument(cliMode);
 
-      silentInstall = new BooleanArgument("silent", 's', "silentInstall",
-                                          MSGID_INSTALLDS_DESCRIPTION_SILENT);
+      silentInstall = new BooleanArgument(
+              "silent", 's', "silentInstall",
+              INFO_INSTALLDS_DESCRIPTION_SILENT.get());
       argParser.addArgument(silentInstall);
 
-      baseDN = new StringArgument("basedn", OPTION_SHORT_BASEDN,
-                                  OPTION_LONG_BASEDN, false, true, true,
-                                  OPTION_VALUE_BASEDN,
-                                  "dc=example,dc=com", null,
-                                  MSGID_INSTALLDS_DESCRIPTION_BASEDN);
+      baseDN = new StringArgument(
+              "basedn", OPTION_SHORT_BASEDN,
+              OPTION_LONG_BASEDN, false, true, true,
+              OPTION_VALUE_BASEDN,
+              "dc=example,dc=com", null,
+              INFO_INSTALLDS_DESCRIPTION_BASEDN.get());
       argParser.addArgument(baseDN);
 
-      addBaseEntry = new BooleanArgument("addbase", 'a', "addBaseEntry",
-                                         MSGID_INSTALLDS_DESCRIPTION_ADDBASE);
+      addBaseEntry = new BooleanArgument(
+              "addbase", 'a', "addBaseEntry",
+              INFO_INSTALLDS_DESCRIPTION_ADDBASE.get());
       argParser.addArgument(addBaseEntry);
 
-      importLDIF = new StringArgument("importldif", OPTION_SHORT_LDIF_FILE,
-                                      OPTION_LONG_LDIF_FILE, false,
-                                      true, true, OPTION_VALUE_LDIF_FILE,
-                                      null, null,
-                                      MSGID_INSTALLDS_DESCRIPTION_IMPORTLDIF);
+      importLDIF = new StringArgument(
+              "importldif", OPTION_SHORT_LDIF_FILE,
+              OPTION_LONG_LDIF_FILE, false,
+              true, true, OPTION_VALUE_LDIF_FILE,
+              null, null,
+              INFO_INSTALLDS_DESCRIPTION_IMPORTLDIF.get());
       argParser.addArgument(importLDIF);
 
-      sampleData = new IntegerArgument("sampledata", 'd', "sampleData", false,
-                                       false, true, "{numEntries}", 0, null,
-                                       true, 0, false, 0,
-                                       MSGID_INSTALLDS_DESCRIPTION_SAMPLE_DATA);
+      sampleData = new IntegerArgument(
+              "sampledata", 'd', "sampleData", false,
+              false, true, "{numEntries}", 0, null,
+              true, 0, false, 0,
+              INFO_INSTALLDS_DESCRIPTION_SAMPLE_DATA.get());
       argParser.addArgument(sampleData);
 
-      ldapPort = new IntegerArgument("ldapport", OPTION_SHORT_PORT,
-                                     "ldapPort", false, false,
-                                     true, OPTION_VALUE_PORT, 389,
-                                     null, true, 1, true, 65535,
-                                     MSGID_INSTALLDS_DESCRIPTION_LDAPPORT);
+      ldapPort = new IntegerArgument(
+              "ldapport", OPTION_SHORT_PORT,
+              "ldapPort", false, false,
+              true, OPTION_VALUE_PORT, 389,
+              null, true, 1, true, 65535,
+              INFO_INSTALLDS_DESCRIPTION_LDAPPORT.get());
       argParser.addArgument(ldapPort);
 
-      jmxPort = new IntegerArgument("jmxport", 'x', "jmxPort", false, false,
-                                    true, "{jmxPort}",
-                                    SetupUtils.getDefaultJMXPort(), null, true,
-                                    1, true, 65535,
-                                    MSGID_INSTALLDS_DESCRIPTION_JMXPORT);
+      jmxPort = new IntegerArgument(
+              "jmxport", 'x', "jmxPort", false, false,
+              true, "{jmxPort}",
+              SetupUtils.getDefaultJMXPort(), null, true,
+              1, true, 65535,
+              INFO_INSTALLDS_DESCRIPTION_JMXPORT.get());
       argParser.addArgument(jmxPort);
 
-      skipPortCheck = new BooleanArgument("skipportcheck", 'S', "skipPortCheck",
-                                          MSGID_INSTALLDS_DESCRIPTION_SKIPPORT);
+      skipPortCheck = new BooleanArgument(
+              "skipportcheck", 'S', "skipPortCheck",
+              INFO_INSTALLDS_DESCRIPTION_SKIPPORT.get());
       argParser.addArgument(skipPortCheck);
 
-      rootDN = new StringArgument("rootdn",OPTION_SHORT_ROOT_USER_DN,
-                                  OPTION_LONG_ROOT_USER_DN, false, true,
-                                  true, OPTION_VALUE_ROOT_USER_DN,
-                                  "cn=Directory Manager",
-                                  null, MSGID_INSTALLDS_DESCRIPTION_ROOTDN);
+      rootDN = new StringArgument(
+              "rootdn",OPTION_SHORT_ROOT_USER_DN,
+              OPTION_LONG_ROOT_USER_DN, false, true,
+              true, OPTION_VALUE_ROOT_USER_DN,
+              "cn=Directory Manager",
+              null, INFO_INSTALLDS_DESCRIPTION_ROOTDN.get());
       argParser.addArgument(rootDN);
 
-      rootPWString = new StringArgument("rootpwstring", OPTION_SHORT_BINDPWD,
-                                        "rootUserPassword",
-                                        false, false, true,
-                                        "{password}", null,
-                                        null,
-                                        MSGID_INSTALLDS_DESCRIPTION_ROOTPW);
+      rootPWString = new StringArgument(
+              "rootpwstring", OPTION_SHORT_BINDPWD,
+              "rootUserPassword",
+              false, false, true,
+              "{password}", null,
+              null,
+              INFO_INSTALLDS_DESCRIPTION_ROOTPW.get());
       argParser.addArgument(rootPWString);
 
-      rootPWFile = new FileBasedArgument("rootpwfile",
-                            OPTION_SHORT_BINDPWD_FILE,
-                            "rootUserPasswordFile", false, false,
-                            OPTION_VALUE_BINDPWD_FILE,
-                            null, null, MSGID_INSTALLDS_DESCRIPTION_ROOTPWFILE);
+      rootPWFile = new FileBasedArgument(
+              "rootpwfile",
+              OPTION_SHORT_BINDPWD_FILE,
+              "rootUserPasswordFile", false, false,
+              OPTION_VALUE_BINDPWD_FILE,
+              null, null, INFO_INSTALLDS_DESCRIPTION_ROOTPWFILE.get());
       argParser.addArgument(rootPWFile);
 
-      enableWindowsService = new BooleanArgument("enablewindowsservice", 'e',
-                            "enableWindowsService",
-                            MSGID_INSTALLDS_DESCRIPTION_ENABLE_WINDOWS_SERVICE);
+      enableWindowsService = new BooleanArgument(
+              "enablewindowsservice", 'e',
+              "enableWindowsService",
+              INFO_INSTALLDS_DESCRIPTION_ENABLE_WINDOWS_SERVICE.get());
       if (SetupUtils.isWindows())
       {
         argParser.addArgument(enableWindowsService);
@@ -304,7 +321,7 @@
 
       showUsage = new BooleanArgument("help", OPTION_SHORT_HELP,
                                       OPTION_LONG_HELP,
-                                      MSGID_INSTALLDS_DESCRIPTION_HELP);
+                                      INFO_INSTALLDS_DESCRIPTION_HELP.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
@@ -347,9 +364,8 @@
       {
         if (ports.contains(jmxPort.getIntValue()))
         {
-          int    msgID   = MSGID_CONFIGDS_PORT_ALREADY_SPECIFIED;
-          String message = getMessage(msgID,
-              String.valueOf(jmxPort.getIntValue()));
+          Message message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
+                  String.valueOf(jmxPort.getIntValue()));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           System.err.println(argParser.getUsage());
           return 1;
@@ -362,8 +378,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -373,26 +388,26 @@
     {
       if (importLDIF.isPresent())
       {
-        int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-        String message = getMessage(msgID, addBaseEntry.getLongIdentifier(),
-                                    importLDIF.getLongIdentifier());
+        Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+                addBaseEntry.getLongIdentifier(),
+                importLDIF.getLongIdentifier());
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       else if (sampleData.isPresent())
       {
-        int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-        String message = getMessage(msgID, addBaseEntry.getLongIdentifier(),
-                                    sampleData.getLongIdentifier());
+        Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+                addBaseEntry.getLongIdentifier(),
+                sampleData.getLongIdentifier());
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
     }
     else if (importLDIF.isPresent() && sampleData.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, importLDIF.getLongIdentifier(),
-                                  sampleData.getLongIdentifier());
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              importLDIF.getLongIdentifier(),
+              sampleData.getLongIdentifier());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -406,8 +421,8 @@
     }
     else
     {
-      int    msgID   = MSGID_INSTALLDS_NO_CONFIG_FILE;
-      String message = getMessage(msgID, configFile.getLongIdentifier());
+      Message message = ERR_INSTALLDS_NO_CONFIG_FILE.get(
+              configFile.getLongIdentifier());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -423,8 +438,7 @@
       System.out.println(versionString);
       System.out.println();
 
-      int    msgID   = MSGID_INSTALLDS_INITIALIZING;
-      String message = getMessage(msgID);
+      Message message = INFO_INSTALLDS_INITIALIZING.get();
       System.out.println(wrapText(message, MAX_LINE_WIDTH));
     }
 
@@ -440,10 +454,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_INSTALLDS_CANNOT_INITIALIZE_JMX;
-      String message = getMessage(msgID,
-                                  String.valueOf(configFile.getValue()),
-                                  e.getMessage());
+      Message message = ERR_INSTALLDS_CANNOT_INITIALIZE_JMX.get(
+              String.valueOf(configFile.getValue()),
+              e.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -455,9 +468,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_INSTALLDS_CANNOT_INITIALIZE_CONFIG;
-      String message = getMessage(msgID,
-                                  String.valueOf(configFile.getValue()),
+      Message message = ERR_INSTALLDS_CANNOT_INITIALIZE_CONFIG.get(
+              String.valueOf(configFile.getValue()),
                                   e.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -469,9 +481,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_INSTALLDS_CANNOT_INITIALIZE_SCHEMA;
-      String message = getMessage(msgID,
-                                  String.valueOf(configFile.getValue()),
+      Message message = ERR_INSTALLDS_CANNOT_INITIALIZE_SCHEMA.get(
+              String.valueOf(configFile.getValue()),
                                   e.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -491,18 +502,18 @@
           // Check if the port can be used.
           if (!SetupUtils.canUseAsPort(ldapPortNumber))
           {
-            int msgID;
-            String message;
+            Message message;
             if (SetupUtils.isPriviledgedPort(ldapPortNumber))
             {
-              msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT;
-              message = getMessage(msgID, ldapPortNumber);
+
+              message = ERR_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT.get(
+                      ldapPortNumber);
               System.err.println(wrapText(message, MAX_LINE_WIDTH));
             }
             else
             {
-              msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PORT;
-              message = getMessage(msgID, ldapPortNumber);
+
+              message = ERR_INSTALLDS_CANNOT_BIND_TO_PORT.get(ldapPortNumber);
               System.err.println(wrapText(message, MAX_LINE_WIDTH));
             }
             return 1;
@@ -519,8 +530,7 @@
     {
       while (true)
       {
-        int    msgID   = MSGID_INSTALLDS_PROMPT_LDAPPORT;
-        String message = getMessage(msgID);
+        Message message = INFO_INSTALLDS_PROMPT_LDAPPORT.get();
         ldapPortNumber = promptForInteger(message, 389, 1, 65535);
 
         if (skipPortCheck.isPresent())
@@ -538,14 +548,13 @@
           {
             if (SetupUtils.isPriviledgedPort(ldapPortNumber))
             {
-              msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT;
-              message = getMessage(msgID, ldapPortNumber);
+              message = ERR_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT.get(
+                      ldapPortNumber);
               System.err.println(wrapText(message, MAX_LINE_WIDTH));
             }
             else
             {
-              msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PORT;
-              message = getMessage(msgID, ldapPortNumber);
+              message = ERR_INSTALLDS_CANNOT_BIND_TO_PORT.get(ldapPortNumber);
               System.err.println(wrapText(message, MAX_LINE_WIDTH));
             }
           }
@@ -566,18 +575,16 @@
           // Check if the port can be used.
           if (!SetupUtils.canUseAsPort(jmxPortNumber))
           {
-            int msgID;
-            String message;
+            Message message;
             if (SetupUtils.isPriviledgedPort(jmxPortNumber))
             {
-              msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT;
-              message = getMessage(msgID, jmxPortNumber);
+              message = ERR_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT.get(
+                      jmxPortNumber);
               System.err.println(wrapText(message, MAX_LINE_WIDTH));
             }
             else
             {
-              msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PORT;
-              message = getMessage(msgID, jmxPortNumber);
+              message = ERR_INSTALLDS_CANNOT_BIND_TO_PORT.get(jmxPortNumber);
               System.err.println(wrapText(message, MAX_LINE_WIDTH));
             }
             return 1;
@@ -597,8 +604,7 @@
       /*
       while (true)
       {
-        int    msgID   = MSGID_INSTALLDS_PROMPT_JMXPORT;
-        String message = getMessage(msgID);
+        Message message = INFO_INSTALLDS_PROMPT_JMXPORT.get();
         jmxPortNumber = promptForInteger(message,
             SetupUtils.getDefaultJMXPort(), 1, 65535);
 
@@ -617,14 +623,14 @@
           {
             if (SetupUtils.isPriviledgedPort(jmxPortNumber))
             {
-              msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT;
-              message = getMessage(msgID, jmxPortNumber);
+
+              message = ERR_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT.get(
+                        jmxPortNumber);
               System.err.println(wrapText(message, MAX_LINE_WIDTH));
             }
             else
             {
-              msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PORT;
-              message = getMessage(msgID, jmxPortNumber);
+              message = ERR_INSTALLDS_CANNOT_BIND_TO_PORT.get(jmxPortNumber);
               System.err.println(wrapText(message, MAX_LINE_WIDTH));
             }
           }
@@ -647,8 +653,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_INSTALLDS_CANNOT_PARSE_DN;
-          String message = getMessage(msgID, s, e.getMessage());
+          Message message = ERR_INSTALLDS_CANNOT_PARSE_DN.get(
+                  s, e.getMessage());
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -663,8 +669,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_INSTALLDS_CANNOT_PARSE_DN;
-        String message = getMessage(msgID, rootDN.getDefaultValue(),
+        Message message = ERR_INSTALLDS_CANNOT_PARSE_DN.get(
+                rootDN.getDefaultValue(),
                                     e.getMessage());
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -672,9 +678,7 @@
     }
     else
     {
-      int    msgID   = MSGID_INSTALLDS_PROMPT_ROOT_DN;
-      String message = getMessage(msgID);
-
+      Message message = INFO_INSTALLDS_PROMPT_ROOT_DN.get();
       rootDNs = new LinkedList<DN>();
       rootDNs.add(promptForDN(message, rootDN.getDefaultValue()));
     }
@@ -688,9 +692,9 @@
 
       if (rootPWFile.isPresent())
       {
-        int msgID = MSGID_INSTALLDS_TWO_CONFLICTING_ARGUMENTS;
-        String message = getMessage(msgID, rootPWString.getLongIdentifier(),
-                                    rootPWFile.getLongIdentifier());
+        Message message = ERR_INSTALLDS_TWO_CONFLICTING_ARGUMENTS.get(
+                rootPWString.getLongIdentifier(),
+                rootPWFile.getLongIdentifier());
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -701,19 +705,17 @@
     }
     else if (silentInstall.isPresent())
     {
-      int    msgID   = MSGID_INSTALLDS_NO_ROOT_PASSWORD;
-      String message = getMessage(msgID, rootPWString.getLongIdentifier(),
-                                  rootPWFile.getLongIdentifier());
+      Message message = ERR_INSTALLDS_NO_ROOT_PASSWORD.get(
+              rootPWString.getLongIdentifier(),
+              rootPWFile.getLongIdentifier());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
     else
     {
-      int    msgID         = MSGID_INSTALLDS_PROMPT_ROOT_PASSWORD;
-      String initialPrompt = getMessage(msgID);
+      Message initialPrompt = INFO_INSTALLDS_PROMPT_ROOT_PASSWORD.get();
 
-      msgID = MSGID_INSTALLDS_PROMPT_CONFIRM_ROOT_PASSWORD;
-      String confirmPrompt = getMessage(msgID);
+      Message confirmPrompt = INFO_INSTALLDS_PROMPT_CONFIRM_ROOT_PASSWORD.get();
 
       rootPassword =
            new String(promptForPassword(initialPrompt, confirmPrompt));
@@ -733,8 +735,9 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_INSTALLDS_CANNOT_PARSE_DN;
-          String message = getMessage(msgID, s, e.getMessage());
+
+          Message message = ERR_INSTALLDS_CANNOT_PARSE_DN.get(
+                  s, e.getMessage());
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -749,8 +752,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_INSTALLDS_CANNOT_PARSE_DN;
-        String message = getMessage(msgID, baseDN.getDefaultValue(),
+        Message message =
+                ERR_INSTALLDS_CANNOT_PARSE_DN.get(baseDN.getDefaultValue(),
                                     e.getMessage());
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -758,8 +761,7 @@
     }
     else
     {
-      int    msgID   = MSGID_INSTALLDS_PROMPT_BASEDN;
-      String message = getMessage(msgID);
+      Message message = INFO_INSTALLDS_PROMPT_BASEDN.get();
 
       baseDNs = new LinkedList<DN>();
       baseDNs.add(promptForDN(message, baseDN.getDefaultValue()));
@@ -799,23 +801,28 @@
     }
     else
     {
-      int msgID = MSGID_INSTALLDS_HEADER_POPULATE_TYPE;
-      System.out.println(wrapText(getMessage(msgID), MAX_LINE_WIDTH));
+      System.out.println(wrapText(
+              INFO_INSTALLDS_HEADER_POPULATE_TYPE.get(),
+              MAX_LINE_WIDTH));
 
-      msgID = MSGID_INSTALLDS_POPULATE_OPTION_BASE_ONLY;
-      System.out.println(wrapText("1.  " + getMessage(msgID), MAX_LINE_WIDTH));
+      System.out.println(wrapText("1.  " +
+              INFO_INSTALLDS_POPULATE_OPTION_BASE_ONLY.get(),
+              MAX_LINE_WIDTH));
 
-      msgID = MSGID_INSTALLDS_POPULATE_OPTION_LEAVE_EMPTY;
-      System.out.println(wrapText("2.  " + getMessage(msgID), MAX_LINE_WIDTH));
+      System.out.println(wrapText("2.  " +
+              INFO_INSTALLDS_POPULATE_OPTION_LEAVE_EMPTY.get(),
+              MAX_LINE_WIDTH));
 
-      msgID = MSGID_INSTALLDS_POPULATE_OPTION_IMPORT_LDIF;
-      System.out.println(wrapText("3.  " + getMessage(msgID), MAX_LINE_WIDTH));
+      System.out.println(wrapText("3.  " +
+              INFO_INSTALLDS_POPULATE_OPTION_IMPORT_LDIF.get(),
+              MAX_LINE_WIDTH));
 
-      msgID = MSGID_INSTALLDS_POPULATE_OPTION_GENERATE_SAMPLE;
-      System.out.println(wrapText("4.  " + getMessage(msgID), MAX_LINE_WIDTH));
+      System.out.println(wrapText("4.  " +
+              INFO_INSTALLDS_POPULATE_OPTION_GENERATE_SAMPLE.get(),
+              MAX_LINE_WIDTH));
 
-      msgID = MSGID_INSTALLDS_PROMPT_POPULATE_CHOICE;
-      populateType = promptForInteger(getMessage(msgID), 1, 1, 4);
+      populateType = promptForInteger(
+              INFO_INSTALLDS_PROMPT_POPULATE_CHOICE.get(), 1, 1, 4);
       System.out.println();
 
       if (populateType == POPULATE_TYPE_IMPORT_FROM_LDIF)
@@ -823,8 +830,7 @@
         ldifFiles = new LinkedList<String>();
         while (true)
         {
-          msgID = MSGID_INSTALLDS_PROMPT_IMPORT_FILE;
-          String message = getMessage(msgID);
+          Message message = INFO_INSTALLDS_PROMPT_IMPORT_FILE.get();
           String path    = promptForString(message, "");
           if (new File(path).exists())
           {
@@ -834,8 +840,8 @@
           }
           else
           {
-            msgID   = MSGID_INSTALLDS_NO_SUCH_LDIF_FILE;
-            message = getMessage(msgID, path);
+
+            message = ERR_INSTALLDS_NO_SUCH_LDIF_FILE.get(path);
             System.err.println(wrapText(message, MAX_LINE_WIDTH));
             System.err.println();
           }
@@ -843,8 +849,7 @@
       }
       else if (populateType == POPULATE_TYPE_GENERATE_SAMPLE_DATA)
       {
-        msgID = MSGID_INSTALLDS_PROMPT_NUM_ENTRIES;
-        String message = getMessage(msgID);
+        Message message = INFO_INSTALLDS_PROMPT_NUM_ENTRIES.get();
         numUsers = promptForInteger(message, 2000, 0, Integer.MAX_VALUE);
         System.out.println();
       }
@@ -864,7 +869,7 @@
       }
       else
       {
-        String message = getMessage(MSGID_INSTALLDS_PROMPT_ENABLE_SERVICE);
+        Message message = INFO_INSTALLDS_PROMPT_ENABLE_SERVICE.get();
         enableService = promptForBoolean(message, Boolean.TRUE);
       }
     }
@@ -906,7 +911,7 @@
     {
       System.out.println();
 
-      String message = getMessage(MSGID_INSTALLDS_STATUS_CONFIGURING_DS);
+      Message message = INFO_INSTALLDS_STATUS_CONFIGURING_DS.get();
       System.out.println(wrapText(message, MAX_LINE_WIDTH));
     }
 
@@ -923,7 +928,7 @@
       // Create a temporary LDIF file that will hold the entry to add.
       if (! silentInstall.isPresent())
       {
-        String message = getMessage(MSGID_INSTALLDS_STATUS_CREATING_BASE_LDIF);
+        Message message = INFO_INSTALLDS_STATUS_CREATING_BASE_LDIF.get();
         System.out.println(wrapText(message, MAX_LINE_WIDTH));
       }
 
@@ -952,8 +957,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_INSTALLDS_CANNOT_CREATE_BASE_ENTRY_LDIF;
-        String message = getMessage(msgID, String.valueOf(e));
+        Message message = ERR_INSTALLDS_CANNOT_CREATE_BASE_ENTRY_LDIF.get(
+                String.valueOf(e));
 
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -973,8 +978,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_INSTALLDS_CANNOT_CREATE_TEMPLATE_FILE;
-        String message = getMessage(msgID, String.valueOf(e));
+        Message message = ERR_INSTALLDS_CANNOT_CREATE_TEMPLATE_FILE.get(
+                String.valueOf(e));
 
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -985,7 +990,7 @@
     {
       if (! silentInstall.isPresent())
       {
-        String message = getMessage(MSGID_INSTALLDS_STATUS_IMPORTING_LDIF);
+        Message message = INFO_INSTALLDS_STATUS_IMPORTING_LDIF.get();
         System.out.println(wrapText(message, MAX_LINE_WIDTH));
       }
 
@@ -1028,13 +1033,13 @@
       returnValue = ImportLDIF.mainImportLDIF(importLDIFArguments);
       if (returnValue != 0)
       {
-        String message = getMessage(MSGID_INSTALLDS_IMPORT_UNSUCCESSFUL);
+        Message message = ERR_INSTALLDS_IMPORT_UNSUCCESSFUL.get();
         System.out.println(wrapText(message, MAX_LINE_WIDTH));
         return returnValue;
       }
       else
       {
-        String message = getMessage(MSGID_INSTALLDS_IMPORT_SUCCESSFUL);
+        Message message = INFO_INSTALLDS_IMPORT_SUCCESSFUL.get();
         System.out.println(wrapText(message, MAX_LINE_WIDTH));
       }
     }
@@ -1059,7 +1064,7 @@
 
     if (enableService)
     {
-      String message = getMessage(MSGID_INSTALLDS_ENABLING_WINDOWS_SERVICE);
+      Message message = INFO_INSTALLDS_ENABLING_WINDOWS_SERVICE.get();
       System.out.println(wrapText(message, MAX_LINE_WIDTH));
       int code = ConfigureWindowsService.enableService(System.out,
           System.err);
@@ -1079,7 +1084,7 @@
     // If we've gotten here, then everything seems to have gone smoothly.
     if (! silentInstall.isPresent())
     {
-      String message = getMessage(MSGID_INSTALLDS_STATUS_SUCCESS);
+      Message message = INFO_INSTALLDS_STATUS_SUCCESS.get();
       System.out.println(wrapText(message, MAX_LINE_WIDTH));
     }
 
@@ -1102,7 +1107,7 @@
    *
    * @return  The <CODE>boolean</CODE> value read from the user input.
    */
-  private static boolean promptForBoolean(String prompt, Boolean defaultValue)
+  private static boolean promptForBoolean(Message prompt, Boolean defaultValue)
   {
     String wrappedPrompt = wrapText(prompt, MAX_LINE_WIDTH);
 
@@ -1121,11 +1126,11 @@
 
         if (defaultValue)
         {
-          System.out.print(getMessage(MSGID_INSTALLDS_PROMPT_VALUE_YES));
+          System.out.print(INFO_INSTALLDS_PROMPT_VALUE_YES.get());
         }
         else
         {
-          System.out.print(getMessage(MSGID_INSTALLDS_PROMPT_VALUE_NO));
+          System.out.print(INFO_INSTALLDS_PROMPT_VALUE_NO.get());
         }
 
         System.out.print("]: ");
@@ -1148,7 +1153,7 @@
       {
         if (defaultValue == null)
         {
-          String message = getMessage(MSGID_INSTALLDS_INVALID_YESNO_RESPONSE);
+          Message message = ERR_INSTALLDS_INVALID_YESNO_RESPONSE.get();
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
         }
         else
@@ -1158,7 +1163,7 @@
       }
       else
       {
-        String message = getMessage(MSGID_INSTALLDS_INVALID_YESNO_RESPONSE);
+        Message message = ERR_INSTALLDS_INVALID_YESNO_RESPONSE.get();
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
       }
     }
@@ -1184,7 +1189,7 @@
    *
    * @return  The <CODE>int</CODE> value read from the user input.
    */
-  private static int promptForInteger(String prompt, Integer defaultValue,
+  private static int promptForInteger(Message prompt, Integer defaultValue,
                                       Integer lowerBound, Integer upperBound)
   {
     String wrappedPrompt = wrapText(prompt, MAX_LINE_WIDTH);
@@ -1212,7 +1217,7 @@
       {
         if (defaultValue == null)
         {
-          String message = getMessage(MSGID_INSTALLDS_INVALID_INTEGER_RESPONSE);
+          Message message = ERR_INSTALLDS_INVALID_INTEGER_RESPONSE.get();
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
         }
         else
@@ -1227,16 +1232,14 @@
           int intValue = Integer.parseInt(response);
           if ((lowerBound != null) && (intValue < lowerBound))
           {
-            String message =
-                        getMessage(MSGID_INSTALLDS_INTEGER_BELOW_LOWER_BOUND,
-                                   lowerBound);
+            Message message =
+                ERR_INSTALLDS_INTEGER_BELOW_LOWER_BOUND.get(lowerBound);
             System.err.println(wrapText(message, MAX_LINE_WIDTH));
           }
           else if ((upperBound != null) && (intValue > upperBound))
           {
-            String message =
-                        getMessage(MSGID_INSTALLDS_INTEGER_ABOVE_UPPER_BOUND,
-                                   upperBound);
+            Message message =
+                ERR_INSTALLDS_INTEGER_ABOVE_UPPER_BOUND.get(upperBound);
             System.err.println(wrapText(message, MAX_LINE_WIDTH));
           }
           else
@@ -1246,7 +1249,7 @@
         }
         catch (NumberFormatException nfe)
         {
-          String message = getMessage(MSGID_INSTALLDS_INVALID_INTEGER_RESPONSE);
+          Message message = ERR_INSTALLDS_INVALID_INTEGER_RESPONSE.get();
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
         }
       }
@@ -1269,7 +1272,7 @@
    *
    * @return  The DN value read from the user.
    */
-  private static DN promptForDN(String prompt, String defaultValue)
+  private static DN promptForDN(Message prompt, String defaultValue)
   {
     String wrappedPrompt = wrapText(prompt, MAX_LINE_WIDTH);
 
@@ -1296,7 +1299,7 @@
       {
         if (defaultValue == null)
         {
-          String message = getMessage(MSGID_INSTALLDS_INVALID_DN_RESPONSE);
+          Message message = ERR_INSTALLDS_INVALID_DN_RESPONSE.get();
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
         }
         else
@@ -1307,7 +1310,7 @@
           }
           catch (Exception e)
           {
-            String message = getMessage(MSGID_INSTALLDS_INVALID_DN_RESPONSE);
+            Message message = ERR_INSTALLDS_INVALID_DN_RESPONSE.get();
             System.err.println(wrapText(message, MAX_LINE_WIDTH));
           }
         }
@@ -1320,7 +1323,7 @@
         }
         catch (Exception e)
         {
-          String message = getMessage(MSGID_INSTALLDS_INVALID_DN_RESPONSE);
+          Message message = ERR_INSTALLDS_INVALID_DN_RESPONSE.get();
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
         }
       }
@@ -1342,7 +1345,7 @@
    *
    * @return  The string value read from the user.
    */
-  private static String promptForString(String prompt, String defaultValue)
+  private static String promptForString(Message prompt, String defaultValue)
   {
       System.out.println();
     String wrappedPrompt = wrapText(prompt, MAX_LINE_WIDTH);
@@ -1369,7 +1372,7 @@
       {
         if (defaultValue == null)
         {
-          String message = getMessage(MSGID_INSTALLDS_INVALID_STRING_RESPONSE);
+          Message message = ERR_INSTALLDS_INVALID_STRING_RESPONSE.get();
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
         }
         else
@@ -1398,8 +1401,8 @@
    *
    * @return  The string value read from the user.
    */
-  private static char[] promptForPassword(String initialPrompt,
-                                          String reEntryPrompt)
+  private static char[] promptForPassword(Message initialPrompt,
+                                          Message reEntryPrompt)
   {
     String wrappedInitialPrompt = wrapText(initialPrompt, MAX_LINE_WIDTH);
     String wrappedReEntryPrompt = wrapText(reEntryPrompt, MAX_LINE_WIDTH);
@@ -1414,7 +1417,7 @@
       char[] password = PasswordReader.readPassword();
       if ((password == null) || (password.length == 0))
       {
-        String message = getMessage(MSGID_INSTALLDS_INVALID_PASSWORD_RESPONSE);
+        Message message = ERR_INSTALLDS_INVALID_PASSWORD_RESPONSE.get();
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
       }
       else
@@ -1426,7 +1429,7 @@
         if ((confirmedPassword == null) ||
             (! Arrays.equals(password, confirmedPassword)))
         {
-          String message = getMessage(MSGID_INSTALLDS_PASSWORDS_DONT_MATCH);
+          Message message = ERR_INSTALLDS_PASSWORDS_DONT_MATCH.get();
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
         }
         else
@@ -1482,8 +1485,8 @@
     }
     catch (Exception e)
     {
-      String message = getMessage(MSGID_INSTALLDS_ERROR_READING_FROM_STDIN,
-                                  String.valueOf(e));
+      Message message =
+          ERR_INSTALLDS_ERROR_READING_FROM_STDIN.get(String.valueOf(e));
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
 
       return null;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPAuthenticationHandler.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPAuthenticationHandler.java
index df68e95..2282a36 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPAuthenticationHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPAuthenticationHandler.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -69,8 +70,8 @@
 import org.opends.server.util.Base64;
 import org.opends.server.util.PasswordReader;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
+
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.tools.ToolConstants.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -208,7 +209,8 @@
    *          specified SASL mechanism, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,String> getSASLProperties(String mechanism)
+  public static LinkedHashMap<String,Message> getSASLProperties(
+          String mechanism)
   {
     String upperName = toUpperCase(mechanism);
     if (upperName.equals(SASL_MECHANISM_ANONYMOUS))
@@ -289,8 +291,8 @@
       }
       else
       {
-        System.out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT,
-                                    bindDN.stringValue()));
+        System.out.print(INFO_LDAPAUTH_PASSWORD_PROMPT.get(
+                bindDN.stringValue()));
         char[] pwChars = PasswordReader.readPassword();
         if (pwChars == null)
         {
@@ -325,17 +327,17 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SIMPLE_BIND;
-      String message = getMessage(msgID, getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_SEND_SIMPLE_BIND.get(getExceptionMessage(ioe));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SIMPLE_BIND;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_SEND_SIMPLE_BIND.get(getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-                                msgID, message, e);
+                                message, e);
     }
 
 
@@ -346,39 +348,39 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        int    msgID   = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-        String message = getMessage(msgID);
+        Message message =
+            ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                  msgID, message);
+                                  message);
       }
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ioe));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(ae));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, ae);
+                                message, ae);
     }
     catch (LDAPException le)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(le));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, le);
+                                message, le);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(e));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
     }
 
 
@@ -407,26 +409,24 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-          String message = getMessage(msgID, extendedResponse.getResultCode(),
-                                      extendedResponse.getErrorMessage());
-          throw new LDAPException(extendedResponse.getResultCode(), msgID,
-                                  message);
+          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+              get(extendedResponse.getResultCode(),
+                  extendedResponse.getErrorMessage());
+          throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE;
-          String message = getMessage(msgID, String.valueOf(extendedResponse));
+          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+              String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                    msgID, message);
+                                    message);
         }
 
       default:
-        int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-        String message =
-             getMessage(msgID, String.valueOf(responseMessage.getProtocolOp()));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message);
+        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+            String.valueOf(responseMessage.getProtocolOp()));
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
 
@@ -442,10 +442,9 @@
 
     // FIXME -- Add support for referrals.
 
-    int    msgID   = MSGID_LDAPAUTH_SIMPLE_BIND_FAILED;
-    String message = getMessage(msgID);
+    Message message = ERR_LDAPAUTH_SIMPLE_BIND_FAILED.get();
     throw new LDAPException(resultCode, bindResponse.getErrorMessage(),
-                            msgID, message, bindResponse.getMatchedDN(), null);
+                            message, bindResponse.getMatchedDN(), null);
   }
 
 
@@ -497,10 +496,9 @@
 
     if ((mechanism == null) || (mechanism.length() == 0))
     {
-      int    msgID   = MSGID_LDAPAUTH_NO_SASL_MECHANISM;
-      String message = getMessage(msgID);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                message);
+      Message message = ERR_LDAPAUTH_NO_SASL_MECHANISM.get();
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
     }
 
 
@@ -539,10 +537,9 @@
     }
     else
     {
-      int    msgID   = MSGID_LDAPAUTH_UNSUPPORTED_SASL_MECHANISM;
-      String message = getMessage(msgID, mechanism);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_AUTH_UNKNOWN, msgID,
-                                message);
+      Message message = ERR_LDAPAUTH_UNSUPPORTED_SASL_MECHANISM.get(mechanism);
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_AUTH_UNKNOWN, message);
     }
   }
 
@@ -604,19 +601,18 @@
 
             if (iterator.hasNext())
             {
-              int    msgID   = MSGID_LDAPAUTH_TRACE_SINGLE_VALUED;
-              String message = getMessage(msgID);
+              Message message = ERR_LDAPAUTH_TRACE_SINGLE_VALUED.get();
               throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                        msgID, message);
+                                        message);
             }
           }
         }
         else
         {
-          int    msgID   = MSGID_LDAPAUTH_INVALID_SASL_PROPERTY;
-          String message = getMessage(msgID, name, SASL_MECHANISM_ANONYMOUS);
+          Message message = ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(
+              name, SASL_MECHANISM_ANONYMOUS);
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                    msgID, message);
+                                    message);
         }
       }
     }
@@ -646,19 +642,17 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_ANONYMOUS,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_ANONYMOUS,
-                                  getExceptionMessage(e));
+      Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+          SASL_MECHANISM_ANONYMOUS, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-                                msgID, message, e);
+                                message, e);
     }
 
 
@@ -669,39 +663,39 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        int    msgID   = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-        String message = getMessage(msgID);
+        Message message =
+            ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                  msgID, message);
+                                  message);
       }
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ioe));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(ae));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, ae);
+                                message, ae);
     }
     catch (LDAPException le)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(le));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, le);
+                                message, le);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(e));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
     }
 
 
@@ -730,26 +724,24 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-          String message = getMessage(msgID, extendedResponse.getResultCode(),
-                                      extendedResponse.getErrorMessage());
-          throw new LDAPException(extendedResponse.getResultCode(), msgID,
-                                  message);
+          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+              get(extendedResponse.getResultCode(),
+                  extendedResponse.getErrorMessage());
+          throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE;
-          String message = getMessage(msgID, String.valueOf(extendedResponse));
+          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+              String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                    msgID, message);
+                                    message);
         }
 
       default:
-        int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-        String message =
-             getMessage(msgID, String.valueOf(responseMessage.getProtocolOp()));
+        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+            String.valueOf(responseMessage.getProtocolOp()));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                  msgID, message);
+                                  message);
     }
 
 
@@ -765,10 +757,10 @@
 
     // FIXME -- Add support for referrals.
 
-    int    msgID   = MSGID_LDAPAUTH_SASL_BIND_FAILED;
-    String message = getMessage(msgID, SASL_MECHANISM_ANONYMOUS);
+    Message message =
+        ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_ANONYMOUS);
     throw new LDAPException(resultCode, bindResponse.getErrorMessage(),
-                            msgID, message, bindResponse.getMatchedDN(), null);
+                            message, bindResponse.getMatchedDN(), null);
   }
 
 
@@ -782,13 +774,13 @@
    *          SASL ANONYMOUS bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,String> getSASLAnonymousProperties()
+  public static LinkedHashMap<String, Message> getSASLAnonymousProperties()
   {
-    LinkedHashMap<String,String> properties =
-         new LinkedHashMap<String,String>(1);
+    LinkedHashMap<String,Message> properties =
+         new LinkedHashMap<String,Message>(1);
 
     properties.put(SASL_PROPERTY_TRACE,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_TRACE));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_TRACE.get());
 
     return properties;
   }
@@ -834,10 +826,10 @@
     // properties are allowed.
     if ((saslProperties == null) || saslProperties.isEmpty())
     {
-      int    msgID   = MSGID_LDAPAUTH_NO_SASL_PROPERTIES;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                message);
+      Message message =
+          ERR_LDAPAUTH_NO_SASL_PROPERTIES.get(SASL_MECHANISM_CRAM_MD5);
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
     }
 
     Iterator<String> propertyNames = saslProperties.keySet().iterator();
@@ -856,19 +848,18 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_AUTHID_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
       else
       {
-        int    msgID   = MSGID_LDAPAUTH_INVALID_SASL_PROPERTY;
-        String message = getMessage(msgID, name, SASL_MECHANISM_CRAM_MD5);
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                  message);
+        Message message = ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(
+            name, SASL_MECHANISM_CRAM_MD5);
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
       }
     }
 
@@ -876,10 +867,10 @@
     // Make sure that the authID was provided.
     if ((authID == null) || (authID.length() == 0))
     {
-      int    msgID   = MSGID_LDAPAUTH_SASL_AUTHID_REQUIRED;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                message);
+      Message message =
+          ERR_LDAPAUTH_SASL_AUTHID_REQUIRED.get(SASL_MECHANISM_CRAM_MD5);
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
     }
 
 
@@ -887,7 +878,7 @@
     // the user.
     if (bindPassword == null)
     {
-      System.out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, authID));
+      System.out.print(INFO_LDAPAUTH_PASSWORD_PROMPT.get(authID));
       char[] pwChars = PasswordReader.readPassword();
       if (pwChars == null)
       {
@@ -917,19 +908,17 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(e));
+      Message message = ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND.get(
+          SASL_MECHANISM_CRAM_MD5, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-                                msgID, message, e);
+                                message, e);
     }
 
 
@@ -940,43 +929,39 @@
       responseMessage1 = reader.readMessage();
       if (responseMessage1 == null)
       {
-        int    msgID   = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-        String message = getMessage(msgID);
+        Message message =
+            ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                  msgID, message);
+                                  message);
       }
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(ae));
+      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+          SASL_MECHANISM_CRAM_MD5, getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, ae);
+                                message, ae);
     }
     catch (LDAPException le)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(le));
+      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+          SASL_MECHANISM_CRAM_MD5, getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, le);
+                                message, le);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message 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);
     }
 
 
@@ -996,26 +981,24 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-          String message = getMessage(msgID, extendedResponse.getResultCode(),
-                                      extendedResponse.getErrorMessage());
-          throw new LDAPException(extendedResponse.getResultCode(), msgID,
-                                  message);
+          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+              get(extendedResponse.getResultCode(),
+                  extendedResponse.getErrorMessage());
+          throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE;
-          String message = getMessage(msgID, String.valueOf(extendedResponse));
+          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+              String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                    msgID, message);
+                                    message);
         }
 
       default:
-        int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-        String message = getMessage(msgID,
-                              String.valueOf(responseMessage1.getProtocolOp()));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message);
+        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+            String.valueOf(responseMessage1.getProtocolOp()));
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
 
@@ -1026,17 +1009,16 @@
     int resultCode1 = bindResponse1.getResultCode();
     if (resultCode1 != LDAPResultCode.SASL_BIND_IN_PROGRESS)
     {
-      String errorMessage = bindResponse1.getErrorMessage();
+      Message errorMessage = bindResponse1.getErrorMessage();
       if (errorMessage == null)
       {
-        errorMessage = "";
+        errorMessage = Message.EMPTY;
       }
 
-      int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5, resultCode1,
-                                  LDAPResultCode.toString(resultCode1),
-                                  errorMessage);
-      throw new LDAPException(resultCode1, errorMessage, msgID, message,
+      Message message = ERR_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE.
+          get(SASL_MECHANISM_CRAM_MD5, resultCode1,
+              LDAPResultCode.toString(resultCode1), errorMessage);
+      throw new LDAPException(resultCode1, errorMessage, message,
                               bindResponse1.getMatchedDN(), null);
     }
 
@@ -1046,9 +1028,8 @@
     ASN1OctetString serverChallenge = bindResponse1.getServerSASLCredentials();
     if (serverChallenge == null)
     {
-      int    msgID   = MSGID_LDAPAUTH_NO_CRAMMD5_SERVER_CREDENTIALS;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAPAUTH_NO_CRAMMD5_SERVER_CREDENTIALS.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -1074,19 +1055,17 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message 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);
     }
 
 
@@ -1097,43 +1076,39 @@
       responseMessage2 = reader.readMessage();
       if (responseMessage2 == null)
       {
-        int    msgID   = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-        String message = getMessage(msgID);
+        Message message =
+            ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                  msgID, message);
+                                  message);
       }
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(ae));
+      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+          SASL_MECHANISM_CRAM_MD5, getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, ae);
+                                message, ae);
     }
     catch (LDAPException le)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(le));
+      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+          SASL_MECHANISM_CRAM_MD5, getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, le);
+                                message, le);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5,
-                                  getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message 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);
     }
 
 
@@ -1162,26 +1137,24 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-          String message = getMessage(msgID, extendedResponse.getResultCode(),
-                                      extendedResponse.getErrorMessage());
-          throw new LDAPException(extendedResponse.getResultCode(), msgID,
-                                  message);
+          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+              get(extendedResponse.getResultCode(),
+                  extendedResponse.getErrorMessage());
+          throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE;
-          String message = getMessage(msgID, String.valueOf(extendedResponse));
+          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+              String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                    msgID, message);
+                                    message);
         }
 
       default:
-        int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-        String message = getMessage(msgID,
-                              String.valueOf(responseMessage2.getProtocolOp()));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message);
+        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+            String.valueOf(responseMessage2.getProtocolOp()));
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
 
@@ -1197,10 +1170,10 @@
 
     // FIXME -- Add support for referrals.
 
-    int    msgID   = MSGID_LDAPAUTH_SASL_BIND_FAILED;
-    String message = getMessage(msgID, SASL_MECHANISM_CRAM_MD5);
+    Message message =
+        ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_CRAM_MD5);
     throw new LDAPException(resultCode2, bindResponse2.getErrorMessage(),
-                            msgID, message, bindResponse2.getMatchedDN(), null);
+                            message, bindResponse2.getMatchedDN(), null);
   }
 
 
@@ -1232,10 +1205,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST;
-        String message = getMessage(msgID, getExceptionMessage(e));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message, e);
+        Message message = ERR_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST.get(
+            getExceptionMessage(e));
+        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
+                message, e);
       }
     }
 
@@ -1309,13 +1282,13 @@
    *          SASL CRAM-MD5 bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,String> getSASLCRAMMD5Properties()
+  public static LinkedHashMap<String,Message> getSASLCRAMMD5Properties()
   {
-    LinkedHashMap<String,String> properties =
-         new LinkedHashMap<String,String>(1);
+    LinkedHashMap<String,Message> properties =
+         new LinkedHashMap<String,Message>(1);
 
     properties.put(SASL_PROPERTY_AUTHID,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID.get());
 
     return properties;
   }
@@ -1366,10 +1339,10 @@
     // QoP, digest URI, and authzID are optional.
     if ((saslProperties == null) || saslProperties.isEmpty())
     {
-      int    msgID   = MSGID_LDAPAUTH_NO_SASL_PROPERTIES;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                message);
+      Message message =
+          ERR_LDAPAUTH_NO_SASL_PROPERTIES.get(SASL_MECHANISM_DIGEST_MD5);
+      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
+              message);
     }
 
     Iterator<String> propertyNames = saslProperties.keySet().iterator();
@@ -1388,10 +1361,9 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_AUTHID_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
@@ -1406,10 +1378,9 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_REALM_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_REALM_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
@@ -1423,10 +1394,9 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_QOP_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_QOP_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
 
           if (qop.equals("auth"))
@@ -1436,18 +1406,16 @@
           else if (qop.equals("auth-int") || qop.equals("auth-conf"))
           {
             // FIXME -- Add support for integrity and confidentiality.
-            int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_QOP_NOT_SUPPORTED;
-            String message = getMessage(msgID, qop);
+            Message message = ERR_LDAPAUTH_DIGESTMD5_QOP_NOT_SUPPORTED.get(qop);
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
           else
           {
             // This is an illegal value.
-            int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_INVALID_QOP;
-            String message = getMessage(msgID, qop);
+            Message message = ERR_LDAPAUTH_DIGESTMD5_INVALID_QOP.get(qop);
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
@@ -1461,10 +1429,9 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_DIGEST_URI_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_DIGEST_URI_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
@@ -1478,19 +1445,18 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_AUTHZID_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_AUTHZID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
       else
       {
-        int    msgID   = MSGID_LDAPAUTH_INVALID_SASL_PROPERTY;
-        String message = getMessage(msgID, name, SASL_MECHANISM_DIGEST_MD5);
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                  message);
+        Message message = ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(
+            name, SASL_MECHANISM_DIGEST_MD5);
+        throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
+                message);
       }
     }
 
@@ -1498,10 +1464,10 @@
     // Make sure that the authID was provided.
     if ((authID == null) || (authID.length() == 0))
     {
-      int    msgID   = MSGID_LDAPAUTH_SASL_AUTHID_REQUIRED;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                message);
+      Message message =
+          ERR_LDAPAUTH_SASL_AUTHID_REQUIRED.get(SASL_MECHANISM_DIGEST_MD5);
+      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
+              message);
     }
 
 
@@ -1509,7 +1475,7 @@
     // the user.
     if (bindPassword == null)
     {
-      System.out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, authID));
+      System.out.print(INFO_LDAPAUTH_PASSWORD_PROMPT.get(authID));
       char[] pwChars = PasswordReader.readPassword();
       if (pwChars == null)
       {
@@ -1539,19 +1505,17 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(e));
+      Message message = ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND.get(
+          SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-                                msgID, message, e);
+                                message, e);
     }
 
 
@@ -1562,43 +1526,39 @@
       responseMessage1 = reader.readMessage();
       if (responseMessage1 == null)
       {
-        int    msgID   = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-        String message = getMessage(msgID);
+        Message message =
+            ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                  msgID, message);
+                                  message);
       }
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(ae));
+      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+          SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, ae);
+                                message, ae);
     }
     catch (LDAPException le)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(le));
+      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+          SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, le);
+                                message, le);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message 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);
     }
 
 
@@ -1618,26 +1578,24 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-          String message = getMessage(msgID, extendedResponse.getResultCode(),
-                                      extendedResponse.getErrorMessage());
-          throw new LDAPException(extendedResponse.getResultCode(), msgID,
-                                  message);
+          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+              get(extendedResponse.getResultCode(),
+                  extendedResponse.getErrorMessage());
+          throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE;
-          String message = getMessage(msgID, String.valueOf(extendedResponse));
+          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+              String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                    msgID, message);
+                                    message);
         }
 
       default:
-        int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-        String message = getMessage(msgID,
-                              String.valueOf(responseMessage1.getProtocolOp()));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message);
+        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+            String.valueOf(responseMessage1.getProtocolOp()));
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
 
@@ -1648,17 +1606,16 @@
     int resultCode1 = bindResponse1.getResultCode();
     if (resultCode1 != LDAPResultCode.SASL_BIND_IN_PROGRESS)
     {
-      String errorMessage = bindResponse1.getErrorMessage();
+      Message errorMessage = bindResponse1.getErrorMessage();
       if (errorMessage == null)
       {
-        errorMessage = "";
+        errorMessage = Message.EMPTY;
       }
 
-      int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5, resultCode1,
-                                  LDAPResultCode.toString(resultCode1),
-                                  errorMessage);
-      throw new LDAPException(resultCode1, errorMessage, msgID, message,
+      Message message = ERR_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE.
+          get(SASL_MECHANISM_DIGEST_MD5, resultCode1,
+              LDAPResultCode.toString(resultCode1), errorMessage);
+      throw new LDAPException(resultCode1, errorMessage, message,
                               bindResponse1.getMatchedDN(), null);
     }
 
@@ -1669,9 +1626,8 @@
          bindResponse1.getServerSASLCredentials();
     if (serverCredentials == null)
     {
-      int    msgID   = MSGID_LDAPAUTH_NO_DIGESTMD5_SERVER_CREDENTIALS;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAPAUTH_NO_DIGESTMD5_SERVER_CREDENTIALS.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -1692,9 +1648,10 @@
       {
         // This is bad because we're not at the end of the string but we don't
         // have a name/value delimiter.
-        int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS;
-        String message = getMessage(msgID, pos);
-        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+        Message message =
+            ERR_LDAPAUTH_DIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS.get(
+                    credString, pos);
+        throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
 
 
@@ -1709,10 +1666,9 @@
         // The value must be the string "utf-8".  If not, that's an error.
         if (! tokenValue.equalsIgnoreCase("utf-8"))
         {
-          int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_INVALID_CHARSET;
-          String message = getMessage(msgID, tokenValue);
-          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID,
-                                  message);
+          Message message =
+              ERR_LDAPAUTH_DIGESTMD5_INVALID_CHARSET.get(tokenValue);
+          throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
 
         useUTF8 = true;
@@ -1758,10 +1714,10 @@
 
         if (! qopModes.contains(qop))
         {
-          int    msgID   = MSGID_LDAPAUTH_REQUESTED_QOP_NOT_SUPPORTED_BY_SERVER;
-          String message = getMessage(msgID, qop, tokenValue);
+          Message message = ERR_LDAPAUTH_REQUESTED_QOP_NOT_SUPPORTED_BY_SERVER.
+              get(qop, tokenValue);
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                    msgID, message);
+                                    message);
         }
       }
       else
@@ -1777,9 +1733,8 @@
     // Make sure that the nonce was included in the response from the server.
     if (nonce == null)
     {
-      int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_NO_NONCE;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAPAUTH_DIGESTMD5_NO_NONCE.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -1805,10 +1760,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_CANNOT_CREATE_RESPONSE_DIGEST;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message message = ERR_LDAPAUTH_DIGESTMD5_CANNOT_CREATE_RESPONSE_DIGEST.
+          get(getExceptionMessage(e));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
     }
 
 
@@ -1865,19 +1820,17 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(e));
+      Message message = ERR_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND.get(
+          SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-                                msgID, message, e);
+                                message, e);
     }
 
 
@@ -1888,43 +1841,39 @@
       responseMessage2 = reader.readMessage();
       if (responseMessage2 == null)
       {
-        int    msgID   = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-        String message = getMessage(msgID);
+        Message message =
+            ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                  msgID, message);
+                                  message);
       }
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(ae));
+      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+          SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, ae);
+                                message, ae);
     }
     catch (LDAPException le)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(le));
+      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+          SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, le);
+                                message, le);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5,
-                                  getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message 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);
     }
 
 
@@ -1953,26 +1902,24 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-          String message = getMessage(msgID, extendedResponse.getResultCode(),
-                                      extendedResponse.getErrorMessage());
-          throw new LDAPException(extendedResponse.getResultCode(), msgID,
-                                  message);
+          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+              get(extendedResponse.getResultCode(),
+                  extendedResponse.getErrorMessage());
+          throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE;
-          String message = getMessage(msgID, String.valueOf(extendedResponse));
+          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+              String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                    msgID, message);
+                                    message);
         }
 
       default:
-        int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-        String message = getMessage(msgID,
-                              String.valueOf(responseMessage2.getProtocolOp()));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message);
+        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+            String.valueOf(responseMessage2.getProtocolOp()));
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
 
@@ -1983,10 +1930,10 @@
     {
       // FIXME -- Add support for referrals.
 
-      int    msgID   = MSGID_LDAPAUTH_SASL_BIND_FAILED;
-      String message = getMessage(msgID, SASL_MECHANISM_DIGEST_MD5);
+      Message message =
+          ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_DIGEST_MD5);
       throw new LDAPException(resultCode2, bindResponse2.getErrorMessage(),
-                              msgID, message, bindResponse2.getMatchedDN(),
+                              message, bindResponse2.getMatchedDN(),
                               null);
     }
 
@@ -1996,17 +1943,15 @@
     ASN1OctetString rspAuthCreds = bindResponse2.getServerSASLCredentials();
     if (rspAuthCreds == null)
     {
-      int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     String credStr = toLowerCase(rspAuthCreds.stringValue());
     if (! credStr.startsWith("rspauth="))
     {
-      int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS;
-      String message = getMessage(msgID);
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS.get();
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -2017,9 +1962,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_COULD_NOT_DECODE_RSPAUTH;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAPAUTH_DIGESTMD5_COULD_NOT_DECODE_RSPAUTH.get(
+          getExceptionMessage(e));
+      throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     byte[] clientRspAuth;
@@ -2032,18 +1977,17 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_COULD_NOT_CALCULATE_RSPAUTH;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message);
+      Message message = ERR_LDAPAUTH_DIGESTMD5_COULD_NOT_CALCULATE_RSPAUTH.get(
+          getExceptionMessage(e));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
     if (! Arrays.equals(serverRspAuth, clientRspAuth))
     {
-      int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_RSPAUTH_MISMATCH;
-      String message = getMessage(msgID);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message);
+      Message message = ERR_LDAPAUTH_DIGESTMD5_RSPAUTH_MISMATCH.get();
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
     // FIXME -- Need to look for things like password expiration warning,
@@ -2167,10 +2111,10 @@
             {
               // We found the closing quote before the end of the token.  This
               // is not fine.
-              int msgID = MSGID_LDAPAUTH_DIGESTMD5_INVALID_CLOSING_QUOTE_POS;
-              String message = getMessage(msgID, (pos-2));
+              Message message =
+                  ERR_LDAPAUTH_DIGESTMD5_INVALID_CLOSING_QUOTE_POS.get((pos-2));
               throw new LDAPException(LDAPResultCode.INVALID_CREDENTIALS,
-                                      msgID, message);
+                                      message);
             }
           }
         }
@@ -2265,10 +2209,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST;
-        String message = getMessage(msgID, getExceptionMessage(e));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message, e);
+        Message message = ERR_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST.get(
+            getExceptionMessage(e));
+        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
+                message, e);
       }
     }
 
@@ -2469,21 +2413,21 @@
    *          SASL DIGEST-MD5 bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,String> getSASLDigestMD5Properties()
+  public static LinkedHashMap<String,Message> getSASLDigestMD5Properties()
   {
-    LinkedHashMap<String,String> properties =
-         new LinkedHashMap<String,String>(5);
+    LinkedHashMap<String,Message> properties =
+         new LinkedHashMap<String,Message>(5);
 
     properties.put(SASL_PROPERTY_AUTHID,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID.get());
     properties.put(SASL_PROPERTY_REALM,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_REALM));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_REALM.get());
     properties.put(SASL_PROPERTY_QOP,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_QOP));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_QOP.get());
     properties.put(SASL_PROPERTY_DIGEST_URI,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_DIGEST_URI));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_DIGEST_URI.get());
     properties.put(SASL_PROPERTY_AUTHZID,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHZID));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHZID.get());
 
     return properties;
   }
@@ -2524,10 +2468,10 @@
     // Make sure that no SASL properties were provided.
     if ((saslProperties != null) && (! saslProperties.isEmpty()))
     {
-      int    msgID   = MSGID_LDAPAUTH_NO_ALLOWED_SASL_PROPERTIES;
-      String message = getMessage(msgID, SASL_MECHANISM_EXTERNAL);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                message);
+      Message message =
+          ERR_LDAPAUTH_NO_ALLOWED_SASL_PROPERTIES.get(SASL_MECHANISM_EXTERNAL);
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
     }
 
 
@@ -2544,19 +2488,17 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_EXTERNAL,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_EXTERNAL,
-                                  getExceptionMessage(e));
+      Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+          SASL_MECHANISM_EXTERNAL, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-                                msgID, message, e);
+                                message, e);
     }
 
 
@@ -2567,39 +2509,39 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        int    msgID   = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-        String message = getMessage(msgID);
+        Message message =
+            ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                  msgID, message);
+                                  message);
       }
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ioe));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(ae));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, ae);
+                                message, ae);
     }
     catch (LDAPException le)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(le));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, le);
+                                message, le);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(e));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
     }
 
 
@@ -2628,26 +2570,24 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-          String message = getMessage(msgID, extendedResponse.getResultCode(),
-                                      extendedResponse.getErrorMessage());
-          throw new LDAPException(extendedResponse.getResultCode(), msgID,
-                                  message);
+          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+              get(extendedResponse.getResultCode(),
+                  extendedResponse.getErrorMessage());
+          throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE;
-          String message = getMessage(msgID, String.valueOf(extendedResponse));
+          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+              String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                    msgID, message);
+                                    message);
         }
 
       default:
-        int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-        String message =
-             getMessage(msgID, String.valueOf(responseMessage.getProtocolOp()));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message);
+        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+            String.valueOf(responseMessage.getProtocolOp()));
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
 
@@ -2663,10 +2603,10 @@
 
     // FIXME -- Add support for referrals.
 
-    int    msgID   = MSGID_LDAPAUTH_SASL_BIND_FAILED;
-    String message = getMessage(msgID, SASL_MECHANISM_EXTERNAL);
+    Message message =
+        ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_EXTERNAL);
     throw new LDAPException(resultCode, bindResponse.getErrorMessage(),
-                            msgID, message, bindResponse.getMatchedDN(), null);
+                            message, bindResponse.getMatchedDN(), null);
   }
 
 
@@ -2680,10 +2620,10 @@
    *          SASL EXTERNAL bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,String> getSASLExternalProperties()
+  public static LinkedHashMap<String,Message> getSASLExternalProperties()
   {
     // There are no properties for the SASL EXTERNAL mechanism.
-    return new LinkedHashMap<String,String>(0);
+    return new LinkedHashMap<String,Message>(0);
   }
 
 
@@ -2744,10 +2684,10 @@
     // KDC, QoP, and realm are optional.
     if ((saslProperties == null) || saslProperties.isEmpty())
     {
-      int    msgID   = MSGID_LDAPAUTH_NO_SASL_PROPERTIES;
-      String message = getMessage(msgID, SASL_MECHANISM_GSSAPI);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                message);
+      Message message =
+          ERR_LDAPAUTH_NO_SASL_PROPERTIES.get(SASL_MECHANISM_GSSAPI);
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
     }
 
     Iterator<String> propertyNames = saslProperties.keySet().iterator();
@@ -2766,10 +2706,9 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_AUTHID_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
@@ -2783,10 +2722,9 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_AUTHZID_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_AUTHZID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
@@ -2800,10 +2738,9 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_KDC_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_KDC_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
@@ -2817,10 +2754,9 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_QOP_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_QOP_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
 
           if (gssapiQoP.equals("auth"))
@@ -2831,18 +2767,17 @@
                    gssapiQoP.equals("auth-conf"))
           {
             // FIXME -- Add support for integrity and confidentiality.
-            int    msgID   = MSGID_LDAPAUTH_DIGESTMD5_QOP_NOT_SUPPORTED;
-            String message = getMessage(msgID, gssapiQoP);
+            Message message =
+                ERR_LDAPAUTH_DIGESTMD5_QOP_NOT_SUPPORTED.get(gssapiQoP);
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
           else
           {
             // This is an illegal value.
-            int    msgID   = MSGID_LDAPAUTH_GSSAPI_INVALID_QOP;
-            String message = getMessage(msgID, gssapiQoP);
+            Message message = ERR_LDAPAUTH_GSSAPI_INVALID_QOP.get(gssapiQoP);
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
@@ -2856,19 +2791,18 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_REALM_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_REALM_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
       else
       {
-        int    msgID   = MSGID_LDAPAUTH_INVALID_SASL_PROPERTY;
-        String message = getMessage(msgID, name, SASL_MECHANISM_GSSAPI);
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                  message);
+        Message message =
+            ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(name, SASL_MECHANISM_GSSAPI);
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
       }
     }
 
@@ -2876,10 +2810,10 @@
     // Make sure that the authID was provided.
     if ((gssapiAuthID == null) || (gssapiAuthID.length() == 0))
     {
-      int    msgID   = MSGID_LDAPAUTH_SASL_AUTHID_REQUIRED;
-      String message = getMessage(msgID, SASL_MECHANISM_GSSAPI);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                message);
+      Message message =
+          ERR_LDAPAUTH_SASL_AUTHID_REQUIRED.get(SASL_MECHANISM_GSSAPI);
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
     }
 
 
@@ -2931,10 +2865,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_GSSAPI_CANNOT_CREATE_JAAS_CONFIG;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message message = ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_JAAS_CONFIG.get(
+          getExceptionMessage(e));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
     }
 
     System.setProperty(JAAS_PROPERTY_CONFIG_FILE, configFileName);
@@ -2951,10 +2885,10 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_GSSAPI_LOCAL_AUTHENTICATION_FAILED;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message message = ERR_LDAPAUTH_GSSAPI_LOCAL_AUTHENTICATION_FAILED.get(
+          getExceptionMessage(e));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
     }
 
     try
@@ -2972,10 +2906,10 @@
         throw (LDAPException) e;
       }
 
-      int    msgID   = MSGID_LDAPAUTH_GSSAPI_REMOTE_AUTHENTICATION_FAILED;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message message = ERR_LDAPAUTH_GSSAPI_REMOTE_AUTHENTICATION_FAILED.get(
+              getExceptionMessage(e));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
     }
 
 
@@ -2996,19 +2930,19 @@
    *          SASL EXTERNAL bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,String> getSASLGSSAPIProperties()
+  public static LinkedHashMap<String,Message> getSASLGSSAPIProperties()
   {
-    LinkedHashMap<String,String> properties =
-         new LinkedHashMap<String,String>(4);
+    LinkedHashMap<String,Message> properties =
+         new LinkedHashMap<String,Message>(4);
 
     properties.put(SASL_PROPERTY_AUTHID,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID.get());
     properties.put(SASL_PROPERTY_AUTHZID,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHZID));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHZID.get());
     properties.put(SASL_PROPERTY_KDC,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_KDC));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_KDC.get());
     properties.put(SASL_PROPERTY_REALM,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_REALM));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_REALM.get());
 
     return properties;
   }
@@ -3055,10 +2989,10 @@
     // optional.
     if ((saslProperties == null) || saslProperties.isEmpty())
     {
-      int    msgID   = MSGID_LDAPAUTH_NO_SASL_PROPERTIES;
-      String message = getMessage(msgID, SASL_MECHANISM_PLAIN);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                message);
+      Message message =
+          ERR_LDAPAUTH_NO_SASL_PROPERTIES.get(SASL_MECHANISM_PLAIN);
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
     }
 
     Iterator<String> propertyNames = saslProperties.keySet().iterator();
@@ -3077,10 +3011,9 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_AUTHID_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
@@ -3094,19 +3027,18 @@
 
           if (iterator.hasNext())
           {
-            int    msgID   = MSGID_LDAPAUTH_AUTHZID_SINGLE_VALUED;
-            String message = getMessage(msgID);
+            Message message = ERR_LDAPAUTH_AUTHZID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                                      msgID, message);
+                                      message);
           }
         }
       }
       else
       {
-        int    msgID   = MSGID_LDAPAUTH_INVALID_SASL_PROPERTY;
-        String message = getMessage(msgID, name, SASL_MECHANISM_PLAIN);
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                  message);
+        Message message =
+            ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(name, SASL_MECHANISM_PLAIN);
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
       }
     }
 
@@ -3114,10 +3046,10 @@
     // Make sure that at least the authID was provided.
     if ((authID == null) || (authID.length() == 0))
     {
-      int    msgID   = MSGID_LDAPAUTH_SASL_AUTHID_REQUIRED;
-      String message = getMessage(msgID, SASL_MECHANISM_PLAIN);
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, msgID,
-                                message);
+      Message message =
+          ERR_LDAPAUTH_SASL_AUTHID_REQUIRED.get(SASL_MECHANISM_PLAIN);
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
     }
 
 
@@ -3125,7 +3057,7 @@
     // the user.
     if (bindPassword == null)
     {
-      System.out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, authID));
+      System.out.print(INFO_LDAPAUTH_PASSWORD_PROMPT.get(authID));
       char[] pwChars = PasswordReader.readPassword();
       if (pwChars == null)
       {
@@ -3165,19 +3097,17 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_PLAIN,
-                                  getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message 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)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND;
-      String message = getMessage(msgID, SASL_MECHANISM_PLAIN,
-                                  getExceptionMessage(e));
+      Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+          SASL_MECHANISM_PLAIN, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-                                msgID, message, e);
+                                message, e);
     }
 
 
@@ -3188,39 +3118,39 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        int    msgID   = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-        String message = getMessage(msgID);
+        Message message =
+            ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                  msgID, message);
+                                  message);
       }
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ioe));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(ae));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, ae);
+                                message, ae);
     }
     catch (LDAPException le)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(le));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, le);
+                                message, le);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(e));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
     }
 
 
@@ -3249,26 +3179,24 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-          String message = getMessage(msgID, extendedResponse.getResultCode(),
-                                      extendedResponse.getErrorMessage());
-          throw new LDAPException(extendedResponse.getResultCode(), msgID,
-                                  message);
+          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+              get(extendedResponse.getResultCode(),
+                  extendedResponse.getErrorMessage());
+          throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE;
-          String message = getMessage(msgID, String.valueOf(extendedResponse));
+          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+              String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                    msgID, message);
+                                    message);
         }
 
       default:
-        int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-        String message =
-             getMessage(msgID, String.valueOf(responseMessage.getProtocolOp()));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message);
+        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+            String.valueOf(responseMessage.getProtocolOp()));
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
 
@@ -3284,10 +3212,9 @@
 
     // FIXME -- Add support for referrals.
 
-    int    msgID   = MSGID_LDAPAUTH_SASL_BIND_FAILED;
-    String message = getMessage(msgID, SASL_MECHANISM_PLAIN);
+    Message message = ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_PLAIN);
     throw new LDAPException(resultCode, bindResponse.getErrorMessage(),
-                            msgID, message, bindResponse.getMatchedDN(), null);
+                            message, bindResponse.getMatchedDN(), null);
   }
 
 
@@ -3301,15 +3228,15 @@
    *          SASL PLAIN bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,String> getSASLPlainProperties()
+  public static LinkedHashMap<String,Message> getSASLPlainProperties()
   {
-    LinkedHashMap<String,String> properties =
-         new LinkedHashMap<String,String>(2);
+    LinkedHashMap<String,Message> properties =
+         new LinkedHashMap<String,Message>(2);
 
     properties.put(SASL_PROPERTY_AUTHID,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID.get());
     properties.put(SASL_PROPERTY_AUTHZID,
-                   getMessage(MSGID_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHZID));
+                   INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHZID.get());
 
     return properties;
   }
@@ -3334,10 +3261,9 @@
   {
     if (saslMechanism == null)
     {
-      int    msgID   = MSGID_LDAPAUTH_NONSASL_RUN_INVOCATION;
-      String message = getMessage(msgID, getBacktrace());
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message);
+      Message message = ERR_LDAPAUTH_NONSASL_RUN_INVOCATION.get(getBacktrace());
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
     else if (saslMechanism.equals(SASL_MECHANISM_GSSAPI))
     {
@@ -3359,10 +3285,10 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDAPAUTH_GSSAPI_CANNOT_CREATE_SASL_CLIENT;
-        String message = getMessage(msgID, getExceptionMessage(e));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message, e);
+        Message message = ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_SASL_CLIENT.get(
+            getExceptionMessage(e));
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
       }
 
 
@@ -3377,10 +3303,11 @@
         }
         catch (Exception e)
         {
-          int msgID = MSGID_LDAPAUTH_GSSAPI_CANNOT_CREATE_INITIAL_CHALLENGE;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                    msgID, message, e);
+          Message message = ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_INITIAL_CHALLENGE.
+              get(getExceptionMessage(e));
+          throw new ClientException(
+                  LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
+                                    message, e);
         }
       }
       else
@@ -3402,19 +3329,17 @@
       }
       catch (IOException ioe)
       {
-        int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND;
-        String message = getMessage(msgID, SASL_MECHANISM_GSSAPI,
-                                    getExceptionMessage(ioe));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                  message, ioe);
+        Message 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)
       {
-        int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND;
-        String message = getMessage(msgID, SASL_MECHANISM_GSSAPI,
-                                    getExceptionMessage(e));
+        Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+            SASL_MECHANISM_GSSAPI, getExceptionMessage(e));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-                                  msgID, message, e);
+                                  message, e);
       }
 
 
@@ -3425,39 +3350,39 @@
         responseMessage = reader.readMessage();
         if (responseMessage == null)
         {
-          int msgID = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-          String message = getMessage(msgID);
+          Message message =
+              ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                    msgID, message);
+                                    message);
         }
       }
       catch (IOException ioe)
       {
-        int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-        String message = getMessage(msgID, getExceptionMessage(ioe));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                  message, ioe);
+        Message message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
+            getExceptionMessage(ioe));
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
       }
       catch (ASN1Exception ae)
       {
-        int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-        String message = getMessage(msgID, getExceptionMessage(ae));
+        Message message =
+            ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ae));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                  msgID, message, ae);
+                                  message, ae);
       }
       catch (LDAPException le)
       {
-        int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-        String message = getMessage(msgID, getExceptionMessage(le));
+        Message message =
+            ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(le));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                  msgID, message, le);
+                                  message, le);
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-        String message = getMessage(msgID, getExceptionMessage(e));
-        throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                  message, e);
+        Message message =
+            ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(e));
+        throw new ClientException(
+                LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
       }
 
 
@@ -3480,28 +3405,24 @@
           if ((responseOID != null) &&
               responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
           {
-            int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-            String message = getMessage(msgID, extendedResponse.getResultCode(),
-                                        extendedResponse.getErrorMessage());
-            throw new LDAPException(extendedResponse.getResultCode(), msgID,
-                                    message);
+            Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+                get(extendedResponse.getResultCode(),
+                    extendedResponse.getErrorMessage());
+            throw new LDAPException(extendedResponse.getResultCode(), message);
           }
           else
           {
-            int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE;
-            String message = getMessage(msgID,
-                                        String.valueOf(extendedResponse));
+            Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+                String.valueOf(extendedResponse));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                      msgID, message);
+                                      message);
           }
 
         default:
-          int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-          String message =
-               getMessage(msgID,
-                          String.valueOf(responseMessage.getProtocolOp()));
+          Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+              String.valueOf(responseMessage.getProtocolOp()));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                    msgID, message);
+                                    message);
       }
 
 
@@ -3524,10 +3445,11 @@
             }
             catch (Exception e)
             {
-              int msgID = MSGID_LDAPAUTH_GSSAPI_CANNOT_VALIDATE_SERVER_CREDS;
-              String message = getMessage(msgID, getExceptionMessage(e));
+              Message message =
+                  ERR_LDAPAUTH_GSSAPI_CANNOT_VALIDATE_SERVER_CREDS.
+                    get(getExceptionMessage(e));
               throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                        msgID, message, e);
+                                        message, e);
             }
           }
 
@@ -3535,10 +3457,10 @@
           // Just to be sure, check that the login really is complete.
           if (! saslClient.isComplete())
           {
-            int    msgID   = MSGID_LDAPAUTH_GSSAPI_UNEXPECTED_SUCCESS_RESPONSE;
-            String message = getMessage(msgID);
+            Message message =
+                ERR_LDAPAUTH_GSSAPI_UNEXPECTED_SUCCESS_RESPONSE.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                      msgID, message);
+                                      message);
           }
 
           break;
@@ -3563,10 +3485,10 @@
           }
           catch (Exception e)
           {
-            int msgID = MSGID_LDAPAUTH_GSSAPI_CANNOT_VALIDATE_SERVER_CREDS;
-            String message = getMessage(msgID, getExceptionMessage(e));
+            Message message = ERR_LDAPAUTH_GSSAPI_CANNOT_VALIDATE_SERVER_CREDS.
+                get(getExceptionMessage(e));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                      msgID, message, e);
+                                      message, e);
           }
 
 
@@ -3585,19 +3507,17 @@
           }
           catch (IOException ioe)
           {
-            int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND;
-            String message = getMessage(msgID, SASL_MECHANISM_GSSAPI,
-                                        getExceptionMessage(ioe));
+            Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+                SASL_MECHANISM_GSSAPI, getExceptionMessage(ioe));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                      msgID, message, ioe);
+                                      message, ioe);
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_SASL_BIND;
-            String message = getMessage(msgID, SASL_MECHANISM_GSSAPI,
-                                        getExceptionMessage(e));
+            Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+                SASL_MECHANISM_GSSAPI, getExceptionMessage(e));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-                                      msgID, message, e);
+                                      message, e);
           }
 
 
@@ -3607,40 +3527,39 @@
             responseMessage = reader.readMessage();
             if (responseMessage == null)
             {
-              int msgID =
-                   MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-              String message = getMessage(msgID);
+              Message message =
+                  ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
               throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                        msgID, message);
+                                        message);
             }
           }
           catch (IOException ioe)
           {
-            int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-            String message = getMessage(msgID, getExceptionMessage(ioe));
+            Message message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
+                getExceptionMessage(ioe));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                      msgID, message, ioe);
+                                      message, ioe);
           }
           catch (ASN1Exception ae)
           {
-            int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-            String message = getMessage(msgID, getExceptionMessage(ae));
+            Message message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
+                getExceptionMessage(ae));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                      msgID, message, ae);
+                                      message, ae);
           }
           catch (LDAPException le)
           {
-            int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-            String message = getMessage(msgID, getExceptionMessage(le));
+            Message message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
+                getExceptionMessage(le));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                      msgID, message, le);
+                                      message, le);
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_BIND_RESPONSE;
-            String message = getMessage(msgID, getExceptionMessage(e));
+            Message message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
+                getExceptionMessage(e));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                      msgID, message, e);
+                                      message, e);
           }
 
 
@@ -3664,49 +3583,43 @@
               if ((responseOID != null) &&
                   responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
               {
-                int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-                String message = getMessage(msgID,
-                                            extendedResponse.getResultCode(),
-                                            extendedResponse.getErrorMessage());
-                throw new LDAPException(extendedResponse.getResultCode(), msgID,
-                                        message);
+                Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+                    get(extendedResponse.getResultCode(),
+                        extendedResponse.getErrorMessage());
+                throw new LDAPException(extendedResponse.getResultCode(),
+                        message);
               }
               else
               {
-                int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE;
-                String message = getMessage(msgID,
-                                            String.valueOf(extendedResponse));
+                Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+                    String.valueOf(extendedResponse));
                 throw new ClientException(
-                               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                               message);
+                               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
               }
 
             default:
-              int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-              String message =
-                   getMessage(msgID,
-                              String.valueOf(responseMessage.getProtocolOp()));
+              Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+                  String.valueOf(responseMessage.getProtocolOp()));
               throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                                        msgID, message);
+                                        message);
           }
         }
         else
         {
           // This is an error.
-          int    msgID   = MSGID_LDAPAUTH_GSSAPI_BIND_FAILED;
-          String message = getMessage(msgID);
+          Message message = ERR_LDAPAUTH_GSSAPI_BIND_FAILED.get();
           throw new LDAPException(resultCode, bindResponse.getErrorMessage(),
-                                  msgID, message, bindResponse.getMatchedDN(),
+                                  message, bindResponse.getMatchedDN(),
                                   null);
         }
       }
     }
     else
     {
-      int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_RUN_INVOCATION;
-      String message = getMessage(msgID, saslMechanism, getBacktrace());
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message);
+      Message message = ERR_LDAPAUTH_UNEXPECTED_RUN_INVOCATION.get(
+          saslMechanism, getBacktrace());
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
 
@@ -3732,9 +3645,9 @@
   {
     if (saslMechanism ==  null)
     {
-      int    msgID   = MSGID_LDAPAUTH_NONSASL_CALLBACK_INVOCATION;
-      String message = getMessage(msgID, getBacktrace());
-      throw new UnsupportedCallbackException(callbacks[0], message);
+      Message message =
+          ERR_LDAPAUTH_NONSASL_CALLBACK_INVOCATION.get(getBacktrace());
+      throw new UnsupportedCallbackException(callbacks[0], message.toString());
     }
     else if (saslMechanism.equals(SASL_MECHANISM_GSSAPI))
     {
@@ -3748,8 +3661,7 @@
         {
           if (gssapiAuthPW == null)
           {
-            System.out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT,
-                                        gssapiAuthID));
+            System.out.print(INFO_LDAPAUTH_PASSWORD_PROMPT.get(gssapiAuthID));
             gssapiAuthPW = PasswordReader.readPassword();
           }
 
@@ -3757,17 +3669,17 @@
         }
         else
         {
-          int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_GSSAPI_CALLBACK;
-          String message = getMessage(msgID, String.valueOf(cb));
-          throw new UnsupportedCallbackException(cb, message);
+          Message message =
+              ERR_LDAPAUTH_UNEXPECTED_GSSAPI_CALLBACK.get(String.valueOf(cb));
+          throw new UnsupportedCallbackException(cb, message.toString());
         }
       }
     }
     else
     {
-      int    msgID   = MSGID_LDAPAUTH_UNEXPECTED_CALLBACK_INVOCATION;
-      String message = getMessage(msgID, saslMechanism, getBacktrace());
-      throw new UnsupportedCallbackException(callbacks[0], message);
+      Message message = ERR_LDAPAUTH_UNEXPECTED_CALLBACK_INVOCATION.get(
+          saslMechanism, getBacktrace());
+      throw new UnsupportedCallbackException(callbacks[0], message.toString());
     }
   }
 
@@ -3802,17 +3714,17 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_WHOAMI_REQUEST;
-      String message = getMessage(msgID, getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_SEND_WHOAMI_REQUEST.get(getExceptionMessage(ioe));
+      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
+              message, ioe);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_SEND_WHOAMI_REQUEST;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_SEND_WHOAMI_REQUEST.get(getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-                                msgID, message, e);
+                                message, e);
     }
 
 
@@ -3823,50 +3735,49 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        int    msgID   = MSGID_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE;
-        String message = getMessage(msgID);
+        Message message =
+            ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                                  msgID, message);
+                                  message);
       }
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(ioe));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-                                message, ioe);
+      Message message = ERR_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE.get(
+          getExceptionMessage(ioe));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(ae));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE.get(getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, ae);
+                                message, ae);
     }
     catch (LDAPException le)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(le));
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE.get(getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-                                msgID, message, le);
+                                message, le);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message, e);
+      Message message =
+          ERR_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE.get(getExceptionMessage(e));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
     }
 
 
     // If the protocol op isn't an extended response, then that's a problem.
     if (responseMessage.getProtocolOpType() != OP_TYPE_EXTENDED_RESPONSE)
     {
-      int msgID = MSGID_LDAPAUTH_UNEXPECTED_RESPONSE;
-      String message =
-           getMessage(msgID, String.valueOf(responseMessage.getProtocolOp()));
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, msgID,
-                                message);
+      Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+          String.valueOf(responseMessage.getProtocolOp()));
+      throw new ClientException(
+              LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
 
 
@@ -3878,10 +3789,9 @@
     if ((responseOID != null) &&
         responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
     {
-      int    msgID   = MSGID_LDAPAUTH_SERVER_DISCONNECT;
-      String message = getMessage(msgID, extendedResponse.getResultCode(),
-                                  extendedResponse.getErrorMessage());
-      throw new LDAPException(extendedResponse.getResultCode(), msgID, message);
+      Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.get(
+          extendedResponse.getResultCode(), extendedResponse.getErrorMessage());
+      throw new LDAPException(extendedResponse.getResultCode(), message);
     }
 
 
@@ -3891,10 +3801,9 @@
     int resultCode = extendedResponse.getResultCode();
     if (resultCode != LDAPResultCode.SUCCESS)
     {
-      int msgID = MSGID_LDAPAUTH_WHOAMI_FAILED;
-      String message = getMessage(msgID);
+      Message message = ERR_LDAPAUTH_WHOAMI_FAILED.get();
       throw new LDAPException(resultCode, extendedResponse.getErrorMessage(),
-                              msgID, message, extendedResponse.getMatchedDN(),
+                              message, extendedResponse.getMatchedDN(),
                               null);
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPCompare.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPCompare.java
index 9e3ccf6..bdd2438 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPCompare.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPCompare.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import java.io.BufferedReader;
 import java.io.FileReader;
@@ -61,8 +62,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -198,8 +198,10 @@
     ProtocolOp protocolOp = new CompareRequestProtocolOp(dnOctetStr,
                                      attributeType, attrValOctetStr);
 
-    int msgID = MSGID_PROCESSING_COMPARE_OPERATION;
-    out.println(getMessage(msgID, attributeType, attrValOctetStr, dnOctetStr));
+
+    out.println(INFO_PROCESSING_COMPARE_OPERATION.get(
+            attributeType, String.valueOf(attrValOctetStr),
+            String.valueOf(dnOctetStr)));
 
     if(!compareOptions.showOperations())
     {
@@ -222,8 +224,8 @@
         }
         else
         {
-          msgID = MSGID_OPERATION_FAILED;
-          String msg = getMessage(msgID, "COMPARE");
+
+          Message msg = INFO_OPERATION_FAILED.get("COMPARE");
           err.println(wrapText(msg, MAX_LINE_WIDTH));
           err.println(wrapText(ae.getMessage(), MAX_LINE_WIDTH));
           return;
@@ -233,29 +235,28 @@
       CompareResponseProtocolOp op =
         responseMessage.getCompareResponseProtocolOp();
       int resultCode = op.getResultCode();
-      String errorMessage = op.getErrorMessage();
+      Message errorMessage = op.getErrorMessage();
 
       if(resultCode != COMPARE_TRUE && resultCode != COMPARE_FALSE
          && !compareOptions.continueOnError())
       {
-        msgID = MSGID_OPERATION_FAILED;
-        String msg = getMessage(msgID, "COMPARE");
-        throw new LDAPException(resultCode, errorMessage, msgID, msg,
+        Message msg = INFO_OPERATION_FAILED.get("COMPARE");
+        throw new LDAPException(resultCode, errorMessage, msg,
                                 op.getMatchedDN(), null);
       } else
       {
         if(resultCode == COMPARE_FALSE)
         {
-          msgID = MSGID_COMPARE_OPERATION_RESULT_FALSE;
-          out.println(getMessage(msgID, line));
+
+          out.println(INFO_COMPARE_OPERATION_RESULT_FALSE.get(line));
         } else if(resultCode == COMPARE_TRUE)
         {
-          msgID = MSGID_COMPARE_OPERATION_RESULT_TRUE;
-          out.println(getMessage(msgID, line));
+
+          out.println(INFO_COMPARE_OPERATION_RESULT_TRUE.get(line));
         } else
         {
-          msgID = MSGID_OPERATION_FAILED;
-          String msg = getMessage(msgID, "COMPARE");
+
+          Message msg = INFO_OPERATION_FAILED.get("COMPARE");
           LDAPToolUtils.printErrorMessage(err, msg, resultCode, errorMessage,
                                           op.getMatchedDN());
         }
@@ -371,7 +372,7 @@
     Reader rdr = null;
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_LDAPCOMPARE_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LDAPCOMPARE_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                         false, true, 1, 0,
                                         " \'attribute:value\' \"DN\" ...");
@@ -381,29 +382,29 @@
       hostName = new StringArgument("host", OPTION_SHORT_HOST,
                                     OPTION_LONG_HOST, false, false, true,
                                     OPTION_VALUE_HOST, "localhost", null,
-                                    MSGID_DESCRIPTION_HOST);
+                                    INFO_DESCRIPTION_HOST.get());
       argParser.addArgument(hostName);
 
       port = new IntegerArgument("port", OPTION_SHORT_PORT,
                                  OPTION_LONG_PORT, false, false, true,
                                  OPTION_VALUE_PORT, 389, null,
-                                 MSGID_DESCRIPTION_PORT);
+                                 INFO_DESCRIPTION_PORT.get());
       argParser.addArgument(port);
 
       useSSL = new BooleanArgument("useSSL", OPTION_SHORT_USE_SSL,
                                    OPTION_LONG_USE_SSL,
-                                   MSGID_DESCRIPTION_USE_SSL);
+                                   INFO_DESCRIPTION_USE_SSL.get());
       argParser.addArgument(useSSL);
 
       startTLS = new BooleanArgument("startTLS", OPTION_SHORT_START_TLS,
                                      OPTION_LONG_START_TLS,
-                                     MSGID_DESCRIPTION_START_TLS);
+                                     INFO_DESCRIPTION_START_TLS.get());
       argParser.addArgument(startTLS);
 
       bindDN = new StringArgument("bindDN", OPTION_SHORT_BINDDN,
                                   OPTION_LONG_BINDDN, false, false, true,
                                   OPTION_VALUE_BINDDN, null, null,
-                                  MSGID_DESCRIPTION_BINDDN);
+                                  INFO_DESCRIPTION_BINDDN.get());
       argParser.addArgument(bindDN);
 
       bindPassword = new StringArgument("bindPassword", OPTION_SHORT_BINDPWD,
@@ -411,7 +412,7 @@
                                         false, false, true,
                                         OPTION_VALUE_BINDPWD,
                                         null, null,
-                                        MSGID_DESCRIPTION_BINDPASSWORD);
+                                        INFO_DESCRIPTION_BINDPASSWORD.get());
       argParser.addArgument(bindPassword);
 
       bindPasswordFile =
@@ -420,29 +421,30 @@
                                  OPTION_LONG_BINDPWD_FILE,
                                  false, false,
                                  OPTION_VALUE_BINDPWD_FILE, null,
-                                 null, MSGID_DESCRIPTION_BINDPASSWORDFILE);
+                                 null, INFO_DESCRIPTION_BINDPASSWORDFILE.get());
       argParser.addArgument(bindPasswordFile);
 
       filename = new StringArgument("filename", OPTION_SHORT_FILENAME,
                                     OPTION_LONG_FILENAME, false, false,
                                     true, OPTION_VALUE_FILENAME, null, null,
-                                    MSGID_COMPARE_DESCRIPTION_FILENAME);
+                                    INFO_COMPARE_DESCRIPTION_FILENAME.get());
       argParser.addArgument(filename);
 
-      saslExternal = new BooleanArgument("useSASLExternal", 'r',
-                                         "useSASLExternal",
-                                         MSGID_DESCRIPTION_USE_SASL_EXTERNAL);
+      saslExternal =
+              new BooleanArgument("useSASLExternal", 'r',
+                                  "useSASLExternal",
+                                  INFO_DESCRIPTION_USE_SASL_EXTERNAL.get());
       argParser.addArgument(saslExternal);
 
       saslOptions = new StringArgument("saslOption", OPTION_SHORT_SASLOPTION,
                                        OPTION_LONG_SASLOPTION, false,
                                        true, true,
                                        OPTION_VALUE_SASLOPTION, null, null,
-                                       MSGID_DESCRIPTION_SASL_PROPERTIES);
+                                       INFO_DESCRIPTION_SASL_PROPERTIES.get());
       argParser.addArgument(saslOptions);
 
       trustAll = new BooleanArgument("trustAll", 'X', "trustAll",
-                                     MSGID_DESCRIPTION_TRUSTALL);
+                                     INFO_DESCRIPTION_TRUSTALL.get());
       argParser.addArgument(trustAll);
 
       keyStorePath = new StringArgument("keyStorePath",
@@ -451,14 +453,14 @@
                                         false, false, true,
                                         OPTION_VALUE_KEYSTOREPATH,
                                         null, null,
-                                        MSGID_DESCRIPTION_KEYSTOREPATH);
+                                        INFO_DESCRIPTION_KEYSTOREPATH.get());
       argParser.addArgument(keyStorePath);
 
       keyStorePassword = new StringArgument("keyStorePassword",
                                   OPTION_SHORT_KEYSTORE_PWD,
                                   OPTION_LONG_KEYSTORE_PWD, false, false,
                                   true, "{keyStorePassword}", null, null,
-                                  MSGID_DESCRIPTION_KEYSTOREPASSWORD);
+                                  INFO_DESCRIPTION_KEYSTOREPASSWORD.get());
       argParser.addArgument(keyStorePassword);
 
       keyStorePasswordFile =
@@ -468,21 +470,23 @@
                                  false, false,
                                  OPTION_VALUE_KEYSTORE_PWD_FILE,
                                  null, null,
-                                 MSGID_DESCRIPTION_KEYSTOREPASSWORD_FILE);
+                                 INFO_DESCRIPTION_KEYSTOREPASSWORD_FILE.get());
       argParser.addArgument(keyStorePasswordFile);
 
-      certNickname = new StringArgument("certnickname", 'N', "certNickname",
-                                        false, false, true, "{nickname}", null,
-                                        null, MSGID_DESCRIPTION_CERT_NICKNAME);
+      certNickname =
+              new StringArgument("certnickname", 'N', "certNickname",
+                                 false, false, true, "{nickname}", null,
+                                 null, INFO_DESCRIPTION_CERT_NICKNAME.get());
       argParser.addArgument(certNickname);
 
-      trustStorePath = new StringArgument("trustStorePath",
-                                          OPTION_SHORT_TRUSTSTOREPATH,
-                                          OPTION_LONG_TRUSTSTOREPATH,
-                                          false, false, true,
-                                          OPTION_VALUE_TRUSTSTOREPATH,
-                                          null, null,
-                                          MSGID_DESCRIPTION_TRUSTSTOREPATH);
+      trustStorePath =
+              new StringArgument("trustStorePath",
+                                OPTION_SHORT_TRUSTSTOREPATH,
+                                OPTION_LONG_TRUSTSTOREPATH,
+                                false, false, true,
+                                OPTION_VALUE_TRUSTSTOREPATH,
+                                null, null,
+                                INFO_DESCRIPTION_TRUSTSTOREPATH.get());
       argParser.addArgument(trustStorePath);
 
       trustStorePassword =
@@ -490,65 +494,65 @@
                               OPTION_LONG_TRUSTSTORE_PWD,
                               false, false, true,
                               OPTION_VALUE_TRUSTSTORE_PWD, null,
-                              null, MSGID_DESCRIPTION_TRUSTSTOREPASSWORD);
+                              null, INFO_DESCRIPTION_TRUSTSTOREPASSWORD.get());
       argParser.addArgument(trustStorePassword);
 
       trustStorePasswordFile =
-           new FileBasedArgument("trustStorePasswordFile",
-                                 OPTION_SHORT_TRUSTSTORE_PWD_FILE,
-                                 OPTION_LONG_TRUSTSTORE_PWD_FILE, false, false,
-                                 OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
-                                 MSGID_DESCRIPTION_TRUSTSTOREPASSWORD_FILE);
+           new FileBasedArgument(
+                               "trustStorePasswordFile",
+                               OPTION_SHORT_TRUSTSTORE_PWD_FILE,
+                               OPTION_LONG_TRUSTSTORE_PWD_FILE, false, false,
+                               OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
+                               INFO_DESCRIPTION_TRUSTSTOREPASSWORD_FILE.get());
       argParser.addArgument(trustStorePasswordFile);
 
       assertionFilter = new StringArgument("assertionfilter", null,
                                  OPTION_LONG_ASSERTION_FILE, false, false, true,
                                  OPTION_VALUE_ASSERTION_FILE, null, null,
-                                 MSGID_DESCRIPTION_ASSERTION_FILTER);
+                                 INFO_DESCRIPTION_ASSERTION_FILTER.get());
       argParser.addArgument(assertionFilter);
 
       controlStr =
            new StringArgument("control", 'J', "control", false, true, true,
                     "{controloid[:criticality[:value|::b64value|:<filePath]]}",
-                    null, null, MSGID_DESCRIPTION_CONTROLS);
+                    null, null, INFO_DESCRIPTION_CONTROLS.get());
       argParser.addArgument(controlStr);
 
       version = new IntegerArgument("version", OPTION_SHORT_PROTOCOL_VERSION,
                                     OPTION_LONG_PROTOCOL_VERSION,
                                     false, false, true,
                                     OPTION_VALUE_PROTOCOL_VERSION,
-                                    3, null, MSGID_DESCRIPTION_VERSION);
+                                    3, null, INFO_DESCRIPTION_VERSION.get());
       argParser.addArgument(version);
 
       encodingStr = new StringArgument("encoding", 'i', "encoding",
                                       false, false,
                                       true, "{encoding}", null, null,
-                                      MSGID_DESCRIPTION_ENCODING);
+                                      INFO_DESCRIPTION_ENCODING.get());
       argParser.addArgument(encodingStr);
 
       continueOnError = new BooleanArgument("continueOnError", 'c',
                                     "continueOnError",
-                                    MSGID_DESCRIPTION_CONTINUE_ON_ERROR);
+                                    INFO_DESCRIPTION_CONTINUE_ON_ERROR.get());
       argParser.addArgument(continueOnError);
 
       noop = new BooleanArgument("no-op", OPTION_SHORT_DRYRUN,
                                     OPTION_LONG_DRYRUN,
-                                    MSGID_DESCRIPTION_NOOP);
+                                    INFO_DESCRIPTION_NOOP.get());
       argParser.addArgument(noop);
 
       verbose = new BooleanArgument("verbose", 'v', "verbose",
-                                    MSGID_DESCRIPTION_VERBOSE);
+                                    INFO_DESCRIPTION_VERBOSE.get());
       argParser.addArgument(verbose);
 
       showUsage = new BooleanArgument("showUsage", OPTION_SHORT_HELP,
                                     OPTION_LONG_HELP,
-                                    MSGID_DESCRIPTION_SHOWUSAGE);
+                                    INFO_DESCRIPTION_SHOWUSAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage, out);
     } catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -561,8 +565,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -578,9 +581,9 @@
 
     if(bindPassword.isPresent() && bindPasswordFile.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, bindPassword.getLongIdentifier(),
-                                  bindPasswordFile.getLongIdentifier());
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              bindPassword.getLongIdentifier(),
+              bindPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -589,8 +592,7 @@
 
     if(attrAndDNStrings.isEmpty())
     {
-      int    msgID   = MSGID_LDAPCOMPARE_NO_ATTR;
-      String message = getMessage(msgID);
+      Message message = ERR_LDAPCOMPARE_NO_ATTR.get();
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -607,8 +609,8 @@
     // If no DNs were provided, then exit with an error.
     if (dnStrings.isEmpty())
     {
-      int msgID = MSGID_LDAPCOMPARE_NO_DNS;
-      err.println(wrapText(getMessage(msgID), MAX_LINE_WIDTH));
+
+      err.println(wrapText(ERR_LDAPCOMPARE_NO_DNS.get(), MAX_LINE_WIDTH));
       return 1;
     }
 
@@ -616,8 +618,8 @@
     int idx = attributeString.indexOf(":");
     if(idx == -1)
     {
-      int    msgID   = MSGID_LDAPCOMPARE_INVALID_ATTR_STRING;
-      String message = getMessage(msgID, attributeString);
+      Message message =
+              ERR_LDAPCOMPARE_INVALID_ATTR_STRING.get(attributeString);
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -641,8 +643,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_COMPARE_CANNOT_BASE64_DECODE_ASSERTION_VALUE;
-          err.println(wrapText(getMessage(msgID), MAX_LINE_WIDTH));
+          err.println(wrapText(
+                  INFO_COMPARE_CANNOT_BASE64_DECODE_ASSERTION_VALUE.get(),
+                  MAX_LINE_WIDTH));
           return 1;
         }
       } else if(nextChar == '<')
@@ -654,9 +657,10 @@
         }
         catch (Exception e)
         {
-          int msgID = MSGID_COMPARE_CANNOT_READ_ASSERTION_VALUE_FROM_FILE;
-          err.println(wrapText(getMessage(msgID, String.valueOf(e)),
-                               MAX_LINE_WIDTH));
+          err.println(wrapText(
+                  INFO_COMPARE_CANNOT_READ_ASSERTION_VALUE_FROM_FILE.get(
+                          String.valueOf(e)),
+                          MAX_LINE_WIDTH));
           return 1;
         }
       } else
@@ -689,8 +693,9 @@
       int versionNumber = version.getIntValue();
       if(versionNumber != 2 && versionNumber != 3)
       {
-        int msgID = MSGID_DESCRIPTION_INVALID_VERSION;
-        err.println(wrapText(getMessage(msgID, versionNumber), MAX_LINE_WIDTH));
+
+        err.println(wrapText(ERR_DESCRIPTION_INVALID_VERSION.get(
+                String.valueOf(versionNumber)), MAX_LINE_WIDTH));
         return 1;
       }
       connectionOptions.setVersionNumber(versionNumber);
@@ -713,7 +718,7 @@
       // read the password from the stdin.
       try
       {
-        out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, bindDNValue));
+        out.print(INFO_LDAPAUTH_PASSWORD_PROMPT.get(bindDNValue));
         char[] pwChars = PasswordReader.readPassword();
         bindPasswordValue = new String(pwChars);
       } catch(Exception ex)
@@ -766,8 +771,7 @@
         LDAPControl ctrl = LDAPToolUtils.getControl(ctrlString, err);
         if(ctrl == null)
         {
-          int    msgID   = MSGID_TOOL_INVALID_CONTROL_STRING;
-          String message = getMessage(msgID, ctrlString);
+          Message message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
           return 1;
@@ -791,8 +795,8 @@
       }
       catch (LDAPException le)
       {
-        int    msgID   = MSGID_LDAP_ASSERTION_INVALID_FILTER;
-        String message = getMessage(msgID, le.getMessage());
+        Message message = ERR_LDAP_ASSERTION_INVALID_FILTER.get(
+                le.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -830,15 +834,13 @@
     {
       if(!connectionOptions.useSSL() && !connectionOptions.useStartTLS())
       {
-        int    msgID   = MSGID_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS;
-        String message = getMessage(msgID);
+        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       if(keyStorePathValue == null)
       {
-        int    msgID   = MSGID_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE;
-        String message = getMessage(msgID);
+        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -904,8 +906,11 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, le);
       }
-      LDAPToolUtils.printErrorMessage(err, le.getMessage(), le.getResultCode(),
-                                      le.getErrorMessage(), le.getMatchedDN());
+      LDAPToolUtils.printErrorMessage(
+              err, le.getMessageObject(),
+              le.getResultCode(),
+              le.getMessageObject(),
+              le.getMatchedDN());
       int code = le.getResultCode();
       return code;
     } catch(LDAPConnectionException lce)
@@ -914,9 +919,10 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, lce);
       }
-      LDAPToolUtils.printErrorMessage(err, lce.getMessage(),
+      LDAPToolUtils.printErrorMessage(err,
+                                      lce.getMessageObject(),
                                       lce.getResultCode(),
-                                      lce.getErrorMessage(),
+                                      lce.getMessageObject(),
                                       lce.getMatchedDN());
       int code = lce.getResultCode();
       return code;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPConnection.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPConnection.java
index af2ba8a..64cf386 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPConnection.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPConnection.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import java.io.PrintStream;
 import java.io.IOException;
@@ -50,10 +51,9 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.CoreMessages.
-                   MSGID_RESULT_CLIENT_SIDE_CONNECT_ERROR;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.CoreMessages.
+                   INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
@@ -169,14 +169,12 @@
         ldapReader = new LDAPReader(startTLSSocket, tracer);
       } catch(UnknownHostException uhe)
       {
-        int msgID = MSGID_RESULT_CLIENT_SIDE_CONNECT_ERROR;
-        String msg = getMessage(msgID);
+        Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
         throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
                                           uhe);
       } catch(ConnectException ce)
       {
-        int msgID = MSGID_RESULT_CLIENT_SIDE_CONNECT_ERROR;
-        String msg = getMessage(msgID);
+        Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
         throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
                                           ce);
       } catch(Exception ex)
@@ -185,7 +183,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, ex);
         }
-        throw new LDAPConnectionException(ex.getMessage(), ex);
+        throw new LDAPConnectionException(Message.raw(ex.getMessage()), ex);
       }
 
       // Send the StartTLS extended request.
@@ -206,13 +204,14 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, ex1);
         }
-        throw new LDAPConnectionException(ex1.getMessage(), ex1);
+        throw new LDAPConnectionException(Message.raw(ex1.getMessage()), ex1);
       }
       ExtendedResponseProtocolOp res = msg.getExtendedResponseProtocolOp();
       resultCode = res.getResultCode();
       if(resultCode != SUCCESS)
       {
-        throw new LDAPConnectionException(res.getErrorMessage(), resultCode,
+        throw new LDAPConnectionException(res.getErrorMessage(),
+                                          resultCode,
                                           res.getErrorMessage(),
                                           res.getMatchedDN(), null);
       }
@@ -240,14 +239,12 @@
       ldapReader = new LDAPReader(socket, tracer);
     } catch(UnknownHostException uhe)
     {
-      int msgID = MSGID_RESULT_CLIENT_SIDE_CONNECT_ERROR;
-      String msg = getMessage(msgID);
+      Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
       throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
                                         uhe);
     } catch(ConnectException ce)
     {
-      int msgID = MSGID_RESULT_CLIENT_SIDE_CONNECT_ERROR;
-      String msg = getMessage(msgID);
+      Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
       throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
                                         ce);
     } catch(Exception ex2)
@@ -256,7 +253,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ex2);
       }
-      throw new LDAPConnectionException(ex2.getMessage(), ex2);
+      throw new LDAPConnectionException(Message.raw(ex2.getMessage()), ex2);
     }
 
     // We need this so that we don't run out of addresses when the tool
@@ -330,15 +327,16 @@
           ASN1OctetString controlValue = c.getValue();
           if (controlValue != null)
           {
-            int    msgID   = MSGID_BIND_AUTHZID_RETURNED;
-            String message = getMessage(msgID, controlValue.stringValue());
+
+            Message message =
+                    INFO_BIND_AUTHZID_RETURNED.get(controlValue.stringValue());
             out.println(message);
           }
         }
         else if (c.getOID().equals(OID_NS_PASSWORD_EXPIRED))
         {
-          int    msgID   = MSGID_BIND_PASSWORD_EXPIRED;
-          String message = getMessage(msgID);
+
+          Message message = INFO_BIND_PASSWORD_EXPIRED.get();
           out.println(message);
         }
         else if (c.getOID().equals(OID_NS_PASSWORD_EXPIRING))
@@ -347,11 +345,11 @@
                PasswordExpiringControl.decodeControl(new Control(c.getOID(),
                                                                  c.isCritical(),
                                                                  c.getValue()));
-          String timeString =
+          Message timeString =
                secondsToTimeString(expiringControl.getSecondsUntilExpiration());
 
-          int    msgID   = MSGID_BIND_PASSWORD_EXPIRING;
-          String message = getMessage(msgID, timeString);
+
+          Message message = INFO_BIND_PASSWORD_EXPIRING.get(timeString);
           out.println(message);
         }
         else if (c.getOID().equals(OID_PASSWORD_POLICY_CONTROL))
@@ -366,18 +364,18 @@
             switch (errorType)
             {
               case PASSWORD_EXPIRED:
-                int    msgID   = MSGID_BIND_PASSWORD_EXPIRED;
-                String message = getMessage(msgID);
+
+                Message message = INFO_BIND_PASSWORD_EXPIRED.get();
                 out.println(message);
                 break;
               case ACCOUNT_LOCKED:
-                msgID   = MSGID_BIND_ACCOUNT_LOCKED;
-                message = getMessage(msgID);
+
+                message = INFO_BIND_ACCOUNT_LOCKED.get();
                 out.println(message);
                 break;
               case CHANGE_AFTER_RESET:
-                msgID   = MSGID_BIND_MUST_CHANGE_PASSWORD;
-                message = getMessage(msgID);
+
+                message = INFO_BIND_MUST_CHANGE_PASSWORD.get();
                 out.println(message);
                 break;
             }
@@ -390,16 +388,17 @@
             switch (warningType)
             {
               case TIME_BEFORE_EXPIRATION:
-                String timeString =
+                Message timeString =
                      secondsToTimeString(pwPolicyControl.getWarningValue());
 
-                int    msgID   = MSGID_BIND_PASSWORD_EXPIRING;
-                String message = getMessage(msgID, timeString);
+
+                Message message = INFO_BIND_PASSWORD_EXPIRING.get(timeString);
                 out.println(message);
                 break;
               case GRACE_LOGINS_REMAINING:
-                msgID   = MSGID_BIND_GRACE_LOGINS_REMAINING;
-                message = getMessage(msgID, pwPolicyControl.getWarningValue());
+
+                message = INFO_BIND_GRACE_LOGINS_REMAINING.get(
+                        pwPolicyControl.getWarningValue());
                 out.println(message);
                 break;
             }
@@ -412,12 +411,14 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
-      throw new LDAPConnectionException(ce.getMessage(), ce.getExitCode(),
+      throw new LDAPConnectionException(ce.getMessageObject(), ce.getExitCode(),
                                         null, ce);
     } catch (LDAPException le)
     {
-      throw new LDAPConnectionException(le.getMessage(), le.getResultCode(),
-                                        le.getErrorMessage(), le.getMatchedDN(),
+      throw new LDAPConnectionException(le.getMessageObject(),
+                                        le.getResultCode(),
+                                        le.getErrorMessage(),
+                                        le.getMatchedDN(),
                                         le.getCause());
     } catch(Exception ex)
     {
@@ -425,7 +426,8 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ex);
       }
-      throw new LDAPConnectionException(ex.getMessage(), ex);
+      throw new LDAPConnectionException(
+              Message.raw(ex.getLocalizedMessage()),ex);
     }
 
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPConnectionException.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPConnectionException.java
index 68f8de5..2d52de9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPConnectionException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPConnectionException.java
@@ -25,17 +25,20 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 import org.opends.server.types.DN;
+import org.opends.server.types.OpenDsException;
+
 
 
 /**
  * This class defines an exception that may be thrown during the course of
  * creating an LDAP connection to the server.
  */
-public class LDAPConnectionException extends Exception
-{
+public class LDAPConnectionException extends OpenDsException {
+
   /**
    * The serial version identifier required to satisfy the compiler because this
    * class extends <CODE>java.lang.Exception</CODE>, which implements the
@@ -61,7 +64,7 @@
   /**
    * The server-provided error message for this exception.
    */
-  private final String errorMessage;
+  private final Message errorMessage;
 
 
   /**
@@ -69,7 +72,7 @@
    *
    * @param  message    The message to use for this exception.
    */
-  public LDAPConnectionException(String message)
+  public LDAPConnectionException(Message message)
   {
     super(message);
 
@@ -86,8 +89,8 @@
    * @param  resultCode    The result code for this exception.
    * @param  errorMessage  The server-provided error message for this exception.
    */
-  public LDAPConnectionException(String message, int resultCode,
-                                 String errorMessage)
+  public LDAPConnectionException(Message message, int resultCode,
+                                 Message errorMessage)
   {
     super(message);
 
@@ -106,7 +109,7 @@
    * @param  cause      The underlying cause that triggered this
    *                    exception.
    */
-  public LDAPConnectionException(String message, Throwable cause)
+  public LDAPConnectionException(Message message, Throwable cause)
   {
     super(message, cause);
 
@@ -126,8 +129,8 @@
    * @param  cause         The underlying cause that triggered this
    *                       exception.
    */
-  public LDAPConnectionException(String message, int resultCode,
-                                 String errorMessage, Throwable cause)
+  public LDAPConnectionException(Message message, int resultCode,
+                                 Message errorMessage, Throwable cause)
   {
     super(message, cause);
 
@@ -150,8 +153,8 @@
    * @param  cause         The underlying cause that triggered this
    *                       exception.
    */
-  public LDAPConnectionException(String message, int resultCode,
-                                 String errorMessage, DN matchedDN,
+  public LDAPConnectionException(Message message, int resultCode,
+                                 Message errorMessage, DN matchedDN,
                                  Throwable cause)
   {
     super(message, cause);
@@ -179,7 +182,7 @@
    *
    * @return  The server-provided error message associated with this exception.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return this.errorMessage;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPDelete.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPDelete.java
index 860bac8..4f25869 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPDelete.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPDelete.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import java.io.BufferedReader;
 import java.io.FileReader;
@@ -58,8 +59,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -182,8 +182,9 @@
     ASN1OctetString asn1OctetStr = new ASN1OctetString(line);
 
     protocolOp = new DeleteRequestProtocolOp(asn1OctetStr);
-    int msgID = MSGID_PROCESSING_OPERATION;
-    out.println(getMessage(msgID, "DELETE", asn1OctetStr));
+
+    out.println(INFO_PROCESSING_OPERATION.get(
+            "DELETE", String.valueOf(asn1OctetStr)));
     if(!deleteOptions.showOperations())
     {
       LDAPMessage message = new LDAPMessage(nextMessageID.getAndIncrement(),
@@ -205,8 +206,8 @@
         }
         else
         {
-          msgID = MSGID_OPERATION_FAILED;
-          String msg = getMessage(msgID, "DELETE");
+
+          Message msg = INFO_OPERATION_FAILED.get("DELETE");
           err.println(wrapText(msg, MAX_LINE_WIDTH));
           err.println(wrapText(ae.getMessage(), MAX_LINE_WIDTH));
           return;
@@ -216,26 +217,25 @@
       DeleteResponseProtocolOp op =
            responseMessage.getDeleteResponseProtocolOp();
       int resultCode = op.getResultCode();
-      String errorMessage = op.getErrorMessage();
+      Message errorMessage = op.getErrorMessage();
       if(resultCode != SUCCESS && resultCode != REFERRAL &&
          !deleteOptions.continueOnError())
       {
-        msgID = MSGID_OPERATION_FAILED;
-        String msg = getMessage(msgID, "DELETE");
-        throw new LDAPException(resultCode, errorMessage, msgID, msg,
+        Message msg = INFO_OPERATION_FAILED.get("DELETE");
+        throw new LDAPException(resultCode, errorMessage, msg,
                                 op.getMatchedDN(), null);
       } else
       {
         if(resultCode != SUCCESS && resultCode != REFERRAL)
         {
-          msgID = MSGID_OPERATION_FAILED;
-          String msg = getMessage(msgID, "DELETE");
+
+          Message msg = INFO_OPERATION_FAILED.get("DELETE");
           LDAPToolUtils.printErrorMessage(err, msg, resultCode, errorMessage,
                                           op.getMatchedDN());
         } else
         {
-          msgID = MSGID_OPERATION_SUCCESSFUL;
-          String msg = getMessage(msgID, "DELETE", line);
+
+          Message msg = INFO_OPERATION_SUCCESSFUL.get("DELETE", line);
           out.println(msg);
         }
       }
@@ -348,7 +348,7 @@
     ArrayList<String> dnStrings = new ArrayList<String> ();
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_LDAPDELETE_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LDAPDELETE_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false, true, 0, 1, "\"DN\"");
     try
@@ -356,29 +356,29 @@
       hostName = new StringArgument("host", OPTION_SHORT_HOST,
                                     OPTION_LONG_HOST, false, false, true,
                                     OPTION_VALUE_HOST, "localhost", null,
-                                    MSGID_DESCRIPTION_HOST);
+                                    INFO_DESCRIPTION_HOST.get());
       argParser.addArgument(hostName);
 
       port = new IntegerArgument("port", OPTION_SHORT_PORT,
                                  OPTION_LONG_PORT, false, false, true,
                                  OPTION_VALUE_PORT, 389, null,
-                                 MSGID_DESCRIPTION_PORT);
+                                 INFO_DESCRIPTION_PORT.get());
       argParser.addArgument(port);
 
       useSSL = new BooleanArgument("useSSL", OPTION_SHORT_USE_SSL,
                                    OPTION_LONG_USE_SSL,
-                                   MSGID_DESCRIPTION_USE_SSL);
+                                   INFO_DESCRIPTION_USE_SSL.get());
       argParser.addArgument(useSSL);
 
       startTLS = new BooleanArgument("startTLS", OPTION_SHORT_START_TLS,
                                      OPTION_LONG_START_TLS,
-                                     MSGID_DESCRIPTION_START_TLS);
+                                     INFO_DESCRIPTION_START_TLS.get());
       argParser.addArgument(startTLS);
 
       bindDN = new StringArgument("bindDN", OPTION_SHORT_BINDDN,
                                   OPTION_LONG_BINDDN, false, false, true,
                                   OPTION_VALUE_BINDDN, null, null,
-                                  MSGID_DESCRIPTION_BINDDN);
+                                  INFO_DESCRIPTION_BINDDN.get());
       argParser.addArgument(bindDN);
 
       bindPassword = new StringArgument("bindPassword", OPTION_SHORT_BINDPWD,
@@ -386,7 +386,7 @@
                                         false, false, true,
                                         OPTION_VALUE_BINDPWD,
                                         null, null,
-                                        MSGID_DESCRIPTION_BINDPASSWORD);
+                                        INFO_DESCRIPTION_BINDPASSWORD.get());
       argParser.addArgument(bindPassword);
 
       bindPasswordFile =
@@ -394,29 +394,31 @@
                                  OPTION_LONG_BINDPWD_FILE,
                                  false, false,
                                  OPTION_VALUE_BINDPWD_FILE, null,
-                                 null, MSGID_DESCRIPTION_BINDPASSWORDFILE);
+                                 null, INFO_DESCRIPTION_BINDPASSWORDFILE.get());
       argParser.addArgument(bindPasswordFile);
 
       filename = new StringArgument("filename", OPTION_SHORT_FILENAME,
                                     OPTION_LONG_FILENAME, false, false,
                                     true, OPTION_VALUE_FILENAME, null, null,
-                                    MSGID_DELETE_DESCRIPTION_FILENAME);
+                                    INFO_DELETE_DESCRIPTION_FILENAME.get());
       argParser.addArgument(filename);
 
-      saslExternal = new BooleanArgument("useSASLExternal", 'r',
-                                         "useSASLExternal",
-                                         MSGID_DESCRIPTION_USE_SASL_EXTERNAL);
+      saslExternal =
+              new BooleanArgument("useSASLExternal", 'r',
+                                  "useSASLExternal",
+                                  INFO_DESCRIPTION_USE_SASL_EXTERNAL.get());
       argParser.addArgument(saslExternal);
 
-      saslOptions = new StringArgument("saslOption", OPTION_SHORT_SASLOPTION,
-                                       OPTION_LONG_SASLOPTION,
-                                       false, true, true,
-                                       OPTION_VALUE_SASLOPTION, null,
-                                       null, MSGID_DESCRIPTION_SASL_PROPERTIES);
+      saslOptions = new StringArgument(
+              "saslOption", OPTION_SHORT_SASLOPTION,
+              OPTION_LONG_SASLOPTION,
+              false, true, true,
+              OPTION_VALUE_SASLOPTION, null,
+              null, INFO_DESCRIPTION_SASL_PROPERTIES.get());
       argParser.addArgument(saslOptions);
 
       trustAll = new BooleanArgument("trustAll", 'X', "trustAll",
-                                     MSGID_DESCRIPTION_TRUSTALL);
+                                     INFO_DESCRIPTION_TRUSTALL.get());
       argParser.addArgument(trustAll);
 
       keyStorePath = new StringArgument("keyStorePath",
@@ -425,16 +427,17 @@
                                         false, false, true,
                                         OPTION_VALUE_KEYSTOREPATH,
                                         null, null,
-                                        MSGID_DESCRIPTION_KEYSTOREPATH);
+                                        INFO_DESCRIPTION_KEYSTOREPATH.get());
       argParser.addArgument(keyStorePath);
 
-      keyStorePassword = new StringArgument("keyStorePassword",
-                                            OPTION_SHORT_KEYSTORE_PWD,
-                                            OPTION_LONG_KEYSTORE_PWD,
-                                            false, false,
-                                            true, OPTION_VALUE_KEYSTORE_PWD,
-                                            null, null,
-                                            MSGID_DESCRIPTION_KEYSTOREPASSWORD);
+      keyStorePassword =
+              new StringArgument("keyStorePassword",
+                                 OPTION_SHORT_KEYSTORE_PWD,
+                                 OPTION_LONG_KEYSTORE_PWD,
+                                 false, false,
+                                 true, OPTION_VALUE_KEYSTORE_PWD,
+                                 null, null,
+                                 INFO_DESCRIPTION_KEYSTOREPASSWORD.get());
       argParser.addArgument(keyStorePassword);
 
       keyStorePasswordFile =
@@ -444,21 +447,23 @@
                                  false, false,
                                  OPTION_VALUE_KEYSTORE_PWD_FILE,
                                  null, null,
-                                 MSGID_DESCRIPTION_KEYSTOREPASSWORD_FILE);
+                                 INFO_DESCRIPTION_KEYSTOREPASSWORD_FILE.get());
       argParser.addArgument(keyStorePasswordFile);
 
-      certNickname = new StringArgument("certnickname", 'N', "certNickname",
-                                        false, false, true, "{nickname}", null,
-                                        null, MSGID_DESCRIPTION_CERT_NICKNAME);
+      certNickname = new StringArgument(
+              "certnickname", 'N', "certNickname",
+              false, false, true, "{nickname}", null,
+              null, INFO_DESCRIPTION_CERT_NICKNAME.get());
       argParser.addArgument(certNickname);
 
-      trustStorePath = new StringArgument("trustStorePath",
-                                          OPTION_SHORT_TRUSTSTOREPATH,
-                                          OPTION_LONG_TRUSTSTOREPATH,
-                                          false, false, true,
-                                          OPTION_VALUE_TRUSTSTOREPATH,
-                                          null, null,
-                                          MSGID_DESCRIPTION_TRUSTSTOREPATH);
+      trustStorePath = new StringArgument(
+              "trustStorePath",
+              OPTION_SHORT_TRUSTSTOREPATH,
+              OPTION_LONG_TRUSTSTOREPATH,
+              false, false, true,
+              OPTION_VALUE_TRUSTSTOREPATH,
+              null, null,
+              INFO_DESCRIPTION_TRUSTSTOREPATH.get());
       argParser.addArgument(trustStorePath);
 
       trustStorePassword =
@@ -466,61 +471,61 @@
                               OPTION_LONG_TRUSTSTORE_PWD,
                               false, false, true,
                               OPTION_VALUE_TRUSTSTORE_PWD, null,
-                              null, MSGID_DESCRIPTION_TRUSTSTOREPASSWORD);
+                              null, INFO_DESCRIPTION_TRUSTSTOREPASSWORD.get());
       argParser.addArgument(trustStorePassword);
 
       trustStorePasswordFile =
-           new FileBasedArgument("trustStorePasswordFile",
-                                 OPTION_SHORT_TRUSTSTORE_PWD_FILE,
-                                 OPTION_LONG_TRUSTSTORE_PWD_FILE, false, false,
-                                 OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
-                                 MSGID_DESCRIPTION_TRUSTSTOREPASSWORD_FILE);
+           new FileBasedArgument(
+                   "trustStorePasswordFile",
+                   OPTION_SHORT_TRUSTSTORE_PWD_FILE,
+                   OPTION_LONG_TRUSTSTORE_PWD_FILE, false, false,
+                   OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
+                   INFO_DESCRIPTION_TRUSTSTOREPASSWORD_FILE.get());
       argParser.addArgument(trustStorePasswordFile);
 
       deleteSubtree =
            new BooleanArgument("deleteSubtree", 'x', "deleteSubtree",
-                               MSGID_DELETE_DESCRIPTION_DELETE_SUBTREE);
+                               INFO_DELETE_DESCRIPTION_DELETE_SUBTREE.get());
       argParser.addArgument(deleteSubtree);
 
       controlStr =
            new StringArgument("control", 'J', "control", false, true, true,
                     "{controloid[:criticality[:value|::b64value|:<fileurl]]}",
-                    null, null, MSGID_DESCRIPTION_CONTROLS);
+                    null, null, INFO_DESCRIPTION_CONTROLS.get());
       argParser.addArgument(controlStr);
 
       version = new IntegerArgument("version", OPTION_SHORT_PROTOCOL_VERSION,
                                     OPTION_LONG_PROTOCOL_VERSION, false, false,
                                     true, OPTION_VALUE_PROTOCOL_VERSION, 3,
-                                    null, MSGID_DESCRIPTION_VERSION);
+                                    null, INFO_DESCRIPTION_VERSION.get());
       argParser.addArgument(version);
 
       encodingStr = new StringArgument("encoding", 'i', "encoding", false,
                                        false, true, "{encoding}", null,  null,
-                                       MSGID_DESCRIPTION_ENCODING);
+                                       INFO_DESCRIPTION_ENCODING.get());
       argParser.addArgument(encodingStr);
 
       continueOnError =
            new BooleanArgument("continueOnError", 'c', "continueOnError",
-                               MSGID_DESCRIPTION_CONTINUE_ON_ERROR);
+                               INFO_DESCRIPTION_CONTINUE_ON_ERROR.get());
       argParser.addArgument(continueOnError);
 
       noop = new BooleanArgument("no-op", OPTION_SHORT_DRYRUN,
-          OPTION_LONG_DRYRUN, MSGID_DESCRIPTION_NOOP);
+          OPTION_LONG_DRYRUN, INFO_DESCRIPTION_NOOP.get());
       argParser.addArgument(noop);
 
       verbose = new BooleanArgument("verbose", 'v', "verbose",
-                                    MSGID_DESCRIPTION_VERBOSE);
+                                    INFO_DESCRIPTION_VERBOSE.get());
       argParser.addArgument(verbose);
 
       showUsage = new BooleanArgument("showUsage", OPTION_SHORT_HELP,
                                       OPTION_LONG_HELP,
-                                      MSGID_DESCRIPTION_SHOWUSAGE);
+                                      INFO_DESCRIPTION_SHOWUSAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage, out);
     } catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -533,8 +538,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -550,9 +554,9 @@
 
     if(bindPassword.isPresent() && bindPasswordFile.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, bindPassword.getLongIdentifier(),
-                                  bindPasswordFile.getLongIdentifier());
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              bindPassword.getLongIdentifier(),
+              bindPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -577,8 +581,9 @@
       int versionNumber = version.getIntValue();
       if(versionNumber != 2 && versionNumber != 3)
       {
-        int msgID = MSGID_DESCRIPTION_INVALID_VERSION;
-        err.println(wrapText(getMessage(msgID, versionNumber), MAX_LINE_WIDTH));
+
+        err.println(wrapText(ERR_DESCRIPTION_INVALID_VERSION.get(
+                String.valueOf(versionNumber)), MAX_LINE_WIDTH));
         return 1;
       }
       connectionOptions.setVersionNumber(versionNumber);
@@ -600,7 +605,7 @@
       // read the password from the stdin.
       try
       {
-        out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, bindDNValue));
+        out.print(INFO_LDAPAUTH_PASSWORD_PROMPT.get(bindDNValue));
         char[] pwChars = PasswordReader.readPassword();
         bindPasswordValue = new String(pwChars);
       } catch(Exception ex)
@@ -654,8 +659,7 @@
         LDAPControl ctrl = LDAPToolUtils.getControl(ctrlString, err);
         if(ctrl == null)
         {
-          int    msgID   = MSGID_TOOL_INVALID_CONTROL_STRING;
-          String message = getMessage(msgID, ctrlString);
+          Message message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
           return 1;
@@ -708,15 +712,13 @@
     {
       if(!connectionOptions.useSSL() && !connectionOptions.useStartTLS())
       {
-        int    msgID   = MSGID_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS;
-        String message = getMessage(msgID);
+        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       if(keyStorePathValue == null)
       {
-        int    msgID   = MSGID_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE;
-        String message = getMessage(msgID);
+        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -780,8 +782,10 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, le);
       }
-      LDAPToolUtils.printErrorMessage(err, le.getMessage(), le.getResultCode(),
-                                      le.getErrorMessage(), le.getMatchedDN());
+      LDAPToolUtils.printErrorMessage(err, le.getMessageObject(),
+                                      le.getResultCode(),
+                                      le.getErrorMessage(),
+                                      le.getMatchedDN());
       int code = le.getResultCode();
       return code;
     } catch(LDAPConnectionException lce)
@@ -790,7 +794,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, lce);
       }
-      LDAPToolUtils.printErrorMessage(err, lce.getMessage(),
+      LDAPToolUtils.printErrorMessage(err, lce.getMessageObject(),
                                       lce.getResultCode(),
                                       lce.getErrorMessage(),
                                       lce.getMatchedDN());
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPModify.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPModify.java
index a798fff..73beb12 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPModify.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPModify.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import java.io.FileInputStream;
 import java.io.InputStream;
@@ -80,8 +81,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -148,7 +148,8 @@
    * (file or stdin) and execute the given modify request.
    *
    * @param connection     The connection to use for this modify request.
-   * @param is             The input stream to read the change records from.
+   * @param fileNameValue  Name of the file from which to read.  If null,
+   *                       input will be read from <code>System.in</code>.
    * @param modifyOptions  The constraints for the modify request.
    *
    * @throws  IOException  If a problem occurs while attempting to communicate
@@ -156,7 +157,7 @@
    *
    * @throws  LDAPException  If the Directory Server returns an error response.
    */
-  public void readAndExecute(LDAPConnection connection, InputStream is,
+  public void readAndExecute(LDAPConnection connection, String fileNameValue,
                              LDAPModifyOptions modifyOptions)
          throws IOException, LDAPException
   {
@@ -167,6 +168,12 @@
 
     try
     {
+      InputStream is = System.in;
+      if(fileNameValue != null)
+      {
+        is = new FileInputStream(fileNameValue);
+      }
+
       LDIFImportConfig importConfig = new LDIFImportConfig(is);
       reader = new LDIFReader(importConfig);
     } catch (Exception e)
@@ -175,9 +182,10 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int msgID = MSGID_LDIF_FILE_CANNOT_OPEN_FOR_READ;
-      String message = getMessage(msgID, is, String.valueOf(e));
-      throw new IOException(message);
+      Message message =
+          ERR_LDIF_FILE_CANNOT_OPEN_FOR_READ.get(fileNameValue,
+                  e.getLocalizedMessage());
+      throw new IOException(message.toString());
     }
 
     while (true)
@@ -207,16 +215,14 @@
             }
           }
 
-          int msgID = MSGID_LDIF_FILE_INVALID_LDIF_ENTRY;
-          String message = getMessage(msgID, le.getLineNumber(), fileName,
-                                      String.valueOf(le));
-          throw new IOException(message);
+          Message message = ERR_LDIF_FILE_INVALID_LDIF_ENTRY.get(
+              le.getLineNumber(), fileName, String.valueOf(le));
+          throw new IOException(message.toString());
         }
         else
         {
-          int msgID = MSGID_LDIF_FILE_INVALID_LDIF_ENTRY;
-          String message = getMessage(msgID, le.getLineNumber(), fileName,
-                                      String.valueOf(le));
+          Message message = ERR_LDIF_FILE_INVALID_LDIF_ENTRY.get(
+                  le.getLineNumber(), fileName, String.valueOf(le));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           continue;
         }
@@ -241,14 +247,14 @@
             }
           }
 
-          int msgID = MSGID_LDIF_FILE_READ_ERROR;
-          String message = getMessage(msgID, fileName, String.valueOf(e));
-          throw new IOException(message);
+          Message message =
+              ERR_LDIF_FILE_READ_ERROR.get(fileName, String.valueOf(e));
+          throw new IOException(message.toString());
         }
         else
         {
-          int msgID = MSGID_LDIF_FILE_READ_ERROR;
-          String message = getMessage(msgID, fileName, String.valueOf(e));
+          Message message = ERR_LDIF_FILE_READ_ERROR.get(
+                  fileName, String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           continue;
         }
@@ -291,14 +297,14 @@
             attributes.add(new LDAPAttribute(a));
           }
           protocolOp = new AddRequestProtocolOp(asn1OctetStr, attributes);
-          msgID = MSGID_PROCESSING_OPERATION;
-          out.println(getMessage(msgID, operationType, asn1OctetStr));
+          out.println(INFO_PROCESSING_OPERATION.get(
+                  operationType, String.valueOf(asn1OctetStr)));
           break;
         case DELETE:
           operationType = "DELETE";
           protocolOp = new DeleteRequestProtocolOp(asn1OctetStr);
-          msgID = MSGID_PROCESSING_OPERATION;
-          out.println(getMessage(msgID, operationType, asn1OctetStr));
+          out.println(INFO_PROCESSING_OPERATION.get(
+                  operationType, String.valueOf(asn1OctetStr)));
           break;
         case MODIFY:
           operationType = "MODIFY";
@@ -306,8 +312,8 @@
           ArrayList<RawModification> mods =
             new ArrayList<RawModification>(modEntry.getModifications());
           protocolOp = new ModifyRequestProtocolOp(asn1OctetStr, mods);
-          msgID = MSGID_PROCESSING_OPERATION;
-          out.println(getMessage(msgID, operationType, asn1OctetStr));
+          out.println(INFO_PROCESSING_OPERATION.get(
+                  operationType, String.valueOf(asn1OctetStr)));
           break;
         case MODIFY_DN:
           operationType = "MODIFY DN";
@@ -326,8 +332,9 @@
                  new ASN1OctetString(modDNEntry.getNewRDN().toString()),
                  modDNEntry.deleteOldRDN());
           }
-          msgID = MSGID_PROCESSING_OPERATION;
-          out.println(getMessage(msgID, operationType, asn1OctetStr));
+
+          out.println(INFO_PROCESSING_OPERATION.get(
+                  operationType, String.valueOf(asn1OctetStr)));
           break;
         default:
           break;
@@ -349,8 +356,7 @@
           {
             TRACER.debugCaught(DebugLogLevel.ERROR, ae);
           }
-          msgID = MSGID_OPERATION_FAILED;
-          String message = getMessage(msgID, operationType);
+          Message message = INFO_OPERATION_FAILED.get(operationType);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(wrapText(ae.getMessage(), MAX_LINE_WIDTH));
           if (!modifyOptions.continueOnError())
@@ -361,7 +367,7 @@
         }
 
         int resultCode = 0;
-        String errorMessage = null;
+        Message errorMessage = null;
         DN matchedDN = null;
         List<String> referralURLs = null;
         switch(entry.getChangeOperationType())
@@ -404,12 +410,11 @@
 
         if(resultCode != SUCCESS && resultCode != REFERRAL)
         {
-          msgID = MSGID_OPERATION_FAILED;
-          String msg = getMessage(msgID, operationType);
+          Message msg = INFO_OPERATION_FAILED.get(operationType);
 
           if(!modifyOptions.continueOnError())
           {
-            throw new LDAPException(resultCode, errorMessage, msgID, msg,
+            throw new LDAPException(resultCode, errorMessage, msg,
                                     matchedDN, null);
           } else
           {
@@ -418,8 +423,8 @@
           }
         } else
         {
-          msgID = MSGID_OPERATION_SUCCESSFUL;
-          String msg = getMessage(msgID, operationType, asn1OctetStr);
+          Message msg = INFO_OPERATION_SUCCESSFUL.get(
+                  operationType, String.valueOf(asn1OctetStr));
           out.println(msg);
 
           if (errorMessage != null)
@@ -442,8 +447,10 @@
             ASN1OctetString controlValue = c.getValue();
             if (controlValue == null)
             {
-              msgID = MSGID_LDAPMODIFY_PREREAD_NO_VALUE;
-              err.println(wrapText(getMessage(msgID), MAX_LINE_WIDTH));
+
+              err.println(wrapText(
+                      ERR_LDAPMODIFY_PREREAD_NO_VALUE.get(),
+                      MAX_LINE_WIDTH));
               continue;
             }
 
@@ -457,22 +464,26 @@
             }
             catch (ASN1Exception ae)
             {
-              msgID = MSGID_LDAPMODIFY_PREREAD_CANNOT_DECODE_VALUE;
-              err.println(wrapText(getMessage(msgID, ae.getMessage()),
-                                   MAX_LINE_WIDTH));
+
+              err.println(wrapText(
+                      ERR_LDAPMODIFY_PREREAD_CANNOT_DECODE_VALUE.get(
+                              ae.getMessage()),
+                      MAX_LINE_WIDTH));
               continue;
             }
             catch (LDAPException le)
             {
-              msgID = MSGID_LDAPMODIFY_PREREAD_CANNOT_DECODE_VALUE;
-              err.println(wrapText(getMessage(msgID, le.getMessage()),
-                                   MAX_LINE_WIDTH));
+
+              err.println(wrapText(
+                      ERR_LDAPMODIFY_PREREAD_CANNOT_DECODE_VALUE.get(
+                              le.getMessage()),
+                      MAX_LINE_WIDTH));
               continue;
             }
 
             StringBuilder buffer = new StringBuilder();
             searchEntry.toLDIF(buffer, 78);
-            out.println(getMessage(MSGID_LDAPMODIFY_PREREAD_ENTRY));
+            out.println(INFO_LDAPMODIFY_PREREAD_ENTRY.get());
             out.println(buffer);
           }
           else if (oid.equals(OID_LDAP_READENTRY_POSTREAD))
@@ -480,8 +491,10 @@
             ASN1OctetString controlValue = c.getValue();
             if (controlValue == null)
             {
-              msgID = MSGID_LDAPMODIFY_POSTREAD_NO_VALUE;
-              err.println(wrapText(getMessage(msgID), MAX_LINE_WIDTH));
+
+              err.println(wrapText(
+                      ERR_LDAPMODIFY_POSTREAD_NO_VALUE.get(),
+                      MAX_LINE_WIDTH));
               continue;
             }
 
@@ -495,22 +508,26 @@
             }
             catch (ASN1Exception ae)
             {
-              msgID = MSGID_LDAPMODIFY_POSTREAD_CANNOT_DECODE_VALUE;
-              err.println(wrapText(getMessage(msgID, ae.getMessage()),
-                                   MAX_LINE_WIDTH));
+
+              err.println(wrapText(
+                      ERR_LDAPMODIFY_POSTREAD_CANNOT_DECODE_VALUE.get(
+                              ae.getMessage()),
+                      MAX_LINE_WIDTH));
               continue;
             }
             catch (LDAPException le)
             {
-              msgID = MSGID_LDAPMODIFY_POSTREAD_CANNOT_DECODE_VALUE;
-              err.println(wrapText(getMessage(msgID, le.getMessage()),
-                                   MAX_LINE_WIDTH));
+
+              err.println(wrapText(
+                      ERR_LDAPMODIFY_POSTREAD_CANNOT_DECODE_VALUE.get(
+                              le.getMessage()),
+                      MAX_LINE_WIDTH));
               continue;
             }
 
             StringBuilder buffer = new StringBuilder();
             searchEntry.toLDIF(buffer, 78);
-            out.println(getMessage(MSGID_LDAPMODIFY_POSTREAD_ENTRY));
+            out.println(INFO_LDAPMODIFY_POSTREAD_ENTRY.get());
             out.println(buffer);
           }
         }
@@ -629,7 +646,7 @@
     StringArgument    trustStorePassword     = null;
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_LDAPMODIFY_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LDAPMODIFY_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
     try
@@ -637,29 +654,29 @@
       hostName = new StringArgument("host", OPTION_SHORT_HOST,
                                     OPTION_LONG_HOST, false, false, true,
                                     OPTION_VALUE_HOST, "localhost", null,
-                                    MSGID_DESCRIPTION_HOST);
+                                    INFO_DESCRIPTION_HOST.get());
       argParser.addArgument(hostName);
 
       port = new IntegerArgument("port", OPTION_SHORT_PORT,
                                  OPTION_LONG_PORT, false, false, true,
                                  OPTION_VALUE_PORT, 389, null,
-                                 MSGID_DESCRIPTION_PORT);
+                                 INFO_DESCRIPTION_PORT.get());
       argParser.addArgument(port);
 
       useSSL = new BooleanArgument("useSSL", OPTION_SHORT_USE_SSL,
                                    OPTION_LONG_USE_SSL,
-                                   MSGID_DESCRIPTION_USE_SSL);
+                                   INFO_DESCRIPTION_USE_SSL.get());
       argParser.addArgument(useSSL);
 
       startTLS = new BooleanArgument("startTLS", OPTION_SHORT_START_TLS,
                                      OPTION_LONG_START_TLS,
-                                     MSGID_DESCRIPTION_START_TLS);
+                                     INFO_DESCRIPTION_START_TLS.get());
       argParser.addArgument(startTLS);
 
       bindDN = new StringArgument("bindDN", OPTION_SHORT_BINDDN,
                                   OPTION_LONG_BINDDN, false, false, true,
                                   OPTION_VALUE_BINDDN, null, null,
-                                  MSGID_DESCRIPTION_BINDDN);
+                                  INFO_DESCRIPTION_BINDDN.get());
       argParser.addArgument(bindDN);
 
       bindPassword = new StringArgument("bindPassword", OPTION_SHORT_BINDPWD,
@@ -667,7 +684,7 @@
                                         false, false, true,
                                         OPTION_VALUE_BINDPWD,
                                         null, null,
-                                        MSGID_DESCRIPTION_BINDPASSWORD);
+                                        INFO_DESCRIPTION_BINDPASSWORD.get());
       argParser.addArgument(bindPassword);
 
       bindPasswordFile =
@@ -676,33 +693,35 @@
                                  OPTION_LONG_BINDPWD_FILE,
                                  false, false,
                                  OPTION_VALUE_BINDPWD_FILE, null,
-                                 null, MSGID_DESCRIPTION_BINDPASSWORDFILE);
+                                 null, INFO_DESCRIPTION_BINDPASSWORDFILE.get());
       argParser.addArgument(bindPasswordFile);
 
-      defaultAdd = new BooleanArgument("defaultAdd", 'a', "defaultAdd",
-                                       MSGID_MODIFY_DESCRIPTION_DEFAULT_ADD);
+      defaultAdd = new BooleanArgument(
+              "defaultAdd", 'a', "defaultAdd",
+              INFO_MODIFY_DESCRIPTION_DEFAULT_ADD.get());
       argParser.addArgument(defaultAdd);
 
       filename = new StringArgument("filename", OPTION_SHORT_FILENAME,
                                     OPTION_LONG_FILENAME, false, false,
                                     true, OPTION_VALUE_FILENAME, null, null,
-                                    MSGID_LDAPMODIFY_DESCRIPTION_FILENAME);
+                                    INFO_LDAPMODIFY_DESCRIPTION_FILENAME.get());
       argParser.addArgument(filename);
 
-      saslExternal = new BooleanArgument("useSASLExternal", 'r',
-                                         "useSASLExternal",
-                                         MSGID_DESCRIPTION_USE_SASL_EXTERNAL);
+      saslExternal = new BooleanArgument(
+              "useSASLExternal", 'r',
+              "useSASLExternal",
+              INFO_DESCRIPTION_USE_SASL_EXTERNAL.get());
       argParser.addArgument(saslExternal);
 
       saslOptions = new StringArgument("saslOption", OPTION_SHORT_SASLOPTION,
                                        OPTION_LONG_SASLOPTION, false,
                                        true, true,
                                        OPTION_VALUE_SASLOPTION, null, null,
-                                       MSGID_DESCRIPTION_SASL_PROPERTIES);
+                                       INFO_DESCRIPTION_SASL_PROPERTIES.get());
       argParser.addArgument(saslOptions);
 
       trustAll = new BooleanArgument("trustAll", 'X', "trustAll",
-                                    MSGID_DESCRIPTION_TRUSTALL);
+                                    INFO_DESCRIPTION_TRUSTALL.get());
       argParser.addArgument(trustAll);
 
       keyStorePath = new StringArgument("keyStorePath",
@@ -711,17 +730,18 @@
                                         false, false, true,
                                         OPTION_VALUE_KEYSTOREPATH,
                                         null, null,
-                                        MSGID_DESCRIPTION_KEYSTOREPATH);
+                                        INFO_DESCRIPTION_KEYSTOREPATH.get());
       argParser.addArgument(keyStorePath);
 
-      keyStorePassword = new StringArgument("keyStorePassword",
-                                            OPTION_SHORT_KEYSTORE_PWD,
-                                            OPTION_LONG_KEYSTORE_PWD,
-                                            false, false,
-                                            true,
-                                            OPTION_VALUE_KEYSTORE_PWD,
-                                            null, null,
-                                            MSGID_DESCRIPTION_KEYSTOREPASSWORD);
+      keyStorePassword =
+              new StringArgument("keyStorePassword",
+                                 OPTION_SHORT_KEYSTORE_PWD,
+                                 OPTION_LONG_KEYSTORE_PWD,
+                                 false, false,
+                                 true,
+                                 OPTION_VALUE_KEYSTORE_PWD,
+                                 null, null,
+                                 INFO_DESCRIPTION_KEYSTOREPASSWORD.get());
       argParser.addArgument(keyStorePassword);
 
       keyStorePasswordFile =
@@ -730,21 +750,23 @@
                                  OPTION_LONG_KEYSTORE_PWD_FILE,
                                  false, false, OPTION_VALUE_KEYSTORE_PWD_FILE,
                                  null, null,
-                                 MSGID_DESCRIPTION_KEYSTOREPASSWORD_FILE);
+                                 INFO_DESCRIPTION_KEYSTOREPASSWORD_FILE.get());
       argParser.addArgument(keyStorePasswordFile);
 
-      certNickname = new StringArgument("certnickname", 'N', "certNickname",
-                                        false, false, true, "{nickname}", null,
-                                        null, MSGID_DESCRIPTION_CERT_NICKNAME);
+      certNickname = new StringArgument(
+              "certnickname", 'N', "certNickname",
+              false, false, true, "{nickname}", null,
+              null, INFO_DESCRIPTION_CERT_NICKNAME.get());
       argParser.addArgument(certNickname);
 
-      trustStorePath = new StringArgument("trustStorePath",
-                                          OPTION_SHORT_TRUSTSTOREPATH,
-                                          OPTION_LONG_TRUSTSTOREPATH,
-                                          false, false, true,
-                                          OPTION_VALUE_TRUSTSTOREPATH,
-                                          null, null,
-                                          MSGID_DESCRIPTION_TRUSTSTOREPATH);
+      trustStorePath = new StringArgument(
+              "trustStorePath",
+              OPTION_SHORT_TRUSTSTOREPATH,
+              OPTION_LONG_TRUSTSTOREPATH,
+              false, false, true,
+              OPTION_VALUE_TRUSTSTOREPATH,
+              null, null,
+              INFO_DESCRIPTION_TRUSTSTOREPATH.get());
       argParser.addArgument(trustStorePath);
 
       trustStorePassword =
@@ -752,15 +774,16 @@
                               OPTION_LONG_TRUSTSTORE_PWD ,
                               false, false, true,
                               OPTION_VALUE_TRUSTSTORE_PWD, null,
-                              null, MSGID_DESCRIPTION_TRUSTSTOREPASSWORD);
+                              null, INFO_DESCRIPTION_TRUSTSTOREPASSWORD.get());
       argParser.addArgument(trustStorePassword);
 
       trustStorePasswordFile =
-           new FileBasedArgument("truststorepasswordfile",
-                                 OPTION_SHORT_TRUSTSTORE_PWD_FILE,
-                                 OPTION_LONG_TRUSTSTORE_PWD_FILE, false, false,
-                                 OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
-                                 MSGID_DESCRIPTION_TRUSTSTOREPASSWORD_FILE);
+           new FileBasedArgument(
+                   "truststorepasswordfile",
+                   OPTION_SHORT_TRUSTSTORE_PWD_FILE,
+                   OPTION_LONG_TRUSTSTORE_PWD_FILE, false, false,
+                   OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
+                   INFO_DESCRIPTION_TRUSTSTOREPASSWORD_FILE.get());
       argParser.addArgument(trustStorePasswordFile);
 
       proxyAuthzID = new StringArgument("proxy_authzid",
@@ -768,78 +791,81 @@
                                         OPTION_LONG_PROXYAUTHID, false,
                                         false, true,
                                         OPTION_VALUE_PROXYAUTHID, null, null,
-                                        MSGID_DESCRIPTION_PROXY_AUTHZID);
+                                        INFO_DESCRIPTION_PROXY_AUTHZID.get());
       argParser.addArgument(proxyAuthzID);
 
-      reportAuthzID = new BooleanArgument("reportauthzid", 'E',
-                                          "reportAuthzID",
-                                          MSGID_DESCRIPTION_REPORT_AUTHZID);
+      reportAuthzID = new BooleanArgument(
+              "reportauthzid", 'E',
+              "reportAuthzID",
+              INFO_DESCRIPTION_REPORT_AUTHZID.get());
       argParser.addArgument(reportAuthzID);
 
-      assertionFilter = new StringArgument("assertionfilter", null,
-                                           OPTION_LONG_ASSERTION_FILE,
-                                           false, false,
-                                           true,
-                                           OPTION_VALUE_ASSERTION_FILE,
-                                           null, null,
-                                           MSGID_DESCRIPTION_ASSERTION_FILTER);
+      assertionFilter = new StringArgument(
+              "assertionfilter", null,
+              OPTION_LONG_ASSERTION_FILE,
+              false, false,
+              true,
+              OPTION_VALUE_ASSERTION_FILE,
+              null, null,
+              INFO_DESCRIPTION_ASSERTION_FILTER.get());
       argParser.addArgument(assertionFilter);
 
-      preReadAttributes = new StringArgument("prereadattrs", null,
-                                             "preReadAttributes", false, false,
-                                             true, "{attrList}", null, null,
-                                             MSGID_DESCRIPTION_PREREAD_ATTRS);
+      preReadAttributes = new StringArgument(
+              "prereadattrs", null,
+              "preReadAttributes", false, false,
+              true, "{attrList}", null, null,
+              INFO_DESCRIPTION_PREREAD_ATTRS.get());
       argParser.addArgument(preReadAttributes);
 
-      postReadAttributes = new StringArgument("postreadattrs", null,
-                                              "postReadAttributes", false,
-                                              false, true, "{attrList}", null,
-                                              null,
-                                              MSGID_DESCRIPTION_POSTREAD_ATTRS);
+      postReadAttributes = new StringArgument(
+              "postreadattrs", null,
+              "postReadAttributes", false,
+              false, true, "{attrList}", null,
+              null,
+              INFO_DESCRIPTION_POSTREAD_ATTRS.get());
       argParser.addArgument(postReadAttributes);
 
       controlStr =
            new StringArgument("control", 'J', "control", false, true, true,
                     "{controloid[:criticality[:value|::b64value|:<fileurl]]}",
-                    null, null, MSGID_DESCRIPTION_CONTROLS);
+                    null, null, INFO_DESCRIPTION_CONTROLS.get());
       argParser.addArgument(controlStr);
 
       version = new IntegerArgument("version", OPTION_SHORT_PROTOCOL_VERSION,
                               OPTION_LONG_PROTOCOL_VERSION,
                               false, false, true,
                               OPTION_VALUE_PROTOCOL_VERSION, 3, null,
-                              MSGID_DESCRIPTION_VERSION);
+                              INFO_DESCRIPTION_VERSION.get());
       argParser.addArgument(version);
 
       encodingStr = new StringArgument("encoding", 'i', "encoding",
                                       false, false,
                                       true, "{encoding}", null, null,
-                                      MSGID_DESCRIPTION_ENCODING);
+                                      INFO_DESCRIPTION_ENCODING.get());
       argParser.addArgument(encodingStr);
 
       continueOnError = new BooleanArgument("continueOnError", 'c',
                                     "continueOnError",
-                                    MSGID_DESCRIPTION_CONTINUE_ON_ERROR);
+                                    INFO_DESCRIPTION_CONTINUE_ON_ERROR.get());
       argParser.addArgument(continueOnError);
 
       noop = new BooleanArgument("no-op", OPTION_SHORT_DRYRUN,
                                     OPTION_LONG_DRYRUN,
-                                    MSGID_DESCRIPTION_NOOP);
+                                    INFO_DESCRIPTION_NOOP.get());
       argParser.addArgument(noop);
 
       verbose = new BooleanArgument("verbose", 'v', "verbose",
-                                    MSGID_DESCRIPTION_VERBOSE);
+                                    INFO_DESCRIPTION_VERBOSE.get());
       argParser.addArgument(verbose);
 
       showUsage = new BooleanArgument("showUsage", OPTION_SHORT_HELP,
                                       OPTION_LONG_HELP,
-                                      MSGID_DESCRIPTION_SHOWUSAGE);
+                                      INFO_DESCRIPTION_SHOWUSAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage, out);
     } catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -852,8 +878,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -869,9 +894,9 @@
 
     if(bindPassword.isPresent() && bindPasswordFile.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, bindPassword.getLongIdentifier(),
-                                  bindPasswordFile.getLongIdentifier());
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              bindPassword.getLongIdentifier(),
+              bindPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -896,8 +921,9 @@
       int versionNumber = version.getIntValue();
       if(versionNumber != 2 && versionNumber != 3)
       {
-        int msgID = MSGID_DESCRIPTION_INVALID_VERSION;
-        err.println(wrapText(getMessage(msgID, versionNumber), MAX_LINE_WIDTH));
+
+        err.println(wrapText(ERR_DESCRIPTION_INVALID_VERSION.get(
+                String.valueOf(versionNumber)), MAX_LINE_WIDTH));
         return 1;
       }
       connectionOptions.setVersionNumber(versionNumber);
@@ -919,7 +945,7 @@
       // read the password from the stdin.
       try
       {
-        out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, bindDNValue));
+        out.print(INFO_LDAPAUTH_PASSWORD_PROMPT.get(bindDNValue));
         char[] pwChars = PasswordReader.readPassword();
         bindPasswordValue = new String(pwChars);
       } catch(Exception ex)
@@ -973,8 +999,7 @@
         LDAPControl ctrl = LDAPToolUtils.getControl(ctrlString, err);
         if(ctrl == null)
         {
-          int    msgID   = MSGID_TOOL_INVALID_CONTROL_STRING;
-          String message = getMessage(msgID, ctrlString);
+          Message message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
           return 1;
@@ -1007,8 +1032,8 @@
       }
       catch (LDAPException le)
       {
-        int    msgID   = MSGID_LDAP_ASSERTION_INVALID_FILTER;
-        String message = getMessage(msgID, le.getMessage());
+        Message message = ERR_LDAP_ASSERTION_INVALID_FILTER.get(
+                le.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -1083,15 +1108,13 @@
     {
       if(!connectionOptions.useSSL() && !connectionOptions.useStartTLS())
       {
-        int    msgID   = MSGID_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS;
-        String message = getMessage(msgID);
+        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       if(keyStorePathValue == null)
       {
-        int    msgID   = MSGID_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE;
-        String message = getMessage(msgID);
+        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -1135,19 +1158,15 @@
       connection.connectToHost(bindDNValue, bindPasswordValue, nextMessageID);
 
       ldapModify = new LDAPModify(fileNameValue, nextMessageID, out, err);
-      InputStream is = System.in;
-      if(fileNameValue != null)
-      {
-        is = new FileInputStream(fileNameValue);
-      }
-      ldapModify.readAndExecute(connection, is, modifyOptions);
+      ldapModify.readAndExecute(connection, fileNameValue, modifyOptions);
     } catch(LDAPException le)
     {
       if (debugEnabled())
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, le);
       }
-      LDAPToolUtils.printErrorMessage(err, le.getMessage(), le.getResultCode(),
+      LDAPToolUtils.printErrorMessage(err, le.getMessageObject(),
+                                      le.getResultCode(),
                                       le.getErrorMessage(), le.getMatchedDN());
       int code = le.getResultCode();
       return code;
@@ -1157,7 +1176,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, lce);
       }
-      LDAPToolUtils.printErrorMessage(err, lce.getMessage(),
+      LDAPToolUtils.printErrorMessage(err, lce.getMessageObject(),
                                       lce.getResultCode(),
                                       lce.getErrorMessage(),
                                       lce.getMatchedDN());
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPPasswordModify.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPPasswordModify.java
index 9b81f48..32315cb 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPPasswordModify.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPPasswordModify.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -56,8 +57,7 @@
 import org.opends.server.util.args.StringArgument;
 
 import static org.opends.server.extensions.ExtensionsConstants.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -189,7 +189,7 @@
 
 
     // Initialize the argument parser.
-    String toolDescription = getMessage(MSGID_LDAPPWMOD_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LDAPPWMOD_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
 
@@ -198,41 +198,42 @@
       ldapHost = new StringArgument("ldaphost", OPTION_SHORT_HOST,
                                     OPTION_LONG_HOST, false, false,
                                     true, OPTION_VALUE_HOST, "127.0.0.1", null,
-                                    MSGID_LDAPPWMOD_DESCRIPTION_HOST);
+                                    INFO_LDAPPWMOD_DESCRIPTION_HOST.get());
       argParser.addArgument(ldapHost);
 
 
-      ldapPort = new IntegerArgument("ldapport", OPTION_SHORT_PORT,
-                                     OPTION_LONG_PORT, false, false,
-                                     true, OPTION_VALUE_PORT, 389,
-                                     null, true, 1, true,
-                                     65535, MSGID_LDAPPWMOD_DESCRIPTION_PORT);
+      ldapPort = new IntegerArgument(
+              "ldapport", OPTION_SHORT_PORT,
+              OPTION_LONG_PORT, false, false,
+              true, OPTION_VALUE_PORT, 389,
+              null, true, 1, true,
+              65535, INFO_LDAPPWMOD_DESCRIPTION_PORT.get());
       argParser.addArgument(ldapPort);
 
 
       useSSL = new BooleanArgument("usessl", OPTION_SHORT_USE_SSL,
                                    OPTION_LONG_USE_SSL,
-                                   MSGID_LDAPPWMOD_DESCRIPTION_USE_SSL);
+                                   INFO_LDAPPWMOD_DESCRIPTION_USE_SSL.get());
       argParser.addArgument(useSSL);
 
 
       useStartTLS = new BooleanArgument("usestarttls", OPTION_SHORT_START_TLS,
                              OPTION_LONG_START_TLS,
-                             MSGID_LDAPPWMOD_DESCRIPTION_USE_STARTTLS);
+                             INFO_LDAPPWMOD_DESCRIPTION_USE_STARTTLS.get());
       argParser.addArgument(useStartTLS);
 
 
       bindDN = new StringArgument("binddn", OPTION_SHORT_BINDDN,
                                   OPTION_LONG_BINDDN, false, false, true,
                                   OPTION_VALUE_BINDDN, null, null,
-                                  MSGID_LDAPPWMOD_DESCRIPTION_BIND_DN);
+                                  INFO_LDAPPWMOD_DESCRIPTION_BIND_DN.get());
       argParser.addArgument(bindDN);
 
 
       bindPW = new StringArgument("bindpw", OPTION_SHORT_BINDPWD,
                                   OPTION_LONG_BINDPWD, false, false,
                                   true, OPTION_VALUE_BINDPWD, null, null,
-                                  MSGID_LDAPPWMOD_DESCRIPTION_BIND_PW);
+                                  INFO_LDAPPWMOD_DESCRIPTION_BIND_PW.get());
       argParser.addArgument(bindPW);
 
 
@@ -240,51 +241,53 @@
            new FileBasedArgument("bindpwfile", OPTION_SHORT_BINDPWD_FILE,
                                  OPTION_LONG_BINDPWD_FILE, false,
                                  false, OPTION_VALUE_BINDPWD_FILE, null, null,
-                                 MSGID_LDAPPWMOD_DESCRIPTION_BIND_PW_FILE);
+                                 INFO_LDAPPWMOD_DESCRIPTION_BIND_PW_FILE.get());
       argParser.addArgument(bindPWFile);
 
 
       authzID = new StringArgument("authzid", 'a', "authzID", false, false,
                                    true, "{authzID}", null, null,
-                                   MSGID_LDAPPWMOD_DESCRIPTION_AUTHZID);
+                                   INFO_LDAPPWMOD_DESCRIPTION_AUTHZID.get());
       argParser.addArgument(authzID);
 
 
       provideDNForAuthzID =
            new BooleanArgument("providednforauthzid", 'A',"provideDNForAuthzID",
-                    MSGID_LDAPPWMOD_DESCRIPTION_PROVIDE_DN_FOR_AUTHZID);
+                    INFO_LDAPPWMOD_DESCRIPTION_PROVIDE_DN_FOR_AUTHZID.get());
       argParser.addArgument(provideDNForAuthzID);
 
 
       newPW = new StringArgument("newpw", 'n', "newPassword", false, false,
                                  true, "{newPassword}", null, null,
-                                 MSGID_LDAPPWMOD_DESCRIPTION_NEWPW);
+                                 INFO_LDAPPWMOD_DESCRIPTION_NEWPW.get());
       argParser.addArgument(newPW);
 
 
-      newPWFile = new FileBasedArgument("newpwfile", 'N', "newPasswordFile",
-                                        false, false, "{file}", null, null,
-                                        MSGID_LDAPPWMOD_DESCRIPTION_NEWPWFILE);
+      newPWFile = new FileBasedArgument(
+              "newpwfile", 'N', "newPasswordFile",
+              false, false, "{file}", null, null,
+              INFO_LDAPPWMOD_DESCRIPTION_NEWPWFILE.get());
       argParser.addArgument(newPWFile);
 
 
       currentPW =
            new StringArgument("currentpw", 'c', "currentPassword", false, false,
                               true, "{currentPassword}", null,  null,
-                              MSGID_LDAPPWMOD_DESCRIPTION_CURRENTPW);
+                              INFO_LDAPPWMOD_DESCRIPTION_CURRENTPW.get());
       argParser.addArgument(currentPW);
 
 
       currentPWFile =
-           new FileBasedArgument("currentpwfile", 'C', "currentPasswordFile",
-                                 false, false, "{file}", null, null,
-                                 MSGID_LDAPPWMOD_DESCRIPTION_CURRENTPWFILE);
+           new FileBasedArgument(
+                   "currentpwfile", 'C', "currentPasswordFile",
+                   false, false, "{file}", null, null,
+                   INFO_LDAPPWMOD_DESCRIPTION_CURRENTPWFILE.get());
       argParser.addArgument(currentPWFile);
 
 
       sslBlindTrust =
            new BooleanArgument("blindtrust", 'X', "trustAll",
-                               MSGID_LDAPPWMOD_DESCRIPTION_BLIND_TRUST);
+                               INFO_LDAPPWMOD_DESCRIPTION_BLIND_TRUST.get());
       argParser.addArgument(sslBlindTrust);
 
 
@@ -292,7 +295,7 @@
            new StringArgument("keystorepath", OPTION_SHORT_KEYSTOREPATH,
                               OPTION_LONG_KEYSTOREPATH, false, false,
                               true, OPTION_VALUE_KEYSTOREPATH, null, null,
-                              MSGID_LDAPPWMOD_DESCRIPTION_KEYSTORE);
+                              INFO_LDAPPWMOD_DESCRIPTION_KEYSTORE.get());
       argParser.addArgument(sslKeyStore);
 
 
@@ -303,17 +306,18 @@
                               false, false, true,
                               OPTION_VALUE_KEYSTORE_PWD,
                               null, null,
-                              MSGID_LDAPPWMOD_DESCRIPTION_KEYSTORE_PIN);
+                              INFO_LDAPPWMOD_DESCRIPTION_KEYSTORE_PIN.get());
       argParser.addArgument(sslKeyStorePIN);
 
 
       sslKeyStorePINFile =
-           new FileBasedArgument("keystorepasswordfile",
-                                 OPTION_SHORT_KEYSTORE_PWD_FILE,
-                                 OPTION_LONG_KEYSTORE_PWD_FILE,
-                                 false, false, OPTION_VALUE_KEYSTORE_PWD_FILE,
-                                 null, null,
-                                 MSGID_LDAPPWMOD_DESCRIPTION_KEYSTORE_PINFILE);
+           new FileBasedArgument(
+                   "keystorepasswordfile",
+                   OPTION_SHORT_KEYSTORE_PWD_FILE,
+                   OPTION_LONG_KEYSTORE_PWD_FILE,
+                   false, false, OPTION_VALUE_KEYSTORE_PWD_FILE,
+                   null, null,
+                   INFO_LDAPPWMOD_DESCRIPTION_KEYSTORE_PINFILE.get());
       argParser.addArgument(sslKeyStorePINFile);
 
 
@@ -323,7 +327,7 @@
                               OPTION_LONG_TRUSTSTOREPATH, false,
                               false, true,
                               OPTION_VALUE_TRUSTSTOREPATH, null, null,
-                              MSGID_LDAPPWMOD_DESCRIPTION_TRUSTSTORE);
+                              INFO_LDAPPWMOD_DESCRIPTION_TRUSTSTORE.get());
       argParser.addArgument(sslTrustStore);
 
 
@@ -332,7 +336,7 @@
                               OPTION_LONG_TRUSTSTORE_PWD,
                               false, false, true,
                               OPTION_VALUE_TRUSTSTORE_PWD, null, null,
-                              MSGID_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_PIN);
+                              INFO_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_PIN.get());
       argParser.addArgument(sslTrustStorePIN);
 
 
@@ -341,27 +345,26 @@
                     OPTION_SHORT_TRUSTSTORE_PWD_FILE,
                     OPTION_LONG_TRUSTSTORE_PWD_FILE, false, false,
                     OPTION_VALUE_TRUSTSTORE_PWD_FILE, null,
-                    null, MSGID_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_PINFILE);
+                    null, INFO_LDAPPWMOD_DESCRIPTION_TRUSTSTORE_PINFILE.get());
       argParser.addArgument(sslTrustStorePINFile);
 
 
       controlStr =
            new StringArgument("control", 'J', "control", false, true, true,
                     "{controloid[:criticality[:value|::b64value|:<fileurl]]}",
-                    null, null, MSGID_DESCRIPTION_CONTROLS);
+                    null, null, INFO_DESCRIPTION_CONTROLS.get());
       argParser.addArgument(controlStr);
 
 
       showUsage = new BooleanArgument("help", OPTION_SHORT_HELP,
                                       OPTION_LONG_HELP,
-                                      MSGID_DESCRIPTION_USAGE);
+                                      INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage, out);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -375,8 +378,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -395,54 +397,54 @@
     // Make sure that the user didn't specify any conflicting arguments.
     if (bindPW.isPresent() && bindPWFile.isPresent())
     {
-      int    msgID   = MSGID_LDAPPWMOD_CONFLICTING_ARGS;
-      String message = getMessage(msgID, bindPW.getLongIdentifier(),
-                                  bindPWFile.getLongIdentifier());
+      Message message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
+              bindPW.getLongIdentifier(),
+              bindPWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
     if (newPW.isPresent() && newPWFile.isPresent())
     {
-      int    msgID   = MSGID_LDAPPWMOD_CONFLICTING_ARGS;
-      String message = getMessage(msgID, newPW.getLongIdentifier(),
-                                  newPWFile.getLongIdentifier());
+      Message message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
+              newPW.getLongIdentifier(),
+              newPWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
     if (currentPW.isPresent() && currentPWFile.isPresent())
     {
-      int    msgID   = MSGID_LDAPPWMOD_CONFLICTING_ARGS;
-      String message = getMessage(msgID, currentPW.getLongIdentifier(),
-                                  currentPWFile.getLongIdentifier());
+      Message message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
+              currentPW.getLongIdentifier(),
+              currentPWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
     if (useSSL.isPresent() && useStartTLS.isPresent())
     {
-      int    msgID   = MSGID_LDAPPWMOD_CONFLICTING_ARGS;
-      String message = getMessage(msgID, useSSL.getLongIdentifier(),
-                                  useStartTLS.getLongIdentifier());
+      Message message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
+              useSSL.getLongIdentifier(),
+              useStartTLS.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
     if (sslKeyStorePIN.isPresent() && sslKeyStorePINFile.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, sslKeyStorePIN.getLongIdentifier(),
-                                  sslKeyStorePINFile.getLongIdentifier());
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              sslKeyStorePIN.getLongIdentifier(),
+              sslKeyStorePINFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
     if (sslTrustStorePIN.isPresent() && sslTrustStorePINFile.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, sslTrustStorePIN.getLongIdentifier(),
-                                  sslTrustStorePINFile.getLongIdentifier());
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              sslTrustStorePIN.getLongIdentifier(),
+              sslTrustStorePINFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -456,8 +458,7 @@
     {
       if (! (bindPW.isPresent() || bindPWFile.isPresent()))
       {
-        int    msgID   = MSGID_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER;
-        String message = getMessage(msgID);
+        Message message = ERR_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER.get();
 
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
@@ -466,8 +467,7 @@
     }
     else if (bindPW.isPresent() || bindPWFile.isPresent())
     {
-      int    msgID   = MSGID_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER;
-      String message = getMessage(msgID);
+      Message message = ERR_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER.get();
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -477,10 +477,10 @@
     {
       if (provideDNForAuthzID.isPresent())
       {
-        int    msgID   = MSGID_LDAPPWMOD_DEPENDENT_ARGS;
-        String message = getMessage(msgID,
-                                    provideDNForAuthzID.getLongIdentifier(),
-                                    bindDN.getLongIdentifier());
+        Message message =
+                ERR_LDAPPWMOD_DEPENDENT_ARGS.get(
+                        provideDNForAuthzID.getLongIdentifier(),
+                        bindDN.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
         return 1;
@@ -489,8 +489,8 @@
       if (! (authzID.isPresent() &&
              (currentPW.isPresent() || currentPWFile.isPresent())))
       {
-        int    msgID   = MSGID_LDAPPWMOD_ANON_REQUIRES_AUTHZID_AND_CURRENTPW;
-        String message = getMessage(msgID);
+        Message message =
+                ERR_LDAPPWMOD_ANON_REQUIRES_AUTHZID_AND_CURRENTPW.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
         return 1;
@@ -522,8 +522,7 @@
         LDAPControl ctrl = LDAPToolUtils.getControl(ctrlString, err);
         if(ctrl == null)
         {
-          int    msgID   = MSGID_TOOL_INVALID_CONTROL_STRING;
-          String message = getMessage(msgID, ctrlString);
+          Message message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
           return 1;
@@ -578,8 +577,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDAPPWMOD_ERROR_INITIALIZING_SSL;
-        String message = getMessage(msgID, String.valueOf(e));
+        Message message =
+                ERR_LDAPPWMOD_ERROR_INITIALIZING_SSL.get(String.valueOf(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -611,8 +610,7 @@
     }
     catch (LDAPConnectionException lce)
     {
-      int    msgID   = MSGID_LDAPPWMOD_CANNOT_CONNECT;
-      String message = getMessage(msgID, lce.getMessage());
+      Message message = ERR_LDAPPWMOD_CANNOT_CONNECT.get(lce.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return lce.getResultCode();
     }
@@ -679,8 +677,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDAPPWMOD_CANNOT_SEND_PWMOD_REQUEST;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message = ERR_LDAPPWMOD_CANNOT_SEND_PWMOD_REQUEST.get(
+              String.valueOf(e));
       err.println(wrapText(message, MAX_LINE_WIDTH));
 
       try
@@ -709,8 +707,8 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_LDAPPWMOD_CANNOT_READ_PWMOD_RESPONSE;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message = ERR_LDAPPWMOD_CANNOT_READ_PWMOD_RESPONSE.get(
+              String.valueOf(e));
       err.println(wrapText(message, MAX_LINE_WIDTH));
 
       try
@@ -737,23 +735,22 @@
     int resultCode = extendedResponse.getResultCode();
     if (resultCode != LDAPResultCode.SUCCESS)
     {
-      int    msgID   = MSGID_LDAPPWMOD_FAILED;
-      String message = getMessage(msgID, resultCode);
+      Message message = ERR_LDAPPWMOD_FAILED.get(resultCode);
       err.println(wrapText(message, MAX_LINE_WIDTH));
 
-      String errorMessage = extendedResponse.getErrorMessage();
+      Message errorMessage = extendedResponse.getErrorMessage();
       if ((errorMessage != null) && (errorMessage.length() > 0))
       {
-        msgID   = MSGID_LDAPPWMOD_FAILURE_ERROR_MESSAGE;
-        message = getMessage(msgID, errorMessage);
+
+        message = ERR_LDAPPWMOD_FAILURE_ERROR_MESSAGE.get(errorMessage);
         err.println(wrapText(message, MAX_LINE_WIDTH));
       }
 
       DN matchedDN = extendedResponse.getMatchedDN();
       if (matchedDN != null)
       {
-        msgID   = MSGID_LDAPPWMOD_FAILURE_MATCHED_DN;
-        message = getMessage(msgID, matchedDN.toString());
+
+        message = ERR_LDAPPWMOD_FAILURE_MATCHED_DN.get(matchedDN.toString());
         err.println(wrapText(message, MAX_LINE_WIDTH));
       }
 
@@ -775,15 +772,14 @@
     }
     else
     {
-      int    msgID   = MSGID_LDAPPWMOD_SUCCESSFUL;
-      String message = getMessage(msgID);
+      Message message = INFO_LDAPPWMOD_SUCCESSFUL.get();
       out.println(wrapText(message, MAX_LINE_WIDTH));
 
-      String additionalInfo = extendedResponse.getErrorMessage();
+      Message additionalInfo = extendedResponse.getErrorMessage();
       if ((additionalInfo != null) && (additionalInfo.length() > 0))
       {
-        msgID   = MSGID_LDAPPWMOD_ADDITIONAL_INFO;
-        message = getMessage(msgID, additionalInfo);
+
+        message = INFO_LDAPPWMOD_ADDITIONAL_INFO.get(additionalInfo);
         out.println(wrapText(message, MAX_LINE_WIDTH));
       }
     }
@@ -807,9 +803,9 @@
                  pwPolicyControl.getWarningType();
             if (pwPolicyWarningType != null)
             {
-              int    msgID   = MSGID_LDAPPWMOD_PWPOLICY_WARNING;
-              String message = getMessage(msgID, pwPolicyWarningType.toString(),
-                                          pwPolicyControl.getWarningValue());
+              Message message = INFO_LDAPPWMOD_PWPOLICY_WARNING.get(
+                      pwPolicyWarningType.toString(),
+                      pwPolicyControl.getWarningValue());
               out.println(wrapText(message, MAX_LINE_WIDTH));
             }
 
@@ -817,15 +813,15 @@
                  pwPolicyControl.getErrorType();
             if (pwPolicyErrorType != null)
             {
-              int    msgID   = MSGID_LDAPPWMOD_PWPOLICY_ERROR;
-              String message = getMessage(msgID, pwPolicyErrorType.toString());
+              Message message = INFO_LDAPPWMOD_PWPOLICY_ERROR.get(
+                      pwPolicyErrorType.toString());
               out.println(wrapText(message, MAX_LINE_WIDTH));
             }
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_LDAPPWMOD_CANNOT_DECODE_PWPOLICY_CONTROL;
-            String message = getMessage(msgID, String.valueOf(e));
+            Message message = ERR_LDAPPWMOD_CANNOT_DECODE_PWPOLICY_CONTROL.get(
+                    String.valueOf(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
           }
         }
@@ -845,23 +841,22 @@
         {
           if (e.getType() == TYPE_PASSWORD_MODIFY_GENERATED_PASSWORD)
           {
-            int    msgID   = MSGID_LDAPPWMOD_GENERATED_PASSWORD;
-            String message = getMessage(msgID,
-                                        e.decodeAsOctetString().stringValue());
+            Message message = INFO_LDAPPWMOD_GENERATED_PASSWORD.get(
+                    e.decodeAsOctetString().stringValue());
             out.println(wrapText(message, MAX_LINE_WIDTH));
           }
           else
           {
-            int    msgID   = MSGID_LDAPPWMOD_UNRECOGNIZED_VALUE_TYPE;
-            String message = getMessage(msgID, byteToHex(e.getType()));
+            Message message = ERR_LDAPPWMOD_UNRECOGNIZED_VALUE_TYPE.get(
+                    byteToHex(e.getType()));
             err.println(wrapText(message, MAX_LINE_WIDTH));
           }
         }
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDAPPWMOD_COULD_NOT_DECODE_RESPONSE_VALUE;
-        String message = getMessage(msgID, String.valueOf(e));
+        Message message = ERR_LDAPPWMOD_COULD_NOT_DECODE_RESPONSE_VALUE.get(
+                String.valueOf(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
 
         try
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearch.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearch.java
index e0af1d4..cc854d8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearch.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearch.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import java.io.BufferedReader;
 import java.io.FileReader;
@@ -75,8 +76,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -188,7 +188,7 @@
           do
           {
             int resultCode = 0;
-            String errorMessage = null;
+            Message errorMessage = null;
             DN matchedDN = null;
             LDAPMessage responseMessage =
                  connection.getLDAPReader().readMessage();
@@ -208,14 +208,15 @@
                       EntryChangeNotificationControl ecn =
                            EntryChangeNotificationControl.decodeControl(
                                 c.getControl());
-                      int msgID = MSGID_LDAPSEARCH_PSEARCH_CHANGE_TYPE;
-                      out.println(getMessage(msgID,
-                                             ecn.getChangeType().toString()));
+
+                      out.println(INFO_LDAPSEARCH_PSEARCH_CHANGE_TYPE.get(
+                              ecn.getChangeType().toString()));
                       DN previousDN = ecn.getPreviousDN();
                       if (previousDN != null)
                       {
-                        msgID = MSGID_LDAPSEARCH_PSEARCH_PREVIOUS_DN;
-                        out.println(getMessage(msgID, previousDN.toString()));
+
+                        out.println(INFO_LDAPSEARCH_PSEARCH_PREVIOUS_DN.get(
+                                previousDN.toString()));
                       }
                     } catch (Exception e) {}
                   }
@@ -226,59 +227,65 @@
                       AccountUsableResponseControl acrc =
                            AccountUsableResponseControl.decodeControl(
                                 c.getControl());
-                      int msgID = MSGID_LDAPSEARCH_ACCTUSABLE_HEADER;
-                      out.println(getMessage(msgID));
+
+                      out.println(INFO_LDAPSEARCH_ACCTUSABLE_HEADER.get());
                       if (acrc.isUsable())
                       {
-                        msgID = MSGID_LDAPSEARCH_ACCTUSABLE_IS_USABLE;
-                        out.println(getMessage(msgID));
+
+                        out.println(INFO_LDAPSEARCH_ACCTUSABLE_IS_USABLE.get());
                         if (acrc.getSecondsBeforeExpiration() > 0)
                         {
                           int timeToExp = acrc.getSecondsBeforeExpiration();
-                          String timeToExpStr = secondsToTimeString(timeToExp);
-                          msgID =
-                             MSGID_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_EXPIRATION;
-                          out.println(getMessage(msgID, timeToExpStr));
+                          Message timeToExpStr = secondsToTimeString(timeToExp);
+
+                          out.println(
+                               INFO_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_EXPIRATION.
+                                       get(timeToExpStr));
                         }
                       }
                       else
                       {
-                        msgID = MSGID_LDAPSEARCH_ACCTUSABLE_NOT_USABLE;
-                        out.println(getMessage(msgID));
+
+                        out.println(
+                                INFO_LDAPSEARCH_ACCTUSABLE_NOT_USABLE.get());
                         if (acrc.isInactive())
                         {
-                          msgID = MSGID_LDAPSEARCH_ACCTUSABLE_ACCT_INACTIVE;
-                          out.println(getMessage(msgID));
+
+                          out.println(
+                               INFO_LDAPSEARCH_ACCTUSABLE_ACCT_INACTIVE.get());
                         }
                         if (acrc.isReset())
                         {
-                          msgID = MSGID_LDAPSEARCH_ACCTUSABLE_PW_RESET;
-                          out.println(getMessage(msgID));
+                          out.println(
+                                  INFO_LDAPSEARCH_ACCTUSABLE_PW_RESET.get());
                         }
                         if (acrc.isExpired())
                         {
-                          msgID = MSGID_LDAPSEARCH_ACCTUSABLE_PW_EXPIRED;
-                          out.println(getMessage(msgID));
+
+                          out.println(
+                                  INFO_LDAPSEARCH_ACCTUSABLE_PW_EXPIRED.get());
 
                           if (acrc.getRemainingGraceLogins() > 0)
                           {
-                            msgID = MSGID_LDAPSEARCH_ACCTUSABLE_REMAINING_GRACE;
-                            out.println(getMessage(msgID,
-                                             acrc.getRemainingGraceLogins()));
+
+                            out.println(
+                                    INFO_LDAPSEARCH_ACCTUSABLE_REMAINING_GRACE
+                                         .get(acrc.getRemainingGraceLogins()));
                           }
                         }
                         if (acrc.isLocked())
                         {
-                          msgID = MSGID_LDAPSEARCH_ACCTUSABLE_LOCKED;
-                          out.println(getMessage(msgID));
+
+                          out.println(INFO_LDAPSEARCH_ACCTUSABLE_LOCKED.get());
                           if (acrc.getSecondsBeforeUnlock() > 0)
                           {
                             int timeToUnlock = acrc.getSecondsBeforeUnlock();
-                            String timeToUnlockStr =
+                            Message timeToUnlockStr =
                                         secondsToTimeString(timeToUnlock);
-                            msgID =
-                                 MSGID_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_UNLOCK;
-                            out.println(getMessage(msgID, timeToUnlockStr));
+
+                            out.println(
+                                    INFO_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_UNLOCK
+                                            .get(timeToUnlockStr));
                           }
                         }
                       }
@@ -319,16 +326,16 @@
                       int rc = sortResponse.getResultCode();
                       if (rc != LDAPResultCode.SUCCESS)
                       {
-                        int    msgID = MSGID_LDAPSEARCH_SORT_ERROR;
-                        String msg   = getMessage(msgID,
-                                                  LDAPResultCode.toString(rc));
+                        Message msg   = WARN_LDAPSEARCH_SORT_ERROR.get(
+                                LDAPResultCode.toString(rc));
                         err.println(msg);
                       }
                     }
                     catch (Exception e)
                     {
-                      int msgID = MSGID_LDAPSEARCH_CANNOT_DECODE_SORT_RESPONSE;
-                      String msg   = getMessage(msgID, getExceptionMessage(e));
+                      Message msg   =
+                              WARN_LDAPSEARCH_CANNOT_DECODE_SORT_RESPONSE.get(
+                                      getExceptionMessage(e));
                       err.println(msg);
                     }
                   }
@@ -341,27 +348,27 @@
                       int rc = vlvResponse.getVLVResultCode();
                       if (rc == LDAPResultCode.SUCCESS)
                       {
-                        int msgID = MSGID_LDAPSEARCH_VLV_TARGET_OFFSET;
-                        String msg = getMessage(msgID,
-                                          vlvResponse.getTargetPosition());
+                        Message msg = INFO_LDAPSEARCH_VLV_TARGET_OFFSET.get(
+                                vlvResponse.getTargetPosition());
                         out.println(msg);
 
-                        msgID = MSGID_LDAPSEARCH_VLV_CONTENT_COUNT;
-                        msg = getMessage(msgID, vlvResponse.getContentCount());
+
+                        msg = INFO_LDAPSEARCH_VLV_CONTENT_COUNT.get(
+                                vlvResponse.getContentCount());
                         out.println(msg);
                       }
                       else
                       {
-                        int msgID = MSGID_LDAPSEARCH_VLV_ERROR;
-                        String msg = getMessage(msgID,
-                                                LDAPResultCode.toString(rc));
+                        Message msg = WARN_LDAPSEARCH_VLV_ERROR.get(
+                                LDAPResultCode.toString(rc));
                         err.println(msg);
                       }
                     }
                     catch (Exception e)
                     {
-                      int msgID = MSGID_LDAPSEARCH_CANNOT_DECODE_VLV_RESPONSE;
-                      String msg   = getMessage(msgID, getExceptionMessage(e));
+                      Message msg   =
+                              WARN_LDAPSEARCH_CANNOT_DECODE_VLV_RESPONSE.get(
+                                      getExceptionMessage(e));
                       err.println(msg);
                     }
                   }
@@ -370,17 +377,16 @@
                 break;
               default:
                 // FIXME - throw exception?
-                int msgID = MSGID_SEARCH_OPERATION_INVALID_PROTOCOL;
-                String msg = getMessage(msgID, opType);
+                Message msg = INFO_SEARCH_OPERATION_INVALID_PROTOCOL.get(
+                        String.valueOf(opType));
                 err.println(wrapText(msg, MAX_LINE_WIDTH));
                 break;
             }
 
             if(resultCode != SUCCESS && resultCode != REFERRAL)
             {
-              int msgID = MSGID_OPERATION_FAILED;
-              String msg = getMessage(msgID, "SEARCH");
-              throw new LDAPException(resultCode, errorMessage, msgID, msg,
+              Message msg = INFO_OPERATION_FAILED.get("SEARCH");
+              throw new LDAPException(resultCode, errorMessage, msg,
                                       matchedDN, null);
             }
             else if (errorMessage != null)
@@ -404,8 +410,8 @@
 
     if (searchOptions.countMatchingEntries())
     {
-      int    msgID   = MSGID_LDAPSEARCH_MATCHING_ENTRY_COUNT;
-      String message = getMessage(msgID, matchingEntries);
+      Message message =
+              INFO_LDAPSEARCH_MATCHING_ENTRY_COUNT.get(matchingEntries);
       out.println(message);
       out.println();
     }
@@ -678,7 +684,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_LDAPSEARCH_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LDAPSEARCH_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false, true, 0, 0,
                                                   "[filter] [attributes ...]");
@@ -688,29 +694,29 @@
       hostName = new StringArgument("host", OPTION_SHORT_HOST,
                                     OPTION_LONG_HOST, false, false, true,
                                     OPTION_VALUE_HOST, "localhost", null,
-                                    MSGID_DESCRIPTION_HOST);
+                                    INFO_DESCRIPTION_HOST.get());
       argParser.addArgument(hostName);
 
       port = new IntegerArgument("port", OPTION_SHORT_PORT,
                                  OPTION_LONG_PORT, false, false, true,
                                  OPTION_VALUE_PORT, 389, null,
-                                 MSGID_DESCRIPTION_PORT);
+                                 INFO_DESCRIPTION_PORT.get());
       argParser.addArgument(port);
 
       useSSL = new BooleanArgument("useSSL", OPTION_SHORT_USE_SSL,
                                    OPTION_LONG_USE_SSL,
-                                   MSGID_DESCRIPTION_USE_SSL);
+                                   INFO_DESCRIPTION_USE_SSL.get());
       argParser.addArgument(useSSL);
 
       startTLS = new BooleanArgument("startTLS", OPTION_SHORT_START_TLS,
                                     OPTION_LONG_START_TLS,
-                                    MSGID_DESCRIPTION_START_TLS);
+                                    INFO_DESCRIPTION_START_TLS.get());
       argParser.addArgument(startTLS);
 
       bindDN = new StringArgument("bindDN", OPTION_SHORT_BINDDN,
                                   OPTION_LONG_BINDDN, false, false, true,
                                   OPTION_VALUE_BINDDN, null, null,
-                                  MSGID_DESCRIPTION_BINDDN);
+                                  INFO_DESCRIPTION_BINDDN.get());
       argParser.addArgument(bindDN);
 
       bindPassword = new StringArgument("bindPassword", OPTION_SHORT_BINDPWD,
@@ -718,7 +724,7 @@
                                         false, false, true,
                                         OPTION_VALUE_BINDPWD,
                                         null, null,
-                                        MSGID_DESCRIPTION_BINDPASSWORD);
+                                        INFO_DESCRIPTION_BINDPASSWORD.get());
       argParser.addArgument(bindPassword);
 
       bindPasswordFile =
@@ -726,54 +732,56 @@
                                  OPTION_LONG_BINDPWD_FILE,
                                  false, false,
                                  OPTION_VALUE_BINDPWD_FILE, null,
-                                 null, MSGID_DESCRIPTION_BINDPASSWORDFILE);
+                                 null, INFO_DESCRIPTION_BINDPASSWORDFILE.get());
       argParser.addArgument(bindPasswordFile);
 
       baseDN = new StringArgument("baseDN", OPTION_SHORT_BASEDN,
                                   OPTION_LONG_BASEDN, true, false, true,
                                   OPTION_VALUE_BASEDN, null, null,
-                                  MSGID_SEARCH_DESCRIPTION_BASEDN);
+                                  INFO_SEARCH_DESCRIPTION_BASEDN.get());
       argParser.addArgument(baseDN);
 
-      searchScope = new StringArgument("searchScope", 's', "searchScope", false,
-                                       false, true, "{searchScope}", null, null,
-                                       MSGID_SEARCH_DESCRIPTION_SEARCH_SCOPE);
+      searchScope = new StringArgument(
+              "searchScope", 's', "searchScope", false,
+              false, true, "{searchScope}", null, null,
+              INFO_SEARCH_DESCRIPTION_SEARCH_SCOPE.get());
       argParser.addArgument(searchScope);
 
       filename = new StringArgument("filename", OPTION_SHORT_FILENAME,
                                     OPTION_LONG_FILENAME, false, false,
                                     true, OPTION_VALUE_FILENAME, null, null,
-                                    MSGID_SEARCH_DESCRIPTION_FILENAME);
+                                    INFO_SEARCH_DESCRIPTION_FILENAME.get());
       argParser.addArgument(filename);
 
-      saslExternal = new BooleanArgument("useSASLExternal", 'r',
-                                         "useSASLExternal",
-                                         MSGID_DESCRIPTION_USE_SASL_EXTERNAL);
+      saslExternal = new BooleanArgument(
+              "useSASLExternal", 'r',
+              "useSASLExternal",
+              INFO_DESCRIPTION_USE_SASL_EXTERNAL.get());
       argParser.addArgument(saslExternal);
 
       saslOptions = new StringArgument("saslOption", OPTION_SHORT_SASLOPTION,
                                        OPTION_LONG_SASLOPTION, false,
                                        true, true,
                                        OPTION_VALUE_SASLOPTION, null, null,
-                                       MSGID_DESCRIPTION_SASL_PROPERTIES);
+                                       INFO_DESCRIPTION_SASL_PROPERTIES.get());
       argParser.addArgument(saslOptions);
 
       trustAll = new BooleanArgument("trustAll", 'X', "trustAll",
-                                    MSGID_DESCRIPTION_TRUSTALL);
+                                    INFO_DESCRIPTION_TRUSTALL.get());
       argParser.addArgument(trustAll);
 
       keyStorePath = new StringArgument("keyStorePath",
                                   OPTION_SHORT_KEYSTOREPATH,
                                   OPTION_LONG_KEYSTOREPATH, false, false, true,
                                   OPTION_VALUE_KEYSTOREPATH, null, null,
-                                  MSGID_DESCRIPTION_KEYSTOREPATH);
+                                  INFO_DESCRIPTION_KEYSTOREPATH.get());
       argParser.addArgument(keyStorePath);
 
       keyStorePassword = new StringArgument("keyStorePassword",
                                   OPTION_SHORT_KEYSTORE_PWD,
                                   OPTION_LONG_KEYSTORE_PWD, false, false,
                                   true, OPTION_VALUE_KEYSTORE_PWD, null, null,
-                                  MSGID_DESCRIPTION_KEYSTOREPASSWORD);
+                                  INFO_DESCRIPTION_KEYSTOREPASSWORD.get());
       argParser.addArgument(keyStorePassword);
 
       keyStorePasswordFile =
@@ -783,12 +791,13 @@
                                  false, false,
                                  OPTION_VALUE_KEYSTORE_PWD_FILE,
                                  null, null,
-                                 MSGID_DESCRIPTION_KEYSTOREPASSWORD_FILE);
+                                 INFO_DESCRIPTION_KEYSTOREPASSWORD_FILE.get());
       argParser.addArgument(keyStorePasswordFile);
 
-      certNickname = new StringArgument("certnickname", 'N', "certNickname",
-                                        false, false, true, "{nickname}", null,
-                                        null, MSGID_DESCRIPTION_CERT_NICKNAME);
+      certNickname = new StringArgument(
+              "certnickname", 'N', "certNickname",
+              false, false, true, "{nickname}", null,
+              null, INFO_DESCRIPTION_CERT_NICKNAME.get());
       argParser.addArgument(certNickname);
 
       trustStorePath = new StringArgument("trustStorePath",
@@ -796,7 +805,7 @@
                                   OPTION_LONG_TRUSTSTOREPATH,
                                   false, false, true,
                                   OPTION_VALUE_TRUSTSTOREPATH, null, null,
-                                  MSGID_DESCRIPTION_TRUSTSTOREPATH);
+                                  INFO_DESCRIPTION_TRUSTSTOREPATH.get());
       argParser.addArgument(trustStorePath);
 
       trustStorePassword =
@@ -804,15 +813,16 @@
                               OPTION_LONG_TRUSTSTORE_PWD,
                               false, false, true, OPTION_VALUE_TRUSTSTORE_PWD,
                               null,
-                              null, MSGID_DESCRIPTION_TRUSTSTOREPASSWORD);
+                              null, INFO_DESCRIPTION_TRUSTSTOREPASSWORD.get());
       argParser.addArgument(trustStorePassword);
 
       trustStorePasswordFile =
-           new FileBasedArgument("truststorepasswordfile",
-                                 OPTION_SHORT_TRUSTSTORE_PWD_FILE,
-                                 OPTION_LONG_TRUSTSTORE_PWD_FILE, false, false,
-                                 OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
-                                 MSGID_DESCRIPTION_TRUSTSTOREPASSWORD_FILE);
+           new FileBasedArgument(
+                   "truststorepasswordfile",
+                   OPTION_SHORT_TRUSTSTORE_PWD_FILE,
+                   OPTION_LONG_TRUSTSTORE_PWD_FILE, false, false,
+                   OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
+                   INFO_DESCRIPTION_TRUSTSTOREPASSWORD_FILE.get());
       argParser.addArgument(trustStorePasswordFile);
 
       proxyAuthzID = new StringArgument("proxy_authzid",
@@ -820,68 +830,75 @@
                                         OPTION_LONG_PROXYAUTHID, false,
                                         false, true,
                                         OPTION_VALUE_PROXYAUTHID, null, null,
-                                        MSGID_DESCRIPTION_PROXY_AUTHZID);
+                                        INFO_DESCRIPTION_PROXY_AUTHZID.get());
       argParser.addArgument(proxyAuthzID);
 
-      reportAuthzID = new BooleanArgument("reportauthzid", 'E', "reportAuthzID",
-                                          MSGID_DESCRIPTION_REPORT_AUTHZID);
+      reportAuthzID = new BooleanArgument(
+              "reportauthzid", 'E', "reportAuthzID",
+              INFO_DESCRIPTION_REPORT_AUTHZID.get());
       argParser.addArgument(reportAuthzID);
 
-      usePasswordPolicyControl = new BooleanArgument("usepwpolicycontrol", null,
-                                          "usePasswordPolicyControl",
-                                          MSGID_DESCRIPTION_USE_PWP_CONTROL);
+      usePasswordPolicyControl = new BooleanArgument(
+              "usepwpolicycontrol", null,
+              "usePasswordPolicyControl",
+              INFO_DESCRIPTION_USE_PWP_CONTROL.get());
       argParser.addArgument(usePasswordPolicyControl);
 
       pSearchInfo = new StringArgument("psearchinfo", 'C', "persistentSearch",
                              false, false, true,
                              "ps[:changetype[:changesonly[:entrychgcontrols]]]",
-                              null, null, MSGID_DESCRIPTION_PSEARCH_INFO);
+                              null, null, INFO_DESCRIPTION_PSEARCH_INFO.get());
       argParser.addArgument(pSearchInfo);
 
-      simplePageSize = new IntegerArgument("simplepagesize", null,
-                                           "simplePageSize", false, false, true,
-                                           "{numEntries}", 1000, null, true, 1,
-                                           false, 0,
-                                           MSGID_DESCRIPTION_SIMPLE_PAGE_SIZE);
+      simplePageSize = new IntegerArgument(
+              "simplepagesize", null,
+              "simplePageSize", false, false, true,
+              "{numEntries}", 1000, null, true, 1,
+              false, 0,
+              INFO_DESCRIPTION_SIMPLE_PAGE_SIZE.get());
       argParser.addArgument(simplePageSize);
 
-      assertionFilter = new StringArgument("assertionfilter", null,
-                                           OPTION_LONG_ASSERTION_FILE,
-                                           false, false,
-                                           true, OPTION_VALUE_ASSERTION_FILE,
-                                           null, null,
-                                           MSGID_DESCRIPTION_ASSERTION_FILTER);
+      assertionFilter = new StringArgument(
+              "assertionfilter", null,
+              OPTION_LONG_ASSERTION_FILE,
+              false, false,
+              true, OPTION_VALUE_ASSERTION_FILE,
+              null, null,
+              INFO_DESCRIPTION_ASSERTION_FILTER.get());
       argParser.addArgument(assertionFilter);
 
-      matchedValuesFilter = new StringArgument("matchedvalues", null,
-                                     "matchedValuesFilter", false, true, true,
-                                     "{filter}", null, null,
-                                     MSGID_DESCRIPTION_MATCHED_VALUES_FILTER);
+      matchedValuesFilter = new StringArgument(
+              "matchedvalues", null,
+              "matchedValuesFilter", false, true, true,
+              "{filter}", null, null,
+              INFO_DESCRIPTION_MATCHED_VALUES_FILTER.get());
       argParser.addArgument(matchedValuesFilter);
 
-      sortOrder = new StringArgument("sortorder", 'S', "sortOrder", false,
-                                     false, true, "{sortOrder}", null, null,
-                                     MSGID_DESCRIPTION_SORT_ORDER);
+      sortOrder = new StringArgument(
+              "sortorder", 'S', "sortOrder", false,
+              false, true, "{sortOrder}", null, null,
+              INFO_DESCRIPTION_SORT_ORDER.get());
       argParser.addArgument(sortOrder);
 
       vlvDescriptor =
-           new StringArgument("vlvdescriptor", 'G', "virtualListView", false,
-                              false, true,
-                              "{before:after:index:count | before:after:value}",
-                              null, null, MSGID_DESCRIPTION_VLV);
+           new StringArgument(
+                   "vlvdescriptor", 'G', "virtualListView", false,
+                   false, true,
+                   "{before:after:index:count | before:after:value}",
+                   null, null, INFO_DESCRIPTION_VLV.get());
       argParser.addArgument(vlvDescriptor);
 
       controlStr =
            new StringArgument("control", 'J', "control", false, true, true,
                     "{controloid[:criticality[:value|::b64value|:<fileurl]]}",
-                    null, null, MSGID_DESCRIPTION_CONTROLS);
+                    null, null, INFO_DESCRIPTION_CONTROLS.get());
       argParser.addArgument(controlStr);
       effectiveRightsUser =
               new StringArgument("effectiveRightsUser",
                       OPTION_SHORT_EFFECTIVERIGHTSUSER,
                       OPTION_LONG_EFFECTIVERIGHTSUSER, false, false, true,
                       "{authzid}", null, null,
-                      MSGID_DESCRIPTION_EFFECTIVERIGHTS_USER );
+                      INFO_DESCRIPTION_EFFECTIVERIGHTS_USER.get( ));
       argParser.addArgument(effectiveRightsUser);
 
       effectiveRightsAttrs =
@@ -889,70 +906,70 @@
                       OPTION_SHORT_EFFECTIVERIGHTSATTR,
                       OPTION_LONG_EFFECTIVERIGHTSATTR, false, true, true,
                       "{attribute}", null, null,
-                      MSGID_DESCRIPTION_EFFECTIVERIGHTS_ATTR );
+                      INFO_DESCRIPTION_EFFECTIVERIGHTS_ATTR.get( ));
       argParser.addArgument(effectiveRightsAttrs);
 
       version = new IntegerArgument("version", OPTION_SHORT_PROTOCOL_VERSION,
                                     OPTION_LONG_PROTOCOL_VERSION, false, false,
                                     true, OPTION_VALUE_PROTOCOL_VERSION, 3,
-                                    null, MSGID_DESCRIPTION_VERSION);
+                                    null, INFO_DESCRIPTION_VERSION.get());
       argParser.addArgument(version);
 
       encodingStr = new StringArgument("encoding", 'i', "encoding", false,
                                        false, true, "{encoding}", null, null,
-                                       MSGID_DESCRIPTION_ENCODING);
+                                       INFO_DESCRIPTION_ENCODING.get());
       argParser.addArgument(encodingStr);
 
       dereferencePolicy =
            new StringArgument("derefpolicy", 'a', "dereferencePolicy", false,
                               false, true, "{dereferencePolicy}", null,  null,
-                              MSGID_SEARCH_DESCRIPTION_DEREFERENCE_POLICY);
+                              INFO_SEARCH_DESCRIPTION_DEREFERENCE_POLICY.get());
       argParser.addArgument(dereferencePolicy);
 
       typesOnly = new BooleanArgument("typesOnly", 'A', "typesOnly",
-                                      MSGID_DESCRIPTION_TYPES_ONLY);
+                                      INFO_DESCRIPTION_TYPES_ONLY.get());
       argParser.addArgument(typesOnly);
 
       sizeLimit = new IntegerArgument("sizeLimit", 'z', "sizeLimit", false,
                                       false, true, "{sizeLimit}", 0, null,
-                                      MSGID_SEARCH_DESCRIPTION_SIZE_LIMIT);
+                                      INFO_SEARCH_DESCRIPTION_SIZE_LIMIT.get());
       argParser.addArgument(sizeLimit);
 
       timeLimit = new IntegerArgument("timeLimit", 'l', "timeLimit", false,
                                       false, true, "{timeLimit}", 0, null,
-                                      MSGID_SEARCH_DESCRIPTION_TIME_LIMIT);
+                                      INFO_SEARCH_DESCRIPTION_TIME_LIMIT.get());
       argParser.addArgument(timeLimit);
 
       dontWrap = new BooleanArgument("dontwrap", 'T', "dontWrap",
-                                     MSGID_DESCRIPTION_DONT_WRAP);
+                                     INFO_DESCRIPTION_DONT_WRAP.get());
       argParser.addArgument(dontWrap);
 
       countEntries = new BooleanArgument("countentries", null, "countEntries",
-                                         MSGID_DESCRIPTION_COUNT_ENTRIES);
+                                         INFO_DESCRIPTION_COUNT_ENTRIES.get());
       argParser.addArgument(countEntries);
 
       continueOnError =
            new BooleanArgument("continueOnError", 'c', "continueOnError",
-                               MSGID_DESCRIPTION_CONTINUE_ON_ERROR);
+                               INFO_DESCRIPTION_CONTINUE_ON_ERROR.get());
       argParser.addArgument(continueOnError);
 
       noop = new BooleanArgument("noop", OPTION_SHORT_DRYRUN,
-          OPTION_LONG_DRYRUN, MSGID_DESCRIPTION_NOOP);
+          OPTION_LONG_DRYRUN, INFO_DESCRIPTION_NOOP.get());
       argParser.addArgument(noop);
 
       verbose = new BooleanArgument("verbose", 'v', "verbose",
-                                    MSGID_DESCRIPTION_VERBOSE);
+                                    INFO_DESCRIPTION_VERBOSE.get());
       argParser.addArgument(verbose);
 
       showUsage = new BooleanArgument("showUsage", OPTION_SHORT_HELP,
                                     OPTION_LONG_HELP,
-                                    MSGID_DESCRIPTION_SHOWUSAGE);
+                                    INFO_DESCRIPTION_SHOWUSAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage, out);
     } catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -965,8 +982,8 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -1007,36 +1024,37 @@
 
     if(bindPassword.isPresent() && bindPasswordFile.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, bindPassword.getLongIdentifier(),
-                                  bindPasswordFile.getLongIdentifier());
+      Message message =
+              ERR_TOOL_CONFLICTING_ARGS.get(
+                      bindPassword.getLongIdentifier(),
+                      bindPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
     if (useSSL.isPresent() && startTLS.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, useSSL.getLongIdentifier(),
-                                  startTLS.getLongIdentifier());
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              useSSL.getLongIdentifier(),
+              startTLS.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
     if (keyStorePassword.isPresent() && keyStorePasswordFile.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, keyStorePassword.getLongIdentifier(),
-                                  keyStorePasswordFile.getLongIdentifier());
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              keyStorePassword.getLongIdentifier(),
+              keyStorePasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
     if (trustStorePassword.isPresent() && trustStorePasswordFile.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, trustStorePassword.getLongIdentifier(),
-                                  trustStorePasswordFile.getLongIdentifier());
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              trustStorePassword.getLongIdentifier(),
+              trustStorePasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -1062,8 +1080,9 @@
       int versionNumber = version.getIntValue();
       if(versionNumber != 2 && versionNumber != 3)
       {
-        int msgID = MSGID_DESCRIPTION_INVALID_VERSION;
-        err.println(wrapText(getMessage(msgID, versionNumber), MAX_LINE_WIDTH));
+
+        err.println(wrapText(ERR_DESCRIPTION_INVALID_VERSION.get(
+                String.valueOf(versionNumber)), MAX_LINE_WIDTH));
         return 1;
       }
       connectionOptions.setVersionNumber(versionNumber);
@@ -1094,7 +1113,7 @@
       // read the password from the stdin.
       try
       {
-        out.print(getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, bindDNValue));
+        out.print(INFO_LDAPAUTH_PASSWORD_PROMPT.get(bindDNValue));
         char[] pwChars = PasswordReader.readPassword();
         bindPasswordValue = new String(pwChars);
       } catch(Exception ex)
@@ -1169,8 +1188,7 @@
         LDAPControl ctrl = LDAPToolUtils.getControl(ctrlString, err);
         if(ctrl == null)
         {
-          int    msgID   = MSGID_TOOL_INVALID_CONTROL_STRING;
-          String message = getMessage(msgID, ctrlString);
+          Message message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
           return 1;
@@ -1182,8 +1200,7 @@
     if(effectiveRightsUser.isPresent()) {
       String authzID=effectiveRightsUser.getValue();
       if (!authzID.startsWith("dn:")) {
-        int  msgID   = MSGID_EFFECTIVERIGHTS_INVALID_AUTHZID;
-        String message = getMessage(msgID, authzID);
+        Message message = ERR_EFFECTIVERIGHTS_INVALID_AUTHZID.get(authzID);
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
         return 1;
@@ -1228,8 +1245,7 @@
 
       if (! tokenizer.hasMoreTokens())
       {
-        int    msgID   = MSGID_PSEARCH_MISSING_DESCRIPTOR;
-        String message = getMessage(msgID);
+        Message message = ERR_PSEARCH_MISSING_DESCRIPTOR.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -1238,8 +1254,8 @@
         String token = tokenizer.nextToken();
         if (! token.equals("ps"))
         {
-          int    msgID   = MSGID_PSEARCH_DOESNT_START_WITH_PS;
-          String message = getMessage(msgID, String.valueOf(infoString));
+          Message message = ERR_PSEARCH_DOESNT_START_WITH_PS.get(
+                  String.valueOf(infoString));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -1277,8 +1293,8 @@
           }
           else
           {
-            int    msgID   = MSGID_PSEARCH_INVALID_CHANGE_TYPE;
-            String message = getMessage(msgID, String.valueOf(token));
+            Message message =
+                    ERR_PSEARCH_INVALID_CHANGE_TYPE.get(String.valueOf(token));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
           }
@@ -1307,8 +1323,8 @@
         }
         else
         {
-          int    msgID   = MSGID_PSEARCH_INVALID_CHANGESONLY;
-          String message = getMessage(msgID, String.valueOf(token));
+          Message message = ERR_PSEARCH_INVALID_CHANGESONLY.get(
+                  String.valueOf(token));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -1328,8 +1344,8 @@
         }
         else
         {
-          int    msgID   = MSGID_PSEARCH_INVALID_RETURN_ECS;
-          String message = getMessage(msgID, String.valueOf(token));
+          Message message = ERR_PSEARCH_INVALID_RETURN_ECS.get(
+                  String.valueOf(token));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -1357,8 +1373,8 @@
       }
       catch (LDAPException le)
       {
-        int    msgID   = MSGID_LDAP_ASSERTION_INVALID_FILTER;
-        String message = getMessage(msgID, le.getMessage());
+        Message message = ERR_LDAP_ASSERTION_INVALID_FILTER.get(
+                le.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -1378,8 +1394,8 @@
         }
         catch (LDAPException le)
         {
-          int    msgID   = MSGID_LDAP_MATCHEDVALUES_INVALID_FILTER;
-          String message = getMessage(msgID, le.getMessage());
+          Message message = ERR_LDAP_MATCHEDVALUES_INVALID_FILTER.get(
+                  le.getMessage());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -1399,8 +1415,8 @@
       }
       catch (LDAPException le)
       {
-        int    msgID   = MSGID_LDAP_SORTCONTROL_INVALID_ORDER;
-        String message = getMessage(msgID, le.getErrorMessage());
+        Message message = ERR_LDAP_SORTCONTROL_INVALID_ORDER.get(
+                le.getErrorMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -1410,9 +1426,9 @@
     {
       if (! sortOrder.isPresent())
       {
-        int    msgID   = MSGID_LDAPSEARCH_VLV_REQUIRES_SORT;
-        String message = getMessage(msgID, vlvDescriptor.getLongIdentifier(),
-                                    sortOrder.getLongIdentifier());
+        Message message = ERR_LDAPSEARCH_VLV_REQUIRES_SORT.get(
+                vlvDescriptor.getLongIdentifier(),
+                sortOrder.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -1434,8 +1450,7 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDAPSEARCH_VLV_INVALID_DESCRIPTOR;
-          String message = getMessage(msgID);
+          Message message = ERR_LDAPSEARCH_VLV_INVALID_DESCRIPTOR.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -1454,16 +1469,14 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDAPSEARCH_VLV_INVALID_DESCRIPTOR;
-          String message = getMessage(msgID);
+          Message message = ERR_LDAPSEARCH_VLV_INVALID_DESCRIPTOR.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
       }
       else
       {
-        int    msgID   = MSGID_LDAPSEARCH_VLV_INVALID_DESCRIPTOR;
-        String message = getMessage(msgID);
+        Message message = ERR_LDAPSEARCH_VLV_INVALID_DESCRIPTOR.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -1500,15 +1513,13 @@
     {
       if(!connectionOptions.useSSL() && !connectionOptions.useStartTLS())
       {
-        int    msgID   = MSGID_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS;
-        String message = getMessage(msgID);
+        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       if(keyStorePathValue == null)
       {
-        int    msgID   = MSGID_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE;
-        String message = getMessage(msgID);
+        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -1559,8 +1570,8 @@
 
     if(filters.isEmpty())
     {
-      int msgid = MSGID_SEARCH_NO_FILTERS;
-      err.println(wrapText(getMessage(msgid), MAX_LINE_WIDTH));
+
+      err.println(wrapText(ERR_SEARCH_NO_FILTERS.get(), MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
       return 1;
     }
@@ -1621,9 +1632,8 @@
       {
         if (filters.size() > 1)
         {
-          int    msgID   = MSGID_PAGED_RESULTS_REQUIRES_SINGLE_FILTER;
-          String message = getMessage(msgID);
-          throw new LDAPException(CLIENT_SIDE_PARAM_ERROR, msgID, message);
+          Message message = ERR_PAGED_RESULTS_REQUIRES_SINGLE_FILTER.get();
+          throw new LDAPException(CLIENT_SIDE_PARAM_ERROR, message);
         }
 
         int pageSize = simplePageSize.getIntValue();
@@ -1662,20 +1672,18 @@
               }
               catch (LDAPException le)
               {
-                int    msgID   = MSGID_PAGED_RESULTS_CANNOT_DECODE;
-                String message = getMessage(msgID, le.getMessage());
-                throw new LDAPException(CLIENT_SIDE_DECODING_ERROR, msgID,
-                                        message, le);
+                Message message =
+                    ERR_PAGED_RESULTS_CANNOT_DECODE.get(le.getMessage());
+                throw new LDAPException(
+                        CLIENT_SIDE_DECODING_ERROR, message, le);
               }
             }
           }
 
           if (! responseFound)
           {
-            int msgID = MSGID_PAGED_RESULTS_RESPONSE_NOT_FOUND;
-            String message = getMessage(msgID);
-            throw new LDAPException(CLIENT_SIDE_CONTROL_NOT_FOUND, msgID,
-                                    message);
+            Message message = ERR_PAGED_RESULTS_RESPONSE_NOT_FOUND.get();
+            throw new LDAPException(CLIENT_SIDE_CONTROL_NOT_FOUND, message);
           }
           else if (cookieValue.value().length == 0)
           {
@@ -1707,8 +1715,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, le);
       }
 
-      LDAPToolUtils.printErrorMessage(err, le.getMessage(), le.getResultCode(),
-                                      le.getErrorMessage(), le.getMatchedDN());
+      LDAPToolUtils.printErrorMessage(err,
+                                      le.getMessageObject(),
+                                      le.getResultCode(),
+                                      le.getErrorMessage(),
+                                      le.getMatchedDN());
       int code = le.getResultCode();
       return code;
     } catch(LDAPConnectionException lce)
@@ -1717,7 +1728,8 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, lce);
       }
-      LDAPToolUtils.printErrorMessage(err, lce.getMessage(),
+      LDAPToolUtils.printErrorMessage(err,
+                                      lce.getMessageObject(),
                                       lce.getResultCode(),
                                       lce.getErrorMessage(),
                                       lce.getMatchedDN());
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearchOptions.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearchOptions.java
index 460c1f8..a8819c3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearchOptions.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPSearchOptions.java
@@ -31,8 +31,7 @@
 import org.opends.server.types.DereferencePolicy;
 import org.opends.server.types.SearchScope;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.types.DereferencePolicy.*;
 import static org.opends.server.types.SearchScope.*;
 
@@ -135,8 +134,8 @@
         searchScope = SUBORDINATE_SUBTREE;
       } else
       {
-        int msgID = MSGID_SEARCH_INVALID_SEARCH_SCOPE;
-        err.println(getMessage(msgID, scope));
+
+        err.println(ERR_SEARCH_INVALID_SEARCH_SCOPE.get(scope));
         return false;
       }
       return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPToolUtils.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPToolUtils.java
index 3a54aa0..bbc4b5f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPToolUtils.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDAPToolUtils.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -36,8 +37,7 @@
 import org.opends.server.protocols.ldap.LDAPResultCode;
 import org.opends.server.types.DN;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -256,8 +256,8 @@
    * @param  matchedDN     The matched DN returned from the server, or
    *                       {@code null} if there was none.
    */
-  public static void printErrorMessage(PrintStream err, String explanation,
-                                       int resultCode, String errorMessage,
+  public static void printErrorMessage(PrintStream err, Message explanation,
+                                       int resultCode, Message errorMessage,
                                        DN matchedDN)
   {
     if ((explanation != null) && (explanation.length() > 0))
@@ -267,18 +267,18 @@
 
     if (resultCode >= 0)
     {
-      err.println(getMessage(MSGID_TOOL_RESULT_CODE, resultCode,
+      err.println(ERR_TOOL_RESULT_CODE.get(resultCode,
                              LDAPResultCode.toString(resultCode)));
     }
 
     if ((errorMessage != null) && (errorMessage.length() > 0))
     {
-      err.println(getMessage(MSGID_TOOL_ERROR_MESSAGE, errorMessage));
+      err.println(ERR_TOOL_ERROR_MESSAGE.get(errorMessage));
     }
 
     if (matchedDN != null)
     {
-      err.println(getMessage(MSGID_TOOL_MATCHED_DN, matchedDN.toString()));
+      err.println(ERR_TOOL_MATCHED_DN.get(matchedDN.toString()));
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFDiff.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFDiff.java
index d22eff9..b4a52d5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFDiff.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFDiff.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -59,8 +60,7 @@
 import org.opends.server.util.args.BooleanArgument;
 import org.opends.server.util.args.StringArgument;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -168,40 +168,45 @@
     StringArgument  targetLDIF;
 
 
-    String toolDescription = getMessage(MSGID_LDIFDIFF_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LDIFDIFF_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
     try
     {
-      sourceLDIF = new StringArgument("sourceldif", 's', "sourceLDIF", true,
-                                      false, true, "{filename}", null, null,
-                                      MSGID_LDIFDIFF_DESCRIPTION_SOURCE_LDIF);
+      sourceLDIF = new StringArgument(
+              "sourceldif", 's', "sourceLDIF", true,
+              false, true, "{filename}", null, null,
+              INFO_LDIFDIFF_DESCRIPTION_SOURCE_LDIF.get());
       argParser.addArgument(sourceLDIF);
 
-      targetLDIF = new StringArgument("targetldif", 't', "targetLDIF", true,
-                                      false, true, "{filename}", null, null,
-                                      MSGID_LDIFDIFF_DESCRIPTION_TARGET_LDIF);
+      targetLDIF = new StringArgument(
+              "targetldif", 't', "targetLDIF", true,
+              false, true, "{filename}", null, null,
+              INFO_LDIFDIFF_DESCRIPTION_TARGET_LDIF.get());
       argParser.addArgument(targetLDIF);
 
-      outputLDIF = new StringArgument("outputldif", 'o', "outputLDIF", false,
-                                      false, true, "{filename}", null, null,
-                                      MSGID_LDIFDIFF_DESCRIPTION_OUTPUT_LDIF);
+      outputLDIF = new StringArgument(
+              "outputldif", 'o', "outputLDIF", false,
+              false, true, "{filename}", null, null,
+              INFO_LDIFDIFF_DESCRIPTION_OUTPUT_LDIF.get());
       argParser.addArgument(outputLDIF);
 
       overwriteExisting =
-           new BooleanArgument("overwriteexisting", 'O',
-                               "overwriteExisting",
-                               MSGID_LDIFDIFF_DESCRIPTION_OVERWRITE_EXISTING);
+           new BooleanArgument(
+                   "overwriteexisting", 'O',
+                   "overwriteExisting",
+                   INFO_LDIFDIFF_DESCRIPTION_OVERWRITE_EXISTING.get());
       argParser.addArgument(overwriteExisting);
 
       singleValueChanges =
-           new BooleanArgument("singlevaluechanges", 'S', "singleValueChanges",
-                               MSGID_LDIFDIFF_DESCRIPTION_SINGLE_VALUE_CHANGES);
+           new BooleanArgument(
+                   "singlevaluechanges", 'S', "singleValueChanges",
+                   INFO_LDIFDIFF_DESCRIPTION_SINGLE_VALUE_CHANGES.get());
       argParser.addArgument(singleValueChanges);
 
       configFile = new StringArgument("configfile", 'c', "configFile", false,
                                       false, true, "{configFile}", null, null,
-                                      MSGID_DESCRIPTION_CONFIG_FILE);
+                                      INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -209,20 +214,20 @@
                              OPTION_LONG_CONFIG_CLASS, false,
                              false, true, OPTION_VALUE_CONFIG_CLASS,
                              ConfigFileHandler.class.getName(), null,
-                             MSGID_DESCRIPTION_CONFIG_CLASS);
+                             INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
       showUsage = new BooleanArgument("showusage", OPTION_SHORT_HELP,
                                       OPTION_LONG_HELP,
-                                      MSGID_DESCRIPTION_USAGE);
+                                      INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(message);
       return 1;
     }
@@ -235,8 +240,8 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(message);
       err.println(argParser.getUsage());
@@ -270,9 +275,9 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFDIFF_CANNOT_INITIALIZE_JMX;
-          String message = getMessage(msgID,
-                                      String.valueOf(configFile.getValue()),
+
+          Message message = ERR_LDIFDIFF_CANNOT_INITIALIZE_JMX.get(
+                  String.valueOf(configFile.getValue()),
                                       e.getMessage());
           err.println(message);
           return 1;
@@ -285,9 +290,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFDIFF_CANNOT_INITIALIZE_CONFIG;
-          String message = getMessage(msgID,
-                                      String.valueOf(configFile.getValue()),
+          Message message = ERR_LDIFDIFF_CANNOT_INITIALIZE_CONFIG.get(
+                  String.valueOf(configFile.getValue()),
                                       e.getMessage());
           err.println(message);
           return 1;
@@ -299,10 +303,9 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFDIFF_CANNOT_INITIALIZE_SCHEMA;
-          String message = getMessage(msgID,
-                                      String.valueOf(configFile.getValue()),
-                                      e.getMessage());
+          Message message = ERR_LDIFDIFF_CANNOT_INITIALIZE_SCHEMA.get(
+                  String.valueOf(configFile.getValue()),
+                  e.getMessage());
           err.println(message);
           return 1;
         }
@@ -319,9 +322,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFDIFF_CANNOT_OPEN_SOURCE_LDIF;
-      String message = getMessage(msgID, sourceLDIF.getValue(),
-                                  String.valueOf(e));
+      Message message = ERR_LDIFDIFF_CANNOT_OPEN_SOURCE_LDIF.get(
+              sourceLDIF.getValue(),
+              String.valueOf(e));
       err.println(message);
       return 1;
     }
@@ -342,9 +345,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFDIFF_ERROR_READING_SOURCE_LDIF;
-      String message = getMessage(msgID, sourceLDIF.getValue(),
-                                  String.valueOf(e));
+      Message message = ERR_LDIFDIFF_ERROR_READING_SOURCE_LDIF.get(
+              sourceLDIF.getValue(),
+              String.valueOf(e));
       err.println(message);
       return 1;
     }
@@ -365,9 +368,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFDIFF_CANNOT_OPEN_TARGET_LDIF;
-      String message = getMessage(msgID, targetLDIF.getValue(),
-                                  String.valueOf(e));
+      Message message = ERR_LDIFDIFF_CANNOT_OPEN_TARGET_LDIF.get(
+              targetLDIF.getValue(),
+              String.valueOf(e));
       err.println(message);
       return 1;
     }
@@ -388,9 +391,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFDIFF_ERROR_READING_TARGET_LDIF;
-      String message = getMessage(msgID, targetLDIF.getValue(),
-                                  String.valueOf(e));
+      Message message = ERR_LDIFDIFF_ERROR_READING_TARGET_LDIF.get(
+              targetLDIF.getValue(),
+              String.valueOf(e));
       err.println(message);
       return 1;
     }
@@ -430,8 +433,7 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFDIFF_CANNOT_OPEN_OUTPUT;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message = ERR_LDIFDIFF_CANNOT_OPEN_OUTPUT.get(String.valueOf(e));
       err.println(message);
       return 1;
     }
@@ -445,8 +447,7 @@
         if (targetMap.isEmpty())
         {
           // They're both empty, so there are no differences.
-          int    msgID   = MSGID_LDIFDIFF_NO_DIFFERENCES;
-          String message = getMessage(msgID);
+          Message message = INFO_LDIFDIFF_NO_DIFFERENCES.get();
           writer.writeComment(message, 0);
           return 0;
         }
@@ -599,16 +600,15 @@
 
         if (! differenceFound)
         {
-          int    msgID   = MSGID_LDIFDIFF_NO_DIFFERENCES;
-          String message = getMessage(msgID);
+          Message message = INFO_LDIFDIFF_NO_DIFFERENCES.get();
           writer.writeComment(message, 0);
         }
       }
     }
     catch (IOException e)
     {
-      int    msgID   = MSGID_LDIFDIFF_ERROR_WRITING_OUTPUT;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message =
+              ERR_LDIFDIFF_ERROR_WRITING_OUTPUT.get(String.valueOf(e));
       err.println(message);
       return 1;
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFModify.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFModify.java
index 0937314..a9664d4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFModify.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFModify.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -68,8 +69,7 @@
 import org.opends.server.util.args.BooleanArgument;
 import org.opends.server.util.args.StringArgument;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
 
@@ -125,7 +125,7 @@
   public static boolean modifyLDIF(LDIFReader sourceReader,
                                    LDIFReader changeReader,
                                    LDIFWriter targetWriter,
-                                   List<String> errorList)
+                                   List<Message> errorList)
          throws IOException, LDIFException
   {
     // Read the changes into memory.
@@ -149,7 +149,7 @@
       {
         if (le.canContinueReading())
         {
-          errorList.add(le.getMessage());
+          errorList.add(le.getMessageObject());
           continue;
         }
         else
@@ -170,8 +170,8 @@
           // The entry must not exist in the add list.
           if (adds.containsKey(changeDN))
           {
-            int msgID = MSGID_LDIFMODIFY_CANNOT_ADD_ENTRY_TWICE;
-            errorList.add(getMessage(msgID, String.valueOf(changeDN)));
+            errorList.add(ERR_LDIFMODIFY_CANNOT_ADD_ENTRY_TWICE.get(
+                    String.valueOf(changeDN)));
             continue;
           }
           else
@@ -186,8 +186,8 @@
           // them.
           if (adds.containsKey(changeDN))
           {
-            int msgID = MSGID_LDIFMODIFY_CANNOT_DELETE_AFTER_ADD;
-            errorList.add(getMessage(msgID, String.valueOf(changeDN)));
+            errorList.add(ERR_LDIFMODIFY_CANNOT_DELETE_AFTER_ADD.get(
+                    String.valueOf(changeDN)));
             continue;
           }
           else
@@ -201,8 +201,8 @@
           // The entry must not exist in the add or delete lists.
           if (adds.containsKey(changeDN) || deletes.containsKey(changeDN))
           {
-            int msgID = MSGID_LDIFMODIFY_CANNOT_MODIFY_ADDED_OR_DELETED;
-            errorList.add(getMessage(msgID, String.valueOf(changeDN)));
+            errorList.add(ERR_LDIFMODIFY_CANNOT_MODIFY_ADDED_OR_DELETED.get(
+                    String.valueOf(changeDN)));
             continue;
           }
           else
@@ -224,7 +224,7 @@
               }
               catch (LDAPException le)
               {
-                errorList.add(le.getMessage());
+                errorList.add(le.getMessageObject());
                 continue;
               }
             }
@@ -232,13 +232,13 @@
           break;
 
         case MODIFY_DN:
-          int msgID = MSGID_LDIFMODIFY_MODDN_NOT_SUPPORTED;
-          errorList.add(getMessage(msgID, String.valueOf(changeDN)));
+          errorList.add(ERR_LDIFMODIFY_MODDN_NOT_SUPPORTED.get(
+                  String.valueOf(changeDN)));
           continue;
 
         default:
-          msgID = MSGID_LDIFMODIFY_UNKNOWN_CHANGETYPE;
-          errorList.add(getMessage(msgID, String.valueOf(changeDN),
+          errorList.add(ERR_LDIFMODIFY_UNKNOWN_CHANGETYPE.get(
+                  String.valueOf(changeDN),
                String.valueOf(changeRecord.getChangeOperationType())));
           continue;
       }
@@ -258,7 +258,7 @@
       {
         if (le.canContinueReading())
         {
-          errorList.add(le.getMessage());
+          errorList.add(le.getMessageObject());
           continue;
         }
         else
@@ -286,8 +286,9 @@
       // exists.
       if (adds.remove(entryDN) != null)
       {
-        int msgID = MSGID_LDIFMODIFY_ADD_ALREADY_EXISTS;
-        errorList.add(getMessage(msgID, String.valueOf(entryDN)));
+
+        errorList.add(ERR_LDIFMODIFY_ADD_ALREADY_EXISTS.get(
+                String.valueOf(entryDN)));
         continue;
       }
 
@@ -302,7 +303,7 @@
         }
         catch (DirectoryException de)
         {
-          errorList.add(de.getErrorMessage());
+          errorList.add(de.getMessageObject());
           continue;
         }
       }
@@ -372,8 +373,8 @@
     {
       for (DN dn : deletes.keySet())
       {
-        int msgID = MSGID_LDIFMODIFY_DELETE_NO_SUCH_ENTRY;
-        errorList.add(getMessage(msgID, String.valueOf(dn)));
+        errorList.add(
+                ERR_LDIFMODIFY_DELETE_NO_SUCH_ENTRY.get(String.valueOf(dn)));
       }
     }
 
@@ -381,8 +382,8 @@
     {
       for (DN dn : modifications.keySet())
       {
-        int msgID = MSGID_LDIFMODIFY_MODIFY_NO_SUCH_ENTRY;
-        errorList.add(getMessage(msgID, String.valueOf(dn)));
+        errorList.add(ERR_LDIFMODIFY_MODIFY_NO_SUCH_ENTRY.get(
+                String.valueOf(dn)));
       }
     }
     return targetWriter.writeEntries(ldifEntries.values()) &&
@@ -456,7 +457,7 @@
     StringArgument  sourceFile;
     StringArgument  targetFile;
 
-    String toolDescription = getMessage(MSGID_LDIFMODIFY_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LDIFMODIFY_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
 
@@ -464,7 +465,7 @@
     {
       configFile = new StringArgument("configfile", 'c', "configFile", true,
                                       false, true, "{configFile}", null, null,
-                                      MSGID_DESCRIPTION_CONFIG_FILE);
+                                      INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -473,39 +474,39 @@
                              OPTION_LONG_CONFIG_CLASS, false,
                              false, true, OPTION_VALUE_CONFIG_CLASS,
                              ConfigFileHandler.class.getName(), null,
-                             MSGID_DESCRIPTION_CONFIG_CLASS);
+                             INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
 
       sourceFile = new StringArgument("sourceldif", 's', "sourceLDIF", true,
                                       false, true, "{file}", null, null,
-                                      MSGID_LDIFMODIFY_DESCRIPTION_SOURCE);
+                                      INFO_LDIFMODIFY_DESCRIPTION_SOURCE.get());
       argParser.addArgument(sourceFile);
 
 
-      changesFile = new StringArgument("changesldif", 'm', "changesLDIF", true,
-                                       false, true, "{file}", null, null,
-                                       MSGID_LDIFMODIFY_DESCRIPTION_CHANGES);
+      changesFile =
+              new StringArgument("changesldif", 'm', "changesLDIF", true,
+                                 false, true, "{file}", null, null,
+                                 INFO_LDIFMODIFY_DESCRIPTION_CHANGES.get());
       argParser.addArgument(changesFile);
 
 
       targetFile = new StringArgument("targetldif", 't', "targetLDIF", true,
                                       false, true, "{file}", null, null,
-                                      MSGID_LDIFMODIFY_DESCRIPTION_TARGET);
+                                      INFO_LDIFMODIFY_DESCRIPTION_TARGET.get());
       argParser.addArgument(targetFile);
 
 
       showUsage = new BooleanArgument("help", OPTION_SHORT_HELP,
                                       OPTION_LONG_HELP,
-                                      MSGID_LDIFMODIFY_DESCRIPTION_HELP);
+                                      INFO_LDIFMODIFY_DESCRIPTION_HELP.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(message);
       return 1;
     }
@@ -518,8 +519,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(message);
       err.println(argParser.getUsage());
@@ -553,9 +553,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFMODIFY_CANNOT_INITIALIZE_JMX;
-          String message = getMessage(msgID,
-                                      String.valueOf(configFile.getValue()),
+          Message message = ERR_LDIFMODIFY_CANNOT_INITIALIZE_JMX.get(
+                  String.valueOf(configFile.getValue()),
                                       e.getMessage());
           err.println(message);
           return 1;
@@ -568,9 +567,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFMODIFY_CANNOT_INITIALIZE_CONFIG;
-          String message = getMessage(msgID,
-                                      String.valueOf(configFile.getValue()),
+          Message message = ERR_LDIFMODIFY_CANNOT_INITIALIZE_CONFIG.get(
+                  String.valueOf(configFile.getValue()),
                                       e.getMessage());
           err.println(message);
           return 1;
@@ -582,9 +580,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFMODIFY_CANNOT_INITIALIZE_SCHEMA;
-          String message = getMessage(msgID,
-                                      String.valueOf(configFile.getValue()),
+          Message message = ERR_LDIFMODIFY_CANNOT_INITIALIZE_SCHEMA.get(
+                  String.valueOf(configFile.getValue()),
                                       e.getMessage());
           err.println(message);
           return 1;
@@ -597,8 +594,8 @@
     File source = new File(sourceFile.getValue());
     if (! source.exists())
     {
-      int    msgID   = MSGID_LDIFMODIFY_SOURCE_DOES_NOT_EXIST;
-      String message = getMessage(msgID, sourceFile.getValue());
+      Message message = ERR_LDIFMODIFY_SOURCE_DOES_NOT_EXIST.get(
+              sourceFile.getValue());
       err.println(message);
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
     }
@@ -611,8 +608,8 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDIFMODIFY_CANNOT_OPEN_SOURCE;
-      String message = getMessage(msgID, sourceFile.getValue(),
+      Message message = ERR_LDIFMODIFY_CANNOT_OPEN_SOURCE.get(
+              sourceFile.getValue(),
                                   String.valueOf(ioe));
       err.println(message);
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
@@ -622,8 +619,8 @@
     File changes = new File(changesFile.getValue());
     if (! changes.exists())
     {
-      int    msgID   = MSGID_LDIFMODIFY_CHANGES_DOES_NOT_EXIST;
-      String message = getMessage(msgID, changesFile.getValue());
+      Message message = ERR_LDIFMODIFY_CHANGES_DOES_NOT_EXIST.get(
+              changesFile.getValue());
       err.println(message);
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
     }
@@ -636,8 +633,8 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDIFMODIFY_CANNOT_OPEN_CHANGES;
-      String message = getMessage(msgID, sourceFile.getValue());
+      Message message = ERR_LDIFMODIFY_CANNOT_OPEN_CHANGES.get(
+              sourceFile.getValue(), ioe.getMessage());
       err.println(message);
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
     }
@@ -653,15 +650,15 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_LDIFMODIFY_CANNOT_OPEN_TARGET;
-      String message = getMessage(msgID, sourceFile.getValue());
+      Message message = ERR_LDIFMODIFY_CANNOT_OPEN_TARGET.get(
+              sourceFile.getValue(), ioe.getMessage());
       err.println(message);
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
     }
 
 
     // Actually invoke the LDIF procesing.
-    LinkedList<String> errorList = new LinkedList<String>();
+    LinkedList<Message> errorList = new LinkedList<Message>();
     boolean successful;
     try
     {
@@ -670,8 +667,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFMODIFY_ERROR_PROCESSING_LDIF;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message = ERR_LDIFMODIFY_ERROR_PROCESSING_LDIF.get(
+              String.valueOf(e));
       err.println(message);
 
       successful = false;
@@ -692,7 +689,7 @@
       targetWriter.close();
     } catch (Exception e) {}
 
-    for (String s : errorList)
+    for (Message s : errorList)
     {
       err.println(s);
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFSearch.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFSearch.java
index f909504..58f5237 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFSearch.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFSearch.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -59,8 +60,7 @@
 import org.opends.server.util.args.MultiChoiceArgument;
 import org.opends.server.util.args.StringArgument;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
 
@@ -188,33 +188,37 @@
     StringArgument      outputFile;
 
 
-    String toolDescription = getMessage(MSGID_LDIFSEARCH_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LDIFSEARCH_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false, true, 0, 0,
                                                   "[filter] [attributes ...]");
 
     try
     {
-      ldifFile = new StringArgument("ldiffile", 'l', "ldifFile", false, true,
-                                    true, "{ldifFile}", null, null,
-                                    MSGID_LDIFSEARCH_DESCRIPTION_LDIF_FILE);
+      ldifFile = new StringArgument(
+              "ldiffile", 'l', "ldifFile", false, true,
+              true, "{ldifFile}", null, null,
+              INFO_LDIFSEARCH_DESCRIPTION_LDIF_FILE.get());
       argParser.addArgument(ldifFile);
 
-      baseDNString = new StringArgument("basedn", OPTION_SHORT_BASEDN,
-                                        OPTION_LONG_BASEDN, false, true,
-                                        true, OPTION_VALUE_BASEDN, "", null,
-                                        MSGID_LDIFSEARCH_DESCRIPTION_BASEDN);
+      baseDNString = new StringArgument(
+              "basedn", OPTION_SHORT_BASEDN,
+              OPTION_LONG_BASEDN, false, true,
+              true, OPTION_VALUE_BASEDN, "", null,
+              INFO_LDIFSEARCH_DESCRIPTION_BASEDN.get());
       argParser.addArgument(baseDNString);
 
-      scopeString = new MultiChoiceArgument("scope", 's', "scope", false, false,
-                                            true, "{scope}", SCOPE_STRING_SUB,
-                                            null, scopeStrings, false,
-                                            MSGID_LDIFSEARCH_DESCRIPTION_SCOPE);
+      scopeString = new MultiChoiceArgument(
+              "scope", 's', "scope", false, false,
+              true, "{scope}", SCOPE_STRING_SUB,
+              null, scopeStrings, false,
+              INFO_LDIFSEARCH_DESCRIPTION_SCOPE.get());
       argParser.addArgument(scopeString);
 
-      configFile = new StringArgument("configfile", 'c', "configFile", false,
-                                      false, true, "{configFile}", null, null,
-                                      MSGID_DESCRIPTION_CONFIG_FILE);
+      configFile = new StringArgument(
+              "configfile", 'c', "configFile", false,
+              false, true, "{configFile}", null, null,
+              INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -222,52 +226,57 @@
                              OPTION_LONG_CONFIG_CLASS, false,
                              false, true, OPTION_VALUE_CONFIG_CLASS,
                              ConfigFileHandler.class.getName(), null,
-                             MSGID_DESCRIPTION_CONFIG_CLASS);
+                             INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
       filterFile = new FileBasedArgument("filterfile", 'f', "filterFile", false,
                             false, "{filterFile}", null, null,
-                            MSGID_LDIFSEARCH_DESCRIPTION_FILTER_FILE);
+                            INFO_LDIFSEARCH_DESCRIPTION_FILTER_FILE.get());
       argParser.addArgument(filterFile);
 
-      outputFile = new StringArgument("outputfile", 'o', "outputFile", false,
-                                      false, true, "{outputFile}", null, null,
-                                      MSGID_LDIFSEARCH_DESCRIPTION_OUTPUT_FILE);
+      outputFile = new StringArgument(
+              "outputfile", 'o', "outputFile", false,
+              false, true, "{outputFile}", null, null,
+              INFO_LDIFSEARCH_DESCRIPTION_OUTPUT_FILE.get());
       argParser.addArgument(outputFile);
 
       overwriteExisting =
-           new BooleanArgument("overwriteexisting", 'O',"overwriteExisting",
-                               MSGID_LDIFSEARCH_DESCRIPTION_OVERWRITE_EXISTING);
+           new BooleanArgument(
+                   "overwriteexisting", 'O',"overwriteExisting",
+                   INFO_LDIFSEARCH_DESCRIPTION_OVERWRITE_EXISTING.get());
       argParser.addArgument(overwriteExisting);
 
-      dontWrap = new BooleanArgument("dontwrap", 'T', "dontWrap",
-                                     MSGID_LDIFSEARCH_DESCRIPTION_DONT_WRAP);
+      dontWrap = new BooleanArgument(
+              "dontwrap", 'T', "dontWrap",
+              INFO_LDIFSEARCH_DESCRIPTION_DONT_WRAP.get());
       argParser.addArgument(dontWrap);
 
-      sizeLimit = new IntegerArgument("sizelimit", 'z', "sizeLimit", false,
-                                      false, true, "{sizeLimit}", 0, null,
-                                      true, 0, false, 0,
-                                      MSGID_LDIFSEARCH_DESCRIPTION_SIZE_LIMIT);
+      sizeLimit = new IntegerArgument(
+              "sizelimit", 'z', "sizeLimit", false,
+              false, true, "{sizeLimit}", 0, null,
+              true, 0, false, 0,
+              INFO_LDIFSEARCH_DESCRIPTION_SIZE_LIMIT.get());
       argParser.addArgument(sizeLimit);
 
-      timeLimit = new IntegerArgument("timelimit", 't', "timeLimit", false,
-                                      false, true, "{timeLimit}", 0, null,
-                                      true, 0, false, 0,
-                                      MSGID_LDIFSEARCH_DESCRIPTION_TIME_LIMIT);
+      timeLimit = new IntegerArgument(
+              "timelimit", 't', "timeLimit", false,
+              false, true, "{timeLimit}", 0, null,
+              true, 0, false, 0,
+              INFO_LDIFSEARCH_DESCRIPTION_TIME_LIMIT.get());
       argParser.addArgument(timeLimit);
 
 
-      showUsage = new BooleanArgument("help", OPTION_SHORT_HELP,
-                                      OPTION_LONG_HELP,
-                                      MSGID_DESCRIPTION_USAGE);
+      showUsage = new BooleanArgument(
+              "help", OPTION_SHORT_HELP,
+              OPTION_LONG_HELP,
+              INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(message);
       return 1;
     }
@@ -280,8 +289,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(message);
       err.println(argParser.getUsage());
@@ -347,8 +355,7 @@
       ArrayList<String> trailingArguments = argParser.getTrailingArguments();
       if ((trailingArguments == null) || trailingArguments.isEmpty())
       {
-        int    msgID   = MSGID_LDIFSEARCH_NO_FILTER;
-        String message = getMessage(msgID);
+        Message message = ERR_LDIFSEARCH_NO_FILTER.get();
         err.println(message);
         return 1;
       }
@@ -424,10 +431,9 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFSEARCH_CANNOT_INITIALIZE_JMX;
-        String message = getMessage(msgID,
-                                    String.valueOf(configFile.getValue()),
-                                    e.getMessage());
+        Message message = ERR_LDIFSEARCH_CANNOT_INITIALIZE_JMX.get(
+                String.valueOf(configFile.getValue()),
+                e.getMessage());
         err.println(message);
         return 1;
       }
@@ -439,10 +445,9 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFSEARCH_CANNOT_INITIALIZE_CONFIG;
-        String message = getMessage(msgID,
-                                    String.valueOf(configFile.getValue()),
-                                    e.getMessage());
+        Message message = ERR_LDIFSEARCH_CANNOT_INITIALIZE_CONFIG.get(
+                String.valueOf(configFile.getValue()),
+                e.getMessage());
         err.println(message);
         return 1;
       }
@@ -453,10 +458,9 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFSEARCH_CANNOT_INITIALIZE_SCHEMA;
-        String message = getMessage(msgID,
-                                    String.valueOf(configFile.getValue()),
-                                    e.getMessage());
+        Message message = ERR_LDIFSEARCH_CANNOT_INITIALIZE_SCHEMA.get(
+                String.valueOf(configFile.getValue()),
+                e.getMessage());
         err.println(message);
         return 1;
       }
@@ -501,8 +505,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFSEARCH_CANNOT_PARSE_FILTER;
-        String message = getMessage(msgID, filterString, e.getMessage());
+        Message message = ERR_LDIFSEARCH_CANNOT_PARSE_FILTER.get(
+                filterString, e.getMessage());
         err.println(message);
         return 1;
       }
@@ -568,8 +572,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LDIFSEARCH_CANNOT_PARSE_BASE_DN;
-          String message = getMessage(msgID, dnString, e.getMessage());
+          Message message = ERR_LDIFSEARCH_CANNOT_PARSE_BASE_DN.get(
+                  dnString, e.getMessage());
           err.println(message);
           return 1;
         }
@@ -596,8 +600,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFSEARCH_CANNOT_PARSE_TIME_LIMIT;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message = ERR_LDIFSEARCH_CANNOT_PARSE_TIME_LIMIT.get(
+              String.valueOf(e));
       err.println(message);
       return 1;
     }
@@ -618,8 +622,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFSEARCH_CANNOT_PARSE_SIZE_LIMIT;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message = ERR_LDIFSEARCH_CANNOT_PARSE_SIZE_LIMIT.get(
+              String.valueOf(e));
       err.println(message);
       return 1;
     }
@@ -679,8 +683,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LDIFSEARCH_CANNOT_CREATE_READER;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message = ERR_LDIFSEARCH_CANNOT_CREATE_READER.get(
+              String.valueOf(e));
       err.println(message);
       return 1;
     }
@@ -696,8 +700,8 @@
         reader.close();
       } catch (Exception e2) {}
 
-      int    msgID   = MSGID_LDIFSEARCH_CANNOT_CREATE_WRITER;
-      String message = getMessage(msgID, String.valueOf(e));
+      Message message = ERR_LDIFSEARCH_CANNOT_CREATE_WRITER.get(
+              String.valueOf(e));
       err.println(message);
       return 1;
     }
@@ -715,8 +719,7 @@
       {
         resultCode = LDAPResultCode.TIME_LIMIT_EXCEEDED;
 
-        int    msgID   = MSGID_LDIFSEARCH_TIME_LIMIT_EXCEEDED;
-        String message = getMessage(msgID);
+        Message message = WARN_LDIFSEARCH_TIME_LIMIT_EXCEEDED.get();
         err.println(message);
         break;
       }
@@ -803,8 +806,7 @@
         {
           resultCode = LDAPResultCode.SIZE_LIMIT_EXCEEDED;
 
-          int    msgID   = MSGID_LDIFSEARCH_SIZE_LIMIT_EXCEEDED;
-          String message = getMessage(msgID);
+          Message message = WARN_LDIFSEARCH_SIZE_LIMIT_EXCEEDED.get();
           err.println(message);
           break;
         }
@@ -813,14 +815,14 @@
       {
         if (le.canContinueReading())
         {
-          int    msgID   = MSGID_LDIFSEARCH_CANNOT_READ_ENTRY_RECOVERABLE;
-          String message = getMessage(msgID, le.getMessage());
+          Message message = ERR_LDIFSEARCH_CANNOT_READ_ENTRY_RECOVERABLE.get(
+                  le.getMessage());
           err.println(message);
         }
         else
         {
-          int    msgID   = MSGID_LDIFSEARCH_CANNOT_READ_ENTRY_FATAL;
-          String message = getMessage(msgID, le.getMessage());
+          Message message = ERR_LDIFSEARCH_CANNOT_READ_ENTRY_FATAL.get(
+                  le.getMessage());
           err.println(message);
           resultCode = LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
           break;
@@ -828,8 +830,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_LDIFSEARCH_ERROR_DURING_PROCESSING;
-        String message = getMessage(msgID, String.valueOf(e));
+        Message message = ERR_LDIFSEARCH_ERROR_DURING_PROCESSING.get(
+                String.valueOf(e));
         err.println(message);
         resultCode = LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
         break;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/ListBackends.java b/opendj-sdk/opends/src/server/org/opends/server/tools/ListBackends.java
index 471c188..8541263 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/ListBackends.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/ListBackends.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -51,9 +52,8 @@
 import org.opends.server.util.args.StringArgument;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.ConfigMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -148,7 +148,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_LISTBACKENDS_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_LISTBACKENDS_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.ListBackends",
                             toolDescription, false);
@@ -163,7 +163,7 @@
                               OPTION_LONG_CONFIG_CLASS, true, false,
                               true, OPTION_VALUE_CONFIG_CLASS,
                               ConfigFileHandler.class.getName(), null,
-                              MSGID_DESCRIPTION_CONFIG_CLASS);
+                              INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -171,34 +171,36 @@
       configFile =
            new StringArgument("configfile", 'f', "configFile", true, false,
                               true, "{configFile}", null, null,
-                              MSGID_DESCRIPTION_CONFIG_FILE);
+                              INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
 
-      backendID = new StringArgument("backendid", 'n', "backendID", false,
-                                     true, true, "{backendID}", null, null,
-                                     MSGID_LISTBACKENDS_DESCRIPTION_BACKEND_ID);
+      backendID = new StringArgument(
+              "backendid", 'n', "backendID", false,
+              true, true, "{backendID}", null, null,
+              INFO_LISTBACKENDS_DESCRIPTION_BACKEND_ID.get());
       argParser.addArgument(backendID);
 
 
-      baseDN = new StringArgument("basedn", OPTION_SHORT_BASEDN,
-                                  OPTION_LONG_BASEDN, false, true, true,
-                                  OPTION_VALUE_BASEDN, null, null,
-                                  MSGID_LISTBACKENDS_DESCRIPTION_BASE_DN);
+      baseDN = new StringArgument(
+              "basedn", OPTION_SHORT_BASEDN,
+              OPTION_LONG_BASEDN, false, true, true,
+              OPTION_VALUE_BASEDN, null, null,
+              INFO_LISTBACKENDS_DESCRIPTION_BASE_DN.get());
       argParser.addArgument(baseDN);
 
 
-      displayUsage = new BooleanArgument("help", OPTION_SHORT_HELP,
-                                         OPTION_LONG_HELP,
-                                         MSGID_LISTBACKENDS_DESCRIPTION_HELP);
+      displayUsage = new BooleanArgument(
+              "help", OPTION_SHORT_HELP,
+              OPTION_LONG_HELP,
+              INFO_LISTBACKENDS_DESCRIPTION_HELP.get());
       argParser.addArgument(displayUsage);
       argParser.setUsageArgument(displayUsage, out);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -212,8 +214,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -233,9 +234,9 @@
     // arguments.
     if (backendID.isPresent() && baseDN.isPresent())
     {
-      int    msgID   = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, backendID.getLongIdentifier(),
-                                  baseDN.getLongIdentifier());
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              backendID.getLongIdentifier(),
+              baseDN.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -254,8 +255,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SERVER_BOOTSTRAP_ERROR;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -267,15 +268,13 @@
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -289,22 +288,19 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -319,15 +315,15 @@
     }
     catch (ConfigException ce)
     {
-      int    msgID   = MSGID_LISTBACKENDS_CANNOT_GET_BACKENDS;
-      String message = getMessage(msgID, ce.getMessage());
+      Message message = ERR_LISTBACKENDS_CANNOT_GET_BACKENDS.get(
+              ce.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_LISTBACKENDS_CANNOT_GET_BACKENDS;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message = ERR_LISTBACKENDS_CANNOT_GET_BACKENDS.get(
+              getExceptionMessage(e));
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -363,15 +359,15 @@
         }
         catch (DirectoryException de)
         {
-          int    msgID   = MSGID_LISTBACKENDS_INVALID_DN;
-          String message = getMessage(msgID, dnStr, de.getMessage());
+          Message message = ERR_LISTBACKENDS_INVALID_DN.get(
+                  dnStr, de.getMessage());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_LISTBACKENDS_INVALID_DN;
-          String message = getMessage(msgID, dnStr, getExceptionMessage(e));
+          Message message = ERR_LISTBACKENDS_INVALID_DN.get(
+                  dnStr, getExceptionMessage(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -380,8 +376,8 @@
         String id = baseToIDMap.get(dn);
         if (id == null)
         {
-          int    msgID   = MSGID_LISTBACKENDS_NOT_BASE_DN;
-          String message = getMessage(msgID, dn.toString());
+          Message message = INFO_LISTBACKENDS_NOT_BASE_DN.get(
+                  dn.toString());
           out.println(message);
 
           DN parentDN = dn.getParent();
@@ -389,8 +385,8 @@
           {
             if (parentDN == null)
             {
-              msgID   = MSGID_LISTBACKENDS_NO_BACKEND_FOR_DN;
-              message = getMessage(msgID, dn.toString());
+              message = INFO_LISTBACKENDS_NO_BACKEND_FOR_DN.get(
+                      dn.toString());
               out.println(message);
               break;
             }
@@ -399,9 +395,8 @@
               id = baseToIDMap.get(parentDN);
               if (id != null)
               {
-                msgID = MSGID_LISTBACKENDS_DN_BELOW_BASE;
-                message = getMessage(msgID, dn.toString(), parentDN.toString(),
-                                     id);
+                message = INFO_LISTBACKENDS_DN_BELOW_BASE.get(
+                        dn.toString(), parentDN.toString(), id);
                 out.println(message);
                 break;
               }
@@ -412,8 +407,8 @@
         }
         else
         {
-          int    msgID   = MSGID_LISTBACKENDS_BASE_FOR_ID;
-          String message = getMessage(msgID, dn.toString(), id);
+          Message message = INFO_LISTBACKENDS_BASE_FOR_ID.get(
+                  dn.toString(), id);
           out.println(message);
         }
       }
@@ -432,8 +427,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.
-      String backendIDLabel  = getMessage(MSGID_LISTBACKENDS_LABEL_BACKEND_ID);
-      String baseDNLabel     = getMessage(MSGID_LISTBACKENDS_LABEL_BASE_DN);
+      Message backendIDLabel = INFO_LISTBACKENDS_LABEL_BACKEND_ID.get();
+      Message baseDNLabel = INFO_LISTBACKENDS_LABEL_BASE_DN.get();
       int    backendIDLength = 10;
       int    baseDNLength    = 7;
 
@@ -444,8 +439,7 @@
         TreeSet<DN> baseDNs = backends.get(id);
         if (baseDNs == null)
         {
-          int    msgID   = MSGID_LISTBACKENDS_NO_SUCH_BACKEND;
-          String message = getMessage(msgID, id);
+          Message message = ERR_LISTBACKENDS_NO_SUCH_BACKEND.get(id);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           iterator.remove();
         }
@@ -461,8 +455,7 @@
 
       if (backendIDs.isEmpty())
       {
-        int    msgID   = MSGID_LISTBACKENDS_NO_VALID_BACKENDS;
-        String message = getMessage(msgID);
+        Message message = ERR_LISTBACKENDS_NO_VALID_BACKENDS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -538,16 +531,15 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BACKEND_BASE_DN;
-      String message = getMessage(msgID, DN_BACKEND_BASE, de.getErrorMessage());
-      throw new ConfigException(msgID, message, de);
+      Message message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
+          DN_BACKEND_BASE, de.getMessageObject());
+      throw new ConfigException(message, de);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BACKEND_BASE_DN;
-      String message = getMessage(msgID, DN_BACKEND_BASE,
-                                  getExceptionMessage(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
+          DN_BACKEND_BASE, getExceptionMessage(e));
+      throw new ConfigException(message, e);
     }
 
     ConfigEntry baseEntry = null;
@@ -557,16 +549,15 @@
     }
     catch (ConfigException ce)
     {
-      int    msgID   = MSGID_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY;
-      String message = getMessage(msgID, DN_BACKEND_BASE, ce.getMessage());
-      throw new ConfigException(msgID, message, ce);
+      Message message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
+          DN_BACKEND_BASE, ce.getMessage());
+      throw new ConfigException(message, ce);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY;
-      String message = getMessage(msgID, DN_BACKEND_BASE,
-                                  getExceptionMessage(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
+          DN_BACKEND_BASE, getExceptionMessage(e));
+      throw new ConfigException(message, e);
     }
 
 
@@ -580,9 +571,9 @@
       String backendID = null;
       try
       {
-        int msgID = MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID;
+        Message msg = INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID.get();
         StringConfigAttribute idStub =
-             new StringConfigAttribute(ATTR_BACKEND_ID, getMessage(msgID),
+             new StringConfigAttribute(ATTR_BACKEND_ID, msg,
                                        true, false, true);
         StringConfigAttribute idAttr =
              (StringConfigAttribute) configEntry.getConfigAttribute(idStub);
@@ -597,17 +588,15 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_DETERMINE_BACKEND_ID;
-        String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                    ce.getMessage());
-        throw new ConfigException(msgID, message, ce);
+        Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+            String.valueOf(configEntry.getDN()), ce.getMessage());
+        throw new ConfigException(message, ce);
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_DETERMINE_BACKEND_ID;
-        String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                    getExceptionMessage(e));
-        throw new ConfigException(msgID, message, e);
+        Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+            String.valueOf(configEntry.getDN()), getExceptionMessage(e));
+        throw new ConfigException(message, e);
       }
 
 
@@ -616,9 +605,9 @@
       TreeSet<DN> baseDNs = new TreeSet<DN>();
       try
       {
-        int msgID = MSGID_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS;
+        Message msg = INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS.get();
         DNConfigAttribute baseDNStub =
-             new DNConfigAttribute(ATTR_BACKEND_BASE_DN, getMessage(msgID),
+             new DNConfigAttribute(ATTR_BACKEND_BASE_DN, msg,
                                    true, true, true);
         DNConfigAttribute baseDNAttr =
              (DNConfigAttribute) configEntry.getConfigAttribute(baseDNStub);
@@ -629,10 +618,9 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_DETERMINE_BASES_FOR_BACKEND;
-        String message = getMessage(msgID, String.valueOf(configEntry.getDN()),
-                                    getExceptionMessage(e));
-        throw new ConfigException(msgID, message, e);
+        Message message = ERR_CANNOT_DETERMINE_BASES_FOR_BACKEND.get(
+            String.valueOf(configEntry.getDN()), getExceptionMessage(e));
+        throw new ConfigException(message, e);
       }
 
       backendMap.put(backendID, baseDNs);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/ManageAccount.java b/opendj-sdk/opends/src/server/org/opends/server/tools/ManageAccount.java
index b2c440b..fb22243 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/ManageAccount.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/ManageAccount.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -55,8 +56,7 @@
 
 import static org.opends.server.extensions.
                    PasswordPolicyStateExtendedOperation.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -598,8 +598,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_PWPSTATE_CANNOT_SEND_REQUEST_EXTOP;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_PWPSTATE_CANNOT_SEND_REQUEST_EXTOP.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_SERVER_DOWN;
       }
@@ -612,8 +612,8 @@
         LDAPMessage responseMessage = ldapReader.readMessage();
         if (responseMessage == null)
         {
-          int    msgID   = MSGID_PWPSTATE_CONNECTION_CLOSED_READING_RESPONSE;
-          String message = getMessage(msgID);
+          Message message =
+                  ERR_PWPSTATE_CONNECTION_CLOSED_READING_RESPONSE.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_SERVER_DOWN;
         }
@@ -624,9 +624,8 @@
         int resultCode = extendedResponse.getResultCode();
         if (resultCode != LDAPResultCode.SUCCESS)
         {
-          int msgID = MSGID_PWPSTATE_REQUEST_FAILED;
-          String message =
-               getMessage(msgID, resultCode,
+          Message message =
+               ERR_PWPSTATE_REQUEST_FAILED.get(resultCode,
                           LDAPResultCode.toString(resultCode),
                           String.valueOf(extendedResponse.getErrorMessage()));
           err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -640,8 +639,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_PWPSTATE_CANNOT_DECODE_RESPONSE_MESSAGE;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_PWPSTATE_CANNOT_DECODE_RESPONSE_MESSAGE.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_SERVER_DOWN;
       }
@@ -669,8 +668,8 @@
         }
         catch (Exception e)
         {
-          int msgID = MSGID_PWPSTATE_CANNOT_DECODE_RESPONSE_OP;
-          String message = getMessage(msgID, getExceptionMessage(e));
+          Message message = ERR_PWPSTATE_CANNOT_DECODE_RESPONSE_OP.get(
+                  getExceptionMessage(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           continue;
         }
@@ -678,109 +677,118 @@
         switch (opType)
         {
           case OP_GET_PASSWORD_POLICY_DN:
-            int msgID = MSGID_PWPSTATE_LABEL_PASSWORD_POLICY_DN;
-            printLabelAndValues(msgID, opValues);
+            Message message = INFO_PWPSTATE_LABEL_PASSWORD_POLICY_DN.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_ACCOUNT_DISABLED_STATE:
-            msgID = MSGID_PWPSTATE_LABEL_ACCOUNT_DISABLED_STATE;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_ACCOUNT_DISABLED_STATE.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_ACCOUNT_EXPIRATION_TIME:
-            msgID = MSGID_PWPSTATE_LABEL_ACCOUNT_EXPIRATION_TIME;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_ACCOUNT_EXPIRATION_TIME.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_SECONDS_UNTIL_ACCOUNT_EXPIRATION:
-            msgID = MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_ACCOUNT_EXPIRATION;
-            printLabelAndValues(msgID, opValues);
+            message =
+                    INFO_PWPSTATE_LABEL_SECONDS_UNTIL_ACCOUNT_EXPIRATION.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_PASSWORD_CHANGED_TIME:
-            msgID = MSGID_PWPSTATE_LABEL_PASSWORD_CHANGED_TIME;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_PASSWORD_CHANGED_TIME.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_PASSWORD_EXPIRATION_WARNED_TIME:
-            msgID = MSGID_PWPSTATE_LABEL_PASSWORD_EXPIRATION_WARNED_TIME;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_PASSWORD_EXPIRATION_WARNED_TIME.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_SECONDS_UNTIL_PASSWORD_EXPIRATION:
-            msgID = MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_EXPIRATION;
-            printLabelAndValues(msgID, opValues);
+            message =
+                    INFO_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_EXPIRATION.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_SECONDS_UNTIL_PASSWORD_EXPIRATION_WARNING:
-            msgID =
-                 MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_EXPIRATION_WARNING;
-            printLabelAndValues(msgID, opValues);
+            message =
+                  INFO_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_EXPIRATION_WARNING
+                          .get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_AUTHENTICATION_FAILURE_TIMES:
-            msgID = MSGID_PWPSTATE_LABEL_AUTH_FAILURE_TIMES;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_AUTH_FAILURE_TIMES.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_SECONDS_UNTIL_AUTHENTICATION_FAILURE_UNLOCK:
-            msgID = MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_AUTH_FAILURE_UNLOCK;
-            printLabelAndValues(msgID, opValues);
+            message =
+                    INFO_PWPSTATE_LABEL_SECONDS_UNTIL_AUTH_FAILURE_UNLOCK.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_REMAINING_AUTHENTICATION_FAILURE_COUNT:
-            msgID = MSGID_PWPSTATE_LABEL_REMAINING_AUTH_FAILURE_COUNT;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_REMAINING_AUTH_FAILURE_COUNT.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_LAST_LOGIN_TIME:
-            msgID = MSGID_PWPSTATE_LABEL_LAST_LOGIN_TIME;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_LAST_LOGIN_TIME.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_SECONDS_UNTIL_IDLE_LOCKOUT:
-            msgID = MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_IDLE_LOCKOUT;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_SECONDS_UNTIL_IDLE_LOCKOUT.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_PASSWORD_RESET_STATE:
-            msgID = MSGID_PWPSTATE_LABEL_PASSWORD_RESET_STATE;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_PASSWORD_RESET_STATE.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_SECONDS_UNTIL_PASSWORD_RESET_LOCKOUT:
-            msgID = MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_RESET_LOCKOUT;
-            printLabelAndValues(msgID, opValues);
+            message =
+                    INFO_PWPSTATE_LABEL_SECONDS_UNTIL_PASSWORD_RESET_LOCKOUT
+                            .get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_GRACE_LOGIN_USE_TIMES:
-            msgID = MSGID_PWPSTATE_LABEL_GRACE_LOGIN_USE_TIMES;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_GRACE_LOGIN_USE_TIMES.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_REMAINING_GRACE_LOGIN_COUNT:
-            msgID = MSGID_PWPSTATE_LABEL_REMAINING_GRACE_LOGIN_COUNT;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_REMAINING_GRACE_LOGIN_COUNT.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_PASSWORD_CHANGED_BY_REQUIRED_TIME:
-            msgID = MSGID_PWPSTATE_LABEL_PASSWORD_CHANGED_BY_REQUIRED_TIME;
-            printLabelAndValues(msgID, opValues);
+            message =
+                    INFO_PWPSTATE_LABEL_PASSWORD_CHANGED_BY_REQUIRED_TIME.get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_SECONDS_UNTIL_REQUIRED_CHANGE_TIME:
-            msgID = MSGID_PWPSTATE_LABEL_SECONDS_UNTIL_REQUIRED_CHANGE_TIME;
-            printLabelAndValues(msgID, opValues);
+            message =
+                    INFO_PWPSTATE_LABEL_SECONDS_UNTIL_REQUIRED_CHANGE_TIME
+                            .get();
+            printLabelAndValues(message, opValues);
             break;
 
           case OP_GET_PASSWORD_HISTORY:
-            msgID = MSGID_PWPSTATE_LABEL_PASSWORD_HISTORY;
-            printLabelAndValues(msgID, opValues);
+            message = INFO_PWPSTATE_LABEL_PASSWORD_HISTORY.get();
+            printLabelAndValues(message, opValues);
             break;
 
           default:
-            msgID = MSGID_PWPSTATE_INVALID_RESPONSE_OP_TYPE;
-            String message = getMessage(msgID, opType);
+            message = ERR_PWPSTATE_INVALID_RESPONSE_OP_TYPE.get(
+                    String.valueOf(opType));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             break;
         }
@@ -813,9 +821,9 @@
    */
   private static int parseArgsAndConnect(String[] args)
   {
-    int msgID = MSGID_PWPSTATE_TOOL_DESCRIPTION;
-    argParser = new SubCommandArgumentParser(CLASS_NAME, getMessage(msgID),
-                                             false);
+    argParser = new SubCommandArgumentParser(
+            CLASS_NAME, INFO_PWPSTATE_TOOL_DESCRIPTION.get(),
+            false);
 
     BooleanArgument   showUsage;
     BooleanArgument   trustAll;
@@ -841,61 +849,65 @@
       host = new StringArgument("host", OPTION_SHORT_HOST,
                                 OPTION_LONG_HOST, false, false, true,
                                 OPTION_VALUE_HOST, "127.0.0.1", null,
-                                MSGID_PWPSTATE_DESCRIPTION_HOST);
+                                INFO_PWPSTATE_DESCRIPTION_HOST.get());
       argParser.addGlobalArgument(host);
 
-      port = new IntegerArgument("port", OPTION_SHORT_PORT,
-                                 OPTION_LONG_PORT, false, false, true,
-                                 OPTION_VALUE_PORT, 389, null, true, 1,
-                                 true, 65535, MSGID_PWPSTATE_DESCRIPTION_PORT);
+      port = new IntegerArgument(
+              "port", OPTION_SHORT_PORT,
+              OPTION_LONG_PORT, false, false, true,
+              OPTION_VALUE_PORT, 389, null, true, 1,
+              true, 65535, INFO_PWPSTATE_DESCRIPTION_PORT.get());
       argParser.addGlobalArgument(port);
 
       useSSL = new BooleanArgument("usessl", OPTION_SHORT_USE_SSL,
                                    OPTION_LONG_USE_SSL,
-                                   MSGID_PWPSTATE_DESCRIPTION_USESSL);
+                                   INFO_PWPSTATE_DESCRIPTION_USESSL.get());
       argParser.addGlobalArgument(useSSL);
 
-      useStartTLS = new BooleanArgument("usestarttls", OPTION_SHORT_START_TLS,
-                                        OPTION_LONG_START_TLS,
-                                        MSGID_PWPSTATE_DESCRIPTION_USESTARTTLS);
+      useStartTLS = new BooleanArgument(
+              "usestarttls", OPTION_SHORT_START_TLS,
+              OPTION_LONG_START_TLS,
+              INFO_PWPSTATE_DESCRIPTION_USESTARTTLS.get());
       argParser.addGlobalArgument(useStartTLS);
 
       bindDN = new StringArgument("binddn", OPTION_SHORT_BINDDN,
                                   OPTION_LONG_BINDDN, false, false, true,
                                   OPTION_VALUE_BINDDN, null, null,
-                                  MSGID_PWPSTATE_DESCRIPTION_BINDDN);
+                                  INFO_PWPSTATE_DESCRIPTION_BINDDN.get());
       argParser.addGlobalArgument(bindDN);
 
       bindPW = new StringArgument("bindpw", OPTION_SHORT_BINDPWD,
                                   OPTION_LONG_BINDPWD, false, false,
                                   true,
                                   OPTION_VALUE_BINDPWD, null, null,
-                                  MSGID_PWPSTATE_DESCRIPTION_BINDPW);
+                                  INFO_PWPSTATE_DESCRIPTION_BINDPW.get());
       argParser.addGlobalArgument(bindPW);
 
-      bindPWFile = new FileBasedArgument("bindpwfile",
-                                         OPTION_SHORT_BINDPWD_FILE,
-                                         OPTION_LONG_BINDPWD_FILE,
-                                         false, false,
-                                         OPTION_VALUE_BINDPWD_FILE,
-                                         null, null,
-                                         MSGID_PWPSTATE_DESCRIPTION_BINDPWFILE);
+      bindPWFile = new FileBasedArgument(
+              "bindpwfile",
+              OPTION_SHORT_BINDPWD_FILE,
+              OPTION_LONG_BINDPWD_FILE,
+              false, false,
+              OPTION_VALUE_BINDPWD_FILE,
+              null, null,
+              INFO_PWPSTATE_DESCRIPTION_BINDPWFILE.get());
       argParser.addGlobalArgument(bindPWFile);
 
       targetDN = new StringArgument("targetdn", 'b', "targetDN", true, false,
                                     true, "{targetDN}", null, null,
-                                    MSGID_PWPSTATE_DESCRIPTION_TARGETDN);
+                                    INFO_PWPSTATE_DESCRIPTION_TARGETDN.get());
       argParser.addGlobalArgument(targetDN);
 
-      saslOption = new StringArgument("sasloption", OPTION_SHORT_SASLOPTION,
-                                      OPTION_LONG_SASLOPTION, false,
-                                      true, true,
-                                      OPTION_VALUE_SASLOPTION, null, null,
-                                      MSGID_PWPSTATE_DESCRIPTION_SASLOPTIONS);
+      saslOption = new StringArgument(
+              "sasloption", OPTION_SHORT_SASLOPTION,
+              OPTION_LONG_SASLOPTION, false,
+              true, true,
+              OPTION_VALUE_SASLOPTION, null, null,
+              INFO_PWPSTATE_DESCRIPTION_SASLOPTIONS.get());
       argParser.addGlobalArgument(saslOption);
 
       trustAll = new BooleanArgument("trustall", 'X', "trustAll",
-                                     MSGID_PWPSTATE_DESCRIPTION_TRUST_ALL);
+                                     INFO_PWPSTATE_DESCRIPTION_TRUST_ALL.get());
       argParser.addGlobalArgument(trustAll);
 
       keyStoreFile = new StringArgument("keystorefile",
@@ -904,7 +916,7 @@
                                         false, false, true,
                                         OPTION_VALUE_KEYSTOREPATH,
                                         null, null,
-                                        MSGID_PWPSTATE_DESCRIPTION_KSFILE);
+                                        INFO_PWPSTATE_DESCRIPTION_KSFILE.get());
       argParser.addGlobalArgument(keyStoreFile);
 
       keyStorePW = new StringArgument("keystorepw", OPTION_SHORT_KEYSTORE_PWD,
@@ -912,35 +924,38 @@
                                       false, false, true,
                                       OPTION_VALUE_KEYSTORE_PWD,
                                       null, null,
-                                      MSGID_PWPSTATE_DESCRIPTION_KSPW);
+                                      INFO_PWPSTATE_DESCRIPTION_KSPW.get());
       argParser.addGlobalArgument(keyStorePW);
 
       keyStorePWFile = new FileBasedArgument("keystorepwfile",
                                 OPTION_SHORT_KEYSTORE_PWD_FILE,
                                 OPTION_LONG_KEYSTORE_PWD_FILE, false, false,
                                 OPTION_VALUE_KEYSTORE_PWD_FILE, null, null,
-                                MSGID_PWPSTATE_DESCRIPTION_KSPWFILE);
+                                INFO_PWPSTATE_DESCRIPTION_KSPWFILE.get());
       argParser.addGlobalArgument(keyStorePWFile);
 
-      certNickname = new StringArgument("certnickname", 'N', "certNickname",
-                                        false, false, true, "{nickname}", null,
-                                        null, MSGID_DESCRIPTION_CERT_NICKNAME);
+      certNickname = new StringArgument(
+              "certnickname", 'N', "certNickname",
+              false, false, true, "{nickname}", null,
+              null, INFO_DESCRIPTION_CERT_NICKNAME.get());
       argParser.addGlobalArgument(certNickname);
 
-      trustStoreFile = new StringArgument("truststorefile",
-                                          OPTION_SHORT_TRUSTSTOREPATH,
-                                          OPTION_LONG_TRUSTSTOREPATH,
-                                          false, false, true,
-                                          OPTION_VALUE_TRUSTSTOREPATH,
-                                          null, null,
-                                          MSGID_PWPSTATE_DESCRIPTION_TSFILE);
+      trustStoreFile = new StringArgument(
+              "truststorefile",
+              OPTION_SHORT_TRUSTSTOREPATH,
+              OPTION_LONG_TRUSTSTOREPATH,
+              false, false, true,
+              OPTION_VALUE_TRUSTSTOREPATH,
+              null, null,
+              INFO_PWPSTATE_DESCRIPTION_TSFILE.get());
       argParser.addGlobalArgument(trustStoreFile);
 
-      trustStorePW = new StringArgument("truststorepw", 'T',
-                                        OPTION_LONG_TRUSTSTORE_PWD,
-                                        false, false,
-                                        true, OPTION_VALUE_TRUSTSTORE_PWD, null,
-                                        null, MSGID_PWPSTATE_DESCRIPTION_TSPW);
+      trustStorePW = new StringArgument(
+              "truststorepw", 'T',
+              OPTION_LONG_TRUSTSTORE_PWD,
+              false, false,
+              true, OPTION_VALUE_TRUSTSTORE_PWD, null,
+              null, INFO_PWPSTATE_DESCRIPTION_TSPW.get());
       argParser.addGlobalArgument(trustStorePW);
 
       trustStorePWFile = new FileBasedArgument("truststorepwfile",
@@ -948,12 +963,13 @@
                                   OPTION_LONG_TRUSTSTORE_PWD_FILE,
                                   false, false,
                                   OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
-                                  MSGID_PWPSTATE_DESCRIPTION_TSPWFILE);
+                                  INFO_PWPSTATE_DESCRIPTION_TSPWFILE.get());
       argParser.addGlobalArgument(trustStorePWFile);
 
-      showUsage = new BooleanArgument("showusage", OPTION_SHORT_HELP,
-                                      OPTION_LONG_HELP,
-                                      MSGID_PWPSTATE_DESCRIPTION_SHOWUSAGE);
+      showUsage = new BooleanArgument(
+              "showusage", OPTION_SHORT_HELP,
+              OPTION_LONG_HELP,
+              INFO_PWPSTATE_DESCRIPTION_SHOWUSAGE.get());
       argParser.addGlobalArgument(showUsage);
       argParser.setUsageArgument(showUsage, out);
 
@@ -963,203 +979,217 @@
       booleanValues.add("false");
 
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_ALL;
-      new SubCommand(argParser, SC_GET_ALL, msgID);
+      Message msg = INFO_DESCRIPTION_PWPSTATE_GET_ALL.get();
+      new SubCommand(argParser, SC_GET_ALL, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_POLICY_DN;
-      new SubCommand(argParser, SC_GET_PASSWORD_POLICY_DN, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_POLICY_DN.get();
+      new SubCommand(argParser, SC_GET_PASSWORD_POLICY_DN, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_ACCOUNT_DISABLED_STATE;
-      new SubCommand(argParser, SC_GET_ACCOUNT_DISABLED_STATE, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_ACCOUNT_DISABLED_STATE.get();
+      new SubCommand(argParser, SC_GET_ACCOUNT_DISABLED_STATE, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_SET_ACCOUNT_DISABLED_STATE;
+      msg = INFO_DESCRIPTION_PWPSTATE_SET_ACCOUNT_DISABLED_STATE.get();
       SubCommand sc = new SubCommand(argParser, SC_SET_ACCOUNT_DISABLED_STATE,
-                                     msgID);
+                                     msg);
       sc.addArgument(new MultiChoiceArgument(ARG_OP_VALUE, 'O',
                               "operationValue", true, false, true,
                               "{true|false}", null, null, booleanValues, false,
-                              MSGID_DESCRIPTION_OPERATION_BOOLEAN_VALUE));
+                              INFO_DESCRIPTION_OPERATION_BOOLEAN_VALUE.get()));
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_CLEAR_ACCOUNT_DISABLED_STATE;
-      new SubCommand(argParser, SC_CLEAR_ACCOUNT_DISABLED_STATE, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_CLEAR_ACCOUNT_DISABLED_STATE.get();
+      new SubCommand(argParser, SC_CLEAR_ACCOUNT_DISABLED_STATE, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_ACCOUNT_EXPIRATION_TIME;
-      new SubCommand(argParser, SC_GET_ACCOUNT_EXPIRATION_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_ACCOUNT_EXPIRATION_TIME.get();
+      new SubCommand(argParser, SC_GET_ACCOUNT_EXPIRATION_TIME, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_SET_ACCOUNT_EXPIRATION_TIME;
-      sc = new SubCommand(argParser, SC_SET_ACCOUNT_EXPIRATION_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_SET_ACCOUNT_EXPIRATION_TIME.get();
+      sc = new SubCommand(argParser, SC_SET_ACCOUNT_EXPIRATION_TIME, msg);
       sc.addArgument(new StringArgument(ARG_OP_VALUE, 'O', "operationValue",
                               false, false, true, "{time}", null, null,
-                              MSGID_DESCRIPTION_OPERATION_TIME_VALUE));
+                              INFO_DESCRIPTION_OPERATION_TIME_VALUE.get()));
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_CLEAR_ACCOUNT_EXPIRATION_TIME;
-      sc = new SubCommand(argParser, SC_CLEAR_ACCOUNT_EXPIRATION_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_CLEAR_ACCOUNT_EXPIRATION_TIME.get();
+      sc = new SubCommand(argParser, SC_CLEAR_ACCOUNT_EXPIRATION_TIME, msg);
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_ACCOUNT_EXPIRATION;
-      new SubCommand(argParser, SC_GET_SECONDS_UNTIL_ACCOUNT_EXPIRATION, msgID);
+      msg =
+              INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_ACCOUNT_EXPIRATION
+                      .get();
+      new SubCommand(argParser,
+              SC_GET_SECONDS_UNTIL_ACCOUNT_EXPIRATION,
+              msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_CHANGED_TIME;
-      new SubCommand(argParser, SC_GET_PASSWORD_CHANGED_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_CHANGED_TIME.get();
+      new SubCommand(argParser, SC_GET_PASSWORD_CHANGED_TIME, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_SET_PASSWORD_CHANGED_TIME;
-      sc = new SubCommand(argParser, SC_SET_PASSWORD_CHANGED_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_SET_PASSWORD_CHANGED_TIME.get();
+      sc = new SubCommand(argParser, SC_SET_PASSWORD_CHANGED_TIME, msg);
       sc.addArgument(new StringArgument(ARG_OP_VALUE, 'O', "operationValue",
                               false, false, true, "{time}", null, null,
-                              MSGID_DESCRIPTION_OPERATION_TIME_VALUE));
+                              INFO_DESCRIPTION_OPERATION_TIME_VALUE.get()));
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_CHANGED_TIME;
-      sc = new SubCommand(argParser, SC_CLEAR_PASSWORD_CHANGED_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_CHANGED_TIME.get();
+      sc = new SubCommand(argParser, SC_CLEAR_PASSWORD_CHANGED_TIME, msg);
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_EXPIRATION_WARNED_TIME;
-      new SubCommand(argParser, SC_GET_PASSWORD_EXP_WARNED_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_EXPIRATION_WARNED_TIME
+              .get();
+      new SubCommand(argParser, SC_GET_PASSWORD_EXP_WARNED_TIME, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_SET_PASSWORD_EXPIRATION_WARNED_TIME;
-      sc = new SubCommand(argParser, SC_SET_PASSWORD_EXP_WARNED_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_SET_PASSWORD_EXPIRATION_WARNED_TIME
+              .get();
+      sc = new SubCommand(argParser, SC_SET_PASSWORD_EXP_WARNED_TIME, msg);
       sc.addArgument(new StringArgument(ARG_OP_VALUE, 'O', "operationValue",
                               false, false, true, "{time}", null, null,
-                              MSGID_DESCRIPTION_OPERATION_TIME_VALUE));
+                              INFO_DESCRIPTION_OPERATION_TIME_VALUE.get()));
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_EXPIRATION_WARNED_TIME;
-      sc = new SubCommand(argParser, SC_CLEAR_PASSWORD_EXP_WARNED_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_EXPIRATION_WARNED_TIME
+              .get();
+      sc = new SubCommand(argParser, SC_CLEAR_PASSWORD_EXP_WARNED_TIME, msg);
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_PASSWORD_EXP;
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_PASSWORD_EXP.get();
       new SubCommand(argParser, SC_GET_SECONDS_UNTIL_PASSWORD_EXPIRATION,
-                     msgID);
+                     msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_PASSWORD_EXP_WARNING;
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_PASSWORD_EXP_WARNING
+              .get();
       new SubCommand(argParser,
-                     SC_GET_SECONDS_UNTIL_PASSWORD_EXPIRATION_WARNING, msgID);
+                     SC_GET_SECONDS_UNTIL_PASSWORD_EXPIRATION_WARNING, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_AUTH_FAILURE_TIMES;
-      new SubCommand(argParser, SC_GET_AUTHENTICATION_FAILURE_TIMES, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_AUTH_FAILURE_TIMES.get();
+      new SubCommand(argParser, SC_GET_AUTHENTICATION_FAILURE_TIMES, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_ADD_AUTH_FAILURE_TIME;
-      sc = new SubCommand(argParser, SC_ADD_AUTHENTICATION_FAILURE_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_ADD_AUTH_FAILURE_TIME.get();
+      sc = new SubCommand(argParser, SC_ADD_AUTHENTICATION_FAILURE_TIME,
+              msg);
       sc.addArgument(new StringArgument(ARG_OP_VALUE, 'O', "operationValue",
                               false, true, true, "{time}", null, null,
-                              MSGID_DESCRIPTION_OPERATION_TIME_VALUE));
+                              INFO_DESCRIPTION_OPERATION_TIME_VALUE.get()));
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_SET_AUTH_FAILURE_TIMES;
+      msg = INFO_DESCRIPTION_PWPSTATE_SET_AUTH_FAILURE_TIMES.get();
       sc = new SubCommand(argParser, SC_SET_AUTHENTICATION_FAILURE_TIMES,
-                          msgID);
+                          msg);
       sc.addArgument(new StringArgument(ARG_OP_VALUE, 'O', "operationValue",
                               false, true, true, "{time}", null, null,
-                              MSGID_DESCRIPTION_OPERATION_TIME_VALUES));
+                              INFO_DESCRIPTION_OPERATION_TIME_VALUES.get()));
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_CLEAR_AUTH_FAILURE_TIMES;
+      msg = INFO_DESCRIPTION_PWPSTATE_CLEAR_AUTH_FAILURE_TIMES.get();
       sc = new SubCommand(argParser, SC_CLEAR_AUTHENTICATION_FAILURE_TIMES,
-                          msgID);
+                          msg);
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_AUTH_FAILURE_UNLOCK;
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_AUTH_FAILURE_UNLOCK
+              .get();
       new SubCommand(argParser,
-                     SC_GET_SECONDS_UNTIL_AUTHENTICATION_FAILURE_UNLOCK, msgID);
+                     SC_GET_SECONDS_UNTIL_AUTHENTICATION_FAILURE_UNLOCK,
+                     msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_REMAINING_AUTH_FAILURE_COUNT;
+      msg =
+              INFO_DESCRIPTION_PWPSTATE_GET_REMAINING_AUTH_FAILURE_COUNT.get();
       new SubCommand(argParser, SC_GET_REMAINING_AUTHENTICATION_FAILURE_COUNT,
-                     msgID);
+                     msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_LAST_LOGIN_TIME;
-      new SubCommand(argParser, SC_GET_LAST_LOGIN_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_LAST_LOGIN_TIME.get();
+      new SubCommand(argParser, SC_GET_LAST_LOGIN_TIME, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_SET_LAST_LOGIN_TIME;
-      sc = new SubCommand(argParser, SC_SET_LAST_LOGIN_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_SET_LAST_LOGIN_TIME.get();
+      sc = new SubCommand(argParser, SC_SET_LAST_LOGIN_TIME, msg);
       sc.addArgument(new StringArgument(ARG_OP_VALUE, 'O', "operationValue",
                               false, false, true, "{time}", null, null,
-                              MSGID_DESCRIPTION_OPERATION_TIME_VALUE));
+                              INFO_DESCRIPTION_OPERATION_TIME_VALUE.get()));
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_CLEAR_LAST_LOGIN_TIME;
-      sc = new SubCommand(argParser, SC_CLEAR_LAST_LOGIN_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_CLEAR_LAST_LOGIN_TIME.get();
+      sc = new SubCommand(argParser, SC_CLEAR_LAST_LOGIN_TIME, msg);
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_IDLE_LOCKOUT;
-      new SubCommand(argParser, SC_GET_SECONDS_UNTIL_IDLE_LOCKOUT, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_IDLE_LOCKOUT.get();
+      new SubCommand(argParser, SC_GET_SECONDS_UNTIL_IDLE_LOCKOUT, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_RESET_STATE;
-      new SubCommand(argParser, SC_GET_PASSWORD_RESET_STATE, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_RESET_STATE.get();
+      new SubCommand(argParser, SC_GET_PASSWORD_RESET_STATE, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_SET_PASSWORD_RESET_STATE;
-      sc = new SubCommand(argParser, SC_SET_PASSWORD_RESET_STATE, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_SET_PASSWORD_RESET_STATE.get();
+      sc = new SubCommand(argParser, SC_SET_PASSWORD_RESET_STATE, msg);
       sc.addArgument(new MultiChoiceArgument(ARG_OP_VALUE, 'O',
                               "operationValue", true, false, true,
                               "{true|false}", null, null, booleanValues, false,
-                              MSGID_DESCRIPTION_OPERATION_BOOLEAN_VALUE));
+                              INFO_DESCRIPTION_OPERATION_BOOLEAN_VALUE.get()));
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_RESET_STATE;
-      sc = new SubCommand(argParser, SC_CLEAR_PASSWORD_RESET_STATE, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_RESET_STATE.get();
+      sc = new SubCommand(argParser, SC_CLEAR_PASSWORD_RESET_STATE, msg);
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_RESET_LOCKOUT;
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_RESET_LOCKOUT.get();
       new SubCommand(argParser, SC_GET_SECONDS_UNTIL_PASSWORD_RESET_LOCKOUT,
-                     msgID);
+                     msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_GRACE_LOGIN_USE_TIMES;
-      new SubCommand(argParser, SC_GET_GRACE_LOGIN_USE_TIMES, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_GRACE_LOGIN_USE_TIMES.get();
+      new SubCommand(argParser, SC_GET_GRACE_LOGIN_USE_TIMES, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_ADD_GRACE_LOGIN_USE_TIME;
-      sc = new SubCommand(argParser, SC_ADD_GRACE_LOGIN_USE_TIME, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_ADD_GRACE_LOGIN_USE_TIME.get();
+      sc = new SubCommand(argParser, SC_ADD_GRACE_LOGIN_USE_TIME, msg);
       sc.addArgument(new StringArgument(ARG_OP_VALUE, 'O', "operationValue",
                               false, true, true, "{time}", null, null,
-                              MSGID_DESCRIPTION_OPERATION_TIME_VALUE));
+                              INFO_DESCRIPTION_OPERATION_TIME_VALUE.get()));
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_SET_GRACE_LOGIN_USE_TIMES;
-      sc = new SubCommand(argParser, SC_SET_GRACE_LOGIN_USE_TIMES, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_SET_GRACE_LOGIN_USE_TIMES.get();
+      sc = new SubCommand(argParser, SC_SET_GRACE_LOGIN_USE_TIMES, msg);
       sc.addArgument(new StringArgument(ARG_OP_VALUE, 'O', "operationValue",
                               false, true, true, "{time}", null, null,
-                              MSGID_DESCRIPTION_OPERATION_TIME_VALUES));
+                              INFO_DESCRIPTION_OPERATION_TIME_VALUES.get()));
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_CLEAR_GRACE_LOGIN_USE_TIMES;
-      sc = new SubCommand(argParser, SC_CLEAR_GRACE_LOGIN_USE_TIMES, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_CLEAR_GRACE_LOGIN_USE_TIMES.get();
+      sc = new SubCommand(argParser, SC_CLEAR_GRACE_LOGIN_USE_TIMES, msg);
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_REMAINING_GRACE_LOGIN_COUNT;
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_REMAINING_GRACE_LOGIN_COUNT.get();
       new SubCommand(argParser, SC_GET_REMAINING_GRACE_LOGIN_COUNT,
-                     msgID);
+                     msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_PW_CHANGED_BY_REQUIRED_TIME;
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_PW_CHANGED_BY_REQUIRED_TIME.get();
       new SubCommand(argParser, SC_GET_PASSWORD_CHANGED_BY_REQUIRED_TIME,
-                     msgID);
+                     msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_SET_PW_CHANGED_BY_REQUIRED_TIME;
+      msg = INFO_DESCRIPTION_PWPSTATE_SET_PW_CHANGED_BY_REQUIRED_TIME.get();
       sc = new SubCommand(argParser, SC_SET_PASSWORD_CHANGED_BY_REQUIRED_TIME,
-                          msgID);
+                          msg);
       sc.addArgument(new StringArgument(ARG_OP_VALUE, 'O', "operationValue",
                               false, false, true, "{time}", null, null,
-                              MSGID_DESCRIPTION_OPERATION_TIME_VALUE));
+                              INFO_DESCRIPTION_OPERATION_TIME_VALUE.get()));
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_CLEAR_PW_CHANGED_BY_REQUIRED_TIME;
+      msg =
+              INFO_DESCRIPTION_PWPSTATE_CLEAR_PW_CHANGED_BY_REQUIRED_TIME.get();
       sc = new SubCommand(argParser, SC_CLEAR_PASSWORD_CHANGED_BY_REQUIRED_TIME,
-                          msgID);
+                          msg);
       sc.setHidden(true);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_REQUIRED_CHANGE_TIME;
+      msg =
+              INFO_DESCRIPTION_PWPSTATE_GET_SECONDS_UNTIL_REQUIRED_CHANGE_TIME
+                      .get();
       new SubCommand(argParser, SC_GET_SECONDS_UNTIL_REQUIRED_CHANGE_TIME,
-                     msgID);
+                     msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_GET_PASSWORD_HISTORY;
-      new SubCommand(argParser, SC_GET_PASSWORD_HISTORY, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_HISTORY.get();
+      new SubCommand(argParser, SC_GET_PASSWORD_HISTORY, msg);
 
-      msgID = MSGID_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_HISTORY;
-      sc = new SubCommand(argParser, SC_CLEAR_PASSWORD_HISTORY, msgID);
+      msg = INFO_DESCRIPTION_PWPSTATE_CLEAR_PASSWORD_HISTORY.get();
+      sc = new SubCommand(argParser, SC_CLEAR_PASSWORD_HISTORY, msg);
       sc.setHidden(true);
     }
     catch (ArgumentException ae)
     {
-      msgID = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
@@ -1171,8 +1201,7 @@
     }
     catch (ArgumentException ae)
     {
-      msgID = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -1205,8 +1234,8 @@
     {
       if (useStartTLS.isPresent())
       {
-        msgID = MSGID_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS;
-        String message = getMessage(msgID, useSSL.getLongIdentifier(),
+        Message message = ERR_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+                useSSL.getLongIdentifier(),
                                     useStartTLS.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
@@ -1248,8 +1277,8 @@
       }
       catch (SSLConnectionException sce)
       {
-        msgID = MSGID_PWPSTATE_CANNOT_INITIALIZE_SSL;
-        String message = getMessage(msgID, sce.getMessage());
+        Message message = ERR_PWPSTATE_CANNOT_INITIALIZE_SSL.get(
+                sce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
       }
@@ -1268,8 +1297,7 @@
         int equalPos = s.indexOf('=');
         if (equalPos <= 0)
         {
-          msgID = MSGID_PWPSTATE_CANNOT_PARSE_SASL_OPTION;
-          String message = getMessage(msgID, s);
+          Message message = ERR_PWPSTATE_CANNOT_PARSE_SASL_OPTION.get(s);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
@@ -1290,8 +1318,7 @@
 
       if (mechanism == null)
       {
-        msgID = MSGID_PWPSTATE_NO_SASL_MECHANISM;
-        String message = getMessage(msgID);
+        Message message = ERR_PWPSTATE_NO_SASL_MECHANISM.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
       }
@@ -1316,16 +1343,15 @@
     }
     catch (ArgumentException ae)
     {
-      msgID = MSGID_PWPSTATE_CANNOT_DETERMINE_PORT;
-      String message = getMessage(msgID, port.getLongIdentifier(),
-                                  ae.getMessage());
+      Message message = ERR_PWPSTATE_CANNOT_DETERMINE_PORT.get(
+              port.getLongIdentifier(),
+              ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
     }
     catch (LDAPConnectionException lce)
     {
-      msgID = MSGID_PWPSTATE_CANNOT_CONNECT;
-      String message = getMessage(msgID, lce.getMessage());
+      Message message = ERR_PWPSTATE_CANNOT_CONNECT.get(lce.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR;
     }
@@ -1353,8 +1379,7 @@
     SubCommand subCommand = argParser.getSubCommand();
     if (subCommand == null)
     {
-      msgID = MSGID_PWPSTATE_NO_SUBCOMMAND;
-      String message = getMessage(msgID);
+      Message message = ERR_PWPSTATE_NO_SUBCOMMAND.get();
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
@@ -1389,16 +1414,14 @@
         }
         else
         {
-          msgID = MSGID_PWPSTATE_INVALID_BOOLEAN_VALUE;
-          String message = getMessage(msgID, valueStr);
+          Message message = ERR_PWPSTATE_INVALID_BOOLEAN_VALUE.get(valueStr);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
       }
       else
       {
-        msgID = MSGID_PWPSTATE_NO_BOOLEAN_VALUE;
-        String message = getMessage(msgID);
+        Message message = ERR_PWPSTATE_NO_BOOLEAN_VALUE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
       }
@@ -1578,16 +1601,14 @@
         }
         else
         {
-          msgID = MSGID_PWPSTATE_INVALID_BOOLEAN_VALUE;
-          String message = getMessage(msgID, valueStr);
+          Message message = ERR_PWPSTATE_INVALID_BOOLEAN_VALUE.get(valueStr);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
       }
       else
       {
-        msgID = MSGID_PWPSTATE_NO_BOOLEAN_VALUE;
-        String message = getMessage(msgID);
+        Message message = ERR_PWPSTATE_NO_BOOLEAN_VALUE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
       }
@@ -1680,8 +1701,7 @@
     }
     else
     {
-      msgID = MSGID_PWPSTATE_INVALID_SUBCOMMAND;
-      String message = getMessage(msgID, subCommandName);
+      Message message = ERR_PWPSTATE_INVALID_SUBCOMMAND.get(subCommandName);
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
@@ -1696,12 +1716,12 @@
    * Prints information about a password policy state variable to standard
    * output.
    *
-   * @param  msgID   The message ID for the message to use as the label.
+   * @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(int msgID, ArrayList<String> values)
+  private static void printLabelAndValues(Message msg, ArrayList<String> values)
   {
-    String label = getMessage(msgID);
+    String label = String.valueOf(msg);
     if ((values == null) || values.isEmpty())
     {
       out.print(label);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/PromptTrustManager.java b/opendj-sdk/opends/src/server/org/opends/server/tools/PromptTrustManager.java
index da915bc..805aebd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/PromptTrustManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/PromptTrustManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -37,8 +38,7 @@
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -104,9 +104,8 @@
   public void checkClientTrusted(X509Certificate[] chain, String authType)
          throws CertificateException
   {
-    int    msgID   = MSGID_PROMPTTM_REJECTING_CLIENT_CERT;
-    String message = getMessage(msgID);
-    throw new CertificateException(message);
+    Message message = ERR_PROMPTTM_REJECTING_CLIENT_CERT.get();
+    throw new CertificateException(message.toString());
   }
 
 
@@ -126,7 +125,7 @@
   {
     if ((chain == null) || (chain.length == 0))
     {
-      System.out.println(getMessage(MSGID_PROMPTTM_NO_SERVER_CERT_CHAIN));
+      System.out.println(WARN_PROMPTTM_NO_SERVER_CERT_CHAIN.get());
     }
     else
     {
@@ -136,26 +135,26 @@
 
       if (currentDate.after(notAfterDate))
       {
-        int    msgID   = MSGID_PROMPTTM_CERT_EXPIRED;
-        String message = getMessage(msgID, String.valueOf(notAfterDate));
+        Message message = WARN_PROMPTTM_CERT_EXPIRED.get(
+                String.valueOf(notAfterDate));
         System.err.println(message);
       }
       else if (currentDate.before(notBeforeDate))
       {
-        int    msgID   = MSGID_PROMPTTM_CERT_NOT_YET_VALID;
-        String message = getMessage(msgID, String.valueOf(notBeforeDate));
+        Message message = WARN_PROMPTTM_CERT_NOT_YET_VALID.get(
+                String.valueOf(notBeforeDate));
         System.err.println(message);
       }
 
-      System.out.println(getMessage(MSGID_PROMPTTM_SERVER_CERT,
-                                    chain[0].getSubjectDN().getName(),
-                                    chain[0].getIssuerDN().getName(),
-                                    String.valueOf(notBeforeDate),
-                                    String.valueOf(notAfterDate)));
+      System.out.println(INFO_PROMPTTM_SERVER_CERT.get(
+              chain[0].getSubjectDN().getName(),
+              chain[0].getIssuerDN().getName(),
+              String.valueOf(notBeforeDate),
+              String.valueOf(notAfterDate)));
     }
 
 
-    String prompt = getMessage(MSGID_PROMPTTM_YESNO_PROMPT);
+    Message prompt = INFO_PROMPTTM_YESNO_PROMPT.get();
     BufferedReader reader =
          new BufferedReader(new InputStreamReader(System.in));
     while (true)
@@ -172,9 +171,8 @@
         }
         else if (line.equals("n") || line.equals("no"))
         {
-          int msgID = MSGID_PROMPTTM_USER_REJECTED;
-          String message = getMessage(msgID);
-          throw new CertificateException(message);
+          Message message = ERR_PROMPTTM_USER_REJECTED.get();
+          throw new CertificateException(message.toString());
         }
       } catch (IOException ioe) {}
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/RebuildIndex.java b/opendj-sdk/opends/src/server/org/opends/server/tools/RebuildIndex.java
index 5b5f9a3..e5a7973 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/RebuildIndex.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/RebuildIndex.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import static org.opends.server.util.StaticUtils.wrapText;
 import org.opends.server.util.args.ArgumentException;
@@ -33,13 +34,12 @@
 import org.opends.server.util.args.StringArgument;
 import org.opends.server.extensions.ConfigFileHandler;
 
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import org.opends.server.config.ConfigException;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import org.opends.server.loggers.ThreadFilterTextErrorLogPublisher;
 import org.opends.server.loggers.TextWriter;
 import org.opends.server.loggers.ErrorLogger;
-import static org.opends.server.messages.MessageHandler.getMessage;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.core.DirectoryServer;
@@ -134,7 +134,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_REBUILDINDEX_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_REBUILDINDEX_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.RebuildIndex",
                             toolDescription, false);
@@ -148,7 +148,7 @@
            new StringArgument("configclass", 'C', "configClass", true, false,
                               true, "{configClass}",
                               ConfigFileHandler.class.getName(), null,
-                              MSGID_DESCRIPTION_CONFIG_CLASS);
+                              INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -156,7 +156,7 @@
       configFile =
            new StringArgument("configfile", 'f', "configFile", true, false,
                               true, "{configFile}", null, null,
-                              MSGID_DESCRIPTION_CONFIG_FILE);
+                              INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -164,7 +164,7 @@
       baseDNString =
            new StringArgument("basedn", 'b', "baseDN", true, false, true,
                               "{baseDN}", null, null,
-                              MSGID_REBUILDINDEX_DESCRIPTION_BASE_DN);
+                              INFO_REBUILDINDEX_DESCRIPTION_BASE_DN.get());
       argParser.addArgument(baseDNString);
 
 
@@ -172,20 +172,19 @@
            new StringArgument("index", 'i', "index",
                               false, true, true,
                               "{index}", null, null,
-                              MSGID_REBUILDINDEX_DESCRIPTION_INDEX_NAME);
+                              INFO_REBUILDINDEX_DESCRIPTION_INDEX_NAME.get());
       argParser.addArgument(indexList);
 
 
       displayUsage =
            new BooleanArgument("help", 'H', "help",
-                               MSGID_DESCRIPTION_USAGE);
+                               INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(displayUsage);
       argParser.setUsageArgument(displayUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -199,8 +198,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -229,8 +227,7 @@
 
     if (indexList.getValues().size() <= 0)
     {
-      int    msgID   = MSGID_REBUILDINDEX_REQUIRES_AT_LEAST_ONE_INDEX;
-      String message = getMessage(msgID);
+      Message message = ERR_REBUILDINDEX_REQUIRES_AT_LEAST_ONE_INDEX.get();
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       out.println(argParser.getUsage());
@@ -250,8 +247,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SERVER_BOOTSTRAP_ERROR;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -263,15 +260,13 @@
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -285,22 +280,19 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -314,22 +306,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+                ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+                ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -342,22 +334,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -389,20 +381,16 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BASE_DN;
-      String message = getMessage(msgID, baseDNString.getValue(),
-                                  de.getErrorMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_DECODE_BASE_DN.get(
+          baseDNString.getValue(), de.getMessageObject());
+      logError(message);
       return 1;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BASE_DN;
-      String message = getMessage(msgID, baseDNString.getValue(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_DECODE_BASE_DN.get(
+          baseDNString.getValue(), getExceptionMessage(e));
+      logError(message);
       return 1;
     }
 
@@ -433,10 +421,9 @@
           }
           else
           {
-            int    msgID   = MSGID_MULTIPLE_BACKENDS_FOR_BASE;
-            String message = getMessage(msgID, baseDNString.getValue());
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message =
+                ERR_MULTIPLE_BACKENDS_FOR_BASE.get(baseDNString.getValue());
+            logError(message);
             return 1;
           }
           break;
@@ -446,19 +433,15 @@
 
     if (backend == null)
     {
-      int    msgID   = MSGID_NO_BACKENDS_FOR_BASE;
-      String message = getMessage(msgID, baseDNString.getValue());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_NO_BACKENDS_FOR_BASE.get(baseDNString.getValue());
+      logError(message);
       return 1;
     }
 
     if (!(backend instanceof BackendImpl))
     {
-      int    msgID   = MSGID_BACKEND_NO_INDEXING_SUPPORT;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_BACKEND_NO_INDEXING_SUPPORT.get();
+      logError(message);
       return 1;
     }
 
@@ -478,21 +461,17 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         return 1;
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return 1;
     }
 
@@ -505,10 +484,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_REBUILDINDEX_ERROR_DURING_REBUILD;
-      String message = getMessage(msgID, getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_REBUILDINDEX_ERROR_DURING_REBUILD.get(getExceptionMessage(e));
+      logError(message);
       returnCode = 1;
     }
     finally
@@ -520,20 +498,16 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-          int    msgID   = MSGID_REBUILDINDEX_CANNOT_UNLOCK_BACKEND;
-          String message = getMessage(msgID, backend.getBackendID(),
-                                      String.valueOf(failureReason));
-          logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                   message, msgID);
+          Message message = WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(
+              backend.getBackendID(), String.valueOf(failureReason));
+          logError(message);
         }
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_REBUILDINDEX_CANNOT_UNLOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    getExceptionMessage(e));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(
+            backend.getBackendID(), getExceptionMessage(e));
+        logError(message);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/RestoreDB.java b/opendj-sdk/opends/src/server/org/opends/server/tools/RestoreDB.java
index 50465ba..3a4b540 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/RestoreDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/RestoreDB.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -51,8 +52,6 @@
 import org.opends.server.types.BackupInfo;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.NullOutputStream;
 import org.opends.server.types.RestoreConfig;
@@ -62,8 +61,7 @@
 import org.opends.server.util.args.StringArgument;
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -160,7 +158,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_RESTOREDB_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_RESTOREDB_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.RestoreDB",
                             toolDescription, false);
@@ -175,7 +173,7 @@
                               OPTION_LONG_CONFIG_CLASS, true, false,
                               true, OPTION_VALUE_CONFIG_CLASS,
                               ConfigFileHandler.class.getName(), null,
-                              MSGID_DESCRIPTION_CONFIG_CLASS);
+                              INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -183,7 +181,7 @@
       configFile =
            new StringArgument("configfile", 'f', "configFile", true, false,
                               true, "{configFile}", null, null,
-                              MSGID_DESCRIPTION_CONFIG_FILE);
+                              INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -191,38 +189,39 @@
       backupIDString =
            new StringArgument("backupid", 'I', "backupID", false, false, true,
                               "{backupID}", null, null,
-                              MSGID_RESTOREDB_DESCRIPTION_BACKUP_ID);
+                              INFO_RESTOREDB_DESCRIPTION_BACKUP_ID.get());
       argParser.addArgument(backupIDString);
 
 
       backupDirectory =
            new StringArgument("backupdirectory", 'd', "backupDirectory", true,
                               false, true, "{backupDir}", null, null,
-                              MSGID_RESTOREDB_DESCRIPTION_BACKUP_DIR);
+                              INFO_RESTOREDB_DESCRIPTION_BACKUP_DIR.get());
       argParser.addArgument(backupDirectory);
 
 
-      listBackups = new BooleanArgument("listbackups", 'l', "listBackups",
-                                     MSGID_RESTOREDB_DESCRIPTION_LIST_BACKUPS);
+      listBackups = new BooleanArgument(
+              "listbackups", 'l', "listBackups",
+              INFO_RESTOREDB_DESCRIPTION_LIST_BACKUPS.get());
       argParser.addArgument(listBackups);
 
 
-      verifyOnly = new BooleanArgument("verifyonly", OPTION_SHORT_DRYRUN,
-                                       OPTION_LONG_DRYRUN,
-                                       MSGID_RESTOREDB_DESCRIPTION_VERIFY_ONLY);
+      verifyOnly = new BooleanArgument(
+              "verifyonly", OPTION_SHORT_DRYRUN,
+              OPTION_LONG_DRYRUN,
+              INFO_RESTOREDB_DESCRIPTION_VERIFY_ONLY.get());
       argParser.addArgument(verifyOnly);
 
 
       displayUsage =
            new BooleanArgument("help", OPTION_SHORT_HELP, OPTION_LONG_HELP,
-                               MSGID_DESCRIPTION_USAGE);
+                               INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(displayUsage);
       argParser.setUsageArgument(displayUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -236,8 +235,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -265,8 +263,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SERVER_BOOTSTRAP_ERROR;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -278,15 +276,13 @@
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -300,22 +296,19 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -329,22 +322,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+                ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+                ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -357,22 +350,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -405,11 +398,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY;
-      String message = getMessage(msgID, backupDirectory.getValue(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY.get(
+          backupDirectory.getValue(), getExceptionMessage(e));
+      logError(message);
       return 1;
     }
 
@@ -420,35 +411,40 @@
     {
       for (BackupInfo backupInfo : backupDir.getBackups().values())
       {
-        int    msgID   = MSGID_RESTOREDB_LIST_BACKUP_ID;
-        String message = getMessage(msgID, backupInfo.getBackupID());
+        Message message = INFO_RESTOREDB_LIST_BACKUP_ID.get(
+                backupInfo.getBackupID());
         out.println(message);
 
-        msgID   = MSGID_RESTOREDB_LIST_BACKUP_DATE;
-        message = getMessage(msgID,
-                             dateFormat.format(backupInfo.getBackupDate()));
+
+        message = INFO_RESTOREDB_LIST_BACKUP_DATE.get(
+                dateFormat.format(backupInfo.getBackupDate()));
         out.println(message);
 
-        msgID   = MSGID_RESTOREDB_LIST_INCREMENTAL;
-        message = getMessage(msgID, String.valueOf(backupInfo.isIncremental()));
+
+        message = INFO_RESTOREDB_LIST_INCREMENTAL.get(
+                String.valueOf(backupInfo.isIncremental()));
         out.println(message);
 
-        msgID   = MSGID_RESTOREDB_LIST_COMPRESSED;
-        message = getMessage(msgID, String.valueOf(backupInfo.isCompressed()));
+
+        message = INFO_RESTOREDB_LIST_COMPRESSED.get(
+                String.valueOf(backupInfo.isCompressed()));
         out.println(message);
 
-        msgID   = MSGID_RESTOREDB_LIST_ENCRYPTED;
-        message = getMessage(msgID, String.valueOf(backupInfo.isEncrypted()));
+
+        message = INFO_RESTOREDB_LIST_ENCRYPTED.get(
+                String.valueOf(backupInfo.isEncrypted()));
         out.println(message);
 
         byte[] hash = backupInfo.getUnsignedHash();
-        msgID   = MSGID_RESTOREDB_LIST_HASHED;
-        message = getMessage(msgID, String.valueOf(hash != null));
+
+        message = INFO_RESTOREDB_LIST_HASHED.get(
+                String.valueOf(hash != null));
         out.println(message);
 
         byte[] signature = backupInfo.getSignedHash();
-        msgID   = MSGID_RESTOREDB_LIST_SIGNED;
-        message = getMessage(msgID, String.valueOf(signature != null));
+
+        message = INFO_RESTOREDB_LIST_SIGNED.get(
+                String.valueOf(signature != null));
         out.println(message);
 
         StringBuilder dependencyList = new StringBuilder();
@@ -469,8 +465,9 @@
           dependencyList.append("none");
         }
 
-        msgID   = MSGID_RESTOREDB_LIST_DEPENDENCIES;
-        message = getMessage(msgID, dependencyList.toString());
+
+        message = INFO_RESTOREDB_LIST_DEPENDENCIES.get(
+                dependencyList.toString());
         out.println(message);
 
         out.println();
@@ -489,11 +486,9 @@
       BackupInfo backupInfo = backupDir.getBackupInfo(backupID);
       if (backupInfo == null)
       {
-        int    msgID   = MSGID_RESTOREDB_INVALID_BACKUP_ID;
-        String message = getMessage(msgID, backupID,
-                                    backupDirectory.getValue());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_RESTOREDB_INVALID_BACKUP_ID.get(
+            backupID, backupDirectory.getValue());
+        logError(message);
         return 1;
       }
     }
@@ -502,10 +497,9 @@
       BackupInfo latestBackup = backupDir.getLatestBackup();
       if (latestBackup == null)
       {
-        int    msgID   = MSGID_RESTOREDB_NO_BACKUPS_IN_DIRECTORY;
-        String message = getMessage(msgID, backupDirectory.getValue());
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_RESTOREDB_NO_BACKUPS_IN_DIRECTORY.get(
+            backupDirectory.getValue());
+        logError(message);
         return 1;
       }
       else
@@ -543,19 +537,16 @@
 
     if (backend == null)
     {
-      int    msgID   = MSGID_RESTOREDB_NO_BACKENDS_FOR_DN;
-      String message = getMessage(msgID, backupDirectory.getValue(),
-                                  configEntryDN.toString());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_RESTOREDB_NO_BACKENDS_FOR_DN.get(
+          backupDirectory.getValue(), configEntryDN.toString());
+      logError(message);
       return 1;
     }
     else if (! backend.supportsRestore())
     {
-      int    msgID   = MSGID_RESTOREDB_CANNOT_RESTORE;
-      String message = getMessage(msgID, backend.getBackendID());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message =
+          ERR_RESTOREDB_CANNOT_RESTORE.get(backend.getBackendID());
+      logError(message);
       return 1;
     }
 
@@ -572,21 +563,17 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_RESTOREDB_CANNOT_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         return 0;
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_RESTOREDB_CANNOT_LOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return 0;
     }
 
@@ -598,19 +585,15 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_RESTOREDB_ERROR_DURING_BACKUP;
-      String message = getMessage(msgID, backupID, backupDir.getPath(),
-                                  de.getErrorMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
+          backupID, backupDir.getPath(), de.getMessageObject());
+      logError(message);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_RESTOREDB_ERROR_DURING_BACKUP;
-      String message = getMessage(msgID, backupID, backupDir.getPath(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
+          backupID, backupDir.getPath(), getExceptionMessage(e));
+      logError(message);
     }
 
 
@@ -621,20 +604,16 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_RESTOREDB_CANNOT_UNLOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_RESTOREDB_CANNOT_UNLOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-               message, msgID);
+      Message message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
     }
     return 0;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/SSLConnectionException.java b/opendj-sdk/opends/src/server/org/opends/server/tools/SSLConnectionException.java
index 7e5160e..bcdf8ae 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/SSLConnectionException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/SSLConnectionException.java
@@ -25,6 +25,10 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
+
+import org.opends.server.types.OpenDsException;
+
 
 
 /**
@@ -32,8 +36,7 @@
  * creating an SSL connection.
  */
 public class SSLConnectionException
-       extends Exception
-{
+       extends OpenDsException {
 
 
 
@@ -53,7 +56,7 @@
    *
    * @param  message    The message to use for this exception.
    */
-  public SSLConnectionException(String message)
+  public SSLConnectionException(Message message)
   {
     super(message);
 
@@ -69,7 +72,7 @@
    * @param  cause      The underlying cause that triggered this
    *                    exception.
    */
-  public SSLConnectionException(String message, Throwable cause)
+  public SSLConnectionException(Message message, Throwable cause)
   {
     super(message, cause);
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/SSLConnectionFactory.java b/opendj-sdk/opends/src/server/org/opends/server/tools/SSLConnectionFactory.java
index 57f0dbc..112b145 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/SSLConnectionFactory.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/SSLConnectionFactory.java
@@ -45,8 +45,7 @@
 import org.opends.server.util.ExpirationCheckTrustManager;
 import org.opends.server.util.SelectableCertificateKeyManager;
 
-import static org.opends.server.messages.ToolMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
@@ -136,8 +135,8 @@
       sslSocketFactory = ctx.getSocketFactory();
     } catch(Exception e)
     {
-      int msgID = MSGID_TOOLS_CANNOT_CREATE_SSL_CONNECTION;
-      throw new SSLConnectionException(getMessage(msgID, e.getMessage()), e);
+      throw new SSLConnectionException(
+              ERR_TOOLS_CANNOT_CREATE_SSL_CONNECTION.get(e.getMessage()), e);
     }
   }
 
@@ -162,8 +161,9 @@
   {
     if(sslSocketFactory == null)
     {
-      int msgID = MSGID_TOOLS_SSL_CONNECTION_NOT_INITIALIZED;
-      throw new SSLConnectionException(getMessage(msgID));
+
+      throw new SSLConnectionException(
+              ERR_TOOLS_SSL_CONNECTION_NOT_INITIALIZED.get());
     }
     return sslSocketFactory.createSocket(hostName, portNumber);
   }
@@ -194,8 +194,9 @@
   {
     if(sslSocketFactory == null)
     {
-      int msgID = MSGID_TOOLS_SSL_CONNECTION_NOT_INITIALIZED;
-      throw new SSLConnectionException(getMessage(msgID));
+
+      throw new SSLConnectionException(
+              ERR_TOOLS_SSL_CONNECTION_NOT_INITIALIZED.get());
     }
     return sslSocketFactory.createSocket(s, hostName, portNumber, autoClose);
   }
@@ -264,8 +265,9 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int msgID = MSGID_TOOLS_CANNOT_LOAD_KEYSTORE_FILE;
-      throw new SSLConnectionException(getMessage(msgID, keyStoreFile), e);
+
+      throw new SSLConnectionException(
+              ERR_TOOLS_CANNOT_LOAD_KEYSTORE_FILE.get(keyStoreFile), e);
     }
 
     try
@@ -282,8 +284,9 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ke);
       }
-      int msgID = MSGID_TOOLS_CANNOT_INIT_KEYMANAGER;
-      throw new SSLConnectionException(getMessage(msgID, keyStoreFile), ke);
+
+      throw new SSLConnectionException(
+              ERR_TOOLS_CANNOT_INIT_KEYMANAGER.get(keyStoreFile), ke);
     }
 
   }
@@ -356,8 +359,9 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int msgID = MSGID_TOOLS_CANNOT_LOAD_TRUSTSTORE_FILE;
-      throw new SSLConnectionException(getMessage(msgID, trustStoreFile), e);
+
+      throw new SSLConnectionException(
+              ERR_TOOLS_CANNOT_LOAD_TRUSTSTORE_FILE.get(trustStoreFile), e);
     }
 
     try
@@ -374,8 +378,9 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ke);
       }
-      int msgID = MSGID_TOOLS_CANNOT_INIT_TRUSTMANAGER;
-      throw new SSLConnectionException(getMessage(msgID, trustStoreFile), ke);
+
+      throw new SSLConnectionException(
+              ERR_TOOLS_CANNOT_INIT_TRUSTMANAGER.get(trustStoreFile), ke);
     }
 
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/StartWindowsService.java b/opendj-sdk/opends/src/server/org/opends/server/tools/StartWindowsService.java
index cb005eb..8397ae9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/StartWindowsService.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/StartWindowsService.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import java.io.OutputStream;
 import java.io.PrintStream;
@@ -33,8 +34,7 @@
 import org.opends.server.types.NullOutputStream;
 import org.opends.server.util.SetupUtils;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 /**
@@ -107,8 +107,8 @@
     String serviceName = ConfigureWindowsService.getServiceName();
     if (serviceName == null)
     {
-      int msgID = MSGID_WINDOWS_SERVICE_NOT_FOUND;
-      String message = getMessage(msgID, (Object[])null);
+
+      Message message = ERR_WINDOWS_SERVICE_NOT_FOUND.get();
       err.println(message);
       returnValue = SERVICE_NOT_FOUND;
     }
@@ -149,8 +149,8 @@
       }
       catch (Throwable t)
       {
-        int msgID = MSGID_WINDOWS_SERVICE_START_ERROR;
-        String message = getMessage(msgID, (Object[])null);
+
+        Message message = ERR_WINDOWS_SERVICE_START_ERROR.get();
         out.println(message);
         returnValue = SERVICE_START_ERROR;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/StopDS.java b/opendj-sdk/opends/src/server/org/opends/server/tools/StopDS.java
index 13767c3..7f034f3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/StopDS.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/StopDS.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -66,8 +67,7 @@
 import org.opends.server.util.args.StringArgument;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -195,7 +195,7 @@
 
 
     // Define all the arguments that may be used with this program.
-    String toolDescription = getMessage(MSGID_STOPDS_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_STOPDS_TOOL_DESCRIPTION.get();
     ArgumentParser    argParser = new ArgumentParser(CLASS_NAME,
                                                      toolDescription, false);
     BooleanArgument   checkStoppability;
@@ -227,90 +227,96 @@
       host = new StringArgument("host", OPTION_SHORT_HOST,
                                 OPTION_LONG_HOST, false, false, true,
                                 OPTION_VALUE_HOST, "127.0.0.1", null,
-                                MSGID_STOPDS_DESCRIPTION_HOST);
+                                INFO_STOPDS_DESCRIPTION_HOST.get());
       argParser.addArgument(host);
 
-      port = new IntegerArgument("port", OPTION_SHORT_PORT,
-                                 OPTION_LONG_PORT, false, false, true,
-                                 OPTION_VALUE_PORT, 389, null, true, 1,
-                                 true, 65535, MSGID_STOPDS_DESCRIPTION_PORT);
+      port = new IntegerArgument(
+              "port", OPTION_SHORT_PORT,
+              OPTION_LONG_PORT, false, false, true,
+              OPTION_VALUE_PORT, 389, null, true, 1,
+              true, 65535, INFO_STOPDS_DESCRIPTION_PORT.get());
       argParser.addArgument(port);
 
       useSSL = new BooleanArgument("usessl", OPTION_SHORT_USE_SSL,
                                    OPTION_LONG_USE_SSL,
-                                   MSGID_STOPDS_DESCRIPTION_USESSL);
+                                   INFO_STOPDS_DESCRIPTION_USESSL.get());
       argParser.addArgument(useSSL);
 
-      useStartTLS = new BooleanArgument("usestarttls", OPTION_SHORT_START_TLS,
-                                        OPTION_LONG_START_TLS,
-                                        MSGID_STOPDS_DESCRIPTION_USESTARTTLS);
+      useStartTLS = new BooleanArgument(
+              "usestarttls", OPTION_SHORT_START_TLS,
+              OPTION_LONG_START_TLS,
+              INFO_STOPDS_DESCRIPTION_USESTARTTLS.get());
       argParser.addArgument(useStartTLS);
 
       bindDN = new StringArgument("binddn", OPTION_SHORT_BINDDN,
                                   OPTION_LONG_BINDDN, false, false, true,
                                   OPTION_VALUE_BINDDN, null, null,
-                                  MSGID_STOPDS_DESCRIPTION_BINDDN);
+                                  INFO_STOPDS_DESCRIPTION_BINDDN.get());
       argParser.addArgument(bindDN);
 
       bindPW = new StringArgument("bindpw", OPTION_SHORT_BINDPWD,
                                   OPTION_LONG_BINDPWD, false, false,
                                   true,
                                   OPTION_VALUE_BINDPWD, null, null,
-                                  MSGID_STOPDS_DESCRIPTION_BINDPW);
+                                  INFO_STOPDS_DESCRIPTION_BINDPW.get());
       argParser.addArgument(bindPW);
 
-      bindPWFile = new FileBasedArgument("bindpwfile",
-                                         OPTION_SHORT_BINDPWD_FILE,
-                                         OPTION_LONG_BINDPWD_FILE,
-                                         false, false,
-                                         OPTION_VALUE_BINDPWD_FILE,
-                                         null, null,
-                                         MSGID_STOPDS_DESCRIPTION_BINDPWFILE);
+      bindPWFile = new FileBasedArgument(
+              "bindpwfile",
+              OPTION_SHORT_BINDPWD_FILE,
+              OPTION_LONG_BINDPWD_FILE,
+              false, false,
+              OPTION_VALUE_BINDPWD_FILE,
+              null, null,
+              INFO_STOPDS_DESCRIPTION_BINDPWFILE.get());
       argParser.addArgument(bindPWFile);
 
-      saslOption = new StringArgument("sasloption", OPTION_SHORT_SASLOPTION,
-                                      OPTION_LONG_SASLOPTION, false,
-                                      true, true,
-                                      OPTION_VALUE_SASLOPTION, null, null,
-                                      MSGID_STOPDS_DESCRIPTION_SASLOPTIONS);
+      saslOption = new StringArgument(
+              "sasloption", OPTION_SHORT_SASLOPTION,
+              OPTION_LONG_SASLOPTION, false,
+              true, true,
+              OPTION_VALUE_SASLOPTION, null, null,
+              INFO_STOPDS_DESCRIPTION_SASLOPTIONS.get());
       argParser.addArgument(saslOption);
 
-      proxyAuthzID = new StringArgument("proxyauthzid",
-                                        OPTION_SHORT_PROXYAUTHID,
-                                        OPTION_LONG_PROXYAUTHID, false,
-                                        false, true,
-                                        OPTION_VALUE_PROXYAUTHID, null,
-                                        null,
-                                        MSGID_STOPDS_DESCRIPTION_PROXYAUTHZID);
+      proxyAuthzID = new StringArgument(
+              "proxyauthzid",
+              OPTION_SHORT_PROXYAUTHID,
+              OPTION_LONG_PROXYAUTHID, false,
+              false, true,
+              OPTION_VALUE_PROXYAUTHID, null,
+              null,
+              INFO_STOPDS_DESCRIPTION_PROXYAUTHZID.get());
       argParser.addArgument(proxyAuthzID);
 
-      stopReason = new StringArgument("stopreason", 'r', "stopReason", false,
-                                      false, true, "{stopReason}", null, null,
-                                      MSGID_STOPDS_DESCRIPTION_STOP_REASON);
+      stopReason = new StringArgument(
+              "stopreason", 'r', "stopReason", false,
+              false, true, "{stopReason}", null, null,
+              INFO_STOPDS_DESCRIPTION_STOP_REASON.get());
       argParser.addArgument(stopReason);
 
       checkStoppability = new BooleanArgument("checkstoppability", null,
               "checkStoppability",
-              MSGID_STOPDS_CHECK_STOPPABILITY);
+              INFO_STOPDS_CHECK_STOPPABILITY.get());
       checkStoppability.setHidden(true);
       argParser.addArgument(checkStoppability);
 
       windowsNetStop = new BooleanArgument("windowsnetstop", null,
-          "windowsNetStop", MSGID_STOPDS_DESCRIPTION_WINDOWS_NET_STOP);
+          "windowsNetStop", INFO_STOPDS_DESCRIPTION_WINDOWS_NET_STOP.get());
       windowsNetStop.setHidden(true);
       argParser.addArgument(windowsNetStop);
 
       restart = new BooleanArgument("restart", 'R', "restart",
-                                    MSGID_STOPDS_DESCRIPTION_RESTART);
+                                    INFO_STOPDS_DESCRIPTION_RESTART.get());
       argParser.addArgument(restart);
 
       stopTimeStr = new StringArgument("stoptime", 't', "stopTime", false,
                                        false, true, "{stopTime}", null, null,
-                                       MSGID_STOPDS_DESCRIPTION_STOP_TIME);
+                                       INFO_STOPDS_DESCRIPTION_STOP_TIME.get());
       argParser.addArgument(stopTimeStr);
 
       trustAll = new BooleanArgument("trustall", 'X', "trustAll",
-                                     MSGID_STOPDS_DESCRIPTION_TRUST_ALL);
+                                     INFO_STOPDS_DESCRIPTION_TRUST_ALL.get());
       argParser.addArgument(trustAll);
 
       keyStoreFile = new StringArgument("keystorefile",
@@ -319,7 +325,7 @@
                                         false, false, true,
                                         OPTION_VALUE_KEYSTOREPATH,
                                         null, null,
-                                        MSGID_STOPDS_DESCRIPTION_KSFILE);
+                                        INFO_STOPDS_DESCRIPTION_KSFILE.get());
       argParser.addArgument(keyStoreFile);
 
       keyStorePW = new StringArgument("keystorepw", OPTION_SHORT_KEYSTORE_PWD,
@@ -327,21 +333,23 @@
                                       false, false, true,
                                       OPTION_VALUE_KEYSTORE_PWD,
                                       null, null,
-                                      MSGID_STOPDS_DESCRIPTION_KSPW);
+                                      INFO_STOPDS_DESCRIPTION_KSPW.get());
       argParser.addArgument(keyStorePW);
 
-      keyStorePWFile = new FileBasedArgument("keystorepwfile",
-                                             OPTION_SHORT_KEYSTORE_PWD_FILE,
-                                             OPTION_LONG_KEYSTORE_PWD_FILE,
-                                             false, false,
-                                             OPTION_VALUE_KEYSTORE_PWD_FILE,
-                                             null, null,
-                                             MSGID_STOPDS_DESCRIPTION_KSPWFILE);
+      keyStorePWFile = new FileBasedArgument(
+              "keystorepwfile",
+              OPTION_SHORT_KEYSTORE_PWD_FILE,
+              OPTION_LONG_KEYSTORE_PWD_FILE,
+              false, false,
+              OPTION_VALUE_KEYSTORE_PWD_FILE,
+              null, null,
+              INFO_STOPDS_DESCRIPTION_KSPWFILE.get());
       argParser.addArgument(keyStorePWFile);
 
-      certNickname = new StringArgument("certnickname", 'N', "certNickname",
-                                        false, false, true, "{nickname}", null,
-                                        null, MSGID_DESCRIPTION_CERT_NICKNAME);
+      certNickname = new StringArgument(
+              "certnickname", 'N', "certNickname",
+              false, false, true, "{nickname}", null,
+              null, INFO_DESCRIPTION_CERT_NICKNAME.get());
       argParser.addArgument(certNickname);
 
       trustStoreFile = new StringArgument("truststorefile",
@@ -350,14 +358,15 @@
                                           false, false, true,
                                           OPTION_VALUE_TRUSTSTOREPATH,
                                           null, null,
-                                          MSGID_STOPDS_DESCRIPTION_TSFILE);
+                                          INFO_STOPDS_DESCRIPTION_TSFILE.get());
       argParser.addArgument(trustStoreFile);
 
-      trustStorePW = new StringArgument("truststorepw", 'T',
-                                        OPTION_LONG_TRUSTSTORE_PWD,
-                                        false, false,
-                                        true, OPTION_VALUE_TRUSTSTORE_PWD, null,
-                                        null, MSGID_STOPDS_DESCRIPTION_TSPW);
+      trustStorePW = new StringArgument(
+              "truststorepw", 'T',
+              OPTION_LONG_TRUSTSTORE_PWD,
+              false, false,
+              true, OPTION_VALUE_TRUSTSTORE_PWD, null,
+              null, INFO_STOPDS_DESCRIPTION_TSPW.get());
       argParser.addArgument(trustStorePW);
 
       trustStorePWFile = new FileBasedArgument("truststorepwfile",
@@ -365,19 +374,18 @@
                                   OPTION_LONG_TRUSTSTORE_PWD_FILE,
                                   false, false,
                                   OPTION_VALUE_TRUSTSTORE_PWD_FILE, null, null,
-                                  MSGID_STOPDS_DESCRIPTION_TSPWFILE);
+                                  INFO_STOPDS_DESCRIPTION_TSPWFILE.get());
       argParser.addArgument(trustStorePWFile);
 
       showUsage = new BooleanArgument("showusage", OPTION_SHORT_HELP,
                                       OPTION_LONG_HELP,
-                                      MSGID_STOPDS_DESCRIPTION_SHOWUSAGE);
+                                      INFO_STOPDS_DESCRIPTION_SHOWUSAGE.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage, out);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
@@ -391,8 +399,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -416,9 +423,9 @@
     // an error.
     if (bindPW.isPresent() && bindPWFile.isPresent())
     {
-      int    msgID   = MSGID_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS;
-      String message = getMessage(msgID, bindPW.getLongIdentifier(),
-                                  bindPWFile.getLongIdentifier());
+      Message message = ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+              bindPW.getLongIdentifier(),
+              bindPWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
     }
@@ -428,9 +435,9 @@
     // then return an error.
     if (keyStorePW.isPresent() && keyStorePWFile.isPresent())
     {
-      int    msgID   = MSGID_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS;
-      String message = getMessage(msgID, keyStorePW.getLongIdentifier(),
-                                  keyStorePWFile.getLongIdentifier());
+      Message message = ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+              keyStorePW.getLongIdentifier(),
+              keyStorePWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
     }
@@ -440,9 +447,9 @@
     // provided, then return an error.
     if (trustStorePW.isPresent() && trustStorePWFile.isPresent())
     {
-      int    msgID   = MSGID_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS;
-      String message = getMessage(msgID, trustStorePW.getLongIdentifier(),
-                                  trustStorePWFile.getLongIdentifier());
+      Message message = ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+              trustStorePW.getLongIdentifier(),
+              trustStorePWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
     }
@@ -466,8 +473,7 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_STOPDS_CANNOT_DECODE_STOP_TIME;
-          String message = getMessage(msgID);
+          Message message = ERR_STOPDS_CANNOT_DECODE_STOP_TIME.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
@@ -484,8 +490,7 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_STOPDS_CANNOT_DECODE_STOP_TIME;
-          String message = getMessage(msgID);
+          Message message = ERR_STOPDS_CANNOT_DECODE_STOP_TIME.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
@@ -506,9 +511,9 @@
     {
       if (useStartTLS.isPresent())
       {
-        int    msgID   = MSGID_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS;
-        String message = getMessage(msgID, useSSL.getLongIdentifier(),
-                                    useStartTLS.getLongIdentifier());
+        Message message = ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+                useSSL.getLongIdentifier(),
+                useStartTLS.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
       }
@@ -549,8 +554,8 @@
       }
       catch (SSLConnectionException sce)
       {
-        int    msgID   = MSGID_STOPDS_CANNOT_INITIALIZE_SSL;
-        String message = getMessage(msgID, sce.getMessage());
+        Message message =
+                ERR_STOPDS_CANNOT_INITIALIZE_SSL.get(sce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
       }
@@ -569,8 +574,7 @@
         int equalPos = s.indexOf('=');
         if (equalPos <= 0)
         {
-          int    msgID   = MSGID_STOPDS_CANNOT_PARSE_SASL_OPTION;
-          String message = getMessage(msgID, s);
+          Message message = ERR_STOPDS_CANNOT_PARSE_SASL_OPTION.get(s);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
@@ -591,8 +595,7 @@
 
       if (mechanism == null)
       {
-        int    msgID   = MSGID_STOPDS_NO_SASL_MECHANISM;
-        String message = getMessage(msgID);
+        Message message = ERR_STOPDS_NO_SASL_MECHANISM.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
       }
@@ -618,16 +621,15 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_STOPDS_CANNOT_DETERMINE_PORT;
-      String message = getMessage(msgID, port.getLongIdentifier(),
-                                  ae.getMessage());
+      Message message = ERR_STOPDS_CANNOT_DETERMINE_PORT.get(
+              port.getLongIdentifier(),
+              ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
     }
     catch (LDAPConnectionException lce)
     {
-      int    msgID   = MSGID_STOPDS_CANNOT_CONNECT;
-      String message = getMessage(msgID, lce.getMessage());
+      Message message = ERR_STOPDS_CANNOT_CONNECT.get(lce.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR;
     }
@@ -710,30 +712,26 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        int    msgID   = MSGID_STOPDS_UNEXPECTED_CONNECTION_CLOSURE;
-        String message = getMessage(msgID);
+        Message message = ERR_STOPDS_UNEXPECTED_CONNECTION_CLOSURE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_SERVER_DOWN;
       }
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_STOPDS_IO_ERROR;
-      String message = getMessage(msgID, String.valueOf(ioe));
+      Message 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)
     {
-      int    msgID   = MSGID_STOPDS_DECODE_ERROR;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_STOPDS_DECODE_ERROR.get(ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_DECODING_ERROR;
     }
     catch (LDAPException le)
     {
-      int    msgID   = MSGID_STOPDS_DECODE_ERROR;
-      String message = getMessage(msgID, le.getMessage());
+      Message message = ERR_STOPDS_DECODE_ERROR.get(le.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_DECODING_ERROR;
     }
@@ -753,7 +751,7 @@
         if ((responseOID != null) &&
             (responseOID.equals(LDAPConstants.OID_NOTICE_OF_DISCONNECTION)))
         {
-          String message = extendedResponse.getErrorMessage();
+          Message message = extendedResponse.getErrorMessage();
           if (message != null)
           {
             err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -764,8 +762,8 @@
       }
 
 
-      int    msgID   = MSGID_STOPDS_INVALID_RESPONSE_TYPE;
-      String message = getMessage(msgID, responseMessage.getProtocolOpName());
+      Message message = ERR_STOPDS_INVALID_RESPONSE_TYPE.get(
+              responseMessage.getProtocolOpName());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
     }
@@ -773,7 +771,7 @@
 
     AddResponseProtocolOp addResponse =
          responseMessage.getAddResponseProtocolOp();
-    String errorMessage = addResponse.getErrorMessage();
+    Message errorMessage = addResponse.getErrorMessage();
     if (errorMessage != null)
     {
       err.println(wrapText(errorMessage, MAX_LINE_WIDTH));
@@ -831,8 +829,7 @@
         {
           // The server is not running: write a message informing of that
           // in the standard out (this is not an error message).
-          int    msgID   = MSGID_STOPDS_SERVER_ALREADY_STOPPED;
-          String message = getMessage(msgID, null, null);
+          Message message = INFO_STOPDS_SERVER_ALREADY_STOPPED.get();
           System.out.println(message);
           LockFileManager.releaseLock(lockFile, failureReason);
           isServerRunning = false;
@@ -903,16 +900,16 @@
               returnValue = STOP_AS_WINDOW_SERVICE;
             }
             // Display a message informing that we are going to the server.
-            int    msgID   = MSGID_STOPDS_GOING_TO_STOP;
-            String message = getMessage(msgID, null, null);
+
+            Message message = INFO_STOPDS_GOING_TO_STOP.get();
             System.out.println(message);
           }
         }
         else
         {
           // Display a message informing that we are going to the server.
-          int    msgID   = MSGID_STOPDS_GOING_TO_STOP;
-          String message = getMessage(msgID, null, null);
+
+          Message message = INFO_STOPDS_GOING_TO_STOP.get();
           System.out.println(message);
 
           if (restartPresent)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/StopWindowsService.java b/opendj-sdk/opends/src/server/org/opends/server/tools/StopWindowsService.java
index 257722f..c29e031 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/StopWindowsService.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/StopWindowsService.java
@@ -26,6 +26,7 @@
  */
 
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 import java.io.OutputStream;
 import java.io.PrintStream;
@@ -33,8 +34,7 @@
 import org.opends.server.types.NullOutputStream;
 import org.opends.server.util.SetupUtils;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -111,8 +111,8 @@
     String serviceName = ConfigureWindowsService.getServiceName();
     if (serviceName == null)
     {
-      int msgID = MSGID_WINDOWS_SERVICE_NOT_FOUND;
-      String message = getMessage(msgID, (Object[])null);
+
+      Message message = ERR_WINDOWS_SERVICE_NOT_FOUND.get();
       err.println(message);
       returnValue = SERVICE_NOT_FOUND;
     }
@@ -153,8 +153,8 @@
       }
       catch (Throwable t)
       {
-        int msgID = MSGID_WINDOWS_SERVICE_STOP_ERROR;
-        String message = getMessage(msgID, (Object[])null);
+
+        Message message = ERR_WINDOWS_SERVICE_STOP_ERROR.get();
         out.println(message);
         returnValue = SERVICE_STOP_ERROR;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/VerifyIndex.java b/opendj-sdk/opends/src/server/org/opends/server/tools/VerifyIndex.java
index d8eddd5..025397f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/VerifyIndex.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/VerifyIndex.java
@@ -42,8 +42,6 @@
 import org.opends.server.loggers.ErrorLogger;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.NullOutputStream;
 import org.opends.server.util.args.ArgumentException;
@@ -56,12 +54,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.opends.server.messages.ToolMessages.*;
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ToolMessages.*;
+import org.opends.messages.Message;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
-import org.opends.server.util.StaticUtils;
 import static org.opends.server.tools.ToolConstants.*;
 import org.opends.server.admin.std.server.BackendCfg;
 
@@ -143,7 +141,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    String toolDescription = getMessage(MSGID_VERIFYINDEX_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_VERIFYINDEX_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.VerifyIndex",
                             toolDescription, false);
@@ -158,7 +156,7 @@
                               OPTION_LONG_CONFIG_CLASS, true, false,
                               true, OPTION_VALUE_CONFIG_CLASS,
                               ConfigFileHandler.class.getName(), null,
-                              MSGID_DESCRIPTION_CONFIG_CLASS);
+                              INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -166,7 +164,7 @@
       configFile =
            new StringArgument("configfile", 'f', "configFile", true, false,
                               true, "{configFile}", null, null,
-                              MSGID_DESCRIPTION_CONFIG_FILE);
+                              INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -175,7 +173,7 @@
            new StringArgument("basedn", OPTION_SHORT_BASEDN,
                               OPTION_LONG_BASEDN, true, false, true,
                               OPTION_VALUE_BASEDN, null, null,
-                              MSGID_VERIFYINDEX_DESCRIPTION_BASE_DN);
+                              INFO_VERIFYINDEX_DESCRIPTION_BASE_DN.get());
       argParser.addArgument(baseDNString);
 
 
@@ -183,29 +181,29 @@
            new StringArgument("index", 'i', "index",
                               false, true, true,
                               "{index}", null, null,
-                              MSGID_VERIFYINDEX_DESCRIPTION_INDEX_NAME);
+                              INFO_VERIFYINDEX_DESCRIPTION_INDEX_NAME.get());
       argParser.addArgument(indexList);
 
       cleanMode =
            new BooleanArgument("clean", 'c', "clean",
-                               MSGID_VERIFYINDEX_DESCRIPTION_VERIFY_CLEAN);
+                               INFO_VERIFYINDEX_DESCRIPTION_VERIFY_CLEAN.get());
       argParser.addArgument(cleanMode);
 
       countErrors =
            new BooleanArgument("counterrors", null, "countErrors",
-                               MSGID_VERIFYINDEX_DESCRIPTION_COUNT_ERRORS);
+                               INFO_VERIFYINDEX_DESCRIPTION_COUNT_ERRORS.get());
       argParser.addArgument(countErrors);
 
       displayUsage =
            new BooleanArgument("help", OPTION_SHORT_HELP, OPTION_LONG_HELP,
-                               MSGID_DESCRIPTION_USAGE);
+                               INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(displayUsage);
       argParser.setUsageArgument(displayUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -219,8 +217,8 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -249,8 +247,8 @@
 
     if (cleanMode.isPresent() && indexList.getValues().size() != 1)
     {
-      int    msgID   = MSGID_VERIFYINDEX_VERIFY_CLEAN_REQUIRES_SINGLE_INDEX;
-      String message = getMessage(msgID);
+      Message message =
+              ERR_VERIFYINDEX_VERIFY_CLEAN_REQUIRES_SINGLE_INDEX.get();
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       out.println(argParser.getUsage());
@@ -270,8 +268,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_SERVER_BOOTSTRAP_ERROR;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message =
+                ERR_SERVER_BOOTSTRAP_ERROR.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -283,15 +281,14 @@
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message =
+                ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -305,22 +302,19 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_LOAD_SCHEMA;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -334,22 +328,22 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CORE_CONFIG;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message =
+                ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -362,22 +356,23 @@
       }
       catch (ConfigException ce)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ce.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, ie.getMessage());
+        Message message =
+                ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_CANNOT_INITIALIZE_CRYPTO_MANAGER;
-        String message = getMessage(msgID, getExceptionMessage(e));
+        Message message =
+                ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+                        getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -409,20 +404,16 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BASE_DN;
-      String message = getMessage(msgID, baseDNString.getValue(),
-                                  de.getErrorMessage());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_DECODE_BASE_DN.get(
+          baseDNString.getValue(), de.getMessageObject());
+      logError(message);
       return 1;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_CANNOT_DECODE_BASE_DN;
-      String message = getMessage(msgID, baseDNString.getValue(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_CANNOT_DECODE_BASE_DN.get(
+          baseDNString.getValue(), getExceptionMessage(e));
+      logError(message);
       return 1;
     }
 
@@ -452,10 +443,9 @@
           }
           else
           {
-            int    msgID   = MSGID_MULTIPLE_BACKENDS_FOR_BASE;
-            String message = getMessage(msgID, baseDNString.getValue());
-            logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                     message, msgID);
+            Message message =
+                ERR_MULTIPLE_BACKENDS_FOR_BASE.get(baseDNString.getValue());
+            logError(message);
             return 1;
           }
           break;
@@ -465,19 +455,15 @@
 
     if (backend == null)
     {
-      int    msgID   = MSGID_NO_BACKENDS_FOR_BASE;
-      String message = getMessage(msgID, baseDNString.getValue());
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_NO_BACKENDS_FOR_BASE.get(baseDNString.getValue());
+      logError(message);
       return 1;
     }
 
     if (!(backend instanceof BackendImpl))
     {
-      int    msgID   = MSGID_BACKEND_NO_INDEXING_SUPPORT;
-      String message = getMessage(msgID);
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_BACKEND_NO_INDEXING_SUPPORT.get();
+      logError(message);
       return 1;
     }
 
@@ -507,21 +493,17 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_VERIFYINDEX_CANNOT_LOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-                 message, msgID);
+        Message message = ERR_VERIFYINDEX_CANNOT_LOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
         return 1;
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_VERIFYINDEX_CANNOT_LOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR,
-               message, msgID);
+      Message message = ERR_VERIFYINDEX_CANNOT_LOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
       return 1;
     }
 
@@ -546,11 +528,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_VERIFYINDEX_ERROR_DURING_VERIFY;
-      String message = getMessage(msgID,
-                                  StaticUtils.stackTraceToSingleLineString(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_ERROR, message,
-               msgID);
+      Message message = ERR_VERIFYINDEX_ERROR_DURING_VERIFY.get(
+          stackTraceToSingleLineString(e));
+      logError(message);
       returnCode = 1;
     }
 
@@ -562,20 +542,16 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        int    msgID   = MSGID_VERIFYINDEX_CANNOT_UNLOCK_BACKEND;
-        String message = getMessage(msgID, backend.getBackendID(),
-                                    String.valueOf(failureReason));
-        logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-                 message, msgID);
+        Message message = WARN_VERIFYINDEX_CANNOT_UNLOCK_BACKEND.get(
+            backend.getBackendID(), String.valueOf(failureReason));
+        logError(message);
       }
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_VERIFYINDEX_CANNOT_UNLOCK_BACKEND;
-      String message = getMessage(msgID, backend.getBackendID(),
-                                  getExceptionMessage(e));
-      logError(ErrorLogCategory.BACKEND, ErrorLogSeverity.SEVERE_WARNING,
-               message, msgID);
+      Message message = WARN_VERIFYINDEX_CANNOT_UNLOCK_BACKEND.get(
+          backend.getBackendID(), getExceptionMessage(e));
+      logError(message);
     }
 
     return returnCode;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/WaitForFileDelete.java b/opendj-sdk/opends/src/server/org/opends/server/tools/WaitForFileDelete.java
index 4c22325..d2c9b39 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/WaitForFileDelete.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/WaitForFileDelete.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools;
+import org.opends.messages.Message;
 
 
 
@@ -37,8 +38,7 @@
 import org.opends.server.util.args.IntegerArgument;
 import org.opends.server.util.args.StringArgument;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -126,7 +126,7 @@
     StringArgument  targetFilePath = null;
     StringArgument  outputFilePath = null;
 
-    String toolDescription = getMessage(MSGID_WAIT4DEL_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_WAIT4DEL_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
 
@@ -135,38 +135,39 @@
       targetFilePath =
            new StringArgument("targetfile", 'f', "targetFile", true, false,
                               true, "{path}", null, null,
-                              MSGID_WAIT4DEL_DESCRIPTION_TARGET_FILE);
+                              INFO_WAIT4DEL_DESCRIPTION_TARGET_FILE.get());
       argParser.addArgument(targetFilePath);
 
 
-      logFilePath = new StringArgument("logfile", 'l', "logFile", false, false,
-                                       true, "{path}", null, null,
-                                       MSGID_WAIT4DEL_DESCRIPTION_LOG_FILE);
+      logFilePath = new StringArgument(
+              "logfile", 'l', "logFile", false, false,
+              true, "{path}", null, null,
+              INFO_WAIT4DEL_DESCRIPTION_LOG_FILE.get());
       argParser.addArgument(logFilePath);
 
 
-      outputFilePath = new StringArgument("outputfile", 'o', "outputFile",
-                                        false, false,
-                                        true, "{path}", null, null,
-                                        MSGID_WAIT4DEL_DESCRIPTION_OUTPUT_FILE);
+      outputFilePath = new StringArgument(
+              "outputfile", 'o', "outputFile",
+              false, false,
+              true, "{path}", null, null,
+              INFO_WAIT4DEL_DESCRIPTION_OUTPUT_FILE.get());
       argParser.addArgument(outputFilePath);
 
 
       timeout = new IntegerArgument("timeout", 't', "timeout", true, false,
                                     true, "{seconds}", 60, null, true, 0, false,
-                                    0, MSGID_WAIT4DEL_DESCRIPTION_TIMEOUT);
+                                    0, INFO_WAIT4DEL_DESCRIPTION_TIMEOUT.get());
       argParser.addArgument(timeout);
 
 
       showUsage = new BooleanArgument("help", 'H', "help",
-                                      MSGID_WAIT4DEL_DESCRIPTION_HELP);
+                                      INFO_WAIT4DEL_DESCRIPTION_HELP.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return EXIT_CODE_INTERNAL_ERROR;
     }
@@ -179,8 +180,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       System.err.println(argParser.getUsage());
@@ -221,9 +221,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_WAIT4DEL_CANNOT_OPEN_LOG_FILE;
-        String message = getMessage(msgID, logFilePath.getValue(),
-                                    String.valueOf(e));
+        Message message = WARN_WAIT4DEL_CANNOT_OPEN_LOG_FILE.get(
+                logFilePath.getValue(), String.valueOf(e));
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
 
         logFile = null;
@@ -251,9 +250,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_WAIT4DEL_CANNOT_OPEN_OUTPUT_FILE;
-          String message = getMessage(msgID, outputFilePath.getValue(),
-                                    String.valueOf(e));
+          Message message = WARN_WAIT4DEL_CANNOT_OPEN_OUTPUT_FILE.get(
+                  outputFilePath.getValue(), String.valueOf(e));
           System.err.println(wrapText(message, MAX_LINE_WIDTH));
 
           outputFile = null;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ArgumentExceptionFactory.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ArgumentExceptionFactory.java
index 83efb1d..5a9c9f0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ArgumentExceptionFactory.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ArgumentExceptionFactory.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.DefaultBehaviorException;
@@ -73,31 +73,30 @@
     PropertyDefinition<?> pd = e.getNamingPropertyDefinition();
 
     if (illegalName.length() == 0) {
-      int msgID = MSGID_DSCFG_ERROR_ILLEGAL_NAME_EMPTY;
-      String message = getMessage(msgID, d.getUserFriendlyPluralName());
-      return new ArgumentException(msgID, message);
+      Message message =
+          ERR_DSCFG_ERROR_ILLEGAL_NAME_EMPTY.get(d.getUserFriendlyPluralName());
+      return new ArgumentException(message);
     } else if (illegalName.trim().length() == 0) {
-      int msgID = MSGID_DSCFG_ERROR_ILLEGAL_NAME_BLANK;
-      String message = getMessage(msgID, d.getUserFriendlyPluralName());
-      return new ArgumentException(msgID, message);
+      Message message =
+          ERR_DSCFG_ERROR_ILLEGAL_NAME_BLANK.get(d.getUserFriendlyPluralName());
+      return new ArgumentException(message);
     } else if (pd != null) {
       try {
         pd.decodeValue(illegalName);
       } catch (IllegalPropertyValueStringException e1) {
         PropertyDefinitionUsageBuilder b = new PropertyDefinitionUsageBuilder(
             true);
-        String syntax = b.getUsage(pd);
+        Message syntax = b.getUsage(pd);
 
-        int msgID = MSGID_DSCFG_ERROR_ILLEGAL_NAME_SYNTAX;
-        String message = getMessage(msgID, illegalName,
-            d.getUserFriendlyName(), syntax);
-        return new ArgumentException(msgID, message);
+        Message message = ERR_DSCFG_ERROR_ILLEGAL_NAME_SYNTAX.get(
+            illegalName, d.getUserFriendlyName(), syntax);
+        return new ArgumentException(message);
       }
     }
 
-    int msgID = MSGID_DSCFG_ERROR_ILLEGAL_NAME_UNKNOWN;
-    String message = getMessage(msgID, illegalName, d.getUserFriendlyName());
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_ILLEGAL_NAME_UNKNOWN.get(
+        illegalName, d.getUserFriendlyName());
+    return new ArgumentException(message);
   }
 
 
@@ -115,7 +114,6 @@
   public static ArgumentException adaptMissingMandatoryPropertiesException(
       MissingMandatoryPropertiesException e,
       AbstractManagedObjectDefinition<?, ?> d) {
-    int msgID = MSGID_DSCFG_ERROR_CREATE_MMPE;
     StringBuilder builder = new StringBuilder();
     boolean isFirst = true;
     for (PropertyIsMandatoryException pe : e.getCauses()) {
@@ -125,8 +123,9 @@
       builder.append(pe.getPropertyDefinition().getName());
       isFirst = false;
     }
-    String msg = getMessage(msgID, d.getUserFriendlyName(), builder.toString());
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_CREATE_MMPE.get(
+            d.getUserFriendlyName(), builder.toString());
+    return new ArgumentException(msg);
   }
 
 
@@ -162,10 +161,10 @@
       DefaultBehaviorException pe = (DefaultBehaviorException) e;
       return adapt(d, pe);
     } else {
-      int msgID = MSGID_DSCFG_ERROR_PROPERTY_UNKNOWN_ERROR;
-      String message = getMessage(msgID, d.getUserFriendlyName(), e
-          .getPropertyDefinition().getName(), e.getMessage());
-      return new ArgumentException(msgID, message);
+      Message message = ERR_DSCFG_ERROR_PROPERTY_UNKNOWN_ERROR.
+          get(d.getUserFriendlyName(), e.getPropertyDefinition().getName(),
+              e.getMessage());
+      return new ArgumentException(message);
     }
   }
 
@@ -181,9 +180,8 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException incompatiblePropertyModification(String arg) {
-    int msgID = MSGID_DSCFG_ERROR_INCOMPATIBLE_PROPERTY_MOD;
-    String msg = getMessage(msgID, arg);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_INCOMPATIBLE_PROPERTY_MOD.get(arg);
+    return new ArgumentException(msg);
   }
 
 
@@ -197,9 +195,8 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException missingBindPassword(String bindDN) {
-    int msgID = MSGID_DSCFG_ERROR_NO_PASSWORD;
-    String msg = getMessage(msgID, bindDN);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_NO_PASSWORD.get(bindDN);
+    return new ArgumentException(msg);
   }
 
 
@@ -215,9 +212,9 @@
    */
   public static ArgumentException missingMandatoryNonInteractiveArgument(
       Argument arg) {
-    int msgID = MSGID_DSCFG_ERROR_MISSING_NON_INTERACTIVE_ARG;
-    String msg = getMessage(msgID, arg.getLongIdentifier());
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_MISSING_NON_INTERACTIVE_ARG.get(
+        arg.getLongIdentifier());
+    return new ArgumentException(msg);
   }
 
 
@@ -232,9 +229,8 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException missingNameInPropertyArgument(String arg) {
-    int msgID = MSGID_DSCFG_ERROR_NO_NAME_IN_PROPERTY_VALUE;
-    String msg = getMessage(msgID, arg);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_VALUE.get(arg);
+    return new ArgumentException(msg);
   }
 
 
@@ -250,9 +246,8 @@
    */
   public static ArgumentException missingNameInPropertyModification(
       String arg) {
-    int msgID = MSGID_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD;
-    String msg = getMessage(msgID, arg);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD.get(arg);
+    return new ArgumentException(msg);
   }
 
 
@@ -268,9 +263,8 @@
    */
   public static ArgumentException missingSeparatorInPropertyArgument(
       String arg) {
-    int msgID = MSGID_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_VALUE;
-    String msg = getMessage(msgID, arg);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_VALUE.get(arg);
+    return new ArgumentException(msg);
   }
 
 
@@ -286,9 +280,8 @@
    */
   public static ArgumentException missingSeparatorInPropertyModification(
       String arg) {
-    int msgID = MSGID_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_MOD;
-    String msg = getMessage(msgID, arg);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_MOD.get(arg);
+    return new ArgumentException(msg);
   }
 
 
@@ -303,9 +296,8 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException missingValueInPropertyArgument(String arg) {
-    int msgID = MSGID_DSCFG_ERROR_NO_VALUE_IN_PROPERTY_VALUE;
-    String msg = getMessage(msgID, arg);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_NO_VALUE_IN_PROPERTY_VALUE.get(arg);
+    return new ArgumentException(msg);
   }
 
 
@@ -321,9 +313,8 @@
    */
   public static ArgumentException missingValueInPropertyModification(
       String arg) {
-    int msgID = MSGID_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD;
-    String msg = getMessage(msgID, arg);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD.get(arg);
+    return new ArgumentException(msg);
   }
 
 
@@ -337,9 +328,9 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException unableToReadBindPassword(Exception cause) {
-    int msgID = MSGID_DSCFG_ERROR_CANNOT_READ_LDAP_BIND_PASSWORD;
-    String message = getMessage(msgID, cause.getMessage());
-    return new ArgumentException(msgID, message, cause);
+    Message message =
+        ERR_DSCFG_ERROR_CANNOT_READ_LDAP_BIND_PASSWORD.get(cause.getMessage());
+    return new ArgumentException(message, cause);
   }
 
 
@@ -352,9 +343,8 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException unableToReadBindPasswordInteractively() {
-    int msgID = MSGID_DSCFG_ERROR_BIND_PASSWORD_NONINTERACTIVE;
-    String message = getMessage(msgID);
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_BIND_PASSWORD_NONINTERACTIVE.get();
+    return new ArgumentException(message);
   }
 
 
@@ -368,9 +358,9 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException unableToReadConsoleInput(Exception cause) {
-    int msgID = MSGID_DSCFG_ERROR_CANNOT_READ_CONSOLE_INPUT;
-    String message = getMessage(msgID, cause.getMessage());
-    return new ArgumentException(msgID, message, cause);
+    Message message =
+        ERR_DSCFG_ERROR_CANNOT_READ_CONSOLE_INPUT.get(cause.getMessage());
+    return new ArgumentException(message, cause);
   }
 
 
@@ -391,10 +381,9 @@
    */
   public static ArgumentException unableToResetMandatoryProperty(
       AbstractManagedObjectDefinition<?, ?> d, String name, String setOption) {
-    int msgID = MSGID_DSCFG_ERROR_UNABLE_TO_RESET_MANDATORY_PROPERTY;
-    String message = getMessage(msgID, d.getUserFriendlyPluralName(), name,
-        setOption);
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_UNABLE_TO_RESET_MANDATORY_PROPERTY.get(
+        d.getUserFriendlyPluralName(), name, setOption);
+    return new ArgumentException(message);
   }
 
 
@@ -412,9 +401,9 @@
    */
   public static ArgumentException unableToSetNamingProperty(
       AbstractManagedObjectDefinition<?, ?> d, PropertyDefinition<?> pd) {
-    int msgID = MSGID_DSCFG_ERROR_UNABLE_TO_SET_NAMING_PROPERTY;
-    String message = getMessage(msgID, pd.getName(), d.getUserFriendlyName());
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_UNABLE_TO_SET_NAMING_PROPERTY.get(
+        pd.getName(), d.getUserFriendlyName());
+    return new ArgumentException(message);
   }
 
 
@@ -428,9 +417,8 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException unknownCategory(String categoryName) {
-    int msgID = MSGID_DSCFG_ERROR_CATEGORY_UNRECOGNIZED;
-    String msg = getMessage(msgID, categoryName);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_CATEGORY_UNRECOGNIZED.get(categoryName);
+    return new ArgumentException(msg);
   }
 
 
@@ -447,9 +435,9 @@
    */
   public static ArgumentException unknownProperty(
       AbstractManagedObjectDefinition<?, ?> d, String name) {
-    int msgID = MSGID_DSCFG_ERROR_PROPERTY_UNRECOGNIZED;
-    String message = getMessage(msgID, name, d.getUserFriendlyPluralName());
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_PROPERTY_UNRECOGNIZED.get(
+        name, d.getUserFriendlyPluralName());
+    return new ArgumentException(message);
   }
 
 
@@ -463,9 +451,8 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException unknownProperty(String name) {
-    int msgID = MSGID_DSCFG_ERROR_PROPERTY_UNRECOGNIZED_NO_DEFN;
-    String message = getMessage(msgID, name);
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_PROPERTY_UNRECOGNIZED_NO_DEFN.get(name);
+    return new ArgumentException(message);
   }
 
 
@@ -484,10 +471,9 @@
    */
   public static ArgumentException unknownSubType(RelationDefinition<?, ?> r,
       String typeName, String typeUsage) {
-    int msgID = MSGID_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED;
-    String msg = getMessage(msgID, typeName, r.getUserFriendlyName(),
-        typeUsage);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED.get(
+        typeName, r.getUserFriendlyName(), typeUsage);
+    return new ArgumentException(msg);
   }
 
 
@@ -501,9 +487,8 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException unknownType(String typeName) {
-    int msgID = MSGID_DSCFG_ERROR_TYPE_UNRECOGNIZED;
-    String msg = getMessage(msgID, typeName);
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_TYPE_UNRECOGNIZED.get(typeName);
+    return new ArgumentException(msg);
   }
 
 
@@ -520,9 +505,9 @@
    */
   public static ArgumentException unknownTypeInCategory(String categoryName,
       String typeName) {
-    int msgID = MSGID_DSCFG_ERROR_CATEGORY_TYPE_UNRECOGNIZED;
-    String msg = getMessage(msgID, typeName, categoryName);
-    return new ArgumentException(msgID, msg);
+    Message msg =
+        ERR_DSCFG_ERROR_CATEGORY_TYPE_UNRECOGNIZED.get(typeName, categoryName);
+    return new ArgumentException(msg);
   }
 
 
@@ -540,10 +525,9 @@
    */
   public static ArgumentException wrongManagedObjectType(
       RelationDefinition<?, ?> r, ManagedObjectDefinition<?, ?> d) {
-    int msgID = MSGID_DSCFG_ERROR_TYPE_UNRECOGNIZED;
-    String msg = getMessage(msgID, r.getUserFriendlyName(), d
-        .getUserFriendlyName());
-    return new ArgumentException(msgID, msg);
+    Message msg = ERR_DSCFG_ERROR_TYPE_UNRECOGNIZED.get(
+        d.getUserFriendlyName());
+    return new ArgumentException(msg);
   }
 
 
@@ -559,10 +543,10 @@
    */
   private static ArgumentException adapt(
       AbstractManagedObjectDefinition<?, ?> d, DefaultBehaviorException e) {
-    int msgID = MSGID_DSCFG_ERROR_PROPERTY_DEFAULT_BEHAVIOR;
-    String message = getMessage(msgID, d.getUserFriendlyName(), e
-        .getPropertyDefinition().getName(), e.getMessage());
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_PROPERTY_DEFAULT_BEHAVIOR.
+        get(d.getUserFriendlyName(), e.getPropertyDefinition().getName(),
+            e.getMessage());
+    return new ArgumentException(message);
   }
 
 
@@ -581,17 +565,17 @@
       AbstractManagedObjectDefinition<?, ?> d,
       IllegalPropertyValueException e) {
     PropertyDefinitionUsageBuilder b = new PropertyDefinitionUsageBuilder(true);
-    String syntax = b.getUsage(e.getPropertyDefinition());
+    Message syntax = b.getUsage(e.getPropertyDefinition());
 
     if (syntax.length() > 20) {
       // syntax =
-      // getMessage(MSGID_DSCFG_DESCRIPTION_PROPERTY_SYNTAX_HELP);
+      // INFO_DSCFG_DESCRIPTION_PROPERTY_SYNTAX_HELP.get();
     }
 
-    int msgID = MSGID_DSCFG_ERROR_PROPERTY_INVALID_VALUE;
-    String message = getMessage(msgID, String.valueOf(e.getIllegalValue()), d
-        .getUserFriendlyName(), e.getPropertyDefinition().getName(), syntax);
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_PROPERTY_INVALID_VALUE.
+        get(String.valueOf(e.getIllegalValue()), d.getUserFriendlyName(),
+            e.getPropertyDefinition().getName(), syntax);
+    return new ArgumentException(message);
   }
 
 
@@ -610,18 +594,17 @@
       AbstractManagedObjectDefinition<?, ?> d,
       IllegalPropertyValueStringException e) {
     PropertyDefinitionUsageBuilder b = new PropertyDefinitionUsageBuilder(true);
-    String syntax = b.getUsage(e.getPropertyDefinition());
+    Message syntax = b.getUsage(e.getPropertyDefinition());
 
     if (syntax.length() > 20) {
       // syntax =
-      // getMessage(MSGID_DSCFG_DESCRIPTION_PROPERTY_SYNTAX_HELP);
+      // INFO_DSCFG_DESCRIPTION_PROPERTY_SYNTAX_HELP.get();
     }
 
-    int msgID = MSGID_DSCFG_ERROR_PROPERTY_INVALID_VALUE;
-    String message = getMessage(msgID, String
-        .valueOf(e.getIllegalValueString()), d.getUserFriendlyName(), e
-        .getPropertyDefinition().getName(), syntax);
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_PROPERTY_INVALID_VALUE.
+        get(String.valueOf(e.getIllegalValueString()), d.getUserFriendlyName(),
+            e.getPropertyDefinition().getName(), syntax);
+    return new ArgumentException(message);
   }
 
 
@@ -639,10 +622,9 @@
   private static ArgumentException adapt(
       AbstractManagedObjectDefinition<?, ?> d,
       PropertyIsMandatoryException e) {
-    int msgID = MSGID_DSCFG_ERROR_PROPERTY_MANDATORY;
-    String message = getMessage(msgID, d.getUserFriendlyName(), e
-        .getPropertyDefinition().getName());
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_PROPERTY_MANDATORY.get(
+        d.getUserFriendlyName(), e.getPropertyDefinition().getName());
+    return new ArgumentException(message);
   }
 
 
@@ -660,10 +642,9 @@
   private static ArgumentException adapt(
       AbstractManagedObjectDefinition<?, ?> d,
       PropertyIsReadOnlyException e) {
-    int msgID = MSGID_DSCFG_ERROR_PROPERTY_READ_ONLY;
-    String message = getMessage(msgID, d.getUserFriendlyName(), e
-        .getPropertyDefinition().getName());
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_PROPERTY_READ_ONLY.get(
+        d.getUserFriendlyName(), e.getPropertyDefinition().getName());
+    return new ArgumentException(message);
   }
 
 
@@ -681,10 +662,9 @@
   private static ArgumentException adapt(
       AbstractManagedObjectDefinition<?, ?> d,
       PropertyIsSingleValuedException e) {
-    int msgID = MSGID_DSCFG_ERROR_PROPERTY_SINGLE_VALUED;
-    String message = getMessage(msgID, d.getUserFriendlyName(), e
-        .getPropertyDefinition().getName());
-    return new ArgumentException(msgID, message);
+    Message message = ERR_DSCFG_ERROR_PROPERTY_SINGLE_VALUED.get(
+        d.getUserFriendlyName(), e.getPropertyDefinition().getName());
+    return new ArgumentException(message);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ConsoleApplication.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ConsoleApplication.java
index d8ba680..e197ce2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ConsoleApplication.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ConsoleApplication.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
-
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -138,16 +138,18 @@
    *           If the user's response could not be read from the
    *           console for some reason.
    */
-  public final boolean confirmAction(String prompt) throws ArgumentException {
+  public final boolean confirmAction(Message prompt) throws ArgumentException {
     if (!isInteractive()) {
       return true;
     }
 
-    final String yes = getMessage(MSGID_DSCFG_GENERAL_CONFIRM_YES);
-    final String no = getMessage(MSGID_DSCFG_GENERAL_CONFIRM_NO);
-    final String errMsg =
-      getMessage(MSGID_DSCFG_ERROR_GENERAL_CONFIRM, yes, no);
-    prompt = prompt + String.format(" (%s / %s): ", yes, no);
+    final Message yes = INFO_DSCFG_GENERAL_CONFIRM_YES.get();
+    final Message no = INFO_DSCFG_GENERAL_CONFIRM_NO.get();
+    final Message errMsg = ERR_DSCFG_ERROR_GENERAL_CONFIRM.get(yes, no);
+    MessageBuilder mb = new MessageBuilder();
+    mb.append(prompt);
+    mb.append(String.format(" (%s / %s): ", yes, no));
+    prompt = mb.toMessage();
 
     ValidationCallback<Boolean> validator = new ValidationCallback<Boolean>() {
 
@@ -157,9 +159,9 @@
           // Empty input.
           app.println();
           app.printMessage(errMsg);
-        } else if (no.startsWith(ninput)) {
+        } else if (no.toString().startsWith(ninput)) {
           return false;
-        } else if (yes.startsWith(ninput)) {
+        } else if (yes.toString().startsWith(ninput)) {
           return true;
         } else {
           // Try again...
@@ -187,8 +189,8 @@
    * @param msg
    *          The message.
    */
-  public final void printMessage(String msg) {
-    err.println(wrapText(msg, MAX_LINE_WIDTH));
+  public final void printMessage(Message msg) {
+    err.println(wrapText(msg.toString(), MAX_LINE_WIDTH));
   }
 
 
@@ -209,7 +211,7 @@
    * @param msg
    *          The verbose message.
    */
-  public final void printVerboseMessage(String msg) {
+  public final void printVerboseMessage(Message msg) {
     if (isVerbose() || isInteractive()) {
       err.println(wrapText(msg, MAX_LINE_WIDTH));
     }
@@ -330,8 +332,9 @@
    *           If the user input could not be retrieved for some
    *           reason.
    */
-  public final <T> T readChoice(final String prompt, List<String> descriptions,
-      List<T> values, final HelpCallback helpCallback)
+  public final <T> T readChoice(
+          final Message prompt, List<Message> descriptions,
+          List<T> values, final HelpCallback helpCallback)
       throws ArgumentException {
     Validator.ensureTrue(descriptions.size() == values.size());
 
@@ -356,11 +359,11 @@
     builder.print(printer);
 
     // Get the user input.
-    String promptMsg;
+    Message promptMsg;
     if (helpCallback != null) {
-      promptMsg = getMessage(MSGID_DSCFG_GENERAL_CHOICE_PROMPT_HELP, size);
+      promptMsg = INFO_DSCFG_GENERAL_CHOICE_PROMPT_HELP.get(size);
     } else {
-      promptMsg = getMessage(MSGID_DSCFG_GENERAL_CHOICE_PROMPT_NOHELP, size);
+      promptMsg = INFO_DSCFG_GENERAL_CHOICE_PROMPT_NOHELP.get(size);
     }
 
     ValidationCallback<Integer> validator = new ValidationCallback<Integer>() {
@@ -388,7 +391,7 @@
             return i;
           } catch (NumberFormatException e) {
             app.println();
-            String errMsg = getMessage(MSGID_DSCFG_ERROR_GENERAL_CHOICE, size);
+            Message errMsg = ERR_DSCFG_ERROR_GENERAL_CHOICE.get(size);
             app.printMessage(errMsg);
             return null;
           }
@@ -420,9 +423,9 @@
    *           If the line of input could not be retrieved for some
    *           reason.
    */
-  public final String readLineOfInput(String prompt) throws ArgumentException {
+  public final String readLineOfInput(Message prompt) throws ArgumentException {
     err.println();
-    err.print(wrapText(prompt.trim() + " ", MAX_LINE_WIDTH));
+    err.print(wrapText(prompt.toString().trim() + " ", MAX_LINE_WIDTH));
     try {
       return in.readLine();
     } catch (IOException e) {
@@ -441,7 +444,7 @@
    * @throws ArgumentException
    *           If the password could not be retrieved for some reason.
    */
-  public final String readPassword(String prompt) throws ArgumentException {
+  public final String readPassword(Message prompt) throws ArgumentException {
     err.print(wrapText(prompt + " ", MAX_LINE_WIDTH));
     char[] pwChars;
     try {
@@ -474,7 +477,7 @@
    *           If an unexpected error occurred which prevented
    *           validation.
    */
-  public final <T> T readValidatedInput(String prompt,
+  public final <T> T readValidatedInput(Message prompt,
       ValidationCallback<T> validator) throws ArgumentException,
       ClientException {
     while (true) {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/CreateSubCommandHandler.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/CreateSubCommandHandler.java
index 3c1bda1..0b2034e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/CreateSubCommandHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/CreateSubCommandHandler.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -231,11 +231,11 @@
       // Create a table containing a description of each component type.
       TableBuilder builder = new TableBuilder();
 
-      int msgID = MSGID_DSCFG_DESCRIPTION_CREATE_HELP_HEADING_TYPE;
-      builder.appendHeading(getMessage(msgID));
+      builder.appendHeading(
+              INFO_DSCFG_DESCRIPTION_CREATE_HELP_HEADING_TYPE.get());
 
-      msgID = MSGID_DSCFG_DESCRIPTION_CREATE_HELP_HEADING_DESCR;
-      builder.appendHeading(getMessage(msgID));
+      builder.appendHeading(
+              INFO_DSCFG_DESCRIPTION_CREATE_HELP_HEADING_DESCR.get());
 
       boolean isFirst = true;
       for (ManagedObjectDefinition<?, ?> d : types.values()) {
@@ -398,9 +398,11 @@
 
     // Create the sub-command.
     String name = "create-" + r.getName();
-    int descriptionID = MSGID_DSCFG_DESCRIPTION_SUBCMD_CREATE;
-    this.subCommand = new SubCommand(parser, name, false, 0, 0, null,
-        descriptionID, r.getChildDefinition().getUserFriendlyPluralName());
+    Message description = INFO_DSCFG_DESCRIPTION_SUBCMD_CREATE.get(
+      r.getChildDefinition().getUserFriendlyPluralName()
+    );
+    this.subCommand = new SubCommand(parser, name, false, 0,
+            0, null, description);
 
     // Create the -t argument which is used to specify the type of
     // managed object to be created.
@@ -411,13 +413,14 @@
 
     // Register common arguments.
     registerAdvancedModeArgument(this.subCommand,
-        MSGID_DSCFG_DESCRIPTION_ADVANCED_SET, r.getUserFriendlyName());
+        INFO_DSCFG_DESCRIPTION_ADVANCED_SET.get());
 
     // Create the --property argument which is used to specify
     // property values.
     this.propertySetArgument = new StringArgument(OPTION_DSCFG_LONG_SET,
         OPTION_DSCFG_SHORT_SET, OPTION_DSCFG_LONG_SET, false, true,
-        true, "{PROP:VALUE}", null, null, MSGID_DSCFG_DESCRIPTION_PROP_VAL);
+        true, "{PROP:VALUE}", null, null,
+        INFO_DSCFG_DESCRIPTION_PROP_VAL.get());
     this.subCommand.addArgument(this.propertySetArgument);
 
     // Build the -t option usage.
@@ -436,14 +439,14 @@
       // The option is mandatory when non-interactive.
       this.typeArgument = new StringArgument("type", OPTION_DSCFG_SHORT_TYPE,
           OPTION_DSCFG_LONG_TYPE, false, false, true, "{TYPE}", null, null,
-          MSGID_DSCFG_DESCRIPTION_TYPE, r.getChildDefinition()
-              .getUserFriendlyName(), typeUsage);
+          INFO_DSCFG_DESCRIPTION_TYPE.get(r.getChildDefinition()
+              .getUserFriendlyName(), typeUsage));
     } else {
       // The option has a sensible default "generic".
       this.typeArgument = new StringArgument("type", OPTION_DSCFG_SHORT_TYPE,
           OPTION_DSCFG_LONG_TYPE, false, false, true, "{TYPE}", GENERIC_TYPE,
-          null, MSGID_DSCFG_DESCRIPTION_TYPE_DEFAULT, r.getChildDefinition()
-              .getUserFriendlyName(), GENERIC_TYPE, typeUsage);
+          null, INFO_DSCFG_DESCRIPTION_TYPE_DEFAULT.get(r.getChildDefinition()
+              .getUserFriendlyName(), GENERIC_TYPE, typeUsage));
 
       // Hide the option if it defaults to generic and generic is the
       // only possible value.
@@ -486,13 +489,12 @@
           typeName = types.keySet().iterator().next();
         } else {
           List<String> values = new ArrayList<String>(types.keySet());
-          List<String> descriptions = new ArrayList<String>(values.size());
+          List<Message> descriptions = new ArrayList<Message>(values.size());
           for (ManagedObjectDefinition<?, ?> d : types.values()) {
             descriptions.add(d.getUserFriendlyName());
           }
-          int msgID = MSGID_DSCFG_CREATE_TYPE_PROMPT;
-          String msg = getMessage(msgID, relation.getChildDefinition()
-              .getUserFriendlyName());
+          Message msg = INFO_DSCFG_CREATE_TYPE_PROMPT.get(
+                  relation.getChildDefinition().getUserFriendlyName());
           typeName = getConsoleApplication().readChoice(msg, descriptions,
               values, new TypeHelpCallback());
         }
@@ -525,35 +527,29 @@
     try {
       parent = getManagedObject(path, names);
     } catch (AuthorizationException e) {
-      int msgID = MSGID_DSCFG_ERROR_CREATE_AUTHZ;
-      String msg = getMessage(msgID, d.getUserFriendlyName());
+      Message msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(d.getUserFriendlyName());
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-          msgID, msg);
-    } catch (DefinitionDecodingException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_PARENT_DDE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn, ufn, ufn);
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
-    } catch (ManagedObjectDecodingException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_PARENT_MODE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
-    } catch (CommunicationException e) {
-      int msgID = MSGID_DSCFG_ERROR_CREATE_CE;
-      String msg = getMessage(msgID, d.getUserFriendlyName(), e.getMessage());
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
           msg);
+    } catch (DefinitionDecodingException e) {
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(ufn, ufn, ufn);
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
+    } catch (ManagedObjectDecodingException e) {
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(ufn);
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
+    } catch (CommunicationException e) {
+      Message msg = ERR_DSCFG_ERROR_CREATE_CE.get(
+          d.getUserFriendlyName(), e.getMessage());
+      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
     } catch (ConcurrentModificationException e) {
-      int msgID = MSGID_DSCFG_ERROR_CREATE_CME;
-      String msg = getMessage(msgID, d.getUserFriendlyName());
+      Message msg = ERR_DSCFG_ERROR_CREATE_CME.get(d.getUserFriendlyName());
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION,
-          msgID, msg);
+          msg);
     } catch (ManagedObjectNotFoundException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_PARENT_MONFE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msgID, msg);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(ufn);
+      throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
     }
 
     try {
@@ -621,12 +617,11 @@
       }
 
       // Confirm commit.
-      String prompt = getMessage(MSGID_DSCFG_CONFIRM_CREATE, d
-          .getUserFriendlyName());
+      Message prompt = INFO_DSCFG_CONFIRM_CREATE.get(d.getUserFriendlyName());
       if (!getConsoleApplication().confirmAction(prompt)) {
         // Output failure message.
-        String msg = getMessage(MSGID_DSCFG_CONFIRM_CREATE_FAIL, d
-            .getUserFriendlyName());
+        Message msg =
+            INFO_DSCFG_CONFIRM_CREATE_FAIL.get(d.getUserFriendlyName());
         getConsoleApplication().printVerboseMessage(msg);
         return 1;
       }
@@ -635,37 +630,33 @@
       child.commit();
 
       // Output success message.
-      String msg = getMessage(MSGID_DSCFG_CONFIRM_CREATE_SUCCESS, d
-          .getUserFriendlyName());
+      Message msg =
+          INFO_DSCFG_CONFIRM_CREATE_SUCCESS.get(d.getUserFriendlyName());
       getConsoleApplication().printVerboseMessage(msg);
     } catch (MissingMandatoryPropertiesException e) {
       throw ArgumentExceptionFactory.adaptMissingMandatoryPropertiesException(
           e, d);
     } catch (AuthorizationException e) {
-      int msgID = MSGID_DSCFG_ERROR_CREATE_AUTHZ;
-      String msg = getMessage(msgID, d.getUserFriendlyName());
+      Message msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(d.getUserFriendlyName());
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-          msgID, msg);
-    } catch (ManagedObjectAlreadyExistsException e) {
-      int msgID = MSGID_DSCFG_ERROR_CREATE_MOAEE;
-      String msg = getMessage(msgID, d.getUserFriendlyName());
-      throw new ClientException(LDAPResultCode.ENTRY_ALREADY_EXISTS,
-          msgID, msg);
-    } catch (ConcurrentModificationException e) {
-      int msgID = MSGID_DSCFG_ERROR_CREATE_CME;
-      String msg = getMessage(msgID, d.getUserFriendlyName());
-      throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION,
-          msgID, msg);
-    } catch (OperationRejectedException e) {
-      int msgID = MSGID_DSCFG_ERROR_CREATE_ORE;
-      String msg = getMessage(msgID, d.getUserFriendlyName(), e.getMessage());
-      throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION,
-          msgID, msg);
-    } catch (CommunicationException e) {
-      int msgID = MSGID_DSCFG_ERROR_CREATE_CE;
-      String msg = getMessage(msgID, d.getUserFriendlyName(), e.getMessage());
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
           msg);
+    } catch (ManagedObjectAlreadyExistsException e) {
+      Message msg = ERR_DSCFG_ERROR_CREATE_MOAEE.get(d.getUserFriendlyName());
+      throw new ClientException(LDAPResultCode.ENTRY_ALREADY_EXISTS,
+          msg);
+    } catch (ConcurrentModificationException e) {
+      Message msg = ERR_DSCFG_ERROR_CREATE_CME.get(d.getUserFriendlyName());
+      throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION,
+          msg);
+    } catch (OperationRejectedException e) {
+      Message msg = ERR_DSCFG_ERROR_CREATE_ORE.get(
+          d.getUserFriendlyName(), e.getMessage());
+      throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION,
+          msg);
+    } catch (CommunicationException e) {
+      Message msg = ERR_DSCFG_ERROR_CREATE_CE.get(
+          d.getUserFriendlyName(), e.getMessage());
+      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
     }
 
     return 0;
@@ -680,8 +671,7 @@
       final ManagedObjectDefinition<? extends C, ? extends S> d,
       final List<DefaultBehaviorException> exceptions)
       throws ArgumentException, ClientException {
-    int msgID = MSGID_DSCFG_CREATE_NAME_PROMPT;
-    String msg = getMessage(msgID, d.getUserFriendlyName());
+    Message msg = INFO_DSCFG_CREATE_NAME_PROMPT.get(d.getUserFriendlyName());
     ValidationCallback<ManagedObject<? extends C>> validator =
       new ValidationCallback<ManagedObject<? extends C>>() {
 
@@ -697,7 +687,7 @@
           ArgumentException ae = ArgumentExceptionFactory
               .adaptIllegalManagedObjectNameException(e, d);
           app.println();
-          app.printMessage(ae.getMessage());
+          app.printMessage(ae.getMessageObject());
           return null;
         }
 
@@ -707,21 +697,19 @@
           // Attempt to retrieve a child using this name.
           parent.getChild(irelation, input);
         } catch (AuthorizationException e) {
-          int msgID = MSGID_DSCFG_ERROR_CREATE_AUTHZ;
-          String msg = getMessage(msgID, irelation.getUserFriendlyName());
+          Message msg =
+              ERR_DSCFG_ERROR_CREATE_AUTHZ.get(irelation.getUserFriendlyName());
           throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-              msgID, msg);
-        } catch (ConcurrentModificationException e) {
-          int msgID = MSGID_DSCFG_ERROR_CREATE_CME;
-          String msg = getMessage(msgID, irelation.getUserFriendlyName());
-          throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
               msg);
+        } catch (ConcurrentModificationException e) {
+          Message msg =
+              ERR_DSCFG_ERROR_CREATE_CME.get(irelation.getUserFriendlyName());
+          throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
         } catch (CommunicationException e) {
-          int msgID = MSGID_DSCFG_ERROR_CREATE_CE;
-          String msg = getMessage(msgID, irelation.getUserFriendlyName(), e
-              .getMessage());
+          Message msg = ERR_DSCFG_ERROR_CREATE_CE.get(
+              irelation.getUserFriendlyName(), e.getMessage());
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-              msgID, msg);
+              msg);
         } catch (DefinitionDecodingException e) {
           // Do nothing.
         } catch (ManagedObjectDecodingException e) {
@@ -732,8 +720,8 @@
         }
 
         // A child with the specified name must already exist.
-        int msgID = MSGID_DSCFG_ERROR_CREATE_NAME_ALREADY_EXISTS;
-        String msg = getMessage(msgID, relation.getUserFriendlyName(), input);
+        Message msg = ERR_DSCFG_ERROR_CREATE_NAME_ALREADY_EXISTS.get(
+                relation.getUserFriendlyName(), input);
         app.println();
         app.printMessage(msg);
         return null;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/DSConfig.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/DSConfig.java
index ba3df5d..f8ada12 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/DSConfig.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/DSConfig.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
 
 
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -125,7 +125,7 @@
         app.initializeClientEnvironment();
       } catch (InitializationException e) {
         // TODO: is this ok as an error message?
-        app.printMessage(e.getMessage());
+        app.printMessage(e.getMessageObject());
         return 1;
       }
     }
@@ -194,7 +194,7 @@
     super(in, out, err);
 
     this.parser = new SubCommandArgumentParser(this.getClass().getName(),
-        getMessage(MSGID_CONFIGDS_TOOL_DESCRIPTION), false);
+        INFO_CONFIGDS_TOOL_DESCRIPTION.get(), false);
 
     this.factory = factory;
   }
@@ -275,9 +275,9 @@
 
 
   // Displays the provided message followed by a help usage reference.
-  private void displayMessageAndUsageReference(String message) {
+  private void displayMessageAndUsageReference(Message message) {
     printMessage(message);
-    printMessage("");
+    printMessage(Message.EMPTY);
     printMessage(parser.getHelpUsageReference());
   }
 
@@ -292,19 +292,20 @@
   private void initializeGlobalArguments() throws ArgumentException {
     if (globalArgumentsInitialized == false) {
       verboseArgument = new BooleanArgument("verbose", 'v', "verbose",
-          MSGID_DESCRIPTION_VERBOSE);
+          INFO_DESCRIPTION_VERBOSE.get());
 
       quietArgument = new BooleanArgument("quiet", 'q', "quiet",
-          MSGID_DESCRIPTION_QUIET);
+          INFO_DESCRIPTION_QUIET.get());
 
       scriptFriendlyArgument = new BooleanArgument("script-friendly", 's',
-          "script-friendly", MSGID_DESCRIPTION_SCRIPT_FRIENDLY);
+          "script-friendly", INFO_DESCRIPTION_SCRIPT_FRIENDLY.get());
 
       interactiveArgument = new BooleanArgument("interactive", 'i',
-          "interactive", MSGID_DESCRIPTION_INTERACTIVE);
+          "interactive", INFO_DESCRIPTION_INTERACTIVE.get());
 
       showUsageArgument = new BooleanArgument("showUsage", OPTION_SHORT_HELP,
-          OPTION_LONG_HELP, MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_SUMMARY);
+              OPTION_LONG_HELP,
+              INFO_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_SUMMARY.get());
 
       // Register the global arguments.
       parser.addGlobalArgument(showUsageArgument);
@@ -369,9 +370,9 @@
         SortedSet<SubCommand> subCommands = group.getValue();
 
         String option = OPTION_LONG_HELP + "-" + tag.getName();
-        String synopsis = tag.getSynopsis().toLowerCase();
+        String synopsis = tag.getSynopsis().toString().toLowerCase();
         BooleanArgument arg = new BooleanArgument(option, null, option,
-            MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE, synopsis);
+            INFO_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE.get(synopsis));
 
         parser.addGlobalArgument(arg);
         parser.setUsageGroupArgument(arg, subCommands);
@@ -380,7 +381,7 @@
       // Register the --help-all argument.
       String option = OPTION_LONG_HELP + "-all";
       BooleanArgument arg = new BooleanArgument(option, null, option,
-          MSGID_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_ALL);
+          INFO_DSCFG_DESCRIPTION_SHOW_GROUP_USAGE_ALL.get());
 
       parser.addGlobalArgument(arg);
       parser.setUsageGroupArgument(arg, allSubCommands);
@@ -407,8 +408,7 @@
       initializeGlobalArguments();
       initializeSubCommands();
     } catch (ArgumentException e) {
-      int msgID = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, e.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(e.getMessage());
       printMessage(message);
       return 1;
     }
@@ -417,8 +417,7 @@
     try {
       parser.parseArguments(args);
     } catch (ArgumentException ae) {
-      int msgID = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       displayMessageAndUsageReference(message);
       return 1;
     }
@@ -431,32 +430,30 @@
 
     // Make sure that we have a sub-command.
     if (parser.getSubCommand() == null) {
-      int msgID = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID,
-          getMessage(MSGID_DSCFG_ERROR_MISSING_SUBCOMMAND));
+      Message message = ERR_ERROR_PARSING_ARGS.get(
+              ERR_DSCFG_ERROR_MISSING_SUBCOMMAND.get());
       displayMessageAndUsageReference(message);
       return 1;
     }
 
     if (quietArgument.isPresent() && verboseArgument.isPresent()) {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, quietArgument.getLongIdentifier(),
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              quietArgument.getLongIdentifier(),
           verboseArgument.getLongIdentifier());
       displayMessageAndUsageReference(message);
       return 1;
     }
 
     if (quietArgument.isPresent() && interactiveArgument.isPresent()) {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, quietArgument.getLongIdentifier(),
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+              quietArgument.getLongIdentifier(),
           interactiveArgument.getLongIdentifier());
       displayMessageAndUsageReference(message);
       return 1;
     }
 
     if (scriptFriendlyArgument.isPresent() && verboseArgument.isPresent()) {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, scriptFriendlyArgument
+      Message message = ERR_TOOL_CONFLICTING_ARGS.get(scriptFriendlyArgument
           .getLongIdentifier(), verboseArgument.getLongIdentifier());
       displayMessageAndUsageReference(message);
       return 1;
@@ -466,7 +463,7 @@
     try {
       factory.validateGlobalArguments();
     } catch (ArgumentException e) {
-      printMessage(e.getMessage());
+      printMessage(e.getMessageObject());
       return 1;
     }
 
@@ -475,19 +472,19 @@
     try {
       return handler.run();
     } catch (ArgumentException e) {
-      printMessage(e.getMessage());
+      printMessage(e.getMessageObject());
       return 1;
     } catch (ClientException e) {
       // If the client exception was caused by a decoding exception
       // then we should display the causes.
-      printMessage(e.getMessage());
+      printMessage(e.getMessageObject());
 
       Throwable cause = e.getCause();
       if (cause instanceof ManagedObjectDecodingException) {
         ManagedObjectDecodingException de =
           (ManagedObjectDecodingException) cause;
 
-        printMessage("");
+        printMessage(Message.EMPTY);
         TableBuilder builder = new TableBuilder();
         for (PropertyException pe : de.getCauses()) {
           AbstractManagedObjectDefinition<?, ?> d = de
@@ -503,7 +500,7 @@
         printer.setDisplayHeadings(false);
         printer.setColumnWidth(1, 0);
         builder.print(printer);
-        printMessage("");
+        printMessage(Message.EMPTY);
       }
 
       return 1;
@@ -511,7 +508,7 @@
       if (debugEnabled()) {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      printMessage(StaticUtils.stackTraceToString(e));
+      printMessage(Message.raw(StaticUtils.stackTraceToString(e)));
       return 1;
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/DeleteSubCommandHandler.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/DeleteSubCommandHandler.java
index be09a8a..cced653 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/DeleteSubCommandHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/DeleteSubCommandHandler.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 import java.util.List;
 
@@ -150,10 +150,10 @@
 
     // Create the sub-command.
     String name = "delete-" + r.getName();
-    String ufpn = r.getChildDefinition().getUserFriendlyPluralName();
-    int descriptionID = MSGID_DSCFG_DESCRIPTION_SUBCMD_DELETE;
+    Message ufpn = r.getChildDefinition().getUserFriendlyPluralName();
+    Message description = INFO_DSCFG_DESCRIPTION_SUBCMD_DELETE.get(ufpn);
     this.subCommand = new SubCommand(parser, name, false, 0, 0, null,
-        descriptionID, ufpn);
+        description);
 
     // Create the naming arguments.
     this.namingArgs = createNamingArgs(subCommand, c, false);
@@ -161,7 +161,7 @@
     // Create the --force argument which is used to force deletion.
     this.forceArgument = new BooleanArgument(OPTION_DSCFG_LONG_FORCE,
         OPTION_DSCFG_SHORT_FORCE, OPTION_DSCFG_LONG_FORCE,
-        MSGID_DSCFG_DESCRIPTION_FORCE, ufpn);
+        INFO_DSCFG_DESCRIPTION_FORCE.get(ufpn));
     subCommand.addArgument(forceArgument);
 
     // Register the tags associated with the child managed objects.
@@ -193,38 +193,33 @@
     try {
       parent = getManagedObject(path, names);
     } catch (AuthorizationException e) {
-      int msgID = MSGID_DSCFG_ERROR_DELETE_AUTHZ;
-      String msg = getMessage(msgID, relation.getUserFriendlyName());
+      Message msg =
+          ERR_DSCFG_ERROR_DELETE_AUTHZ.get(relation.getUserFriendlyName());
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-          msgID, msg);
-    } catch (DefinitionDecodingException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_PARENT_DDE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn, ufn, ufn);
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
-    } catch (ManagedObjectDecodingException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_PARENT_MODE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
-    } catch (CommunicationException e) {
-      int msgID = MSGID_DSCFG_ERROR_DELETE_CE;
-      String msg = getMessage(msgID, relation.getUserFriendlyName(), e
-          .getMessage());
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
           msg);
+    } catch (DefinitionDecodingException e) {
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(ufn, ufn, ufn);
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
+    } catch (ManagedObjectDecodingException e) {
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(ufn);
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
+    } catch (CommunicationException e) {
+      Message msg = ERR_DSCFG_ERROR_DELETE_CE.get(
+          relation.getUserFriendlyName(), e.getMessage());
+      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
     } catch (ConcurrentModificationException e) {
-      int msgID = MSGID_DSCFG_ERROR_DELETE_CME;
-      String msg = getMessage(msgID, relation.getUserFriendlyName());
+      Message msg =
+          ERR_DSCFG_ERROR_DELETE_CME.get(relation.getUserFriendlyName());
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION,
-          msgID, msg);
+          msg);
     } catch (ManagedObjectNotFoundException e) {
       // Ignore the error if the deletion is being forced.
       if (!forceArgument.isPresent()) {
-        int msgID = MSGID_DSCFG_ERROR_GET_PARENT_MONFE;
-        String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-        String msg = getMessage(msgID, ufn);
-        throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msgID, msg);
+        Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+        Message msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(ufn);
+        throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
       }
     }
 
@@ -254,40 +249,36 @@
           }
         }
       } catch (AuthorizationException e) {
-        int msgID = MSGID_DSCFG_ERROR_DELETE_AUTHZ;
-        String msg = getMessage(msgID, relation.getUserFriendlyName());
+        Message msg =
+            ERR_DSCFG_ERROR_DELETE_AUTHZ.get(relation.getUserFriendlyName());
         throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-            msgID, msg);
-      } catch (OperationRejectedException e) {
-        int msgID = MSGID_DSCFG_ERROR_DELETE_ORE;
-        String msg = getMessage(msgID, relation.getUserFriendlyName(), e
-            .getMessage());
-        throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
             msg);
+      } catch (OperationRejectedException e) {
+        Message msg = ERR_DSCFG_ERROR_DELETE_ORE.get(
+            relation.getUserFriendlyName(), e.getMessage());
+        throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
       } catch (ManagedObjectNotFoundException e) {
         // Ignore the error if the deletion is being forced.
         if (!forceArgument.isPresent()) {
-          int msgID = MSGID_DSCFG_ERROR_DELETE_MONFE;
-          String msg = getMessage(msgID, relation.getUserFriendlyName());
-          throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msgID, msg);
+          Message msg =
+              ERR_DSCFG_ERROR_DELETE_MONFE.get(relation.getUserFriendlyName());
+          throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
         }
       } catch (ConcurrentModificationException e) {
-        int msgID = MSGID_DSCFG_ERROR_DELETE_CME;
-        String msg = getMessage(msgID, relation.getUserFriendlyName());
-        throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
-            msg);
+        Message msg =
+            ERR_DSCFG_ERROR_DELETE_CME.get(relation.getUserFriendlyName());
+        throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
       } catch (CommunicationException e) {
-        int msgID = MSGID_DSCFG_ERROR_DELETE_CE;
-        String msg = getMessage(msgID, relation.getUserFriendlyName(), e
-            .getMessage());
+        Message msg = ERR_DSCFG_ERROR_DELETE_CE.get(
+            relation.getUserFriendlyName(), e.getMessage());
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-            msgID, msg);
+            msg);
       }
     }
 
     // Output success message.
-    String msg = getMessage(MSGID_DSCFG_CONFIRM_DELETE_SUCCESS, relation
-        .getUserFriendlyName());
+    Message msg =
+        INFO_DSCFG_CONFIRM_DELETE_SUCCESS.get(relation.getUserFriendlyName());
     getConsoleApplication().printVerboseMessage(msg);
 
     return 0;
@@ -297,12 +288,12 @@
 
   // Confirm deletion.
   private boolean confirmDeletion() throws ArgumentException {
-    String prompt = getMessage(MSGID_DSCFG_CONFIRM_DELETE, relation
-        .getUserFriendlyName());
+    Message prompt =
+        INFO_DSCFG_CONFIRM_DELETE.get(relation.getUserFriendlyName());
     if (!getConsoleApplication().confirmAction(prompt)) {
       // Output failure message.
-      String msg = getMessage(MSGID_DSCFG_CONFIRM_DELETE_FAIL, relation
-          .getUserFriendlyName());
+      Message msg =
+          INFO_DSCFG_CONFIRM_DELETE_FAIL.get(relation.getUserFriendlyName());
       getConsoleApplication().printVerboseMessage(msg);
       return false;
     } else {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/GetPropSubCommandHandler.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/GetPropSubCommandHandler.java
index 9295ddd..ad325ce 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/GetPropSubCommandHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/GetPropSubCommandHandler.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 import java.io.PrintStream;
 import java.util.Collection;
@@ -168,9 +168,9 @@
 
     // Create the sub-command.
     String name = "get-" + r.getName() + "-prop";
-    int descriptionID = MSGID_DSCFG_DESCRIPTION_SUBCMD_GETPROP;
-    this.subCommand = new SubCommand(parser, name, false, 0, 0, null,
-        descriptionID, r.getChildDefinition().getUserFriendlyName());
+    Message message = INFO_DSCFG_DESCRIPTION_SUBCMD_GETPROP.get(
+            r.getChildDefinition().getUserFriendlyName());
+    this.subCommand = new SubCommand(parser, name, false, 0, 0, null, message);
 
     // Create the naming arguments.
     this.namingArgs = createNamingArgs(subCommand, path, false);
@@ -178,7 +178,7 @@
     // Register common arguments.
     registerPropertyNameArgument(this.subCommand);
     registerAdvancedModeArgument(this.subCommand,
-        MSGID_DSCFG_DESCRIPTION_ADVANCED_GET, r.getUserFriendlyName());
+        INFO_DSCFG_DESCRIPTION_ADVANCED_GET.get(r.getUserFriendlyName()));
     registerRecordModeArgument(this.subCommand);
     registerUnitSizeArgument(this.subCommand);
     registerUnitTimeArgument(this.subCommand);
@@ -217,38 +217,30 @@
     try {
       child = getManagedObject(path, names);
     } catch (AuthorizationException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_CHILD_AUTHZ;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_CHILD_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-          msgID, msg);
+          msg);
     } catch (DefinitionDecodingException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_CHILD_DDE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn, ufn, ufn);
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_CHILD_DDE.get(ufn, ufn, ufn);
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
     } catch (ManagedObjectDecodingException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_CHILD_MODE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_CHILD_MODE.get(ufn);
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
     } catch (CommunicationException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_CHILD_CE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn, e.getMessage());
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-          msg);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_CHILD_CE.get(ufn, e.getMessage());
+      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
     } catch (ConcurrentModificationException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_CHILD_CME;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
-          msg);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_CHILD_CME.get(ufn);
+      throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
     } catch (ManagedObjectNotFoundException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_CHILD_MONFE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msgID, msg);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_CHILD_MONFE.get(ufn);
+      throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
     }
 
     // Validate the property names.
@@ -269,8 +261,8 @@
 
     // Now output its properties.
     TableBuilder builder = new TableBuilder();
-    builder.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_NAME));
-    builder.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_VALUE));
+    builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_NAME.get());
+    builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_VALUE.get());
     builder.addSortKey(0);
     for (PropertyDefinition<?> pd : pdList) {
       if (pd.hasOption(PropertyOption.HIDDEN)) {
@@ -309,10 +301,10 @@
     if (values.isEmpty()) {
       // There are no values or default values. Display the default
       // behavior for alias values.
-      DefaultBehaviorProviderVisitor<T, String, Void> visitor =
-        new DefaultBehaviorProviderVisitor<T, String, Void>() {
+      DefaultBehaviorProviderVisitor<T, Message, Void> visitor =
+        new DefaultBehaviorProviderVisitor<T, Message, Void>() {
 
-        public String visitAbsoluteInherited(
+        public Message visitAbsoluteInherited(
             AbsoluteInheritedDefaultBehaviorProvider<T> d, Void p) {
           // Should not happen - inherited default values are
           // displayed as normal values.
@@ -321,7 +313,7 @@
 
 
 
-        public String visitAlias(AliasDefaultBehaviorProvider<T> d, Void p) {
+        public Message visitAlias(AliasDefaultBehaviorProvider<T> d, Void p) {
           if (getConsoleApplication().isVerbose()) {
             return d.getSynopsis();
           } else {
@@ -331,7 +323,7 @@
 
 
 
-        public String visitDefined(DefinedDefaultBehaviorProvider<T> d,
+        public Message visitDefined(DefinedDefaultBehaviorProvider<T> d,
             Void p) {
           // Should not happen - real default values are displayed as
           // normal values.
@@ -340,7 +332,7 @@
 
 
 
-        public String visitRelativeInherited(
+        public Message visitRelativeInherited(
             RelativeInheritedDefaultBehaviorProvider<T> d, Void p) {
           // Should not happen - inherited default values are
           // displayed as normal values.
@@ -349,7 +341,7 @@
 
 
 
-        public String visitUndefined(UndefinedDefaultBehaviorProvider<T> d,
+        public Message visitUndefined(UndefinedDefaultBehaviorProvider<T> d,
             Void p) {
           return null;
         }
@@ -358,7 +350,7 @@
       builder.startRow();
       builder.appendCell(pd.getName());
 
-      String content = pd.getDefaultBehaviorProvider().accept(visitor, null);
+      Message content = pd.getDefaultBehaviorProvider().accept(visitor, null);
       if (content == null) {
         if (getConsoleApplication().isScriptFriendly()) {
           builder.appendCell();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java
index 337c4bc..5ea9b41 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java
@@ -26,10 +26,11 @@
  */
 package org.opends.server.tools.dsconfig;
 
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.Message;
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -92,15 +93,15 @@
      *          The property type.
      */
     private static class DefaultVisitor<T> implements
-        DefaultBehaviorProviderVisitor<T, String, PropertyDefinition<T>> {
+        DefaultBehaviorProviderVisitor<T, Message, PropertyDefinition<T>> {
 
       /**
        * {@inheritDoc}
        */
-      public String visitAbsoluteInherited(
+      public Message visitAbsoluteInherited(
           AbsoluteInheritedDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
-        return getMessage(MSGID_DSCFG_HELP_FIELD_INHERITED_ABS, d
+        return INFO_DSCFG_HELP_FIELD_INHERITED_ABS.get(d
             .getPropertyName(), d.getManagedObjectPath()
             .getRelationDefinition().getUserFriendlyName());
       }
@@ -110,7 +111,7 @@
       /**
        * {@inheritDoc}
        */
-      public String visitAlias(AliasDefaultBehaviorProvider<T> d,
+      public Message visitAlias(AliasDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
         return d.getSynopsis();
       }
@@ -120,9 +121,9 @@
       /**
        * {@inheritDoc}
        */
-      public String visitDefined(DefinedDefaultBehaviorProvider<T> d,
+      public Message visitDefined(DefinedDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
-        StringBuilder builder = new StringBuilder();
+        MessageBuilder builder = new MessageBuilder();
         PropertyValuePrinter printer = new PropertyValuePrinter(null, null,
             false);
         boolean isFirst = true;
@@ -135,7 +136,7 @@
           builder.append(printer.print(p, value));
         }
 
-        return builder.toString();
+        return builder.toMessage();
       }
 
 
@@ -143,15 +144,15 @@
       /**
        * {@inheritDoc}
        */
-      public String visitRelativeInherited(
+      public Message visitRelativeInherited(
           RelativeInheritedDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
         if (d.getRelativeOffset() == 0) {
-          return getMessage(MSGID_DSCFG_HELP_FIELD_INHERITED_THIS, d
+          return INFO_DSCFG_HELP_FIELD_INHERITED_THIS.get(d
               .getPropertyName(), d.getManagedObjectDefinition()
               .getUserFriendlyName());
         } else {
-          return getMessage(MSGID_DSCFG_HELP_FIELD_INHERITED_PARENT, d
+          return INFO_DSCFG_HELP_FIELD_INHERITED_PARENT.get(d
               .getPropertyName(), d.getManagedObjectDefinition()
               .getUserFriendlyName());
         }
@@ -162,9 +163,9 @@
       /**
        * {@inheritDoc}
        */
-      public String visitUndefined(UndefinedDefaultBehaviorProvider<T> d,
+      public Message visitUndefined(UndefinedDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
-        return getMessage(MSGID_DSCFG_HELP_FIELD_UNDEFINED);
+        return INFO_DSCFG_HELP_FIELD_UNDEFINED.get();
       }
 
     }
@@ -191,7 +192,7 @@
      * @return Returns the user-friendly description of a property's
      *         default behavior.
      */
-    public <T> String print(PropertyDefinition<T> pd) {
+    public <T> Message print(PropertyDefinition<T> pd) {
       DefaultVisitor<T> v = new DefaultVisitor<T>();
       return pd.getDefaultBehaviorProvider().accept(v, pd);
     }
@@ -224,7 +225,7 @@
       @Override
       public <E extends Enum<E>> Void visitEnum(EnumPropertyDefinition<E> d,
           PrintStream p) {
-        displayUsage(p, getMessage(MSGID_DSCFG_HELP_FIELD_ENUM));
+        displayUsage(p, INFO_DSCFG_HELP_FIELD_ENUM.get());
         p.println();
 
         TableBuilder builder = new TableBuilder();
@@ -268,7 +269,7 @@
 
         TableBuilder builder = new TableBuilder();
         builder.startRow();
-        builder.appendCell(getMessage(MSGID_DSCFG_HELP_HEADING_SYNTAX));
+        builder.appendCell(INFO_DSCFG_HELP_HEADING_SYNTAX.get());
         builder.appendCell(HEADING_SEPARATOR);
         builder.appendCell(usageBuilder.getUsage(d));
 
@@ -309,10 +310,10 @@
 
 
       // Common usage.
-      private void displayUsage(PrintStream p, String usage) {
+      private void displayUsage(PrintStream p, Message usage) {
         TableBuilder builder = new TableBuilder();
         builder.startRow();
-        builder.appendCell(getMessage(MSGID_DSCFG_HELP_HEADING_SYNTAX));
+        builder.appendCell(INFO_DSCFG_HELP_HEADING_SYNTAX.get());
         builder.appendCell(HEADING_SEPARATOR);
         builder.appendCell(usage);
 
@@ -396,14 +397,14 @@
   private static final Character OPTION_DSCFG_SHORT_CATEGORY = 'c';
 
   static {
-    int tmp = getMessage(MSGID_DSCFG_HELP_HEADING_SYNTAX).length();
-    tmp = Math.max(tmp, getMessage(MSGID_DSCFG_HELP_HEADING_DEFAULT).length());
-    tmp = Math.max(tmp, getMessage(MSGID_DSCFG_HELP_HEADING_MULTI_VALUED)
+    int tmp = INFO_DSCFG_HELP_HEADING_SYNTAX.get().length();
+    tmp = Math.max(tmp, INFO_DSCFG_HELP_HEADING_DEFAULT.get().length());
+    tmp = Math.max(tmp, INFO_DSCFG_HELP_HEADING_MULTI_VALUED.get()
         .length());
     tmp = Math
-        .max(tmp, getMessage(MSGID_DSCFG_HELP_HEADING_MANDATORY).length());
+        .max(tmp, INFO_DSCFG_HELP_HEADING_MANDATORY.get().length());
     tmp = Math
-        .max(tmp, getMessage(MSGID_DSCFG_HELP_HEADING_READ_ONLY).length());
+        .max(tmp, INFO_DSCFG_HELP_HEADING_READ_ONLY.get().length());
     HEADING_WIDTH = tmp;
   }
 
@@ -443,7 +444,7 @@
     PropertyDefinition<?> pd = d.getPropertyDefinition(name);
 
     // Display the title.
-    out.println(getMessage(MSGID_DSCFG_HELP_HEADING_PROPERTY, name));
+    out.println(INFO_DSCFG_HELP_HEADING_PROPERTY.get(name));
 
     // Display the property synopsis and description.
     out.println();
@@ -466,48 +467,48 @@
     DefaultBehaviorPrinter defaultPrinter = new DefaultBehaviorPrinter();
 
     builder.startRow();
-    builder.appendCell(getMessage(MSGID_DSCFG_HELP_HEADING_DEFAULT));
+    builder.appendCell(INFO_DSCFG_HELP_HEADING_DEFAULT.get());
     builder.appendCell(HEADING_SEPARATOR);
     builder.appendCell(defaultPrinter.print(pd));
 
     // Display options.
     builder.startRow();
-    builder.appendCell(getMessage(MSGID_DSCFG_HELP_HEADING_ADVANCED));
+    builder.appendCell(INFO_DSCFG_HELP_HEADING_ADVANCED.get());
     builder.appendCell(HEADING_SEPARATOR);
     if (pd.hasOption(PropertyOption.ADVANCED)) {
-      builder.appendCell(getMessage(MSGID_DSCFG_GENERAL_CONFIRM_YES));
+      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_YES.get());
     } else {
-      builder.appendCell(getMessage(MSGID_DSCFG_GENERAL_CONFIRM_NO));
+      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_NO.get());
     }
 
     builder.startRow();
-    builder.appendCell(getMessage(MSGID_DSCFG_HELP_HEADING_MULTI_VALUED));
+    builder.appendCell(INFO_DSCFG_HELP_HEADING_MULTI_VALUED.get());
     builder.appendCell(HEADING_SEPARATOR);
     if (pd.hasOption(PropertyOption.MULTI_VALUED)) {
-      builder.appendCell(getMessage(MSGID_DSCFG_GENERAL_CONFIRM_YES));
+      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_YES.get());
     } else {
-      builder.appendCell(getMessage(MSGID_DSCFG_GENERAL_CONFIRM_NO));
+      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_NO.get());
     }
 
     builder.startRow();
-    builder.appendCell(getMessage(MSGID_DSCFG_HELP_HEADING_MANDATORY));
+    builder.appendCell(INFO_DSCFG_HELP_HEADING_MANDATORY.get());
     builder.appendCell(HEADING_SEPARATOR);
     if (pd.hasOption(PropertyOption.MANDATORY)) {
-      builder.appendCell(getMessage(MSGID_DSCFG_GENERAL_CONFIRM_YES));
+      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_YES.get());
     } else {
-      builder.appendCell(getMessage(MSGID_DSCFG_GENERAL_CONFIRM_NO));
+      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_NO.get());
     }
 
     builder.startRow();
-    builder.appendCell(getMessage(MSGID_DSCFG_HELP_HEADING_READ_ONLY));
+    builder.appendCell(INFO_DSCFG_HELP_HEADING_READ_ONLY.get());
     builder.appendCell(HEADING_SEPARATOR);
     if (pd.hasOption(PropertyOption.MONITORING)) {
-      builder.appendCell(getMessage(MSGID_DSCFG_HELP_FIELD_MONITORING));
+      builder.appendCell(INFO_DSCFG_HELP_FIELD_MONITORING.get());
     } else if (pd.hasOption(PropertyOption.READ_ONLY)) {
-      builder.appendCell(getMessage(MSGID_DSCFG_HELP_FIELD_READ_ONLY, d
+      builder.appendCell(INFO_DSCFG_HELP_FIELD_READ_ONLY.get(d
           .getUserFriendlyName()));
     } else {
-      builder.appendCell(getMessage(MSGID_DSCFG_GENERAL_CONFIRM_NO));
+      builder.appendCell(INFO_DSCFG_GENERAL_CONFIRM_NO.get());
     }
 
     TextTablePrinter factory = new TextTablePrinter(out);
@@ -519,15 +520,15 @@
 
     // Administrator action.
     AdministratorAction action = pd.getAdministratorAction();
-    String synopsis = action.getSynopsis();
+    Message synopsis = action.getSynopsis();
     if (synopsis == null) {
       switch (action.getType()) {
       case COMPONENT_RESTART:
-        synopsis = getMessage(MSGID_DSCFG_HELP_FIELD_COMPONENT_RESTART, d
-            .getUserFriendlyName());
+        synopsis = INFO_DSCFG_HELP_FIELD_COMPONENT_RESTART.get(
+            d.getUserFriendlyName());
         break;
       case SERVER_RESTART:
-        synopsis = getMessage(MSGID_DSCFG_HELP_FIELD_SERVER_RESTART);
+        synopsis = INFO_DSCFG_HELP_FIELD_SERVER_RESTART.get();
         break;
       default:
         // Do nothing.
@@ -574,28 +575,29 @@
 
     // Create the sub-command.
     String name = "list-properties";
-    int descriptionID = MSGID_DSCFG_DESCRIPTION_SUBCMD_HELPPROP;
-    this.subCommand = new SubCommand(parser, name, false, 0, 0, null,
-        descriptionID);
+    Message 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,
         OPTION_DSCFG_SHORT_CATEGORY, OPTION_DSCFG_LONG_CATEGORY, false, false,
-        true, "{CATEGORY}", null, null, MSGID_DSCFG_DESCRIPTION_HELP_CATEGORY);
+        true, "{CATEGORY}", null, null,
+        INFO_DSCFG_DESCRIPTION_HELP_CATEGORY.get());
     this.subCommand.addArgument(this.categoryArgument);
 
     this.typeArgument = new StringArgument(OPTION_DSCFG_LONG_TYPE,
         OPTION_DSCFG_SHORT_TYPE, OPTION_DSCFG_LONG_TYPE, false, false, true,
-        "{TYPE}", null, null, MSGID_DSCFG_DESCRIPTION_HELP_TYPE);
+        "{TYPE}", null, null, INFO_DSCFG_DESCRIPTION_HELP_TYPE.get());
     this.subCommand.addArgument(this.typeArgument);
 
     this.inheritedModeArgument = new BooleanArgument(
         OPTION_DSCFG_LONG_INHERITED, OPTION_DSCFG_SHORT_INHERITED,
-        OPTION_DSCFG_LONG_INHERITED, MSGID_DSCFG_DESCRIPTION_HELP_INHERITED);
+        OPTION_DSCFG_LONG_INHERITED,
+        INFO_DSCFG_DESCRIPTION_HELP_INHERITED.get());
     subCommand.addArgument(inheritedModeArgument);
 
     // Register common arguments.
     registerAdvancedModeArgument(this.subCommand,
-        MSGID_DSCFG_DESCRIPTION_ADVANCED_HELP);
+        INFO_DSCFG_DESCRIPTION_ADVANCED_HELP.get());
     registerPropertyNameArgument(this.subCommand);
 
     this.categoryMap = new TreeMap<String,
@@ -788,18 +790,18 @@
       Tag tag, Set<String> propertyNames) {
     PrintStream out = getConsoleApplication().getOutputStream();
     if (!getConsoleApplication().isScriptFriendly()) {
-      out.println(getMessage(MSGID_DSCFG_HELP_DESCRIPTION_OPTION));
+      out.println(INFO_DSCFG_HELP_DESCRIPTION_OPTION.get());
       out.println();
       out.print(" r -- ");
-      out.println(getMessage(MSGID_DSCFG_HELP_DESCRIPTION_READ));
+      out.println(INFO_DSCFG_HELP_DESCRIPTION_READ.get());
       out.print(" w -- ");
-      out.println(getMessage(MSGID_DSCFG_HELP_DESCRIPTION_WRITE));
+      out.println(INFO_DSCFG_HELP_DESCRIPTION_WRITE.get());
       out.print(" m -- ");
-      out.println(getMessage(MSGID_DSCFG_HELP_DESCRIPTION_MANDATORY));
+      out.println(INFO_DSCFG_HELP_DESCRIPTION_MANDATORY.get());
       out.print(" s -- ");
-      out.println(getMessage(MSGID_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED));
+      out.println(INFO_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED.get());
       out.print(" a -- ");
-      out.println(getMessage(MSGID_DSCFG_HELP_DESCRIPTION_ADMIN_ACTION));
+      out.println(INFO_DSCFG_HELP_DESCRIPTION_ADMIN_ACTION.get());
       out.println();
       out.println();
     }
@@ -807,11 +809,11 @@
     // Headings.
     TableBuilder builder = new TableBuilder();
 
-    builder.appendHeading(getMessage(MSGID_DSCFG_HEADING_COMPONENT_NAME));
-    builder.appendHeading(getMessage(MSGID_DSCFG_HEADING_COMPONENT_TYPE));
-    builder.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_NAME));
-    builder.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_OPTIONS));
-    builder.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_SYNTAX));
+    builder.appendHeading(INFO_DSCFG_HEADING_COMPONENT_NAME.get());
+    builder.appendHeading(INFO_DSCFG_HEADING_COMPONENT_TYPE.get());
+    builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_NAME.get());
+    builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_OPTIONS.get());
+    builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_SYNTAX.get());
 
     // Sort keys.
     builder.addSortKey(0);
@@ -979,8 +981,8 @@
             }
 
             // Display the title.
-            out.println(wrapText(getMessage(MSGID_DSCFG_HELP_HEADING_COMPONENT,
-                mod.getUserFriendlyName()), MAX_LINE_WIDTH));
+            out.println(wrapText(INFO_DSCFG_HELP_HEADING_COMPONENT.get(
+                    mod.getUserFriendlyName()), MAX_LINE_WIDTH));
 
             out.println();
             out.println(wrapText(mod.getSynopsis(), MAX_LINE_WIDTH));
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java
index 4954fb0..ae00d60 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 
 import org.opends.server.admin.client.AuthenticationException;
@@ -123,7 +123,7 @@
         }
 
         try {
-          String prompt = getMessage(MSGID_LDAPAUTH_PASSWORD_PROMPT, bindDN);
+          Message prompt = INFO_LDAPAUTH_PASSWORD_PROMPT.get(bindDN);
           bindPassword = app.readPassword(prompt);
         } catch (Exception e) {
           throw ArgumentExceptionFactory.unableToReadBindPassword(e);
@@ -136,20 +136,18 @@
             portNumber, bindDN, bindPassword);
         context = LDAPManagementContext.createFromContext(conn);
       } catch (AuthenticationNotSupportedException e) {
-        int msgID = MSGID_DSCFG_ERROR_LDAP_SIMPLE_BIND_NOT_SUPPORTED;
-        String message = getMessage(msgID);
+        Message message = ERR_DSCFG_ERROR_LDAP_SIMPLE_BIND_NOT_SUPPORTED.get();
         throw new ClientException(LDAPResultCode.AUTH_METHOD_NOT_SUPPORTED,
-            msgID, message);
-      } catch (AuthenticationException e) {
-        int msgID = MSGID_DSCFG_ERROR_LDAP_SIMPLE_BIND_FAILED;
-        String message = getMessage(msgID, bindDN);
-        throw new ClientException(LDAPResultCode.INVALID_CREDENTIALS, msgID,
             message);
+      } catch (AuthenticationException e) {
+        Message message = ERR_DSCFG_ERROR_LDAP_SIMPLE_BIND_FAILED.get(bindDN);
+        throw new ClientException(LDAPResultCode.INVALID_CREDENTIALS, message);
       } catch (CommunicationException e) {
-        int msgID = MSGID_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT;
-        String message = getMessage(msgID, hostName, portNumber);
+        Message message =
+            ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
+                    hostName, String.valueOf(portNumber));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR,
-            msgID, message);
+            message);
       }
     }
     return context;
@@ -165,24 +163,24 @@
     // Create the global arguments.
     hostArgument = new StringArgument("host", OPTION_SHORT_HOST,
         OPTION_LONG_HOST, false, false, true, OPTION_VALUE_HOST, "localhost",
-        null, MSGID_DESCRIPTION_HOST);
+        null, INFO_DESCRIPTION_HOST.get());
 
     portArgument = new IntegerArgument("port", OPTION_SHORT_PORT,
         OPTION_LONG_PORT, false, false, true, OPTION_VALUE_PORT, 389, null,
-        MSGID_DESCRIPTION_PORT);
+        INFO_DESCRIPTION_PORT.get());
 
     bindDNArgument = new StringArgument("bindDN", OPTION_SHORT_BINDDN,
         OPTION_LONG_BINDDN, false, false, true, OPTION_VALUE_BINDDN,
-        DEFAULT_BIND_DN, null, MSGID_DESCRIPTION_BINDDN);
+        DEFAULT_BIND_DN, null, INFO_DESCRIPTION_BINDDN.get());
 
     bindPasswordArgument = new StringArgument("bindPassword",
         OPTION_SHORT_BINDPWD, OPTION_LONG_BINDPWD, false, false, true,
-        OPTION_VALUE_BINDPWD, null, null, MSGID_DESCRIPTION_BINDPASSWORD);
+        OPTION_VALUE_BINDPWD, null, null, INFO_DESCRIPTION_BINDPASSWORD.get());
 
     bindPasswordFileArgument = new FileBasedArgument("bindPasswordFile",
         OPTION_SHORT_BINDPWD_FILE, OPTION_LONG_BINDPWD_FILE, false, false,
         OPTION_VALUE_BINDPWD_FILE, null, null,
-        MSGID_DESCRIPTION_BINDPASSWORDFILE);
+        INFO_DESCRIPTION_BINDPASSWORDFILE.get());
 
     // Register the global arguments.
     parser.addGlobalArgument(hostArgument);
@@ -202,10 +200,10 @@
     // arguments.
     if (bindPasswordArgument.isPresent()
         && bindPasswordFileArgument.isPresent()) {
-      int msgID = MSGID_TOOL_CONFLICTING_ARGS;
-      String message = getMessage(msgID, bindPasswordArgument
-          .getLongIdentifier(), bindPasswordFileArgument.getLongIdentifier());
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_TOOL_CONFLICTING_ARGS.
+          get(bindPasswordArgument.getLongIdentifier(),
+              bindPasswordFileArgument.getLongIdentifier());
+      throw new ArgumentException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java
index bad549f..9181105 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 import java.io.PrintStream;
 import java.util.List;
@@ -134,7 +134,7 @@
   // Private constructor.
   private ListSubCommandHandler(ConsoleApplication app,
       SubCommandArgumentParser parser, ManagedObjectPath<?, ?> p,
-      RelationDefinition<?, ?> r, String rname, String rufn)
+      RelationDefinition<?, ?> r, String rname, Message rufn)
       throws ArgumentException {
     super(app);
 
@@ -143,9 +143,8 @@
 
     // Create the sub-command.
     String name = "list-" + rname;
-    int descriptionID = MSGID_DSCFG_DESCRIPTION_SUBCMD_LIST;
-    this.subCommand = new SubCommand(parser, name, false, 0, 0, null,
-        descriptionID, rufn);
+    Message desc = INFO_DSCFG_DESCRIPTION_SUBCMD_LIST.get(rufn);
+    this.subCommand = new SubCommand(parser, name, false, 0, 0, null, desc);
 
     // Create the naming arguments.
     this.namingArgs = createNamingArgs(subCommand, path, false);
@@ -192,7 +191,7 @@
     // Get the naming argument values.
     List<String> names = getNamingArgValues(namingArgs);
 
-    String ufn;
+    Message ufn;
     if (relation instanceof InstantiableRelationDefinition) {
       InstantiableRelationDefinition<?, ?> irelation =
         (InstantiableRelationDefinition<?, ?>) relation;
@@ -206,35 +205,30 @@
     try {
       parent = getManagedObject(path, names);
     } catch (AuthorizationException e) {
-      int msgID = MSGID_DSCFG_ERROR_LIST_AUTHZ;
-      String msg = getMessage(msgID, ufn);
+      Message msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-          msgID, msg);
+          msg);
     } catch (DefinitionDecodingException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_PARENT_DDE;
+
       ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn, ufn, ufn);
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
+      Message msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(ufn, ufn, ufn);
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
     } catch (ManagedObjectDecodingException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_PARENT_MODE;
+
       ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
+      Message msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(ufn);
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
     } catch (CommunicationException e) {
-      int msgID = MSGID_DSCFG_ERROR_LIST_CE;
-      String msg = getMessage(msgID, ufn, e.getMessage());
-      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msgID,
-          msg);
+      Message msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
+      throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
     } catch (ConcurrentModificationException e) {
-      int msgID = MSGID_DSCFG_ERROR_LIST_CME;
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
-          msg);
+      Message msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
+      throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
     } catch (ManagedObjectNotFoundException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_PARENT_MONFE;
+
       ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msgID, msg);
+      Message msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(ufn);
+      throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
     }
 
     SortedMap<String, ManagedObject<?>> children =
@@ -253,30 +247,24 @@
       } catch (DefinitionDecodingException e) {
         // FIXME: just output this as a warnings (incl. the name) but
         // continue.
-        int msgID = MSGID_DSCFG_ERROR_LIST_DDE;
-        String msg = getMessage(msgID, ufn, ufn, ufn);
-        throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
+        Message msg = ERR_DSCFG_ERROR_LIST_DDE.get(ufn, ufn, ufn);
+        throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
       } catch (ManagedObjectDecodingException e) {
         // FIXME: just output this as a warnings (incl. the name) but
         // continue.
-        int msgID = MSGID_DSCFG_ERROR_LIST_MODE;
-        String msg = getMessage(msgID, ufn);
-        throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
+        Message msg = ERR_DSCFG_ERROR_LIST_MODE.get(ufn);
+        throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
       } catch (AuthorizationException e) {
-        int msgID = MSGID_DSCFG_ERROR_LIST_AUTHZ;
-        String msg = getMessage(msgID, ufn);
+        Message msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
         throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-            msgID, msg);
-      } catch (ConcurrentModificationException e) {
-        int msgID = MSGID_DSCFG_ERROR_LIST_CME;
-        String msg = getMessage(msgID, ufn);
-        throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
             msg);
+      } catch (ConcurrentModificationException e) {
+        Message msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
+        throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
       } catch (CommunicationException e) {
-        int msgID = MSGID_DSCFG_ERROR_LIST_CE;
-        String msg = getMessage(msgID, ufn, e.getMessage());
+        Message msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-            msgID, msg);
+            msg);
       }
     } else if (relation instanceof OptionalRelationDefinition) {
       OptionalRelationDefinition<?, ?> orelation =
@@ -290,32 +278,25 @@
           throw new ManagedObjectNotFoundException();
         }
       } catch (AuthorizationException e) {
-        int msgID = MSGID_DSCFG_ERROR_LIST_AUTHZ;
-        String msg = getMessage(msgID, ufn);
+        Message msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
         throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-            msgID, msg);
-      } catch (DefinitionDecodingException e) {
-        int msgID = MSGID_DSCFG_ERROR_LIST_DDE;
-        String msg = getMessage(msgID, ufn, ufn, ufn);
-        throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
-      } catch (ManagedObjectDecodingException e) {
-        int msgID = MSGID_DSCFG_ERROR_LIST_MODE;
-        String msg = getMessage(msgID, ufn);
-        throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
-      } catch (ConcurrentModificationException e) {
-        int msgID = MSGID_DSCFG_ERROR_LIST_CME;
-        String msg = getMessage(msgID, ufn);
-        throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msgID,
             msg);
+      } catch (DefinitionDecodingException e) {
+        Message msg = ERR_DSCFG_ERROR_LIST_DDE.get(ufn, ufn, ufn);
+        throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
+      } catch (ManagedObjectDecodingException e) {
+        Message msg = ERR_DSCFG_ERROR_LIST_MODE.get(ufn);
+        throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
+      } catch (ConcurrentModificationException e) {
+        Message msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
+        throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
       } catch (CommunicationException e) {
-        int msgID = MSGID_DSCFG_ERROR_LIST_CE;
-        String msg = getMessage(msgID, ufn, e.getMessage());
+        Message msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-            msgID, msg);
+            msg);
       } catch (ManagedObjectNotFoundException e) {
-        int msgID = MSGID_DSCFG_ERROR_LIST_MONFE;
-        String msg = getMessage(msgID, ufn);
-        throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msgID, msg);
+        Message msg = ERR_DSCFG_ERROR_LIST_MONFE.get(ufn);
+        throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
       }
     }
 
@@ -331,11 +312,11 @@
       TableBuilder builder = new TableBuilder();
       builder.appendHeading(relation.getUserFriendlyName());
       builder
-          .appendHeading(getMessage(MSGID_DSCFG_HEADING_COMPONENT_TYPE));
+          .appendHeading(INFO_DSCFG_HEADING_COMPONENT_TYPE.get());
       if (!propertyNames.isEmpty()) {
       }
       for (String propertyName : propertyNames) {
-        builder.appendHeading(propertyName);
+        builder.appendHeading(Message.raw(propertyName));
       }
       builder.addSortKey(0);
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/PropertyValueReader.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/PropertyValueReader.java
index 7e0f48f..2607fb8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/PropertyValueReader.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/PropertyValueReader.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
-
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -170,16 +170,16 @@
         new PropertyValuePrinter(null, null, false);
       SortedSet<T> values = mo.getPropertyValues(pd);
 
-      List<String> descriptions = new ArrayList<String>(values.size());
+      List<Message> descriptions = new ArrayList<Message>(values.size());
       List<T> lvalues = new ArrayList<T>(values.size());
 
       for (T value : values) {
-        descriptions.add(printer.print(pd, value));
+        descriptions.add(Message.raw(printer.print(pd, value)));
         lvalues.add(value);
       }
 
-      String promptMsg =
-        getMessage(MSGID_DSCFG_VALUE_READER_PROMPT_REMOVE, pd.getName());
+      Message promptMsg =
+          INFO_DSCFG_VALUE_READER_PROMPT_REMOVE.get(pd.getName());
       T value = app.readChoice(promptMsg, descriptions, lvalues, null);
       values.remove(value);
       mo.setPropertyValues(pd, values);
@@ -268,10 +268,13 @@
       List<String> values = Arrays.asList(new String[] {
           "false", "true"
       });
+      List<Message> descriptions = Arrays.asList(new Message[] {
+        Message.raw("false"), Message.raw("true")
+      });
       try {
-        String promptMsg = getMessage(
-            MSGID_DSCFG_VALUE_READER_PROMPT_SELECT_VALUE, d.getName());
-        return app.readChoice(promptMsg, values, values, null);
+        Message promptMsg = INFO_DSCFG_VALUE_READER_PROMPT_SELECT_VALUE.get(
+                d.getName());
+        return app.readChoice(promptMsg, descriptions, values, null);
       } catch (ArgumentException e) {
         ae = e;
         return null;
@@ -293,11 +296,16 @@
         map.put(value.toString(), s);
       }
 
-      List<String> descriptions = new ArrayList<String>(map.values());
+      List<String> descStrings = new ArrayList<String>(map.values());
+      List<Message> descriptions = new ArrayList<Message>(descStrings.size());
+      for (String s : descStrings) {
+        descriptions.add(Message.raw(s));
+      }
+
       List<String> values = new ArrayList<String>(map.keySet());
       try {
-        String promptMsg = getMessage(
-            MSGID_DSCFG_VALUE_READER_PROMPT_SELECT_VALUE, d.getName());
+        Message promptMsg =
+                INFO_DSCFG_VALUE_READER_PROMPT_SELECT_VALUE.get(d.getName());
         return app.readChoice(promptMsg, descriptions, values, null);
       } catch (ArgumentException e) {
         ae = e;
@@ -314,8 +322,8 @@
     public String visitUnknown(PropertyDefinition<?> d, Void p)
         throws UnknownPropertyDefinitionException {
       try {
-        String promptMsg = getMessage(
-            MSGID_DSCFG_VALUE_READER_PROMPT_ENTER_VALUE, d.getName());
+        Message promptMsg = INFO_DSCFG_VALUE_READER_PROMPT_ENTER_VALUE.get(
+                d.getName());
         return app.readLineOfInput(promptMsg);
       } catch (ArgumentException e) {
         ae = e;
@@ -370,8 +378,9 @@
         return pd.decodeValue(value);
       } catch (IllegalPropertyValueStringException e) {
         app.println();
-        app.printMessage(ArgumentExceptionFactory.adaptPropertyException(e,
-            mo.getManagedObjectDefinition()).getMessage());
+        app.printMessage(Message.raw(
+                ArgumentExceptionFactory.adaptPropertyException(e,
+            mo.getManagedObjectDefinition()).getMessage()));
       }
     }
   }
@@ -412,8 +421,8 @@
       // Display a menu allowing users to edit individual options.
       TableBuilder builder = new TableBuilder();
       builder.appendHeading();
-      builder.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_NAME));
-      builder.appendHeading(getMessage(MSGID_DSCFG_HEADING_PROPERTY_VALUE));
+      builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_NAME.get());
+      builder.appendHeading(INFO_DSCFG_HEADING_PROPERTY_VALUE.get());
 
       int i = 0;
       List<PropertyDefinition<?>> pl = new ArrayList<PropertyDefinition<?>>(c);
@@ -422,7 +431,7 @@
         builder.appendCell("[" + i + "]");
         builder.appendCell(pd.getName());
 
-        String values = getPropertyValuesAsString(mo, pd, valuePrinter);
+        Message values = getPropertyValuesAsString(mo, pd, valuePrinter);
         builder.appendCell(values);
         i++;
       }
@@ -430,11 +439,11 @@
       builder.startRow();
       builder.startRow();
       builder.appendCell("[" + i + "]");
-      builder.appendCell(getMessage(MSGID_DSCFG_VALUE_READER_MENU_CONTINUE));
+      builder.appendCell(INFO_DSCFG_VALUE_READER_MENU_CONTINUE.get());
 
       // Display the menu.
       app.println();
-      app.printMessage(getMessage(MSGID_DSCFG_VALUE_READER_MENU_TITLE, i));
+      app.printMessage(INFO_DSCFG_VALUE_READER_MENU_TITLE.get(i));
       app.println();
 
       TextTablePrinter printer = new TextTablePrinter(app.getErrorStream());
@@ -443,8 +452,7 @@
 
       // Get the user input.
       final int size = i;
-      String promptMsg =
-        getMessage(MSGID_DSCFG_GENERAL_CHOICE_PROMPT_NOHELP, i);
+      Message promptMsg = INFO_DSCFG_GENERAL_CHOICE_PROMPT_NOHELP.get(i);
       ValidationCallback<Integer> validator =
         new ValidationCallback<Integer>() {
 
@@ -459,7 +467,7 @@
             return j;
           } catch (NumberFormatException e) {
             app.println();
-            String errMsg = getMessage(MSGID_DSCFG_ERROR_GENERAL_CHOICE, size);
+            Message errMsg = ERR_DSCFG_ERROR_GENERAL_CHOICE.get(size);
             app.printMessage(errMsg);
             return null;
           }
@@ -493,8 +501,8 @@
     if (pd.hasOption(PropertyOption.MANDATORY)) {
       if (mo.getPropertyValues(pd).isEmpty()) {
         app.println();
-        String promptMsg = getMessage(
-            MSGID_DSCFG_VALUE_READER_PROMPT_MANDATORY, pd.getName());
+        Message promptMsg = INFO_DSCFG_VALUE_READER_PROMPT_MANDATORY.get(
+                pd.getName());
         app.printMessage(promptMsg);
         T value = read(mo, pd);
         mo.setPropertyValue(pd, value);
@@ -504,35 +512,35 @@
     boolean isFinished = false;
     while (!isFinished) {
       // Construct a list of menu options and their call-backs.
-      List<String> descriptions = new ArrayList<String>();
+      List<Message> descriptions = new ArrayList<Message>();
       List<MenuCallback> callbacks = new ArrayList<MenuCallback>();
 
       if (pd.hasOption(PropertyOption.MULTI_VALUED)) {
-        descriptions.add(getMessage(MSGID_DSCFG_VALUE_READER_MENU_ADD));
+        descriptions.add(INFO_DSCFG_VALUE_READER_MENU_ADD.get());
         callbacks.add(new AddValueMenuCallback());
 
         if (!mo.getPropertyValues(pd).isEmpty()) {
-          descriptions.add(getMessage(MSGID_DSCFG_VALUE_READER_MENU_REMOVE));
+          descriptions.add(INFO_DSCFG_VALUE_READER_MENU_REMOVE.get());
           callbacks.add(new RemoveValueMenuCallback());
         }
       } else {
-        descriptions.add(getMessage(MSGID_DSCFG_VALUE_READER_MENU_SET));
+        descriptions.add(INFO_DSCFG_VALUE_READER_MENU_SET.get());
         callbacks.add(new SetValueMenuCallback());
       }
 
       if (!pd.hasOption(PropertyOption.MANDATORY)
           || !(pd.getDefaultBehaviorProvider()
               instanceof UndefinedDefaultBehaviorProvider)) {
-        descriptions.add(getMessage(MSGID_DSCFG_VALUE_READER_MENU_RESET));
+        descriptions.add(INFO_DSCFG_VALUE_READER_MENU_RESET.get());
         callbacks.add(new ResetValueMenuCallback());
       }
 
-      descriptions.add(getMessage(MSGID_DSCFG_VALUE_READER_MENU_CONTINUE));
+      descriptions.add(INFO_DSCFG_VALUE_READER_MENU_CONTINUE.get());
       callbacks.add(null);
 
       // FIXME: display current values of the property.
-      String promptMsg = getMessage(
-          MSGID_DSCFG_VALUE_READER_PROMPT_MODIFY_MENU, pd.getName());
+      Message promptMsg = INFO_DSCFG_VALUE_READER_PROMPT_MODIFY_MENU.get(
+              pd.getName());
       MenuCallback callback = app.readChoice(promptMsg, descriptions,
           callbacks, new PropertyHelpCallback(mo, pd));
 
@@ -547,16 +555,16 @@
 
 
   // Display the set of values associated with a property.
-  private <T> String getPropertyValuesAsString(ManagedObject<?> mo,
+  private <T> Message getPropertyValuesAsString(ManagedObject<?> mo,
       PropertyDefinition<T> pd, PropertyValuePrinter valuePrinter) {
     SortedSet<T> values = mo.getPropertyValues(pd);
     if (values.isEmpty()) {
       // There are no values or default values. Display the default
       // behavior for alias values.
-      DefaultBehaviorProviderVisitor<T, String, Void> visitor =
-        new DefaultBehaviorProviderVisitor<T, String, Void>() {
+      DefaultBehaviorProviderVisitor<T, Message, Void> visitor =
+        new DefaultBehaviorProviderVisitor<T, Message, Void>() {
 
-        public String visitAbsoluteInherited(
+        public Message visitAbsoluteInherited(
             AbsoluteInheritedDefaultBehaviorProvider<T> d, Void p) {
           // Should not happen - inherited default values are
           // displayed as normal values.
@@ -565,7 +573,7 @@
 
 
 
-        public String visitAlias(AliasDefaultBehaviorProvider<T> d, Void p) {
+        public Message visitAlias(AliasDefaultBehaviorProvider<T> d, Void p) {
           if (app.isVerbose()) {
             return d.getSynopsis();
           } else {
@@ -575,7 +583,7 @@
 
 
 
-        public String visitDefined(
+        public Message visitDefined(
             DefinedDefaultBehaviorProvider<T> d, Void p) {
           // Should not happen - real default values are displayed as
           // normal values.
@@ -584,7 +592,7 @@
 
 
 
-        public String visitRelativeInherited(
+        public Message visitRelativeInherited(
             RelativeInheritedDefaultBehaviorProvider<T> d, Void p) {
           // Should not happen - inherited default values are
           // displayed as normal values.
@@ -593,20 +601,20 @@
 
 
 
-        public String visitUndefined(UndefinedDefaultBehaviorProvider<T> d,
+        public Message visitUndefined(UndefinedDefaultBehaviorProvider<T> d,
             Void p) {
           return null;
         }
       };
 
-      String content = pd.getDefaultBehaviorProvider().accept(visitor, null);
+      Message content = pd.getDefaultBehaviorProvider().accept(visitor, null);
       if (content == null) {
-        return "-";
+        return Message.raw("-");
       } else {
         return content;
       }
     } else {
-      StringBuilder sb = new StringBuilder();
+      MessageBuilder sb = new MessageBuilder();
       boolean isFirst = true;
       for (T value : values) {
         if (!isFirst) {
@@ -616,7 +624,7 @@
         isFirst = false;
       }
 
-      return sb.toString();
+      return sb.toMessage();
     }
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/SetPropSubCommandHandler.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/SetPropSubCommandHandler.java
index 529d602..a9d9afc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/SetPropSubCommandHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/SetPropSubCommandHandler.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 import java.util.HashMap;
 import java.util.List;
@@ -244,39 +244,40 @@
 
     // Create the sub-command.
     String name = "set-" + r.getName() + "-prop";
-    int descriptionID = MSGID_DSCFG_DESCRIPTION_SUBCMD_SETPROP;
+    Message description = INFO_DSCFG_DESCRIPTION_SUBCMD_SETPROP.get(
+      r.getChildDefinition().getUserFriendlyName());
     this.subCommand = new SubCommand(parser, name, false, 0, 0, null,
-        descriptionID, r.getChildDefinition().getUserFriendlyName());
+        description);
 
     // Create the naming arguments.
     this.namingArgs = createNamingArgs(subCommand, path, false);
 
     // Register common arguments.
     registerAdvancedModeArgument(this.subCommand,
-        MSGID_DSCFG_DESCRIPTION_ADVANCED_SET, r.getUserFriendlyName());
+        INFO_DSCFG_DESCRIPTION_ADVANCED_SET.get());
 
     // Create the --set argument.
     this.propertySetArgument = new StringArgument(OPTION_DSCFG_LONG_SET,
         OPTION_DSCFG_SHORT_SET, OPTION_DSCFG_LONG_SET, false, true, true,
-        "{PROP:VAL}", null, null, MSGID_DSCFG_DESCRIPTION_PROP_VAL);
+        "{PROP:VAL}", null, null, INFO_DSCFG_DESCRIPTION_PROP_VAL.get());
     this.subCommand.addArgument(this.propertySetArgument);
 
     // Create the --reset argument.
     this.propertyResetArgument = new StringArgument(OPTION_DSCFG_LONG_RESET,
         OPTION_DSCFG_SHORT_RESET, OPTION_DSCFG_LONG_RESET, false, true, true,
-        "{PROP}", null, null, MSGID_DSCFG_DESCRIPTION_RESET_PROP);
+        "{PROP}", null, null, INFO_DSCFG_DESCRIPTION_RESET_PROP.get());
     this.subCommand.addArgument(this.propertyResetArgument);
 
     // Create the --add argument.
     this.propertyAddArgument = new StringArgument(OPTION_DSCFG_LONG_ADD,
         OPTION_DSCFG_SHORT_ADD, OPTION_DSCFG_LONG_ADD, false, true, true,
-        "{PROP:VAL}", null, null, MSGID_DSCFG_DESCRIPTION_ADD_PROP_VAL);
+        "{PROP:VAL}", null, null, INFO_DSCFG_DESCRIPTION_ADD_PROP_VAL.get());
     this.subCommand.addArgument(this.propertyAddArgument);
 
     // Create the --remove argument.
     this.propertyRemoveArgument = new StringArgument(OPTION_DSCFG_LONG_REMOVE,
         OPTION_DSCFG_SHORT_REMOVE, OPTION_DSCFG_LONG_REMOVE, false, true, true,
-        "{PROP:VAL}", null, null, MSGID_DSCFG_DESCRIPTION_REMOVE_PROP_VAL);
+        "{PROP:VAL}", null, null, INFO_DSCFG_DESCRIPTION_REMOVE_PROP_VAL.get());
     this.subCommand.addArgument(this.propertyRemoveArgument);
 
     // Register the tags associated with the child managed objects.
@@ -309,39 +310,33 @@
     try {
       child = getManagedObject(path, names);
     } catch (AuthorizationException e) {
-      int msgID = MSGID_DSCFG_ERROR_MODIFY_AUTHZ;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_MODIFY_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-          msgID, msg);
+          msg);
     } catch (DefinitionDecodingException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_CHILD_DDE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn, ufn, ufn);
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_CHILD_DDE.get(ufn, ufn, ufn);
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
     } catch (ManagedObjectDecodingException e) {
       // FIXME: should not abort here. Instead, display the errors (if
       // verbose) and apply the changes to the partial managed object.
-      int msgID = MSGID_DSCFG_ERROR_GET_CHILD_MODE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_CHILD_MODE.get(ufn);
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
     } catch (CommunicationException e) {
-      int msgID = MSGID_DSCFG_ERROR_MODIFY_CE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn, e.getMessage());
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_MODIFY_CE.get(ufn, e.getMessage());
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
     } catch (ConcurrentModificationException e) {
-      int msgID = MSGID_DSCFG_ERROR_MODIFY_CME;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_MODIFY_CME.get(ufn);
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION,
-          msgID, msg);
+          msg);
     } catch (ManagedObjectNotFoundException e) {
-      int msgID = MSGID_DSCFG_ERROR_GET_CHILD_MONFE;
-      String ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      String msg = getMessage(msgID, ufn);
-      throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msgID, msg);
+      Message ufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      Message msg = ERR_DSCFG_ERROR_GET_CHILD_MONFE.get(ufn);
+      throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
     }
 
     ManagedObjectDefinition<?, ?> d = child.getManagedObjectDefinition();
@@ -531,12 +526,11 @@
 
     try {
       // Confirm commit.
-      String prompt = getMessage(MSGID_DSCFG_CONFIRM_MODIFY, d
-          .getUserFriendlyName());
+      Message prompt = INFO_DSCFG_CONFIRM_MODIFY.get(d.getUserFriendlyName());
       if (!getConsoleApplication().confirmAction(prompt)) {
         // Output failure message.
-        String msg = getMessage(MSGID_DSCFG_CONFIRM_MODIFY_FAIL, d
-            .getUserFriendlyName());
+        Message msg =
+            INFO_DSCFG_CONFIRM_MODIFY_FAIL.get(d.getUserFriendlyName());
         getConsoleApplication().printVerboseMessage(msg);
         return 1;
       }
@@ -544,31 +538,29 @@
       child.commit();
 
       // Output success message.
-      String msg = getMessage(MSGID_DSCFG_CONFIRM_MODIFY_SUCCESS, d
-          .getUserFriendlyName());
+      Message msg =
+          INFO_DSCFG_CONFIRM_MODIFY_SUCCESS.get(d.getUserFriendlyName());
       getConsoleApplication().printVerboseMessage(msg);
     } catch (MissingMandatoryPropertiesException e) {
       throw ArgumentExceptionFactory.adaptMissingMandatoryPropertiesException(
           e, d);
     } catch (AuthorizationException e) {
-      int msgID = MSGID_DSCFG_ERROR_MODIFY_AUTHZ;
-      String msg = getMessage(msgID, d.getUserFriendlyName());
+      Message msg = ERR_DSCFG_ERROR_MODIFY_AUTHZ.get(d.getUserFriendlyName());
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-          msgID, msg);
+          msg);
     } catch (ConcurrentModificationException e) {
-      int msgID = MSGID_DSCFG_ERROR_MODIFY_CME;
-      String msg = getMessage(msgID, d.getUserFriendlyName());
+      Message msg = ERR_DSCFG_ERROR_MODIFY_CME.get(d.getUserFriendlyName());
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION,
-          msgID, msg);
+          msg);
     } catch (OperationRejectedException e) {
-      int msgID = MSGID_DSCFG_ERROR_MODIFY_ORE;
-      String msg = getMessage(msgID, d.getUserFriendlyName(), e.getMessage());
+      Message msg = ERR_DSCFG_ERROR_MODIFY_ORE.get(
+          d.getUserFriendlyName(), e.getMessage());
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION,
-          msgID, msg);
+          msg);
     } catch (CommunicationException e) {
-      int msgID = MSGID_DSCFG_ERROR_MODIFY_CE;
-      String msg = getMessage(msgID, d.getUserFriendlyName(), e.getMessage());
-      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msgID, msg);
+      Message msg = ERR_DSCFG_ERROR_MODIFY_CE.get(
+          d.getUserFriendlyName(), e.getMessage());
+      throw new ClientException(LDAPResultCode.OPERATIONS_ERROR, msg);
     } catch (ManagedObjectAlreadyExistsException e) {
       // Should never happen.
       throw new IllegalStateException(e);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java
index da6b09c..71ebdbd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 import java.io.PrintStream;
 import java.util.ArrayList;
@@ -453,17 +453,18 @@
               new PropertyDefinitionUsageBuilder(false);
             String usage = "{" + b.getUsage(pd) + "}";
             arg = new StringArgument(argName, null, argName, false, true,
-                usage, MSGID_DSCFG_DESCRIPTION_NAME_CREATE_EXT, d
-                    .getUserFriendlyName(), pd.getName(), pd.getSynopsis());
+                usage, INFO_DSCFG_DESCRIPTION_NAME_CREATE_EXT.get(d
+                    .getUserFriendlyName(), pd.getName(), pd.getSynopsis()));
           } else {
             arg = new StringArgument(argName, null, argName, false, true,
-                "{NAME}", MSGID_DSCFG_DESCRIPTION_NAME_CREATE, d
-                    .getUserFriendlyName());
+                "{NAME}", INFO_DSCFG_DESCRIPTION_NAME_CREATE.get(d
+                    .getUserFriendlyName()));
           }
         } else {
           // A normal naming argument.
           arg = new StringArgument(argName, null, argName, false, true,
-              "{NAME}", MSGID_DSCFG_DESCRIPTION_NAME, d.getUserFriendlyName());
+              "{NAME}", INFO_DSCFG_DESCRIPTION_NAME.get(
+                  d.getUserFriendlyName()));
         }
         subCommand.addArgument(arg);
         arguments.add(arg);
@@ -818,9 +819,8 @@
         try {
           return SizeUnit.getUnit(value);
         } catch (IllegalArgumentException e) {
-          int msgID = MSGID_DSCFG_ERROR_SIZE_UNIT_UNRECOGNIZED;
-          String msg = getMessage(msgID, value);
-          throw new ArgumentException(msgID, msg);
+          Message msg = INFO_DSCFG_ERROR_SIZE_UNIT_UNRECOGNIZED.get(value);
+          throw new ArgumentException(msg);
         }
       }
     }
@@ -846,9 +846,8 @@
         try {
           return DurationUnit.getUnit(value);
         } catch (IllegalArgumentException e) {
-          int msgID = MSGID_DSCFG_ERROR_TIME_UNIT_UNRECOGNIZED;
-          String msg = getMessage(msgID, value);
-          throw new ArgumentException(msgID, msg);
+          Message msg = INFO_DSCFG_ERROR_TIME_UNIT_UNRECOGNIZED.get(value);
+          throw new ArgumentException(msg);
         }
       }
     }
@@ -936,30 +935,34 @@
     switch (children.length) {
     case 0: {
       // No options available - abort.
-      int msgID = MSGID_DSCFG_ERROR_FINDER_NO_CHILDREN;
-      String msg = getMessage(msgID, d.getUserFriendlyPluralName());
-      throw new ArgumentException(msgID, msg);
+      Message msg =
+          ERR_DSCFG_ERROR_FINDER_NO_CHILDREN.get(d.getUserFriendlyPluralName());
+      throw new ArgumentException(msg);
     }
     case 1: {
       // Only one option available so confirm that the user wishes to
       // access it.
-      int msgID = MSGID_DSCFG_FINDER_PROMPT_SINGLE;
-      String msg = getMessage(msgID, d.getUserFriendlyName(), children[0]);
+      Message msg = INFO_DSCFG_FINDER_PROMPT_SINGLE.get(
+              d.getUserFriendlyName(), children[0]);
       if (getConsoleApplication().confirmAction(msg)) {
         return children[0];
       } else {
-        msgID = MSGID_DSCFG_ERROR_FINDER_SINGLE_CHILD_REJECTED;
-        msg = getMessage(msgID, d.getUserFriendlyName());
-        throw new ArgumentException(msgID, msg);
+        msg = ERR_DSCFG_ERROR_FINDER_SINGLE_CHILD_REJECTED.get(
+            d.getUserFriendlyName());
+        throw new ArgumentException(msg);
       }
     }
     default: {
       // Display a menu.
       Arrays.sort(children, String.CASE_INSENSITIVE_ORDER);
-      List<String> choices = Arrays.asList(children);
-      int msgID = MSGID_DSCFG_FINDER_PROMPT_MANY;
-      String msg = getMessage(msgID, d.getUserFriendlyName());
-      return getConsoleApplication().readChoice(msg, choices, choices, null);
+      ArrayList<Message> desc = new ArrayList<Message>();
+      for (String s : Arrays.asList(children)) {
+        desc.add(Message.raw(s));
+      }
+      Message prompt = INFO_DSCFG_FINDER_PROMPT_MANY.get(
+              d.getUserFriendlyName());
+      return getConsoleApplication().readChoice(
+              prompt, desc, Arrays.asList(children), null);
     }
     }
   }
@@ -971,19 +974,18 @@
    *
    * @param subCommand
    *          The sub-command.
-   * @param descriptionID
-   *          The usage description message ID to be used for the
+   * @param description
+   *          The usage description message to be used for the
    *          argument.
-   * @param args
-   *          The arguments for the usage description.
    * @throws ArgumentException
    *           If the advanced mode argument could not be registered.
    */
   protected final void registerAdvancedModeArgument(SubCommand subCommand,
-      int descriptionID, String... args) throws ArgumentException {
+                                                    Message description)
+          throws ArgumentException
+  {
     this.advancedModeArgument = new BooleanArgument(OPTION_DSCFG_LONG_ADVANCED,
-        OPTION_DSCFG_SHORT_ADVANCED, OPTION_DSCFG_LONG_ADVANCED, descriptionID,
-        (Object[]) args);
+        OPTION_DSCFG_SHORT_ADVANCED, OPTION_DSCFG_LONG_ADVANCED, description);
     subCommand.addArgument(advancedModeArgument);
   }
 
@@ -1001,7 +1003,7 @@
       throws ArgumentException {
     this.propertyArgument = new StringArgument(OPTION_DSCFG_LONG_PROPERTY,
         OPTION_DSCFG_SHORT_PROPERTY, OPTION_DSCFG_LONG_PROPERTY, false, true,
-        true, "{PROP}", null, null, MSGID_DSCFG_DESCRIPTION_PROP);
+        true, "{PROP}", null, null, INFO_DSCFG_DESCRIPTION_PROP.get());
     subCommand.addArgument(propertyArgument);
   }
 
@@ -1019,7 +1021,7 @@
       throws ArgumentException {
     this.recordModeArgument = new BooleanArgument(OPTION_DSCFG_LONG_RECORD,
         OPTION_DSCFG_SHORT_RECORD, OPTION_DSCFG_LONG_RECORD,
-        MSGID_DSCFG_DESCRIPTION_RECORD);
+        INFO_DSCFG_DESCRIPTION_RECORD.get());
     subCommand.addArgument(recordModeArgument);
   }
 
@@ -1037,7 +1039,7 @@
       throws ArgumentException {
     this.unitSizeArgument = new StringArgument(OPTION_DSCFG_LONG_UNIT_SIZE,
         OPTION_DSCFG_SHORT_UNIT_SIZE, OPTION_DSCFG_LONG_UNIT_SIZE, false, true,
-        "{UNIT}", MSGID_DSCFG_DESCRIPTION_UNIT_SIZE);
+        "{UNIT}", INFO_DSCFG_DESCRIPTION_UNIT_SIZE.get());
 
     subCommand.addArgument(unitSizeArgument);
   }
@@ -1056,7 +1058,7 @@
       throws ArgumentException {
     this.unitTimeArgument = new StringArgument(OPTION_DSCFG_LONG_UNIT_TIME,
         OPTION_DSCFG_SHORT_UNIT_TIME, OPTION_DSCFG_LONG_UNIT_TIME, false, true,
-        "{UNIT}", MSGID_DSCFG_DESCRIPTION_UNIT_TIME);
+        "{UNIT}", INFO_DSCFG_DESCRIPTION_UNIT_TIME.get());
 
     subCommand.addArgument(unitTimeArgument);
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/AttributeValueTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/AttributeValueTag.java
index 681f3db..6d1eafb 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/AttributeValueTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/AttributeValueTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -34,8 +35,8 @@
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -109,26 +110,23 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 1, 2,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+          getName(), lineNumber, 1, 2, arguments.length);
+      throw new InitializationException(message);
     }
 
     String lowerName = toLowerCase(arguments[0]);
     attributeType = DirectoryServer.getAttributeType(lowerName, true);
     if (! branch.hasAttribute(attributeType))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE;
-      String message = getMessage(msgID, arguments[0], lineNumber);
-
-      throw new InitializationException(msgID, message);
+      Message message =
+          ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
+      throw new InitializationException(message);
     }
 
     if (arguments.length == 2)
@@ -138,19 +136,16 @@
         numCharacters = Integer.parseInt(arguments[1]);
         if (numCharacters < 0)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND;
-          String message = getMessage(msgID, numCharacters, 0, getName(),
-                                      lineNumber);
-
-          throw new InitializationException(msgID, message);
+          Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+              numCharacters, 0, getName(), lineNumber);
+          throw new InitializationException(message);
         }
       }
       catch (NumberFormatException nfe)
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-        String message = getMessage(msgID, arguments[1], getName(), lineNumber);
-
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+            arguments[1], getName(), lineNumber);
+        throw new InitializationException(message);
       }
     }
     else
@@ -178,26 +173,23 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 1, 2,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+          getName(), lineNumber, 1, 2, arguments.length);
+      throw new InitializationException(message);
     }
 
     String lowerName = toLowerCase(arguments[0]);
     attributeType = DirectoryServer.getAttributeType(lowerName, true);
     if (! template.hasAttribute(attributeType))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE;
-      String message = getMessage(msgID, arguments[0], lineNumber);
-
-      throw new InitializationException(msgID, message);
+      Message message =
+          ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
+      throw new InitializationException(message);
     }
 
     if (arguments.length == 2)
@@ -207,19 +199,16 @@
         numCharacters = Integer.parseInt(arguments[1]);
         if (numCharacters < 0)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND;
-          String message = getMessage(msgID, numCharacters, 0, getName(),
-                                      lineNumber);
-
-          throw new InitializationException(msgID, message);
+          Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+              numCharacters, 0, getName(), lineNumber);
+          throw new InitializationException(message);
         }
       }
       catch (NumberFormatException nfe)
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-        String message = getMessage(msgID, arguments[1], getName(), lineNumber);
-
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+            arguments[1], getName(), lineNumber);
+        throw new InitializationException(message);
       }
     }
     else
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Branch.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Branch.java
index 83d95e3..f9dcbe4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Branch.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Branch.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -40,8 +41,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -121,7 +121,7 @@
     // Get the RDN template lines based just on the entry DN.
     Entry entry = createEntry(branchDN);
 
-    ArrayList<String>       warnings = new ArrayList<String>();
+    ArrayList<Message>       warnings = new ArrayList<Message>();
     ArrayList<TemplateLine> lineList = new ArrayList<TemplateLine>();
 
     for (String ocName : entry.getObjectClasses().values())
@@ -227,10 +227,9 @@
              templates.get(toLowerCase(subordinateTemplateNames[i]));
         if (subordinateTemplates[i] == null)
         {
-          int    msgID   = MSGID_MAKELDIF_UNDEFINED_BRANCH_SUBORDINATE;
-          String message = getMessage(msgID, subordinateTemplateNames[i],
-                                      branchDN.toString());
-          throw new MakeLDIFException(msgID, message);
+          Message message = ERR_MAKELDIF_UNDEFINED_BRANCH_SUBORDINATE.get(
+              subordinateTemplateNames[i], branchDN.toString());
+          throw new MakeLDIFException(message);
         }
       }
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/DNTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/DNTag.java
index 86ab7e4..2001688 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/DNTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/DNTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -103,7 +103,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -128,7 +128,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -163,18 +163,16 @@
       }
       catch (NumberFormatException nfe)
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-        String message = getMessage(msgID, arguments[0], getName(), lineNumber);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+            arguments[0], getName(), lineNumber);
+        throw new InitializationException(message);
       }
     }
     else
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 0, 1,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+          getName(), lineNumber, 0, 1, arguments.length);
+      throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/FileTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/FileTag.java
index 58d8dca..dc186b0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/FileTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/FileTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -35,8 +36,7 @@
 
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -122,7 +122,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -147,7 +147,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -169,7 +169,7 @@
    *                                   this tag.
    */
   private void initializeInternal(TemplateFile templateFile, String[] arguments,
-                                  int lineNumber, List<String> warnings)
+                                  int lineNumber, List<Message> warnings)
           throws InitializationException
   {
     random = templateFile.getRandom();
@@ -178,10 +178,9 @@
     // There must be at least one argument, and possibly two.
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 1, 2,
-                                  arguments.length);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+          getName(), lineNumber, 1, 2, arguments.length);
+      throw new InitializationException(message);
     }
 
 
@@ -189,9 +188,9 @@
     dataFile = templateFile.getFile(arguments[0]);
     if ((dataFile == null) || (! dataFile.exists()))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_FIND_FILE;
-      String message = getMessage(msgID, arguments[0], getName(), lineNumber);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_CANNOT_FIND_FILE.get(
+          arguments[0], getName(), lineNumber);
+      throw new InitializationException(message);
     }
 
 
@@ -210,9 +209,9 @@
       }
       else
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_INVALID_FILE_ACCESS_MODE;
-        String message = getMessage(msgID, arguments[1], getName(), lineNumber);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_INVALID_FILE_ACCESS_MODE.get(
+            arguments[1], getName(), lineNumber);
+        throw new InitializationException(message);
       }
     }
     else
@@ -228,10 +227,9 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_READ_FILE;
-      String message = getMessage(msgID, arguments[0], getName(), lineNumber,
-                                  String.valueOf(ioe));
-      throw new InitializationException(msgID, message, ioe);
+      Message message = ERR_MAKELDIF_TAG_CANNOT_READ_FILE.get(
+          arguments[0], getName(), lineNumber, String.valueOf(ioe));
+      throw new InitializationException(message, ioe);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/FirstNameTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/FirstNameTag.java
index 8b618bc..98826f5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/FirstNameTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/FirstNameTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -32,8 +33,7 @@
 
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -102,18 +102,16 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     this.templateFile = templateFile;
 
     if (arguments.length != 0)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 0,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 0, arguments.length);
+      throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/GUIDTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/GUIDTag.java
index de6f1e6..a7d798e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/GUIDTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/GUIDTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,7 @@
 
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -98,16 +98,14 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 0,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 0, arguments.length);
+      throw new InitializationException(message);
     }
   }
 
@@ -130,16 +128,14 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 0,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 0, arguments.length);
+      throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/IfAbsentTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/IfAbsentTag.java
index a3bca3c..363a9ac 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/IfAbsentTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/IfAbsentTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -34,8 +35,8 @@
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -109,24 +110,23 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 1, 2,
-                                  arguments.length);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+          getName(), lineNumber, 1, 2, arguments.length);
+      throw new InitializationException(message);
     }
 
     String lowerName = toLowerCase(arguments[0]);
     AttributeType t = DirectoryServer.getAttributeType(lowerName, true);
     if (! branch.hasAttribute(t))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE;
-      String message = getMessage(msgID, arguments[0], lineNumber);
-      throw new InitializationException(msgID, message);
+      Message message =
+          ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
+      throw new InitializationException(message);
     }
 
     if (arguments.length == 2)
@@ -158,24 +158,23 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 1, 2,
-                                  arguments.length);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+          getName(), lineNumber, 1, 2, arguments.length);
+      throw new InitializationException(message);
     }
 
     String lowerName = toLowerCase(arguments[0]);
     AttributeType t = DirectoryServer.getAttributeType(lowerName, true);
     if (! template.hasAttribute(t))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE;
-      String message = getMessage(msgID, arguments[0], lineNumber);
-      throw new InitializationException(msgID, message);
+      Message message =
+          ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
+      throw new InitializationException(message);
     }
 
     if (arguments.length == 2)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/IfPresentTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/IfPresentTag.java
index ab5f303..3db7b53 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/IfPresentTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/IfPresentTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -34,8 +35,8 @@
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -109,24 +110,23 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 1, 2,
-                                  arguments.length);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+          getName(), lineNumber, 1, 2, arguments.length);
+      throw new InitializationException(message);
     }
 
     String lowerName = toLowerCase(arguments[0]);
     AttributeType t = DirectoryServer.getAttributeType(lowerName, true);
     if (! branch.hasAttribute(t))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE;
-      String message = getMessage(msgID, arguments[0], lineNumber);
-      throw new InitializationException(msgID, message);
+      Message message =
+          ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
+      throw new InitializationException(message);
     }
 
     if (arguments.length == 2)
@@ -158,24 +158,23 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 1, 2,
-                                  arguments.length);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+          getName(), lineNumber, 1, 2, arguments.length);
+      throw new InitializationException(message);
     }
 
     String lowerName = toLowerCase(arguments[0]);
     AttributeType t = DirectoryServer.getAttributeType(lowerName, true);
     if (! template.hasAttribute(t))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE;
-      String message = getMessage(msgID, arguments[0], lineNumber);
-      throw new InitializationException(msgID, message);
+      Message message =
+          ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
+      throw new InitializationException(message);
     }
 
     if (arguments.length == 2)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/LastNameTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/LastNameTag.java
index 8823da4..2ed796e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/LastNameTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/LastNameTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -32,8 +33,7 @@
 
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -102,18 +102,16 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     this.templateFile = templateFile;
 
     if (arguments.length != 0)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 0,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 0, arguments.length);
+      throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/ListTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/ListTag.java
index bf28509..0eb67e9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/ListTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/ListTag.java
@@ -33,9 +33,8 @@
 
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
-
+import static org.opends.messages.ToolMessages.*;
+import org.opends.messages.Message;
 
 
 /**
@@ -117,7 +116,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -142,7 +141,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -164,14 +163,13 @@
    *                                   this tag.
    */
   private void initializeInternal(TemplateFile templateFile, String[] arguments,
-                                  int lineNumber, List<String> warnings)
+                                  int lineNumber, List<Message> warnings)
           throws InitializationException
   {
     if (arguments.length == 0)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_LIST_NO_ARGUMENTS;
-      String message = getMessage(msgID, lineNumber);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_MAKELDIF_TAG_LIST_NO_ARGUMENTS.get(lineNumber));
     }
 
 
@@ -195,9 +193,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_LIST_INVALID_WEIGHT;
-          String message = getMessage(msgID, lineNumber, s);
-          warnings.add(message);
+          warnings.add(WARN_MAKELDIF_TAG_LIST_INVALID_WEIGHT.get(
+                          lineNumber,s));
         }
       }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/MakeLDIF.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/MakeLDIF.java
index 5d18f2b..6703583 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/MakeLDIF.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/MakeLDIF.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -44,8 +45,7 @@
 import org.opends.server.util.args.IntegerArgument;
 import org.opends.server.util.args.StringArgument;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
@@ -117,7 +117,7 @@
   public int makeLDIFMain(String[] args)
   {
     // Create and initialize the argument parser for this program.
-    String toolDescription = getMessage(MSGID_MAKELDIF_TOOL_DESCRIPTION);
+    Message toolDescription = INFO_MAKELDIF_TOOL_DESCRIPTION.get();
     ArgumentParser  argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                    false);
     BooleanArgument showUsage;
@@ -132,7 +132,7 @@
     {
       configFile = new StringArgument("configfile", 'c', "configFile", true,
                                       false, true, "{configFile}", null, null,
-                                      MSGID_DESCRIPTION_CONFIG_FILE);
+                                      INFO_DESCRIPTION_CONFIG_FILE.get());
       configFile.setHidden(true);
       argParser.addArgument(configFile);
 
@@ -141,7 +141,7 @@
                                        OPTION_LONG_CONFIG_CLASS, false,
                                        false, true,
                                        OPTION_VALUE_CONFIG_CLASS, null, null,
-                                       MSGID_DESCRIPTION_CONFIG_CLASS);
+                                       INFO_DESCRIPTION_CONFIG_CLASS.get());
       configClass.setHidden(true);
       argParser.addArgument(configClass);
 
@@ -149,20 +149,21 @@
       resourcePath =
            new StringArgument("resourcepath", 'r', "resourcePath", true, false,
                               true, "{path}", null, null,
-                              MSGID_MAKELDIF_DESCRIPTION_RESOURCE_PATH);
+                              INFO_MAKELDIF_DESCRIPTION_RESOURCE_PATH.get());
       resourcePath.setHidden(true);
       argParser.addArgument(resourcePath);
 
 
-      templatePath = new StringArgument("templatefile", 't', "templateFile",
-                                        true, false, true, "{file}", null, null,
-                                        MSGID_MAKELDIF_DESCRIPTION_TEMPLATE);
+      templatePath =
+              new StringArgument("templatefile", 't', "templateFile",
+                                 true, false, true, "{file}", null, null,
+                                 INFO_MAKELDIF_DESCRIPTION_TEMPLATE.get());
       argParser.addArgument(templatePath);
 
 
       ldifFile = new StringArgument("ldiffile", 'o', "ldifFile", true, false,
                                     true, "{file}", null, null,
-                                    MSGID_MAKELDIF_DESCRIPTION_LDIF);
+                                    INFO_MAKELDIF_DESCRIPTION_LDIF.get());
       argParser.addArgument(ldifFile);
 
 
@@ -170,20 +171,19 @@
                                        OPTION_LONG_RANDOM_SEED, false,
                                        false, true, OPTION_VALUE_RANDOM_SEED,
                                        0, null,
-                                       MSGID_MAKELDIF_DESCRIPTION_SEED);
+                                       INFO_MAKELDIF_DESCRIPTION_SEED.get());
       argParser.addArgument(randomSeed);
 
 
       showUsage = new BooleanArgument("help", OPTION_SHORT_HELP,
                                       OPTION_LONG_HELP,
-                                      MSGID_MAKELDIF_DESCRIPTION_HELP);
+                                      INFO_MAKELDIF_DESCRIPTION_HELP.get());
       argParser.addArgument(showUsage);
       argParser.setUsageArgument(showUsage);
     }
     catch (ArgumentException ae)
     {
-      int msgID = MSGID_CANNOT_INITIALIZE_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -196,8 +196,7 @@
     }
     catch (ArgumentException ae)
     {
-      int    msgID   = MSGID_ERROR_PARSING_ARGS;
-      String message = getMessage(msgID, ae.getMessage());
+      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       System.err.println(argParser.getUsage());
       return 1;
@@ -223,10 +222,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MAKELDIF_CANNOT_INITIALIZE_JMX;
-      String message = getMessage(msgID,
-                                  String.valueOf(configFile.getValue()),
-                                  e.getMessage());
+      Message message = ERR_MAKELDIF_CANNOT_INITIALIZE_JMX.get(
+              String.valueOf(configFile.getValue()), e.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -238,10 +235,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MAKELDIF_CANNOT_INITIALIZE_CONFIG;
-      String message = getMessage(msgID,
-                                  String.valueOf(configFile.getValue()),
-                                  e.getMessage());
+      Message message = ERR_MAKELDIF_CANNOT_INITIALIZE_CONFIG.get(
+              String.valueOf(configFile.getValue()), e.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -252,10 +247,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MAKELDIF_CANNOT_INITIALIZE_SCHEMA;
-      String message = getMessage(msgID,
-                                  String.valueOf(configFile.getValue()),
-                                  e.getMessage());
+      Message message = ERR_MAKELDIF_CANNOT_INITIALIZE_SCHEMA.get(
+              String.valueOf(configFile.getValue()), e.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -285,15 +278,15 @@
     File resourceDir = new File(resourcePath.getValue());
     if (! resourceDir.exists())
     {
-      int    msgID   = MSGID_MAKELDIF_NO_SUCH_RESOURCE_DIRECTORY;
-      String message = getMessage(msgID, resourcePath.getValue());
+      Message message = ERR_MAKELDIF_NO_SUCH_RESOURCE_DIRECTORY.get(
+              resourcePath.getValue());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
 
 
     // Load and parse the template file.
-    LinkedList<String> warnings = new LinkedList<String>();
+    LinkedList<Message> warnings = new LinkedList<Message>();
     TemplateFile templateFile = new TemplateFile(resourcePath.getValue(),
                                                  random);
     try
@@ -302,15 +295,15 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_MAKELDIF_IOEXCEPTION_DURING_PARSE;
-      String message = getMessage(msgID, ioe.getMessage());
+      Message message = ERR_MAKELDIF_IOEXCEPTION_DURING_PARSE.get(
+              ioe.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MAKELDIF_EXCEPTION_DURING_PARSE;
-      String message = getMessage(msgID, e.getMessage());
+      Message message = ERR_MAKELDIF_EXCEPTION_DURING_PARSE.get(
+              e.getMessage());
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -319,7 +312,7 @@
     // If there were any warnings, then print them.
     if (! warnings.isEmpty())
     {
-      for (String s : warnings)
+      for (Message s : warnings)
       {
         System.err.println(wrapText(s, MAX_LINE_WIDTH));
       }
@@ -336,9 +329,8 @@
     }
     catch (IOException ioe)
     {
-      int    msgID   = MSGID_MAKELDIF_UNABLE_TO_CREATE_LDIF;
-      String message = getMessage(msgID, ldifFile.getValue(),
-                                  String.valueOf(ioe));
+      Message message = ERR_MAKELDIF_UNABLE_TO_CREATE_LDIF.get(
+              ldifFile.getValue(), String.valueOf(ioe));
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -351,9 +343,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MAKELDIF_ERROR_WRITING_LDIF;
-      String message = getMessage(msgID, ldifFile.getValue(),
-                                  stackTraceToSingleLineString(e));
+      Message message = ERR_MAKELDIF_ERROR_WRITING_LDIF.get(
+              ldifFile.getValue(), stackTraceToSingleLineString(e));
       System.err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -394,8 +385,7 @@
 
       if ((++entriesWritten % 1000) == 0)
       {
-        int    msgID   = MSGID_MAKELDIF_PROCESSED_N_ENTRIES;
-        String message = getMessage(msgID, entriesWritten);
+        Message message = INFO_MAKELDIF_PROCESSED_N_ENTRIES.get(entriesWritten);
         System.out.println(wrapText(message, MAX_LINE_WIDTH));
       }
 
@@ -407,10 +397,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MAKELDIF_CANNOT_WRITE_ENTRY;
-      String message = getMessage(msgID, String.valueOf(entry.getDN()),
-                                  stackTraceToSingleLineString(e));
-      throw new MakeLDIFException(msgID, message, e);
+      Message message = ERR_MAKELDIF_CANNOT_WRITE_ENTRY.get(
+          String.valueOf(entry.getDN()), stackTraceToSingleLineString(e));
+      throw new MakeLDIFException(message, e);
     }
   }
 
@@ -422,8 +411,7 @@
    */
   public void closeEntryWriter()
   {
-    int    msgID   = MSGID_MAKELDIF_PROCESSING_COMPLETE;
-    String message = getMessage(msgID, entriesWritten);
+    Message message = INFO_MAKELDIF_PROCESSING_COMPLETE.get(entriesWritten);
     System.out.println(wrapText(message, MAX_LINE_WIDTH));
   }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/MakeLDIFException.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/MakeLDIFException.java
index 9a9b3a0..c017a22 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/MakeLDIFException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/MakeLDIFException.java
@@ -28,8 +28,9 @@
 
 
 
-import org.opends.server.types.IdentifiedException;
 
+import org.opends.server.types.IdentifiedException;
+import org.opends.messages.Message;
 
 
 /**
@@ -50,22 +51,14 @@
 
 
 
-  // The unique identifier for the message.
-  private int msgID;
-
-
-
   /**
    * Creates a new MakeLDIF exception with the provided information.
    *
-   * @param  msgID    The unique identifier for the message.
    * @param  message  The message for this exception.
    */
-  public MakeLDIFException(int msgID, String message)
+  public MakeLDIFException(Message message)
   {
     super(message);
-
-    this.msgID = msgID;
   }
 
 
@@ -73,27 +66,13 @@
   /**
    * Creates a new MakeLDIF exception with the provided information.
    *
-   * @param  msgID    The unique identifier for the message.
    * @param  message  The message for this exception.
    * @param  cause    The underlying cause for this exception.
    */
-  public MakeLDIFException(int msgID, String message, Throwable cause)
+  public MakeLDIFException(Message message, Throwable cause)
   {
     super(message, cause);
-
-    this.msgID = msgID;
   }
 
-
-
-  /**
-   * Retrieves the unique identifier for the message.
-   *
-   * @return  The unique identifier for the message.
-   */
-  public int getMessageID()
-  {
-    return msgID;
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/ParentDNTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/ParentDNTag.java
index 3c4dc7b..34fc9e7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/ParentDNTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/ParentDNTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -98,16 +98,14 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 0,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 0, arguments.length);
+      throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/PresenceTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/PresenceTag.java
index d4a5b2b..b487f4b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/PresenceTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/PresenceTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,7 @@
 
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -106,7 +106,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments,  lineNumber);
@@ -131,7 +131,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments,  lineNumber);
@@ -158,11 +158,9 @@
 
     if (arguments.length != 1)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 1,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 1, arguments.length);
+      throw new InitializationException(message);
     }
 
     try
@@ -171,22 +169,22 @@
 
       if (percentage < 0)
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND;
-        String message = getMessage(percentage, 0, getName(), lineNumber);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+            percentage, 0, getName(), lineNumber);
+        throw new InitializationException(message);
       }
       else if (percentage > 100)
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_INTEGER_ABOVE_UPPER_BOUND;
-        String message = getMessage(percentage, 100, getName(), lineNumber);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_INTEGER_ABOVE_UPPER_BOUND.get(
+            percentage, 100, getName(), lineNumber);
+        throw new InitializationException(message);
       }
     }
     catch (NumberFormatException nfe)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-      String message = getMessage(msgID, arguments[0], getName(), lineNumber);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+          arguments[0], getName(), lineNumber);
+      throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/RDNTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/RDNTag.java
index 4fda9b0..6b71671 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/RDNTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/RDNTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -98,16 +98,14 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 0,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 0, arguments.length);
+      throw new InitializationException(message);
     }
   }
 
@@ -130,16 +128,14 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 0,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 0, arguments.length);
+      throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/RandomTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/RandomTag.java
index a59f9f0..31bfba8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/RandomTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/RandomTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -34,8 +35,8 @@
 
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -257,7 +258,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -282,7 +283,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -305,7 +306,7 @@
    *                                   this tag.
    */
   private void initializeInternal(TemplateFile templateFile, String[] arguments,
-                                  int lineNumber, List<String> warnings)
+                                  int lineNumber, List<Message> warnings)
           throws InitializationException
   {
     random = templateFile.getRandom();
@@ -314,9 +315,9 @@
     // to generate.
     if ((arguments == null) || (arguments.length == 0))
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_NO_RANDOM_TYPE_ARGUMENT;
-      String message = getMessage(msgID, lineNumber);
-      throw new InitializationException(msgID, message);
+      Message message =
+          ERR_MAKELDIF_TAG_NO_RANDOM_TYPE_ARGUMENT.get(lineNumber);
+      throw new InitializationException(message);
     }
 
     int numArgs = arguments.length;
@@ -340,24 +341,22 @@
 
           if (minLength < 0)
           {
-            int    msgID   = MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND;
-            String message = getMessage(msgID, minLength, 0, getName(),
-                                        lineNumber);
-            throw new InitializationException(msgID, message);
+            Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+                minLength, 0, getName(), lineNumber);
+            throw new InitializationException(message);
           }
           else if (minLength == 0)
           {
-            int    msgID   = MSGID_MAKELDIF_TAG_WARNING_EMPTY_VALUE;
-            String message = getMessage(msgID, lineNumber);
+            Message message = WARN_MAKELDIF_TAG_WARNING_EMPTY_VALUE.get(
+                    lineNumber);
             warnings.add(message);
           }
         }
         catch (NumberFormatException nfe)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-          String message = getMessage(msgID, arguments[1], getName(),
-                                      lineNumber);
-          throw new InitializationException(msgID, message, nfe);
+          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+              arguments[1], getName(), lineNumber);
+          throw new InitializationException(message, nfe);
         }
       }
       else if ((numArgs == 3) || (numArgs == 4))
@@ -372,10 +371,9 @@
           }
           catch (Exception e)
           {
-            int    msgID   = MSGID_MAKELDIF_TAG_INVALID_FORMAT_STRING;
-            String message = getMessage(msgID, arguments[3], getName(),
-                                        lineNumber);
-            throw new InitializationException(msgID, message, e);
+            Message message = ERR_MAKELDIF_TAG_INVALID_FORMAT_STRING.get(
+                arguments[3], getName(), lineNumber);
+            throw new InitializationException(message, e);
           }
         }
         else
@@ -389,10 +387,9 @@
         }
         catch (NumberFormatException nfe)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-          String message = getMessage(msgID, arguments[1], getName(),
-                                      lineNumber);
-          throw new InitializationException(msgID, message, nfe);
+          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+              arguments[1], getName(), lineNumber);
+          throw new InitializationException(message, nfe);
         }
 
         try
@@ -400,28 +397,25 @@
           maxValue = Long.parseLong(arguments[2]);
           if (maxValue < minValue)
           {
-            int    msgID   = MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND;
-            String message = getMessage(msgID, maxValue, minValue, getName(),
-                                        lineNumber);
-            throw new InitializationException(msgID, message);
+            Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+                maxValue, minValue, getName(), lineNumber);
+            throw new InitializationException(message);
           }
 
           valueRange = maxValue - minValue + 1;
         }
         catch (NumberFormatException nfe)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-          String message = getMessage(msgID, arguments[2], getName(),
-                                      lineNumber);
-          throw new InitializationException(msgID, message, nfe);
+          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+              arguments[2], getName(), lineNumber);
+          throw new InitializationException(message, nfe);
         }
       }
       else
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-        String message = getMessage(msgID, getName(), lineNumber, 2, 4,
-                                    numArgs);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+            getName(), lineNumber, 2, 4, numArgs);
+        throw new InitializationException(message);
       }
     }
     else if (randomTypeString.equals("alphanumeric"))
@@ -433,10 +427,9 @@
     {
       if ((numArgs < 3) || (numArgs > 4))
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-        String message = getMessage(msgID, getName(), lineNumber, 3, 4,
-                                    numArgs);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+            getName(), lineNumber, 3, 4, numArgs);
+        throw new InitializationException(message);
       }
 
       characterSet = arguments[1].toCharArray();
@@ -467,26 +460,23 @@
           maxLength = Integer.parseInt(arguments[1]);
           if (maxLength <= 0)
           {
-            int    msgID   = MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND;
-            String message = getMessage(msgID, maxLength, 1, getName(),
-                                        lineNumber);
-            throw new InitializationException(msgID, message);
+            Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+                maxLength, 1, getName(), lineNumber);
+            throw new InitializationException(message);
           }
         }
         catch (NumberFormatException nfe)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-          String message = getMessage(msgID, arguments[1], getName(),
-                                      lineNumber);
-          throw new InitializationException(msgID, message, nfe);
+          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+              arguments[1], getName(), lineNumber);
+          throw new InitializationException(message, nfe);
         }
       }
       else
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-        String message = getMessage(msgID, getName(), lineNumber, 1, 2,
-                                    numArgs);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+            getName(), lineNumber, 1, 2, numArgs);
+        throw new InitializationException(message);
       }
     }
     else if (randomTypeString.equals("telephone"))
@@ -495,9 +485,9 @@
     }
     else
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_UNKNOWN_RANDOM_TYPE;
-      String message = getMessage(msgID, lineNumber, randomTypeString);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_UNKNOWN_RANDOM_TYPE.get(
+          lineNumber, randomTypeString);
+      throw new InitializationException(message);
     }
   }
 
@@ -517,7 +507,7 @@
    *                     be placed.
    */
   private void decodeLength(String[] arguments, int startPos, int lineNumber,
-                            List<String> warnings)
+                            List<Message> warnings)
           throws InitializationException
   {
     int numArgs = arguments.length - startPos + 1;
@@ -533,24 +523,22 @@
 
         if (minLength < 0)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND;
-          String message = getMessage(msgID, minLength, 0, getName(),
-                                      lineNumber);
-          throw new InitializationException(msgID, message);
+          Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+              minLength, 0, getName(), lineNumber);
+          throw new InitializationException(message);
         }
         else if (minLength == 0)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_WARNING_EMPTY_VALUE;
-          String message = getMessage(msgID, lineNumber);
+          Message message = WARN_MAKELDIF_TAG_WARNING_EMPTY_VALUE.get(
+                  lineNumber);
           warnings.add(message);
         }
       }
       catch (NumberFormatException nfe)
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-        String message = getMessage(msgID, arguments[startPos], getName(),
-                                    lineNumber);
-        throw new InitializationException(msgID, message, nfe);
+        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+            arguments[startPos], getName(), lineNumber);
+        throw new InitializationException(message, nfe);
       }
     }
     else if (numArgs == 3)
@@ -564,18 +552,16 @@
 
         if (minLength < 0)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND;
-          String message = getMessage(msgID, minLength, 0, getName(),
-                                      lineNumber);
-          throw new InitializationException(msgID, message);
+          Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+              minLength, 0, getName(), lineNumber);
+          throw new InitializationException(message);
         }
       }
       catch (NumberFormatException nfe)
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-        String message = getMessage(msgID, arguments[startPos], getName(),
-                                    lineNumber);
-        throw new InitializationException(msgID, message, nfe);
+        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+            arguments[startPos], getName(), lineNumber);
+        throw new InitializationException(message, nfe);
       }
 
       try
@@ -585,32 +571,29 @@
 
         if (maxLength < minLength)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND;
-          String message = getMessage(msgID, maxLength, minLength, getName(),
-                                      lineNumber);
-          throw new InitializationException(msgID, message);
+          Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+              maxLength, minLength, getName(), lineNumber);
+          throw new InitializationException(message);
         }
         else if (maxLength == 0)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_WARNING_EMPTY_VALUE;
-          String message = getMessage(msgID, getName(), lineNumber);
+          Message message =
+                  WARN_MAKELDIF_TAG_WARNING_EMPTY_VALUE.get(lineNumber);
           warnings.add(message);
         }
       }
       catch (NumberFormatException nfe)
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-        String message = getMessage(msgID, arguments[startPos+1], getName(),
-                                    lineNumber);
-        throw new InitializationException(msgID, message, nfe);
+        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+            arguments[startPos+1], getName(), lineNumber);
+        throw new InitializationException(message, nfe);
       }
     }
     else
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, startPos+1,
-                                  startPos+2, numArgs);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+          getName(), lineNumber, startPos+1, startPos+2, numArgs);
+      throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/SequentialTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/SequentialTag.java
index dda1d50..83a3dc3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/SequentialTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/SequentialTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -32,8 +33,7 @@
 
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -108,7 +108,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -133,7 +133,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -170,10 +170,9 @@
         }
         catch (NumberFormatException nfe)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-          String message = getMessage(msgID, arguments[0], getName(),
-                                      lineNumber);
-          throw new InitializationException(msgID, message);
+          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+              arguments[0], getName(), lineNumber);
+          throw new InitializationException(message);
         }
 
         nextValue         = initialValue;
@@ -186,10 +185,9 @@
         }
         catch (NumberFormatException nfe)
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-          String message = getMessage(msgID, arguments[0], getName(),
-                                      lineNumber);
-          throw new InitializationException(msgID, message);
+          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+              arguments[0], getName(), lineNumber);
+          throw new InitializationException(message);
         }
 
         if (arguments[1].equalsIgnoreCase("true"))
@@ -202,20 +200,17 @@
         }
         else
         {
-          int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_BOOLEAN;
-          String message = getMessage(msgID, arguments[1], getName(),
-                                      lineNumber);
-          throw new InitializationException(msgID, message);
+          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_BOOLEAN.get(
+              arguments[1], getName(), lineNumber);
+          throw new InitializationException(message);
         }
 
         nextValue = initialValue;
         break;
       default:
-        int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-        String message = getMessage(msgID, getName(), lineNumber, 0, 2,
-                                    arguments.length);
-
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+            getName(), lineNumber, 0, 2, arguments.length);
+        throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/StaticTextTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/StaticTextTag.java
index abd6d92..aa71f41 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/StaticTextTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/StaticTextTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -32,8 +33,7 @@
 
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -102,16 +102,14 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     if (arguments.length != 1)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 1,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 1, arguments.length);
+      throw new InitializationException(message);
     }
 
     text = arguments[0];
@@ -136,16 +134,14 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     if (arguments.length != 1)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 1,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 1, arguments.length);
+      throw new InitializationException(message);
     }
 
     text = arguments[0];
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Tag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Tag.java
index 95048e5..f51c105 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Tag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Tag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -77,7 +78,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> 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<String> warnings)
+                                             List<Message> warnings)
          throws InitializationException;
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Template.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Template.java
index 9d7a567..0d5b78d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Template.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/Template.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -36,8 +37,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -166,9 +166,9 @@
              templates.get(toLowerCase(subordinateTemplateNames[i]));
         if (subordinateTemplates[i] == null)
         {
-          int    msgID   = MSGID_MAKELDIF_UNDEFINED_TEMPLATE_SUBORDINATE;
-          String message = getMessage(msgID, subordinateTemplateNames[i], name);
-          throw new MakeLDIFException(msgID, message);
+          Message message = ERR_MAKELDIF_UNDEFINED_TEMPLATE_SUBORDINATE.get(
+              subordinateTemplateNames[i], name);
+          throw new MakeLDIFException(message);
         }
       }
     }
@@ -196,9 +196,9 @@
     if (! rdnAttrs.isEmpty())
     {
       AttributeType t       = rdnAttrs.iterator().next();
-      int           msgID   = MSGID_MAKELDIF_TEMPLATE_MISSING_RDN_ATTR;
-      String        message = getMessage(msgID, name, t.getNameOrOID());
-      throw new MakeLDIFException(msgID, message);
+      Message message =
+          ERR_MAKELDIF_TEMPLATE_MISSING_RDN_ATTR.get(name, t.getNameOrOID());
+      throw new MakeLDIFException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/TemplateFile.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/TemplateFile.java
index 5b120f0..e8b0e2b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/TemplateFile.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/TemplateFile.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -47,8 +48,8 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -236,9 +237,8 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MAKELDIF_CANNOT_LOAD_TAG_CLASS;
-      String message = getMessage(msgID, tagClass);
-      throw new MakeLDIFException(msgID, message, e);
+      Message message = ERR_MAKELDIF_CANNOT_LOAD_TAG_CLASS.get(tagClass);
+      throw new MakeLDIFException(message, e);
     }
 
     Tag t;
@@ -248,17 +248,16 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MAKELDIF_CANNOT_INSTANTIATE_TAG;
-      String message = getMessage(msgID, tagClass);
-      throw new MakeLDIFException(msgID, message, e);
+      Message message = ERR_MAKELDIF_CANNOT_INSTANTIATE_TAG.get(tagClass);
+      throw new MakeLDIFException(message, e);
     }
 
     String lowerName = toLowerCase(t.getName());
     if (registeredTags.containsKey(lowerName))
     {
-      int    msgID   = MSGID_MAKELDIF_CONFLICTING_TAG_NAME;
-      String message = getMessage(msgID, tagClass, t.getName());
-      throw new MakeLDIFException(msgID, message);
+      Message message =
+          ERR_MAKELDIF_CONFLICTING_TAG_NAME.get(tagClass, t.getName());
+      throw new MakeLDIFException(message);
     }
     else
     {
@@ -592,7 +591,7 @@
    * @throws  MakeLDIFException  If any other problem occurs while parsing the
    *                             template file.
    */
-  public void parse(String filename, List<String> warnings)
+  public void parse(String filename, List<Message> warnings)
          throws IOException, InitializationException, MakeLDIFException
   {
     ArrayList<String> fileLines = new ArrayList<String>();
@@ -601,9 +600,8 @@
     File f = getFile(filename);
     if ((f == null) || (! f.exists()))
     {
-      int    msgID   = MSGID_MAKELDIF_COULD_NOT_FIND_TEMPLATE_FILE;
-      String message = getMessage(msgID, filename);
-      throw new IOException(message);
+      Message message = ERR_MAKELDIF_COULD_NOT_FIND_TEMPLATE_FILE.get(filename);
+      throw new IOException(message.toString());
     }
     else
     {
@@ -651,7 +649,7 @@
    * @throws  MakeLDIFException  If any other problem occurs while parsing the
    *                             template file.
    */
-  public void parse(InputStream inputStream, List<String> warnings)
+  public void parse(InputStream inputStream, List<Message> warnings)
          throws IOException, InitializationException, MakeLDIFException
   {
     ArrayList<String> fileLines = new ArrayList<String>();
@@ -692,7 +690,7 @@
    * @throws  MakeLDIFException  If any other problem occurs while parsing the
    *                             template file.
    */
-  public void parse(String[] lines, List<String> warnings)
+  public void parse(String[] lines, List<Message> warnings)
          throws InitializationException, MakeLDIFException
   {
     // Create temporary variables that will be used to hold the data read.
@@ -723,8 +721,8 @@
           String constantValue = templateFileConstants.get(constantName);
           if (constantValue == null)
           {
-            int    msgID   = MSGID_MAKELDIF_WARNING_UNDEFINED_CONSTANT;
-            String message = getMessage(msgID, constantName, lineNumber);
+            Message message = WARN_MAKELDIF_WARNING_UNDEFINED_CONSTANT.get(
+                    constantName, lineNumber);
             warnings.add(message);
           }
           else
@@ -757,9 +755,8 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_MAKELDIF_CANNOT_LOAD_TAG_CLASS;
-          String message = getMessage(msgID, className);
-          throw new MakeLDIFException(msgID, message, e);
+          Message message = ERR_MAKELDIF_CANNOT_LOAD_TAG_CLASS.get(className);
+          throw new MakeLDIFException(message, e);
         }
 
         Tag tag;
@@ -769,18 +766,17 @@
         }
         catch (Exception e)
         {
-          int    msgID   = MSGID_MAKELDIF_CANNOT_INSTANTIATE_TAG;
-          String message = getMessage(msgID, className);
-          throw new MakeLDIFException(msgID, message, e);
+          Message message = ERR_MAKELDIF_CANNOT_INSTANTIATE_TAG.get(className);
+          throw new MakeLDIFException(message, e);
         }
 
         String lowerName = toLowerCase(tag.getName());
         if (registeredTags.containsKey(lowerName) ||
             templateFileIncludeTags.containsKey(lowerName))
         {
-          int    msgID   = MSGID_MAKELDIF_CONFLICTING_TAG_NAME;
-          String message = getMessage(msgID, className, tag.getName());
-          throw new MakeLDIFException(msgID, message);
+          Message message =
+              ERR_MAKELDIF_CONFLICTING_TAG_NAME.get(className, tag.getName());
+          throw new MakeLDIFException(message);
         }
 
         templateFileIncludeTags.put(lowerName, tag);
@@ -792,32 +788,30 @@
         int equalPos = line.indexOf('=', 7);
         if (equalPos < 0)
         {
-          int    msgID   = MSGID_MAKELDIF_DEFINE_MISSING_EQUALS;
-          String message = getMessage(msgID, lineNumber);
-          throw new MakeLDIFException(msgID, message);
+          Message message = ERR_MAKELDIF_DEFINE_MISSING_EQUALS.get(lineNumber);
+          throw new MakeLDIFException(message);
         }
 
         String name  = line.substring(7, equalPos).trim();
         if (name.length() == 0)
         {
-          int    msgID   = MSGID_MAKELDIF_DEFINE_NAME_EMPTY;
-          String message = getMessage(msgID, lineNumber);
-          throw new MakeLDIFException(msgID, message);
+          Message message = ERR_MAKELDIF_DEFINE_NAME_EMPTY.get(lineNumber);
+          throw new MakeLDIFException(message);
         }
 
         String lowerName = toLowerCase(name);
         if (templateFileConstants.containsKey(lowerName))
         {
-          int    msgID   = MSGID_MAKELDIF_CONFLICTING_CONSTANT_NAME;
-          String message = getMessage(msgID, name, lineNumber);
-          throw new MakeLDIFException(msgID, message);
+          Message message =
+              ERR_MAKELDIF_CONFLICTING_CONSTANT_NAME.get(name, lineNumber);
+          throw new MakeLDIFException(message);
         }
 
         String value = line.substring(equalPos+1);
         if (value.length() == 0)
         {
-          int    msgID   = MSGID_MAKELDIF_WARNING_DEFINE_VALUE_EMPTY;
-          String message = getMessage(msgID, name, lineNumber);
+          Message message = ERR_MAKELDIF_WARNING_DEFINE_VALUE_EMPTY.get(
+                  name, lineNumber);
           warnings.add(message);
         }
 
@@ -858,8 +852,9 @@
                 String constantValue = templateFileConstants.get(constantName);
                 if (constantValue == null)
                 {
-                  int    msgID   = MSGID_MAKELDIF_WARNING_UNDEFINED_CONSTANT;
-                  String message = getMessage(msgID, constantName, lineNumber);
+                  Message message =
+                          WARN_MAKELDIF_WARNING_UNDEFINED_CONSTANT.get(
+                                  constantName, lineNumber);
                   warnings.add(message);
                 }
                 else
@@ -884,10 +879,9 @@
         DN branchDN = b.getBranchDN();
         if (templateFileBranches.containsKey(branchDN))
         {
-          int    msgID   = MSGID_MAKELDIF_CONFLICTING_BRANCH_DN;
-          String message = getMessage(msgID, String.valueOf(branchDN),
-                                      startLineNumber);
-          throw new MakeLDIFException(msgID, message);
+          Message message = ERR_MAKELDIF_CONFLICTING_BRANCH_DN.get(
+              String.valueOf(branchDN), startLineNumber);
+          throw new MakeLDIFException(message);
         }
         else
         {
@@ -929,8 +923,9 @@
                 String constantValue = templateFileConstants.get(constantName);
                 if (constantValue == null)
                 {
-                  int    msgID   = MSGID_MAKELDIF_WARNING_UNDEFINED_CONSTANT;
-                  String message = getMessage(msgID, constantName, lineNumber);
+                  Message message =
+                          WARN_MAKELDIF_WARNING_UNDEFINED_CONSTANT.get(
+                                  constantName, lineNumber);
                   warnings.add(message);
                 }
                 else
@@ -956,10 +951,9 @@
         String lowerName = toLowerCase(t.getName());
         if (templateFileTemplates.containsKey(lowerName))
         {
-          int    msgID   = MSGID_MAKELDIF_CONFLICTING_TEMPLATE_NAME;
-          String message = getMessage(msgID, String.valueOf(t.getName()),
-                                      startLineNumber);
-          throw new MakeLDIFException(msgID, message);
+          Message message = ERR_MAKELDIF_CONFLICTING_TEMPLATE_NAME.get(
+              String.valueOf(t.getName()), startLineNumber);
+          throw new MakeLDIFException(message);
         }
         else
         {
@@ -968,9 +962,9 @@
       }
       else
       {
-        int    msgID   = MSGID_MAKELDIF_UNEXPECTED_TEMPLATE_FILE_LINE;
-        String message = getMessage(msgID, line, lineNumber);
-        throw new MakeLDIFException(msgID, message);
+        Message message =
+            ERR_MAKELDIF_UNEXPECTED_TEMPLATE_FILE_LINE.get(line, lineNumber);
+        throw new MakeLDIFException(message);
       }
     }
 
@@ -1021,7 +1015,7 @@
                                        int startLineNumber,
                                        LinkedHashMap<String,Tag> tags,
                                        LinkedHashMap<String,String> constants,
-                                       List<String> warnings)
+                                       List<Message> warnings)
           throws InitializationException, MakeLDIFException
   {
     // The first line must be "branch: " followed by the branch DN.
@@ -1033,9 +1027,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MAKELDIF_CANNOT_DECODE_BRANCH_DN;
-      String message = getMessage(msgID, dnString, startLineNumber);
-      throw new MakeLDIFException(msgID, message);
+      Message message =
+          ERR_MAKELDIF_CANNOT_DECODE_BRANCH_DN.get(dnString, startLineNumber);
+      throw new MakeLDIFException(message);
     }
 
 
@@ -1060,9 +1054,9 @@
         int colonPos = line.indexOf(':', 21);
         if (colonPos <= 21)
         {
-          int    msgID   = MSGID_MAKELDIF_BRANCH_SUBORDINATE_TEMPLATE_NO_COLON;
-          String message = getMessage(msgID, lineNumber, dnString);
-          throw new MakeLDIFException(msgID, message);
+          Message message = ERR_MAKELDIF_BRANCH_SUBORDINATE_TEMPLATE_NO_COLON.
+              get(lineNumber, dnString);
+          throw new MakeLDIFException(message);
         }
 
         String templateName = line.substring(21, colonPos).trim();
@@ -1073,15 +1067,15 @@
           numEntries = Integer.parseInt(line.substring(colonPos+1).trim());
           if (numEntries < 0)
           {
-            int msgID = MSGID_MAKELDIF_BRANCH_SUBORDINATE_INVALID_NUM_ENTRIES;
-            String message = getMessage(msgID, lineNumber, dnString, numEntries,
-                                        templateName);
-            throw new MakeLDIFException(msgID, message);
+            Message message =
+              ERR_MAKELDIF_BRANCH_SUBORDINATE_INVALID_NUM_ENTRIES.
+                  get(lineNumber, dnString, numEntries, templateName);
+            throw new MakeLDIFException(message);
           }
           else if (numEntries == 0)
           {
-            int    msgID   = MSGID_MAKELDIF_BRANCH_SUBORDINATE_ZERO_ENTRIES;
-            String message = getMessage(msgID, lineNumber, dnString,
+            Message message = WARN_MAKELDIF_BRANCH_SUBORDINATE_ZERO_ENTRIES.get(
+                    lineNumber, dnString,
                                         templateName);
             warnings.add(message);
           }
@@ -1090,10 +1084,10 @@
         }
         catch (NumberFormatException nfe)
         {
-          int msgID = MSGID_MAKELDIF_BRANCH_SUBORDINATE_CANT_PARSE_NUMENTRIES;
-          String message = getMessage(msgID, templateName, lineNumber,
-                                      dnString);
-          throw new MakeLDIFException(msgID, message);
+          Message message =
+            ERR_MAKELDIF_BRANCH_SUBORDINATE_CANT_PARSE_NUMENTRIES.
+                get(templateName, lineNumber, dnString);
+          throw new MakeLDIFException(message);
         }
       }
       else
@@ -1142,7 +1136,7 @@
                                                 constants,
                                            LinkedHashMap<String,Template>
                                                 definedTemplates,
-                                           List<String> warnings)
+                                           List<Message> warnings)
           throws InitializationException, MakeLDIFException
   {
     // The first line must be "template: " followed by the template name.
@@ -1174,10 +1168,9 @@
         parentTemplate = definedTemplates.get(parentTemplateName.toLowerCase());
         if (parentTemplate == null)
         {
-          int msgID = MSGID_MAKELDIF_TEMPLATE_INVALID_PARENT_TEMPLATE;
-          String message = getMessage(msgID, parentTemplateName, lineNumber,
-                                      templateName);
-          throw new MakeLDIFException(msgID, message);
+          Message message = ERR_MAKELDIF_TEMPLATE_INVALID_PARENT_TEMPLATE.get(
+              parentTemplateName, lineNumber, templateName);
+          throw new MakeLDIFException(message);
         }
       }
       else if (lowerLine.startsWith("rdnattr: "))
@@ -1203,9 +1196,9 @@
         int colonPos = line.indexOf(':', 21);
         if (colonPos <= 21)
         {
-          int msgID = MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_TEMPLATE_NO_COLON;
-          String message = getMessage(msgID, lineNumber, templateName);
-          throw new MakeLDIFException(msgID, message);
+          Message message = ERR_MAKELDIF_TEMPLATE_SUBORDINATE_TEMPLATE_NO_COLON.
+              get(lineNumber, templateName);
+          throw new MakeLDIFException(message);
         }
 
         String subTemplateName = line.substring(21, colonPos).trim();
@@ -1216,16 +1209,15 @@
           numEntries = Integer.parseInt(line.substring(colonPos+1).trim());
           if (numEntries < 0)
           {
-            int msgID = MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_INVALID_NUM_ENTRIES;
-            String message = getMessage(msgID, lineNumber, templateName,
-                                        numEntries, subTemplateName);
-            throw new MakeLDIFException(msgID, message);
+            Message message =
+              ERR_MAKELDIF_TEMPLATE_SUBORDINATE_INVALID_NUM_ENTRIES.
+                  get(lineNumber, templateName, numEntries, subTemplateName);
+            throw new MakeLDIFException(message);
           }
           else if (numEntries == 0)
           {
-            int    msgID   = MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_ZERO_ENTRIES;
-            String message = getMessage(msgID, lineNumber, templateName,
-                                        subTemplateName);
+            Message message = WARN_MAKELDIF_TEMPLATE_SUBORDINATE_ZERO_ENTRIES
+                    .get(lineNumber, templateName, subTemplateName);
             warnings.add(message);
           }
 
@@ -1234,10 +1226,10 @@
         }
         catch (NumberFormatException nfe)
         {
-          int msgID = MSGID_MAKELDIF_TEMPLATE_SUBORDINATE_CANT_PARSE_NUMENTRIES;
-          String message = getMessage(msgID, subTemplateName, lineNumber,
-                                      templateName);
-          throw new MakeLDIFException(msgID, message);
+          Message message =
+            ERR_MAKELDIF_TEMPLATE_SUBORDINATE_CANT_PARSE_NUMENTRIES.
+                get(subTemplateName, lineNumber, templateName);
+          throw new MakeLDIFException(message);
         }
       }
       else
@@ -1325,7 +1317,7 @@
                                          int lineNumber, Branch branch,
                                          Template template,
                                          LinkedHashMap<String,Tag> tags,
-                                         List<String> warnings)
+                                         List<Message> warnings)
           throws InitializationException, MakeLDIFException
   {
     // The first component must be the attribute type, followed by a colon.
@@ -1334,32 +1326,30 @@
     {
       if (branch == null)
       {
-        int    msgID   = MSGID_MAKELDIF_NO_COLON_IN_TEMPLATE_LINE;
-        String message = getMessage(msgID, lineNumber, template.getName());
-        throw new MakeLDIFException(msgID, message);
+        Message message = ERR_MAKELDIF_NO_COLON_IN_TEMPLATE_LINE.get(
+            lineNumber, template.getName());
+        throw new MakeLDIFException(message);
       }
       else
       {
-        int    msgID   = MSGID_MAKELDIF_NO_COLON_IN_BRANCH_EXTRA_LINE;
-        String message = getMessage(msgID, lineNumber,
-                                    String.valueOf(branch.getBranchDN()));
-        throw new MakeLDIFException(msgID, message);
+        Message message = ERR_MAKELDIF_NO_COLON_IN_BRANCH_EXTRA_LINE.get(
+            lineNumber, String.valueOf(branch.getBranchDN()));
+        throw new MakeLDIFException(message);
       }
     }
     else if (colonPos == 0)
     {
       if (branch == null)
       {
-        int    msgID   = MSGID_MAKELDIF_NO_ATTR_IN_TEMPLATE_LINE;
-        String message = getMessage(msgID, lineNumber, template.getName());
-        throw new MakeLDIFException(msgID, message);
+        Message message = ERR_MAKELDIF_NO_ATTR_IN_TEMPLATE_LINE.get(
+            lineNumber, template.getName());
+        throw new MakeLDIFException(message);
       }
       else
       {
-        int    msgID   = MSGID_MAKELDIF_NO_ATTR_IN_BRANCH_EXTRA_LINE;
-        String message = getMessage(msgID, lineNumber,
-                                    String.valueOf(branch.getBranchDN()));
-        throw new MakeLDIFException(msgID, message);
+        Message message = ERR_MAKELDIF_NO_ATTR_IN_BRANCH_EXTRA_LINE.get(
+            lineNumber, String.valueOf(branch.getBranchDN()));
+        throw new MakeLDIFException(message);
       }
     }
 
@@ -1382,15 +1372,14 @@
       // warning.
       if (branch == null)
       {
-        int    msgID   = MSGID_MAKELDIF_NO_VALUE_IN_TEMPLATE_LINE;
-        String message = getMessage(msgID, lineNumber, template.getName());
+        Message message = WARN_MAKELDIF_NO_VALUE_IN_TEMPLATE_LINE.get(
+                lineNumber, template.getName());
         warnings.add(message);
       }
       else
       {
-        int    msgID   = MSGID_MAKELDIF_NO_VALUE_IN_BRANCH_EXTRA_LINE;
-        String message = getMessage(msgID, lineNumber,
-                                    String.valueOf(branch.getBranchDN()));
+        Message message = WARN_MAKELDIF_NO_VALUE_IN_BRANCH_EXTRA_LINE.get(
+                lineNumber, String.valueOf(branch.getBranchDN()));
         warnings.add(message);
       }
     }
@@ -1493,9 +1482,8 @@
     }
     else
     {
-      int    msgID   = MSGID_MAKELDIF_INCOMPLETE_TAG;
-      String message = getMessage(msgID, lineNumber);
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_INCOMPLETE_TAG.get(lineNumber);
+      throw new InitializationException(message);
     }
 
     Tag[] tagArray = new Tag[tagList.size()];
@@ -1530,7 +1518,7 @@
   private Tag parseReplacementTag(String tagString, Branch branch,
                                   Template template, int lineNumber,
                                   LinkedHashMap<String,Tag> tags,
-                                  List<String> warnings)
+                                  List<Message> warnings)
           throws InitializationException, MakeLDIFException
   {
     // The components of the replacement tag will be separated by colons, with
@@ -1545,9 +1533,8 @@
       t = tags.get(lowerTagName);
       if (t == null)
       {
-        int    msgID   = MSGID_MAKELDIF_NO_SUCH_TAG;
-        String message = getMessage(msgID, tagName, lineNumber);
-        throw new MakeLDIFException(msgID, message);
+        Message message = ERR_MAKELDIF_NO_SUCH_TAG.get(tagName, lineNumber);
+        throw new MakeLDIFException(message);
       }
     }
 
@@ -1568,10 +1555,9 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_MAKELDIF_CANNOT_INSTANTIATE_NEW_TAG;
-      String message = getMessage(msgID, tagName, lineNumber,
-                                  String.valueOf(e));
-      throw new MakeLDIFException(msgID, message, e);
+      Message message = ERR_MAKELDIF_CANNOT_INSTANTIATE_NEW_TAG.get(
+          tagName, lineNumber, String.valueOf(e));
+      throw new MakeLDIFException(message, e);
     }
 
 
@@ -1587,9 +1573,9 @@
       }
       else
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_NOT_ALLOWED_IN_BRANCH;
-        String message = getMessage(msgID, newTag.getName(), lineNumber);
-        throw new MakeLDIFException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_NOT_ALLOWED_IN_BRANCH.get(
+            newTag.getName(), lineNumber);
+        throw new MakeLDIFException(message);
       }
     }
 
@@ -1619,7 +1605,7 @@
    */
   private Tag parseAttributeTag(String tagString, Branch branch,
                                 Template template, int lineNumber,
-                                List<String> warnings)
+                                List<Message> warnings)
           throws InitializationException, MakeLDIFException
   {
     // The attribute tag must have at least one argument, which is the name of
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java
index b850418..081e321 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -103,7 +103,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<String> warnings)
+                                  List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -128,7 +128,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -163,18 +163,16 @@
       }
       catch (NumberFormatException nfe)
       {
-        int    msgID   = MSGID_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER;
-        String message = getMessage(msgID, arguments[0], getName(), lineNumber);
-        throw new InitializationException(msgID, message);
+        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+            arguments[0], getName(), lineNumber);
+        throw new InitializationException(message);
       }
     }
     else
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 0, 1,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+          getName(), lineNumber, 0, 1, arguments.length);
+      throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java
index 40219bf..5f550be 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.makeldif;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
 
 
 
@@ -98,16 +98,14 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<String> warnings)
+                                    int lineNumber, List<Message> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      int    msgID   = MSGID_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT;
-      String message = getMessage(msgID, getName(), lineNumber, 0,
-                                  arguments.length);
-
-      throw new InitializationException(msgID, message);
+      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+          getName(), lineNumber, 0, arguments.length);
+      throw new InitializationException(message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/AbstractOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/AbstractOperation.java
index 163fddd..8665da1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/AbstractOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/AbstractOperation.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import static org.opends.server.core.CoreConstants.*;
@@ -40,7 +41,6 @@
 import org.opends.server.core.DirectoryServer;
 
 
-
 /**
  * This class defines a generic operation that may be processed by the
  * Directory Server.  Specific subclasses should implement specific
@@ -114,11 +114,11 @@
 
   // Additional information that should be included in the log but
   // not sent to the client.
-  private StringBuilder additionalLogMessage;
+  private MessageBuilder additionalLogMessage;
 
   // The error message for this operation that should be included in
   // the log and in the response to the client.
-  private StringBuilder errorMessage;
+  private MessageBuilder errorMessage;
 
   // Indicates whether this operation nneds to be synchronized to
   // other copies of the data.
@@ -160,8 +160,8 @@
     }
 
     resultCode                 = ResultCode.UNDEFINED;
-    additionalLogMessage       = new StringBuilder();
-    errorMessage               = new StringBuilder();
+    additionalLogMessage       = new MessageBuilder();
+    errorMessage               = new MessageBuilder();
     attachments                = new HashMap<String,Object>();
     matchedDN                  = null;
     referralURLs               = null;
@@ -183,9 +183,9 @@
    * {@inheritDoc}
    */
   public abstract void disconnectClient(
-      DisconnectReason disconnectReason,
-      boolean sendNotification,
-      String message, int messageID);
+          DisconnectReason disconnectReason,
+          boolean sendNotification,
+          Message message);
 
   /**
    * {@inheritDoc}
@@ -307,7 +307,7 @@
   /**
    * {@inheritDoc}
    */
-  public final StringBuilder getErrorMessage()
+  public final MessageBuilder getErrorMessage()
   {
     return errorMessage;
   }
@@ -315,11 +315,11 @@
   /**
    * {@inheritDoc}
    */
-  public final void setErrorMessage(StringBuilder errorMessage)
+  public final void setErrorMessage(MessageBuilder errorMessage)
   {
     if (errorMessage == null)
     {
-      this.errorMessage = new StringBuilder();
+      this.errorMessage = new MessageBuilder();
     }
     else
     {
@@ -330,11 +330,11 @@
   /**
    * {@inheritDoc}
    */
-  public final void appendErrorMessage(String message)
+  public final void appendErrorMessage(Message message)
   {
     if (errorMessage == null)
     {
-      errorMessage = new StringBuilder(message);
+      errorMessage = new MessageBuilder(message);
     }
     else
     {
@@ -350,7 +350,7 @@
   /**
    * {@inheritDoc}
    */
-  public final StringBuilder getAdditionalLogMessage()
+  public final MessageBuilder getAdditionalLogMessage()
   {
     return additionalLogMessage;
   }
@@ -359,12 +359,12 @@
   /**
    * {@inheritDoc}
    */
-  public final void setAdditionalLogMessage(StringBuilder
-      additionalLogMessage)
+  public final void setAdditionalLogMessage(MessageBuilder
+          additionalLogMessage)
   {
     if (additionalLogMessage == null)
     {
-      this.additionalLogMessage = new StringBuilder();
+      this.additionalLogMessage = new MessageBuilder();
     }
     else
     {
@@ -375,11 +375,11 @@
   /**
    * {@inheritDoc}
    */
-  public final void appendAdditionalLogMessage(String message)
+  public final void appendAdditionalLogMessage(Message message)
   {
     if (additionalLogMessage == null)
     {
-      additionalLogMessage = new StringBuilder(message);
+      additionalLogMessage = new MessageBuilder(message);
     }
     else
     {
@@ -429,7 +429,7 @@
     this.matchedDN    = directoryException.getMatchedDN();
     this.referralURLs = directoryException.getReferralURLs();
 
-    appendErrorMessage(directoryException.getErrorMessage());
+    appendErrorMessage(directoryException.getMessageObject());
   }
 
   /**
@@ -599,7 +599,7 @@
     {
       setResultCode(ResultCode.CANCELED);
 
-      String cancelReason = cancelRequest.getCancelReason();
+      Message cancelReason = cancelRequest.getCancelReason();
       if (cancelReason != null)
       {
         appendErrorMessage(cancelReason);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/AccountStatusNotification.java b/opendj-sdk/opends/src/server/org/opends/server/types/AccountStatusNotification.java
index 8751eb3..33dca2e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/AccountStatusNotification.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/AccountStatusNotification.java
@@ -25,6 +25,9 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
+
+
 
 
 /**
@@ -42,12 +45,9 @@
   // The DN of the user entry to which this notification applies.
   private DN userDN;
 
-  // The message ID for the account status notification message.
-  private int messageID;
-
   // A message that provides additional information for this account
   // status notification.
-  private String message;
+  private Message message;
 
 
 
@@ -59,17 +59,15 @@
    *                           notification.
    * @param  userDN            The DN of the user entry to which
    *                           this notification applies.
-   * @param  messageID         The unique ID for this notification.
    * @param  message           The human-readable message for this
    *                           notification.
    */
   public AccountStatusNotification(
               AccountStatusNotificationType notificationType,
-              DN userDN, int messageID, String message)
+              DN userDN, Message message)
   {
     this.notificationType = notificationType;
     this.userDN           = userDN;
-    this.messageID        = messageID;
     this.message          = message;
   }
 
@@ -104,27 +102,13 @@
 
 
   /**
-   * Retrieves the message ID for the account status notification
-   * message.
-   *
-   * @return  The message ID for the account status notification
-   *          message.
-   */
-  public int getMessageID()
-  {
-    return messageID;
-  }
-
-
-
-  /**
    * Retrieves a message that provides additional information for this
    * account status notification.
    *
    * @return  A message that provides additional information for this
    *          account status notification.
    */
-  public String getMessage()
+  public Message getMessage()
   {
     return message;
   }
@@ -141,8 +125,8 @@
   public String toString()
   {
     return "AccountStatusNotification(type=" +
-           notificationType.getNotificationTypeName() + ",dn=" +
-           userDN + ",id=" + messageID + ",message=" + message + ")";
+           notificationType.getNotificationName() + ",dn=" +
+           userDN + ",message=" + message + ")";
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/AccountStatusNotificationType.java b/opendj-sdk/opends/src/server/org/opends/server/types/AccountStatusNotificationType.java
index eed51b2..cb04f95 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/AccountStatusNotificationType.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/AccountStatusNotificationType.java
@@ -25,11 +25,13 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import org.opends.messages.MessageDescriptor;
+
+import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -46,7 +48,7 @@
    * many failed attempts.
    */
   ACCOUNT_TEMPORARILY_LOCKED(
-       MSGID_ACCTNOTTYPE_ACCOUNT_TEMPORARILY_LOCKED),
+       INFO_ACCTNOTTYPE_ACCOUNT_TEMPORARILY_LOCKED.get()),
 
 
 
@@ -56,7 +58,7 @@
    * many failed attempts.
    */
   ACCOUNT_PERMANENTLY_LOCKED(
-       MSGID_ACCTNOTTYPE_ACCOUNT_PERMANENTLY_LOCKED),
+       INFO_ACCTNOTTYPE_ACCOUNT_PERMANENTLY_LOCKED.get()),
 
 
 
@@ -64,7 +66,7 @@
    * Indicates that an account status message should be generated
    * whenever a user account has been unlocked by an administrator.
    */
-  ACCOUNT_UNLOCKED(MSGID_ACCTNOTTYPE_ACCOUNT_UNLOCKED),
+  ACCOUNT_UNLOCKED(INFO_ACCTNOTTYPE_ACCOUNT_UNLOCKED.get()),
 
 
 
@@ -73,7 +75,7 @@
    * whenever a user account has been locked because it was idle for
    * too long.
    */
-  ACCOUNT_IDLE_LOCKED(MSGID_ACCTNOTTYPE_ACCOUNT_IDLE_LOCKED),
+  ACCOUNT_IDLE_LOCKED(INFO_ACCTNOTTYPE_ACCOUNT_IDLE_LOCKED.get()),
 
 
 
@@ -83,7 +85,7 @@
    * had been reset by an administrator but not changed by the user
    * within the required interval.
    */
-  ACCOUNT_RESET_LOCKED(MSGID_ACCTNOTTYPE_ACCOUNT_RESET_LOCKED),
+  ACCOUNT_RESET_LOCKED(INFO_ACCTNOTTYPE_ACCOUNT_RESET_LOCKED.get()),
 
 
 
@@ -91,7 +93,7 @@
    * Indicates that an account status message should be generated
    * whenever a user account has been disabled by an administrator.
    */
-  ACCOUNT_DISABLED(MSGID_ACCTNOTTYPE_ACCOUNT_DISABLED),
+  ACCOUNT_DISABLED(INFO_ACCTNOTTYPE_ACCOUNT_DISABLED.get()),
 
 
 
@@ -99,7 +101,7 @@
    * Indicates that an account status message should be generated
    * whenever a user account has been enabled by an administrator.
    */
-  ACCOUNT_ENABLED(MSGID_ACCTNOTTYPE_ACCOUNT_ENABLED),
+  ACCOUNT_ENABLED(INFO_ACCTNOTTYPE_ACCOUNT_ENABLED.get()),
 
 
 
@@ -108,7 +110,7 @@
    * whenever a user authentication has failed because the account
    * has expired.
    */
-  ACCOUNT_EXPIRED(MSGID_ACCTNOTTYPE_ACCOUNT_EXPIRED),
+  ACCOUNT_EXPIRED(INFO_ACCTNOTTYPE_ACCOUNT_EXPIRED.get()),
 
 
 
@@ -117,7 +119,7 @@
    * generated whenever a user authentication has failed because the
    * password has expired.
    */
-  PASSWORD_EXPIRED(MSGID_ACCTNOTTYPE_PASSWORD_EXPIRED),
+  PASSWORD_EXPIRED(INFO_ACCTNOTTYPE_PASSWORD_EXPIRED.get()),
 
 
 
@@ -127,7 +129,7 @@
    * generated the first time that a password expiration warning is
    * encountered for a user password.
    */
-  PASSWORD_EXPIRING(MSGID_ACCTNOTTYPE_PASSWORD_EXPIRING),
+  PASSWORD_EXPIRING(INFO_ACCTNOTTYPE_PASSWORD_EXPIRING.get()),
 
 
 
@@ -136,7 +138,7 @@
    * generated whenever a user's password is reset by an
    * administrator.
    */
-  PASSWORD_RESET(MSGID_ACCTNOTTYPE_PASSWORD_RESET),
+  PASSWORD_RESET(INFO_ACCTNOTTYPE_PASSWORD_RESET.get()),
 
 
 
@@ -144,12 +146,12 @@
    * Indicates whether an account status notification message should
    * be generated whenever a user changes his/her own password.
    */
-  PASSWORD_CHANGED(MSGID_ACCTNOTTYPE_PASSWORD_CHANGED);
+  PASSWORD_CHANGED(INFO_ACCTNOTTYPE_PASSWORD_CHANGED.get());
 
 
 
-  // The notification type identifier.
-  private int notificationTypeID;
+  // The notification type message.
+  private Message notificationName;
 
 
 
@@ -157,12 +159,12 @@
    * Creates a new account status notification type with the provided
    * notification type ID.
    *
-   * @param  notificationTypeID  The notification type identifier for
-   *                             this account status notification.
+   * @param  notification      The notification message for
+   *                           this account status notification.
    */
-  private AccountStatusNotificationType(int notificationTypeID)
+  private AccountStatusNotificationType(Message notification)
   {
-    this.notificationTypeID = notificationTypeID;
+    this.notificationName = notification;
   }
 
 
@@ -171,44 +173,44 @@
    * Retrieves the account status notification type with the specified
    * notification type identifier.
    *
-   * @param  notificationTypeID  The notification type identifier for
-   *                             the notification type to retrieve.
+   * @param  notification    The notification type message for
+   *                         the notification type to retrieve.
    *
    * @return  The requested account status notification type, or
    *          <CODE>null</CODE> if there is no type for the given
    *          notification type identifier.
    */
   public static AccountStatusNotificationType
-                     typeForID(int notificationTypeID)
+                     typeForMessage(Message notification)
   {
-    switch(notificationTypeID)
-    {
-      case MSGID_ACCTNOTTYPE_ACCOUNT_TEMPORARILY_LOCKED:
-        return ACCOUNT_TEMPORARILY_LOCKED;
-      case MSGID_ACCTNOTTYPE_ACCOUNT_PERMANENTLY_LOCKED:
-        return ACCOUNT_PERMANENTLY_LOCKED;
-      case MSGID_ACCTNOTTYPE_ACCOUNT_UNLOCKED:
-        return ACCOUNT_UNLOCKED;
-      case MSGID_ACCTNOTTYPE_ACCOUNT_IDLE_LOCKED:
-        return ACCOUNT_IDLE_LOCKED;
-      case MSGID_ACCTNOTTYPE_ACCOUNT_RESET_LOCKED:
-        return ACCOUNT_RESET_LOCKED;
-      case MSGID_ACCTNOTTYPE_ACCOUNT_DISABLED:
-        return ACCOUNT_DISABLED;
-      case MSGID_ACCTNOTTYPE_ACCOUNT_ENABLED:
-        return ACCOUNT_ENABLED;
-      case MSGID_ACCTNOTTYPE_ACCOUNT_EXPIRED:
-        return ACCOUNT_EXPIRED;
-      case MSGID_ACCTNOTTYPE_PASSWORD_EXPIRED:
-        return PASSWORD_EXPIRED;
-      case MSGID_ACCTNOTTYPE_PASSWORD_EXPIRING:
-        return PASSWORD_EXPIRING;
-      case MSGID_ACCTNOTTYPE_PASSWORD_RESET:
-        return PASSWORD_RESET;
-      case MSGID_ACCTNOTTYPE_PASSWORD_CHANGED:
-        return PASSWORD_CHANGED;
-      default:
-        return null;
+    MessageDescriptor md = notification.getDescriptor();
+    if (INFO_ACCTNOTTYPE_ACCOUNT_TEMPORARILY_LOCKED.equals(md)) {
+      return ACCOUNT_TEMPORARILY_LOCKED;
+    } else if (INFO_ACCTNOTTYPE_ACCOUNT_PERMANENTLY_LOCKED
+            .equals(md)) {
+      return ACCOUNT_PERMANENTLY_LOCKED;
+    } else if (INFO_ACCTNOTTYPE_ACCOUNT_UNLOCKED.equals(md)) {
+      return ACCOUNT_UNLOCKED;
+    } else if (INFO_ACCTNOTTYPE_ACCOUNT_IDLE_LOCKED.equals(md)) {
+      return ACCOUNT_IDLE_LOCKED;
+    } else if (INFO_ACCTNOTTYPE_ACCOUNT_RESET_LOCKED.equals(md)) {
+      return ACCOUNT_RESET_LOCKED;
+    } else if (INFO_ACCTNOTTYPE_ACCOUNT_DISABLED.equals(md)) {
+      return ACCOUNT_DISABLED;
+    } else if (INFO_ACCTNOTTYPE_ACCOUNT_ENABLED.equals(md)) {
+      return ACCOUNT_ENABLED;
+    } else if (INFO_ACCTNOTTYPE_ACCOUNT_EXPIRED.equals(md)) {
+      return ACCOUNT_EXPIRED;
+    } else if (INFO_ACCTNOTTYPE_PASSWORD_EXPIRED.equals(md)) {
+      return PASSWORD_EXPIRED;
+    } else if (INFO_ACCTNOTTYPE_PASSWORD_EXPIRING.equals(md)) {
+      return PASSWORD_EXPIRING;
+    } else if (INFO_ACCTNOTTYPE_PASSWORD_RESET.equals(md)) {
+      return PASSWORD_RESET;
+    } else if (INFO_ACCTNOTTYPE_PASSWORD_CHANGED.equals(md)) {
+      return PASSWORD_CHANGED;
+    } else {
+      return null;
     }
   }
 
@@ -227,65 +229,65 @@
    */
   public static AccountStatusNotificationType typeForName(String name)
   {
-    String lowerName = toLowerCase(name);
+    Message lowerName = Message.raw(toLowerCase(name));
 
-    if (lowerName.equals(getMessage(
-             MSGID_ACCTNOTTYPE_ACCOUNT_TEMPORARILY_LOCKED)))
+    if (lowerName.equals(
+            INFO_ACCTNOTTYPE_ACCOUNT_TEMPORARILY_LOCKED.get()))
     {
       return ACCOUNT_TEMPORARILY_LOCKED;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_ACCOUNT_PERMANENTLY_LOCKED)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_ACCOUNT_PERMANENTLY_LOCKED.get()))
     {
       return ACCOUNT_PERMANENTLY_LOCKED;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_ACCOUNT_UNLOCKED)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_ACCOUNT_UNLOCKED.get()))
     {
       return ACCOUNT_UNLOCKED;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_ACCOUNT_IDLE_LOCKED)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_ACCOUNT_IDLE_LOCKED.get()))
     {
       return ACCOUNT_IDLE_LOCKED;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_ACCOUNT_RESET_LOCKED)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_ACCOUNT_RESET_LOCKED.get()))
     {
       return ACCOUNT_RESET_LOCKED;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_ACCOUNT_DISABLED)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_ACCOUNT_DISABLED.get()))
     {
       return ACCOUNT_DISABLED;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_ACCOUNT_ENABLED)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_ACCOUNT_ENABLED.get()))
     {
       return ACCOUNT_ENABLED;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_ACCOUNT_EXPIRED)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_ACCOUNT_EXPIRED.get()))
     {
       return ACCOUNT_EXPIRED;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_PASSWORD_EXPIRED)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_PASSWORD_EXPIRED.get()))
     {
       return PASSWORD_EXPIRED;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_PASSWORD_EXPIRING)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_PASSWORD_EXPIRING.get()))
     {
       return PASSWORD_EXPIRING;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_PASSWORD_RESET)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_PASSWORD_RESET.get()))
     {
       return PASSWORD_RESET;
     }
-    else if (lowerName.equals(getMessage(
-                  MSGID_ACCTNOTTYPE_PASSWORD_CHANGED)))
+    else if (lowerName.equals(
+            INFO_ACCTNOTTYPE_PASSWORD_CHANGED.get()))
     {
       return PASSWORD_CHANGED;
     }
@@ -298,27 +300,13 @@
 
 
   /**
-   * Retrieves the notification type identifier for this account
-   * status notification type.
-   *
-   * @return  The notification type identifier for this account
-   *          status notification type.
-   */
-  public int getNotificationTypeID()
-  {
-    return notificationTypeID;
-  }
-
-
-
-  /**
    * Retrieves the name for this account status notification type.
    *
    * @return  The name for this account status notification type.
    */
-  public String getNotificationTypeName()
+  public Message getNotificationName()
   {
-    return getMessage(notificationTypeID);
+    return notificationName;
   }
 
 
@@ -332,7 +320,7 @@
    */
   public String toString()
   {
-    return getMessage(notificationTypeID);
+    return String.valueOf(getNotificationName());
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/AddressMask.java b/opendj-sdk/opends/src/server/org/opends/server/types/AddressMask.java
index b384deb..465e094 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/AddressMask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/AddressMask.java
@@ -25,10 +25,10 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 import org.opends.server.config.ConfigException;
-import static org.opends.server.messages.ProtocolMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.ProtocolMessages.*;
 import java.util.BitSet;
 import java.net.Inet6Address;
 import java.net.InetAddress;
@@ -135,9 +135,9 @@
         //Rule ending with '.' is invalid'
         if(ruleString.endsWith("."))
         {
-            int msgID=MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR;
-            String message = getMessage(msgID);
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_ADDRESSMASK_FORMAT_DECODE_ERROR.get();
+            throw new ConfigException(message);
         }
         else if(ruleString.startsWith("."))
         {
@@ -221,9 +221,9 @@
         String s[]=rule.split("^[0-9a-zA-z-.]+");
         if(s.length > 0)
         {
-            int msgID=MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR;
-            String message = getMessage(msgID);
-            throw new ConfigException(msgID,  message);
+            Message message =
+                ERR_ADDRESSMASK_FORMAT_DECODE_ERROR.get();
+            throw new ConfigException(message);
         }
         hostPattern=rule;
     }
@@ -242,9 +242,9 @@
         String s[]=rule.split("^[0-9a-zA-z-.*]+");
         if(s.length > 0)
         {
-            int msgID=MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR;
-            String message = getMessage(msgID);
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_ADDRESSMASK_FORMAT_DECODE_ERROR.get();
+            throw new ConfigException(message);
         }
         hostName=rule.split("\\.", -1);
     }
@@ -277,9 +277,9 @@
         try {
             //Make sure we have four parts
             if(s.length != IN4ADDRSZ) {
-                int id=MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR;
-                String message = getMessage(id);
-                throw new ConfigException(id, message);
+                Message message =
+                    ERR_ADDRESSMASK_FORMAT_DECODE_ERROR.get();
+                throw new ConfigException(message);
             }
             for(int i=0; i < IN4ADDRSZ; i++)
             {
@@ -292,18 +292,18 @@
                     //must be between 0-255
                     if((val < 0) ||  (val > 0xff))
                     {
-                        int id=MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR;
-                        String message = getMessage(id);
-                        throw new ConfigException(id, message);
+                        Message message =
+                            ERR_ADDRESSMASK_FORMAT_DECODE_ERROR.get();
+                        throw new ConfigException(message);
                     }
                     ruleMask[i] = (byte) (val & 0xff);
                 }
             }
         } catch (NumberFormatException nfex)
         {
-            int id=MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR;
-            String message = getMessage(id);
-            throw new ConfigException(id, message);
+            Message message =
+                ERR_ADDRESSMASK_FORMAT_DECODE_ERROR.get();
+            throw new ConfigException(message);
         }
     }
 
@@ -323,34 +323,33 @@
             //can only have one prefix value and a subnet string
             if((s.length  < 1) || (s.length > 2) )
             {
-                int msgID=MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR;
-                String message = getMessage(msgID);
-                throw new ConfigException(msgID, message);
+                Message message =
+                    ERR_ADDRESSMASK_FORMAT_DECODE_ERROR.get();
+                throw new ConfigException(message);
             }
             else  if(s.length == 2)
             {
                 //can't have wildcard with a prefix
                 if(s[0].indexOf('*') > -1)
                 {
-                    int msgID=MSGID_ADDRESSMASK_WILDCARD_DECODE_ERROR;
-                    String message = getMessage(msgID);
-                    throw new ConfigException(msgID, message);
+                    Message message =
+                        ERR_ADDRESSMASK_WILDCARD_DECODE_ERROR.get();
+                    throw new ConfigException(message);
                 }
                 prefix = Integer.parseInt(s[1]);
             }
             //must be between 0-maxprefix
             if((prefix < 0) || (prefix > maxPrefix))
             {
-                int msgID=MSGID_ADDRESSMASK_PREFIX_DECODE_ERROR;
-                String message = getMessage(msgID);
-                throw new ConfigException(msgID, message);
+                Message message =
+                    ERR_ADDRESSMASK_PREFIX_DECODE_ERROR.get();
+                throw new ConfigException(message);
             }
         }
         catch(NumberFormatException nfex)
         {
-            int msgID=MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR;
-            String msg = getMessage(msgID);
-            throw new ConfigException(msgID,msg);
+            Message msg = ERR_ADDRESSMASK_FORMAT_DECODE_ERROR.get();
+            throw new ConfigException(msg);
         }
         return prefix;
     }
@@ -522,9 +521,9 @@
         try {
             addr = InetAddress.getByName(s[0]);
         } catch (UnknownHostException ex) {
-            int msgID=MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR;
-            String message = getMessage(msgID);
-            throw new ConfigException(msgID, message);
+            Message message =
+                ERR_ADDRESSMASK_FORMAT_DECODE_ERROR.get();
+            throw new ConfigException(message);
         }
         if(addr instanceof Inet6Address) {
             this.ruleType=RuleType.IPv6;
@@ -536,9 +535,9 @@
            //The address might be an IPv4-compat address.
            //Throw an error if the rule has a prefix.
             if(s.length == 2) {
-                int msgID = MSGID_ADDRESSMASK_FORMAT_DECODE_ERROR;
-                String message = getMessage(msgID);
-                throw new ConfigException(msgID,  message);
+                Message message =
+                    ERR_ADDRESSMASK_FORMAT_DECODE_ERROR.get();
+                throw new ConfigException(message);
             }
             this.ruleMask=addr.getAddress();
             this.ruleType=RuleType.IPv4;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/AttributeType.java b/opendj-sdk/opends/src/server/org/opends/server/types/AttributeType.java
index c310891..ae40fd7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/AttributeType.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/AttributeType.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.Validator.*;
 
@@ -661,11 +661,10 @@
   {
     if (equalityMatchingRule == null)
     {
-      int    msgID   = MSGID_ATTR_TYPE_NORMALIZE_NO_MR;
-      String message = getMessage(msgID, String.valueOf(value),
-                                  getNameOrOID());
+      Message message = ERR_ATTR_TYPE_NORMALIZE_NO_MR.get(
+          String.valueOf(value), getNameOrOID());
       throw new DirectoryException(ResultCode.INAPPROPRIATE_MATCHING,
-                                   message, msgID);
+                                   message);
     }
 
     return equalityMatchingRule.normalizeValue(value);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/BackupDirectory.java b/opendj-sdk/opends/src/server/org/opends/server/types/BackupDirectory.java
index 392dfca..fa95982 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/BackupDirectory.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/BackupDirectory.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -41,8 +42,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -243,9 +243,9 @@
     String backupID = backupInfo.getBackupID();
     if (backups.containsKey(backupID))
     {
-      int    msgID   = MSGID_BACKUPDIRECTORY_ADD_DUPLICATE_ID;
-      String message = getMessage(msgID, backupID, path);
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_BACKUPDIRECTORY_ADD_DUPLICATE_ID.get(backupID, path);
+      throw new ConfigException(message);
     }
 
     backups.put(backupID, backupInfo);
@@ -270,19 +270,18 @@
   {
     if (! backups.containsKey(backupID))
     {
-      int    msgID   = MSGID_BACKUPDIRECTORY_NO_SUCH_BACKUP;
-      String message = getMessage(msgID, backupID, path);
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_BACKUPDIRECTORY_NO_SUCH_BACKUP.get(backupID, path);
+      throw new ConfigException(message);
     }
 
     for (BackupInfo backup : backups.values())
     {
       if (backup.dependsOn(backupID))
       {
-        int    msgID   = MSGID_BACKUPDIRECTORY_UNRESOLVED_DEPENDENCY;
-        String message = getMessage(msgID, backupID, path,
-                                    backup.getBackupID());
-        throw new ConfigException(msgID, message);
+        Message message = ERR_BACKUPDIRECTORY_UNRESOLVED_DEPENDENCY.
+            get(backupID, path, backup.getBackupID());
+        throw new ConfigException(message);
       }
     }
 
@@ -330,17 +329,15 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_BACKUPDIRECTORY_CANNOT_CREATE_DIRECTORY;
-        String message = getMessage(msgID, path,
-                                    getExceptionMessage(e));
-        throw new IOException(message);
+        Message message = ERR_BACKUPDIRECTORY_CANNOT_CREATE_DIRECTORY.
+            get(path, getExceptionMessage(e));
+        throw new IOException(message.toString());
       }
     }
     else if (! dir.isDirectory())
     {
-      int    msgID   = MSGID_BACKUPDIRECTORY_NOT_DIRECTORY;
-      String message = getMessage(msgID, path);
-      throw new IOException(message);
+      Message message = ERR_BACKUPDIRECTORY_NOT_DIRECTORY.get(path);
+      throw new IOException(message.toString());
     }
 
 
@@ -404,13 +401,11 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID =
-              MSGID_BACKUPDIRECTORY_CANNOT_DELETE_SAVED_DESCRIPTOR;
-          String message = getMessage(msgID, savedDescriptorFilePath,
-                                      getExceptionMessage(e),
-                                      newDescriptorFilePath,
-                                      descriptorFilePath);
-          throw new IOException(message);
+          Message message =
+              ERR_BACKUPDIRECTORY_CANNOT_DELETE_SAVED_DESCRIPTOR.
+                get(savedDescriptorFilePath, getExceptionMessage(e),
+                    newDescriptorFilePath, descriptorFilePath);
+          throw new IOException(message.toString());
         }
       }
 
@@ -425,13 +420,12 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID =
-            MSGID_BACKUPDIRECTORY_CANNOT_RENAME_CURRENT_DESCRIPTOR;
-        String message = getMessage(msgID, descriptorFilePath,
-                                    savedDescriptorFilePath,
-                                    getExceptionMessage(e),
-                                    newDescriptorFilePath);
-        throw new IOException(message);
+        Message message =
+            ERR_BACKUPDIRECTORY_CANNOT_RENAME_CURRENT_DESCRIPTOR.
+              get(descriptorFilePath, savedDescriptorFilePath,
+                  getExceptionMessage(e), newDescriptorFilePath,
+                  descriptorFilePath);
+        throw new IOException(message.toString());
       }
     }
 
@@ -448,11 +442,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_BACKUPDIRECTORY_CANNOT_RENAME_NEW_DESCRIPTOR;
-      String message = getMessage(msgID, newDescriptorFilePath,
-                                  descriptorFilePath,
-                                  getExceptionMessage(e));
-      throw new IOException(message);
+      Message message =
+        ERR_BACKUPDIRECTORY_CANNOT_RENAME_NEW_DESCRIPTOR.
+            get(newDescriptorFilePath, descriptorFilePath,
+                getExceptionMessage(e));
+      throw new IOException(message.toString());
     }
   }
 
@@ -486,9 +480,9 @@
     File descriptorFile = new File(descriptorFilePath);
     if (! descriptorFile.exists())
     {
-      int    msgID   = MSGID_BACKUPDIRECTORY_NO_DESCRIPTOR_FILE;
-      String message = getMessage(msgID, descriptorFilePath);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_BACKUPDIRECTORY_NO_DESCRIPTOR_FILE.get(
+          descriptorFilePath);
+      throw new ConfigException(message);
     }
 
 
@@ -499,15 +493,16 @@
     String line = reader.readLine();
     if ((line == null) || (line.length() == 0))
     {
-      int msgID = MSGID_BACKUPDIRECTORY_CANNOT_READ_CONFIG_ENTRY_DN;
-      String message = getMessage(msgID, descriptorFilePath);
-      throw new ConfigException(msgID, message);
+      Message message =
+        ERR_BACKUPDIRECTORY_CANNOT_READ_CONFIG_ENTRY_DN.
+            get(descriptorFilePath);
+      throw new ConfigException(message);
     }
     else if (! line.startsWith(PROPERTY_BACKEND_CONFIG_DN))
     {
-      int    msgID   = MSGID_BACKUPDIRECTORY_FIRST_LINE_NOT_DN;
-      String message = getMessage(msgID, descriptorFilePath, line);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_BACKUPDIRECTORY_FIRST_LINE_NOT_DN.get(
+          descriptorFilePath, line);
+      throw new ConfigException(message);
     }
 
     String dnString =
@@ -519,17 +514,15 @@
     }
     catch (DirectoryException de)
     {
-      int    msgID   = MSGID_BACKUPDIRECTORY_CANNOT_DECODE_DN;
-      String message = getMessage(msgID, dnString,
-                                  de.getErrorMessage());
-      throw new ConfigException(msgID, message, de);
+      Message message = ERR_BACKUPDIRECTORY_CANNOT_DECODE_DN.get(
+          dnString, descriptorFilePath, de.getMessageObject());
+      throw new ConfigException(message, de);
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_BACKUPDIRECTORY_CANNOT_DECODE_DN;
-      String message = getMessage(msgID, dnString,
-                                  getExceptionMessage(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_BACKUPDIRECTORY_CANNOT_DECODE_DN.get(
+          dnString, descriptorFilePath, getExceptionMessage(e));
+      throw new ConfigException(message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/BackupInfo.java b/opendj-sdk/opends/src/server/org/opends/server/types/BackupInfo.java
index 3d192a3..7aed3ba 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/BackupInfo.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/BackupInfo.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -40,8 +41,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -517,15 +517,15 @@
         int equalPos = line.indexOf('=');
         if (equalPos < 0)
         {
-          int    msgID   = MSGID_BACKUPINFO_NO_DELIMITER;
-          String message = getMessage(msgID, line, backupPath);
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_BACKUPINFO_NO_DELIMITER.get(line, backupPath);
+          throw new ConfigException(message);
         }
         else if (equalPos == 0)
         {
-          int    msgID   = MSGID_BACKUPINFO_NO_NAME;
-          String message = getMessage(msgID, line, backupPath);
-          throw new ConfigException(msgID, message);
+          Message message =
+              ERR_BACKUPINFO_NO_NAME.get(line, backupPath);
+          throw new ConfigException(message);
         }
 
         String name  = line.substring(0, equalPos);
@@ -539,10 +539,9 @@
           }
           else
           {
-            int    msgID   = MSGID_BACKUPINFO_MULTIPLE_BACKUP_IDS;
-            String message = getMessage(msgID, backupPath, backupID,
-                                        value);
-            throw new ConfigException(msgID, message);
+            Message message = ERR_BACKUPINFO_MULTIPLE_BACKUP_IDS.get(
+                backupPath, backupID, value);
+            throw new ConfigException(message);
           }
         }
         else if (name.equals(PROPERTY_BACKUP_DATE))
@@ -584,9 +583,9 @@
         }
         else
         {
-          int    msgID   = MSGID_BACKUPINFO_UNKNOWN_PROPERTY;
-          String message = getMessage(msgID, backupPath, name, value);
-          throw new ConfigException(msgID, message);
+          Message message = ERR_BACKUPINFO_UNKNOWN_PROPERTY.get(
+              backupPath, name, value);
+          throw new ConfigException(message);
         }
       }
     }
@@ -601,10 +600,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_BACKUPINFO_CANNOT_DECODE;
-      String message = getMessage(msgID, backupPath,
-                                  getExceptionMessage(e));
-      throw new ConfigException(msgID, message, e);
+      Message message = ERR_BACKUPINFO_CANNOT_DECODE.get(
+          backupPath, getExceptionMessage(e));
+      throw new ConfigException(message, e);
     }
 
 
@@ -612,16 +610,15 @@
     // specified.
     if (backupID == null)
     {
-      int    msgID   = MSGID_BACKUPINFO_NO_BACKUP_ID;
-      String message = getMessage(msgID, backupPath);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_BACKUPINFO_NO_BACKUP_ID.get(backupPath);
+      throw new ConfigException(message);
     }
 
     if (backupDate == null)
     {
-      int    msgID   = MSGID_BACKUPINFO_NO_BACKUP_DATE;
-      String message = getMessage(msgID, backupID, backupPath);
-      throw new ConfigException(msgID, message);
+      Message message =
+          ERR_BACKUPINFO_NO_BACKUP_DATE.get(backupID, backupPath);
+      throw new ConfigException(message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/CancelRequest.java b/opendj-sdk/opends/src/server/org/opends/server/types/CancelRequest.java
index 9c320c1..42189a4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/CancelRequest.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/CancelRequest.java
@@ -25,8 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
+import org.opends.messages.MessageBuilder;
+
 /**
  * This class defines a data structure that can be used to hold
  * information about a request to cancel or abandon an operation in
@@ -43,11 +46,11 @@
 
   // A message that explains the purpose for this cancellation (may be
   // included in the response to the original requestor).
-  private final String cancelReason;
+  private final Message cancelReason;
 
   // A buffer to hold a human-readable response that the server
   // provided for the result of the cancellation.
-  private StringBuilder responseMessage;
+  private MessageBuilder responseMessage;
 
 
 
@@ -62,11 +65,11 @@
    *                                  purpose for this cancellation.
    */
   public CancelRequest(boolean notifyOriginalRequestor,
-                       String cancelReason)
+                       Message cancelReason)
   {
     this.notifyOriginalRequestor = notifyOriginalRequestor;
     this.cancelReason            = cancelReason;
-    this.responseMessage         = new StringBuilder();
+    this.responseMessage         = new MessageBuilder();
   }
 
 
@@ -86,8 +89,8 @@
    *                                  of the cancellation.
    */
   public CancelRequest(boolean notifyOriginalRequestor,
-                       String cancelReason,
-                       StringBuilder responseMessage)
+                       Message cancelReason,
+                       MessageBuilder responseMessage)
   {
     this.notifyOriginalRequestor = notifyOriginalRequestor;
     this.cancelReason            = cancelReason;
@@ -118,7 +121,7 @@
    * @return  A message that explains the purpose for this
    *          cancellation.
    */
-  public final String getCancelReason()
+  public final Message getCancelReason()
   {
     return cancelReason;
   }
@@ -134,7 +137,7 @@
    *          response that the server provided for the result of this
    *          cancellation.
    */
-  public final StringBuilder getResponseMessage()
+  public final MessageBuilder getResponseMessage()
   {
     return responseMessage;
   }
@@ -148,7 +151,7 @@
    * @param  message  The message to append to the response message
    *                  buffer.
    */
-  public final void addResponseMessage(String message)
+  public final void addResponseMessage(Message message)
   {
     responseMessage.append(message);
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/CancelledOperationException.java b/opendj-sdk/opends/src/server/org/opends/server/types/CancelledOperationException.java
index a7e114d..d39fe38 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/CancelledOperationException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/CancelledOperationException.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -51,9 +52,6 @@
   // the cancellation.
   private final CancelResult cancelResult;
 
-  // The message ID for the cancel message.
-  private final int messageID;
-
 
 
   /**
@@ -68,7 +66,6 @@
 
 
     this.cancelResult = cancelResult;
-    this.messageID    = -1;
   }
 
 
@@ -81,18 +78,14 @@
    * @param  message       The message providing additional
    *                       information about the cancel processing, or
    *                       <CODE>null</CODE> if there is no message.
-   * @param  messageID     The message ID that uniquely identifies the
-   *                       cancel message, or -1 if there is no
-   *                       message.
    */
   public CancelledOperationException(CancelResult cancelResult,
-                                     String message, int messageID)
+                                     Message message)
   {
     super(message);
 
 
     this.cancelResult = cancelResult;
-    this.messageID    = messageID;
   }
 
 
@@ -110,18 +103,5 @@
   }
 
 
-
-  /**
-   * Retrieves the unique message ID for the message associated with
-   * this cancelled operation exception.
-   *
-   * @return  The unique message ID for the message associated with
-   *          this cancelled operation exception, or <CODE>-1</CODE>
-   *          if there is no message.
-   */
-  public final int getMessageID()
-  {
-    return messageID;
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/CompressedSchema.java b/opendj-sdk/opends/src/server/org/opends/server/types/CompressedSchema.java
index ec5836a..f23aef4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/CompressedSchema.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/CompressedSchema.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -49,8 +50,7 @@
 
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -387,12 +387,12 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_COMPRESSEDSCHEMA_CANNOT_WRITE_UPDATED_DATA;
-      String message = getMessage(msgID,
-                                  stackTraceToSingleLineString(e));
+      Message message =
+        ERR_COMPRESSEDSCHEMA_CANNOT_WRITE_UPDATED_DATA.
+            get(stackTraceToSingleLineString(e));
       throw new DirectoryException(
                      DirectoryServer.getServerErrorResultCode(),
-                     message, msgID, e);
+                     message, e);
     }
     finally
     {
@@ -480,12 +480,11 @@
          instance.ocDecodeMap.get(byteArray);
     if (ocMap == null)
     {
-      int    msgID   = MSGID_COMPRESSEDSCHEMA_UNKNOWN_OC_TOKEN;
-      String message = getMessage(msgID,
-                                  bytesToHex(encodedObjectClasses));
+      Message message = ERR_COMPRESSEDSCHEMA_UNKNOWN_OC_TOKEN.get(
+          bytesToHex(encodedObjectClasses));
       throw new DirectoryException(
                      DirectoryServer.getServerErrorResultCode(),
-                     message, msgID);
+                     message);
     }
     else
     {
@@ -664,11 +663,11 @@
     LinkedHashSet<String> options = instance.aoDecodeMap.get(adArray);
     if ((attrType == null) || (options == null))
     {
-      int msgID = MSGID_COMPRESSEDSCHEMA_UNRECOGNIZED_AD_TOKEN;
-      String message = getMessage(msgID, bytesToHex(adArray.array()));
+      Message message = ERR_COMPRESSEDSCHEMA_UNRECOGNIZED_AD_TOKEN.
+          get(bytesToHex(adArray.array()));
       throw new DirectoryException(
                      DirectoryServer.getServerErrorResultCode(),
-                     message, msgID);
+                     message);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/ConfigChangeResult.java b/opendj-sdk/opends/src/server/org/opends/server/types/ConfigChangeResult.java
index 64209a4..03b2433 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/ConfigChangeResult.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/ConfigChangeResult.java
@@ -25,6 +25,9 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
+
+
 
 
 
@@ -47,7 +50,7 @@
   // A set of messages describing the changes that were made, any
   // action that may be required, or any problems that were
   // encountered.
-  private ArrayList<String> messages;
+  private List<Message> messages;
 
   // Indicates whether one or more of the changes requires
   // administrative action in order to take effect.
@@ -74,7 +77,7 @@
   {
     this.resultCode          = resultCode;
     this.adminActionRequired = adminActionRequired;
-    this.messages            = new ArrayList<String>();
+    this.messages            = new ArrayList<Message>();
   }
 
 
@@ -94,7 +97,7 @@
    */
   public ConfigChangeResult(ResultCode resultCode,
                             boolean adminActionRequired,
-                            ArrayList<String> messages)
+                            List<Message> messages)
   {
     this.resultCode          = resultCode;
     this.adminActionRequired = adminActionRequired;
@@ -167,7 +170,7 @@
    * @return  The set of messages that provide explanation for the
    *          processing of the configuration changes.
    */
-  public List<String> getMessages()
+  public List<Message> getMessages()
   {
     return messages;
   }
@@ -181,7 +184,7 @@
    * @param  message  The message to add to the set of messages for
    *                  this config change result.
    */
-  public void addMessage(String message)
+  public void addMessage(Message message)
   {
     messages.add(message);
   }
@@ -219,9 +222,9 @@
 
     if (! messages.isEmpty())
     {
-      Iterator<String> iterator = messages.iterator();
+      Iterator<Message> iterator = messages.iterator();
 
-      String firstMessage = iterator.next();
+      Message firstMessage = iterator.next();
       buffer.append(firstMessage);
 
       while (iterator.hasNext())
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/CryptoManager.java b/opendj-sdk/opends/src/server/org/opends/server/types/CryptoManager.java
index 3ebf10b..ab63552 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/CryptoManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/CryptoManager.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -53,7 +54,6 @@
 import static org.opends.server.util.StaticUtils.*;
 
 
-
 /**
  * This class provides the interface to the Directory Server
  * cryptographic framework, which may be used for hashing, encryption,
@@ -129,10 +129,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      // FIXME -- Number this.
-      throw new InitializationException(-1,
-                     "Can't get preferred digest:  " +
-                     getExceptionMessage(e), e);
+      // TODO: i18n
+      throw new InitializationException(
+                     Message.raw("Can't get preferred digest:  " +
+                          getExceptionMessage(e).toString()), e);
     }
 
     try
@@ -147,10 +147,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      // FIXME -- Number this.
-      throw new InitializationException(-1,
-                     "Can't get preferred MAC provider:  " +
-                     getExceptionMessage(e), e);
+      // TODO: i18n
+      throw new InitializationException(
+                   Message.raw("Can't get preferred MAC provider:  " +
+                          getExceptionMessage(e).toString()), e);
     }
 
     try
@@ -165,10 +165,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      // FIXME -- Number this.
-      throw new InitializationException(-1,
-                     "Can't get preferred cipher:  " +
-                     getExceptionMessage(e), e);
+      // TODO: i18n
+      throw new InitializationException(
+                     Message.raw("Can't get preferred cipher:  " +
+                     getExceptionMessage(e).toString()), e);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/DITContentRule.java b/opendj-sdk/opends/src/server/org/opends/server/types/DITContentRule.java
index c3eadbd..559c983 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/DITContentRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/DITContentRule.java
@@ -40,10 +40,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
 import static org.opends.server.util.ServerConstants.*;
-import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.util.Validator.*;
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/DITStructureRule.java b/opendj-sdk/opends/src/server/org/opends/server/types/DITStructureRule.java
index ed82729..0e739ee 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/DITStructureRule.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/DITStructureRule.java
@@ -40,10 +40,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
 import static org.opends.server.util.ServerConstants.*;
-import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.util.Validator.*;
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/DN.java b/opendj-sdk/opends/src/server/org/opends/server/types/DN.java
index f0a602b..a9f2de8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/DN.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/DN.java
@@ -47,8 +47,9 @@
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.SchemaMessages.*;
+import static org.opends.messages.SchemaMessages.*;
+import org.opends.messages.Message;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -547,11 +548,10 @@
       // that would be invalid.
       if (pos >= length)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME;
-        String message = getMessage(msgID, dnString.stringValue(),
-                                    attributeName.toString());
+        Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+            dnString.stringValue(), attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -566,11 +566,10 @@
           // This means that we hit the end of the value before
           // finding a '='.  This is illegal because there is no
           // attribute-value separator.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME;
-          String message = getMessage(msgID, dnString.stringValue(),
-                                      attributeName.toString());
+          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+              dnString.stringValue(), attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -587,12 +586,11 @@
       }
       else
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_NO_EQUAL;
-        String message = getMessage(msgID, dnString.stringValue(),
-                                    attributeName.toString(),
-                                    (char) b);
+        Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.
+            get(dnString.stringValue(), attributeName.toString(),
+                (char) b);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -688,11 +686,10 @@
       {
         // This should not happen.  At any rate, it's an illegal
         // character, so throw an exception.
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_CHAR;
-        String message = getMessage(msgID, new String(dnBytes),
-                                    (char) b, pos);
+        Message message = ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(
+            new String(dnBytes), (char) b, pos);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -720,11 +717,10 @@
         // because that would be invalid.
         if (pos >= length)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME;
-          String message = getMessage(msgID, dnString.stringValue(),
-                                      attributeName.toString());
+          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+              dnString.stringValue(), attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -739,11 +735,10 @@
             // This means that we hit the end of the value before
             // finding a '='.  This is illegal because there is no
             // attribute-value separator.
-            int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME;
-            String message = getMessage(msgID, dnString.stringValue(),
-                                        attributeName.toString());
+            Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.
+                get(dnString.stringValue(), attributeName.toString());
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -760,12 +755,11 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_NO_EQUAL;
-          String message = getMessage(msgID, dnString.stringValue(),
-                                      attributeName.toString(),
-                                      (char) b);
+          Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.
+              get(dnString.stringValue(), attributeName.toString(),
+                  (char) b);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -859,11 +853,10 @@
         {
           // This should not happen.  At any rate, it's an illegal
           // character, so throw an exception.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_CHAR;
-          String message = getMessage(msgID, dnString.stringValue(),
-                                      (char) b, pos);
+          Message message = ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(
+              dnString.stringValue(), (char) b, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
@@ -935,11 +928,10 @@
       // that would be invalid.
       if (pos >= length)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME;
-        String message = getMessage(msgID, dnString,
-                                    attributeName.toString());
+        Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+            dnString, attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -954,11 +946,10 @@
           // This means that we hit the end of the value before
           // finding a '='.  This is illegal because there is no
           // attribute-value separator.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME;
-          String message = getMessage(msgID, dnString,
-                                      attributeName.toString());
+          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+              dnString, attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -975,11 +966,10 @@
       }
       else
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_NO_EQUAL;
-        String message = getMessage(msgID, dnString,
-                                    attributeName.toString(), c);
+        Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(
+            dnString, attributeName.toString(), c);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -1075,10 +1065,10 @@
       {
         // This should not happen.  At any rate, it's an illegal
         // character, so throw an exception.
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_CHAR;
-        String message = getMessage(msgID, dnString, c, pos);
+        Message message =
+            ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(dnString, c, pos);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -1106,11 +1096,10 @@
         // because that would be invalid.
         if (pos >= length)
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME;
-          String message = getMessage(msgID, dnString,
-                                      attributeName.toString());
+          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+              dnString, attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -1125,11 +1114,10 @@
             // This means that we hit the end of the value before
             // finding a '='.  This is illegal because there is no
             // attribute-value separator.
-            int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME;
-            String message = getMessage(msgID, dnString,
-                                        attributeName.toString());
+            Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.
+                get(dnString, attributeName.toString());
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else
           {
@@ -1146,11 +1134,10 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_NO_EQUAL;
-          String message = getMessage(msgID, dnString,
-                                      attributeName.toString(), c);
+          Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(
+              dnString, attributeName.toString(), c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -1244,10 +1231,10 @@
         {
           // This should not happen.  At any rate, it's an illegal
           // character, so throw an exception.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_CHAR;
-          String message = getMessage(msgID, dnString, c, pos);
+          Message message =
+              ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
@@ -1297,10 +1284,10 @@
           // 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.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_COMMA;
-          String message = getMessage(msgID, new String(dnBytes));
+          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_COMMA.get(
+              new String(dnBytes));
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
@@ -1343,11 +1330,10 @@
         case ',':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          String message = getMessage(msgID, new String(dnBytes),
-                                      (char) b, pos);
+          Message msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              new String(dnBytes), (char) b, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       msg);
 
 
         case '-':
@@ -1359,11 +1345,10 @@
           }
           else
           {
-            msgID = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DASH;
-            message = getMessage(msgID, new String(dnBytes),
-                                 (char) b);
+            msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DASH.
+                  get(new String(dnBytes));
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         msg);
           }
           break;
 
@@ -1380,11 +1365,10 @@
         case '/':
           // This is not allowed in an attribute name or any character
           // immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, new String(dnBytes),
-                               (char) b, pos);
+          msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              new String(dnBytes), (char) b, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       msg);
 
 
         case '0':
@@ -1411,11 +1395,10 @@
         case '<':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, new String(dnBytes),
-                               (char) b, pos);
+          msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              new String(dnBytes), (char) b, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       msg);
 
 
         case '=':
@@ -1429,11 +1412,10 @@
         case '@':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, new String(dnBytes),
-                               (char) b, pos);
+          msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              new String(dnBytes), (char) b, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       msg);
 
 
         case 'A':
@@ -1473,11 +1455,10 @@
         case '^':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, new String(dnBytes),
-                               (char) b, pos);
+          msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              new String(dnBytes), (char) b, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       msg);
 
 
         case '_':
@@ -1486,12 +1467,11 @@
           // name exceptions option is enabled.
           if (attributeName.length() == 0)
           {
-            msgID   =
-                 MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_UNDERSCORE;
-            message = getMessage(msgID, new String(dnBytes),
-                           ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
+            msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_UNDERSCORE.
+                  get(new String(dnBytes),
+                      ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         msg);
           }
           else if (allowExceptions)
           {
@@ -1499,11 +1479,11 @@
           }
           else
           {
-            msgID = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_UNDERSCORE_CHAR;
-            message = getMessage(msgID, new String(dnBytes),
-                           ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
+            msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_UNDERSCORE_CHAR.
+                  get(new String(dnBytes),
+                      ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         msg);
           }
           break;
 
@@ -1511,11 +1491,10 @@
         case '`':
           // This is not allowed in an attribute name or any character
           // immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, new String(dnBytes),
-                               (char) b, pos);
+          msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              new String(dnBytes), (char) b, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       msg);
 
 
         case 'a':
@@ -1552,11 +1531,10 @@
         default:
           // This is not allowed in an attribute name or any character
           // immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, new String(dnBytes),
-                               (char) b, pos);
+          msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              new String(dnBytes), (char) b, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       msg);
       }
 
 
@@ -1575,10 +1553,10 @@
     // least one character.
     if (attributeName.length() == 0)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_NO_NAME;
-      String message = getMessage(msgID, new String(dnBytes));
+      Message message =
+          ERR_ATTR_SYNTAX_DN_ATTR_NO_NAME.get(new String(dnBytes));
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
     else if (checkForOID)
     {
@@ -1651,21 +1629,19 @@
 
       if (! validOID)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD;
-        String message = getMessage(msgID, new String(dnBytes),
-                                    attributeName.toString());
+        Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD.get(
+            new String(dnBytes), attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
     else if (isDigit(attributeName.charAt(0)) && (! allowExceptions))
     {
-      int msgID = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DIGIT;
-      String message = getMessage(msgID, new String(dnBytes),
-                            attributeName.charAt(0),
-                            ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
+      Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DIGIT.
+          get(new String(dnBytes), attributeName.charAt(0),
+              ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -1715,10 +1691,10 @@
           // 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.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_END_WITH_COMMA;
-          String message = getMessage(msgID, dnString);
+          Message message =
+              ERR_ATTR_SYNTAX_DN_END_WITH_COMMA.get(dnString);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
     }
@@ -1760,10 +1736,10 @@
         case ',':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          String message = getMessage(msgID, dnString, c, pos);
+          Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case '-':
@@ -1775,10 +1751,10 @@
           }
           else
           {
-            msgID = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DASH;
-            message = getMessage(msgID, dnString, c);
+            message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DASH.
+                  get(dnString);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           break;
 
@@ -1795,10 +1771,10 @@
         case '/':
           // This is not allowed in an attribute name or any character
           // immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case '0':
@@ -1825,10 +1801,10 @@
         case '<':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case '=':
@@ -1842,10 +1818,10 @@
         case '@':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case 'A':
@@ -1885,10 +1861,10 @@
         case '^':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case '_':
@@ -1897,12 +1873,11 @@
           // name exceptions option is enabled.
           if (attributeName.length() == 0)
           {
-            msgID   =
-                 MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_UNDERSCORE;
-            message = getMessage(msgID, dnString,
-                           ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
+            message =
+                   ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_UNDERSCORE.
+                  get(dnString, ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           else if (allowExceptions)
           {
@@ -1910,11 +1885,10 @@
           }
           else
           {
-            msgID = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_UNDERSCORE_CHAR;
-            message = getMessage(msgID, dnString,
-                           ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
+            message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_UNDERSCORE_CHAR.
+                  get(dnString, ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
           break;
 
@@ -1922,10 +1896,10 @@
         case '`':
           // This is not allowed in an attribute name or any character
           // immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
 
 
         case 'a':
@@ -1962,10 +1936,10 @@
         default:
           // This is not allowed in an attribute name or any character
           // immediately following it.
-          msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR;
-          message = getMessage(msgID, dnString, c, pos);
+          message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+              dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
       }
 
 
@@ -1984,10 +1958,9 @@
     // have at least one character.
     if (attributeName.length() == 0)
     {
-      int    msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_NO_NAME;
-      String message = getMessage(msgID, dnString);
+      Message message = ERR_ATTR_SYNTAX_DN_ATTR_NO_NAME.get(dnString);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
     else if (checkForOID)
     {
@@ -2060,22 +2033,20 @@
 
       if (! validOID)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD;
-        String message = getMessage(msgID, dnString,
-                                    attributeName.toString());
+        Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD.get(
+            dnString, attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
     else if (isDigit(attributeName.charAt(0)) &&
              (! allowExceptions))
     {
-      int msgID = MSGID_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DIGIT;
-      String message = getMessage(msgID, dnString,
-                            attributeName.charAt(0),
-                            ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
+      Message 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,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -2127,10 +2098,10 @@
       StringBuilder hexString = new StringBuilder();
       if ((pos+2) > length)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT;
-        String message = getMessage(msgID, new String(dnBytes));
+        Message message = ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(
+            new String(dnBytes));
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
       for (int i=0; i < 2; i++)
@@ -2142,11 +2113,10 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT;
-          String message = getMessage(msgID, new String(dnBytes),
-                                      (char) b);
+          Message message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(
+              new String(dnBytes), (char) b);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
 
@@ -2170,20 +2140,18 @@
             }
             else
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT;
-              String message = getMessage(msgID, new String(dnBytes),
-                                          (char) b);
+              Message message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.
+                  get(new String(dnBytes), (char) b);
               throw new DirectoryException(
-                             ResultCode.INVALID_DN_SYNTAX, message,
-                             msgID);
+                             ResultCode.INVALID_DN_SYNTAX, message);
             }
           }
           else
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT;
-            String message = getMessage(msgID, new String(dnBytes));
+            Message message = ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.
+                get(new String(dnBytes));
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
         }
         else if ((b == ' ') || (b == ',') || (b == ';') || (b == '+'))
@@ -2194,11 +2162,10 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT;
-          String message = getMessage(msgID, new String(dnBytes),
-                                      (char) b);
+          Message message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(
+              new String(dnBytes), (char) b);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
 
@@ -2219,11 +2186,11 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE;
-        String message = getMessage(msgID, new String(dnBytes),
-                                    String.valueOf(e));
+        Message message =
+            ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.
+              get(new String(dnBytes), String.valueOf(e));
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -2241,10 +2208,10 @@
         {
           // We hit the end of the DN before the closing quote.
           // That's an error.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_UNMATCHED_QUOTE;
-          String message = getMessage(msgID, new String(dnBytes));
+          Message message = ERR_ATTR_SYNTAX_DN_UNMATCHED_QUOTE.get(
+              new String(dnBytes));
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         if (dnBytes[pos++] == '"')
@@ -2398,10 +2365,10 @@
       StringBuilder hexString = new StringBuilder();
       if ((pos+2) > length)
       {
-        int    msgID   = MSGID_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT;
-        String message = getMessage(msgID, dnString);
+        Message message =
+            ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(dnString);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
       for (int i=0; i < 2; i++)
@@ -2413,10 +2380,10 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT;
-          String message = getMessage(msgID, dnString, c);
+          Message message =
+              ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(dnString, c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
 
@@ -2440,19 +2407,18 @@
             }
             else
             {
-              int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT;
-              String message = getMessage(msgID, dnString, c);
+              Message message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.
+                  get(dnString, c);
               throw new DirectoryException(
-                             ResultCode.INVALID_DN_SYNTAX, message,
-                             msgID);
+                             ResultCode.INVALID_DN_SYNTAX, message);
             }
           }
           else
           {
-            int    msgID   = MSGID_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT;
-            String message = getMessage(msgID, dnString);
+            Message message =
+                ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(dnString);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                         message, msgID);
+                                         message);
           }
         }
         else if ((c == ' ') || (c == ',') || (c == ';'))
@@ -2463,10 +2429,10 @@
         }
         else
         {
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT;
-          String message = getMessage(msgID, dnString, c);
+          Message message =
+              ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(dnString, c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
       }
 
@@ -2487,11 +2453,11 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int msgID = MSGID_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE;
-        String message = getMessage(msgID, dnString,
-                                    String.valueOf(e));
+        Message message =
+            ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.
+              get(dnString, String.valueOf(e));
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -2510,10 +2476,10 @@
         {
           // We hit the end of the DN before the closing quote.
           // That's an error.
-          int    msgID   = MSGID_ATTR_SYNTAX_DN_UNMATCHED_QUOTE;
-          String message = getMessage(msgID, dnString);
+          Message message =
+              ERR_ATTR_SYNTAX_DN_UNMATCHED_QUOTE.get(dnString);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
 
         c = dnString.charAt(pos++);
@@ -2599,12 +2565,11 @@
             // value.
             if (pos >= length)
             {
-              int    msgID   =
-                   MSGID_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID;
-              String message = getMessage(msgID, dnString);
+              Message message =
+                ERR_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID.
+                    get(dnString);
               throw new DirectoryException(
-                             ResultCode.INVALID_DN_SYNTAX, message,
-                             msgID);
+                             ResultCode.INVALID_DN_SYNTAX, message);
             }
             else
             {
@@ -2616,12 +2581,11 @@
               }
               else
               {
-                int    msgID   =
-                     MSGID_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID;
-                String message = getMessage(msgID, dnString);
+                Message message =
+                  ERR_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID.
+                      get(dnString);
                 throw new DirectoryException(
-                               ResultCode.INVALID_DN_SYNTAX, message,
-                               msgID);
+                               ResultCode.INVALID_DN_SYNTAX, message);
               }
             }
           }
@@ -2719,10 +2683,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE;
-      String message = getMessage(msgID, dnString, String.valueOf(e));
+      Message message = ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.
+          get(dnString, String.valueOf(e));
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryConfig.java b/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryConfig.java
index e2c6c96..b954a38 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryConfig.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryConfig.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -50,7 +51,6 @@
 
 
 
-
 /**
  * This interface defines a set of methods that may be used by
  * third-party code to obtatin information about the core Directory
@@ -71,7 +71,7 @@
    *
    * @return  A reference to the Directory Server crypto manager.
    */
-  public static final CryptoManager getCryptoManager()
+  public static CryptoManager getCryptoManager()
   {
     return DirectoryServer.getCryptoManager();
   }
@@ -85,7 +85,7 @@
    * @return  The operating system on which the Directory Server is
    *          running.
    */
-  public static final OperatingSystem getOperatingSystem()
+  public static OperatingSystem getOperatingSystem()
   {
     return DirectoryServer.getOperatingSystem();
   }
@@ -99,7 +99,7 @@
    * @return  A reference to the Directory Server configuration
    *          handler.
    */
-  public static final ConfigHandler getConfigHandler()
+  public static ConfigHandler getConfigHandler()
   {
     return DirectoryServer.getConfigHandler();
   }
@@ -118,7 +118,7 @@
    * @throws  ConfigException  If a problem occurs while trying to
    *                           retrieve the requested entry.
    */
-  public static final ConfigEntry getConfigEntry(DN entryDN)
+  public static ConfigEntry getConfigEntry(DN entryDN)
          throws ConfigException
   {
     return DirectoryServer.getConfigEntry(entryDN);
@@ -133,7 +133,7 @@
    * @return  The path to the root directory for this instance of the
    *          Directory Server.
   */
-  public static final String getServerRoot()
+  public static String getServerRoot()
   {
     return DirectoryServer.getServerRoot();
   }
@@ -147,7 +147,7 @@
    * @return  The time that the Directory Server was started, in
    *          milliseconds since the epoch.
    */
-  public static final long getStartTime()
+  public static long getStartTime()
   {
     return DirectoryServer.getStartTime();
   }
@@ -161,7 +161,7 @@
    * @return  The time that the Directory Server was started,
    *          formatted in UTC.
    */
-  public static final String getStartTimeUTC()
+  public static String getStartTimeUTC()
   {
     return DirectoryServer.getStartTimeUTC();
   }
@@ -173,7 +173,7 @@
    *
    * @return  A reference to the Directory Server schema.
    */
-  public static final Schema getSchema()
+  public static Schema getSchema()
   {
     return DirectoryServer.getSchema();
   }
@@ -207,7 +207,7 @@
    * @return  The requested matching rule, or <CODE>null</CODE> if no
    *          such matching rule has been defined in the server.
    */
-  public static final MatchingRule getMatchingRule(String lowerName)
+  public static MatchingRule getMatchingRule(String lowerName)
   {
     return DirectoryServer.getMatchingRule(lowerName);
   }
@@ -225,7 +225,7 @@
    *          <CODE>null</CODE> if no such matching rule has been
    *          defined in the server.
    */
-  public static final ApproximateMatchingRule
+  public static ApproximateMatchingRule
        getApproximateMatchingRule(String lowerName)
   {
     return DirectoryServer.getApproximateMatchingRule(lowerName);
@@ -244,7 +244,7 @@
    *          <CODE>null</CODE> if no such matching rule has been
    *          defined in the server.
    */
-  public static final EqualityMatchingRule
+  public static EqualityMatchingRule
        getEqualityMatchingRule(String lowerName)
   {
     return DirectoryServer.getEqualityMatchingRule(lowerName);
@@ -263,7 +263,7 @@
    *          <CODE>null</CODE> if no such matching rule has been
    *          defined in the server.
    */
-  public static final OrderingMatchingRule
+  public static OrderingMatchingRule
        getOrderingMatchingRule(String lowerName)
   {
     return DirectoryServer.getOrderingMatchingRule(lowerName);
@@ -282,7 +282,7 @@
    *          <CODE>null</CODE> if no such matching rule has been
    *          defined in the server.
    */
-  public static final SubstringMatchingRule
+  public static SubstringMatchingRule
        getSubstringMatchingRule(String lowerName)
   {
     return DirectoryServer.getSubstringMatchingRule(lowerName);
@@ -301,7 +301,7 @@
    * @return  The set of objectclasses defined in the Directory
    *          Server.
    */
-  public static final Map<String,ObjectClass> getObjectClasses()
+  public static Map<String,ObjectClass> getObjectClasses()
   {
     return DirectoryServer.getObjectClasses();
   }
@@ -324,7 +324,7 @@
    *          the server schema and a default class should not be
    *          returned.
    */
-  public static final ObjectClass
+  public static ObjectClass
        getObjectClass(String lowerName, boolean returnDefault)
   {
     return DirectoryServer.getObjectClass(lowerName, returnDefault);
@@ -339,7 +339,7 @@
    *
    * @return  The "top" objectClass.
    */
-  public static final ObjectClass getTopObjectClass()
+  public static ObjectClass getTopObjectClass()
   {
     return DirectoryServer.getTopObjectClass();
   }
@@ -357,7 +357,7 @@
    * @return The set of attribute type definitions that have been
    *         defined in the Directory Server.
    */
-  public static final Map<String,AttributeType> getAttributeTypes()
+  public static Map<String,AttributeType> getAttributeTypes()
   {
     return DirectoryServer.getAttributeTypes();
   }
@@ -380,7 +380,7 @@
    *          the server schema and a default type should not be
    *          returned.
    */
-  public static final AttributeType
+  public static AttributeType
        getAttributeType(String lowerName, boolean returnDefault)
   {
     return DirectoryServer.getAttributeType(lowerName, returnDefault);
@@ -393,7 +393,7 @@
    *
    * @return  The attribute type for the "objectClass" attribute.
    */
-  public static final AttributeType getObjectClassAttributeType()
+  public static AttributeType getObjectClassAttributeType()
   {
     return DirectoryServer.getObjectClassAttributeType();
   }
@@ -409,7 +409,7 @@
    * @return  The set of attribute syntaxes defined in the Directory
    *          Server.
    */
-  public static final Map<String,AttributeSyntax>
+  public static Map<String,AttributeSyntax>
        getAttributeSyntaxes()
   {
     return DirectoryServer.getAttributeSyntaxes();
@@ -430,7 +430,7 @@
    *          indicated that the default is acceptable, or
    *          <CODE>null</CODE> otherwise.
    */
-  public static final AttributeSyntax
+  public static AttributeSyntax
        getAttributeSyntax(String oid, boolean allowDefault)
   {
     return DirectoryServer.getAttributeSyntax(oid, allowDefault);
@@ -445,7 +445,7 @@
    * @return  The default attribute syntax that should be used for
    *          attributes that are not defined in the server schema.
    */
-  public static final AttributeSyntax getDefaultAttributeSyntax()
+  public static AttributeSyntax getDefaultAttributeSyntax()
   {
     return DirectoryServer.getDefaultAttributeSyntax();
   }
@@ -461,7 +461,7 @@
    *          attributes that are not defined in the server schema and
    *          are meant to store binary values.
    */
-  public static final AttributeSyntax getDefaultBinarySyntax()
+  public static AttributeSyntax getDefaultBinarySyntax()
   {
     return DirectoryServer.getDefaultBinarySyntax();
   }
@@ -477,7 +477,7 @@
    *          attributes that are not defined in the server schema and
    *          are meant to store Boolean values.
    */
-  public static final AttributeSyntax getDefaultBooleanSyntax()
+  public static AttributeSyntax getDefaultBooleanSyntax()
   {
     return DirectoryServer.getDefaultBooleanSyntax();
   }
@@ -493,7 +493,7 @@
    *          attributes that are not defined in the server schema and
    *          are meant to store DN values.
    */
-  public static final AttributeSyntax getDefaultDNSyntax()
+  public static AttributeSyntax getDefaultDNSyntax()
   {
     return DirectoryServer.getDefaultDNSyntax();
   }
@@ -509,7 +509,7 @@
    *          attributes that are not defined in the server schema and
    *          are meant to store integer values.
    */
-  public static final AttributeSyntax getDefaultIntegerSyntax()
+  public static AttributeSyntax getDefaultIntegerSyntax()
   {
     return DirectoryServer.getDefaultIntegerSyntax();
   }
@@ -525,7 +525,7 @@
    *          attributes that are not defined in the server schema and
    *          are meant to store string values.
    */
-  public static final AttributeSyntax getDefaultStringSyntax()
+  public static AttributeSyntax getDefaultStringSyntax()
   {
     return DirectoryServer.getDefaultStringSyntax();
   }
@@ -541,7 +541,7 @@
    * @return  The set of matching rule uses defined in the Directory
    *          Server.
    */
-  public static final Map<MatchingRule,MatchingRuleUse>
+  public static Map<MatchingRule,MatchingRuleUse>
        getMatchingRuleUses()
   {
     return DirectoryServer.getMatchingRuleUses();
@@ -559,7 +559,7 @@
    * @return  The matching rule use for the provided matching rule, or
    *          <CODE>null</CODE> if none is defined.
    */
-  public static final MatchingRuleUse
+  public static MatchingRuleUse
        getMatchingRuleUse(MatchingRule matchingRule)
   {
     return DirectoryServer.getMatchingRuleUse(matchingRule);
@@ -576,7 +576,7 @@
    * @return  The set of DIT content rules defined in the Directory
    *          Server.
    */
-  public static final Map<ObjectClass,DITContentRule>
+  public static Map<ObjectClass,DITContentRule>
        getDITContentRules()
   {
     return DirectoryServer.getDITContentRules();
@@ -594,7 +594,7 @@
    * @return  The requested DIT content rule, or <CODE>null</CODE> if
    *          no such rule is defined in the schema.
    */
-  public static final DITContentRule
+  public static DITContentRule
        getDITContentRule(ObjectClass objectClass)
   {
     return DirectoryServer.getDITContentRule(objectClass);
@@ -611,7 +611,7 @@
    * @return  The set of DIT structure rules defined in the Directory
    *          Server.
    */
-  public static final Map<NameForm,DITStructureRule>
+  public static Map<NameForm,DITStructureRule>
        getDITStructureRules()
   {
     return DirectoryServer.getDITStructureRules();
@@ -629,7 +629,7 @@
    * @return  The requested DIT structure rule, or <CODE>null</CODE>
    *          if no such rule is defined.
    */
-  public static final DITStructureRule getDITStructureRule(int ruleID)
+  public static DITStructureRule getDITStructureRule(int ruleID)
   {
     return DirectoryServer.getDITStructureRule(ruleID);
   }
@@ -646,7 +646,7 @@
    * @return  The requested DIT structure rule, or <CODE>null</CODE>
    *          if no such rule is defined.
    */
-  public static final DITStructureRule
+  public static DITStructureRule
        getDITStructureRule(NameForm nameForm)
   {
     return DirectoryServer.getDITStructureRule(nameForm);
@@ -662,7 +662,7 @@
    *
    * @return  The set of name forms defined in the Directory Server.
    */
-  public static final Map<ObjectClass,NameForm> getNameForms()
+  public static Map<ObjectClass,NameForm> getNameForms()
   {
     return DirectoryServer.getNameForms();
   }
@@ -679,7 +679,7 @@
    * @return  The requested name form, or <CODE>null</CODE> if no such
    *          name form is defined in the schema.
    */
-  public static final NameForm getNameForm(ObjectClass objectClass)
+  public static NameForm getNameForm(ObjectClass objectClass)
   {
     return DirectoryServer.getNameForm(objectClass);
   }
@@ -696,7 +696,7 @@
    * @return  The requested name form, or <CODE>null</CODE> if no such
    *          name form is defined in the schema.
    */
-  public static final NameForm getNameForm(String lowerName)
+  public static NameForm getNameForm(String lowerName)
   {
     return DirectoryServer.getNameForm(lowerName);
   }
@@ -709,7 +709,7 @@
    *
    * @param  component  The invokable component to register.
    */
-  public static final void registerInvokableComponent(
+  public static void registerInvokableComponent(
                                 InvokableComponent component)
   {
     DirectoryServer.registerInvokableComponent(component);
@@ -723,7 +723,7 @@
    *
    * @param  component  The invokable component to deregister.
    */
-  public static final void deregisterInvokableComponent(
+  public static void deregisterInvokableComponent(
                                 InvokableComponent component)
   {
     DirectoryServer.deregisterInvokableComponent(component);
@@ -736,7 +736,7 @@
    *
    * @param  alertGenerator  The alert generator to register.
    */
-  public static final void registerAlertGenerator(
+  public static void registerAlertGenerator(
                                 AlertGenerator alertGenerator)
   {
     DirectoryServer.registerAlertGenerator(alertGenerator);
@@ -750,7 +750,7 @@
    *
    * @param  alertGenerator  The alert generator to deregister.
    */
-  public static final void deregisterAlertGenerator(
+  public static void deregisterAlertGenerator(
                                 AlertGenerator alertGenerator)
   {
     DirectoryServer.deregisterAlertGenerator(alertGenerator);
@@ -763,19 +763,17 @@
    *
    * @param  generator     The alert generator that created the alert.
    * @param  alertType     The alert type name for this alert.
-   * @param  alertID       The alert ID that uniquely identifies the
-   *                       type of alert.
    * @param  alertMessage  A message (possibly <CODE>null</CODE>) that
    *                       can provide more information about this
    *                       alert.
    */
-  public static final void
+  public static void
        sendAlertNotification(AlertGenerator generator,
-                             String alertType, int alertID,
-                             String alertMessage)
+                             String alertType,
+                             Message alertMessage)
   {
     DirectoryServer.sendAlertNotification(generator, alertType,
-                                          alertID, alertMessage);
+            alertMessage);
   }
 
 
@@ -787,7 +785,7 @@
    * @return  The result code that should be used when the Directory
    *          Server encounters an internal server error.
    */
-  public static final ResultCode getServerErrorResultCode()
+  public static ResultCode getServerErrorResultCode()
   {
     return DirectoryServer.getServerErrorResultCode();
   }
@@ -808,7 +806,7 @@
    * @throws  DirectoryException  If a problem occurs while attempting
    *                              to retrieve the entry.
    */
-  public static final Entry getEntry(DN entryDN)
+  public static Entry getEntry(DN entryDN)
          throws DirectoryException
   {
     return DirectoryServer.getEntry(entryDN);
@@ -830,7 +828,7 @@
    * @throws  DirectoryException  If a problem occurs while attempting
    *                              to make the determination.
    */
-  public static final boolean entryExists(DN entryDN)
+  public static boolean entryExists(DN entryDN)
          throws DirectoryException
   {
     return DirectoryServer.entryExists(entryDN);
@@ -845,7 +843,7 @@
    * @return  The set of OIDS for the supported controls registered
    *          with the Directory Server.
    */
-  public static final Set<String> getSupportedControls()
+  public static Set<String> getSupportedControls()
   {
     return DirectoryServer.getSupportedControls();
   }
@@ -863,7 +861,7 @@
    *          with the server as a supported control, or
    *          <CODE>false</CODE> if not.
    */
-  public static final boolean isSupportedControl(String controlOID)
+  public static boolean isSupportedControl(String controlOID)
   {
     return DirectoryServer.isSupportedControl(controlOID);
   }
@@ -878,7 +876,7 @@
    * @param  controlOID  The OID of the control to register as a
    *                     supported control.
    */
-  public static final void registerSupportedControl(String controlOID)
+  public static void registerSupportedControl(String controlOID)
   {
     DirectoryServer.registerSupportedControl(controlOID);
   }
@@ -893,7 +891,7 @@
    * @param  controlOID  The OID of the control to deregister as a
    *                     supported control.
    */
-  public static final void
+  public static void
        deregisterSupportedControl(String controlOID)
   {
     DirectoryServer.deregisterSupportedControl(controlOID);
@@ -908,7 +906,7 @@
    * @return  The set of OIDs for the supported features registered
    *          with the Directory Server.
    */
-  public static final Set<String> getSupportedFeatures()
+  public static Set<String> getSupportedFeatures()
   {
     return DirectoryServer.getSupportedFeatures();
   }
@@ -926,7 +924,7 @@
    *          with the server as a supported feature, or
    *          <CODE>false</CODE> if not.
    */
-  public static final boolean isSupportedFeature(String featureOID)
+  public static boolean isSupportedFeature(String featureOID)
   {
     return DirectoryServer.isSupportedFeature(featureOID);
   }
@@ -941,7 +939,7 @@
    * @param  featureOID  The OID of the feature to register as a
    *                     supported feature.
    */
-  public static final void registerSupportedFeature(String featureOID)
+  public static void registerSupportedFeature(String featureOID)
   {
     DirectoryServer.registerSupportedFeature(featureOID);
   }
@@ -956,7 +954,7 @@
    * @param  featureOID  The OID of the feature to deregister as a
    *                     supported feature.
    */
-  public static final void
+  public static void
        deregisterSupportedFeature(String featureOID)
   {
     DirectoryServer.deregisterSupportedFeature(featureOID);
@@ -974,7 +972,7 @@
    * @return  The set of extended operations that may be processed by
    *          the Directory Server.
    */
-  public static final Map<String,ExtendedOperationHandler>
+  public static Map<String,ExtendedOperationHandler>
                      getSupportedExtensions()
   {
     return DirectoryServer.getSupportedExtensions();
@@ -991,7 +989,7 @@
    * @return  The handler for the specified extended operation, or
    *          <CODE>null</CODE> if there is none.
    */
-  public static final ExtendedOperationHandler
+  public static ExtendedOperationHandler
        getExtendedOperationHandler(String oid)
   {
     return DirectoryServer.getExtendedOperationHandler(oid);
@@ -1007,7 +1005,7 @@
    * @param  handler  The extended operation handler to register with
    *                  the Directory Server.
    */
-  public static final void registerSupportedExtension(String oid,
+  public static void registerSupportedExtension(String oid,
                           ExtendedOperationHandler handler)
   {
     DirectoryServer.registerSupportedExtension(oid, handler);
@@ -1021,7 +1019,7 @@
    *
    * @param  oid  The OID for the extended operation to deregister.
    */
-  public static final void deregisterSupportedExtension(String oid)
+  public static void deregisterSupportedExtension(String oid)
   {
     DirectoryServer.deregisterSupportedExtension(oid);
   }
@@ -1037,7 +1035,7 @@
    * @return  The set of SASL mechanisms that are supported by the
    *          Directory Server.
    */
-  public static final Map<String,SASLMechanismHandler>
+  public static Map<String,SASLMechanismHandler>
                      getSupportedSASLMechanisms()
   {
     return DirectoryServer.getSupportedSASLMechanisms();
@@ -1053,7 +1051,7 @@
    * @return  The handler for the specified SASL mechanism, or
    *          <CODE>null</CODE> if there is none.
    */
-  public static final SASLMechanismHandler
+  public static SASLMechanismHandler
        getSASLMechanismHandler(String name)
   {
     return DirectoryServer.getSASLMechanismHandler(name);
@@ -1069,7 +1067,7 @@
    * @param  handler  The SASL mechanism handler to register with the
    *                  Directory Server.
    */
-  public static final void
+  public static void
        registerSASLMechanismHandler(String name,
                                     SASLMechanismHandler handler)
   {
@@ -1084,7 +1082,7 @@
    *
    * @param  name  The name of the SASL mechanism to be deregistered.
    */
-  public static final void deregisterSASLMechanismHandler(String name)
+  public static void deregisterSASLMechanismHandler(String name)
   {
     DirectoryServer.deregisterSASLMechanismHandler(name);
   }
@@ -1099,7 +1097,7 @@
    * @param  changeListener  The change notification listener to
    *                         register with the Directory Server.
    */
-  public static final void
+  public static void
        registerChangeNotificationListener(
             ChangeNotificationListener changeListener)
   {
@@ -1117,7 +1115,7 @@
    * @param  changeListener  The change notification listener to
    *                         deregister with the Directory Server.
    */
-  public static final void deregisterChangeNotificationListener(
+  public static void deregisterChangeNotificationListener(
                           ChangeNotificationListener changeListener)
   {
     DirectoryServer.deregisterChangeNotificationListener(
@@ -1133,7 +1131,7 @@
    * @param  listener  The shutdown listener to register with the
    *                   Directory Server.
    */
-  public static final void
+  public static void
        registerShutdownListener(ServerShutdownListener listener)
   {
     DirectoryServer.registerShutdownListener(listener);
@@ -1148,7 +1146,7 @@
    * @param  listener  The shutdown listener to deregister with the
    *                   Directory Server.
    */
-  public static final void
+  public static void
        deregisterShutdownListener(ServerShutdownListener listener)
   {
     DirectoryServer.deregisterShutdownListener(listener);
@@ -1161,7 +1159,7 @@
    *
    * @return  The full version string for the Directory Server.
    */
-  public static final String getVersionString()
+  public static String getVersionString()
   {
     return DirectoryServer.getVersionString();
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryEnvironmentConfig.java b/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryEnvironmentConfig.java
index f992e48..b04cd80 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryEnvironmentConfig.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryEnvironmentConfig.java
@@ -44,8 +44,7 @@
 import org.opends.server.extensions.ConfigFileHandler;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -186,9 +185,8 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     if (value == null)
@@ -254,17 +252,15 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     if ((! serverRoot.exists()) || (! serverRoot.isDirectory()))
     {
-      int    msgID   = MSGID_DIRCFG_INVALID_SERVER_ROOT;
-      String message = getMessage(msgID,
-                                  serverRoot.getAbsolutePath());
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_INVALID_SERVER_ROOT.get(
+                      serverRoot.getAbsolutePath()));
     }
 
     String serverRootPath;
@@ -347,17 +343,15 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     if ((! configFile.exists()) || (! configFile.isFile()))
     {
-      int    msgID   = MSGID_DIRCFG_INVALID_CONFIG_FILE;
-      String message = getMessage(msgID,
-                                  configFile.getAbsolutePath());
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_INVALID_CONFIG_FILE.get(
+                      configFile.getAbsolutePath()));
     }
 
     String configFilePath;
@@ -438,16 +432,15 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     if (! (ConfigHandler.class.isAssignableFrom(configClass)))
     {
-      int    msgID   = MSGID_DIRCFG_INVALID_CONFIG_CLASS;
-      String message = getMessage(msgID, configClass.getName());
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_INVALID_CONFIG_CLASS.get(
+                      configClass.getName()));
     }
 
     String oldClassName = setProperty(PROPERTY_CONFIG_CLASS,
@@ -527,18 +520,16 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     if ((! schemaDirectory.exists()) ||
         (! schemaDirectory.isDirectory()))
     {
-      int    msgID   = MSGID_DIRCFG_INVALID_SCHEMA_DIRECTORY;
-      String message = getMessage(msgID,
-                                  schemaDirectory.getAbsolutePath());
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_INVALID_SCHEMA_DIRECTORY.get(
+                      schemaDirectory.getAbsolutePath()));
     }
 
     String schemaDirectoryPath;
@@ -620,19 +611,17 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     if (lockDirectory.exists())
     {
       if (! lockDirectory.isDirectory())
       {
-        int    msgID   = MSGID_DIRCFG_INVALID_LOCK_DIRECTORY;
-        String message = getMessage(msgID,
-                                    lockDirectory.getAbsolutePath());
-        throw new InitializationException(msgID, message);
+        throw new InitializationException(
+                ERR_DIRCFG_INVALID_LOCK_DIRECTORY.get(
+                        lockDirectory.getAbsolutePath()));
       }
     }
     else
@@ -640,10 +629,9 @@
       File parentFile = lockDirectory.getParentFile();
       if (! (parentFile.exists() && parentFile.isDirectory()))
       {
-        int    msgID   = MSGID_DIRCFG_INVALID_LOCK_DIRECTORY;
-        String message = getMessage(msgID,
-                                    lockDirectory.getAbsolutePath());
-        throw new InitializationException(msgID, message);
+        throw new InitializationException(
+                ERR_DIRCFG_INVALID_LOCK_DIRECTORY.get(
+                        lockDirectory.getAbsolutePath()));
       }
     }
 
@@ -716,9 +704,8 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     String oldDisableStr =
@@ -780,9 +767,8 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     String oldForceDaemonStr =
@@ -844,9 +830,8 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     String oldDisableStr = setProperty(PROPERTY_DISABLE_EXEC,
@@ -923,16 +908,15 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     if (concurrencyLevel <= 0)
     {
-        int    msgID   = MSGID_DIRCFG_INVALID_CONCURRENCY_LEVEL;
-        String message = getMessage(msgID, concurrencyLevel);
-        throw new InitializationException(msgID, message);
+        throw new InitializationException(
+                ERR_DIRCFG_INVALID_CONCURRENCY_LEVEL.get(
+                        concurrencyLevel));
     }
 
     String concurrencyStr =
@@ -1010,16 +994,15 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     if (lockTableSize <= 0)
     {
-        int    msgID   = MSGID_DIRCFG_INVALID_LOCK_TABLE_SIZE;
-        String message = getMessage(msgID, lockTableSize);
-        throw new InitializationException(msgID, message);
+        throw new InitializationException(
+                ERR_DIRCFG_INVALID_LOCK_TABLE_SIZE.get(
+                        lockTableSize));
     }
 
     String concurrencyStr =
@@ -1078,9 +1061,8 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     accessLoggers.add(accessLogger);
@@ -1122,9 +1104,8 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     errorLoggers.add(errorLogger);
@@ -1166,9 +1147,8 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_DIRCFG_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_DIRCFG_SERVER_ALREADY_RUNNING.get());
     }
 
     debugLoggers.add(debugLogger);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryException.java b/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryException.java
index 638c694..d3249e3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/DirectoryException.java
@@ -25,6 +25,9 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
+
+
 
 
 
@@ -53,18 +56,12 @@
   // The matched DN for this directory exception.
   private final DN matchedDN;
 
-  // The message ID for the error message.
-  private final int errorMessageID;
-
   // The set of referral URLs for this directory exception.
   private final List<String> referralURLs;
 
   // The result code for this directory exception.
   private final ResultCode resultCode;
 
-  // The error message for this directory exception.
-  private final String errorMessage;
-
 
 
   /**
@@ -74,17 +71,14 @@
    *                         exception.
    * @param  errorMessage    The error message for this directory
    *                         exception.
-   * @param  errorMessageID  The unique ID for the error message.
    */
   public DirectoryException(ResultCode resultCode,
-                            String errorMessage, int errorMessageID)
+                            Message errorMessage)
   {
     super(errorMessage);
 
 
     this.resultCode     = resultCode;
-    this.errorMessage   = errorMessage;
-    this.errorMessageID = errorMessageID;
     this.matchedDN      = null;
     this.referralURLs   = null;
   }
@@ -98,25 +92,43 @@
    *                         exception.
    * @param  errorMessage    The error message for this directory
    *                         exception.
-   * @param  errorMessageID  The unique ID for the error message.
    * @param  cause           The exception that was caught to trigger
    *                         this directory exception.
    */
   public DirectoryException(ResultCode resultCode,
-                            String errorMessage, int errorMessageID,
+                            Message errorMessage,
                             Throwable cause)
   {
     super(errorMessage, cause);
 
 
     this.resultCode     = resultCode;
-    this.errorMessage   = errorMessage;
-    this.errorMessageID = errorMessageID;
     this.matchedDN      = null;
     this.referralURLs   = null;
   }
 
 
+  /**
+   * Creates a new directory exception with the provided information.
+   *
+   * @param  resultCode     The result code for this directory
+   *                        exception.
+   * @param  cause          The exception that was caught to trigger
+   *                        this directory exception.  The message of
+   *                        this exception will be set to that of this
+   *                        parameter.
+   */
+  public DirectoryException(ResultCode resultCode,
+                            OpenDsException cause)
+  {
+    super(cause.getMessageObject(), cause);
+
+
+    this.resultCode     = resultCode;
+    this.matchedDN      = null;
+    this.referralURLs   = null;
+  }
+
 
   /**
    * Creates a new directory exception with the provided information.
@@ -125,22 +137,19 @@
    *                         exception.
    * @param  errorMessage    The error message for this directory
    *                         exception.
-   * @param  errorMessageID  The unique ID for the error message.
    * @param  matchedDN       The matched DN for this directory
    *                         exception.
    * @param  cause           The exception that was caught to trigger
    *                         this directory exception.
    */
   public DirectoryException(ResultCode resultCode,
-                            String errorMessage, int errorMessageID,
+                            Message errorMessage,
                             DN matchedDN, Throwable cause)
   {
     super(errorMessage, cause);
 
 
     this.resultCode     = resultCode;
-    this.errorMessage   = errorMessage;
-    this.errorMessageID = errorMessageID;
     this.matchedDN      = matchedDN;
     this.referralURLs   = null;
   }
@@ -153,8 +162,6 @@
    * @param  resultCode      The result code for this directory
    *                         exception.
    * @param  errorMessage    The error message for this directory
-   *                         exception.
-   * @param  errorMessageID  The unique ID for the error message.
    * @param  matchedDN       The matched DN for this directory
    *                         exception.
    * @param  referralURLs    The set of referral URLs for this
@@ -163,7 +170,7 @@
    *                         this directory exception.
    */
   public DirectoryException(ResultCode resultCode,
-                            String errorMessage, int errorMessageID,
+                            Message errorMessage,
                             DN matchedDN, List<String> referralURLs,
                             Throwable cause)
   {
@@ -171,8 +178,6 @@
 
 
     this.resultCode     = resultCode;
-    this.errorMessage   = errorMessage;
-    this.errorMessageID = errorMessageID;
     this.matchedDN      = matchedDN;
     this.referralURLs   = referralURLs;
   }
@@ -192,32 +197,6 @@
 
 
   /**
-   * Retrieves the error message for this directory exception.
-   *
-   * @return  The error message for this directory exception.
-   */
-  public final String getErrorMessage()
-  {
-    return errorMessage;
-  }
-
-
-
-  /**
-   * Retrieves the unique ID for the error message associated with
-   * this directory exception.
-   *
-   * @return  The unique ID for the error message associated with this
-   *          directory exception.
-   */
-  public final int getMessageID()
-  {
-    return errorMessageID;
-  }
-
-
-
-  /**
    * Retrieves the matched DN for this directory exception.
    *
    * @return  The matched DN for this directory exception, or
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/DisconnectReason.java b/opendj-sdk/opends/src/server/org/opends/server/types/DisconnectReason.java
index 83dfb98..2909625 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/DisconnectReason.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/DisconnectReason.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 
 
 
@@ -43,7 +43,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because the client unbind from the server.
    */
-  UNBIND(MSGID_DISCONNECT_DUE_TO_UNBIND),
+  UNBIND(
+          INFO_DISCONNECT_DUE_TO_UNBIND.get()),
 
 
 
@@ -51,7 +52,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because the client disconnected without unbinding.
    */
-  CLIENT_DISCONNECT(MSGID_DISCONNECT_DUE_TO_CLIENT_CLOSURE),
+  CLIENT_DISCONNECT(
+          INFO_DISCONNECT_DUE_TO_CLIENT_CLOSURE.get()),
 
 
 
@@ -59,7 +61,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because the client connection was rejected.
    */
-  CONNECTION_REJECTED(MSGID_DISCONNECT_DUE_TO_REJECTED_CLIENT),
+  CONNECTION_REJECTED(
+          INFO_DISCONNECT_DUE_TO_REJECTED_CLIENT.get()),
 
 
 
@@ -67,7 +70,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because of an I/O error.
    */
-  IO_ERROR(MSGID_DISCONNECT_DUE_TO_IO_ERROR),
+  IO_ERROR(
+          INFO_DISCONNECT_DUE_TO_IO_ERROR.get()),
 
 
 
@@ -75,7 +79,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because of a protocol error.
    */
-  PROTOCOL_ERROR(MSGID_DISCONNECT_DUE_TO_PROTOCOL_ERROR),
+  PROTOCOL_ERROR(
+          INFO_DISCONNECT_DUE_TO_PROTOCOL_ERROR.get()),
 
 
 
@@ -83,7 +88,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because the Directory Server shut down.
    */
-  SERVER_SHUTDOWN(MSGID_DISCONNECT_DUE_TO_SERVER_SHUTDOWN),
+  SERVER_SHUTDOWN(
+          INFO_DISCONNECT_DUE_TO_SERVER_SHUTDOWN.get()),
 
 
 
@@ -91,7 +97,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because an administrator terminated the connection.
    */
-  ADMIN_DISCONNECT(MSGID_DISCONNECT_BY_ADMINISTRATOR),
+  ADMIN_DISCONNECT(
+          INFO_DISCONNECT_BY_ADMINISTRATOR.get()),
 
 
 
@@ -99,7 +106,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because of a security problem.
    */
-  SECURITY_PROBLEM(MSGID_DISCONNECT_DUE_TO_SECURITY_PROBLEM),
+  SECURITY_PROBLEM(
+          INFO_DISCONNECT_DUE_TO_SECURITY_PROBLEM.get()),
 
 
 
@@ -107,7 +115,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because the maximum allowed request size was exceeded.
    */
-  MAX_REQUEST_SIZE_EXCEEDED(MSGID_DISCONNECT_DUE_TO_MAX_REQUEST_SIZE),
+  MAX_REQUEST_SIZE_EXCEEDED(
+          INFO_DISCONNECT_DUE_TO_MAX_REQUEST_SIZE.get()),
 
 
 
@@ -115,7 +124,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because an administrative limit was exceeded.
    */
-  ADMIN_LIMIT_EXCEEDED(MSGID_DISCONNECT_DUE_TO_ADMIN_LIMIT),
+  ADMIN_LIMIT_EXCEEDED(
+          INFO_DISCONNECT_DUE_TO_ADMIN_LIMIT.get()),
 
 
 
@@ -123,7 +133,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because the idle time limit was exceeded.
    */
-  IDLE_TIME_LIMIT_EXCEEDED(MSGID_DISCONNECT_DUE_TO_IDLE_TIME_LIMIT),
+  IDLE_TIME_LIMIT_EXCEEDED(
+          INFO_DISCONNECT_DUE_TO_IDLE_TIME_LIMIT.get()),
 
 
 
@@ -131,7 +142,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because of an I/O timeout.
    */
-  IO_TIMEOUT(MSGID_DISCONNECT_DUE_TO_IO_TIMEOUT),
+  IO_TIMEOUT(
+          INFO_DISCONNECT_DUE_TO_IO_TIMEOUT.get()),
 
 
 
@@ -139,7 +151,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed because of an internal error within the server.
    */
-  SERVER_ERROR(MSGID_DISCONNECT_DUE_TO_SERVER_ERROR),
+  SERVER_ERROR(
+          INFO_DISCONNECT_DUE_TO_SERVER_ERROR.get()),
 
 
 
@@ -147,7 +160,8 @@
    * The disconnect reason that indicates that the client connection
    * was closed by a plugin.
    */
-  CLOSED_BY_PLUGIN(MSGID_DISCONNECT_BY_PLUGIN),
+  CLOSED_BY_PLUGIN(
+          INFO_DISCONNECT_BY_PLUGIN.get()),
 
 
 
@@ -155,40 +169,24 @@
    * The disconnect reason that indicates that the client connection
    * was closed for some other reason.
    */
-  OTHER(MSGID_DISCONNECT_OTHER);
+  OTHER(
+          INFO_DISCONNECT_OTHER.get());
 
 
 
-  // The unique ID for this disconnect reason.
-  private int closureID;
-
-  // The short human-readable disconnect reason.
-  private String closureString;
-
+  // The disconnect reason.
+  private Message message;
 
 
   /**
    * Creates a new disconnect reason element with the provided closure
-   * ID.
+   * message.
    *
-   * @param  closureID  The unique ID for this disconnect reason.
+   * @param  message  The message for this disconnect reason.
    */
-  private DisconnectReason(int closureID)
+  private DisconnectReason(Message message)
   {
-    this.closureID     = closureID;
-    this.closureString = null;
-  }
-
-
-
-  /**
-   * Retrieves the unique ID for this disconnect reason.
-   *
-   * @return  The unique ID for this disconnect reason.
-   */
-  public int getClosureID()
-  {
-    return closureID;
+    this.message = message;
   }
 
 
@@ -198,14 +196,9 @@
    *
    * @return  The human-readable disconnect reason.
    */
-  public String getClosureString()
+  public Message getClosureMessage()
   {
-    if (closureString == null)
-    {
-      closureString = getMessage(closureID);
-    }
-
-    return closureString;
+    return message;
   }
 
 
@@ -217,7 +210,7 @@
    */
   public String toString()
   {
-    return getClosureString();
+    return message.toString();
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/Entry.java b/opendj-sdk/opends/src/server/org/opends/server/types/Entry.java
index c97a3a9..0639e1c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/Entry.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/Entry.java
@@ -25,7 +25,8 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import java.io.BufferedWriter;
@@ -56,9 +57,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.CoreMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.util.LDIFWriter.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -332,10 +332,10 @@
       ObjectClass oc = DirectoryServer.getObjectClass(lowerName);
       if (oc == null)
       {
-        int    msgID   = MSGID_ENTRY_ADD_UNKNOWN_OC;
-        String message = getMessage(msgID, name, String.valueOf(dn));
+        Message message =
+            ERR_ENTRY_ADD_UNKNOWN_OC.get(name, String.valueOf(dn));
         throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION,
-                                     message, msgID);
+                                     message);
       }
 
       ocMap.put(oc, name);
@@ -384,10 +384,10 @@
     ObjectClass oc = DirectoryServer.getObjectClass(lowerName, true);
     if (objectClasses.containsKey(oc))
     {
-      int    msgID   = MSGID_ENTRY_ADD_DUPLICATE_OC;
-      String message = getMessage(msgID, name, String.valueOf(dn));
+      Message message =
+          ERR_ENTRY_ADD_DUPLICATE_OC.get(name, String.valueOf(dn));
       throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION,
-                                   message, msgID);
+                                   message);
     }
 
     objectClasses.put(oc, name);
@@ -411,11 +411,10 @@
 
     if (objectClasses.containsKey(oc))
     {
-      int    msgID   = MSGID_ENTRY_ADD_DUPLICATE_OC;
-      String message = getMessage(msgID, oc.getNameOrOID(),
-                                  String.valueOf(dn));
+      Message message = ERR_ENTRY_ADD_DUPLICATE_OC.get(
+          oc.getNameOrOID(), String.valueOf(dn));
       throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION,
-                                   message, msgID);
+                                   message);
     }
 
     objectClasses.put(oc, oc.getNameOrOID());
@@ -469,26 +468,26 @@
       ObjectClass oc = DirectoryServer.getObjectClass(lowerName);
       if (oc == null)
       {
-        int    msgID   = MSGID_ENTRY_ADD_UNKNOWN_OC;
-        String message = getMessage(msgID, name, String.valueOf(dn));
+        Message message =
+            ERR_ENTRY_ADD_UNKNOWN_OC.get(name, String.valueOf(dn));
         throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION,
-                                     message, msgID);
+                                     message);
       }
 
       if (objectClasses.containsKey(oc))
       {
-        int    msgID   = MSGID_ENTRY_ADD_DUPLICATE_OC;
-        String message = getMessage(msgID, name, String.valueOf(dn));
+        Message message =
+            ERR_ENTRY_ADD_DUPLICATE_OC.get(name, String.valueOf(dn));
         throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION,
-                                     message, msgID);
+                                     message);
       }
 
       if (oc.isObsolete())
       {
-        int    msgID   = MSGID_ENTRY_ADD_OBSOLETE_OC;
-        String message = getMessage(msgID, name, String.valueOf(dn));
+        Message message =
+            ERR_ENTRY_ADD_OBSOLETE_OC.get(name, String.valueOf(dn));
         throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION,
-                                     message, msgID);
+                                     message);
       }
 
       tmpOCMap.put(oc, name);
@@ -2104,11 +2103,11 @@
           {
             if (objectClasses.containsKey(oc))
             {
-              int    msgID   = MSGID_ENTRY_DUPLICATE_VALUES;
-              String message = getMessage(msgID, a.getName());
+              Message message =
+                  ERR_ENTRY_DUPLICATE_VALUES.get(a.getName());
               throw new DirectoryException(
                              ResultCode.ATTRIBUTE_OR_VALUE_EXISTS,
-                             message, msgID);
+                             message);
             }
             else
             {
@@ -2122,11 +2121,10 @@
           {
             if (objectClasses.remove(oc) == null)
             {
-              int    msgID   = MSGID_ENTRY_NO_SUCH_VALUE;
-              String message = getMessage(msgID, a.getName());
+              Message message =
+                  ERR_ENTRY_NO_SUCH_VALUE.get(a.getName());
               throw new DirectoryException(
-                             ResultCode.NO_SUCH_ATTRIBUTE, message,
-                             msgID);
+                             ResultCode.NO_SUCH_ATTRIBUTE, message);
             }
           }
           break;
@@ -2136,19 +2134,16 @@
           break;
 
         case INCREMENT:
-          int msgID = MSGID_ENTRY_OC_INCREMENT_NOT_SUPPORTED;
-          String message = getMessage(msgID);
+          Message message =
+              ERR_ENTRY_OC_INCREMENT_NOT_SUPPORTED.get();
           throw new DirectoryException(
-                         ResultCode.UNWILLING_TO_PERFORM, message,
-                         msgID);
+                         ResultCode.UNWILLING_TO_PERFORM, message);
 
         default:
-          msgID   = MSGID_ENTRY_UNKNOWN_MODIFICATION_TYPE;
-          message = getMessage(msgID,
-                         String.valueOf(mod.getModificationType()));
+          message = ERR_ENTRY_UNKNOWN_MODIFICATION_TYPE.get(
+              String.valueOf(mod.getModificationType()));
           throw new DirectoryException(
-                         ResultCode.UNWILLING_TO_PERFORM, message,
-                         msgID);
+                         ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
       return;
@@ -2162,11 +2157,11 @@
         addAttribute(a, duplicateValues);
         if (! duplicateValues.isEmpty())
         {
-          int    msgID   = MSGID_ENTRY_DUPLICATE_VALUES;
-          String message = getMessage(msgID, a.getName());
+          Message message =
+              ERR_ENTRY_DUPLICATE_VALUES.get(a.getName());
           throw new DirectoryException(
                          ResultCode.ATTRIBUTE_OR_VALUE_EXISTS,
-                         message, msgID);
+                         message);
         }
         break;
 
@@ -2176,10 +2171,9 @@
         removeAttribute(a, missingValues);
         if (! missingValues.isEmpty())
         {
-          int    msgID   = MSGID_ENTRY_NO_SUCH_VALUE;
-          String message = getMessage(msgID, a.getName());
+          Message message = ERR_ENTRY_NO_SUCH_VALUE.get(a.getName());
           throw new DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE,
-                                       message, msgID);
+                                       message);
         }
         break;
 
@@ -2199,46 +2193,43 @@
         List<Attribute> attrList = getAttribute(t);
         if ((attrList == null) || attrList.isEmpty())
         {
-          int    msgID   = MSGID_ENTRY_INCREMENT_NO_SUCH_ATTRIBUTE;
-          String message = getMessage(msgID, a.getName());
+          Message message =
+              ERR_ENTRY_INCREMENT_NO_SUCH_ATTRIBUTE.get(a.getName());
           throw new DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE,
-                                       message, msgID);
+                                       message);
         }
         else if (attrList.size() != 1)
         {
-          int    msgID   = MSGID_ENTRY_INCREMENT_MULTIPLE_VALUES;
-          String message = getMessage(msgID, a.getName());
+          Message message =
+              ERR_ENTRY_INCREMENT_MULTIPLE_VALUES.get(a.getName());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         LinkedHashSet<AttributeValue> values =
              attrList.get(0).getValues();
         if (values.isEmpty())
         {
-          int    msgID   = MSGID_ENTRY_INCREMENT_NO_SUCH_ATTRIBUTE;
-          String message = getMessage(msgID, a.getName());
+          Message message =
+              ERR_ENTRY_INCREMENT_NO_SUCH_ATTRIBUTE.get(a.getName());
           throw new DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE,
-                                       message, msgID);
+                                       message);
         }
         else if (values.size() > 1)
         {
-          int    msgID   = MSGID_ENTRY_INCREMENT_MULTIPLE_VALUES;
-          String message = getMessage(msgID, a.getName());
+          Message message =
+              ERR_ENTRY_INCREMENT_MULTIPLE_VALUES.get(a.getName());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         LinkedHashSet<AttributeValue> newValues = a.getValues();
         if (newValues.size() != 1)
         {
-          int msgID = MSGID_ENTRY_INCREMENT_INVALID_VALUE_COUNT;
-          String message = getMessage(msgID);
+          Message message = ERR_ENTRY_INCREMENT_INVALID_VALUE_COUNT.
+              get(a.getName());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         long newValue;
@@ -2254,11 +2245,10 @@
         }
         catch (NumberFormatException nfe)
         {
-          int msgID = MSGID_ENTRY_INCREMENT_CANNOT_PARSE_AS_INT;
-          String message = getMessage(msgID);
+          Message message = ERR_ENTRY_INCREMENT_CANNOT_PARSE_AS_INT.
+              get(a.getName());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         values.clear();
@@ -2266,12 +2256,10 @@
         break;
 
       default:
-        int    msgID   = MSGID_ENTRY_UNKNOWN_MODIFICATION_TYPE;
-        String message =
-             getMessage(msgID,
-                        String.valueOf(mod.getModificationType()));
+        Message message = ERR_ENTRY_UNKNOWN_MODIFICATION_TYPE.get(
+            String.valueOf(mod.getModificationType()));
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                     message, msgID);
+                                     message);
     }
   }
 
@@ -2353,7 +2341,7 @@
                                   boolean parentProvided,
                                   boolean validateNameForms,
                                   boolean validateStructureRules,
-                                  StringBuilder invalidReason)
+                                  MessageBuilder 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.
@@ -2372,10 +2360,11 @@
         }
         else if (! structuralClass.isDescendantOf(oc))
         {
-          int msgID = MSGID_ENTRY_SCHEMA_MULTIPLE_STRUCTURAL_CLASSES;
-          String message = getMessage(msgID, String.valueOf(dn),
-                                structuralClass.getNameOrOID(),
-                                oc.getNameOrOID());
+          Message message =
+                  ERR_ENTRY_SCHEMA_MULTIPLE_STRUCTURAL_CLASSES.get(
+                    String.valueOf(dn),
+                    structuralClass.getNameOrOID(),
+                    oc.getNameOrOID());
 
           if (structuralPolicy == AcceptRejectWarn.REJECT)
           {
@@ -2386,9 +2375,7 @@
           {
             if (! multipleOCErrorLogged)
             {
-              logError(ErrorLogCategory.SCHEMA,
-                       ErrorLogSeverity.SEVERE_WARNING, message,
-                       msgID);
+              logError(message);
               multipleOCErrorLogged = true;
             }
           }
@@ -2401,8 +2388,8 @@
     DITStructureRule ditStructureRule = null;
     if (structuralClass == null)
     {
-      int msgID = MSGID_ENTRY_SCHEMA_NO_STRUCTURAL_CLASS;
-      String message = getMessage(msgID, String.valueOf(dn));
+      Message message = ERR_ENTRY_SCHEMA_NO_STRUCTURAL_CLASS.get(
+              String.valueOf(dn));
 
       if (structuralPolicy == AcceptRejectWarn.REJECT)
       {
@@ -2411,8 +2398,7 @@
       }
       else if (structuralPolicy == AcceptRejectWarn.WARN)
       {
-        logError(ErrorLogCategory.SCHEMA,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        logError(message);
       }
     }
     else
@@ -2453,9 +2439,9 @@
     {
       if (DirectoryServer.getObjectClass(o.getOID()) == null)
       {
-        int    msgID   = MSGID_ENTRY_SCHEMA_UNKNOWN_OC;
-        String message = getMessage(msgID, String.valueOf(dn), o
-                                    .getNameOrOID());
+        Message message = ERR_ENTRY_SCHEMA_UNKNOWN_OC.get(
+                String.valueOf(dn), o
+                .getNameOrOID());
         invalidReason.append(message);
         return false;
       }
@@ -2464,10 +2450,11 @@
           (ditContentRule != null) &&
           (! ditContentRule.getAuxiliaryClasses().contains(o)))
       {
-        int msgID = MSGID_ENTRY_SCHEMA_DISALLOWED_AUXILIARY_CLASS;
-        String message = getMessage(msgID, String.valueOf(dn),
-                                    o.getNameOrOID(),
-                                    ditContentRule.getName());
+        Message message =
+                ERR_ENTRY_SCHEMA_DISALLOWED_AUXILIARY_CLASS.get(
+                  String.valueOf(dn),
+                  o.getNameOrOID(),
+                  ditContentRule.getName());
         if (structuralPolicy == AcceptRejectWarn.REJECT)
         {
           invalidReason.append(message);
@@ -2475,8 +2462,7 @@
         }
         else if (structuralPolicy == AcceptRejectWarn.WARN)
         {
-          logError(ErrorLogCategory.SCHEMA,
-                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          logError(message);
         }
       }
 
@@ -2486,10 +2472,11 @@
                operationalAttributes.containsKey(t) ||
                t.isObjectClassType()))
         {
-          int msgID = MSGID_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_OC;
-          String message = getMessage(msgID, String.valueOf(dn),
-                                      t.getNameOrOID(),
-                                      o.getNameOrOID());
+          Message message =
+                  ERR_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_OC.get(
+                    String.valueOf(dn),
+                    t.getNameOrOID(),
+                    o.getNameOrOID());
           invalidReason.append(message);
           return false;
         }
@@ -2522,9 +2509,10 @@
 
       if (! found)
       {
-        int msgID = MSGID_ENTRY_SCHEMA_DISALLOWED_USER_ATTR_FOR_OC;
-        String message = getMessage(msgID, String.valueOf(dn),
-                                    t.getNameOrOID());
+        Message message =
+                ERR_ENTRY_SCHEMA_DISALLOWED_USER_ATTR_FOR_OC.get(
+                  String.valueOf(dn),
+                  t.getNameOrOID());
         invalidReason.append(message);
         return false;
       }
@@ -2537,18 +2525,18 @@
           LinkedHashSet<AttributeValue> values = a.getValues();
           if (values.isEmpty())
           {
-            int    msgID   = MSGID_ENTRY_SCHEMA_ATTR_NO_VALUES;
-            String message = getMessage(msgID, String.valueOf(dn),
-                                        t.getNameOrOID());
+            Message message = ERR_ENTRY_SCHEMA_ATTR_NO_VALUES.get(
+                    String.valueOf(dn),
+                    t.getNameOrOID());
 
             invalidReason.append(message);
             return false;
           }
           else if (t.isSingleValue() && (values.size() != 1))
           {
-            int    msgID   = MSGID_ENTRY_SCHEMA_ATTR_SINGLE_VALUED;
-            String message = getMessage(msgID, String.valueOf(dn),
-                                        t.getNameOrOID());
+            Message message = ERR_ENTRY_SCHEMA_ATTR_SINGLE_VALUED.get(
+                    String.valueOf(dn),
+                    t.getNameOrOID());
 
             invalidReason.append(message);
             return false;
@@ -2571,9 +2559,10 @@
           {
             if (a.getValues().size() > 1)
             {
-              int    msgID   = MSGID_ENTRY_SCHEMA_ATTR_SINGLE_VALUED;
-              String message = getMessage(msgID, String.valueOf(dn),
-                                          t.getNameOrOID());
+              Message message =
+                      ERR_ENTRY_SCHEMA_ATTR_SINGLE_VALUED.get(
+                        String.valueOf(dn),
+                        t.getNameOrOID());
 
               invalidReason.append(message);
               return false;
@@ -2596,10 +2585,11 @@
         {
           if (! rdn.hasAttributeType(t))
           {
-            int msgID = MSGID_ENTRY_SCHEMA_RDN_MISSING_REQUIRED_ATTR;
-            String message = getMessage(msgID, String.valueOf(dn),
-                                        t.getNameOrOID(),
-                                        nameForm.getNameOrOID());
+            Message message =
+                    ERR_ENTRY_SCHEMA_RDN_MISSING_REQUIRED_ATTR.get(
+                      String.valueOf(dn),
+                      t.getNameOrOID(),
+                      nameForm.getNameOrOID());
 
             if (structuralPolicy == AcceptRejectWarn.REJECT)
             {
@@ -2608,9 +2598,7 @@
             }
             else if (structuralPolicy == AcceptRejectWarn.WARN)
             {
-              logError(ErrorLogCategory.SCHEMA,
-                       ErrorLogSeverity.SEVERE_WARNING, message,
-                       msgID);
+              logError(message);
             }
           }
         }
@@ -2622,10 +2610,11 @@
           AttributeType t = rdn.getAttributeType(i);
           if (! nameForm.isRequiredOrOptional(t))
           {
-            int    msgID   = MSGID_ENTRY_SCHEMA_RDN_DISALLOWED_ATTR;
-            String message = getMessage(msgID, String.valueOf(dn),
-                                        t.getNameOrOID(),
-                                        nameForm.getNameOrOID());
+            Message message =
+                    ERR_ENTRY_SCHEMA_RDN_DISALLOWED_ATTR.get(
+                      String.valueOf(dn),
+                      t.getNameOrOID(),
+                      nameForm.getNameOrOID());
 
             if (structuralPolicy == AcceptRejectWarn.REJECT)
             {
@@ -2634,9 +2623,7 @@
             }
             else if (structuralPolicy == AcceptRejectWarn.WARN)
             {
-              logError(ErrorLogCategory.SCHEMA,
-                       ErrorLogSeverity.SEVERE_WARNING, message,
-                       msgID);
+              logError(message);
             }
           }
         }
@@ -2655,11 +2642,11 @@
                operationalAttributes.containsKey(t) ||
                t.isObjectClassType()))
         {
-          int msgID =
-               MSGID_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_DCR;
-          String message = getMessage(msgID, String.valueOf(dn),
-                                      t.getNameOrOID(),
-                                      ditContentRule.getName());
+          Message message =
+                  ERR_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_DCR.get(
+                    String.valueOf(dn),
+                    t.getNameOrOID(),
+                    ditContentRule.getName());
 
           if (structuralPolicy == AcceptRejectWarn.REJECT)
           {
@@ -2668,8 +2655,7 @@
           }
           else if (structuralPolicy == AcceptRejectWarn.WARN)
           {
-            logError(ErrorLogCategory.SCHEMA,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            logError(message);
           }
         }
       }
@@ -2680,10 +2666,11 @@
         if (userAttributes.containsKey(t) ||
             operationalAttributes.containsKey(t))
         {
-          int    msgID   = MSGID_ENTRY_SCHEMA_PROHIBITED_ATTR_FOR_DCR;
-          String message = getMessage(msgID, String.valueOf(dn),
-                                      t.getNameOrOID(),
-                                      ditContentRule.getName());
+          Message message =
+                  ERR_ENTRY_SCHEMA_PROHIBITED_ATTR_FOR_DCR.get(
+                    String.valueOf(dn),
+                    t.getNameOrOID(),
+                    ditContentRule.getName());
 
           if (structuralPolicy == AcceptRejectWarn.REJECT)
           {
@@ -2692,8 +2679,7 @@
           }
           else if (structuralPolicy == AcceptRejectWarn.WARN)
           {
-            logError(ErrorLogCategory.SCHEMA,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            logError(message);
           }
         }
       }
@@ -2739,9 +2725,9 @@
 
           if (lock == null)
           {
-            int msgID = MSGID_ENTRY_SCHEMA_DSR_COULD_NOT_LOCK_PARENT;
-            String message = getMessage(msgID, String.valueOf(dn),
-                                  String.valueOf(parentDN));
+            Message message =
+                    ERR_ENTRY_SCHEMA_DSR_COULD_NOT_LOCK_PARENT.get(
+                      String.valueOf(dn), String.valueOf(parentDN));
 
             if (structuralPolicy == AcceptRejectWarn.REJECT)
             {
@@ -2750,9 +2736,7 @@
             }
             else if (structuralPolicy == AcceptRejectWarn.WARN)
             {
-              logError(ErrorLogCategory.SCHEMA,
-                       ErrorLogSeverity.SEVERE_WARNING, message,
-                       msgID);
+              logError(message);
             }
           }
           else
@@ -2762,10 +2746,10 @@
               parentEntry = DirectoryServer.getEntry(parentDN);
               if (parentEntry == null)
               {
-                int msgID = MSGID_ENTRY_SCHEMA_DSR_NO_PARENT_ENTRY;
-                String message =
-                     getMessage(msgID, String.valueOf(dn),
-                                String.valueOf(parentDN));
+                Message message =
+                     ERR_ENTRY_SCHEMA_DSR_NO_PARENT_ENTRY.get(
+                             String.valueOf(dn),
+                             String.valueOf(parentDN));
 
                 if (structuralPolicy == AcceptRejectWarn.REJECT)
                 {
@@ -2774,9 +2758,7 @@
                 }
                 else if (structuralPolicy == AcceptRejectWarn.WARN)
                 {
-                  logError(ErrorLogCategory.SCHEMA,
-                           ErrorLogSeverity.SEVERE_WARNING, message,
-                           msgID);
+                  logError(message);
                 }
               }
               else
@@ -2800,11 +2782,11 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int    msgID   = MSGID_ENTRY_SCHEMA_COULD_NOT_CHECK_DSR;
-              String message =
-                   getMessage(msgID, String.valueOf(dn),
-                              ditStructureRule.getNameOrRuleID(),
-                              getExceptionMessage(e));
+              Message message =
+                   ERR_ENTRY_SCHEMA_COULD_NOT_CHECK_DSR.get(
+                           String.valueOf(dn),
+                           ditStructureRule.getNameOrRuleID(),
+                           getExceptionMessage(e));
 
               if (structuralPolicy == AcceptRejectWarn.REJECT)
               {
@@ -2813,9 +2795,7 @@
               }
               else if (structuralPolicy == AcceptRejectWarn.WARN)
               {
-                logError(ErrorLogCategory.SCHEMA,
-                         ErrorLogSeverity.SEVERE_WARNING, message,
-                         msgID);
+                logError(message);
               }
             }
             finally
@@ -2857,9 +2837,10 @@
 
           if (lock == null)
           {
-            int msgID = MSGID_ENTRY_SCHEMA_DSR_COULD_NOT_LOCK_PARENT;
-            String message = getMessage(msgID, String.valueOf(dn),
-                                  String.valueOf(parentDN));
+            Message message =
+                    ERR_ENTRY_SCHEMA_DSR_COULD_NOT_LOCK_PARENT.get(
+                      String.valueOf(dn),
+                      String.valueOf(parentDN));
 
             if (structuralPolicy == AcceptRejectWarn.REJECT)
             {
@@ -2868,9 +2849,7 @@
             }
             else if (structuralPolicy == AcceptRejectWarn.WARN)
             {
-              logError(ErrorLogCategory.SCHEMA,
-                       ErrorLogSeverity.SEVERE_WARNING, message,
-                       msgID);
+              logError(message);
             }
           }
           else
@@ -2880,10 +2859,10 @@
               parentEntry = DirectoryServer.getEntry(parentDN);
               if (parentEntry == null)
               {
-                int msgID = MSGID_ENTRY_SCHEMA_DSR_NO_PARENT_ENTRY;
-                String message =
-                     getMessage(msgID, String.valueOf(dn),
-                                String.valueOf(parentDN));
+                Message message =
+                     ERR_ENTRY_SCHEMA_DSR_NO_PARENT_ENTRY.get(
+                             String.valueOf(dn),
+                             String.valueOf(parentDN));
 
                 if (structuralPolicy == AcceptRejectWarn.REJECT)
                 {
@@ -2892,9 +2871,7 @@
                 }
                 else if (structuralPolicy == AcceptRejectWarn.WARN)
                 {
-                  logError(ErrorLogCategory.SCHEMA,
-                           ErrorLogSeverity.SEVERE_WARNING, message,
-                           msgID);
+                  logError(message);
                 }
               }
               else
@@ -2911,11 +2888,10 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              int msgID =
-                   MSGID_ENTRY_SCHEMA_COULD_NOT_CHECK_PARENT_DSR;
-              String message =
-                   getMessage(msgID, String.valueOf(dn),
-                              getExceptionMessage(e));
+              Message message =
+                   ERR_ENTRY_SCHEMA_COULD_NOT_CHECK_PARENT_DSR.get(
+                           String.valueOf(dn),
+                           getExceptionMessage(e));
 
               if (structuralPolicy == AcceptRejectWarn.REJECT)
               {
@@ -2924,9 +2900,7 @@
               }
               else if (structuralPolicy == AcceptRejectWarn.WARN)
               {
-                logError(ErrorLogCategory.SCHEMA,
-                         ErrorLogSeverity.SEVERE_WARNING, message,
-                         msgID);
+                logError(message);
               }
             }
             finally
@@ -2941,9 +2915,9 @@
       {
         if (parentStructuralClass == null)
         {
-          int    msgID   = MSGID_ENTRY_SCHEMA_DSR_NO_PARENT_OC;
-          String message = getMessage(msgID, String.valueOf(dn),
-                                String.valueOf(parentEntry.getDN()));
+          Message message = ERR_ENTRY_SCHEMA_DSR_NO_PARENT_OC.get(
+                  String.valueOf(dn),
+                  String.valueOf(parentEntry.getDN()));
 
           if (structuralPolicy == AcceptRejectWarn.REJECT)
           {
@@ -2952,8 +2926,7 @@
           }
           else if (structuralPolicy == AcceptRejectWarn.WARN)
           {
-            logError(ErrorLogCategory.SCHEMA,
-                     ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+            logError(message);
           }
         }
         else
@@ -2966,10 +2939,10 @@
                  DirectoryServer.getDITStructureRule(parentNF);
             if ((parentDSR != null) && (! parentDSR.isObsolete()))
             {
-              int    msgID   = MSGID_ENTRY_SCHEMA_VIOLATES_PARENT_DSR;
-              String message =
-                   getMessage(msgID, String.valueOf(dn),
-                              String.valueOf(parentEntry.getDN()));
+              Message message =
+                   ERR_ENTRY_SCHEMA_VIOLATES_PARENT_DSR.get(
+                           String.valueOf(dn),
+                           String.valueOf(parentEntry.getDN()));
 
               if (structuralPolicy == AcceptRejectWarn.REJECT)
               {
@@ -2978,9 +2951,7 @@
               }
               else if (structuralPolicy == AcceptRejectWarn.WARN)
               {
-                logError(ErrorLogCategory.SCHEMA,
-                         ErrorLogSeverity.SEVERE_WARNING, message,
-                         msgID);
+                logError(message);
               }
             }
           }
@@ -3017,14 +2988,14 @@
   private boolean validateDITStructureRule(DITStructureRule dsr,
                        ObjectClass structuralClass, Entry parentEntry,
                        AcceptRejectWarn structuralPolicy,
-                       StringBuilder invalidReason)
+                       MessageBuilder invalidReason)
   {
     ObjectClass oc = parentEntry.getStructuralObjectClass();
     if (oc == null)
     {
-      int    msgID   = MSGID_ENTRY_SCHEMA_DSR_NO_PARENT_OC;
-      String message = getMessage(msgID, String.valueOf(dn),
-                            String.valueOf(parentEntry.getDN()));
+      Message message = ERR_ENTRY_SCHEMA_DSR_NO_PARENT_OC.get(
+              String.valueOf(dn),
+              String.valueOf(parentEntry.getDN()));
 
       if (structuralPolicy == AcceptRejectWarn.REJECT)
       {
@@ -3033,9 +3004,7 @@
       }
       else if (structuralPolicy == AcceptRejectWarn.WARN)
       {
-        logError(ErrorLogCategory.SCHEMA,
-                 ErrorLogSeverity.SEVERE_WARNING, message,
-                 msgID);
+        logError(message);
       }
     }
 
@@ -3050,11 +3019,12 @@
 
     if (! matchFound)
     {
-      int msgID = MSGID_ENTRY_SCHEMA_DSR_DISALLOWED_SUPERIOR_OC;
-      String message = getMessage(msgID, String.valueOf(dn),
-                            dsr.getNameOrRuleID(),
-                            structuralClass.getNameOrOID(),
-                            oc.getNameOrOID());
+      Message message =
+              ERR_ENTRY_SCHEMA_DSR_DISALLOWED_SUPERIOR_OC.get(
+                String.valueOf(dn),
+                dsr.getNameOrRuleID(),
+                structuralClass.getNameOrOID(),
+                oc.getNameOrOID());
 
       if (structuralPolicy == AcceptRejectWarn.REJECT)
       {
@@ -3063,8 +3033,7 @@
       }
       else if (structuralPolicy == AcceptRejectWarn.WARN)
       {
-        logError(ErrorLogCategory.SCHEMA,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        logError(message);
       }
     }
 
@@ -4424,12 +4393,11 @@
       case 0x02:
         return decodeV2(entryBytes);
       default:
-        int    msgID   = MSGID_ENTRY_DECODE_UNRECOGNIZED_VERSION;
-        String message = getMessage(msgID,
-                                    byteToHex(entryBytes[0]));
+        Message message = ERR_ENTRY_DECODE_UNRECOGNIZED_VERSION.get(
+            byteToHex(entryBytes[0]));
         throw new DirectoryException(
                        DirectoryServer.getServerErrorResultCode(),
-                       message, msgID);
+                       message);
     }
   }
 
@@ -4456,12 +4424,11 @@
       // we recognize, then that's an error.
       if (entryBytes[0] != 0x01)
       {
-        int    msgID   = MSGID_ENTRY_DECODE_UNRECOGNIZED_VERSION;
-        String message = getMessage(msgID,
-                                    byteToHex(entryBytes[0]));
+        Message message = ERR_ENTRY_DECODE_UNRECOGNIZED_VERSION.get(
+            byteToHex(entryBytes[0]));
         throw new DirectoryException(
                        DirectoryServer.getServerErrorResultCode(),
-                       message, msgID);
+                       message);
       }
 
 
@@ -4792,11 +4759,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_ENTRY_DECODE_EXCEPTION;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message =
+          ERR_ENTRY_DECODE_EXCEPTION.get(getExceptionMessage(e));
       throw new DirectoryException(
                      DirectoryServer.getServerErrorResultCode(),
-                     message, msgID, e);
+                     message, e);
     }
   }
 
@@ -4823,12 +4790,11 @@
       // we recognize, then that's an error.
       if (entryBytes[0] != 0x02)
       {
-        int    msgID   = MSGID_ENTRY_DECODE_UNRECOGNIZED_VERSION;
-        String message = getMessage(msgID,
-                                    byteToHex(entryBytes[0]));
+        Message message = ERR_ENTRY_DECODE_UNRECOGNIZED_VERSION.get(
+            byteToHex(entryBytes[0]));
         throw new DirectoryException(
                        DirectoryServer.getServerErrorResultCode(),
-                       message, msgID);
+                       message);
       }
 
 
@@ -5276,11 +5242,11 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_ENTRY_DECODE_EXCEPTION;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message =
+          ERR_ENTRY_DECODE_EXCEPTION.get(getExceptionMessage(e));
       throw new DirectoryException(
                      DirectoryServer.getServerErrorResultCode(),
-                     message, msgID, e);
+                     message, e);
     }
   }
 
@@ -5406,10 +5372,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_EXPORT;
-      String message = getMessage(msgID, String.valueOf(dn),
-                                  String.valueOf(e));
-      throw new LDIFException(msgID, message, e);
+      Message message =
+          ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_EXPORT.
+            get(String.valueOf(dn), String.valueOf(e));
+      throw new LDIFException(message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/EntryEncodeConfig.java b/opendj-sdk/opends/src/server/org/opends/server/types/EntryEncodeConfig.java
index 7709210..8fe7d7d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/EntryEncodeConfig.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/EntryEncodeConfig.java
@@ -25,16 +25,13 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
 import org.opends.server.core.DirectoryServer;
 
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-
-
-
+import static org.opends.messages.CoreMessages.*;
 /**
  * This class defines a data structure that contains configuration
  * information about how an entry should be encoded.
@@ -220,11 +217,10 @@
   {
     if (length != 1)
     {
-      int    msgID   = MSGID_ENTRYENCODECFG_INVALID_LENGTH;
-      String message = getMessage(msgID);
+      Message message = ERR_ENTRYENCODECFG_INVALID_LENGTH.get();
       throw new DirectoryException(
                      DirectoryServer.getServerErrorResultCode(),
-                     message, msgID);
+                     message);
     }
 
     boolean excludeDN = false;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/ErrorLogCategory.java b/opendj-sdk/opends/src/server/org/opends/server/types/ErrorLogCategory.java
deleted file mode 100644
index 98e5258..0000000
--- a/opendj-sdk/opends/src/server/org/opends/server/types/ErrorLogCategory.java
+++ /dev/null
@@ -1,281 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.types;
-
-
-
-import java.util.HashMap;
-
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.ServerConstants.*;
-
-
-
-/**
- * This enumeration defines the set of possible categories that may be
- * used when writing a message to an error logger.
- */
-public enum ErrorLogCategory
-{
-  /**
-   * The error log category that will be used for messages related to
-   * access control processing.
-   */
-  ACCESS_CONTROL(MSGID_ERROR_CATEGORY_ACCESS_CONTROL),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * backend processing.
-   */
-  BACKEND(MSGID_ERROR_CATEGORY_BACKEND),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * configuration processing.
-   */
-  CONFIGURATION(MSGID_ERROR_CATEGORY_CONFIG),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * connection handling.
-   */
-  CONNECTION_HANDLING(MSGID_ERROR_CATEGORY_CONNECTION_HANDLING),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * core server processing.
-   */
-  CORE_SERVER(MSGID_ERROR_CATEGORY_CORE_SERVER),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * extended operation processing.
-   */
-  EXTENDED_OPERATION(MSGID_ERROR_CATEGORY_EXTENDED_OPERATION),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * processing in Directory Server extensions.
-   */
-  EXTENSIONS(MSGID_ERROR_CATEGORY_EXTENSIONS),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * password policy processing.
-   */
-  PASSWORD_POLICY(MSGID_ERROR_CATEGORY_PASSWORD_POLICY),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * plugin processing.
-   */
-  PLUGIN(MSGID_ERROR_CATEGORY_PLUGIN),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * request handling.
-   */
-  REQUEST_HANDLING(MSGID_ERROR_CATEGORY_REQUEST_HANDLING),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * SASL bind processing.
-   */
-  SASL_MECHANISM(MSGID_ERROR_CATEGORY_SASL_MECHANISM),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * schema processing.
-   */
-  SCHEMA(MSGID_ERROR_CATEGORY_SCHEMA),
-
-
-
-  /**
-   * The error log category that will be used for messages generated
-   * during the Directory Server shutdown process.
-   */
-  SHUTDOWN(MSGID_ERROR_CATEGORY_SHUTDOWN),
-
-
-
-  /**
-   * The error log category that will be used for messages generated
-   * during the Directory Server startup process.
-   */
-  STARTUP(MSGID_ERROR_CATEGORY_STARTUP),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * synchronization processing.
-   */
-  SYNCHRONIZATION(MSGID_ERROR_CATEGORY_SYNCHRONIZATION),
-
-
-
-  /**
-   * The error log category that will be used for messages related to
-   * task processing.
-   */
-  TASK(MSGID_ERROR_CATEGORY_TASK);
-
-
-
-  // The static hash mapping category names to their associated
-  // category.
-  private static HashMap<String,ErrorLogCategory> nameMap;
-
-  // The unique identifier for this error log category.
-  private int categoryID;
-
-  // The short human-readable name for this error log category.
-  private String categoryName;
-
-
-
-  static
-  {
-    nameMap = new HashMap<String,ErrorLogCategory>(16);
-    nameMap.put(ERROR_CATEGORY_ACCESS_CONTROL, ACCESS_CONTROL);
-    nameMap.put(ERROR_CATEGORY_BACKEND, BACKEND);
-    nameMap.put(ERROR_CATEGORY_CONFIG, CONFIGURATION);
-    nameMap.put(ERROR_CATEGORY_CONNECTION_HANDLING,
-                CONNECTION_HANDLING);
-    nameMap.put(ERROR_CATEGORY_CORE_SERVER, CORE_SERVER);
-    nameMap.put(ERROR_CATEGORY_EXTENDED_OPERATION,
-                EXTENDED_OPERATION);
-    nameMap.put(ERROR_CATEGORY_EXTENSIONS, EXTENSIONS);
-    nameMap.put(ERROR_CATEGORY_PASSWORD_POLICY, PASSWORD_POLICY);
-    nameMap.put(ERROR_CATEGORY_PLUGIN, PLUGIN);
-    nameMap.put(ERROR_CATEGORY_REQUEST, REQUEST_HANDLING);
-    nameMap.put(ERROR_CATEGORY_SASL_MECHANISM, SASL_MECHANISM);
-    nameMap.put(ERROR_CATEGORY_SCHEMA, SCHEMA);
-    nameMap.put(ERROR_CATEGORY_SHUTDOWN, SHUTDOWN);
-    nameMap.put(ERROR_CATEGORY_STARTUP, STARTUP);
-    nameMap.put(ERROR_CATEGORY_SYNCHRONIZATION, SYNCHRONIZATION);
-    nameMap.put(ERROR_CATEGORY_TASK, TASK);
-  }
-
-
-
-  /**
-   * Creates a new error log category with the specified category ID.
-   *
-   * @param  categoryID  The unique identifier for this error log
-   *                     category.
-   */
-  private ErrorLogCategory(int categoryID)
-  {
-    this.categoryID   = categoryID;
-    this.categoryName = null;
-  }
-
-
-
-  /**
-   * Retrieves the error log category for the specified name.  The
-   * name used must be the default English name for that category.
-   *
-   * @param  name  The name of the error log category to retrieve.
-   *
-   * @return  The error log category for the specified name, or
-   *          <CODE>null</CODE> if no such category exists.
-   */
-  public static ErrorLogCategory getByName(String name)
-  {
-    return nameMap.get(name);
-  }
-
-
-
-  /**
-   * Retrieves the unique identifier for this error log category.
-   *
-   * @return  The unique identifier for this error log category.
-   */
-  public int getCategoryID()
-  {
-    return categoryID;
-  }
-
-
-
-  /**
-   * Retrieves the short human-readable name for this error log
-   * category.
-   *
-   * @return  The short human-readable name for this error log
-   *          category.
-   */
-  public String getCategoryName()
-  {
-    if (categoryName == null)
-    {
-      categoryName = getMessage(categoryID);
-    }
-
-    return categoryName;
-  }
-
-
-
-  /**
-   * Retrieves a string representation of this error log category.
-   *
-   * @return  A string representation of this error log category.
-   */
-  public String toString()
-  {
-    return getCategoryName();
-  }
-}
-
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/ErrorLogSeverity.java b/opendj-sdk/opends/src/server/org/opends/server/types/ErrorLogSeverity.java
index ed37e78..d5a0701 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/ErrorLogSeverity.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/ErrorLogSeverity.java
@@ -26,182 +26,13 @@
  */
 package org.opends.server.types;
 
-
-
-import java.util.HashMap;
-
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.ServerConstants.*;
-
-
-
 /**
  * This enumeration defines the set of severity levels that may be
  * used when writing a message to an error logger.
+ *
+ * TODO: delete me
  */
 public enum ErrorLogSeverity
 {
-  /**
-   * The error log severity that will be used for messages that
-   * provide information about fatal errors which may force the server
-   * to shut down or operate in a significantly degraded state.
-   */
-  FATAL_ERROR(MSGID_ERROR_SEVERITY_FATAL_ERROR),
-
-
-
-  /**
-   * The error log severity that will be used for messages that
-   * provide information about significant events within the server
-   * that are not warnings or errors.
-   */
-  INFORMATIONAL(MSGID_ERROR_SEVERITY_INFORMATIONAL),
-
-
-
-  /**
-   * The error log severity that will be used for messages that
-   * provide information about mild (recoverable) errors encountered
-   * during processing.
-   */
-  MILD_ERROR(MSGID_ERROR_SEVERITY_MILD_ERROR),
-
-
-
-  /**
-   * The error log severity that will be used for messages that
-   * provide information about mild warnings triggered during
-   * processing.
-   */
-  MILD_WARNING(MSGID_ERROR_SEVERITY_MILD_WARNING),
-
-
-
-  /**
-   * The error log severity that will be used for the most important
-   * informational messages (i.e., information that should almost
-   * always be logged but is not associated with a warning or error
-   * condition).
-   */
-  NOTICE(MSGID_ERROR_SEVERITY_NOTICE),
-
-
-
-  /**
-   * The error log severity that will be used for messages that \
-   * provide information about severe errors encountered during
-   * processing.
-   */
-  SEVERE_ERROR(MSGID_ERROR_SEVERITY_SEVERE_ERROR),
-
-
-
-  /**
-   * The error log severity that will be used for messages that
-   * provide information about severe warnings triggered during
-   * processing.
-   */
-  SEVERE_WARNING(MSGID_ERROR_SEVERITY_SEVERE_WARNING);
-
-
-
-  // The static hash mapping severity names to their associated
-  // severity.
-  private static HashMap<String,ErrorLogSeverity> nameMap;
-
-  // The unique identifier for this error log severity.
-  private int severityID;
-
-  // The short human-readable name for this error log severity.
-  private String severityName;
-
-
-
-  static
-  {
-    nameMap = new HashMap<String,ErrorLogSeverity>(10);
-    nameMap.put(ERROR_SEVERITY_FATAL, FATAL_ERROR);
-    nameMap.put(ERROR_SEVERITY_INFORMATIONAL, INFORMATIONAL);
-    nameMap.put(ERROR_SEVERITY_MILD_ERROR, MILD_ERROR);
-    nameMap.put(ERROR_SEVERITY_MILD_WARNING, MILD_WARNING);
-    nameMap.put(ERROR_SEVERITY_NOTICE, NOTICE);
-    nameMap.put(ERROR_SEVERITY_SEVERE_ERROR, SEVERE_ERROR);
-    nameMap.put(ERROR_SEVERITY_SEVERE_WARNING, SEVERE_WARNING);
-  }
-
-
-
-  /**
-   * Creates a new error log severity with the specified unique
-   * identifier.
-   *
-   * @param  severityID  The unique identifier for this error log
-   *                     severity.
-   */
-  private ErrorLogSeverity(int severityID)
-  {
-    this.severityID   = severityID;
-    this.severityName = null;
-  }
-
-
-
-  /**
-   * Retrieves the error log severity for the specified name.  The
-   * name used must be the default English name for that severity.
-   *
-   * @param  name  The name of the error log severity to retrieve.
-   *
-   * @return  The error log severity for the specified name, or
-   *          <CODE>null</CODE> if no such severity exists.
-   */
-  public static ErrorLogSeverity getByName(String name)
-  {
-    return nameMap.get(name);
-  }
-
-
-
-  /**
-   * Retrieves the unique identifier for this error log severity.
-   *
-   * @return  The unique identifier for this error log severity.
-   */
-  public int getSeverityID()
-  {
-    return severityID;
-  }
-
-
-
-  /**
-   * Retrieves the short human-readable name for this error log
-   * severity.
-   *
-   * @return  The short human-readable name for this error log
-   *          severity.
-   */
-  public String getSeverityName()
-  {
-    if (severityName == null)
-    {
-      severityName = getMessage(severityID);
-    }
-
-    return severityName;
-  }
-
-
-
-  /**
-   * Retrieves a string representation of this error log severity.
-   *
-   * @return  A string representation of this error log severity.
-   */
-  public String toString()
-  {
-    return getSeverityName();
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/FilePermission.java b/opendj-sdk/opends/src/server/org/opends/server/types/FilePermission.java
index c68f192..cfe22b2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/FilePermission.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/FilePermission.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -37,8 +38,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -528,9 +528,9 @@
   {
     if (! f.exists())
     {
-      int    msgID   = MSGID_FILEPERM_SET_NO_SUCH_FILE;
-      String message = getMessage(msgID, f.getAbsolutePath());
-      throw new FileNotFoundException(message);
+      Message message =
+          ERR_FILEPERM_SET_NO_SUCH_FILE.get(f.getAbsolutePath());
+      throw new FileNotFoundException(message.toString());
     }
 
 
@@ -593,11 +593,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_FILEPERM_CANNOT_EXEC_CHMOD;
-      String message = getMessage(msgID, f.getAbsolutePath(),
-                                  String.valueOf(e));
-      throw new DirectoryException(ResultCode.OTHER, message, msgID,
-                                   e);
+      Message message = ERR_FILEPERM_CANNOT_EXEC_CHMOD.get(
+          f.getAbsolutePath(), String.valueOf(e));
+      throw new DirectoryException(ResultCode.OTHER, message, e);
     }
 
     return (exitCode == 0);
@@ -832,28 +830,25 @@
     {
       // If an exception was thrown, we can't be sure whether or not
       // any permissions were updated.
-      int    msgID   = MSGID_FILEPERM_SET_JAVA_EXCEPTION;
-      String message = getMessage(msgID, f.getAbsolutePath());
-      throw new DirectoryException(ResultCode.OTHER, message,
-                                   msgID);
+      Message message =
+          ERR_FILEPERM_SET_JAVA_EXCEPTION.get(f.getAbsolutePath());
+      throw new DirectoryException(ResultCode.OTHER, message);
     }
     else if (anyFailed)
     {
       if (anySuccessful)
       {
         // Some of the file permissions may have been altered.
-        int    msgID   = MSGID_FILEPERM_SET_JAVA_FAILED_ALTERED;
-        String message = getMessage(msgID, f.getAbsolutePath());
-        throw new DirectoryException(ResultCode.OTHER, message,
-                                     msgID);
+        Message 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.
-        int    msgID   = MSGID_FILEPERM_SET_JAVA_FAILED_UNALTERED;
-        String message = getMessage(msgID, f.getAbsolutePath());
-        throw new DirectoryException(ResultCode.OTHER, message,
-                                     msgID);
+        Message message = ERR_FILEPERM_SET_JAVA_FAILED_UNALTERED.get(
+            f.getAbsolutePath());
+        throw new DirectoryException(ResultCode.OTHER, message);
       }
     }
     else
@@ -961,9 +956,9 @@
   {
     if ((modeString == null) || (modeString.length() != 3))
     {
-      int    msgID   = MSGID_FILEPERM_INVALID_UNIX_MODE_STRING;
-      String message = getMessage(msgID, String.valueOf(modeString));
-      throw new DirectoryException(ResultCode.OTHER, message, msgID);
+      Message message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
+          String.valueOf(modeString));
+      throw new DirectoryException(ResultCode.OTHER, message);
     }
 
     int encodedPermission = 0x0000;
@@ -994,9 +989,9 @@
                              OWNER_EXECUTABLE;
         break;
       default:
-      int    msgID   = MSGID_FILEPERM_INVALID_UNIX_MODE_STRING;
-      String message = getMessage(msgID, String.valueOf(modeString));
-      throw new DirectoryException(ResultCode.OTHER, message, msgID);
+      Message message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
+          String.valueOf(modeString));
+      throw new DirectoryException(ResultCode.OTHER, message);
     }
 
     switch (modeString.charAt(1))
@@ -1026,9 +1021,9 @@
                              GROUP_EXECUTABLE;
         break;
       default:
-      int    msgID   = MSGID_FILEPERM_INVALID_UNIX_MODE_STRING;
-      String message = getMessage(msgID, String.valueOf(modeString));
-      throw new DirectoryException(ResultCode.OTHER, message, msgID);
+      Message message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
+          String.valueOf(modeString));
+      throw new DirectoryException(ResultCode.OTHER, message);
     }
 
     switch (modeString.charAt(2))
@@ -1058,9 +1053,9 @@
                              OTHER_EXECUTABLE;
         break;
       default:
-      int    msgID   = MSGID_FILEPERM_INVALID_UNIX_MODE_STRING;
-      String message = getMessage(msgID, String.valueOf(modeString));
-      throw new DirectoryException(ResultCode.OTHER, message, msgID);
+      Message message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
+          String.valueOf(modeString));
+      throw new DirectoryException(ResultCode.OTHER, message);
     }
 
     return new FilePermission(encodedPermission);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/IdentifiedException.java b/opendj-sdk/opends/src/server/org/opends/server/types/IdentifiedException.java
index 99d4d59..a3eb158 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/IdentifiedException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/IdentifiedException.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -34,7 +35,7 @@
  * message.
  */
 public abstract class IdentifiedException
-       extends Exception
+       extends OpenDsException
 {
   /**
    * Creates a new identified exception.
@@ -52,7 +53,7 @@
    * @param  message  The message that explains the problem that
    *                  occurred.
    */
-  protected IdentifiedException(String message)
+  protected IdentifiedException(Message message)
   {
     super(message);
   }
@@ -80,18 +81,10 @@
    * @param  cause    The underlying cause that triggered this
    *                  exception.
    */
-  protected IdentifiedException(String message, Throwable cause)
+  protected IdentifiedException(Message message, Throwable cause)
   {
     super(message, cause);
   }
 
-
-
-  /**
-   * Retrieves the unique identifier for the associated message.
-   *
-   * @return  The unique identifier for the associated message.
-   */
-  public abstract int getMessageID();
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/InitializationException.java b/opendj-sdk/opends/src/server/org/opends/server/types/InitializationException.java
index 24e2e59..287d9b6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/InitializationException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/InitializationException.java
@@ -25,6 +25,9 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
+
+
 
 
 /**
@@ -45,26 +48,17 @@
 
 
 
-  // The message ID for the message associated with this
-  // initialization exception.
-  private final int messageID;
-
 
 
   /**
    * Creates a new initialization exception with the provided message.
    *
-   * @param  messageID  The unique identifier for the associated
-   *                    message.
    * @param  message    The message that explains the problem that
    *                    occurred.
    */
-  public InitializationException(int messageID, String message)
+  public InitializationException(Message message)
   {
     super(message);
-
-
-    this.messageID = messageID;
   }
 
 
@@ -73,32 +67,16 @@
    * Creates a new initialization exception with the provided message
    * and root cause.
    *
-   * @param  messageID  The unique identifier for the associated
-   *                    message.
    * @param  message    The message that explains the problem that
    *                    occurred.
    * @param  cause      The exception that was caught to trigger this
    *                    exception.
    */
-  public InitializationException(int messageID, String message,
+  public InitializationException(Message message,
                                  Throwable cause)
   {
     super(message, cause);
-
-
-    this.messageID = messageID;
   }
 
-
-
-  /**
-   * Retrieves the unique identifier for the associated message.
-   *
-   * @return  The unique identifier for the associated message.
-   */
-  public final int getMessageID()
-  {
-    return messageID;
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/InvokableMethod.java b/opendj-sdk/opends/src/server/org/opends/server/types/InvokableMethod.java
index 974c36d..1eb76a9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/InvokableMethod.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/InvokableMethod.java
@@ -324,7 +324,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      throw new MBeanException(de, de.getErrorMessage());
+      throw new MBeanException(de, de.getMessage());
     }
     catch (Exception e)
     {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/LDAPException.java b/opendj-sdk/opends/src/server/org/opends/server/types/LDAPException.java
index da50c74..f72da70 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/LDAPException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/LDAPException.java
@@ -25,6 +25,8 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
+
 
 
 
@@ -49,15 +51,11 @@
   // The matched DN associated with this LDAP exception.
   private final DN matchedDN;
 
-  // The message ID for the message associated with this LDAP
-  // exception.
-  private final int messageID;
-
   // The LDAP result code associated with this exception.
   private final int resultCode;
 
   // The server-provided error message for this LDAP exception.
-  private final String errorMessage;
+  private final Message errorMessage;
 
 
 
@@ -66,17 +64,14 @@
    *
    * @param  resultCode  The LDAP result code associated with this
    *                     exception.
-   * @param  messageID   The unique identifier for the associated
-   *                     message.
    * @param  message     The message that explains the problem that
    *                     occurred.
    */
-  public LDAPException(int resultCode, int messageID, String message)
+  public LDAPException(int resultCode, Message message)
   {
     super(message);
 
     this.resultCode = resultCode;
-    this.messageID  = messageID;
 
     errorMessage = null;
     matchedDN    = null;
@@ -90,19 +85,16 @@
    * @param  resultCode    The LDAP result code associated with this
    *                       exception.
    * @param  errorMessage  The server-provided error message.
-   * @param  messageID     The unique identifier for the associated
-   *                       message.
    * @param  message       The message that explains the problem that
    *                       occurred.
    */
-  public LDAPException(int resultCode, String errorMessage,
-                       int messageID, String message)
+  public LDAPException(int resultCode, Message errorMessage,
+                       Message message)
   {
     super(message);
 
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
-    this.messageID    = messageID;
 
     matchedDN    = null;
   }
@@ -115,20 +107,17 @@
    *
    * @param  resultCode  The LDAP result code associated with this
    *                     exception.
-   * @param  messageID   The unique identifier for the associated
-   *                     message.
    * @param  message     The message that explains the problem that
    *                     occurred.
    * @param  cause       The exception that was caught to trigger this
    *                     exception.
    */
-  public LDAPException(int resultCode, int messageID, String message,
+  public LDAPException(int resultCode, Message message,
                        Throwable cause)
   {
     super(message, cause);
 
     this.resultCode = resultCode;
-    this.messageID  = messageID;
 
     errorMessage = null;
     matchedDN    = null;
@@ -143,21 +132,18 @@
    * @param  resultCode    The LDAP result code associated with this
    *                       exception.
    * @param  errorMessage  The server-provided error message.
-   * @param  messageID     The unique identifier for the associated
-   *                       message.
    * @param  message       The message that explains the problem that
    *                       occurred.
    * @param  cause         The exception that was caught to trigger
    *                       this exception.
    */
-  public LDAPException(int resultCode, String errorMessage,
-                       int messageID, String message, Throwable cause)
+  public LDAPException(int resultCode, Message errorMessage,
+                       Message message, Throwable cause)
   {
     super(message, cause);
 
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
-    this.messageID    = messageID;
 
     matchedDN    = null;
   }
@@ -171,23 +157,20 @@
    * @param  resultCode    The LDAP result code associated with this
    *                       exception.
    * @param  errorMessage  The server-provided error message.
-   * @param  messageID     The unique identifier for the associated
-   *                       message.
    * @param  message       The message that explains the problem that
    *                       occurred.
    * @param  matchedDN     The matched DN returned by the server.
    * @param  cause         The exception that was caught to trigger
    *                       this exception.
    */
-  public LDAPException(int resultCode, String errorMessage,
-                       int messageID, String message, DN matchedDN,
+  public LDAPException(int resultCode, Message errorMessage,
+                       Message message, DN matchedDN,
                        Throwable cause)
   {
     super(message, cause);
 
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
-    this.messageID    = messageID;
     this.matchedDN    = matchedDN;
   }
 
@@ -211,7 +194,7 @@
    * @return  The server-provided error message for this exception, or
    *          {@code null} if none was given.
    */
-  public String getErrorMessage()
+  public Message getErrorMessage()
   {
     return errorMessage;
   }
@@ -219,18 +202,6 @@
 
 
   /**
-   * Retrieves the unique identifier for the associated message.
-   *
-   * @return  The unique identifier for the associated message.
-   */
-  public int getMessageID()
-  {
-    return messageID;
-  }
-
-
-
-  /**
    * Retrieves the matched DN for this exception.
    *
    * @return  The matched DN for this exception, or {@code null} if
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/LDAPURL.java b/opendj-sdk/opends/src/server/org/opends/server/types/LDAPURL.java
index 3e19f56..69897ec 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/LDAPURL.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/LDAPURL.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -37,8 +38,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -335,19 +335,17 @@
     int schemeEndPos = url.indexOf("://");
     if (schemeEndPos < 0)
     {
-      int    msgID   = MSGID_LDAPURL_NO_COLON_SLASH_SLASH;
-      String message = getMessage(msgID, String.valueOf(url));
+      Message message =
+          ERR_LDAPURL_NO_COLON_SLASH_SLASH.get(String.valueOf(url));
       throw new DirectoryException(
-                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                     msgID);
+                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
     else if (schemeEndPos == 0)
     {
-      int    msgID   = MSGID_LDAPURL_NO_SCHEME;
-      String message = getMessage(msgID, String.valueOf(url));
+      Message message =
+          ERR_LDAPURL_NO_SCHEME.get(String.valueOf(url));
       throw new DirectoryException(
-                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                     msgID);
+                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
     else
     {
@@ -394,19 +392,17 @@
       }
       else if (colonPos == 0)
       {
-        int    msgID   = MSGID_LDAPURL_NO_HOST;
-        String message = getMessage(msgID, String.valueOf(url));
+        Message message =
+            ERR_LDAPURL_NO_HOST.get(String.valueOf(url));
         throw new DirectoryException(
-                       ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                       msgID);
+                       ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
       }
       else if (colonPos == (hostPort.length() - 1))
       {
-        int    msgID   = MSGID_LDAPURL_NO_PORT;
-        String message = getMessage(msgID, String.valueOf(url));
+        Message message =
+            ERR_LDAPURL_NO_PORT.get(String.valueOf(url));
         throw new DirectoryException(
-                       ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                       msgID);
+                       ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
       }
       else
       {
@@ -423,22 +419,18 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_LDAPURL_CANNOT_DECODE_PORT;
-          String message = getMessage(msgID, String.valueOf(url),
-                                      hostPort.substring(colonPos+1));
+          Message message = ERR_LDAPURL_CANNOT_DECODE_PORT.get(
+              String.valueOf(url), hostPort.substring(colonPos+1));
           throw new DirectoryException(
-                         ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                         msgID);
+                        ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
         }
 
         if ((port <= 0) || (port > 65535))
         {
-          int    msgID   = MSGID_LDAPURL_INVALID_PORT;
-          String message = getMessage(msgID, String.valueOf(url),
-                                      port);
+          Message message =
+              ERR_LDAPURL_INVALID_PORT.get(String.valueOf(url), port);
           throw new DirectoryException(
-                         ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                         msgID);
+                        ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
         }
       }
     }
@@ -580,12 +572,10 @@
     }
     else
     {
-      int    msgID   = MSGID_LDAPURL_INVALID_SCOPE_STRING;
-      String message = getMessage(msgID, String.valueOf(url),
-                                  String.valueOf(scopeString));
+      Message message = ERR_LDAPURL_INVALID_SCOPE_STRING.get(
+          String.valueOf(url), String.valueOf(scopeString));
       throw new DirectoryException(
-                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                     msgID);
+                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
 
     if (startPos >= length)
@@ -707,11 +697,10 @@
         // a problem.
         if (i+2 > length)
         {
-          int    msgID   = MSGID_LDAPURL_PERCENT_TOO_CLOSE_TO_END;
-          String message = getMessage(msgID, String.valueOf(s), i);
+          Message message = ERR_LDAPURL_PERCENT_TOO_CLOSE_TO_END.get(
+              String.valueOf(s), i);
           throw new DirectoryException(
-                         ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                         msgID);
+                        ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
         }
 
         byte b;
@@ -772,11 +761,11 @@
             b = (byte) 0xF0;
             break;
           default:
-            int msgID = MSGID_LDAPURL_INVALID_HEX_BYTE;
-            String message = getMessage(msgID, String.valueOf(s), i);
+            Message message = ERR_LDAPURL_INVALID_HEX_BYTE.get(
+                String.valueOf(s), i);
             throw new DirectoryException(
                            ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                           message, msgID);
+                           message);
         }
 
         switch (stringBytes[++i])
@@ -835,11 +824,11 @@
             b |= 0x0F;
             break;
           default:
-            int msgID = MSGID_LDAPURL_INVALID_HEX_BYTE;
-            String message = getMessage(msgID, String.valueOf(s), i);
+            Message message = ERR_LDAPURL_INVALID_HEX_BYTE.get(
+                String.valueOf(s), i);
             throw new DirectoryException(
                            ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                           message, msgID);
+                           message);
         }
 
         decodedBytes[pos++] = b;
@@ -862,11 +851,10 @@
       }
 
       // This should never happen.
-      int    msgID   = MSGID_LDAPURL_CANNOT_CREATE_UTF8_STRING;
-      String message = getMessage(msgID, getExceptionMessage(e));
+      Message message = ERR_LDAPURL_CANNOT_CREATE_UTF8_STRING.get(
+          getExceptionMessage(e));
       throw new DirectoryException(
-                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
-                     msgID);
+                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/LDIFExportConfig.java b/opendj-sdk/opends/src/server/org/opends/server/types/LDIFExportConfig.java
index 9c4a548..634e6d9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/LDIFExportConfig.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/LDIFExportConfig.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -42,8 +43,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 
 
 
@@ -228,9 +228,8 @@
             File f = new File(ldifFile);
             if (f.exists())
             {
-              int    msgID   = MSGID_LDIF_FILE_EXISTS;
-              String message = getMessage(msgID, ldifFile);
-              throw new IOException(message);
+              Message message = ERR_LDIF_FILE_EXISTS.get(ldifFile);
+              throw new IOException(message.toString());
             }
             else
             {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/LDIFImportConfig.java b/opendj-sdk/opends/src/server/org/opends/server/types/LDIFImportConfig.java
index cd72546..2e3d2f6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/LDIFImportConfig.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/LDIFImportConfig.java
@@ -51,8 +51,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 
 
 
@@ -509,8 +508,8 @@
         File f = new File(rejectFile);
         if (f.exists())
         {
-          throw new IOException(getMessage(MSGID_REJECT_FILE_EXISTS,
-                                           rejectFile));
+          throw new IOException(
+                  ERR_REJECT_FILE_EXISTS.get(rejectFile).toString());
         }
         else
         {
@@ -601,8 +600,8 @@
         File f = new File(skipFile);
         if (f.exists())
         {
-          throw new IOException(getMessage(MSGID_SKIP_FILE_EXISTS,
-                                           skipFile));
+          throw new IOException(
+                  ERR_SKIP_FILE_EXISTS.get(skipFile).toString());
         }
         else
         {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/MembershipException.java b/opendj-sdk/opends/src/server/org/opends/server/types/MembershipException.java
index 2665e40..e2ffd89 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/MembershipException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/MembershipException.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 /**
@@ -53,39 +54,22 @@
 
 
 
-  /**
-   * The unique identifier for the error message.
-   */
-  private final int errorMessageID;
-
-
-
-  /**
-   * The error message for this membership exception.
-   */
-  private final String errorMessage;
-
 
 
   /**
    * Creates a new membership exception with the provided information.
    *
-   * @param  errorMessageID     The unique identifier for the error
-   *                            message.
    * @param  errorMessage       The error message for this membership
    *                            exception.
    * @param  continueIterating  Indicates whether it is possible to
    *                            continue iterating through the list of
    *                            group members.
    */
-  public MembershipException(int errorMessageID, String errorMessage,
+  public MembershipException(Message errorMessage,
                              boolean continueIterating)
   {
     super(errorMessage);
 
-
-    this.errorMessageID    = errorMessageID;
-    this.errorMessage      = errorMessage;
     this.continueIterating = continueIterating;
   }
 
@@ -94,8 +78,6 @@
   /**
    * Creates a new membership exception with the provided information.
    *
-   * @param  errorMessageID     The unique identifier for the error
-   *                            message.
    * @param  errorMessage       The error message for this membership
    *                            exception.
    * @param  continueIterating  Indicates whether it is possible to
@@ -104,40 +86,26 @@
    * @param  cause              The underlying cause for this
    *                            membership exception.
    */
-  public MembershipException(int errorMessageID, String errorMessage,
+  public MembershipException(Message errorMessage,
                              boolean continueIterating,
                              Throwable cause)
   {
     super(errorMessage, cause);
 
 
-    this.errorMessageID    = errorMessageID;
-    this.errorMessage      = errorMessage;
     this.continueIterating = continueIterating;
   }
 
 
 
   /**
-   * Retrieves the unique identifier for the error message.
-   *
-   * @return  The unique identifier for the error message.
-   */
-  public final int getMessageID()
-  {
-    return errorMessageID;
-  }
-
-
-
-  /**
    * Retrieves the error message for this membership exception.
    *
    * @return  The error message for this membership exception.
    */
-  public final String getErrorMessage()
+  public final Message getErrorMessage()
   {
-    return errorMessage;
+    return getMessageObject();
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/NamedCharacterSet.java b/opendj-sdk/opends/src/server/org/opends/server/types/NamedCharacterSet.java
index ba77d24..ce8d87e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/NamedCharacterSet.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/NamedCharacterSet.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,7 @@
 
 import org.opends.server.config.ConfigException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -80,19 +80,17 @@
 
     if ((name == null) || (name.length() == 0))
     {
-      int msgID = MSGID_CHARSET_CONSTRUCTOR_NO_NAME;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CHARSET_CONSTRUCTOR_NO_NAME.get();
+      throw new ConfigException(message);
     }
 
     for (int i=0; i < name.length(); i++)
     {
       if (! isAlpha(name.charAt(i)))
       {
-        int    msgID   = MSGID_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR;
-        String message = getMessage(msgID,
-                              String.valueOf(name.charAt(i)), i);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR.
+            get(String.valueOf(name.charAt(i)), i);
+        throw new ConfigException(message);
       }
     }
   }
@@ -121,19 +119,17 @@
 
     if ((name == null) || (name.length() == 0))
     {
-      int msgID = MSGID_CHARSET_CONSTRUCTOR_NO_NAME;
-      String message = getMessage(msgID);
-      throw new ConfigException(msgID, message);
+      Message message = ERR_CHARSET_CONSTRUCTOR_NO_NAME.get();
+      throw new ConfigException(message);
     }
 
     for (int i=0; i < name.length(); i++)
     {
       if (! isAlpha(name.charAt(i)))
       {
-        int    msgID   = MSGID_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR;
-        String message = getMessage(msgID,
-                              String.valueOf(name.charAt(i)), i);
-        throw new ConfigException(msgID, message);
+        Message message = ERR_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR.
+            get(String.valueOf(name.charAt(i)), i);
+        throw new ConfigException(message);
       }
     }
   }
@@ -243,21 +239,21 @@
       int colonPos = value.indexOf(':');
       if (colonPos < 0)
       {
-        int msgID = MSGID_CHARSET_NO_COLON;
-        String message = getMessage(msgID, String.valueOf(value));
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CHARSET_NO_COLON.get(String.valueOf(value));
+        throw new ConfigException(message);
       }
       else if (colonPos == 0)
       {
-        int msgID = MSGID_CHARSET_NO_NAME;
-        String message = getMessage(msgID, String.valueOf(value));
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CHARSET_NO_NAME.get(String.valueOf(value));
+        throw new ConfigException(message);
       }
       else if (colonPos == (value.length() - 1))
       {
-        int msgID = MSGID_CHARSET_NO_CHARS;
-        String message = getMessage(msgID, String.valueOf(value));
-        throw new ConfigException(msgID, message);
+        Message message =
+            ERR_CHARSET_NO_CHARS.get(String.valueOf(value));
+        throw new ConfigException(message);
       }
       else
       {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/OpenDsException.java b/opendj-sdk/opends/src/server/org/opends/server/types/OpenDsException.java
new file mode 100644
index 0000000..a65a380
--- /dev/null
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/OpenDsException.java
@@ -0,0 +1,119 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.server.types;
+import org.opends.messages.Message;
+
+
+/**
+ * This class defines a base exception for OpenDS exceptions.
+ */
+public abstract class OpenDsException
+        extends Exception
+{
+
+  /** Message that explains the problem. */
+  Message message;
+
+  /**
+   * Creates a new identified exception.
+   */
+  protected OpenDsException()
+  {
+    super();
+  }
+
+  /**
+   * Constructs a new instance from another
+   * <code>OpenDsException</code>.
+   * This constructor sets the message to be that of
+   * <code>cause</code>.
+   *
+   * @param cause exception whose message will be used for
+   *        this exception's message.
+   */
+  protected OpenDsException(OpenDsException cause) {
+    this(null, cause);
+  }
+
+  /**
+   * Creates a new identified exception with the provided information.
+   *
+   * @param  message  The message that explains the problem that
+   *                  occurred.
+   */
+  protected OpenDsException(Message message)
+  {
+    this(message, null);
+  }
+
+
+
+  /**
+   * Creates a new identified exception with the provided information.
+   *
+   * @param  cause  The underlying cause that triggered this
+   *                exception.
+   */
+  protected OpenDsException(Throwable cause)
+  {
+    this(null, cause);
+  }
+
+
+
+  /**
+   * Creates a new identified exception with the provided information.
+   *
+   * @param  message  The message that explains the problem that
+   *                  occurred.
+   * @param  cause    The underlying cause that triggered this
+   *                  exception.
+   */
+  protected OpenDsException(Message message, Throwable cause)
+  {
+    super(message != null ? message.toString() :
+            cause != null ? cause.getMessage() : null, cause);
+    if (message != null) {
+      this.message = message;
+    } else if (cause instanceof OpenDsException) {
+      this.message = ((OpenDsException)cause).getMessageObject();
+    }
+  }
+
+
+
+  /**
+   * Returns the message that explains the problem that occurred.
+   *
+   * @return Message of the problem
+   */
+  public Message getMessageObject() {
+    return this.message;
+  }
+
+}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/Operation.java b/opendj-sdk/opends/src/server/org/opends/server/types/Operation.java
index 23020cb..fc17949 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/Operation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/Operation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -32,7 +33,7 @@
 import java.util.Map;
 
 import org.opends.server.api.ClientConnection;
-
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -76,15 +77,11 @@
    * @param  message           The message to send to the client.  It
    *                           may be {@code null} if no notification
    *                           is to be sent.
-   * @param  messageID         The unique identifier associated with
-   *                           the message to send to the client.  It
-   *                           may be -1 if no notification is to be
-   *                           sent.
    */
   public abstract void disconnectClient(
-                            DisconnectReason disconnectReason,
-                            boolean sendNotification, String message,
-                            int messageID);
+          DisconnectReason disconnectReason,
+          boolean sendNotification, Message message
+  );
 
   /**
    * Retrieves a set of standard elements that should be logged in all
@@ -238,7 +235,7 @@
    *
    * @return  The error message for this operation.
    */
-  public abstract StringBuilder getErrorMessage();
+  public abstract MessageBuilder getErrorMessage();
 
   /**
    * Specifies the error message for this operation.  This method may
@@ -246,7 +243,7 @@
    *
    * @param  errorMessage  The error message for this operation.
    */
-  public abstract void setErrorMessage(StringBuilder errorMessage);
+  public abstract void setErrorMessage(MessageBuilder errorMessage);
 
   /**
    * Appends the provided message to the error message buffer.  If the
@@ -255,9 +252,8 @@
    * by post-response plugins.
    *
    * @param  message  The message to append to the error message
-   *                  buffer.
    */
-  public abstract void appendErrorMessage(String message);
+  public abstract void appendErrorMessage(Message message);
 
   /**
    * Retrieves the additional log message for this operation, which
@@ -268,7 +264,7 @@
    *
    * @return  The additional log message for this operation.
    */
-  public abstract StringBuilder getAdditionalLogMessage();
+  public abstract MessageBuilder getAdditionalLogMessage();
 
   /**
    * Specifies the additional log message for this operation, which
@@ -277,10 +273,9 @@
    * plugins.
    *
    * @param  additionalLogMessage  The additional log message for this
-   *                               operation.
    */
   public abstract void setAdditionalLogMessage(
-      StringBuilder additionalLogMessage);
+      MessageBuilder additionalLogMessage);
 
   /**
    * Appends the provided message to the additional log information
@@ -288,9 +283,8 @@
    * post-response plugins.
    *
    * @param  message  The message that should be appended to the
-   *                  additional log information for this operation.
    */
-  public abstract void appendAdditionalLogMessage(String message);
+  public abstract void appendAdditionalLogMessage(Message message);
 
   /**
    * Retrieves the matched DN for this operation.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/RDN.java b/opendj-sdk/opends/src/server/org/opends/server/types/RDN.java
index 49b323e..6ee3403 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/RDN.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/RDN.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -39,8 +40,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -461,19 +461,17 @@
     // A null or empty RDN is not acceptable.
     if (rdnString == null)
     {
-      int    msgID   = MSGID_RDN_DECODE_NULL;
-      String message = getMessage(msgID);
+      Message message = ERR_RDN_DECODE_NULL.get();
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
 
     int length = rdnString.length();
     if (length == 0)
     {
-      int    msgID   = MSGID_RDN_DECODE_NULL;
-      String message = getMessage(msgID);
+      Message message = ERR_RDN_DECODE_NULL.get();
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -488,10 +486,9 @@
       {
         // This means that the RDN was completely comprised of spaces,
         // which is not valid.
-        int    msgID   = MSGID_RDN_DECODE_NULL;
-        String message = getMessage(msgID);
+        Message message = ERR_RDN_DECODE_NULL.get();
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
       else
       {
@@ -514,11 +511,10 @@
     // that would be invalid.
     if (pos >= length)
     {
-      int    msgID   = MSGID_RDN_END_WITH_ATTR_NAME;
-      String message = getMessage(msgID,
-                            rdnString, attributeName.toString());
+      Message message = ERR_RDN_END_WITH_ATTR_NAME.get(
+          rdnString, attributeName.toString());
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -532,11 +528,10 @@
         // This means that we hit the end of the string before
         // finding a '='.  This is illegal because there is no
         // attribute-value separator.
-        int    msgID   = MSGID_RDN_END_WITH_ATTR_NAME;
-        String message = getMessage(msgID,
-                              rdnString, attributeName.toString());
+        Message message = ERR_RDN_END_WITH_ATTR_NAME.get(
+            rdnString, attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
       else
       {
@@ -553,11 +548,10 @@
     }
     else
     {
-      int    msgID   = MSGID_RDN_NO_EQUAL;
-      String message = getMessage(msgID, rdnString,
-                                  attributeName.toString(), c, pos);
+      Message message = ERR_RDN_NO_EQUAL.get(
+          rdnString, attributeName.toString(), c);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -640,10 +634,9 @@
     // allowed.  It would be legal for a DN but not an RDN.
     if ((c == ',') || (c == ';'))
     {
-      int    msgID   = MSGID_RDN_UNEXPECTED_COMMA;
-      String message = getMessage(msgID, rdnString, pos);
+      Message message = ERR_RDN_UNEXPECTED_COMMA.get(rdnString, pos);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -651,10 +644,10 @@
     // illegal.
     if (c != '+')
     {
-      int    msgID   = MSGID_RDN_ILLEGAL_CHARACTER;
-      String message = getMessage(msgID, rdnString, c, pos);
+      Message message =
+          ERR_RDN_ILLEGAL_CHARACTER.get(rdnString, c, pos);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -681,11 +674,10 @@
       // Make sure we're not at the end of the RDN.
       if (pos >= length)
       {
-        int    msgID   = MSGID_RDN_END_WITH_ATTR_NAME;
-        String message = getMessage(msgID, rdnString,
-                                    attributeName.toString());
+        Message message = ERR_RDN_END_WITH_ATTR_NAME.get(
+            rdnString, attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -700,11 +692,10 @@
           // This means that we hit the end of the string before
           // finding a '='.  This is illegal because there is no
           // attribute-value separator.
-          int    msgID   = MSGID_RDN_END_WITH_ATTR_NAME;
-          String message = getMessage(msgID, rdnString,
-                                      attributeName.toString());
+          Message message = ERR_RDN_END_WITH_ATTR_NAME.get(
+              rdnString, attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -720,11 +711,10 @@
       }
       else
       {
-        int    msgID   = MSGID_RDN_NO_EQUAL;
-        String message = getMessage(msgID, rdnString,
-                                    attributeName.toString(), c, pos);
+        Message message = ERR_RDN_NO_EQUAL.get(
+            rdnString, attributeName.toString(), c);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -804,10 +794,10 @@
       // not allowed.  It would be legal for a DN but not an RDN.
       if ((c == ',') || (c == ';'))
       {
-        int    msgID   = MSGID_RDN_UNEXPECTED_COMMA;
-        String message = getMessage(msgID, rdnString, pos);
+        Message message =
+            ERR_RDN_UNEXPECTED_COMMA.get(rdnString, pos);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -815,10 +805,10 @@
       // illegal.
       if (c != '+')
       {
-        int    msgID   = MSGID_RDN_ILLEGAL_CHARACTER;
-        String message = getMessage(msgID, rdnString, c, pos);
+        Message message =
+            ERR_RDN_ILLEGAL_CHARACTER.get(rdnString, c, pos);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
-                                     message, msgID);
+                                     message);
       }
     }
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/RawAttribute.java b/opendj-sdk/opends/src/server/org/opends/server/types/RawAttribute.java
index 0053eba..962d59b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/RawAttribute.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/RawAttribute.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -39,8 +40,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.Validator.*;
 
@@ -275,18 +275,19 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_ATTRIBUTE_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_ATTRIBUTE_DECODE_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if (numElements != 2)
     {
-      int msgID = MSGID_LDAP_ATTRIBUTE_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_ATTRIBUTE_DECODE_INVALID_ELEMENT_COUNT.
+            get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -303,9 +304,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_ATTRIBUTE_DECODE_TYPE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_ATTRIBUTE_DECODE_TYPE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -327,9 +328,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_ATTRIBUTE_DECODE_VALUES;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_ATTRIBUTE_DECODE_VALUES.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
     return new LDAPAttribute(attributeType, values);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/RawFilter.java b/opendj-sdk/opends/src/server/org/opends/server/types/RawFilter.java
index a8d45c0..3e759fc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/RawFilter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/RawFilter.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -39,8 +40,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -657,9 +657,8 @@
   {
     if (element == null)
     {
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_NULL;
-      String message = getMessage(msgID);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message = ERR_LDAP_FILTER_DECODE_NULL.get();
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
     switch (element.getType())
@@ -687,9 +686,9 @@
         return decodeExtensibleMatchFilter(element);
 
       default:
-        int    msgID   = MSGID_LDAP_FILTER_DECODE_INVALID_TYPE;
-        String message = getMessage(msgID, element.getType());
-        throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+        Message message = ERR_LDAP_FILTER_DECODE_INVALID_TYPE.get(
+            element.getType());
+        throw new LDAPException(PROTOCOL_ERROR, message);
     }
   }
 
@@ -743,9 +742,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_FILTER_DECODE_COMPOUND_SET;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_FILTER_DECODE_COMPOUND_SET.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -769,9 +768,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_FILTER_DECODE_COMPOUND_COMPONENTS;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_FILTER_DECODE_COMPOUND_COMPONENTS.
+          get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -807,9 +806,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_NOT_ELEMENT;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_FILTER_DECODE_NOT_ELEMENT.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -829,9 +828,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_NOT_COMPONENT;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_FILTER_DECODE_NOT_COMPONENT.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -896,17 +895,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_TV_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_FILTER_DECODE_TV_SEQUENCE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     if (elements.size() != 2)
     {
-      int msgID = MSGID_LDAP_FILTER_DECODE_TV_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, elements.size());
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_FILTER_DECODE_TV_INVALID_ELEMENT_COUNT.
+            get(elements.size());
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -923,9 +923,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_TV_TYPE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_FILTER_DECODE_TV_TYPE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -941,9 +941,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_TV_VALUE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_FILTER_DECODE_TV_VALUE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -980,18 +980,18 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_SUBSTRING_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_FILTER_DECODE_SUBSTRING_SEQUENCE.get(
+          String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     if (elements.size() != 2)
     {
-      int msgID =
-           MSGID_LDAP_FILTER_DECODE_SUBSTRING_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, elements.size());
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_FILTER_DECODE_SUBSTRING_INVALID_ELEMENT_COUNT.
+            get(elements.size());
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -1008,9 +1008,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_SUBSTRING_TYPE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_FILTER_DECODE_SUBSTRING_TYPE.get(
+          String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -1026,17 +1026,17 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_SUBSTRING_ELEMENTS;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_FILTER_DECODE_SUBSTRING_ELEMENTS.get(
+          String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     if (subElements.isEmpty())
     {
-      int msgID = MSGID_LDAP_FILTER_DECODE_SUBSTRING_NO_SUBELEMENTS;
-      String message = getMessage(msgID);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_FILTER_DECODE_SUBSTRING_NO_SUBELEMENTS.get();
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -1064,10 +1064,10 @@
             subAnyElements.add(e.decodeAsOctetString());
             break;
           default:
-            int msgID =
-                 MSGID_LDAP_FILTER_DECODE_SUBSTRING_INVALID_SUBTYPE;
-            String message = getMessage(msgID);
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+            Message message =
+                ERR_LDAP_FILTER_DECODE_SUBSTRING_INVALID_SUBTYPE.
+                  get(e.getType());
+            throw new LDAPException(PROTOCOL_ERROR, message);
         }
       }
     }
@@ -1082,9 +1082,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_SUBSTRING_VALUES;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_FILTER_DECODE_SUBSTRING_VALUES.get(
+          String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -1122,9 +1122,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_PRESENCE_TYPE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_FILTER_DECODE_PRESENCE_TYPE.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -1162,9 +1162,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_EXTENSIBLE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_FILTER_DECODE_EXTENSIBLE_SEQUENCE.
+          get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -1191,10 +1191,10 @@
             dnAttributes = e.decodeAsBoolean().booleanValue();
             break;
           default:
-            int msgID =
-                 MSGID_LDAP_FILTER_DECODE_EXTENSIBLE_INVALID_TYPE;
-            String message = getMessage(msgID, e.getType());
-            throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+            Message message =
+                ERR_LDAP_FILTER_DECODE_EXTENSIBLE_INVALID_TYPE.
+                  get(e.getType());
+            throw new LDAPException(PROTOCOL_ERROR, message);
         }
       }
     }
@@ -1209,9 +1209,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_LDAP_FILTER_DECODE_EXTENSIBLE_ELEMENTS;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_FILTER_DECODE_EXTENSIBLE_ELEMENTS.
+          get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/RawModification.java b/opendj-sdk/opends/src/server/org/opends/server/types/RawModification.java
index e4a1a4a..8ef6862 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/RawModification.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/RawModification.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -38,8 +39,7 @@
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ProtocolMessages.*;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -258,19 +258,19 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MODIFICATION_DECODE_SEQUENCE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_MODIFICATION_DECODE_SEQUENCE.get(
+          String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
     int numElements = elements.size();
     if (numElements != 2)
     {
-      int msgID =
-           MSGID_LDAP_MODIFICATION_DECODE_INVALID_ELEMENT_COUNT;
-      String message = getMessage(msgID, numElements);
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+      Message message =
+          ERR_LDAP_MODIFICATION_DECODE_INVALID_ELEMENT_COUNT.
+            get(numElements);
+      throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
 
@@ -294,9 +294,10 @@
         default:
           int intValue =
                    elements.get(0).decodeAsEnumerated().intValue();
-          int msgID = MSGID_LDAP_MODIFICATION_DECODE_INVALID_MOD_TYPE;
-          String message = getMessage(msgID, intValue);
-          throw new LDAPException(PROTOCOL_ERROR, msgID, message);
+          Message message =
+              ERR_LDAP_MODIFICATION_DECODE_INVALID_MOD_TYPE.
+                get(intValue);
+          throw new LDAPException(PROTOCOL_ERROR, message);
       }
     }
     catch (LDAPException le)
@@ -310,9 +311,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MODIFICATION_DECODE_MOD_TYPE;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message = ERR_LDAP_MODIFICATION_DECODE_MOD_TYPE.get(
+          String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
@@ -328,9 +329,9 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int msgID = MSGID_LDAP_MODIFICATION_DECODE_ATTR;
-      String message = getMessage(msgID, String.valueOf(e));
-      throw new LDAPException(PROTOCOL_ERROR, msgID, message, e);
+      Message message =
+          ERR_LDAP_MODIFICATION_DECODE_ATTR.get(String.valueOf(e));
+      throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/ResultCode.java b/opendj-sdk/opends/src/server/org/opends/server/types/ResultCode.java
index 7d6b01a..0381782 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/ResultCode.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/ResultCode.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 import org.opends.server.protocols.ldap.LDAPResultCode;
 
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 
 
 
@@ -45,7 +45,7 @@
    * The result code that should only be used if the actual result
    * code has not yet been determined.
    */
-  UNDEFINED(-1, -1),
+  UNDEFINED(-1, null),
 
 
 
@@ -53,7 +53,7 @@
    * The result code that indicates that the operation completed
    * successfully.
    */
-  SUCCESS(LDAPResultCode.SUCCESS, MSGID_RESULT_SUCCESS),
+  SUCCESS(LDAPResultCode.SUCCESS, INFO_RESULT_SUCCESS.get()),
 
 
 
@@ -62,7 +62,7 @@
    * the operation from being processed properly.
    */
   OPERATIONS_ERROR(LDAPResultCode.OPERATIONS_ERROR,
-                   MSGID_RESULT_OPERATIONS_ERROR),
+                   INFO_RESULT_OPERATIONS_ERROR.get()),
 
 
 
@@ -71,7 +71,7 @@
    * or illegal request to the server.
    */
   PROTOCOL_ERROR(LDAPResultCode.PROTOCOL_ERROR,
-                 MSGID_RESULT_PROTOCOL_ERROR),
+                 INFO_RESULT_PROTOCOL_ERROR.get()),
 
 
 
@@ -80,7 +80,7 @@
    * while attempting to process the request.
    */
   TIME_LIMIT_EXCEEDED(LDAPResultCode.TIME_LIMIT_EXCEEDED,
-                      MSGID_RESULT_TIME_LIMIT_EXCEEDED),
+                      INFO_RESULT_TIME_LIMIT_EXCEEDED.get()),
 
 
 
@@ -89,7 +89,7 @@
    * while attempting to process the request.
    */
   SIZE_LIMIT_EXCEEDED(LDAPResultCode.SIZE_LIMIT_EXCEEDED,
-                      MSGID_RESULT_SIZE_LIMIT_EXCEEDED),
+                      INFO_RESULT_SIZE_LIMIT_EXCEEDED.get()),
 
 
 
@@ -98,7 +98,7 @@
    * included in a compare request did not match the targeted entry.
    */
   COMPARE_FALSE(LDAPResultCode.COMPARE_FALSE,
-                MSGID_RESULT_COMPARE_FALSE),
+                INFO_RESULT_COMPARE_FALSE.get()),
 
 
 
@@ -107,7 +107,7 @@
    * included in a compare request did match the targeted entry.
    */
   COMPARE_TRUE(LDAPResultCode.COMPARE_TRUE,
-               MSGID_RESULT_COMPARE_TRUE),
+               INFO_RESULT_COMPARE_TRUE.get()),
 
 
 
@@ -116,7 +116,7 @@
    * attempt failed because it referenced an invalid SASL mechanism.
    */
   AUTH_METHOD_NOT_SUPPORTED(LDAPResultCode.AUTH_METHOD_NOT_SUPPORTED,
-                            MSGID_RESULT_AUTH_METHOD_NOT_SUPPORTED),
+                         INFO_RESULT_AUTH_METHOD_NOT_SUPPORTED.get()),
 
 
 
@@ -126,14 +126,14 @@
    * completed a strong form of authentication.
    */
   STRONG_AUTH_REQUIRED(LDAPResultCode.STRONG_AUTH_REQUIRED,
-                       MSGID_RESULT_STRONG_AUTH_REQUIRED),
+                       INFO_RESULT_STRONG_AUTH_REQUIRED.get()),
 
 
 
   /**
    * The result code that indicates that a referral was encountered.
    */
-  REFERRAL(LDAPResultCode.REFERRAL, MSGID_RESULT_REFERRAL),
+  REFERRAL(LDAPResultCode.REFERRAL, INFO_RESULT_REFERRAL.get()),
 
 
 
@@ -143,7 +143,7 @@
    * exceeded.
    */
   ADMIN_LIMIT_EXCEEDED(LDAPResultCode.ADMIN_LIMIT_EXCEEDED,
-                       MSGID_RESULT_ADMIN_LIMIT_EXCEEDED),
+                       INFO_RESULT_ADMIN_LIMIT_EXCEEDED.get()),
 
 
 
@@ -154,7 +154,7 @@
    */
   UNAVAILABLE_CRITICAL_EXTENSION(
        LDAPResultCode.UNAVAILABLE_CRITICAL_EXTENSION,
-       MSGID_RESULT_UNAVAILABLE_CRITICAL_EXTENSION),
+       INFO_RESULT_UNAVAILABLE_CRITICAL_EXTENSION.get()),
 
 
 
@@ -164,7 +164,7 @@
    * communication between the client and the server.
    */
   CONFIDENTIALITY_REQUIRED(LDAPResultCode.CONFIDENTIALITY_REQUIRED,
-                           MSGID_RESULT_CONFIDENTIALITY_REQUIRED),
+                          INFO_RESULT_CONFIDENTIALITY_REQUIRED.get()),
 
 
 
@@ -173,7 +173,7 @@
    * multi-stage SASL bind operations.
    */
   SASL_BIND_IN_PROGRESS(LDAPResultCode.SASL_BIND_IN_PROGRESS,
-                        MSGID_RESULT_SASL_BIND_IN_PROGRESS),
+                        INFO_RESULT_SASL_BIND_IN_PROGRESS.get()),
 
 
 
@@ -183,7 +183,7 @@
    * did not exist in the specified entry.
    */
   NO_SUCH_ATTRIBUTE(LDAPResultCode.NO_SUCH_ATTRIBUTE,
-                    MSGID_RESULT_NO_SUCH_ATTRIBUTE),
+                    INFO_RESULT_NO_SUCH_ATTRIBUTE.get()),
 
 
 
@@ -193,7 +193,7 @@
    * the server schema.
    */
   UNDEFINED_ATTRIBUTE_TYPE(LDAPResultCode.UNDEFINED_ATTRIBUTE_TYPE,
-                           MSGID_RESULT_UNDEFINED_ATTRIBUTE_TYPE),
+                          INFO_RESULT_UNDEFINED_ATTRIBUTE_TYPE.get()),
 
 
 
@@ -203,7 +203,7 @@
    * matching against an attribute.
    */
   INAPPROPRIATE_MATCHING(LDAPResultCode.INAPPROPRIATE_MATCHING,
-                         MSGID_RESULT_INAPPROPRIATE_MATCHING),
+                         INFO_RESULT_INAPPROPRIATE_MATCHING.get()),
 
 
 
@@ -213,7 +213,7 @@
    * the server.
    */
   CONSTRAINT_VIOLATION(LDAPResultCode.CONSTRAINT_VIOLATION,
-                       MSGID_RESULT_CONSTRAINT_VIOLATION),
+                       INFO_RESULT_CONSTRAINT_VIOLATION.get()),
 
 
 
@@ -223,7 +223,7 @@
    * existing attribute or attribute value in the target entry.
    */
   ATTRIBUTE_OR_VALUE_EXISTS(LDAPResultCode.ATTRIBUTE_OR_VALUE_EXISTS,
-                            MSGID_RESULT_ATTRIBUTE_OR_VALUE_EXISTS),
+                         INFO_RESULT_ATTRIBUTE_OR_VALUE_EXISTS.get()),
 
 
 
@@ -232,7 +232,7 @@
    * failed because it violated the syntax for a specified attribute.
    */
   INVALID_ATTRIBUTE_SYNTAX(LDAPResultCode.INVALID_ATTRIBUTE_SYNTAX,
-                           MSGID_RESULT_INVALID_ATTRIBUTE_SYNTAX),
+                          INFO_RESULT_INVALID_ATTRIBUTE_SYNTAX.get()),
 
 
 
@@ -241,7 +241,7 @@
    * failed because it referenced an entry that does not exist.
    */
   NO_SUCH_OBJECT(LDAPResultCode.NO_SUCH_OBJECT,
-                 MSGID_RESULT_NO_SUCH_OBJECT),
+                 INFO_RESULT_NO_SUCH_OBJECT.get()),
 
 
 
@@ -251,7 +251,7 @@
    * alias.
    */
   ALIAS_PROBLEM(LDAPResultCode.ALIAS_PROBLEM,
-                MSGID_RESULT_ALIAS_PROBLEM),
+                INFO_RESULT_ALIAS_PROBLEM.get()),
 
 
 
@@ -261,7 +261,7 @@
    * or malformed DN.
    */
   INVALID_DN_SYNTAX(LDAPResultCode.INVALID_DN_SYNTAX,
-                    MSGID_RESULT_INVALID_DN_SYNTAX),
+                    INFO_RESULT_INVALID_DN_SYNTAX.get()),
 
 
 
@@ -271,7 +271,7 @@
    */
   ALIAS_DEREFERENCING_PROBLEM(
        LDAPResultCode.ALIAS_DEREFERENCING_PROBLEM,
-       MSGID_RESULT_ALIAS_DEREFERENCING_PROBLEM),
+       INFO_RESULT_ALIAS_DEREFERENCING_PROBLEM.get()),
 
 
 
@@ -282,7 +282,7 @@
    */
   INAPPROPRIATE_AUTHENTICATION(
        LDAPResultCode.INAPPROPRIATE_AUTHENTICATION,
-       MSGID_RESULT_INAPPROPRIATE_AUTHENTICATION),
+       INFO_RESULT_INAPPROPRIATE_AUTHENTICATION.get()),
 
 
 
@@ -292,7 +292,7 @@
    * credentials.
    */
   INVALID_CREDENTIALS(LDAPResultCode.INVALID_CREDENTIALS,
-                      MSGID_RESULT_INVALID_CREDENTIALS),
+                      INFO_RESULT_INVALID_CREDENTIALS.get()),
 
 
 
@@ -302,7 +302,7 @@
    */
   INSUFFICIENT_ACCESS_RIGHTS(
        LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
-       MSGID_RESULT_INSUFFICIENT_ACCESS_RIGHTS),
+       INFO_RESULT_INSUFFICIENT_ACCESS_RIGHTS.get()),
 
 
 
@@ -310,7 +310,7 @@
    * The result code that indicates that the server is too busy to
    * process the requested operation.
    */
-  BUSY(LDAPResultCode.BUSY, MSGID_RESULT_BUSY),
+  BUSY(LDAPResultCode.BUSY, INFO_RESULT_BUSY.get()),
 
 
 
@@ -319,7 +319,8 @@
    * one or more required resources were not available for use in
    * processing the request.
    */
-  UNAVAILABLE(LDAPResultCode.UNAVAILABLE, MSGID_RESULT_UNAVAILABLE),
+  UNAVAILABLE(LDAPResultCode.UNAVAILABLE,
+          INFO_RESULT_UNAVAILABLE.get()),
 
 
 
@@ -328,7 +329,7 @@
    * perform the requested operation.
    */
   UNWILLING_TO_PERFORM(LDAPResultCode.UNWILLING_TO_PERFORM,
-                       MSGID_RESULT_UNWILLING_TO_PERFORM),
+                       INFO_RESULT_UNWILLING_TO_PERFORM.get()),
 
 
 
@@ -336,7 +337,8 @@
    * The result code that indicates that a referral or chaining
    * loop was detected while processing the request.
    */
-  LOOP_DETECT(LDAPResultCode.LOOP_DETECT, MSGID_RESULT_LOOP_DETECT),
+  LOOP_DETECT(LDAPResultCode.LOOP_DETECT,
+          INFO_RESULT_LOOP_DETECT.get()),
 
 
 
@@ -345,7 +347,7 @@
    * VLV request control without a server-side sort control.
    */
   SORT_CONTROL_MISSING(LDAPResultCode.SORT_CONTROL_MISSING,
-                       MSGID_RESULT_SORT_CONTROL_MISSING),
+                       INFO_RESULT_SORT_CONTROL_MISSING.get()),
 
 
 
@@ -354,7 +356,7 @@
    * VLV request control with an invalid offset.
    */
   OFFSET_RANGE_ERROR(LDAPResultCode.OFFSET_RANGE_ERROR,
-                     MSGID_RESULT_OFFSET_RANGE_ERROR),
+                     INFO_RESULT_OFFSET_RANGE_ERROR.get()),
 
 
 
@@ -364,7 +366,7 @@
    * configuration.
    */
   NAMING_VIOLATION(LDAPResultCode.NAMING_VIOLATION,
-                   MSGID_RESULT_NAMING_VIOLATION),
+                   INFO_RESULT_NAMING_VIOLATION.get()),
 
 
 
@@ -374,7 +376,7 @@
    * the server schema.
    */
   OBJECTCLASS_VIOLATION(LDAPResultCode.OBJECTCLASS_VIOLATION,
-                        MSGID_RESULT_OBJECTCLASS_VIOLATION),
+                        INFO_RESULT_OBJECTCLASS_VIOLATION.get()),
 
 
 
@@ -383,7 +385,7 @@
    * not allowed for non-leaf entries.
    */
   NOT_ALLOWED_ON_NONLEAF(LDAPResultCode.NOT_ALLOWED_ON_NONLEAF,
-                         MSGID_RESULT_NOT_ALLOWED_ON_NONLEAF),
+                         INFO_RESULT_NOT_ALLOWED_ON_NONLEAF.get()),
 
 
 
@@ -392,7 +394,7 @@
    * not allowed on an RDN attribute.
    */
   NOT_ALLOWED_ON_RDN(LDAPResultCode.NOT_ALLOWED_ON_RDN,
-                     MSGID_RESULT_NOT_ALLOWED_ON_RDN),
+                     INFO_RESULT_NOT_ALLOWED_ON_RDN.get()),
 
 
 
@@ -402,7 +404,7 @@
    * with an entry that already exists.
    */
   ENTRY_ALREADY_EXISTS(LDAPResultCode.ENTRY_ALREADY_EXISTS,
-                       MSGID_RESULT_ENTRY_ALREADY_EXISTS),
+                       INFO_RESULT_ENTRY_ALREADY_EXISTS.get()),
 
 
 
@@ -413,7 +415,7 @@
    */
   OBJECTCLASS_MODS_PROHIBITED(
        LDAPResultCode.OBJECTCLASS_MODS_PROHIBITED,
-       MSGID_RESULT_OBJECTCLASS_MODS_PROHIBITED),
+       INFO_RESULT_OBJECTCLASS_MODS_PROHIBITED.get()),
 
 
 
@@ -423,7 +425,7 @@
    * repositories.
    */
   AFFECTS_MULTIPLE_DSAS(LDAPResultCode.AFFECTS_MULTIPLE_DSAS,
-                        MSGID_RESULT_AFFECTS_MULTIPLE_DSAS),
+                        INFO_RESULT_AFFECTS_MULTIPLE_DSAS.get()),
 
 
 
@@ -433,7 +435,7 @@
    * list view control.
    */
   VIRTUAL_LIST_VIEW_ERROR(LDAPResultCode.VIRTUAL_LIST_VIEW_ERROR,
-                          MSGID_RESULT_VIRTUAL_LIST_VIEW_ERROR),
+                          INFO_RESULT_VIRTUAL_LIST_VIEW_ERROR.get()),
 
 
 
@@ -441,7 +443,7 @@
    * The result code that should be used if no other result code is
    * appropriate.
    */
-  OTHER(LDAPResultCode.OTHER, MSGID_RESULT_OTHER),
+  OTHER(LDAPResultCode.OTHER, INFO_RESULT_OTHER.get()),
 
 
 
@@ -450,7 +452,7 @@
    * connection is lost.  This should not be used over protocol.
    */
   CLIENT_SIDE_SERVER_DOWN(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
-                          MSGID_RESULT_CLIENT_SIDE_SERVER_DOWN),
+                          INFO_RESULT_CLIENT_SIDE_SERVER_DOWN.get()),
 
 
 
@@ -460,7 +462,7 @@
    * protocol.
    */
   CLIENT_SIDE_LOCAL_ERROR(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
-                          MSGID_RESULT_CLIENT_SIDE_LOCAL_ERROR),
+                          INFO_RESULT_CLIENT_SIDE_LOCAL_ERROR.get()),
 
 
 
@@ -471,7 +473,7 @@
    */
   CLIENT_SIDE_ENCODING_ERROR(
        LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
-       MSGID_RESULT_CLIENT_SIDE_ENCODING_ERROR),
+       INFO_RESULT_CLIENT_SIDE_ENCODING_ERROR.get()),
 
 
 
@@ -482,7 +484,7 @@
    */
   CLIENT_SIDE_DECODING_ERROR(
        LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
-       MSGID_RESULT_CLIENT_SIDE_DECODING_ERROR),
+       INFO_RESULT_CLIENT_SIDE_DECODING_ERROR.get()),
 
 
 
@@ -491,7 +493,7 @@
    * timeout occurs.  This should not be used over protocol.
    */
   CLIENT_SIDE_TIMEOUT(LDAPResultCode.CLIENT_SIDE_TIMEOUT,
-                      MSGID_RESULT_CLIENT_SIDE_TIMEOUT),
+                      INFO_RESULT_CLIENT_SIDE_TIMEOUT.get()),
 
 
 
@@ -501,7 +503,7 @@
    * not be used over protocol.
    */
   CLIENT_SIDE_AUTH_UNKNOWN(LDAPResultCode.CLIENT_SIDE_AUTH_UNKNOWN,
-                           MSGID_RESULT_CLIENT_SIDE_AUTH_UNKNOWN),
+                         INFO_RESULT_CLIENT_SIDE_AUTH_UNKNOWN.get()),
 
 
 
@@ -511,7 +513,7 @@
    * protocol.
    */
   CLIENT_SIDE_FILTER_ERROR(LDAPResultCode.CLIENT_SIDE_FILTER_ERROR,
-                           MSGID_RESULT_CLIENT_SIDE_FILTER_ERROR),
+                         INFO_RESULT_CLIENT_SIDE_FILTER_ERROR.get()),
 
 
 
@@ -522,7 +524,7 @@
    */
   CLIENT_SIDE_USER_CANCELLED(
        LDAPResultCode.CLIENT_SIDE_USER_CANCELLED,
-       MSGID_RESULT_CLIENT_SIDE_USER_CANCELLED),
+       INFO_RESULT_CLIENT_SIDE_USER_CANCELLED.get()),
 
 
 
@@ -532,7 +534,7 @@
    * protocol.
    */
   CLIENT_SIDE_PARAM_ERROR(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
-                          MSGID_RESULT_CLIENT_SIDE_PARAM_ERROR),
+                          INFO_RESULT_CLIENT_SIDE_PARAM_ERROR.get()),
 
 
 
@@ -542,7 +544,7 @@
    * This should not be used over protocol.
    */
   CLIENT_SIDE_NO_MEMORY(LDAPResultCode.CLIENT_SIDE_NO_MEMORY,
-                        MSGID_RESULT_CLIENT_SIDE_NO_MEMORY),
+                        INFO_RESULT_CLIENT_SIDE_NO_MEMORY.get()),
 
 
 
@@ -551,7 +553,7 @@
    * cannot be established.  This should not be used over protocol.
    */
   CLIENT_SIDE_CONNECT_ERROR(LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR,
-                            MSGID_RESULT_CLIENT_SIDE_CONNECT_ERROR),
+                         INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get()),
 
 
 
@@ -561,7 +563,7 @@
    * protocol.
    */
   CLIENT_SIDE_NOT_SUPPORTED(LDAPResultCode.CLIENT_SIDE_NOT_SUPPORTED,
-                            MSGID_RESULT_CLIENT_SIDE_NOT_SUPPORTED),
+                         INFO_RESULT_CLIENT_SIDE_NOT_SUPPORTED.get()),
 
 
 
@@ -572,7 +574,7 @@
    */
   CLIENT_SIDE_CONTROL_NOT_FOUND(
        LDAPResultCode.CLIENT_SIDE_CONTROL_NOT_FOUND,
-       MSGID_RESULT_CLIENT_SIDE_CONTROL_NOT_FOUND),
+       INFO_RESULT_CLIENT_SIDE_CONTROL_NOT_FOUND.get()),
 
 
 
@@ -583,7 +585,7 @@
    */
   CLIENT_SIDE_NO_RESULTS_RETURNED(
        LDAPResultCode.CLIENT_SIDE_NO_RESULTS_RETURNED,
-       MSGID_RESULT_CLIENT_SIDE_NO_RESULTS_RETURNED),
+       INFO_RESULT_CLIENT_SIDE_NO_RESULTS_RETURNED.get()),
 
 
 
@@ -593,7 +595,7 @@
    */
   CLIENT_SIDE_MORE_RESULTS_TO_RETURN(
        LDAPResultCode.CLIENT_SIDE_MORE_RESULTS_TO_RETURN,
-       MSGID_RESULT_CLIENT_SIDE_MORE_RESULTS_TO_RETURN),
+       INFO_RESULT_CLIENT_SIDE_MORE_RESULTS_TO_RETURN.get()),
 
 
 
@@ -602,7 +604,7 @@
    * loop is detected.  This should not be used over protocol.
    */
   CLIENT_SIDE_CLIENT_LOOP(LDAPResultCode.CLIENT_SIDE_CLIENT_LOOP,
-                          MSGID_RESULT_CLIENT_SIDE_CLIENT_LOOP),
+                          INFO_RESULT_CLIENT_SIDE_CLIENT_LOOP.get()),
 
 
 
@@ -612,7 +614,7 @@
    */
   CLIENT_SIDE_REFERRAL_LIMIT_EXCEEDED(
        LDAPResultCode.CLIENT_SIDE_REFERRAL_LIMIT_EXCEEDED,
-       MSGID_RESULT_CLIENT_SIDE_REFERRAL_LIMIT_EXCEEDED),
+       INFO_RESULT_CLIENT_SIDE_REFERRAL_LIMIT_EXCEEDED.get()),
 
 
 
@@ -620,7 +622,7 @@
    * The result code that indicates that a cancel request was
    * successful, or that the specified operation was canceled.
    */
-  CANCELED(LDAPResultCode.CANCELED, MSGID_RESULT_CANCELED),
+  CANCELED(LDAPResultCode.CANCELED, INFO_RESULT_CANCELED.get()),
 
 
 
@@ -630,7 +632,7 @@
    * already completed.
    */
   NO_SUCH_OPERATION(LDAPResultCode.NO_SUCH_OPERATION,
-                    MSGID_RESULT_NO_SUCH_OPERATION),
+                    INFO_RESULT_NO_SUCH_OPERATION.get()),
 
 
 
@@ -639,7 +641,7 @@
    * unsuccessful because processing on the targeted operation had
    * already reached a point at which it could not be canceled.
    */
-  TOO_LATE(LDAPResultCode.TOO_LATE, MSGID_RESULT_TOO_LATE),
+  TOO_LATE(LDAPResultCode.TOO_LATE, INFO_RESULT_TOO_LATE.get()),
 
 
 
@@ -649,7 +651,7 @@
    * not be canceled.
    */
   CANNOT_CANCEL(LDAPResultCode.CANNOT_CANCEL,
-                MSGID_RESULT_CANNOT_CANCEL),
+                INFO_RESULT_CANNOT_CANCEL.get()),
 
 
 
@@ -658,7 +660,7 @@
    * assertion control failed to match the target entry.
    */
   ASSERTION_FAILED(LDAPResultCode.ASSERTION_FAILED,
-                   MSGID_RESULT_ASSERTION_FAILED),
+                   INFO_RESULT_ASSERTION_FAILED.get()),
 
 
 
@@ -667,7 +669,7 @@
    * the client to use the requested authorization.
    */
   AUTHORIZATION_DENIED(LDAPResultCode.AUTHORIZATION_DENIED,
-                       MSGID_RESULT_AUTHORIZATION_DENIED),
+                       INFO_RESULT_AUTHORIZATION_DENIED.get()),
 
 
 
@@ -677,19 +679,15 @@
    * the request included the LDAP No-Op control.
    */
   NO_OPERATION(LDAPResultCode.NO_OPERATION,
-               MSGID_RESULT_NO_OPERATION);
+               INFO_RESULT_NO_OPERATION.get());
 
 
 
   // The integer value for this result code.
   private int intValue;
 
-  // The unique ID that can be used to obtain the human-readable name
-  // for this result code.
-  private int resultCodeID;
-
   // The short human-readable name for this result code.
-  private String resultCodeName;
+  private Message resultCodeName;
 
 
 
@@ -698,15 +696,12 @@
    * identifier.
    *
    * @param  intValue      The integer value for this result code.
-   * @param  resultCodeID  The unique identifier that can be used to
-   *                       obtain the human-readable name for this
-   *                       result code.
+   * @param  name          The name for this result code.
    */
-  private ResultCode(int intValue, int resultCodeID)
+  private ResultCode(int intValue, Message name)
   {
     this.intValue       = intValue;
-    this.resultCodeID   = resultCodeID;
-    this.resultCodeName = null;
+    this.resultCodeName = name;
   }
 
 
@@ -877,31 +872,12 @@
 
 
   /**
-   * Retrieves the unique identifier that can be used to obtain the
-   * human-readable name for this result code.
-   *
-   * @return  The unique identifier that can be used to obtain the
-   *          human-readable name for this result code.
-   */
-  public int getResultCodeID()
-  {
-    return resultCodeID;
-  }
-
-
-
-  /**
    * Retrieves the short human-readable name for this result code.
    *
    * @return  The short human-readable name for this result code.
    */
-  public String getResultCodeName()
+  public Message getResultCodeName()
   {
-    if (resultCodeName == null)
-    {
-      resultCodeName = getMessage(resultCodeID);
-    }
-
     return resultCodeName;
   }
 
@@ -914,7 +890,7 @@
    */
   public String toString()
   {
-    return getResultCodeName();
+    return resultCodeName != null ? resultCodeName.toString() : null;
   }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/Schema.java b/opendj-sdk/opends/src/server/org/opends/server/types/Schema.java
index a22a547..2a75ff4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/Schema.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/Schema.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -55,9 +56,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.BackendMessages.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.BackendMessages.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -348,13 +348,11 @@
         {
           AttributeType conflictingType = attributeTypes.get(oid);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_ATTRIBUTE_OID;
-          String message =
-               getMessage(msgID, attributeType.getNameOrOID(), oid,
-                          conflictingType.getNameOrOID());
+          Message message = ERR_SCHEMA_CONFLICTING_ATTRIBUTE_OID.
+              get(attributeType.getNameOrOID(), oid,
+                  conflictingType.getNameOrOID());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         for (String name : attributeType.getNormalizedNames())
@@ -363,13 +361,11 @@
           {
             AttributeType conflictingType = attributeTypes.get(name);
 
-            int    msgID   = MSGID_SCHEMA_CONFLICTING_ATTRIBUTE_NAME;
-            String message =
-                 getMessage(msgID, attributeType.getNameOrOID(), name,
-                            conflictingType.getNameOrOID());
+            Message message = ERR_SCHEMA_CONFLICTING_ATTRIBUTE_NAME.
+                get(attributeType.getNameOrOID(), name,
+                    conflictingType.getNameOrOID());
             throw new DirectoryException(
-                           ResultCode.CONSTRAINT_VIOLATION, message,
-                           msgID);
+                           ResultCode.CONSTRAINT_VIOLATION, message);
           }
         }
       }
@@ -630,13 +626,11 @@
         {
           ObjectClass conflictingClass = objectClasses.get(oid);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_OBJECTCLASS_OID;
-          String message =
-               getMessage(msgID, objectClass.getNameOrOID(),
-                          oid, conflictingClass.getNameOrOID());
+          Message message = ERR_SCHEMA_CONFLICTING_OBJECTCLASS_OID.
+              get(objectClass.getNameOrOID(), oid,
+                  conflictingClass.getNameOrOID());
           throw new DirectoryException(
-                       ResultCode.CONSTRAINT_VIOLATION, message,
-                       msgID);
+                       ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         for (String name : objectClass.getNormalizedNames())
@@ -645,13 +639,11 @@
           {
             ObjectClass conflictingClass = objectClasses.get(name);
 
-            int msgID = MSGID_SCHEMA_CONFLICTING_OBJECTCLASS_NAME;
-            String message =
-                 getMessage(msgID, objectClass.getNameOrOID(), name,
-                            conflictingClass.getNameOrOID());
+            Message message = ERR_SCHEMA_CONFLICTING_OBJECTCLASS_NAME.
+                get(objectClass.getNameOrOID(), name,
+                    conflictingClass.getNameOrOID());
             throw new DirectoryException(
-                           ResultCode.CONSTRAINT_VIOLATION, message,
-                           msgID);
+                           ResultCode.CONSTRAINT_VIOLATION, message);
           }
         }
       }
@@ -801,13 +793,11 @@
         {
           AttributeSyntax conflictingSyntax = syntaxes.get(oid);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_SYNTAX_OID;
-          String message =
-               getMessage(msgID, syntax.getSyntaxName(),
-                          oid, conflictingSyntax.getSyntaxName());
+          Message message = ERR_SCHEMA_CONFLICTING_SYNTAX_OID.
+              get(syntax.getSyntaxName(), oid,
+                  conflictingSyntax.getSyntaxName());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
       }
 
@@ -971,13 +961,11 @@
           {
             MatchingRule conflictingRule = matchingRules.get(oid);
 
-            int    msgID   = MSGID_SCHEMA_CONFLICTING_MR_OID;
-            String message =
-                 getMessage(msgID, matchingRule.getNameOrOID(), oid,
-                            conflictingRule.getNameOrOID());
+            Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+                get(matchingRule.getNameOrOID(), oid,
+                    conflictingRule.getNameOrOID());
             throw new DirectoryException(
-                           ResultCode.CONSTRAINT_VIOLATION, message,
-                           msgID);
+                           ResultCode.CONSTRAINT_VIOLATION, message);
           }
 
           String name = matchingRule.getName();
@@ -988,13 +976,11 @@
             {
               MatchingRule conflictingRule = matchingRules.get(name);
 
-              int    msgID   = MSGID_SCHEMA_CONFLICTING_MR_NAME;
-              String message =
-                   getMessage(msgID, matchingRule.getOID(), name,
-                              conflictingRule.getOID());
+              Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+                  get(matchingRule.getOID(), name,
+                      conflictingRule.getOID());
               throw new DirectoryException(
-                             ResultCode.CONSTRAINT_VIOLATION, message,
-                             msgID);
+                            ResultCode.CONSTRAINT_VIOLATION, message);
             }
           }
         }
@@ -1150,13 +1136,11 @@
         {
           MatchingRule conflictingRule = matchingRules.get(oid);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_MR_OID;
-          String message =
-               getMessage(msgID, matchingRule.getNameOrOID(), oid,
-                          conflictingRule.getNameOrOID());
+          Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+              get(matchingRule.getNameOrOID(), oid,
+                  conflictingRule.getNameOrOID());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         String name = matchingRule.getName();
@@ -1167,13 +1151,11 @@
           {
             MatchingRule conflictingRule = matchingRules.get(name);
 
-            int    msgID   = MSGID_SCHEMA_CONFLICTING_MR_NAME;
-            String message =
-                 getMessage(msgID, matchingRule.getOID(), name,
-                            conflictingRule.getOID());
+            Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+                get(matchingRule.getOID(), name,
+                    conflictingRule.getOID());
             throw new DirectoryException(
-                           ResultCode.CONSTRAINT_VIOLATION, message,
-                           msgID);
+                           ResultCode.CONSTRAINT_VIOLATION, message);
           }
         }
       }
@@ -1308,13 +1290,11 @@
         {
           MatchingRule conflictingRule = matchingRules.get(oid);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_MR_OID;
-          String message =
-               getMessage(msgID, matchingRule.getNameOrOID(), oid,
-                          conflictingRule.getNameOrOID());
+          Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+              get(matchingRule.getNameOrOID(), oid,
+                  conflictingRule.getNameOrOID());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         String name = matchingRule.getName();
@@ -1325,13 +1305,11 @@
           {
             MatchingRule conflictingRule = matchingRules.get(name);
 
-            int    msgID   = MSGID_SCHEMA_CONFLICTING_MR_NAME;
-            String message =
-                 getMessage(msgID, matchingRule.getOID(), name,
-                            conflictingRule.getOID());
+            Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+                get(matchingRule.getOID(), name,
+                    conflictingRule.getOID());
             throw new DirectoryException(
-                           ResultCode.CONSTRAINT_VIOLATION, message,
-                           msgID);
+                           ResultCode.CONSTRAINT_VIOLATION, message);
           }
         }
       }
@@ -1467,13 +1445,11 @@
         {
           MatchingRule conflictingRule = matchingRules.get(oid);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_MR_OID;
-          String message =
-               getMessage(msgID, matchingRule.getNameOrOID(), oid,
-                          conflictingRule.getNameOrOID());
+          Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+              get(matchingRule.getNameOrOID(), oid,
+                  conflictingRule.getNameOrOID());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         String name = matchingRule.getName();
@@ -1484,13 +1460,11 @@
           {
             MatchingRule conflictingRule = matchingRules.get(name);
 
-            int    msgID   = MSGID_SCHEMA_CONFLICTING_MR_NAME;
-            String message =
-                 getMessage(msgID, matchingRule.getOID(), name,
-                            conflictingRule.getOID());
+            Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+                get(matchingRule.getOID(), name,
+                    conflictingRule.getOID());
             throw new DirectoryException(
-                           ResultCode.CONSTRAINT_VIOLATION, message,
-                           msgID);
+                           ResultCode.CONSTRAINT_VIOLATION, message);
           }
         }
       }
@@ -1625,13 +1599,11 @@
         {
           MatchingRule conflictingRule = matchingRules.get(oid);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_MR_OID;
-          String message =
-               getMessage(msgID, matchingRule.getNameOrOID(), oid,
-                          conflictingRule.getNameOrOID());
+          Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+              get(matchingRule.getNameOrOID(), oid,
+                  conflictingRule.getNameOrOID());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         String name = matchingRule.getName();
@@ -1642,13 +1614,11 @@
           {
             MatchingRule conflictingRule = matchingRules.get(name);
 
-            int    msgID   = MSGID_SCHEMA_CONFLICTING_MR_NAME;
-            String message =
-                 getMessage(msgID, matchingRule.getOID(), name,
-                            conflictingRule.getOID());
+            Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+                get(matchingRule.getOID(), name,
+                    conflictingRule.getOID());
             throw new DirectoryException(
-                           ResultCode.CONSTRAINT_VIOLATION, message,
-                           msgID);
+                           ResultCode.CONSTRAINT_VIOLATION, message);
           }
         }
       }
@@ -1813,14 +1783,12 @@
           MatchingRuleUse conflictingUse =
                                matchingRuleUses.get(matchingRule);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_MATCHING_RULE_USE;
-          String message =
-               getMessage(msgID, matchingRuleUse.getName(),
-                          matchingRule.getNameOrOID(),
-                          conflictingUse.getName());
+          Message message = ERR_SCHEMA_CONFLICTING_MATCHING_RULE_USE.
+              get(matchingRuleUse.getName(),
+                  matchingRule.getNameOrOID(),
+                  conflictingUse.getName());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
       }
 
@@ -1965,13 +1933,12 @@
           DITContentRule conflictingRule =
                               ditContentRules.get(objectClass);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_DIT_CONTENT_RULE;
-          String message = getMessage(msgID, ditContentRule.getName(),
-                                      objectClass.getNameOrOID(),
-                                      conflictingRule.getName());
+          Message message = ERR_SCHEMA_CONFLICTING_DIT_CONTENT_RULE.
+              get(ditContentRule.getName(),
+                  objectClass.getNameOrOID(),
+                  conflictingRule.getName());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
       }
 
@@ -2168,15 +2135,13 @@
           DITStructureRule conflictingRule =
                ditStructureRulesByNameForm.get(nameForm);
 
-          int msgID =
-               MSGID_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_NAME_FORM;
-          String message =
-               getMessage(msgID, ditStructureRule.getNameOrRuleID(),
-                          nameForm.getNameOrOID(),
-                          conflictingRule.getNameOrRuleID());
+          Message message =
+              ERR_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_NAME_FORM.
+                get(ditStructureRule.getNameOrRuleID(),
+                    nameForm.getNameOrOID(),
+                    conflictingRule.getNameOrRuleID());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         if (ditStructureRulesByID.containsKey(ruleID))
@@ -2184,13 +2149,12 @@
           DITStructureRule conflictingRule =
                ditStructureRulesByID.get(ruleID);
 
-          int msgID = MSGID_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_ID;
-          String message =
-               getMessage(msgID, ditStructureRule.getNameOrRuleID(),
-                          ruleID, conflictingRule.getNameOrRuleID());
+          Message message =
+              ERR_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_ID.
+                get(ditStructureRule.getNameOrRuleID(), ruleID,
+                    conflictingRule.getNameOrRuleID());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
       }
 
@@ -2385,14 +2349,11 @@
           NameForm conflictingNameForm =
                nameFormsByOC.get(objectClass);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_NAME_FORM_OC;
-          String message =
-               getMessage(msgID, nameForm.getNameOrOID(),
-                          objectClass.getNameOrOID(),
-                          conflictingNameForm.getNameOrOID());
+          Message message = ERR_SCHEMA_CONFLICTING_NAME_FORM_OC.
+              get(nameForm.getNameOrOID(), objectClass.getNameOrOID(),
+                  conflictingNameForm.getNameOrOID());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         String oid = toLowerCase(nameForm.getOID());
@@ -2400,13 +2361,11 @@
         {
           NameForm conflictingNameForm = nameFormsByName.get(oid);
 
-          int    msgID   = MSGID_SCHEMA_CONFLICTING_NAME_FORM_OID;
-          String message =
-               getMessage(msgID, nameForm.getNameOrOID(), oid,
-                          conflictingNameForm.getNameOrOID());
+          Message message = ERR_SCHEMA_CONFLICTING_NAME_FORM_OID.
+              get(nameForm.getNameOrOID(), oid,
+                  conflictingNameForm.getNameOrOID());
           throw new DirectoryException(
-                         ResultCode.CONSTRAINT_VIOLATION, message,
-                         msgID);
+                         ResultCode.CONSTRAINT_VIOLATION, message);
         }
 
         for (String name : nameForm.getNames().keySet())
@@ -2415,13 +2374,11 @@
           {
             NameForm conflictingNameForm = nameFormsByName.get(name);
 
-            int    msgID   = MSGID_SCHEMA_CONFLICTING_NAME_FORM_NAME;
-            String message =
-                 getMessage(msgID, nameForm.getNameOrOID(), oid,
-                            conflictingNameForm.getNameOrOID());
+            Message message = ERR_SCHEMA_CONFLICTING_NAME_FORM_NAME.
+                get(nameForm.getNameOrOID(), oid,
+                    conflictingNameForm.getNameOrOID());
             throw new DirectoryException(
-                           ResultCode.CONSTRAINT_VIOLATION, message,
-                           msgID);
+                           ResultCode.CONSTRAINT_VIOLATION, message);
           }
         }
       }
@@ -2595,13 +2552,13 @@
       // 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.getMessageID() ==
-          MSGID_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE)
+      if (de.getMessageObject().getDescriptor().equals(
+          ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE))
       {
-        int    msgID   = MSGID_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE;
-        String message = getMessage(msgID, element.getDefinition());
+        Message message = ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE.
+            get(element.getDefinition());
         throw new DirectoryException(de.getResultCode(), message,
-                                     msgID, de);
+                                     de);
       }
 
 
@@ -2633,10 +2590,10 @@
     {
       // FIXME -- Is this an appropriate maximum depth for detecting
       // circular references?
-      int    msgID   = MSGID_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE;
-      String message = getMessage(msgID, element.getDefinition());
+      Message message = ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE.get(
+          element.getDefinition());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -2958,11 +2915,8 @@
       // changes could potentially be sent to the other servers again
       // when this server is restarted, which shouldn't hurt anything.
       // Still, we should log a warning message.
-      logError(ErrorLogCategory.SCHEMA,
-               ErrorLogSeverity.SEVERE_WARNING,
-               MSGID_SCHEMA_CANNOT_WRITE_CONCAT_SCHEMA_FILE,
-               String.valueOf(concatFilePath),
-               getExceptionMessage(e));
+      logError(ERR_SCHEMA_CANNOT_WRITE_CONCAT_SCHEMA_FILE.get(
+          String.valueOf(concatFilePath), getExceptionMessage(e)));
     }
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/SearchFilter.java b/opendj-sdk/opends/src/server/org/opends/server/types/SearchFilter.java
index 056c53c..447924c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/SearchFilter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/SearchFilter.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types;
+import org.opends.messages.Message;
 
 
 
@@ -47,8 +48,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.util.ServerConstants.*;
 
@@ -537,11 +537,10 @@
   {
     if ((attributeType == null) && (matchingRuleID == null))
     {
-      int msgID =
-           MSGID_SEARCH_FILTER_CREATE_EXTENSIBLE_MATCH_NO_AT_OR_MR;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
-                                   msgID);
+      Message message =
+          ERR_SEARCH_FILTER_CREATE_EXTENSIBLE_MATCH_NO_AT_OR_MR.get();
+      throw new DirectoryException(
+              ResultCode.PROTOCOL_ERROR, message);
     }
 
     return new SearchFilter(FilterType.EXTENSIBLE_MATCH, null, null,
@@ -583,11 +582,10 @@
   {
     if ((attributeType == null) && (matchingRuleID == null))
     {
-      int msgID =
-           MSGID_SEARCH_FILTER_CREATE_EXTENSIBLE_MATCH_NO_AT_OR_MR;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
-                                   msgID);
+      Message message =
+          ERR_SEARCH_FILTER_CREATE_EXTENSIBLE_MATCH_NO_AT_OR_MR.get();
+      throw new DirectoryException(
+              ResultCode.PROTOCOL_ERROR, message);
     }
 
     return new SearchFilter(FilterType.EXTENSIBLE_MATCH, null, null,
@@ -616,10 +614,9 @@
   {
     if (filterString == null)
     {
-      int msgID = MSGID_SEARCH_FILTER_NULL;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
-                                   msgID);
+      Message message = ERR_SEARCH_FILTER_NULL.get();
+      throw new DirectoryException(
+              ResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -644,11 +641,10 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      int    msgID   = MSGID_SEARCH_FILTER_UNCAUGHT_EXCEPTION;
-      String message = getMessage(msgID, filterString,
-                                  String.valueOf(e));
+      Message message = ERR_SEARCH_FILTER_UNCAUGHT_EXCEPTION.get(
+          filterString, String.valueOf(e));
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
-                                   msgID, e);
+                                   e);
     }
   }
 
@@ -682,10 +678,9 @@
     int length = endPos - startPos;
     if (length <= 0)
     {
-      int msgID = MSGID_SEARCH_FILTER_NULL;
-      String message = getMessage(msgID);
-      throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
-                                   msgID);
+      Message message = ERR_SEARCH_FILTER_NULL.get();
+      throw new DirectoryException(
+              ResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -700,11 +695,10 @@
       }
       else
       {
-        int    msgID   = MSGID_SEARCH_FILTER_MISMATCHED_PARENTHESES;
-        String message = getMessage(msgID, filterString, startPos,
-                                    endPos);
+        Message message = ERR_SEARCH_FILTER_MISMATCHED_PARENTHESES.
+            get(filterString, startPos, endPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -744,11 +738,10 @@
 
     if (equalPos <= startPos)
     {
-      int    msgID   = MSGID_SEARCH_FILTER_NO_EQUAL_SIGN;
-      String message = getMessage(msgID, filterString, startPos,
-                                  endPos);
+      Message message = ERR_SEARCH_FILTER_NO_EQUAL_SIGN.get(
+          filterString, startPos, endPos);
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -873,11 +866,11 @@
             // comprise the binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString,
-                                          equalPos+i+1);
+              Message message =
+                  ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                    get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                           message, msgID);
+                                           message);
             }
 
             byte byteValue = 0;
@@ -937,12 +930,11 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString,
-                                            equalPos+i+1);
+                Message message =
+                    ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                      get(filterString, equalPos+i+1);
                 throw new DirectoryException(
-                               ResultCode.PROTOCOL_ERROR, message,
-                               msgID);
+                               ResultCode.PROTOCOL_ERROR, message);
             }
 
             switch (valueBytes[++i])
@@ -1001,12 +993,11 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString,
-                                            equalPos+i+1);
+                Message message =
+                    ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                      get(filterString, equalPos+i+1);
                 throw new DirectoryException(
-                               ResultCode.PROTOCOL_ERROR, message,
-                               msgID);
+                               ResultCode.PROTOCOL_ERROR, message);
             }
 
             valueBuffer.put(byteValue);
@@ -1072,11 +1063,10 @@
     {
       if (filterType == FilterType.NOT)
       {
-        int    msgID   = MSGID_SEARCH_FILTER_NOT_EXACTLY_ONE;
-        String message = getMessage(msgID, filterString, startPos,
-                                    endPos);
+        Message message = ERR_SEARCH_FILTER_NOT_EXACTLY_ONE.get(
+            filterString, startPos, endPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                     message, msgID);
+                                     message);
       }
       else
       {
@@ -1093,11 +1083,11 @@
     if ((filterString.charAt(startPos) != '(') ||
         (filterString.charAt(endPos-1) != ')'))
     {
-      int msgID = MSGID_SEARCH_FILTER_COMPOUND_MISSING_PARENTHESES;
-      String message = getMessage(msgID, filterString, startPos,
-                                  endPos);
-      throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
-                                   msgID);
+      Message message =
+          ERR_SEARCH_FILTER_COMPOUND_MISSING_PARENTHESES.
+            get(filterString, startPos, endPos);
+      throw new DirectoryException(
+              ResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -1130,20 +1120,20 @@
         }
         else if (pendingOpens < 0)
         {
-          int msgID =
-               MSGID_SEARCH_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS;
-          String message = getMessage(msgID, filterString, i);
+          Message message =
+              ERR_SEARCH_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS.
+                get(filterString, i);
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
       }
       else if (pendingOpens <= 0)
       {
-        int msgID = MSGID_SEARCH_FILTER_COMPOUND_MISSING_PARENTHESES;
-        String message = getMessage(msgID, filterString, startPos,
-                                    endPos);
+        Message message =
+            ERR_SEARCH_FILTER_COMPOUND_MISSING_PARENTHESES.
+              get(filterString, startPos, endPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                     message, msgID);
+                                     message);
       }
     }
 
@@ -1153,11 +1143,11 @@
     // empty.
     if (pendingOpens != 0)
     {
-      int msgID =
-           MSGID_SEARCH_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS;
-      String message = getMessage(msgID, filterString, openPos);
-      throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
-                                   msgID);
+      Message message =
+          ERR_SEARCH_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS.
+            get(filterString, openPos);
+      throw new DirectoryException(
+              ResultCode.PROTOCOL_ERROR, message);
     }
 
 
@@ -1166,11 +1156,10 @@
     {
       if (filterComponents.size() != 1)
       {
-        int    msgID   = MSGID_SEARCH_FILTER_NOT_EXACTLY_ONE;
-        String message = getMessage(msgID, filterString, startPos,
-                                    endPos);
+        Message message = ERR_SEARCH_FILTER_NOT_EXACTLY_ONE.get(
+            filterString, startPos, endPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                     message, msgID);
+                                     message);
       }
       SearchFilter notComponent = filterComponents.get(0);
       return new SearchFilter(filterType, null, notComponent, null,
@@ -1239,11 +1228,10 @@
     // If there were no asterisks, then this isn't a substring filter.
     if (asteriskPositions.isEmpty())
     {
-      int msgID = MSGID_SEARCH_FILTER_SUBSTRING_NO_ASTERISKS;
-      String message = getMessage(msgID, filterString, equalPos+1,
-                                  endPos);
-      throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
-                                   msgID);
+      Message message = ERR_SEARCH_FILTER_SUBSTRING_NO_ASTERISKS.get(
+          filterString, equalPos+1, endPos);
+      throw new DirectoryException(
+              ResultCode.PROTOCOL_ERROR, message);
     }
     else
     {
@@ -1274,11 +1262,11 @@
             // comprise the binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-              String message =
-                   getMessage(msgID, filterString, equalPos+i+1);
+              Message message =
+                  ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                    get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                           message, msgID);
+                                           message);
             }
 
             byte byteValue = 0;
@@ -1338,12 +1326,11 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString,
-                                            equalPos+i+1);
+                Message message =
+                    ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                      get(filterString, equalPos+i+1);
                 throw new DirectoryException(
-                               ResultCode.PROTOCOL_ERROR, message,
-                               msgID);
+                               ResultCode.PROTOCOL_ERROR, message);
             }
 
             switch (valueBytes[++i])
@@ -1402,12 +1389,11 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString,
-                                            equalPos+i+1);
+                Message message =
+                    ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                      get(filterString, equalPos+i+1);
                 throw new DirectoryException(
-                               ResultCode.PROTOCOL_ERROR, message,
-                               msgID);
+                               ResultCode.PROTOCOL_ERROR, message);
             }
 
             buffer.put(byteValue);
@@ -1450,11 +1436,11 @@
             // comprise the binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString,
-                                          equalPos+i+1);
+              Message message =
+                  ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                    get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                           message, msgID);
+                                           message);
             }
 
             byte byteValue = 0;
@@ -1514,12 +1500,11 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                int  msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString,
-                                            equalPos+i+1);
+                Message message =
+                    ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                      get(filterString, equalPos+i+1);
                 throw new DirectoryException(
-                               ResultCode.PROTOCOL_ERROR, message,
-                               msgID);
+                               ResultCode.PROTOCOL_ERROR, message);
             }
 
             switch (valueBytes[++i])
@@ -1578,12 +1563,11 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString,
-                                            equalPos+i+1);
+                Message message =
+                    ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                      get(filterString, equalPos+i+1);
                 throw new DirectoryException(
-                               ResultCode.PROTOCOL_ERROR, message,
-                               msgID);
+                               ResultCode.PROTOCOL_ERROR, message);
             }
 
             buffer.put(byteValue);
@@ -1634,11 +1618,11 @@
             // comprise the binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString,
-                                          equalPos+i+1);
+              Message message =
+                  ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                    get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                           message, msgID);
+                                           message);
             }
 
             byte byteValue = 0;
@@ -1698,12 +1682,11 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString,
-                                            equalPos+i+1);
+                Message message =
+                    ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                      get(filterString, equalPos+i+1);
                 throw new DirectoryException(
-                               ResultCode.PROTOCOL_ERROR, message,
-                               msgID);
+                               ResultCode.PROTOCOL_ERROR, message);
             }
 
             switch (valueBytes[++i])
@@ -1762,12 +1745,11 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-                String message = getMessage(msgID, filterString,
-                                            equalPos+i+1);
+                Message message =
+                    ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                      get(filterString, equalPos+i+1);
                 throw new DirectoryException(
-                               ResultCode.PROTOCOL_ERROR, message,
-                               msgID);
+                               ResultCode.PROTOCOL_ERROR, message);
             }
 
             buffer.put(byteValue);
@@ -1859,10 +1841,10 @@
       int colonPos = filterString.indexOf(':',startPos);
       if (colonPos < 0)
       {
-        int msgID = MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_COLON;
-        String message = getMessage(msgID, filterString, startPos);
+        Message message = ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_COLON.
+            get(filterString, startPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                     message, msgID);
+                                     message);
       }
 
 
@@ -1956,11 +1938,10 @@
           // comprise the binary value.
           if ((i + 2) >= valueBytes.length)
           {
-            int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-            String message = getMessage(msgID, filterString,
-                                        equalPos+i+1);
+            Message message = ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                get(filterString, equalPos+i+1);
             throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                         message, msgID);
+                                         message);
           }
 
           byte byteValue = 0;
@@ -2020,11 +2001,11 @@
               byteValue = (byte) 0xF0;
               break;
             default:
-              int msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString,
-                                          equalPos+i+1);
+              Message message =
+                  ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                    get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                           message, msgID);
+                                           message);
           }
 
           switch (valueBytes[++i])
@@ -2083,11 +2064,11 @@
               byteValue |= (byte) 0x0F;
               break;
             default:
-              int  msgID = MSGID_SEARCH_FILTER_INVALID_ESCAPED_BYTE;
-              String message = getMessage(msgID, filterString,
-                                          equalPos+i+1);
+              Message message =
+                  ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+                    get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                           message, msgID);
+                                           message);
           }
 
           valueBuffer.put(byteValue);
@@ -2116,10 +2097,11 @@
     {
       if (matchingRuleID == null)
       {
-        int msgID = MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR;
-        String message = getMessage(msgID, filterString, startPos);
+        Message message =
+            ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR.
+              get(filterString, startPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                     message, msgID);
+                                     message);
       }
       else
       {
@@ -2127,11 +2109,11 @@
                                toLowerCase(matchingRuleID));
         if (mr == null)
         {
-          int msgID = MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_SUCH_MR;
-          String message = getMessage(msgID, filterString, startPos,
-                                      matchingRuleID);
+          Message message =
+              ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_SUCH_MR.
+                get(filterString, startPos, matchingRuleID);
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
         else
         {
@@ -2306,13 +2288,10 @@
       case UNDEFINED:
         return false;
       default:
-        int msgID = MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE;
-        String message = getMessage(msgID,
-                                    String.valueOf(entry.getDN()),
-                                    toString(),
-                                    String.valueOf(result));
-        logError(ErrorLogCategory.REQUEST_HANDLING,
-                 ErrorLogSeverity.MILD_ERROR, message, msgID);
+        Message message = ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+            get(String.valueOf(entry.getDN()), toString(),
+                String.valueOf(result));
+        logError(message);
         return false;
     }
   }
@@ -2350,14 +2329,14 @@
         if (filterComponents == null)
         {
           // The set of subcomponents was null.  This is not allowed.
-          int msgID = MSGID_SEARCH_FILTER_COMPOUND_COMPONENTS_NULL;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      String.valueOf(completeFilter),
-                                      String.valueOf(filterType));
+          Message message =
+              ERR_SEARCH_FILTER_COMPOUND_COMPONENTS_NULL.
+                get(String.valueOf(entry.getDN()),
+                    String.valueOf(completeFilter),
+                    String.valueOf(filterType));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(),
-                         message, msgID);
+                         message);
         }
         else if (filterComponents.isEmpty())
         {
@@ -2379,13 +2358,12 @@
           // nesting too deep.
           if (depth >= MAX_NESTED_FILTER_DEPTH)
           {
-            int    msgID   = MSGID_SEARCH_FILTER_NESTED_TOO_DEEP;
-            String message = getMessage(msgID,
-                                  String.valueOf(entry.getDN()),
-                                  String.valueOf(completeFilter));
+            Message message = ERR_SEARCH_FILTER_NESTED_TOO_DEEP.
+                get(String.valueOf(entry.getDN()),
+                    String.valueOf(completeFilter));
             throw new DirectoryException(
                            DirectoryServer.getServerErrorResultCode(),
-                           message, msgID);
+                           message);
           }
 
           for (SearchFilter f : filterComponents)
@@ -2415,15 +2393,15 @@
                 }
                 return result;
               default:
-                int msgID = MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE;
-                String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      String.valueOf(completeFilter),
-                                      String.valueOf(result));
+                Message message =
+                    ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+                      get(String.valueOf(entry.getDN()),
+                          String.valueOf(completeFilter),
+                          String.valueOf(result));
                 throw new
                      DirectoryException(
                           DirectoryServer.getServerErrorResultCode(),
-                          message, msgID);
+                          message);
             }
           }
 
@@ -2443,14 +2421,14 @@
         if (filterComponents == null)
         {
           // The set of subcomponents was null.  This is not allowed.
-          int msgID = MSGID_SEARCH_FILTER_COMPOUND_COMPONENTS_NULL;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      String.valueOf(completeFilter),
-                                      String.valueOf(filterType));
+          Message message =
+              ERR_SEARCH_FILTER_COMPOUND_COMPONENTS_NULL.
+                get(String.valueOf(entry.getDN()),
+                    String.valueOf(completeFilter),
+                    String.valueOf(filterType));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(),
-                         message, msgID);
+                         message);
         }
         else if (filterComponents.isEmpty())
         {
@@ -2472,13 +2450,12 @@
           // nesting too deep.
           if (depth >= MAX_NESTED_FILTER_DEPTH)
           {
-            int    msgID   = MSGID_SEARCH_FILTER_NESTED_TOO_DEEP;
-            String message = getMessage(msgID,
-                                  String.valueOf(entry.getDN()),
-                                  String.valueOf(completeFilter));
+            Message message = ERR_SEARCH_FILTER_NESTED_TOO_DEEP.
+                get(String.valueOf(entry.getDN()),
+                    String.valueOf(completeFilter));
             throw new DirectoryException(
                            DirectoryServer.getServerErrorResultCode(),
-                           message, msgID);
+                           message);
           }
 
           ConditionResult result = ConditionResult.FALSE;
@@ -2509,15 +2486,15 @@
                 result = ConditionResult.UNDEFINED;
                 break;
               default:
-                int msgID = MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE;
-                String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      String.valueOf(completeFilter),
-                                      String.valueOf(result));
+                Message message =
+                    ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+                      get(String.valueOf(entry.getDN()),
+                          String.valueOf(completeFilter),
+                          String.valueOf(result));
                 throw new
                      DirectoryException(
                           DirectoryServer.getServerErrorResultCode(),
-                          message, msgID);
+                          message);
             }
           }
 
@@ -2537,13 +2514,12 @@
         if (notComponent == null)
         {
           // The NOT subcomponent was null.  This is not allowed.
-          int    msgID   = MSGID_SEARCH_FILTER_NOT_COMPONENT_NULL;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      String.valueOf(completeFilter));
+          Message message = ERR_SEARCH_FILTER_NOT_COMPONENT_NULL.
+              get(String.valueOf(entry.getDN()),
+                  String.valueOf(completeFilter));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(),
-                         message, msgID);
+                         message);
         }
         else
         {
@@ -2552,13 +2528,12 @@
           // that we don't go too deep.
           if (depth >= MAX_NESTED_FILTER_DEPTH)
           {
-            int    msgID   = MSGID_SEARCH_FILTER_NESTED_TOO_DEEP;
-            String message = getMessage(msgID,
-                                  String.valueOf(entry.getDN()),
-                                  String.valueOf(completeFilter));
+            Message message = ERR_SEARCH_FILTER_NESTED_TOO_DEEP.
+                get(String.valueOf(entry.getDN()),
+                    String.valueOf(completeFilter));
             throw new DirectoryException(
                            DirectoryServer.getServerErrorResultCode(),
-                           message, msgID);
+                           message);
           }
 
           ConditionResult result =
@@ -2594,15 +2569,14 @@
               }
               return ConditionResult.UNDEFINED;
             default:
-              int msgID = MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE;
-              String message =
-                   getMessage(msgID, String.valueOf(entry.getDN()),
-                              String.valueOf(completeFilter),
-                              String.valueOf(result));
+              Message message = ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+                  get(String.valueOf(entry.getDN()),
+                      String.valueOf(completeFilter),
+                      String.valueOf(result));
               throw new
                    DirectoryException(
                         DirectoryServer.getServerErrorResultCode(),
-                        message, msgID);
+                        message);
           }
         }
 
@@ -2611,24 +2585,22 @@
         // Make sure that an attribute type has been defined.
         if (attributeType == null)
         {
-          int msgID = MSGID_SEARCH_FILTER_EQUALITY_NO_ATTRIBUTE_TYPE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString());
+          Message message =
+              ERR_SEARCH_FILTER_EQUALITY_NO_ATTRIBUTE_TYPE.
+                get(String.valueOf(entry.getDN()), toString());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
         // Make sure that an assertion value has been defined.
         if (assertionValue == null)
         {
-          int msgID = MSGID_SEARCH_FILTER_EQUALITY_NO_ASSERTION_VALUE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString(),
-                                      attributeType.getNameOrOID());
+          Message message =
+              ERR_SEARCH_FILTER_EQUALITY_NO_ASSERTION_VALUE.
+                get(String.valueOf(entry.getDN()), toString(),
+                    attributeType.getNameOrOID());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
         // See if the entry has an attribute with the requested type.
@@ -2682,12 +2654,11 @@
         // Make sure that an attribute type has been defined.
         if (attributeType == null)
         {
-          int msgID = MSGID_SEARCH_FILTER_SUBSTRING_NO_ATTRIBUTE_TYPE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString());
+          Message message =
+              ERR_SEARCH_FILTER_SUBSTRING_NO_ATTRIBUTE_TYPE.
+                get(String.valueOf(entry.getDN()), toString());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
         // Make sure that at least one substring element has been
@@ -2696,14 +2667,12 @@
             (subFinalElement == null) &&
             ((subAnyElements == null) || subAnyElements.isEmpty()))
         {
-          int msgID =
-               MSGID_SEARCH_FILTER_SUBSTRING_NO_SUBSTRING_COMPONENTS;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString(),
-                                      attributeType.getNameOrOID());
+          Message message =
+              ERR_SEARCH_FILTER_SUBSTRING_NO_SUBSTRING_COMPONENTS.
+                get(String.valueOf(entry.getDN()), toString(),
+                    attributeType.getNameOrOID());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
         // See if the entry has an attribute with the requested type.
@@ -2770,25 +2739,22 @@
         // Make sure that an attribute type has been defined.
         if (attributeType == null)
         {
-          int msgID =
-               MSGID_SEARCH_FILTER_GREATER_OR_EQUAL_NO_ATTRIBUTE_TYPE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString());
+          Message message =
+              ERR_SEARCH_FILTER_GREATER_OR_EQUAL_NO_ATTRIBUTE_TYPE.
+                get(String.valueOf(entry.getDN()), toString());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
         // Make sure that an assertion value has been defined.
         if (assertionValue == null)
         {
-          int msgID = MSGID_SEARCH_FILTER_GREATER_OR_EQUAL_NO_VALUE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString(),
-                                      attributeType.getNameOrOID());
+          Message message =
+              ERR_SEARCH_FILTER_GREATER_OR_EQUAL_NO_VALUE.
+                get(String.valueOf(entry.getDN()), toString(),
+                    attributeType.getNameOrOID());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
         // See if the entry has an attribute with the requested type.
@@ -2853,26 +2819,22 @@
         // Make sure that an attribute type has been defined.
         if (attributeType == null)
         {
-          int msgID =
-               MSGID_SEARCH_FILTER_LESS_OR_EQUAL_NO_ATTRIBUTE_TYPE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString());
+          Message message =
+              ERR_SEARCH_FILTER_LESS_OR_EQUAL_NO_ATTRIBUTE_TYPE.
+                get(String.valueOf(entry.getDN()), toString());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
         // Make sure that an assertion value has been defined.
         if (assertionValue == null)
         {
-          int msgID =
-               MSGID_SEARCH_FILTER_LESS_OR_EQUAL_NO_ASSERTION_VALUE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString(),
-                                      attributeType.getNameOrOID());
+          Message message =
+              ERR_SEARCH_FILTER_LESS_OR_EQUAL_NO_ASSERTION_VALUE.
+                get(String.valueOf(entry.getDN()), toString(),
+                    attributeType.getNameOrOID());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
         // See if the entry has an attribute with the requested type.
@@ -2937,13 +2899,11 @@
         // Make sure that an attribute type has been defined.
         if (attributeType == null)
         {
-          int msgID =
-               MSGID_SEARCH_FILTER_PRESENCE_NO_ATTRIBUTE_TYPE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString());
+          Message message =
+              ERR_SEARCH_FILTER_PRESENCE_NO_ATTRIBUTE_TYPE.
+                get(String.valueOf(entry.getDN()), toString());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
 
@@ -2977,26 +2937,22 @@
         // Make sure that an attribute type has been defined.
         if (attributeType == null)
         {
-          int msgID =
-               MSGID_SEARCH_FILTER_APPROXIMATE_NO_ATTRIBUTE_TYPE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString());
+          Message message =
+              ERR_SEARCH_FILTER_APPROXIMATE_NO_ATTRIBUTE_TYPE.
+                get(String.valueOf(entry.getDN()), toString());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
         // Make sure that an assertion value has been defined.
         if (assertionValue == null)
         {
-          int msgID =
-               MSGID_SEARCH_FILTER_APPROXIMATE_NO_ASSERTION_VALUE;
-          String message = getMessage(msgID,
-                                      String.valueOf(entry.getDN()),
-                                      toString(),
-                                      attributeType.getNameOrOID());
+          Message message =
+              ERR_SEARCH_FILTER_APPROXIMATE_NO_ASSERTION_VALUE.
+                get(String.valueOf(entry.getDN()), toString(),
+                    attributeType.getNameOrOID());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                       message, msgID);
+                                       message);
         }
 
         // See if the entry has an attribute with the requested type.
@@ -3062,13 +3018,11 @@
 
       default:
         // This is an invalid filter type.
-        int msgID = MSGID_SEARCH_FILTER_INVALID_FILTER_TYPE;
-        String message = getMessage(msgID,
-                                    String.valueOf(entry.getDN()),
-                                    toString(),
-                                    filterType.toString());
+        Message message = ERR_SEARCH_FILTER_INVALID_FILTER_TYPE.
+            get(String.valueOf(entry.getDN()), toString(),
+                filterType.toString());
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                     message, msgID);
+                                     message);
     }
   }
 
@@ -3102,13 +3056,12 @@
     // determination.
     if (assertionValue == null)
     {
-      int msgID =
-           MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_ASSERTION_VALUE;
-      String message = getMessage(msgID,
-                                  String.valueOf(entry.getDN()),
-                                  String.valueOf(completeFilter));
+      Message message =
+          ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_ASSERTION_VALUE.
+            get(String.valueOf(entry.getDN()),
+                String.valueOf(completeFilter));
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                   message, msgID);
+                                   message);
     }
 
 
@@ -3135,13 +3088,12 @@
     {
       if (attributeType == null)
       {
-        int msgID =
-             MSGID_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_RULE_OR_TYPE;
-        String message = getMessage(msgID,
-                                    String.valueOf(entry.getDN()),
-                                    String.valueOf(completeFilter));
+        Message message =
+            ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_RULE_OR_TYPE.
+              get(String.valueOf(entry.getDN()),
+                  String.valueOf(completeFilter));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                     message, msgID);
+                                     message);
       }
       else
       {
@@ -3235,15 +3187,13 @@
                   result = ConditionResult.UNDEFINED;
                   break;
                 default:
-                  int msgID = MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE;
-                  String message =
-                       getMessage(msgID,
-                                  String.valueOf(entry.getDN()),
-                                  String.valueOf(completeFilter),
-                                  String.valueOf(r));
+                  Message message =
+                      ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+                        get(String.valueOf(entry.getDN()),
+                            String.valueOf(completeFilter),
+                            String.valueOf(r));
                   throw new DirectoryException(
-                                 ResultCode.PROTOCOL_ERROR, message,
-                                 msgID);
+                                 ResultCode.PROTOCOL_ERROR, message);
               }
             }
             catch (Exception e)
@@ -3285,15 +3235,13 @@
                   result = ConditionResult.UNDEFINED;
                   break;
                 default:
-                  int msgID = MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE;
-                  String message =
-                       getMessage(msgID,
-                               String.valueOf(entry.getDN()),
-                               String.valueOf(completeFilter),
-                               String.valueOf(r));
+                  Message message =
+                      ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+                        get(String.valueOf(entry.getDN()),
+                            String.valueOf(completeFilter),
+                            String.valueOf(r));
                   throw new DirectoryException(
-                                 ResultCode.PROTOCOL_ERROR, message,
-                                 msgID);
+                                 ResultCode.PROTOCOL_ERROR, message);
               }
             }
             catch (Exception e)
@@ -3330,13 +3278,12 @@
               result = ConditionResult.UNDEFINED;
               break;
             default:
-              int msgID = MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE;
-              String message =
-                   getMessage(msgID, String.valueOf(entry.getDN()),
-                              String.valueOf(completeFilter),
-                              String.valueOf(r));
+              Message message = ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+                  get(String.valueOf(entry.getDN()),
+                      String.valueOf(completeFilter),
+                      String.valueOf(r));
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
-                                           message, msgID);
+                                           message);
           }
         }
         catch (Exception e)
@@ -3378,15 +3325,13 @@
                   result = ConditionResult.UNDEFINED;
                   break;
                 default:
-                  int msgID = MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE;
-                  String message =
-                       getMessage(msgID,
-                                  String.valueOf(entry.getDN()),
-                                  String.valueOf(completeFilter),
-                                  String.valueOf(r));
+                  Message message =
+                      ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+                        get(String.valueOf(entry.getDN()),
+                            String.valueOf(completeFilter),
+                            String.valueOf(r));
                   throw new DirectoryException(
-                                 ResultCode.PROTOCOL_ERROR, message,
-                                 msgID);
+                                 ResultCode.PROTOCOL_ERROR, message);
               }
             }
             catch (Exception e)
@@ -3441,15 +3386,13 @@
                   result = ConditionResult.UNDEFINED;
                   break;
                 default:
-                  int msgID = MSGID_SEARCH_FILTER_INVALID_RESULT_TYPE;
-                  String message =
-                       getMessage(msgID,
-                                  String.valueOf(entry.getDN()),
-                                  String.valueOf(completeFilter),
-                                  String.valueOf(r));
+                  Message message =
+                      ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+                        get(String.valueOf(entry.getDN()),
+                            String.valueOf(completeFilter),
+                            String.valueOf(r));
                   throw new DirectoryException(
-                                 ResultCode.PROTOCOL_ERROR, message,
-                                 msgID);
+                                 ResultCode.PROTOCOL_ERROR, message);
               }
             }
           }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/SortKey.java b/opendj-sdk/opends/src/server/org/opends/server/types/SortKey.java
index 1087f6c..6bf2731 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/SortKey.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/SortKey.java
@@ -30,10 +30,6 @@
 
 import org.opends.server.api.OrderingMatchingRule;
 
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.StaticUtils.*;
-
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/SortOrder.java b/opendj-sdk/opends/src/server/org/opends/server/types/SortOrder.java
index 419d91f..74f52af 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/SortOrder.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/SortOrder.java
@@ -27,13 +27,6 @@
 package org.opends.server.types;
 
 
-
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.util.StaticUtils.*;
-
-
-
 /**
  * This class defines a data structure that defines a set of sort
  * criteria that may be used to order entries in a set of search
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/operation/InProgressOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/operation/InProgressOperation.java
index e74e469..c9e2cc9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/operation/InProgressOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/operation/InProgressOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types.operation;
+import org.opends.messages.Message;
 
 
 
@@ -35,6 +36,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.ResultCode;
 
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -96,7 +98,7 @@
    *
    * @return  The error message for this operation.
    */
-  public StringBuilder getErrorMessage();
+  public MessageBuilder getErrorMessage();
 
 
 
@@ -105,7 +107,7 @@
    *
    * @param  errorMessage  The error message for this operation.
    */
-  public void setErrorMessage(StringBuilder errorMessage);
+  public void setErrorMessage(MessageBuilder errorMessage);
 
 
 
@@ -115,9 +117,8 @@
    * and then add the provided message.
    *
    * @param  message  The message to append to the error message
-   *                  buffer.
    */
-  public void appendErrorMessage(String message);
+  public void appendErrorMessage(Message message);
 
 
 
@@ -129,7 +130,7 @@
    *
    * @return  The additional log message for this operation.
    */
-  public StringBuilder getAdditionalLogMessage();
+  public MessageBuilder getAdditionalLogMessage();
 
 
 
@@ -142,7 +143,7 @@
    *                               operation.
    */
   public void setAdditionalLogMessage(
-                   StringBuilder additionalLogMessage);
+                   MessageBuilder additionalLogMessage);
 
 
 
@@ -153,7 +154,7 @@
    * @param  message  The message that should be appended to the
    *                  additional log information for this operation.
    */
-  public void appendAdditionalLogMessage(String message);
+  public void appendAdditionalLogMessage(Message message);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PluginOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PluginOperation.java
index bdc9f8b..eb6b0f9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PluginOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PluginOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types.operation;
+import org.opends.messages.Message;
 
 
 
@@ -82,14 +83,10 @@
    * @param  message           The message to send to the client.  It
    *                           may be <CODE>null</CODE> if no
    *                           notification is to be sent.
-   * @param  messageID         The unique identifier associated with
-   *                           the message to send to the client.  It
-   *                           may be -1 if no notification is to be
-   *                           sent.
    */
   public void disconnectClient(DisconnectReason disconnectReason,
                                boolean sendNotification,
-                               String message, int messageID);
+                               Message message);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostOperationBindOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostOperationBindOperation.java
index 4478d61..87e7eba 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostOperationBindOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostOperationBindOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types.operation;
+import org.opends.messages.Message;
 
 
 
@@ -166,30 +167,17 @@
    *          authentication failed, or <CODE>null</CODE> if none is
    *          available.
    */
-  public String getAuthFailureReason();
-
-
-
-  /**
-   * Retrieves the unique identifier for the authentication failure
-   * reason, if available.
-   *
-   * @return  The unique identifier for the authentication failure
-   *          reason, or zero if none is available.
-   */
-  public int getAuthFailureID();
+  public Message getAuthFailureReason();
 
 
 
   /**
    * Specifies the reason that the authentication failed.
    *
-   * @param  id      The unique identifier for the authentication
-   *                 failure reason.
    * @param  reason  A human-readable message providing the reason
    *                 that the authentication failed.
    */
-  public void setAuthFailureReason(int id, String reason);
+  public void setAuthFailureReason(Message reason);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostOperationOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostOperationOperation.java
index 7a94606..4e99b67 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostOperationOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostOperationOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types.operation;
+import org.opends.messages.Message;
 
 
 
@@ -35,6 +36,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.ResultCode;
 
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -94,7 +96,7 @@
    *
    * @return  The error message for this operation.
    */
-  public StringBuilder getErrorMessage();
+  public MessageBuilder getErrorMessage();
 
 
 
@@ -103,7 +105,7 @@
    *
    * @param  errorMessage  The error message for this operation.
    */
-  public void setErrorMessage(StringBuilder errorMessage);
+  public void setErrorMessage(MessageBuilder errorMessage);
 
 
 
@@ -113,9 +115,8 @@
    * and then add the provided message.
    *
    * @param  message  The message to append to the error message
-   *                  buffer.
    */
-  public void appendErrorMessage(String message);
+  public void appendErrorMessage(Message message);
 
 
 
@@ -127,7 +128,7 @@
    *
    * @return  The additional log message for this operation.
    */
-  public StringBuilder getAdditionalLogMessage();
+  public MessageBuilder getAdditionalLogMessage();
 
 
 
@@ -140,7 +141,7 @@
    *                               operation.
    */
   public void setAdditionalLogMessage(
-                   StringBuilder additionalLogMessage);
+                   MessageBuilder additionalLogMessage);
 
 
 
@@ -151,7 +152,7 @@
    * @param  message  The message that should be appended to the
    *                  additional log information for this operation.
    */
-  public void appendAdditionalLogMessage(String message);
+  public void appendAdditionalLogMessage(Message message);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostResponseBindOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostResponseBindOperation.java
index eb0789d..f0a0ad6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostResponseBindOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostResponseBindOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types.operation;
+import org.opends.messages.Message;
 
 
 
@@ -154,18 +155,7 @@
    *          authentication failed, or <CODE>null</CODE> if none is
    *          available.
    */
-  public String getAuthFailureReason();
-
-
-
-  /**
-   * Retrieves the unique identifier for the authentication failure
-   * reason, if available.
-   *
-   * @return  The unique identifier for the authentication failure
-   *          reason, or zero if none is available.
-   */
-  public int getAuthFailureID();
+  public Message getAuthFailureReason();
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostResponseOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostResponseOperation.java
index c68754a..f598a57 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostResponseOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PostResponseOperation.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types.operation;
-
+import org.opends.messages.MessageBuilder;
 
 
 import java.util.List;
@@ -61,7 +61,7 @@
    *
    * @return  The error message for this operation.
    */
-  public StringBuilder getErrorMessage();
+  public MessageBuilder getErrorMessage();
 
 
 
@@ -73,7 +73,7 @@
    *
    * @return  The additional log message for this operation.
    */
-  public StringBuilder getAdditionalLogMessage();
+  public MessageBuilder getAdditionalLogMessage();
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreOperationBindOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreOperationBindOperation.java
index 55abb8a..b64677a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreOperationBindOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreOperationBindOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types.operation;
+import org.opends.messages.Message;
 
 
 
@@ -133,12 +134,10 @@
   /**
    * Specifies the reason that the authentication failed.
    *
-   * @param  id      The unique identifier for the authentication
-   *                 failure reason.
    * @param  reason  A human-readable message providing the reason
    *                 that the authentication failed.
    */
-  public void setAuthFailureReason(int id, String reason);
+  public void setAuthFailureReason(Message reason);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreOperationOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreOperationOperation.java
index d7a523e..75e189d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreOperationOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreOperationOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types.operation;
+import org.opends.messages.Message;
 
 
 
@@ -35,6 +36,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.ResultCode;
 
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -94,7 +96,7 @@
    *
    * @return  The error message for this operation.
    */
-  public StringBuilder getErrorMessage();
+  public MessageBuilder getErrorMessage();
 
 
 
@@ -103,7 +105,7 @@
    *
    * @param  errorMessage  The error message for this operation.
    */
-  public void setErrorMessage(StringBuilder errorMessage);
+  public void setErrorMessage(MessageBuilder errorMessage);
 
 
 
@@ -115,7 +117,7 @@
    * @param  message  The message to append to the error message
    *                  buffer.
    */
-  public void appendErrorMessage(String message);
+  public void appendErrorMessage(Message message);
 
 
 
@@ -127,7 +129,7 @@
    *
    * @return  The additional log message for this operation.
    */
-  public StringBuilder getAdditionalLogMessage();
+  public MessageBuilder getAdditionalLogMessage();
 
 
 
@@ -137,10 +139,9 @@
    * the client.
    *
    * @param  additionalLogMessage  The additional log message for this
-   *                               operation.
    */
   public void setAdditionalLogMessage(
-                   StringBuilder additionalLogMessage);
+                   MessageBuilder additionalLogMessage);
 
 
 
@@ -151,7 +152,7 @@
    * @param  message  The message that should be appended to the
    *                  additional log information for this operation.
    */
-  public void appendAdditionalLogMessage(String message);
+  public void appendAdditionalLogMessage(Message message);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreParseBindOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreParseBindOperation.java
index 2389dfd..10bf504 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreParseBindOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreParseBindOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types.operation;
+import org.opends.messages.Message;
 
 
 
@@ -170,11 +171,9 @@
   /**
    * Specifies the reason that the authentication failed.
    *
-   * @param  id      The unique identifier for the authentication
-   *                 failure reason.
    * @param  reason  A human-readable message providing the reason
    *                 that the authentication failed.
    */
-  public void setAuthFailureReason(int id, String reason);
+  public void setAuthFailureReason(Message reason);
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreParseOperation.java b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreParseOperation.java
index 27c0f6c..ea04d35 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreParseOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/operation/PreParseOperation.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.types.operation;
+import org.opends.messages.Message;
 
 
 
@@ -35,6 +36,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.ResultCode;
 
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -116,7 +118,7 @@
    *
    * @return  The error message for this operation.
    */
-  public StringBuilder getErrorMessage();
+  public MessageBuilder getErrorMessage();
 
 
 
@@ -125,7 +127,7 @@
    *
    * @param  errorMessage  The error message for this operation.
    */
-  public void setErrorMessage(StringBuilder errorMessage);
+  public void setErrorMessage(MessageBuilder errorMessage);
 
 
 
@@ -137,7 +139,7 @@
    * @param  message  The message to append to the error message
    *                  buffer.
    */
-  public void appendErrorMessage(String message);
+  public void appendErrorMessage(Message message);
 
 
 
@@ -149,7 +151,7 @@
    *
    * @return  The additional log message for this operation.
    */
-  public StringBuilder getAdditionalLogMessage();
+  public MessageBuilder getAdditionalLogMessage();
 
 
 
@@ -159,10 +161,9 @@
    * the client.
    *
    * @param  additionalLogMessage  The additional log message for this
-   *                               operation.
    */
   public void setAdditionalLogMessage(
-                   StringBuilder additionalLogMessage);
+                   MessageBuilder additionalLogMessage);
 
 
 
@@ -173,7 +174,7 @@
    * @param  message  The message that should be appended to the
    *                  additional log information for this operation.
    */
-  public void appendAdditionalLogMessage(String message);
+  public void appendAdditionalLogMessage(Message message);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/Base64.java b/opendj-sdk/opends/src/server/org/opends/server/util/Base64.java
index cf715fc..f666887 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/Base64.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/Base64.java
@@ -25,11 +25,11 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.util.Validator.*;
 
 import java.nio.ByteBuffer;
@@ -132,9 +132,8 @@
     int length = encodedData.length();
     if ((length % 4) != 0)
     {
-      int    msgID   = MSGID_BASE64_DECODE_INVALID_LENGTH;
-      String message = getMessage(msgID, encodedData);
-      throw new ParseException(message, 0);
+      Message message = ERR_BASE64_DECODE_INVALID_LENGTH.get(encodedData);
+      throw new ParseException(message.toString(), 0);
     }
 
 
@@ -354,10 +353,9 @@
             }
             break;
           default:
-            int msgID = MSGID_BASE64_DECODE_INVALID_CHARACTER;
-            String message = getMessage(msgID, encodedData,
-                                        encodedData.charAt(i+j));
-            throw new ParseException(message, i+j);
+            Message message = ERR_BASE64_DECODE_INVALID_CHARACTER.get(
+                encodedData, encodedData.charAt(i+j));
+            throw new ParseException(message.toString(), i+j);
         }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/EMailMessage.java b/opendj-sdk/opends/src/server/org/opends/server/util/EMailMessage.java
index 2396b51..1a6ec8b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/EMailMessage.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/EMailMessage.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util;
+import org.opends.messages.Message;
 
 
 
@@ -35,7 +36,6 @@
 import java.util.Properties;
 import javax.activation.DataHandler;
 import javax.activation.FileDataSource;
-import javax.mail.Message;
 import javax.mail.MessagingException;
 import javax.mail.SendFailedException;
 import javax.mail.Session;
@@ -50,8 +50,8 @@
 import org.opends.server.types.DebugLogLevel;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -83,7 +83,7 @@
   private String subject;
 
   // The body for the mail message.
-  private StringBuilder body;
+  private MessageBuilder body;
 
 
 
@@ -102,7 +102,7 @@
     recipients = new ArrayList<String>();
     recipients.add(recipient);
 
-    body         = new StringBuilder();
+    body         = new MessageBuilder();
     attachments  = new LinkedList<MimeBodyPart>();
     bodyMIMEType = "text/plain";
   }
@@ -123,7 +123,7 @@
     this.recipients = recipients;
     this.subject    = subject;
 
-    body         = new StringBuilder();
+    body         = new MessageBuilder();
     attachments  = new LinkedList<MimeBodyPart>();
     bodyMIMEType = "text/plain";
   }
@@ -221,7 +221,7 @@
    *
    * @return  The body for this message.
    */
-  public StringBuilder getBody()
+  public MessageBuilder getBody()
   {
     return body;
   }
@@ -233,7 +233,7 @@
    *
    * @param  body  The body for this message.
    */
-  public void setBody(StringBuilder body)
+  public void setBody(MessageBuilder body)
   {
     this.body = body;
   }
@@ -243,11 +243,11 @@
   /**
    * Specifies the body for this message.
    *
-   * @param  bodyString  The body for this message.
+   * @param  body  The body for this message.
    */
-  public void setBody(String bodyString)
+  public void setBody(Message body)
   {
-    body = new StringBuilder(bodyString);
+    this.body = new MessageBuilder(body);
   }
 
 
@@ -365,10 +365,9 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, me);
         }
 
-        int msgID = MSGID_EMAILMSG_INVALID_SENDER_ADDRESS;
-        String msg = getMessage(msgID, String.valueOf(sender),
-                                me.getMessage());
-        throw new MessagingException(msg, me);
+        Message msg = ERR_EMAILMSG_INVALID_SENDER_ADDRESS.get(
+            String.valueOf(sender), me.getMessage());
+        throw new MessagingException(msg.toString(), me);
       }
 
 
@@ -391,13 +390,14 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, me);
           }
 
-          int msgID = MSGID_EMAILMSG_INVALID_RECIPIENT_ADDRESS;
-          String msg = getMessage(msgID, String.valueOf(recipient),
-                                  me.getMessage());
-          throw new MessagingException(msg, me);
+          Message msg = ERR_EMAILMSG_INVALID_RECIPIENT_ADDRESS.get(
+              String.valueOf(recipient), me.getMessage());
+          throw new MessagingException(msg.toString(), me);
         }
       }
-      message.setRecipients(Message.RecipientType.TO, recipientAddresses);
+      message.setRecipients(
+              javax.mail.Message.RecipientType.TO,
+              recipientAddresses);
 
 
       // If we have any attachments, then the whole thing needs to be
@@ -456,9 +456,8 @@
     // Otherwise, throw a generic exception.
     if (sendException == null)
     {
-      int    msgID   = MSGID_EMAILMSG_CANNOT_SEND;
-      String message = getMessage(msgID);
-      throw new MessagingException(message);
+      Message message = ERR_EMAILMSG_CANNOT_SEND.get();
+      throw new MessagingException(message.toString());
     }
     else
     {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/EmbeddedUtils.java b/opendj-sdk/opends/src/server/org/opends/server/util/EmbeddedUtils.java
index d2e9119..bf5c1dc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/EmbeddedUtils.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/EmbeddedUtils.java
@@ -33,8 +33,8 @@
 import org.opends.server.types.DirectoryEnvironmentConfig;
 import org.opends.server.types.InitializationException;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
+import org.opends.messages.Message;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -76,9 +76,8 @@
   {
     if (DirectoryServer.isRunning())
     {
-      int    msgID   = MSGID_EMBEDUTILS_SERVER_ALREADY_RUNNING;
-      String message = getMessage(msgID);
-      throw new InitializationException(msgID, message);
+      throw new InitializationException(
+              ERR_EMBEDUTILS_SERVER_ALREADY_RUNNING.get());
     }
 
     DirectoryServer directoryServer = DirectoryServer.reinitialize(config);
@@ -93,7 +92,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, String reason)
+  public static void stopServer(String className, Message reason)
   {
     DirectoryServer.shutDown(className, reason);
   }
@@ -110,7 +109,7 @@
    * @param  config     The environment configuration to use for the new server
    *                    instance.
    */
-  public static void restartServer(String className, String reason,
+  public static void restartServer(String className, Message reason,
                                    DirectoryEnvironmentConfig config)
   {
     DirectoryServer.restart(className, reason, config);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/ExpirationCheckTrustManager.java b/opendj-sdk/opends/src/server/org/opends/server/util/ExpirationCheckTrustManager.java
index efb439e..3032943 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/ExpirationCheckTrustManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/ExpirationCheckTrustManager.java
@@ -35,13 +35,11 @@
 import java.util.Date;
 import javax.net.ssl.X509TrustManager;
 
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
 
 import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
-
+import static org.opends.messages.UtilityMessages.*;
+import org.opends.messages.Message;
 
 
 /**
@@ -95,21 +93,17 @@
       }
       catch (CertificateExpiredException cee)
       {
-        int msgID = MSGID_EXPCHECK_TRUSTMGR_CLIENT_CERT_EXPIRED;
-        String message = getMessage(msgID, c.getSubjectDN().getName(),
-                                    String.valueOf(c.getNotAfter()));
-        logError(ErrorLogCategory.CONNECTION_HANDLING,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = ERR_EXPCHECK_TRUSTMGR_CLIENT_CERT_EXPIRED.get(
+            c.getSubjectDN().getName(), String.valueOf(c.getNotAfter()));
+        logError(message);
 
         throw cee;
       }
       catch (CertificateNotYetValidException cnyve)
       {
-        int msgID = MSGID_EXPCHECK_TRUSTMGR_CLIENT_CERT_NOT_YET_VALID;
-        String message = getMessage(msgID, c.getSubjectDN().getName(),
-                                    String.valueOf(c.getNotBefore()));
-        logError(ErrorLogCategory.CONNECTION_HANDLING,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = ERR_EXPCHECK_TRUSTMGR_CLIENT_CERT_NOT_YET_VALID.get(
+            c.getSubjectDN().getName(), String.valueOf(c.getNotBefore()));
+        logError(message);
 
         throw cnyve;
       }
@@ -144,21 +138,17 @@
       }
       catch (CertificateExpiredException cee)
       {
-        int msgID = MSGID_EXPCHECK_TRUSTMGR_SERVER_CERT_EXPIRED;
-        String message = getMessage(msgID, c.getSubjectDN().getName(),
-                                    String.valueOf(c.getNotAfter()));
-        logError(ErrorLogCategory.CONNECTION_HANDLING,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = ERR_EXPCHECK_TRUSTMGR_SERVER_CERT_EXPIRED.get(
+            c.getSubjectDN().getName(), String.valueOf(c.getNotAfter()));
+        logError(message);
 
         throw cee;
       }
       catch (CertificateNotYetValidException cnyve)
       {
-        int msgID = MSGID_EXPCHECK_TRUSTMGR_SERVER_CERT_NOT_YET_VALID;
-        String message = getMessage(msgID, c.getSubjectDN().getName(),
-                                    String.valueOf(c.getNotBefore()));
-        logError(ErrorLogCategory.CONNECTION_HANDLING,
-                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        Message message = ERR_EXPCHECK_TRUSTMGR_SERVER_CERT_NOT_YET_VALID.get(
+            c.getSubjectDN().getName(), String.valueOf(c.getNotBefore()));
+        logError(message);
 
         throw cnyve;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/LDIFException.java b/opendj-sdk/opends/src/server/org/opends/server/util/LDIFException.java
index 85794ee..aedb16c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/LDIFException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/LDIFException.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util;
+import org.opends.messages.Message;
 
 
 
@@ -57,23 +58,18 @@
   // The line number of the last line read from the LDIF source.
   private final long lineNumber;
 
-  // The unique message ID for the associated message.
-  private final int messageID;
-
 
 
   /**
    * Creates a new LDIF exception with the provided information.
    *
-   * @param  messageID  The unique message ID for the provided message.
    * @param  message    The message to use for this LDIF exception.
    */
-  public LDIFException(int messageID, String message)
+  public LDIFException(Message message)
   {
     super(message);
 
 
-    this.messageID     = messageID;
     lineNumber         = -1;
     canContinueReading = true;
   }
@@ -83,16 +79,14 @@
   /**
    * Creates a new LDIF exception with the provided information.
    *
-   * @param  messageID  The unique message ID for the provided message.
    * @param  message    The message to use for this LDIF exception.
    * @param  cause      The underlying cause that triggered this LDIF exception.
    */
-  public LDIFException(int messageID, String message, Throwable cause)
+  public LDIFException(Message message, Throwable cause)
   {
     super(message, cause);
 
 
-    this.messageID     = messageID;
     lineNumber         = -1;
     canContinueReading = true;
   }
@@ -102,20 +96,18 @@
   /**
    * Creates a new LDIF exception with the provided information.
    *
-   * @param  messageID           The unique message ID for the provided message.
    * @param  message             The message to use for this LDIF exception.
    * @param  lineNumber          The line number of the last line read from the
    *                             LDIF source.
    * @param  canContinueReading  Indicates whether it is possible to continue
    *                             reading from the LDIF input source.
    */
-  public LDIFException(int messageID, String message, long lineNumber,
+  public LDIFException(Message message, long lineNumber,
                        boolean canContinueReading)
   {
     super(message);
 
 
-    this.messageID          = messageID;
     this.lineNumber         = lineNumber;
     this.canContinueReading = canContinueReading;
   }
@@ -126,7 +118,6 @@
    * Creates a new configuration exception with the provided message and
    * underlying cause.
    *
-   * @param  messageID           The unique message ID for the provided message.
    * @param  message             The message to use for this LDIF exception.
    * @param  canContinueReading  Indicates whether it is possible to continue
    *                             reading from the LDIF input source.
@@ -135,13 +126,12 @@
    * @param  cause               The underlying cause that triggered this LDIF
    *                             exception.
    */
-  public LDIFException(int messageID, String message, long lineNumber,
+  public LDIFException(Message message, long lineNumber,
                        boolean canContinueReading, Throwable cause)
   {
     super(message, cause);
 
 
-    this.messageID          = messageID;
     this.lineNumber         = lineNumber;
     this.canContinueReading = canContinueReading;
   }
@@ -149,18 +139,6 @@
 
 
   /**
-   * Retrieves the message ID for this exception.
-   *
-   * @return  The message ID for this exception.
-   */
-  public int getMessageID()
-  {
-    return messageID;
-  }
-
-
-
-  /**
    * Retrieves the line number of the last line read from the LDIF source.
    *
    * @return  The line number of the last line read from the LDIF source.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/LDIFReader.java b/opendj-sdk/opends/src/server/org/opends/server/util/LDIFReader.java
index 91268dc..cb270b7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/LDIFReader.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/LDIFReader.java
@@ -25,14 +25,14 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util;
-
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.util.StaticUtils.toLowerCase;
 import static org.opends.server.util.Validator.*;
 
@@ -62,8 +62,8 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.ModificationType;
 import org.opends.server.types.ObjectClass;
@@ -224,9 +224,7 @@
                     entryDN);
         }
         entriesRead++;
-        int    msgID   = MSGID_LDIF_SKIP;
-        String message = getMessage(msgID, String.valueOf(entryDN),
-            lastEntryLineNumber);
+        Message message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
         logToSkipWriter(lines, message);
         entriesIgnored++;
         continue;
@@ -273,9 +271,7 @@
                 "that should be included based on the include and exclude " +
                 "filters.", entryDN);
           }
-          int    msgID   = MSGID_LDIF_SKIP;
-          String message = getMessage(msgID, String.valueOf(entryDN),
-              lastEntryLineNumber);
+          Message message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
           logToSkipWriter(lines, message);
           entriesIgnored++;
           continue;
@@ -288,10 +284,10 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT;
-        String message = getMessage(msgID, String.valueOf(entry.getDN()),
-                                    lastEntryLineNumber, String.valueOf(e));
-        throw new LDIFException(msgID, message, lastEntryLineNumber, true, e);
+        Message message = ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT.
+            get(String.valueOf(entry.getDN()), lastEntryLineNumber,
+                String.valueOf(e));
+        throw new LDIFException(message, lastEntryLineNumber, true, e);
       }
 
 
@@ -302,9 +298,7 @@
              pluginConfigManager.invokeLDIFImportPlugins(importConfig, entry);
         if (! pluginResult.continueEntryProcessing())
         {
-          int    msgID   = MSGID_LDIF_SKIP;
-          String message = getMessage(msgID, String.valueOf(entryDN),
-              lastEntryLineNumber);
+          Message message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
           logToSkipWriter(lines, message);
           entriesIgnored++;
           continue;
@@ -316,16 +310,16 @@
       // appropriate to do so.
       if (checkSchema)
       {
-        StringBuilder invalidReason = new StringBuilder();
+        MessageBuilder invalidReason = new MessageBuilder();
         if (! entry.conformsToSchema(null, false, true, false, invalidReason))
         {
-          int    msgID   = MSGID_LDIF_SCHEMA_VIOLATION;
-          String message = getMessage(msgID, String.valueOf(entryDN),
-                                      lastEntryLineNumber,
-                                      invalidReason.toString());
+          Message message = ERR_LDIF_SCHEMA_VIOLATION.get(
+                  String.valueOf(entryDN),
+                  lastEntryLineNumber,
+                  invalidReason.toString());
           logToRejectWriter(lines, message);
           entriesRejected++;
-          throw new LDIFException(msgID, message, lastEntryLineNumber, true);
+          throw new LDIFException(message, lastEntryLineNumber, true);
         }
       }
 
@@ -396,10 +390,9 @@
           entry = parseModifyDNChangeRecordEntry(entryDN, lines);
         } else
         {
-          int msgID = MSGID_LDIF_INVALID_CHANGETYPE_ATTRIBUTE;
-          String message = getMessage(msgID, changeType,
-            "add, delete, modify, moddn, modrdn");
-          throw new LDIFException(msgID, message, lastEntryLineNumber, false);
+          Message message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
+              changeType, "add, delete, modify, moddn, modrdn");
+          throw new LDIFException(message, lastEntryLineNumber, false);
         }
       } else
       {
@@ -409,10 +402,9 @@
           entry = parseAddChangeRecordEntry(entryDN, lines);
         } else
         {
-          int msgID = MSGID_LDIF_INVALID_CHANGETYPE_ATTRIBUTE;
-          String message = getMessage(msgID, null,
-            "add, delete, modify, moddn, modrdn");
-          throw new LDIFException(msgID, message, lastEntryLineNumber, false);
+          Message message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
+              null, "add, delete, modify, moddn, modrdn");
+          throw new LDIFException(message, lastEntryLineNumber, false);
         }
       }
 
@@ -497,10 +489,10 @@
         }
         else
         {
-          int    msgID   = MSGID_LDIF_INVALID_LEADING_SPACE;
-          String message = getMessage(msgID, lineNumber, line);
+          Message message =
+                  ERR_LDIF_INVALID_LEADING_SPACE.get(lineNumber, line);
           logToRejectWriter(lines, message);
-          throw new LDIFException(msgID, message, lineNumber, false);
+          throw new LDIFException(message, lineNumber, false);
         }
       }
       else
@@ -550,12 +542,12 @@
     int colonPos = line.indexOf(":");
     if (colonPos <= 0)
     {
-      int    msgID   = MSGID_LDIF_NO_ATTR_NAME;
-      String message = getMessage(msgID, lastEntryLineNumber, line.toString());
+      Message message =
+              ERR_LDIF_NO_ATTR_NAME.get(lastEntryLineNumber, line.toString());
 
       logToRejectWriter(lines, message);
 
-      throw new LDIFException(msgID, message, lastEntryLineNumber, true);
+      throw new LDIFException(message, lastEntryLineNumber, true);
     }
 
     String attrName = toLowerCase(line.substring(0, colonPos));
@@ -566,12 +558,12 @@
     }
     else if (! attrName.equals("dn"))
     {
-      int    msgID   = MSGID_LDIF_NO_DN;
-      String message = getMessage(msgID, lastEntryLineNumber, line.toString());
+      Message message =
+              ERR_LDIF_NO_DN.get(lastEntryLineNumber, line.toString());
 
       logToRejectWriter(lines, message);
 
-      throw new LDIFException(msgID, message, lastEntryLineNumber, true);
+      throw new LDIFException(message, lastEntryLineNumber, true);
     }
 
 
@@ -609,13 +601,14 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_LDIF_COULD_NOT_BASE64_DECODE_DN;
-        String message = getMessage(msgID, lastEntryLineNumber, line,
-                                    String.valueOf(e));
+        Message message =
+                ERR_LDIF_COULD_NOT_BASE64_DECODE_DN.get(
+                        lastEntryLineNumber, line,
+                        String.valueOf(e));
 
         logToRejectWriter(lines, message);
 
-        throw new LDIFException(msgID, message, lastEntryLineNumber, true, e);
+        throw new LDIFException(message, lastEntryLineNumber, true, e);
       }
 
       try
@@ -629,13 +622,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        int    msgID   = MSGID_LDIF_INVALID_DN;
-        String message = getMessage(msgID, lastEntryLineNumber, line.toString(),
-                                    de.getErrorMessage());
+        Message message = ERR_LDIF_INVALID_DN.get(
+                lastEntryLineNumber, line.toString(),
+                de.getMessageObject());
 
         logToRejectWriter(lines, message);
 
-        throw new LDIFException(msgID, message, lastEntryLineNumber, true, de);
+        throw new LDIFException(message, lastEntryLineNumber, true, de);
       }
       catch (Exception e)
       {
@@ -644,13 +637,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_LDIF_INVALID_DN;
-        String message = getMessage(msgID, lastEntryLineNumber, line.toString(),
-                                    String.valueOf(e));
+        Message message = ERR_LDIF_INVALID_DN.get(
+                lastEntryLineNumber, line.toString(),
+                String.valueOf(e));
 
         logToRejectWriter(lines, message);
 
-        throw new LDIFException(msgID, message, lastEntryLineNumber, true, e);
+        throw new LDIFException(message, lastEntryLineNumber, true, e);
       }
     }
     else
@@ -676,13 +669,12 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        int    msgID   = MSGID_LDIF_INVALID_DN;
-        String message = getMessage(msgID, lastEntryLineNumber, line.toString(),
-                                    de.getErrorMessage());
+        Message message = ERR_LDIF_INVALID_DN.get(
+                lastEntryLineNumber, line.toString(), de.getMessageObject());
 
         logToRejectWriter(lines, message);
 
-        throw new LDIFException(msgID, message, lastEntryLineNumber, true, de);
+        throw new LDIFException(message, lastEntryLineNumber, true, de);
       }
       catch (Exception e)
       {
@@ -691,13 +683,13 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_LDIF_INVALID_DN;
-        String message = getMessage(msgID, lastEntryLineNumber, line.toString(),
-                                    String.valueOf(e));
+        Message message = ERR_LDIF_INVALID_DN.get(
+                lastEntryLineNumber, line.toString(),
+                String.valueOf(e));
 
         logToRejectWriter(lines, message);
 
-        throw new LDIFException(msgID, message, lastEntryLineNumber, true, e);
+        throw new LDIFException(message, lastEntryLineNumber, true, e);
       }
     }
   }
@@ -730,10 +722,10 @@
     int colonPos = line.indexOf(":");
     if (colonPos <= 0)
     {
-      int    msgID   = MSGID_LDIF_NO_ATTR_NAME;
-      String message = getMessage(msgID, lastEntryLineNumber, line.toString());
+      Message message = ERR_LDIF_NO_ATTR_NAME.get(
+              lastEntryLineNumber, line.toString());
       logToRejectWriter(lines, message);
-      throw new LDIFException(msgID, message, lastEntryLineNumber, true);
+      throw new LDIFException(message, lastEntryLineNumber, true);
     }
 
     String attrName = toLowerCase(line.substring(0, colonPos));
@@ -753,10 +745,9 @@
     int length = line.length();
     if (colonPos == (length-1))
     {
-      int msgID = MSGID_LDIF_INVALID_CHANGETYPE_ATTRIBUTE;
-      String message = getMessage(msgID, null,
-        "add, delete, modify, moddn, modrdn");
-      throw new LDIFException(msgID, message, lastEntryLineNumber, false );
+      Message message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
+          null, "add, delete, modify, moddn, modrdn");
+      throw new LDIFException(message, lastEntryLineNumber, false );
     }
 
     if (line.charAt(colonPos+1) == ':')
@@ -786,11 +777,11 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        int    msgID   = MSGID_LDIF_COULD_NOT_BASE64_DECODE_DN;
-        String message = getMessage(msgID, lastEntryLineNumber, line,
-                                    String.valueOf(e));
+        Message message = ERR_LDIF_COULD_NOT_BASE64_DECODE_DN.get(
+                lastEntryLineNumber, line,
+                String.valueOf(e));
         logToRejectWriter(lines, message);
-        throw new LDIFException(msgID, message, lastEntryLineNumber, true, e);
+        throw new LDIFException(message, lastEntryLineNumber, true, e);
       }
 
       return changeTypeStr;
@@ -878,9 +869,8 @@
 
       if (objectClasses.containsKey(objectClass))
       {
-        logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.MILD_WARNING,
-                 MSGID_LDIF_DUPLICATE_OBJECTCLASS, String.valueOf(entryDN),
-                 lastEntryLineNumber, ocName);
+        logError(WARN_LDIF_DUPLICATE_OBJECTCLASS.get(
+            String.valueOf(entryDN), lastEntryLineNumber, ocName));
       }
       else
       {
@@ -910,23 +900,22 @@
           (DirectoryServer.getSyntaxEnforcementPolicy() !=
                AcceptRejectWarn.ACCEPT))
       {
-        StringBuilder invalidReason = new StringBuilder(0);
+        MessageBuilder invalidReason = new MessageBuilder();
         if (! attrType.getSyntax().valueIsAcceptable(value, invalidReason))
         {
-          int    msgID   = MSGID_LDIF_VALUE_VIOLATES_SYNTAX;
-          String message = getMessage(msgID, String.valueOf(entryDN),
-                                      lastEntryLineNumber, value.stringValue(),
-                                      attrName, invalidReason.toString());
+          Message message = WARN_LDIF_VALUE_VIOLATES_SYNTAX.get(
+                  String.valueOf(entryDN),
+                  lastEntryLineNumber, value.stringValue(),
+                  attrName, invalidReason.toString());
           if (DirectoryServer.getSyntaxEnforcementPolicy() ==
                    AcceptRejectWarn.WARN)
           {
-            logError(ErrorLogCategory.SCHEMA, ErrorLogSeverity.MILD_WARNING,
-                     message, msgID);
+            logError(message);
           }
           else
           {
             logToRejectWriter(lines, message);
-            throw new LDIFException(msgID, message, lastEntryLineNumber,
+            throw new LDIFException(message, lastEntryLineNumber,
                                     true);
           }
         }
@@ -986,35 +975,35 @@
               {
                 if (v.getValue().equals(attributeValue.getValue()))
                 {
-                  int    msgID   = MSGID_LDIF_DUPLICATE_ATTR;
-                  String message = getMessage(msgID, String.valueOf(entryDN),
-                                              lastEntryLineNumber, attrName,
-                                              value.stringValue());
+                  Message message = WARN_LDIF_DUPLICATE_ATTR.get(
+                          String.valueOf(entryDN),
+                          lastEntryLineNumber, attrName,
+                          value.stringValue());
                   logToRejectWriter(lines, message);
-                  throw new LDIFException(msgID, message, lastEntryLineNumber,
+                  throw new LDIFException(message, lastEntryLineNumber,
                                           true);
                 }
               }
             }
             else
             {
-              int    msgID   = MSGID_LDIF_DUPLICATE_ATTR;
-              String message = getMessage(msgID, String.valueOf(entryDN),
-                                          lastEntryLineNumber, attrName,
-                                          value.stringValue());
+              Message message = WARN_LDIF_DUPLICATE_ATTR.get(
+                      String.valueOf(entryDN),
+                      lastEntryLineNumber, attrName,
+                      value.stringValue());
               logToRejectWriter(lines, message);
-              throw new LDIFException(msgID, message, lastEntryLineNumber,
+              throw new LDIFException(message, lastEntryLineNumber,
                                       true);
             }
           }
 
           if (attrType.isSingleValue() && (! valueSet.isEmpty()) && checkSchema)
           {
-            int    msgID   = MSGID_LDIF_MULTIPLE_VALUES_FOR_SINGLE_VALUED_ATTR;
-            String message = getMessage(msgID, String.valueOf(entryDN),
-                                        lastEntryLineNumber, attrName);
+            Message message = ERR_LDIF_MULTIPLE_VALUES_FOR_SINGLE_VALUED_ATTR
+                    .get(String.valueOf(entryDN),
+                         lastEntryLineNumber, attrName);
             logToRejectWriter(lines, message);
-            throw new LDIFException(msgID, message, lastEntryLineNumber, true);
+            throw new LDIFException(message, lastEntryLineNumber, true);
           }
 
           valueSet.add(attributeValue);
@@ -1068,9 +1057,9 @@
 
       if (!attribute.equals(expectedAttr))
       {
-        int msgID = MSGID_LDIF_INVALID_CHANGERECORD_ATTRIBUTE;
-        String message = getMessage(msgID, attrDescr, attributeName);
-        throw new LDIFException(msgID, message, lastEntryLineNumber, false);
+        Message message = ERR_LDIF_INVALID_CHANGERECORD_ATTRIBUTE.get(
+            attrDescr, attributeName);
+        throw new LDIFException(message, lastEntryLineNumber, false);
       }
     }
 
@@ -1109,7 +1098,7 @@
    * @param  message  A human-readable message providing the reason that the
    *                  last entry read was not acceptable.
    */
-  public void rejectLastEntry(String message)
+  public void rejectLastEntry(Message message)
   {
     entriesRejected++;
 
@@ -1121,7 +1110,7 @@
         if ((message != null) && (message.length() > 0))
         {
           rejectWriter.write("# ");
-          rejectWriter.write(message);
+          rejectWriter.write(message.toString());
           rejectWriter.newLine();
         }
 
@@ -1275,9 +1264,8 @@
 
     if(lines.isEmpty())
     {
-      int msgID = MSGID_LDIF_NO_MOD_DN_ATTRIBUTES;
-      String message = getMessage(msgID);
-      throw new LDIFException(msgID, message, lineNumber, true);
+      Message message = ERR_LDIF_NO_MOD_DN_ATTRIBUTES.get();
+      throw new LDIFException(message, lineNumber, true);
     }
 
     StringBuilder line = lines.remove();
@@ -1292,27 +1280,24 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
-      int    msgID   = MSGID_LDIF_INVALID_DN;
-      String message = getMessage(msgID, lineNumber, line.toString(),
-          de.getErrorMessage());
-      throw new LDIFException(msgID, message, lineNumber, true);
+      Message message = ERR_LDIF_INVALID_DN.get(
+          lineNumber, line.toString(), de.getMessageObject());
+      throw new LDIFException(message, lineNumber, true);
     } catch (Exception e)
     {
       if (debugEnabled())
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      int    msgID   = MSGID_LDIF_INVALID_DN;
-      String message = getMessage(msgID, lineNumber, line.toString(),
-          e.getMessage());
-      throw new LDIFException(msgID, message, lineNumber, true);
+      Message message =
+          ERR_LDIF_INVALID_DN.get(lineNumber, line.toString(), e.getMessage());
+      throw new LDIFException(message, lineNumber, true);
     }
 
     if(lines.isEmpty())
     {
-      int msgID = MSGID_LDIF_NO_DELETE_OLDRDN_ATTRIBUTE;
-      String message = getMessage(msgID);
-      throw new LDIFException(msgID, message, lineNumber, true);
+      Message message = ERR_LDIF_NO_DELETE_OLDRDN_ATTRIBUTE.get();
+      throw new LDIFException(message, lineNumber, true);
     }
     lineNumber++;
 
@@ -1332,9 +1317,8 @@
       deleteOldRDN = true;
     } else
     {
-      int msgID = MSGID_LDIF_INVALID_DELETE_OLDRDN_ATTRIBUTE;
-      String message = getMessage(msgID, delStr);
-      throw new LDIFException(msgID, message, lineNumber, true);
+      Message message = ERR_LDIF_INVALID_DELETE_OLDRDN_ATTRIBUTE.get(delStr);
+      throw new LDIFException(message, lineNumber, true);
     }
 
     if(!lines.isEmpty())
@@ -1354,20 +1338,18 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
-        int    msgID   = MSGID_LDIF_INVALID_DN;
-        String message = getMessage(msgID, lineNumber, line.toString(),
-            de.getErrorMessage());
-        throw new LDIFException(msgID, message, lineNumber, true);
+        Message message = ERR_LDIF_INVALID_DN.get(
+            lineNumber, line.toString(), de.getMessageObject());
+        throw new LDIFException(message, lineNumber, true);
       } catch (Exception e)
       {
         if (debugEnabled())
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        int    msgID   = MSGID_LDIF_INVALID_DN;
-        String message = getMessage(msgID, lineNumber, line.toString(),
-            e.getMessage());
-        throw new LDIFException(msgID, message, lineNumber, true);
+        Message message = ERR_LDIF_INVALID_DN.get(
+            lineNumber, line.toString(), e.getMessage());
+        throw new LDIFException(message, lineNumber, true);
       }
     }
 
@@ -1455,10 +1437,9 @@
       } else
       {
         // Invalid attribute name.
-        int msgID = MSGID_LDIF_INVALID_MODIFY_ATTRIBUTE;
-        String message = getMessage(msgID, name,
-            "add, delete, replace, increment");
-        throw new LDIFException(msgID, message, lineNumber, true);
+        Message message = ERR_LDIF_INVALID_MODIFY_ATTRIBUTE.get(
+            name, "add, delete, replace, increment");
+        throw new LDIFException(message, lineNumber, true);
       }
 
       // Now go through the rest of the attributes till the "-" line is
@@ -1502,10 +1483,8 @@
 
     if (!lines.isEmpty())
     {
-      int msgID = MSGID_LDIF_INVALID_DELETE_ATTRIBUTES;
-      String message = getMessage(msgID);
-
-      throw new LDIFException(msgID, message, lineNumber, true);
+      Message message = ERR_LDIF_INVALID_DELETE_ATTRIBUTES.get();
+      throw new LDIFException(message, lineNumber, true);
     }
 
     return new DeleteChangeRecordEntry(entryDN);
@@ -1572,10 +1551,10 @@
     int colonPos = line.indexOf(":");
     if (colonPos <= 0)
     {
-      int    msgID   = MSGID_LDIF_NO_ATTR_NAME;
-      String message = getMessage(msgID, lastEntryLineNumber, line.toString());
+      Message message = ERR_LDIF_NO_ATTR_NAME.get(
+              lastEntryLineNumber, line.toString());
       logToRejectWriter(lines, message);
-      throw new LDIFException(msgID, message, lastEntryLineNumber, true);
+      throw new LDIFException(message, lastEntryLineNumber, true);
     }
     return colonPos;
   }
@@ -1641,12 +1620,12 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_LDIF_COULD_NOT_BASE64_DECODE_ATTR;
-          String message = getMessage(msgID, String.valueOf(entryDN),
-                                      lastEntryLineNumber, line,
-                                      String.valueOf(e));
+          Message message = ERR_LDIF_COULD_NOT_BASE64_DECODE_ATTR.get(
+                  String.valueOf(entryDN),
+                  lastEntryLineNumber, line,
+                  String.valueOf(e));
           logToRejectWriter(lines, message);
-          throw new LDIFException(msgID, message, lastEntryLineNumber, true, e);
+          throw new LDIFException(message, lastEntryLineNumber, true, e);
         }
       }
       else if (c == '<')
@@ -1672,13 +1651,12 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_LDIF_INVALID_URL;
-          String message = getMessage(msgID, String.valueOf(entryDN),
+          Message message = ERR_LDIF_INVALID_URL.get(String.valueOf(entryDN),
                                       lastEntryLineNumber,
                                       String.valueOf(attrName),
                                       String.valueOf(e));
           logToRejectWriter(lines, message);
-          throw new LDIFException(msgID, message, lastEntryLineNumber, true, e);
+          throw new LDIFException(message, lastEntryLineNumber, true, e);
         }
 
 
@@ -1706,14 +1684,13 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int msgID = MSGID_LDIF_URL_IO_ERROR;
-          String message = getMessage(msgID, String.valueOf(entryDN),
+          Message message = ERR_LDIF_URL_IO_ERROR.get(String.valueOf(entryDN),
                                       lastEntryLineNumber,
                                       String.valueOf(attrName),
                                       String.valueOf(contentURL),
                                       String.valueOf(e));
           logToRejectWriter(lines, message);
-          throw new LDIFException(msgID, message, lastEntryLineNumber, true, e);
+          throw new LDIFException(message, lastEntryLineNumber, true, e);
         }
         finally
         {
@@ -1759,7 +1736,7 @@
    *          The associated error message.
    */
   private void logToRejectWriter(LinkedList<StringBuilder> lines,
-      String message) {
+      Message message) {
 
     BufferedWriter rejectWriter = importConfig.getRejectWriter();
     if (rejectWriter != null)
@@ -1777,7 +1754,7 @@
    *          The associated error message.
    */
   private void logToSkipWriter(LinkedList<StringBuilder> lines,
-      String message) {
+      Message message) {
 
     BufferedWriter skipWriter = importConfig.getSkipWriter();
     if (skipWriter != null)
@@ -1792,20 +1769,20 @@
    * @param writer
    *          The writer to write to.
    * @param lines
-   *          The set of rejected lines.
+ *          The set of rejected lines.
    * @param message
    *          The associated error message.
    */
   private void logToWriter(BufferedWriter writer,
       LinkedList<StringBuilder> lines,
-      String message)
+      Message message)
   {
     if (writer != null)
     {
       try
       {
         writer.write("# ");
-        writer.write(message);
+        writer.write(String.valueOf(message));
         writer.newLine();
         for (StringBuilder sb : lines)
         {
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/LDIFWriter.java b/opendj-sdk/opends/src/server/org/opends/server/util/LDIFWriter.java
index f053e5b..54b56b1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/LDIFWriter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/LDIFWriter.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util;
+import org.opends.messages.Message;
 
 
 
@@ -51,7 +52,6 @@
 import static org.opends.server.util.Validator.*;
 
 
-
 /**
  * This class provides a mechanism for writing entries in LDIF form to a file or
  * an output stream.
@@ -122,7 +122,7 @@
    * @throws  IOException  If a problem occurs while attempting to write the
    *                       comment to the LDIF file.
    */
-  public void writeComment(String comment, int wrapColumn)
+  public void writeComment(Message comment, int wrapColumn)
          throws IOException
   {
     ensureNotNull(comment);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/StaticUtils.java b/opendj-sdk/opends/src/server/org/opends/server/util/StaticUtils.java
index a1f8602..873f22d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/StaticUtils.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/StaticUtils.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util;
+import org.opends.messages.Message;
 
 
 
@@ -58,9 +59,10 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
+
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.MessageDescriptor;
 import static org.opends.server.util.ServerConstants.*;
 
 
@@ -1449,7 +1451,7 @@
    *
    * @return  The human-readable message generated for the provided exception.
    */
-  public static String getExceptionMessage(Throwable t)
+  public static Message getExceptionMessage(Throwable t)
   {
     if (t instanceof IdentifiedException)
     {
@@ -1458,21 +1460,26 @@
       StringBuilder message = new StringBuilder();
       message.append(ie.getMessage());
       message.append(" (id=");
-      message.append(ie.getMessageID());
+      Message ieMsg = ie.getMessageObject();
+      if (ieMsg != null) {
+        message.append(ieMsg.getDescriptor().getId());
+      } else {
+        message.append(MessageDescriptor.NULL_ID);
+      }
       message.append(")");
-      return message.toString();
+      return Message.raw(message.toString());
     }
     else if (t instanceof NullPointerException)
     {
       StackTraceElement[] stackElements = t.getStackTrace();
 
-      StringBuilder message = new StringBuilder();
+      MessageBuilder message = new MessageBuilder();
       message.append("NullPointerException(");
       message.append(stackElements[0].getFileName());
       message.append(":");
       message.append(stackElements[0].getLineNumber());
       message.append(")");
-      return message.toString();
+      return message.toMessage();
     }
     else if ((t instanceof InvocationTargetException) &&
              (t.getCause() != null))
@@ -1509,7 +1516,7 @@
 
       message.append(")");
 
-      return message.toString();
+      return Message.raw(message.toString());
     }
   }
 
@@ -1993,9 +2000,8 @@
 
     if ((length % 2) == 1)
     {
-      int    msgID   = MSGID_HEX_DECODE_INVALID_LENGTH;
-      String message = getMessage(msgID, hexString);
-      throw new ParseException(message, 0);
+      Message message = ERR_HEX_DECODE_INVALID_LENGTH.get(hexString);
+      throw new ParseException(message.toString(), 0);
     }
 
 
@@ -2061,10 +2067,9 @@
           returnArray[i] = (byte) 0xF0;
           break;
         default:
-          int    msgID   = MSGID_HEX_DECODE_INVALID_CHARACTER;
-          String message = getMessage(msgID, hexString,
-                                      hexString.charAt(pos-1));
-          throw new ParseException(message, 0);
+          Message message = ERR_HEX_DECODE_INVALID_CHARACTER.get(
+              hexString, hexString.charAt(pos-1));
+          throw new ParseException(message.toString(), 0);
       }
 
       switch (hexString.charAt(pos++))
@@ -2124,10 +2129,9 @@
           returnArray[i] |= 0x0F;
           break;
         default:
-          int    msgID   = MSGID_HEX_DECODE_INVALID_CHARACTER;
-          String message = getMessage(msgID, hexString,
-                                      hexString.charAt(pos-1));
-          throw new ParseException(message, 0);
+          Message message = ERR_HEX_DECODE_INVALID_CHARACTER.get(
+              hexString, hexString.charAt(pos-1));
+          throw new ParseException(message.toString(), 0);
       }
     }
 
@@ -2303,9 +2307,8 @@
     // throw an exception.
     if (! mayUseExec())
     {
-      int    msgID   = MSGID_EXEC_DISABLED;
-      String message = getMessage(msgID, String.valueOf(command));
-      throw new SecurityException(message);
+      Message message = ERR_EXEC_DISABLED.get(String.valueOf(command));
+      throw new SecurityException(message.toString());
     }
 
 
@@ -2450,12 +2453,11 @@
    */
   public static boolean isValidSchemaElement(String element, int startPos,
                                              int endPos,
-                                             StringBuilder invalidReason)
+                                             MessageBuilder invalidReason)
   {
     if ((element == null) || (startPos >= endPos))
     {
-      int msgID = MSGID_SCHEMANAME_EMPTY_VALUE;
-      invalidReason.append(getMessage(msgID));
+      invalidReason.append(ERR_SCHEMANAME_EMPTY_VALUE.get());
       return false;
     }
 
@@ -2472,8 +2474,7 @@
                ((c == '_') && DirectoryServer.allowAttributeNameExceptions())))
         {
           // This is an illegal character for an attribute name.
-          int msgID = MSGID_SCHEMANAME_ILLEGAL_CHAR;
-          invalidReason.append(getMessage(msgID, element, c, i));
+          invalidReason.append(ERR_SCHEMANAME_ILLEGAL_CHAR.get(element, c, i));
           return false;
         }
       }
@@ -2500,8 +2501,8 @@
               // period.
               if (lastWasDot)
               {
-                int msgID = MSGID_SCHEMANAME_CONSECUTIVE_PERIODS;
-                invalidReason.append(getMessage(msgID, element, i));
+                invalidReason.append(ERR_SCHEMANAME_CONSECUTIVE_PERIODS.get(
+                        element, i));
                 return false;
               }
               else
@@ -2512,8 +2513,8 @@
             else
             {
               // This is an illegal character.
-              int msgID = MSGID_SCHEMANAME_ILLEGAL_CHAR;
-              invalidReason.append(getMessage(msgID, element, c, i));
+              invalidReason.append(ERR_SCHEMANAME_ILLEGAL_CHAR.get(
+                      element, c, i));
               return false;
             }
           }
@@ -2537,8 +2538,8 @@
               if (isNumeric)
               {
                 // This is an illegal character for a numeric OID.
-                int msgID = MSGID_SCHEMANAME_ILLEGAL_CHAR;
-                invalidReason.append(getMessage(msgID, element, c, i));
+                invalidReason.append(ERR_SCHEMANAME_ILLEGAL_CHAR.get(
+                        element, c, i));
                 return false;
               }
             }
@@ -2553,8 +2554,8 @@
           else if (! isDigit(c))
           {
             // This is an illegal character.
-            int msgID = MSGID_SCHEMANAME_ILLEGAL_CHAR;
-            invalidReason.append(getMessage(msgID, element, c, i));
+            invalidReason.append(ERR_SCHEMANAME_ILLEGAL_CHAR.get(
+                    element, c, i));
             return false;
           }
         }
@@ -2563,8 +2564,8 @@
     else
     {
       // This is an illegal character.
-      int msgID = MSGID_SCHEMANAME_ILLEGAL_CHAR;
-      invalidReason.append(getMessage(msgID, element, c, startPos));
+      invalidReason.append(ERR_SCHEMANAME_ILLEGAL_CHAR.get(
+              element, c, startPos));
       return false;
     }
 
@@ -3342,30 +3343,28 @@
   {
     if (! fileToMove.exists())
     {
-      int    msgID   = MSGID_MOVEFILE_NO_SUCH_FILE;
-      String message = getMessage(msgID, fileToMove.getPath());
-      throw new IOException(message);
+      Message message = ERR_MOVEFILE_NO_SUCH_FILE.get(fileToMove.getPath());
+      throw new IOException(message.toString());
     }
 
     if (! fileToMove.isFile())
     {
-      int    msgID   = MSGID_MOVEFILE_NOT_FILE;
-      String message = getMessage(msgID, fileToMove.getPath());
-      throw new IOException(message);
+      Message message = ERR_MOVEFILE_NOT_FILE.get(fileToMove.getPath());
+      throw new IOException(message.toString());
     }
 
     if (! targetDirectory.exists())
     {
-      int    msgID   = MSGID_MOVEFILE_NO_SUCH_DIRECTORY;
-      String message = getMessage(msgID, targetDirectory.getPath());
-      throw new IOException(message);
+      Message message =
+          ERR_MOVEFILE_NO_SUCH_DIRECTORY.get(targetDirectory.getPath());
+      throw new IOException(message.toString());
     }
 
     if (! targetDirectory.isDirectory())
     {
-      int    msgID   = MSGID_MOVEFILE_NOT_DIRECTORY;
-      String message = getMessage(msgID, targetDirectory.getPath());
-      throw new IOException(message);
+      Message message =
+          ERR_MOVEFILE_NOT_DIRECTORY.get(targetDirectory.getPath());
+      throw new IOException(message.toString());
     }
 
     String newFilePath = targetDirectory.getPath() + File.separator +
@@ -3414,18 +3413,17 @@
         {
           if (!target.delete())
           {
-            int    msgID   = MSGID_RENAMEFILE_CANNOT_DELETE_TARGET;
-            String message = getMessage(msgID, target.getPath());
-            throw new IOException(message);
+            Message message =
+                ERR_RENAMEFILE_CANNOT_DELETE_TARGET.get(target.getPath());
+            throw new IOException(message.toString());
           }
         }
       }
       if (!fileToRename.renameTo(target))
       {
-        int    msgID   = MSGID_RENAMEFILE_CANNOT_RENAME;
-        String message = getMessage(msgID, fileToRename.getPath(),
-                target.getPath());
-        throw new IOException(message);
+        Message message = ERR_RENAMEFILE_CANNOT_RENAME.get(
+            fileToRename.getPath(), target.getPath());
+        throw new IOException(message.toString());
 
       }
     }
@@ -3643,19 +3641,19 @@
    * @return  The user-friendly representation of the specified number of
    *          seconds.
    */
-  public static String secondsToTimeString(int numSeconds)
+  public static Message secondsToTimeString(int numSeconds)
   {
     if (numSeconds < 60)
     {
       // We can express it in seconds.
-      return getMessage(MSGID_TIME_IN_SECONDS, numSeconds);
+      return INFO_TIME_IN_SECONDS.get(numSeconds);
     }
     else if (numSeconds < 3600)
     {
       // We can express it in minutes and seconds.
       int m = numSeconds / 60;
       int s = numSeconds % 60;
-      return getMessage(MSGID_TIME_IN_MINUTES_SECONDS, m, s);
+      return INFO_TIME_IN_MINUTES_SECONDS.get(m, s);
     }
     else if (numSeconds < 86400)
     {
@@ -3663,7 +3661,7 @@
       int h = numSeconds / 3600;
       int m = (numSeconds % 3600) / 60;
       int s = numSeconds % 3600 % 60;
-      return getMessage(MSGID_TIME_IN_HOURS_MINUTES_SECONDS, h, m, s);
+      return INFO_TIME_IN_HOURS_MINUTES_SECONDS.get(h, m, s);
     }
     else
     {
@@ -3672,7 +3670,7 @@
       int h = (numSeconds % 86400) / 3600;
       int m = (numSeconds % 86400 % 3600) / 60;
       int s = numSeconds % 86400 % 3600 % 60;
-      return getMessage(MSGID_TIME_IN_DAYS_HOURS_MINUTES_SECONDS, d, h, m, s);
+      return INFO_TIME_IN_DAYS_HOURS_MINUTES_SECONDS.get(d, h, m, s);
     }
   }
 
@@ -3684,6 +3682,23 @@
    * and if there are no spaces within the specified width, then wrapping will
    * be performed at the first space after the specified column.
    *
+   * @param  message The message to be wrapped.
+   * @param  width  The maximum number of characters to allow on a line if there
+   *                is a suitable breaking point.
+   *
+   * @return  The wrapped text.
+   */
+  public static String wrapText(Message message, int width)
+  {
+    return wrapText(Message.toString(message), width);
+  }
+
+  /**
+   * Inserts line breaks into the provided buffer to wrap text at no more than
+   * the specified column width.  Wrapping will only be done at space boundaries
+   * and if there are no spaces within the specified width, then wrapping will
+   * be performed at the first space after the specified column.
+   *
    * @param  text   The text to be wrapped.
    * @param  width  The maximum number of characters to allow on a line if there
    *                is a suitable breaking point.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/Validator.java b/opendj-sdk/opends/src/server/org/opends/server/util/Validator.java
index e9b1ee4..99d2f28 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/Validator.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/Validator.java
@@ -25,12 +25,14 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util;
+import org.opends.messages.Message;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
-import org.opends.server.messages.UtilityMessages;
+import org.opends.server.loggers.ErrorLogger;
+
+
+import org.opends.messages.MessageBuilder;
 
 /**
  * This utility class provides static methods that make parameter checking
@@ -147,7 +149,7 @@
   public static boolean ensureNotNull(Object param)
           throws AssertionError {
     if (ENABLE_CHECKS) {
-      if (param == null) throwNull("");
+      if (param == null) throwNull(Message.EMPTY);
     }
     return true;
   }
@@ -179,8 +181,8 @@
   public static boolean ensureNotNull(Object param1, Object param2)
           throws AssertionError {
     if (ENABLE_CHECKS) {
-      if (param1 == null) throwNull(PARAM_DESCRIPTIONS[1]);
-      if (param2 == null) throwNull(PARAM_DESCRIPTIONS[2]);
+      if (param1 == null) throwNull(Message.raw(PARAM_DESCRIPTIONS[1]));
+      if (param2 == null) throwNull(Message.raw(PARAM_DESCRIPTIONS[2]));
     }
     return true;
   }
@@ -214,9 +216,9 @@
                                       Object param3)
           throws AssertionError {
     if (ENABLE_CHECKS) {
-      if (param1 == null) throwNull(PARAM_DESCRIPTIONS[1]);
-      if (param2 == null) throwNull(PARAM_DESCRIPTIONS[2]);
-      if (param3 == null) throwNull(PARAM_DESCRIPTIONS[3]);
+      if (param1 == null) throwNull(Message.raw(PARAM_DESCRIPTIONS[1]));
+      if (param2 == null) throwNull(Message.raw(PARAM_DESCRIPTIONS[2]));
+      if (param3 == null) throwNull(Message.raw(PARAM_DESCRIPTIONS[3]));
     }
     return true;
   }
@@ -251,10 +253,10 @@
                                       Object param3, Object param4)
           throws AssertionError {
     if (ENABLE_CHECKS) {
-      if (param1 == null) throwNull(PARAM_DESCRIPTIONS[1]);
-      if (param2 == null) throwNull(PARAM_DESCRIPTIONS[2]);
-      if (param3 == null) throwNull(PARAM_DESCRIPTIONS[3]);
-      if (param4 == null) throwNull(PARAM_DESCRIPTIONS[4]);
+      if (param1 == null) throwNull(Message.raw(PARAM_DESCRIPTIONS[1]));
+      if (param2 == null) throwNull(Message.raw(PARAM_DESCRIPTIONS[2]));
+      if (param3 == null) throwNull(Message.raw(PARAM_DESCRIPTIONS[3]));
+      if (param4 == null) throwNull(Message.raw(PARAM_DESCRIPTIONS[4]));
     }
     return true;
   }
@@ -282,7 +284,7 @@
           throws AssertionError {
     if (ENABLE_CHECKS) {
       if (!condition) {
-        ensureTrue(condition, "");
+        ensureTrue(condition, Message.EMPTY);
       }
     }
     return true;
@@ -310,12 +312,14 @@
    *
    * @throws AssertionError if condition is false
    */
-  public static boolean ensureTrue(boolean condition, String message)
+  public static boolean ensureTrue(boolean condition, Message message)
           throws AssertionError {
     if (ENABLE_CHECKS) {
       if (!condition) {
-        String fullMessage = generateLineSpecificErrorMessage(
-                "The specified condition must be true. " + message);
+        MessageBuilder mb = new MessageBuilder();
+        mb.append("The specified condition must be true. ");
+        mb.append(message);
+        Message fullMessage = generateLineSpecificErrorMessage(mb.toMessage());
 
         logError(fullMessage);
 
@@ -368,15 +372,21 @@
   ////////////////////////////////////////////////////////////////////////////
 
 
-  private static String generateLineSpecificErrorMessage(String message) {
-    return message + "  The error occurred at " + getOriginalCallerLineInfo();
+  private static Message generateLineSpecificErrorMessage(Message message) {
+    MessageBuilder mb = new MessageBuilder();
+    mb.append(message);
+    mb.append("  The error occurred at ");
+    mb.append(getOriginalCallerLineInfo());
+    return mb.toMessage();
   }
 
 
-  private static void throwNull(String message)
+  private static void throwNull(Message message)
           throws AssertionError {
-    String fullMessage = generateLineSpecificErrorMessage(
-            "The specified parameter must not be null. " + message);
+    MessageBuilder mb = new MessageBuilder();
+    mb.append("The specified parameter must not be null. ");
+    mb.append(message);
+    Message fullMessage = generateLineSpecificErrorMessage(mb.toMessage());
 
     logError(fullMessage);
 
@@ -385,22 +395,23 @@
 
 
 
-  private static void logError(String message) {
+  private static void logError(Message message) {
     incrementErrorCount();
 
-    String messageWithStack = message + ServerConstants.EOL + getCallingStack();
+    MessageBuilder mb = new MessageBuilder();
+    mb.append(message);
+    mb.append(ServerConstants.EOL);
+    mb.append(getCallingStack());
+    Message messageWithStack = mb.toMessage();
 
     // Log to the debug log.
     if (debugEnabled())
     {
-      TRACER.debugError(messageWithStack);
+      TRACER.debugError(messageWithStack.toString());
     }
 
     // Log to the error log.
-    org.opends.server.loggers.ErrorLogger.logError(ErrorLogCategory.CORE_SERVER,
-            ErrorLogSeverity.SEVERE_ERROR,
-            UtilityMessages.MSGID_VALIDATOR_PRECONDITION_NOT_MET,
-            messageWithStack);
+    ErrorLogger.logError(messageWithStack);
   }
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/VersionCompatibilityIssue.java b/opendj-sdk/opends/src/server/org/opends/server/util/VersionCompatibilityIssue.java
index b1f489a..87cefec 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/VersionCompatibilityIssue.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/VersionCompatibilityIssue.java
@@ -26,9 +26,9 @@
  */
 
 package org.opends.server.util;
+import org.opends.messages.Message;
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.VersionMessages.*;
+import static org.opends.messages.VersionMessages.*;
 
 import java.util.Set;
 import java.util.List;
@@ -218,8 +218,8 @@
      */
     DB_FORMAT_CHANGE_2(
             3, // Unique ID.  See javadoc for more information.
-            getMessage(MSGID_2049_UPGRADE),
-            getMessage(MSGID_2049_REVERSION),
+            INFO_2049_UPGRADE.get(),
+            INFO_2049_REVERSION.get(),
             Effect.REVERSION_DATA_EXPORT_AND_REIMPORT_REQUIRED,
             Effect.UPGRADE_SHOW_WARNING_MESSAGE),
 
@@ -229,8 +229,8 @@
      */
     DB_FORMAT_CHANGE_1(
             2,  // Unique ID.  See javadoc for more information.
-            getMessage(MSGID_1582_UPGRADE),
-            getMessage(MSGID_1582_REVERSION),
+            INFO_1582_UPGRADE.get(),
+            INFO_1582_REVERSION.get(),
             Effect.REVERSION_DATA_EXPORT_AND_REIMPORT_REQUIRED,
             Effect.UPGRADE_SHOW_WARNING_MESSAGE),
 
@@ -240,8 +240,8 @@
      */
     BERKLEY_UPGRADE_1(
             1,  // Unique ID.  See javadoc for more information.
-            getMessage(MSGID_890_UPGRADE),
-            getMessage(MSGID_890_REVERSION),
+            INFO_890_UPGRADE.get(),
+            INFO_890_REVERSION.get(),
             Effect.REVERSION_DATA_EXPORT_AND_REIMPORT_REQUIRED,
             Effect.UPGRADE_SHOW_WARNING_MESSAGE);
 
@@ -265,8 +265,8 @@
 
     private int id;
     private Set<Effect> effects = new HashSet<Effect>();
-    private String upgradeMsg;
-    private String reversionMsg;
+    private Message upgradeMsg;
+    private Message reversionMsg;
 
     /**
      * Creates a parameterized instance.
@@ -324,7 +324,7 @@
      * @param effects of this cause which cause the upgrade/reversion tools
      *        to behave in particular ways
      */
-    private Cause(int id, String upgradeMessage, String reversionMessage,
+    private Cause(int id, Message upgradeMessage, Message reversionMessage,
           Effect... effects) {
       this.id = id;
       this.upgradeMsg = upgradeMessage;
@@ -366,7 +366,7 @@
      *         user useful information (when used with
      *         <code>UPGRADE_SHOW_INFO_MESSAGE</code>)
      */
-    public String getLocalizedUpgradeMessage() {
+    public Message getLocalizedUpgradeMessage() {
       return upgradeMsg;
     }
 
@@ -382,7 +382,7 @@
      *         user useful information (when used with
      *         <code>REVERSION_SHOW_INFO_MESSAGE</code>)
      */
-    public String getLocalizedReversionMessage() {
+    public Message getLocalizedReversionMessage() {
       return reversionMsg;
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/args/Argument.java b/opendj-sdk/opends/src/server/org/opends/server/util/args/Argument.java
index 9612f3d..b91815c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/args/Argument.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/args/Argument.java
@@ -25,14 +25,16 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.args;
+import org.opends.messages.Message;
 
 
 
 import java.util.Iterator;
 import java.util.LinkedList;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
+
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -65,7 +67,7 @@
   private Character shortIdentifier;
 
   // The unique ID of the description for this argument.
-  private int descriptionID;
+  private Message description;
 
   // The set of values for this argument.
   private LinkedList<String> values;
@@ -73,9 +75,6 @@
   // The default value for the argument if none other is provided.
   private String defaultValue;
 
-  // The description for this argument.
-  private String description;
-
   // The long identifier for this argument.
   private String longIdentifier;
 
@@ -116,10 +115,8 @@
    * @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  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
@@ -128,8 +125,8 @@
                      String longIdentifier, boolean isRequired,
                      boolean isMultiValued, boolean needsValue,
                      String valuePlaceholder, String defaultValue,
-                     String propertyName, int descriptionID,
-                     Object... descriptionArgs)
+                     String propertyName,
+                     Message description)
             throws ArgumentException
   {
     this.name             = name;
@@ -141,21 +138,18 @@
     this.valuePlaceholder = valuePlaceholder;
     this.defaultValue     = defaultValue;
     this.propertyName     = propertyName;
-    this.descriptionID    = descriptionID;
-    this.description      = getMessage(descriptionID, descriptionArgs);
+    this.description      = description;
 
     if ((shortIdentifier == null) && (longIdentifier == null))
     {
-      int   msgID    = MSGID_ARG_NO_IDENTIFIER;
-      String message = getMessage(msgID, name);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_ARG_NO_IDENTIFIER.get(name);
+      throw new ArgumentException(message);
     }
 
     if (needsValue && (valuePlaceholder == null))
     {
-      int    msgID   = MSGID_ARG_NO_VALUE_PLACEHOLDER;
-      String message = getMessage(msgID, name);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_ARG_NO_VALUE_PLACEHOLDER.get(name);
+      throw new ArgumentException(message);
     }
 
     values    = new LinkedList<String>();
@@ -443,25 +437,13 @@
 
 
   /**
-   * Retrieves the unique ID for the description of this argument.
-   *
-   * @return  The unique ID for the description of this argument.
-   */
-  public int getDescriptionID()
-  {
-    return descriptionID;
-  }
-
-
-
-  /**
    * Retrieves the human-readable description for this argument.
    *
    * @return  The human-readable description for this argument.
    */
-  public String getDescription()
+  public Message getDescription()
   {
-    return description;
+    return description != null ? description : Message.EMPTY;
   }
 
 
@@ -524,9 +506,8 @@
   {
     if (values.isEmpty())
     {
-      int    msgID   = MSGID_ARG_NO_INT_VALUE;
-      String message = getMessage(msgID, name);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_ARG_NO_INT_VALUE.get(name);
+      throw new ArgumentException(message);
     }
 
     Iterator<String> iterator = values.iterator();
@@ -539,16 +520,14 @@
     }
     catch (Exception e)
     {
-      int    msgID   = MSGID_ARG_CANNOT_DECODE_AS_INT;
-      String message = getMessage(msgID, valueString, name);
-      throw new ArgumentException(msgID, message, e);
+      Message message = ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString, name);
+      throw new ArgumentException(message, e);
     }
 
     if (iterator.hasNext())
     {
-      int    msgID   = MSGID_ARG_INT_MULTIPLE_VALUES;
-      String message = getMessage(msgID, name);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_ARG_INT_MULTIPLE_VALUES.get(name);
+      throw new ArgumentException(message);
     }
     else
     {
@@ -583,9 +562,8 @@
       }
       catch (Exception e)
       {
-        int    msgID   = MSGID_ARG_CANNOT_DECODE_AS_INT;
-        String message = getMessage(msgID, valueString, name);
-        throw new ArgumentException(msgID, message, e);
+        Message message = ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString, name);
+        throw new ArgumentException(message, e);
       }
     }
 
@@ -607,9 +585,8 @@
   {
     if (values.isEmpty())
     {
-      int    msgID   = MSGID_ARG_NO_BOOLEAN_VALUE;
-      String message = getMessage(msgID, name);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_ARG_NO_BOOLEAN_VALUE.get(name);
+      throw new ArgumentException(message);
     }
 
     Iterator<String> iterator = values.iterator();
@@ -628,16 +605,14 @@
     }
     else
     {
-      int    msgID   = MSGID_ARG_CANNOT_DECODE_AS_BOOLEAN;
-      String message = getMessage(msgID, valueString, name);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_ARG_CANNOT_DECODE_AS_BOOLEAN.get(valueString, name);
+      throw new ArgumentException(message);
     }
 
     if (iterator.hasNext())
     {
-      int    msgID   = MSGID_ARG_BOOLEAN_MULTIPLE_VALUES;
-      String message = getMessage(msgID, name);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_ARG_BOOLEAN_MULTIPLE_VALUES.get(name);
+      throw new ArgumentException(message);
     }
     else
     {
@@ -659,7 +634,7 @@
    *          <CODE>false</CODE> if it is not.
    */
   public abstract boolean valueIsAcceptable(String valueString,
-                                            StringBuilder invalidReason);
+                                            MessageBuilder invalidReason);
 
 
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/args/ArgumentException.java b/opendj-sdk/opends/src/server/org/opends/server/util/args/ArgumentException.java
index 1ae1af6..43f91e7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/args/ArgumentException.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/args/ArgumentException.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.args;
+import org.opends.messages.Message;
 
 
 
@@ -50,22 +51,16 @@
 
 
 
-  // The message ID for the message associated with this argument exception.
-  private int messageID;
-
 
 
   /**
    * Creates a new argument exception with the provided message.
    *
-   * @param  messageID  The unique identifier for the associated message.
    * @param  message    The message that explains the problem that occurred.
    */
-  public ArgumentException(int messageID, String message)
+  public ArgumentException(Message message)
   {
     super(message);
-
-    this.messageID = messageID;
   }
 
 
@@ -73,27 +68,15 @@
   /**
    * Creates a new argument exception with the provided message and root cause.
    *
-   * @param  messageID  The unique identifier for the associated message.
    * @param  message    The message that explains the problem that occurred.
    * @param  cause      The exception that was caught to trigger this exception.
    */
-  public ArgumentException(int messageID, String message, Throwable cause)
+  public ArgumentException(Message message, Throwable cause)
   {
     super(message, cause);
-
-    this.messageID = messageID;
   }
 
 
 
-  /**
-   * Retrieves the unique identifier for the associated message.
-   *
-   * @return  The unique identifier for the associated message.
-   */
-  public int getMessageID()
-  {
-    return messageID;
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/args/ArgumentParser.java b/opendj-sdk/opends/src/server/org/opends/server/util/args/ArgumentParser.java
index aed1cc7..c3a1ec3 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/args/ArgumentParser.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/args/ArgumentParser.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.args;
+import org.opends.messages.Message;
 
 
 
@@ -38,12 +39,13 @@
 
 import org.opends.server.core.DirectoryServer;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 import static org.opends.server.tools.ToolConstants.*;
-import static org.opends.server.messages.ToolMessages.*;
+import static org.opends.messages.ToolMessages.*;
+
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -102,7 +104,7 @@
 
   // A human-readable description for the tool, which will be included when
   // displaying usage information.
-  private String toolDescription;
+  private Message toolDescription;
 
   // The display name that will be used for the trailing arguments in the usage
   // information.
@@ -127,7 +129,7 @@
    * @param  longArgumentsCaseSensitive  Indicates whether long arguments should
    *                                     be treated in a case-sensitive manner.
    */
-  public ArgumentParser(String mainClassName, String toolDescription,
+  public ArgumentParser(String mainClassName, Message toolDescription,
                         boolean longArgumentsCaseSensitive)
   {
     this.mainClassName              = mainClassName;
@@ -182,7 +184,7 @@
    *                                     arguments in the generated usage
    *                                     information.
    */
-  public ArgumentParser(String mainClassName, String toolDescription,
+  public ArgumentParser(String mainClassName, Message toolDescription,
                         boolean longArgumentsCaseSensitive,
                         boolean allowsTrailingArguments,
                         int minTrailingArguments, int maxTrailingArguments,
@@ -231,7 +233,7 @@
    * @return  A human-readable description for this tool, or {@code null} if
    *          none is available.
    */
-  public String getToolDescription()
+  public Message getToolDescription()
   {
     return toolDescription;
   }
@@ -417,10 +419,9 @@
     {
       String conflictingName = shortIDMap.get(shortID).getName();
 
-      int msgID = MSGID_ARGPARSER_DUPLICATE_SHORT_ID;
-      String message = getMessage(msgID, argument.getName(),
-                                  String.valueOf(shortID), conflictingName);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_ARGPARSER_DUPLICATE_SHORT_ID.get(
+          argument.getName(), String.valueOf(shortID), conflictingName);
+      throw new ArgumentException(message);
     }
 
     String longID = argument.getLongIdentifier();
@@ -434,10 +435,9 @@
       {
         String conflictingName = longIDMap.get(longID).getName();
 
-        int msgID = MSGID_ARGPARSER_DUPLICATE_LONG_ID;
-        String message = getMessage(msgID, argument.getName(),
-                                    String.valueOf(longID), conflictingName);
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_ARGPARSER_DUPLICATE_LONG_ID.get(
+            argument.getName(), String.valueOf(longID), conflictingName);
+        throw new ArgumentException(message);
       }
     }
 
@@ -556,10 +556,9 @@
     {
       if (requirePropertiesFile)
       {
-        int    msgID   = MSGID_ARGPARSER_CANNOT_READ_PROPERTIES_FILE;
-        String message = getMessage(msgID, String.valueOf(propertiesFile),
-                                    getExceptionMessage(e));
-        throw new ArgumentException(msgID, message, e);
+        Message message = ERR_ARGPARSER_CANNOT_READ_PROPERTIES_FILE.get(
+            String.valueOf(propertiesFile), getExceptionMessage(e));
+        throw new ArgumentException(message, e);
       }
     }
 
@@ -600,9 +599,9 @@
         if ((maxTrailingArguments > 0) &&
             (trailingArguments.size() > maxTrailingArguments))
         {
-          int    msgID   = MSGID_ARGPARSER_TOO_MANY_TRAILING_ARGS;
-          String message = getMessage(msgID, maxTrailingArguments);
-          throw new ArgumentException(msgID, message);
+          Message message =
+              ERR_ARGPARSER_TOO_MANY_TRAILING_ARGS.get(maxTrailingArguments);
+          throw new ArgumentException(message);
         }
 
         continue;
@@ -633,9 +632,8 @@
         else if (equalPos == 0)
         {
           // The argument starts with "--=", which is not acceptable.
-          int    msgID   = MSGID_ARGPARSER_LONG_ARG_WITHOUT_NAME;
-          String message = getMessage(msgID, arg);
-          throw new ArgumentException(msgID, message);
+          Message message = ERR_ARGPARSER_LONG_ARG_WITHOUT_NAME.get(arg);
+          throw new ArgumentException(message);
         }
         else
         {
@@ -681,9 +679,9 @@
           else
           {
             // There is no such argument registered.
-            int    msgID   = MSGID_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID;
-            String message = getMessage(msgID, argName);
-            throw new ArgumentException(msgID, message);
+            Message message =
+                ERR_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID.get(argName);
+            throw new ArgumentException(message);
           }
         }
         else
@@ -712,30 +710,29 @@
           {
             if ((i+1) == numArguments)
             {
-              int msgID = MSGID_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID;
-              String message = getMessage(msgID, argName);
-              throw new ArgumentException(msgID, message);
+              Message message =
+                  ERR_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID.get(argName);
+              throw new ArgumentException(message);
             }
 
             argValue = rawArguments[++i];
           }
 
-          StringBuilder invalidReason = new StringBuilder();
+          MessageBuilder invalidReason = new MessageBuilder();
           if (! a.valueIsAcceptable(argValue, invalidReason))
           {
-            int    msgID   = MSGID_ARGPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID;
-            String message = getMessage(msgID, argValue, argName,
-                                        invalidReason.toString());
-            throw new ArgumentException(msgID, message);
+            Message message = ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID.get(
+                argValue, argName, invalidReason.toString());
+            throw new ArgumentException(message);
           }
 
           // If the argument already has a value, then make sure it is
           // acceptable to have more than one.
           if (a.hasValue() && (! a.isMultiValued()))
           {
-            int    msgID   = MSGID_ARGPARSER_NOT_MULTIVALUED_FOR_LONG_ID;
-            String message = getMessage(msgID, argName);
-            throw new ArgumentException(msgID, message);
+            Message message =
+                ERR_ARGPARSER_NOT_MULTIVALUED_FOR_LONG_ID.get(argName);
+            throw new ArgumentException(message);
           }
 
           a.addValue(argValue);
@@ -744,9 +741,9 @@
         {
           if (argValue != null)
           {
-            int    msgID   = MSGID_ARGPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE;
-            String message = getMessage(msgID, argName);
-            throw new ArgumentException(msgID, message);
+            Message message =
+                ERR_ARGPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE.get(argName);
+            throw new ArgumentException(message);
           }
         }
       }
@@ -759,9 +756,8 @@
         // -n value
         if (arg.equals("-"))
         {
-          int    msgID   = MSGID_ARGPARSER_INVALID_DASH_AS_ARGUMENT;
-          String message = getMessage(msgID);
-          throw new ArgumentException(msgID, message);
+          Message message = ERR_ARGPARSER_INVALID_DASH_AS_ARGUMENT.get();
+          throw new ArgumentException(message);
         }
 
         char argCharacter = arg.charAt(1);
@@ -808,9 +804,9 @@
           else
           {
             // There is no such argument registered.
-            int    msgID   = MSGID_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID;
-            String message = getMessage(msgID, String.valueOf(argCharacter));
-            throw new ArgumentException(msgID, message);
+            Message message = ERR_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID.get(
+                String.valueOf(argCharacter));
+            throw new ArgumentException(message);
           }
         }
         else
@@ -839,31 +835,31 @@
           {
             if ((i+1) == numArguments)
             {
-              int msgID = MSGID_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID;
-              String message = getMessage(msgID, String.valueOf(argCharacter));
-              throw new ArgumentException(msgID, message);
+              Message message =
+                  ERR_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID.
+                    get(String.valueOf(argCharacter));
+              throw new ArgumentException(message);
             }
 
             argValue = rawArguments[++i];
           }
 
-          StringBuilder invalidReason = new StringBuilder();
+          MessageBuilder invalidReason = new MessageBuilder();
           if (! a.valueIsAcceptable(argValue, invalidReason))
           {
-            int    msgID   = MSGID_ARGPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID;
-            String message = getMessage(msgID, argValue,
-                                        String.valueOf(argCharacter),
-                                        invalidReason.toString());
-            throw new ArgumentException(msgID, message);
+            Message message = ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID.
+                get(argValue, String.valueOf(argCharacter),
+                    invalidReason.toString());
+            throw new ArgumentException(message);
           }
 
           // If the argument already has a value, then make sure it is
           // acceptable to have more than one.
           if (a.hasValue() && (! a.isMultiValued()))
           {
-            int    msgID   = MSGID_ARGPARSER_NOT_MULTIVALUED_FOR_SHORT_ID;
-            String message = getMessage(msgID, String.valueOf(argCharacter));
-            throw new ArgumentException(msgID, message);
+            Message message = ERR_ARGPARSER_NOT_MULTIVALUED_FOR_SHORT_ID.get(
+                String.valueOf(argCharacter));
+            throw new ArgumentException(message);
           }
 
           a.addValue(argValue);
@@ -885,19 +881,17 @@
               if (b == null)
               {
                 // There is no such argument registered.
-                int    msgID   = MSGID_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID;
-                String message = getMessage(msgID,
-                                            String.valueOf(argCharacter));
-                throw new ArgumentException(msgID, message);
+                Message message = ERR_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID.get(
+                    String.valueOf(argCharacter));
+                throw new ArgumentException(message);
               }
               else if (b.needsValue())
               {
                 // This means we're in a scenario like "-abc" where b is a
                 // valid argument that takes a value.  We don't support that.
-                int msgID = MSGID_ARGPARSER_CANT_MIX_ARGS_WITH_VALUES;
-                String message = getMessage(msgID, String.valueOf(argCharacter),
-                                            argValue, String.valueOf(c));
-                throw new ArgumentException(msgID, message);
+                Message message = ERR_ARGPARSER_CANT_MIX_ARGS_WITH_VALUES.get(
+                    String.valueOf(argCharacter), argValue, String.valueOf(c));
+                throw new ArgumentException(message);
               }
               else
               {
@@ -931,9 +925,8 @@
       {
         // It doesn't start with a dash and we don't allow trailing arguments,
         // so this is illegal.
-        int    msgID   = MSGID_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT;
-        String message = getMessage(msgID, arg);
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT.get(arg);
+        throw new ArgumentException(message);
       }
     }
 
@@ -944,9 +937,9 @@
     {
       if (trailingArguments.size() < minTrailingArguments)
       {
-        int    msgID   = MSGID_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS;
-        String message = getMessage(msgID, minTrailingArguments);
-        throw new ArgumentException(msgID, message);
+        Message message =
+            ERR_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS.get(minTrailingArguments);
+        throw new ArgumentException(message);
       }
     }
 
@@ -982,9 +975,9 @@
         // a problem.
         if ((! valueSet) && a.isRequired())
         {
-          int    msgID = MSGID_ARGPARSER_NO_VALUE_FOR_REQUIRED_ARG;
-          String message = getMessage(msgID, a.getName());
-          throw new ArgumentException(msgID, message);
+          Message message =
+              ERR_ARGPARSER_NO_VALUE_FOR_REQUIRED_ARG.get(a.getName());
+          throw new ArgumentException(message);
         }
       }
     }
@@ -1004,7 +997,7 @@
     usageOrVersionDisplayed = true;
     if ((toolDescription != null) && (toolDescription.length() > 0))
     {
-      buffer.append(wrapText(toolDescription, 79));
+      buffer.append(wrapText(toolDescription.toString(), 79));
       buffer.append(EOL);
     }
 
@@ -1047,7 +1040,7 @@
     buffer.append("--" + OPTION_LONG_PRODUCT_VERSION);
     buffer.append(EOL);
     buffer.append("    ");
-    buffer.append( getMessage(MSGID_DESCRIPTION_PRODUCT_VERSION));
+    buffer.append( INFO_DESCRIPTION_PRODUCT_VERSION.get());
     buffer.append(EOL);
 
     Argument helpArgument = null ;
@@ -1220,7 +1213,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.
-    String description = a.getDescription();
+    Message description = a.getDescription();
     if (description.length() <= 75)
     {
       buffer.append("    ");
@@ -1229,7 +1222,7 @@
     }
     else
     {
-      String s = description;
+      String s = description.toString();
       while (s.length() > 75)
       {
         int spacePos = s.lastIndexOf(' ', 75);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/args/BooleanArgument.java b/opendj-sdk/opends/src/server/org/opends/server/util/args/BooleanArgument.java
index 0d6b660..47f6fed 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/args/BooleanArgument.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/args/BooleanArgument.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.args;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
-
+import static org.opends.messages.UtilityMessages.*;
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -52,21 +52,19 @@
    *                           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  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
    */
   public BooleanArgument(String name, Character shortIdentifier,
-                         String longIdentifier, int descriptionID,
-                         Object... descriptionArgs)
+                         String longIdentifier,
+                         Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, false, false, false, null,
-          null, null, descriptionID, descriptionArgs);
+          null, null, description);
   }
 
 
@@ -83,12 +81,12 @@
    *          <CODE>false</CODE> if it is not.
    */
   public boolean valueIsAcceptable(String valueString,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // This argument type should never have a value, so any value provided will
     // be unacceptable.
-    int msgID = MSGID_BOOLEANARG_NO_VALUE_ALLOWED;
-    invalidReason.append(getMessage(msgID, getName()));
+
+    invalidReason.append(ERR_BOOLEANARG_NO_VALUE_ALLOWED.get(getName()));
 
     return false;
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/args/FileBasedArgument.java b/opendj-sdk/opends/src/server/org/opends/server/util/args/FileBasedArgument.java
index 909bc45..9e57c9a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/args/FileBasedArgument.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/args/FileBasedArgument.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.args;
+import org.opends.messages.Message;
 
 
 
@@ -33,8 +34,8 @@
 import java.io.FileReader;
 import java.util.LinkedHashMap;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -78,22 +79,20 @@
    *                           be displayed in usage information, or
    *                           <CODE>null</CODE> if this argument does not
    *                           require a value.
-   * @param  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
    */
   public FileBasedArgument(String name, Character shortIdentifier,
                            String longIdentifier, boolean isRequired,
-                           String valuePlaceholder, int descriptionID,
-                           Object... descriptionArgs)
+                           String valuePlaceholder,
+                           Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, false, true,
-          valuePlaceholder, null, null, descriptionID, descriptionArgs);
+          valuePlaceholder, null, null, description);
 
 
     namesToValues = new LinkedHashMap<String,String>();
@@ -125,10 +124,8 @@
    * @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  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
@@ -137,12 +134,12 @@
                            String longIdentifier, boolean isRequired,
                            boolean isMultiValued, String valuePlaceholder,
                            String defaultValue, String propertyName,
-                           int descriptionID, Object... descriptionArgs)
+                           Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
           true, valuePlaceholder, defaultValue, propertyName,
-          descriptionID, descriptionArgs);
+          description);
 
     namesToValues = new LinkedHashMap<String,String>();
   }
@@ -175,7 +172,7 @@
    *          <CODE>false</CODE> if it is not.
    */
   public boolean valueIsAcceptable(String valueString,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // First, make sure that the specified file exists.
     File valueFile;
@@ -184,16 +181,16 @@
       valueFile = new File(valueString);
       if (! valueFile.exists())
       {
-        int msgID = MSGID_FILEARG_NO_SUCH_FILE;
-        invalidReason.append(getMessage(msgID, valueString, getName()));
+        invalidReason.append(ERR_FILEARG_NO_SUCH_FILE.get(
+                valueString, getName()));
         return false;
       }
     }
     catch (Exception e)
     {
-      int msgID = MSGID_FILEARG_CANNOT_VERIFY_FILE_EXISTENCE;
-      invalidReason.append(getMessage(msgID, valueString, getName(),
-                                      getExceptionMessage(e)));
+      invalidReason.append(ERR_FILEARG_CANNOT_VERIFY_FILE_EXISTENCE.get(
+              valueString, getName(),
+              getExceptionMessage(e)));
       return false;
     }
 
@@ -206,9 +203,9 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_FILEARG_CANNOT_OPEN_FILE;
-      invalidReason.append(getMessage(msgID, valueString, getName(),
-                                      getExceptionMessage(e)));
+      invalidReason.append(ERR_FILEARG_CANNOT_OPEN_FILE.get(
+              valueString, getName(),
+              getExceptionMessage(e)));
       return false;
     }
 
@@ -221,9 +218,9 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_FILEARG_CANNOT_READ_FILE;
-      invalidReason.append(getMessage(msgID, valueString, getName(),
-                                      getExceptionMessage(e)));
+      invalidReason.append(ERR_FILEARG_CANNOT_READ_FILE.get(
+              valueString, getName(),
+              getExceptionMessage(e)));
       return false;
     }
     finally
@@ -238,8 +235,8 @@
     // If the line read is null, then that means the file was empty.
     if (line == null)
     {
-      int msgID = MSGID_FILEARG_EMPTY_FILE;
-      invalidReason.append(getMessage(msgID, valueString, getName()));
+
+      invalidReason.append(ERR_FILEARG_EMPTY_FILE.get(valueString, getName()));
       return false;
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/args/IntegerArgument.java b/opendj-sdk/opends/src/server/org/opends/server/util/args/IntegerArgument.java
index b6a9fc2..6d9e6db 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/args/IntegerArgument.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/args/IntegerArgument.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.args;
+import org.opends.messages.Message;
 
 
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
-
+import static org.opends.messages.UtilityMessages.*;
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -70,10 +70,8 @@
    *                           be displayed in usage information, or
    *                           <CODE>null</CODE> if this argument does not
    *                           require a value.
-   * @param  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
@@ -81,11 +79,11 @@
   public IntegerArgument(String name, Character shortIdentifier,
                          String longIdentifier, boolean isRequired,
                          boolean needsValue, String valuePlaceholder,
-                         int descriptionID, Object... descriptionArgs)
+                         Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
-          valuePlaceholder, null, null, descriptionID, descriptionArgs);
+          valuePlaceholder, null, null, description);
 
     hasLowerBound = false;
     hasUpperBound = false;
@@ -119,10 +117,8 @@
    *                           enforced for values of this argument.
    * @param  upperBound        The upper bound that should be enforced for
    *                           values of this argument.
-   * @param  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
@@ -132,11 +128,11 @@
                          boolean needsValue, String valuePlaceholder,
                          boolean hasLowerBound, int lowerBound,
                          boolean hasUpperBound, int upperBound,
-                         int descriptionID, Object... descriptionArgs)
+                         Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
-          valuePlaceholder, null, null, descriptionID, descriptionArgs);
+          valuePlaceholder, null, null, description);
 
     this.hasLowerBound = hasLowerBound;
     this.hasUpperBound = hasUpperBound;
@@ -145,9 +141,9 @@
 
     if (hasLowerBound && hasUpperBound && (lowerBound > upperBound))
     {
-      int    msgID   = MSGID_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND;
-      String message = getMessage(msgID, name, lowerBound, upperBound);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND.get(
+          name, lowerBound, upperBound);
+      throw new ArgumentException(message);
     }
   }
 
@@ -178,10 +174,8 @@
    * @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  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
@@ -190,13 +184,13 @@
                          String longIdentifier, boolean isRequired,
                          boolean isMultiValued, boolean needsValue,
                          String valuePlaceholder, int defaultValue,
-                         String propertyName, int descriptionID,
-                         Object... descriptionArgs)
+                         String propertyName,
+                         Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
           needsValue, valuePlaceholder, String.valueOf(defaultValue),
-          propertyName, descriptionID, descriptionArgs);
+          propertyName, description);
 
     hasLowerBound = false;
     hasUpperBound = false;
@@ -239,10 +233,8 @@
    *                           enforced for values of this argument.
    * @param  upperBound        The upper bound that should be enforced for
    *                           values of this argument.
-   * @param  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
@@ -253,12 +245,12 @@
                          String valuePlaceholder, int defaultValue,
                          String propertyName, boolean hasLowerBound,
                          int lowerBound, boolean hasUpperBound, int upperBound,
-                         int descriptionID, Object... descriptionArgs)
+                         Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
           needsValue, valuePlaceholder, String.valueOf(defaultValue),
-          propertyName, descriptionID, descriptionArgs);
+          propertyName, description);
 
     this.hasLowerBound = hasLowerBound;
     this.hasUpperBound = hasUpperBound;
@@ -267,9 +259,9 @@
 
     if (hasLowerBound && hasUpperBound && (lowerBound > upperBound))
     {
-      int    msgID   = MSGID_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND;
-      String message = getMessage(msgID, name, lowerBound, upperBound);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND.get(
+          name, lowerBound, upperBound);
+      throw new ArgumentException(message);
     }
   }
 
@@ -339,7 +331,7 @@
    *          <CODE>false</CODE> if it is not.
    */
   public boolean valueIsAcceptable(String valueString,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // First, the value must be decodable as an integer.
     int intValue;
@@ -349,8 +341,8 @@
     }
     catch (Exception e)
     {
-      int msgID = MSGID_ARG_CANNOT_DECODE_AS_INT;
-      invalidReason.append(getMessage(msgID, valueString, getName()));
+      invalidReason.append(ERR_ARG_CANNOT_DECODE_AS_INT.get(
+              valueString, getName()));
       return false;
     }
 
@@ -359,8 +351,8 @@
     // to it.
     if (hasLowerBound && (intValue < lowerBound))
     {
-      int msgID = MSGID_INTARG_VALUE_BELOW_LOWER_BOUND;
-      invalidReason.append(getMessage(msgID, getName(), intValue, lowerBound));
+      invalidReason.append(ERR_INTARG_VALUE_BELOW_LOWER_BOUND.get(
+              getName(), intValue, lowerBound));
       return false;
     }
 
@@ -369,8 +361,9 @@
     // it.
     if (hasUpperBound && (intValue > upperBound))
     {
-      int msgID = MSGID_INTARG_VALUE_ABOVE_UPPER_BOUND;
-      invalidReason.append(getMessage(msgID, getName(), intValue, upperBound));
+
+      invalidReason.append(ERR_INTARG_VALUE_ABOVE_UPPER_BOUND.get(
+              getName(), intValue, upperBound));
       return false;
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/args/MultiChoiceArgument.java b/opendj-sdk/opends/src/server/org/opends/server/util/args/MultiChoiceArgument.java
index f1bafd2..4bf87d0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/args/MultiChoiceArgument.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/args/MultiChoiceArgument.java
@@ -25,13 +25,14 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.args;
+import org.opends.messages.Message;
 
 
 
 import java.util.HashSet;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -75,10 +76,8 @@
    *                           formatted in lowercase.
    * @param  caseSensitive     Indicates whether the set of allowed values
    *                           should be treated in a case-sensitive manner.
-   * @param  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
@@ -87,12 +86,12 @@
                              String longIdentifier, boolean isRequired,
                              boolean needsValue, String valuePlaceholder,
                              HashSet<String> allowedValues,
-                             boolean caseSensitive, int descriptionID,
-                             Object... descriptionArgs)
+                             boolean caseSensitive,
+                             Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
-          valuePlaceholder, null, null, descriptionID, descriptionArgs);
+          valuePlaceholder, null, null, description);
 
     this.allowedValues = allowedValues;
     this.caseSensitive = caseSensitive;
@@ -131,10 +130,8 @@
    *                           formatted in lowercase.
    * @param  caseSensitive     Indicates whether the set of allowed values
    *                           should be treated in a case-sensitive manner.
-   * @param  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
@@ -144,13 +141,13 @@
                              boolean isMultiValued, boolean needsValue,
                              String valuePlaceholder, String defaultValue,
                              String propertyName, HashSet<String> allowedValues,
-                             boolean caseSensitive, int descriptionID,
-                             Object... descriptionArgs)
+                             boolean caseSensitive,
+                             Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
           needsValue, valuePlaceholder, defaultValue, propertyName,
-          descriptionID, descriptionArgs);
+          description);
 
     this.allowedValues = allowedValues;
     this.caseSensitive = caseSensitive;
@@ -197,14 +194,14 @@
    *          <CODE>false</CODE> if it is not.
    */
   public boolean valueIsAcceptable(String valueString,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     if (caseSensitive)
     {
       if (! allowedValues.contains(valueString))
       {
-        int msgID = MSGID_MCARG_VALUE_NOT_ALLOWED;
-        invalidReason.append(getMessage(msgID, getName(), valueString));
+        invalidReason.append(ERR_MCARG_VALUE_NOT_ALLOWED.get(
+                getName(), valueString));
 
         return false;
       }
@@ -213,8 +210,8 @@
     {
       if (! allowedValues.contains(toLowerCase(valueString)))
       {
-        int msgID = MSGID_MCARG_VALUE_NOT_ALLOWED;
-        invalidReason.append(getMessage(msgID, getName(), valueString));
+        invalidReason.append(
+                ERR_MCARG_VALUE_NOT_ALLOWED.get(getName(), valueString));
 
         return false;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/args/StringArgument.java b/opendj-sdk/opends/src/server/org/opends/server/util/args/StringArgument.java
index ed055f4..10881e8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/args/StringArgument.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/args/StringArgument.java
@@ -25,7 +25,9 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.args;
+import org.opends.messages.Message;
 
+import org.opends.messages.MessageBuilder;
 
 
 /**
@@ -50,10 +52,8 @@
    *                           be displayed in usage information, or
    *                           <CODE>null</CODE> if this argument does not
    *                           require a value.
-   * @param  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
@@ -61,11 +61,11 @@
   public StringArgument(String name, Character shortIdentifier,
                         String longIdentifier, boolean isRequired,
                         boolean needsValue, String valuePlaceholder,
-                        int descriptionID, Object... descriptionArgs)
+                        Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
-          valuePlaceholder, null, null, descriptionID, descriptionArgs);
+          valuePlaceholder, null, null, description);
   }
 
 
@@ -95,10 +95,8 @@
    * @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  descriptionID     The unique ID of the description for this
+   * @param  description       Message for the description of this
    *                           argument.
-   * @param  descriptionArgs   The arguments that are to be used when generating
-   *                           the description for this argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
    *                             parameters used to create this argument.
@@ -107,13 +105,12 @@
                         String longIdentifier, boolean isRequired,
                         boolean isMultiValued, boolean needsValue,
                         String valuePlaceholder, String defaultValue,
-                        String propertyName, int descriptionID,
-                        Object... descriptionArgs)
+                        String propertyName, Message description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
           needsValue, valuePlaceholder, defaultValue, propertyName,
-          descriptionID, descriptionArgs);
+          description);
   }
 
 
@@ -130,7 +127,7 @@
    *          <CODE>false</CODE> if it is not.
    */
   public boolean valueIsAcceptable(String valueString,
-                                   StringBuilder invalidReason)
+                                   MessageBuilder invalidReason)
   {
     // All values will be acceptable for this argument.
     return true;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/args/SubCommand.java b/opendj-sdk/opends/src/server/org/opends/server/util/args/SubCommand.java
index b54eee2..c887ca5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/args/SubCommand.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/args/SubCommand.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.args;
+import org.opends.messages.Message;
 
 
 
@@ -32,8 +33,8 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.UtilityMessages.*;
+
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -57,14 +58,11 @@
   // subcommand.
   private HashMap<String,Argument> longIDMap;
 
-  // The unique identifier for the description of this subcommand.
-  private int descriptionID;
-
   // The list of arguments associated with this subcommand.
   private LinkedList<Argument> arguments;
 
   // The description for this subcommand.
-  private String description;
+  private Message description;
 
   // The name of this subcommand.
   private String name;
@@ -98,19 +96,16 @@
    *          associated.
    * @param name
    *          The name of this subcommand.
-   * @param descriptionID
-   *          The unique ID for the description of this subcommand.
-   * @param descriptionArgs
-   *          The arguments to use to generate the description string
-   *          for this subcommand.
+   * @param description
+   *          The description of this subcommand.
    * @throws ArgumentException
    *           If the associated argument parser already has a
    *           subcommand with the same name.
    */
   public SubCommand(SubCommandArgumentParser parser, String name,
-      int descriptionID, Object... descriptionArgs) throws ArgumentException
+      Message description) throws ArgumentException
   {
-    this(parser, name, false, 0, 0, null, descriptionID, descriptionArgs);
+    this(parser, name, false, 0, 0, null, description);
   }
 
 
@@ -140,11 +135,8 @@
    *          The display name that should be used as a placeholder
    *          for unnamed trailing arguments in the generated usage
    *          information.
-   * @param descriptionID
-   *          The unique ID for the description of this subcommand.
-   * @param descriptionArgs
-   *          The arguments to use to generate the description string
-   *          for this subcommand.
+   * @param description
+   *          The description of this subcommand.
    * @throws ArgumentException
    *           If the associated argument parser already has a
    *           subcommand with the same name.
@@ -152,11 +144,11 @@
   public SubCommand(SubCommandArgumentParser parser, String name,
       boolean allowsTrailingArguments, int minTrailingArguments,
       int maxTrailingArguments, String trailingArgsDisplayName,
-      int descriptionID, Object... descriptionArgs) throws ArgumentException
+      Message description) throws ArgumentException
   {
     this.parser = parser;
     this.name = name;
-    this.descriptionID = descriptionID;
+    this.description = description;
     this.allowsTrailingArguments = allowsTrailingArguments;
     this.minTrailingArguments = minTrailingArguments;
     this.maxTrailingArguments = maxTrailingArguments;
@@ -171,13 +163,11 @@
 
     if (parser.hasSubCommand(nameToCheck))
     {
-      int    msgID   = MSGID_ARG_SUBCOMMAND_DUPLICATE_SUBCOMMAND;
-      String message = getMessage(msgID, name);
-      throw new ArgumentException(msgID, message);
+      Message message = ERR_ARG_SUBCOMMAND_DUPLICATE_SUBCOMMAND.get(name);
+      throw new ArgumentException(message);
     }
 
     parser.addSubCommand(this);
-    description = getMessage(descriptionID, descriptionArgs);
     shortIDMap  = new HashMap<Character,Argument>();
     longIDMap   = new HashMap<String,Argument>();
     arguments   = new LinkedList<Argument>();
@@ -196,25 +186,12 @@
   }
 
 
-
-  /**
-   * Retrieves the unique ID for the description of this subcommand.
-   *
-   * @return  The unique ID for the description of this subcommand.
-   */
-  public int getDescriptionID()
-  {
-    return descriptionID;
-  }
-
-
-
   /**
    * Retrieves the description for this subcommand.
    *
    * @return  The description for this subcommand.
    */
-  public String getDescription()
+  public Message getDescription()
   {
     return description;
   }
@@ -304,17 +281,17 @@
     {
       if (argumentName.equals(a.getName()))
       {
-        int    msgID   = MSGID_ARG_SUBCOMMAND_DUPLICATE_ARGUMENT_NAME;
-        String message = getMessage(msgID, name, argumentName);
-        throw new ArgumentException(msgID, message);
+        Message message =
+            ERR_ARG_SUBCOMMAND_DUPLICATE_ARGUMENT_NAME.get(name, argumentName);
+        throw new ArgumentException(message);
       }
     }
 
     if (parser.hasGlobalArgument(argumentName))
     {
-      int    msgID   = MSGID_ARG_SUBCOMMAND_ARGUMENT_GLOBAL_CONFLICT;
-      String message = getMessage(msgID, argumentName, name);
-      throw new ArgumentException(msgID, message);
+      Message message =
+          ERR_ARG_SUBCOMMAND_ARGUMENT_GLOBAL_CONFLICT.get(argumentName, name);
+      throw new ArgumentException(message);
     }
 
 
@@ -323,20 +300,18 @@
     {
       if (shortIDMap.containsKey(shortID))
       {
-        int    msgID   = MSGID_ARG_SUBCOMMAND_DUPLICATE_SHORT_ID;
-        String message = getMessage(msgID, argumentName, name,
-                                    String.valueOf(shortID),
-                                    shortIDMap.get(shortID).getName());
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_ARG_SUBCOMMAND_DUPLICATE_SHORT_ID.
+            get(argumentName, name, String.valueOf(shortID),
+                shortIDMap.get(shortID).getName());
+        throw new ArgumentException(message);
       }
 
       Argument arg = parser.getGlobalArgumentForShortID(shortID);
       if (arg != null)
       {
-        int    msgID   = MSGID_ARG_SUBCOMMAND_ARGUMENT_SHORT_ID_GLOBAL_CONFLICT;
-        String message = getMessage(msgID, argumentName, name,
-                                    String.valueOf(shortID), arg.getName());
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_ARG_SUBCOMMAND_ARGUMENT_SHORT_ID_GLOBAL_CONFLICT.
+            get(argumentName, name, String.valueOf(shortID), arg.getName());
+        throw new ArgumentException(message);
       }
     }
 
@@ -351,19 +326,17 @@
 
       if (longIDMap.containsKey(longID))
       {
-        int    msgID   = MSGID_ARG_SUBCOMMAND_DUPLICATE_LONG_ID;
-        String message = getMessage(msgID, argumentName, name, longID,
-                                    longIDMap.get(longID).getName());
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_ARG_SUBCOMMAND_DUPLICATE_LONG_ID.get(
+            argumentName, name, longID, longIDMap.get(longID).getName());
+        throw new ArgumentException(message);
       }
 
       Argument arg = parser.getGlobalArgumentForLongID(longID);
       if (arg != null)
       {
-        int    msgID   = MSGID_ARG_SUBCOMMAND_ARGUMENT_LONG_ID_GLOBAL_CONFLICT;
-        String message = getMessage(msgID, argumentName, name, longID,
-                                    arg.getName());
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_ARG_SUBCOMMAND_ARGUMENT_LONG_ID_GLOBAL_CONFLICT.
+            get(argumentName, name, longID, arg.getName());
+        throw new ArgumentException(message);
       }
     }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/args/SubCommandArgumentParser.java b/opendj-sdk/opends/src/server/org/opends/server/util/args/SubCommandArgumentParser.java
index 0bc42fa..0aca8af 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/args/SubCommandArgumentParser.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/args/SubCommandArgumentParser.java
@@ -25,12 +25,12 @@
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.args;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 
-
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.messages.ToolMessages.*;
-import static org.opends.server.messages.UtilityMessages.*;
+import static org.opends.messages.ToolMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -110,7 +110,7 @@
 
   // A human-readable description for the tool, which will be included when
   // displaying usage information.
-  private String toolDescription;
+  private Message toolDescription;
 
   // The raw set of command-line arguments that were provided.
   private String[] rawArguments;
@@ -135,7 +135,7 @@
    *                                     argument names should be treated in a
    *                                     case-sensitive manner.
    */
-  public SubCommandArgumentParser(String mainClassName, String toolDescription,
+  public SubCommandArgumentParser(String mainClassName, Message toolDescription,
                                   boolean longArgumentsCaseSensitive)
   {
     this.mainClassName              = mainClassName;
@@ -180,7 +180,7 @@
    * @return  A human-readable description for this tool, or {@code null} if
    *          none is available.
    */
-  public String getToolDescription()
+  public Message getToolDescription()
   {
     return toolDescription;
   }
@@ -428,17 +428,17 @@
     String argumentName = argument.getName();
     if (globalArgumentMap.containsKey(argumentName))
     {
-      int    msgID   = MSGID_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_NAME;
-      String message = getMessage(msgID, argumentName);
-      throw new ArgumentException(msgID, message);
+      Message message =
+          ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_NAME.get(argumentName);
+      throw new ArgumentException(message);
     }
     for (SubCommand s : subCommands.values())
     {
       if (s.getArgumentForName(argumentName) != null)
       {
-        int    msgID   = MSGID_SUBCMDPARSER_GLOBAL_ARG_NAME_SUBCMD_CONFLICT;
-        String message = getMessage(msgID, argumentName, s.getName());
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_SUBCMDPARSER_GLOBAL_ARG_NAME_SUBCMD_CONFLICT.get(
+            argumentName, s.getName());
+        throw new ArgumentException(message);
       }
     }
 
@@ -450,10 +450,9 @@
       {
         String name = globalShortIDMap.get(shortID).getName();
 
-        int    msgID   = MSGID_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_SHORT_ID;
-        String message = getMessage(msgID, String.valueOf(shortID),
-                                    argumentName, name);
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_SHORT_ID.get(
+            String.valueOf(shortID), argumentName, name);
+        throw new ArgumentException(message);
       }
 
       for (SubCommand s : subCommands.values())
@@ -463,10 +462,9 @@
           String cmdName = s.getName();
           String name    = s.getArgument(shortID).getName();
 
-          int    msgID   = MSGID_SUBCMDPARSER_GLOBAL_ARG_SHORT_ID_CONFLICT;
-          String message = getMessage(msgID, String.valueOf(shortID),
-                                      argumentName, name, cmdName);
-          throw new ArgumentException(msgID, message);
+          Message message = ERR_SUBCMDPARSER_GLOBAL_ARG_SHORT_ID_CONFLICT.get(
+              String.valueOf(shortID), argumentName, name, cmdName);
+          throw new ArgumentException(message);
         }
       }
     }
@@ -484,9 +482,9 @@
       {
         String name = globalLongIDMap.get(longID).getName();
 
-        int    msgID   = MSGID_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_LONG_ID;
-        String message = getMessage(msgID, longID, argumentName, name);
-        throw new ArgumentException(msgID, message);
+        Message message = ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_LONG_ID.get(
+            longID, argumentName, name);
+        throw new ArgumentException(message);
       }
 
       for (SubCommand s : subCommands.values())
@@ -496,10 +494,9 @@
           String cmdName = s.getName();
           String name    = s.getArgument(longID).getName();
 
-          int    msgID   = MSGID_SUBCMDPARSER_GLOBAL_ARG_LONG_ID_CONFLICT;
-          String message = getMessage(msgID, longID, argumentName, name,
-                                      cmdName);
-          throw new ArgumentException(msgID, message);
+          Message message = ERR_SUBCMDPARSER_GLOBAL_ARG_LONG_ID_CONFLICT.get(
+              longID, argumentName, name, cmdName);
+          throw new ArgumentException(message);
         }
       }
     }
@@ -670,10 +667,9 @@
     {
       if (requirePropertiesFile)
       {
-        int    msgID   = MSGID_SUBCMDPARSER_CANNOT_READ_PROPERTIES_FILE;
-        String message = getMessage(msgID, String.valueOf(propertiesFile),
-                                    getExceptionMessage(e));
-        throw new ArgumentException(msgID, message, e);
+        Message message = ERR_SUBCMDPARSER_CANNOT_READ_PROPERTIES_FILE.get(
+            String.valueOf(propertiesFile), getExceptionMessage(e));
+        throw new ArgumentException(message, e);
       }
     }
 
@@ -717,10 +713,9 @@
         if ((subCommand.getMaxTrailingArguments() > 0) &&
             (trailingArguments.size() > subCommand.getMaxTrailingArguments()))
         {
-          int    msgID   = MSGID_ARGPARSER_TOO_MANY_TRAILING_ARGS;
-          String message = getMessage(msgID, subCommand
-              .getMaxTrailingArguments());
-          throw new ArgumentException(msgID, message);
+          Message message = ERR_ARGPARSER_TOO_MANY_TRAILING_ARGS.get(
+              subCommand.getMaxTrailingArguments());
+          throw new ArgumentException(message);
         }
 
         continue;
@@ -748,9 +743,8 @@
         else if (equalPos == 0)
         {
           // The argument starts with "--=", which is not acceptable.
-          int    msgID   = MSGID_SUBCMDPARSER_LONG_ARG_WITHOUT_NAME;
-          String message = getMessage(msgID, arg);
-          throw new ArgumentException(msgID, message);
+          Message message = ERR_SUBCMDPARSER_LONG_ARG_WITHOUT_NAME.get(arg);
+          throw new ArgumentException(message);
         }
         else
         {
@@ -799,9 +793,9 @@
             else
             {
               // There is no such global argument.
-              int msgID = MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_LONG_ID;
-              String message = getMessage(msgID, argName);
-              throw new ArgumentException(msgID, message);
+              Message message =
+                  ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_LONG_ID.get(argName);
+              throw new ArgumentException(message);
             }
           }
           else
@@ -836,9 +830,9 @@
               else
               {
                 // There is no such global or subcommand argument.
-                int    msgID   = MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_LONG_ID;
-                String message = getMessage(msgID, argName);
-                throw new ArgumentException(msgID, message);
+                Message message =
+                    ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_LONG_ID.get(argName);
+                throw new ArgumentException(message);
               }
             }
           }
@@ -866,30 +860,30 @@
           {
             if ((i+1) == numArguments)
             {
-              int msgID = MSGID_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID;
-              String message = getMessage(msgID, argName);
-              throw new ArgumentException(msgID, message);
+              Message message =
+                  ERR_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID.
+                    get(argName);
+              throw new ArgumentException(message);
             }
 
             argValue = rawArguments[++i];
           }
 
-          StringBuilder invalidReason = new StringBuilder();
+          MessageBuilder invalidReason = new MessageBuilder();
           if (! a.valueIsAcceptable(argValue, invalidReason))
           {
-            int    msgID   = MSGID_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID;
-            String message = getMessage(msgID, argValue, argName,
-                                        invalidReason.toString());
-            throw new ArgumentException(msgID, message);
+            Message message = ERR_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID.
+                get(argValue, argName, invalidReason.toString());
+            throw new ArgumentException(message);
           }
 
           // If the argument already has a value, then make sure it is
           // acceptable to have more than one.
           if (a.hasValue() && (! a.isMultiValued()))
           {
-            int    msgID   = MSGID_SUBCMDPARSER_NOT_MULTIVALUED_FOR_LONG_ID;
-            String message = getMessage(msgID, argName);
-            throw new ArgumentException(msgID, message);
+            Message message =
+                ERR_SUBCMDPARSER_NOT_MULTIVALUED_FOR_LONG_ID.get(argName);
+            throw new ArgumentException(message);
           }
 
           a.addValue(argValue);
@@ -898,9 +892,9 @@
         {
           if (argValue != null)
           {
-            int msgID = MSGID_SUBCMDPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE;
-            String message = getMessage(msgID, argName);
-            throw new ArgumentException(msgID, message);
+            Message message =
+                ERR_SUBCMDPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE.get(argName);
+            throw new ArgumentException(message);
           }
         }
       }
@@ -913,9 +907,8 @@
         // -n value
         if (arg.equals("-"))
         {
-          int    msgID   = MSGID_SUBCMDPARSER_INVALID_DASH_AS_ARGUMENT;
-          String message = getMessage(msgID);
-          throw new ArgumentException(msgID, message);
+          Message message = ERR_SUBCMDPARSER_INVALID_DASH_AS_ARGUMENT.get();
+          throw new ArgumentException(message);
         }
 
         char argCharacter = arg.charAt(1);
@@ -984,18 +977,19 @@
               {
                 // -V is defined in another suncommand, so we can
                 // accepted it as the version information argument
-                int msgID = MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID;
-                String message = getMessage(msgID,
-                    String.valueOf(argCharacter));
-                throw new ArgumentException(msgID, message);
+                Message message =
+                    ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID.
+                      get(String.valueOf(argCharacter));
+                throw new ArgumentException(message);
               }
             }
             else
             {
               // There is no such argument registered.
-              int msgID = MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID;
-              String message = getMessage(msgID, String.valueOf(argCharacter));
-              throw new ArgumentException(msgID, message);
+              Message message =
+                  ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID.
+                    get(String.valueOf(argCharacter));
+              throw new ArgumentException(message);
             }
           }
           else
@@ -1050,10 +1044,9 @@
               else
               {
                 // There is no such argument registered.
-                int    msgID   = MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID;
-                String message = getMessage(msgID,
-                                            String.valueOf(argCharacter));
-                throw new ArgumentException(msgID, message);
+                Message message = ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID.get(
+                    String.valueOf(argCharacter));
+                throw new ArgumentException(message);
               }
             }
           }
@@ -1081,32 +1074,31 @@
           {
             if ((i+1) == numArguments)
             {
-              int msgID =
-                       MSGID_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID;
-              String message = getMessage(msgID, String.valueOf(argCharacter));
-              throw new ArgumentException(msgID, message);
+              Message message =
+                  ERR_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID.
+                    get(String.valueOf(argCharacter));
+              throw new ArgumentException(message);
             }
 
             argValue = rawArguments[++i];
           }
 
-          StringBuilder invalidReason = new StringBuilder();
+          MessageBuilder invalidReason = new MessageBuilder();
           if (! a.valueIsAcceptable(argValue, invalidReason))
           {
-            int    msgID   = MSGID_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID;
-            String message = getMessage(msgID, argValue,
-                                        String.valueOf(argCharacter),
-                                        invalidReason.toString());
-            throw new ArgumentException(msgID, message);
+            Message message = ERR_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID.
+                get(argValue, String.valueOf(argCharacter),
+                    invalidReason.toString());
+            throw new ArgumentException(message);
           }
 
           // If the argument already has a value, then make sure it is
           // acceptable to have more than one.
           if (a.hasValue() && (! a.isMultiValued()))
           {
-            int    msgID   = MSGID_SUBCMDPARSER_NOT_MULTIVALUED_FOR_SHORT_ID;
-            String message = getMessage(msgID, String.valueOf(argCharacter));
-            throw new ArgumentException(msgID, message);
+            Message message = ERR_SUBCMDPARSER_NOT_MULTIVALUED_FOR_SHORT_ID.get(
+                String.valueOf(argCharacter));
+            throw new ArgumentException(message);
           }
 
           a.addValue(argValue);
@@ -1129,21 +1121,19 @@
               {
                 if (subCommand == null)
                 {
-                  int msgID =
-                           MSGID_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID;
-                  String message = getMessage(msgID,
-                                              String.valueOf(argCharacter));
-                  throw new ArgumentException(msgID, message);
+                  Message message =
+                      ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID.
+                        get(String.valueOf(argCharacter));
+                  throw new ArgumentException(message);
                 }
                 else
                 {
                   b = subCommand.getArgument(c);
                   if (b == null)
                   {
-                    int msgID = MSGID_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID;
-                    String message = getMessage(msgID,
-                                                String.valueOf(argCharacter));
-                    throw new ArgumentException(msgID, message);
+                    Message message = ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID.
+                        get(String.valueOf(argCharacter));
+                    throw new ArgumentException(message);
                   }
                 }
               }
@@ -1152,10 +1142,10 @@
               {
                 // This means we're in a scenario like "-abc" where b is a
                 // valid argument that takes a value.  We don't support that.
-                int msgID = MSGID_SUBCMDPARSER_CANT_MIX_ARGS_WITH_VALUES;
-                String message = getMessage(msgID, String.valueOf(argCharacter),
-                                            argValue, String.valueOf(c));
-                throw new ArgumentException(msgID, message);
+                Message message = ERR_SUBCMDPARSER_CANT_MIX_ARGS_WITH_VALUES.
+                    get(String.valueOf(argCharacter), argValue,
+                        String.valueOf(c));
+                throw new ArgumentException(message);
               }
               else
               {
@@ -1189,9 +1179,8 @@
         else
         {
           // Trailing arguments are not allowed for this sub-command.
-          int    msgID   = MSGID_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT;
-          String message = getMessage(msgID, arg);
-          throw new ArgumentException(msgID, message);
+          Message message = ERR_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT.get(arg);
+          throw new ArgumentException(message);
         }
       }
       else
@@ -1206,9 +1195,8 @@
         SubCommand sc = subCommands.get(nameToCheck);
         if (sc == null)
         {
-          int    msgID   = MSGID_SUBCMDPARSER_INVALID_ARGUMENT;
-          String message = getMessage(msgID, arg);
-          throw new ArgumentException(msgID, message);
+          Message message = ERR_SUBCMDPARSER_INVALID_ARGUMENT.get(arg);
+          throw new ArgumentException(message);
         }
         else
         {
@@ -1227,9 +1215,9 @@
       {
         if (trailingArguments.size() < minTrailingArguments)
         {
-          int msgID = MSGID_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS;
-          String message = getMessage(msgID, minTrailingArguments);
-          throw new ArgumentException(msgID, message);
+          Message message = ERR_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS.get(
+              minTrailingArguments);
+          throw new ArgumentException(message);
         }
       }
     }
@@ -1264,9 +1252,9 @@
         // a problem.
         if ((! valueSet) && a.isRequired())
         {
-          int    msgID = MSGID_SUBCMDPARSER_NO_VALUE_FOR_REQUIRED_ARG;
-          String message = getMessage(msgID, a.getName());
-          throw new ArgumentException(msgID, message);
+          Message message =
+              ERR_SUBCMDPARSER_NO_VALUE_FOR_REQUIRED_ARG.get(a.getName());
+          throw new ArgumentException(message);
         }
       }
     }
@@ -1304,9 +1292,9 @@
           // that's a problem.
           if ((! valueSet) && a.isRequired())
           {
-            int    msgID = MSGID_SUBCMDPARSER_NO_VALUE_FOR_REQUIRED_ARG;
-            String message = getMessage(msgID, a.getName());
-            throw new ArgumentException(msgID, message);
+            Message message =
+                ERR_SUBCMDPARSER_NO_VALUE_FOR_REQUIRED_ARG.get(a.getName());
+            throw new ArgumentException(message);
           }
         }
       }
@@ -1324,7 +1312,7 @@
    * @param  subCommand  The subcommand for which to display the usage
    *                     information.
    */
-  public void getSubCommandUsage(StringBuilder buffer, SubCommand subCommand)
+  public void getSubCommandUsage(MessageBuilder buffer, SubCommand subCommand)
   {
     usageOrVersionDisplayed = true;
     String scriptName = System.getProperty(PROPERTY_SCRIPT_NAME);
@@ -1332,7 +1320,7 @@
     {
       scriptName = "java " + mainClassName;
     }
-    buffer.append(getMessage(MSGID_ARGPARSER_USAGE));
+    buffer.append(INFO_ARGPARSER_USAGE.get());
     buffer.append("  ");
     buffer.append(scriptName);
 
@@ -1350,17 +1338,17 @@
     if ( ! globalArgumentList.isEmpty())
     {
       buffer.append(EOL);
-      buffer.append(getMessage(MSGID_GLOBAL_OPTIONS));
+      buffer.append(INFO_GLOBAL_OPTIONS.get());
       buffer.append(EOL);
       buffer.append("    ");
-      buffer.append(getMessage(MSGID_GLOBAL_OPTIONS_REFERENCE, scriptName));
+      buffer.append(INFO_GLOBAL_OPTIONS_REFERENCE.get(scriptName));
       buffer.append(EOL);
     }
 
     if ( ! subCommand.getArguments().isEmpty() )
     {
       buffer.append(EOL);
-      buffer.append(getMessage(MSGID_SUBCMD_OPTIONS));
+      buffer.append(INFO_SUBCMD_OPTIONS.get());
       buffer.append(EOL);
     }
     for (Argument a : subCommand.getArguments())
@@ -1446,7 +1434,7 @@
       // Write one or more lines with the description of the argument.  We will
       // 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.
-      String description = a.getDescription();
+      Message description = a.getDescription();
       if (description.length() <= 75)
       {
         buffer.append("    ");
@@ -1455,7 +1443,7 @@
       }
       else
       {
-        String s = description;
+        String s = description.toString();
         while (s.length() > 75)
         {
           int spacePos = s.lastIndexOf(' ', 75);
@@ -1508,9 +1496,9 @@
    * @return  A string containing usage information based on the defined
    *          arguments.
    */
-  public String getUsage()
+  public Message getUsage()
   {
-    StringBuilder buffer = new StringBuilder();
+    MessageBuilder buffer = new MessageBuilder();
 
     if (subCommand == null) {
       if (usageGroupArguments.size() > 1) {
@@ -1525,7 +1513,7 @@
       getSubCommandUsage(buffer, subCommand);
     }
 
-    return buffer.toString();
+    return buffer.toMessage();
   }
 
 
@@ -1535,7 +1523,7 @@
    *
    * @return A string describing how the user can get more help.
    */
-  public String getHelpUsageReference()
+  public Message getHelpUsageReference()
   {
     usageOrVersionDisplayed = true;
     String scriptName = System.getProperty(PROPERTY_SCRIPT_NAME);
@@ -1544,10 +1532,10 @@
       scriptName = "java " + mainClassName;
     }
 
-    StringBuilder buffer = new StringBuilder();
-    buffer.append(getMessage(MSGID_GLOBAL_HELP_REFERENCE, scriptName));
+    MessageBuilder buffer = new MessageBuilder();
+    buffer.append(INFO_GLOBAL_HELP_REFERENCE.get(scriptName));
     buffer.append(EOL);
-    return buffer.toString();
+    return buffer.toMessage();
   }
 
 
@@ -1599,7 +1587,7 @@
   // Get usage for a specific usage argument.
   private void getUsage(Argument a, OutputStream outputStream)
       throws IOException {
-    StringBuilder buffer = new StringBuilder();
+    MessageBuilder buffer = new MessageBuilder();
 
     if (a.equals(usageArgument) && subCommand != null) {
       getSubCommandUsage(buffer, subCommand);
@@ -1623,7 +1611,7 @@
   // Get default usage.
   private void getUsage(OutputStream outputStream)
       throws IOException {
-    outputStream.write(getBytes(getUsage()));
+    outputStream.write(getBytes(String.valueOf(getUsage())));
   }
 
 
@@ -1631,7 +1619,7 @@
   // Appends complete usage information for the specified set of
   // sub-commands.
   private void getFullUsage(Collection<SubCommand> c,
-      boolean showGlobalOptions, StringBuilder buffer) {
+      boolean showGlobalOptions, MessageBuilder buffer) {
     usageOrVersionDisplayed = true;
     if ((toolDescription != null) && (toolDescription.length() > 0))
     {
@@ -1644,7 +1632,7 @@
     {
       scriptName = "java " + mainClassName;
     }
-    buffer.append(getMessage(MSGID_ARGPARSER_USAGE));
+    buffer.append(INFO_ARGPARSER_USAGE.get());
     buffer.append("  ");
     buffer.append(scriptName);
 
@@ -1655,11 +1643,11 @@
 
     if (c.isEmpty())
     {
-      buffer.append(getMessage(MSGID_SUBCMDPARSER_SUBCMD_HELP_HEADING));
+      buffer.append(INFO_SUBCMDPARSER_SUBCMD_HELP_HEADING.get());
     }
     else
     {
-      buffer.append(getMessage(MSGID_SUBCMDPARSER_SUBCMD_HEADING));
+      buffer.append(INFO_SUBCMDPARSER_SUBCMD_HEADING.get());
     }
     buffer.append(EOL);
 
@@ -1703,7 +1691,7 @@
     buffer.append(EOL);
 
     if (showGlobalOptions) {
-      buffer.append(getMessage(MSGID_SUBCMDPARSER_GLOBAL_HEADING));
+      buffer.append(INFO_SUBCMDPARSER_GLOBAL_HEADING.get());
       buffer.append(EOL);
 
       // --version is a builtin option
@@ -1730,7 +1718,7 @@
       buffer.append("--" + OPTION_LONG_PRODUCT_VERSION);
       buffer.append(EOL);
       buffer.append("    ");
-      buffer.append( getMessage(MSGID_DESCRIPTION_PRODUCT_VERSION));
+      buffer.append( INFO_DESCRIPTION_PRODUCT_VERSION.get());
       buffer.append(EOL);
 
       // Display non-usage arguments.
@@ -1765,7 +1753,7 @@
    *          The buffer to which the usage information should be
    *          appended.
    */
-  private void printArgumentUsage(Argument a, StringBuilder buffer) {
+  private void printArgumentUsage(Argument a, MessageBuilder buffer) {
     String value;
     if (a.needsValue())
     {
@@ -1818,7 +1806,7 @@
     }
 
     buffer.append(EOL);
-    indentAndWrap("    ", a.getDescription(), buffer);
+    indentAndWrap(Message.raw("    "), a.getDescription(), buffer);
   }
 
 
@@ -1828,7 +1816,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(String indent, String text, StringBuilder buffer)
+  private void indentAndWrap(Message indent, Message text,
+                             MessageBuilder buffer)
   {
     int actualSize = 80 - indent.length();
     if (text.length() <= actualSize)
@@ -1839,7 +1828,7 @@
     }
     else
     {
-      String s = text;
+      String s = text.toString();
       while (s.length() > actualSize)
       {
         int spacePos = s.lastIndexOf(' ', actualSize);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/util/table/TableBuilder.java b/opendj-sdk/opends/src/server/org/opends/server/util/table/TableBuilder.java
index 7706250..bcd86dd 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/util/table/TableBuilder.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/util/table/TableBuilder.java
@@ -25,6 +25,7 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util.table;
+import org.opends.messages.Message;
 
 
 
@@ -50,7 +51,7 @@
   private List<Integer> columnWidths = new ArrayList<Integer>();
 
   // The list of column headings.
-  private List<String> header = new ArrayList<String>();
+  private List<Message> header = new ArrayList<Message>();
 
   // The current number of rows in the table.
   private int height = 0;
@@ -242,7 +243,7 @@
    * Appends a new blank column heading to the header row.
    */
   public void appendHeading() {
-    appendHeading("");
+    appendHeading(Message.EMPTY);
   }
 
 
@@ -253,7 +254,7 @@
    * @param value
    *          The column heading value.
    */
-  public void appendHeading(String value) {
+  public void appendHeading(Message value) {
     header.add(value);
 
     // Update statistics.
@@ -343,8 +344,8 @@
 
     // Column headings.
     serializer.startHeader();
-    for (String s : header) {
-      serializer.addHeading(s);
+    for (Message s : header) {
+      serializer.addHeading(s.toString());
     }
     serializer.endHeader();
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
index 211629a..9d06f82 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
@@ -25,10 +25,11 @@
  *      Portions Copyright 2007 Sun Microsystems, Inc.
  */
 package org.opends.server.workflowelement.localbackend;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 
 import java.util.ArrayList;
@@ -140,19 +141,17 @@
     {
       // This must mean there are attribute options, which we won't allow for
       // passwords.
-      int msgID = MSGID_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED;
-      String message = getMessage(msgID, passwordAttribute.getNameOrOID());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED.get(
+          passwordAttribute.getNameOrOID());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     Attribute passwordAttr = attrList.get(0);
     if (passwordAttr.hasOptions())
     {
-      int msgID = MSGID_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED;
-      String message = getMessage(msgID, passwordAttribute.getNameOrOID());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED.get(
+          passwordAttribute.getNameOrOID());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     LinkedHashSet<AttributeValue> values = passwordAttr.getValues();
@@ -167,10 +166,9 @@
       // FIXME -- What if they're pre-encoded and might all be the same?
       addPWPolicyControl(PasswordPolicyErrorType.PASSWORD_MOD_NOT_ALLOWED);
 
-      int    msgID   = MSGID_PWPOLICY_MULTIPLE_PW_VALUES_NOT_ALLOWED;
-      String message = getMessage(msgID, passwordAttribute.getNameOrOID());
-      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
-                                   msgID);
+      Message message = ERR_PWPOLICY_MULTIPLE_PW_VALUES_NOT_ALLOWED.get(
+          passwordAttribute.getNameOrOID());
+      throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     CopyOnWriteArrayList<PasswordStorageScheme> defaultStorageSchemes =
@@ -196,11 +194,10 @@
             addPWPolicyControl(
                  PasswordPolicyErrorType.INSUFFICIENT_PASSWORD_QUALITY);
 
-            int    msgID   = MSGID_PWPOLICY_PREENCODED_NOT_ALLOWED;
-            String message = getMessage(msgID,
-                                        passwordAttribute.getNameOrOID());
+            Message message = ERR_PWPOLICY_PREENCODED_NOT_ALLOWED.get(
+                passwordAttribute.getNameOrOID());
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
         }
       }
@@ -218,11 +215,10 @@
             addPWPolicyControl(
                  PasswordPolicyErrorType.INSUFFICIENT_PASSWORD_QUALITY);
 
-            int    msgID   = MSGID_PWPOLICY_PREENCODED_NOT_ALLOWED;
-            String message = getMessage(msgID,
-                                        passwordAttribute.getNameOrOID());
+            Message message = ERR_PWPOLICY_PREENCODED_NOT_ALLOWED.get(
+                passwordAttribute.getNameOrOID());
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
         }
       }
@@ -234,7 +230,7 @@
       {
         // There are never any current passwords for an add operation.
         HashSet<ByteString> currentPasswords = new HashSet<ByteString>(0);
-        StringBuilder invalidReason = new StringBuilder();
+        MessageBuilder invalidReason = new MessageBuilder();
         for (PasswordValidator<?> validator :
              passwordPolicy.getPasswordValidators().values())
         {
@@ -244,11 +240,11 @@
             addPWPolicyControl(
                  PasswordPolicyErrorType.INSUFFICIENT_PASSWORD_QUALITY);
 
-            int    msgID   = MSGID_PWPOLICY_VALIDATION_FAILED;
-            String message = getMessage(msgID, passwordAttribute.getNameOrOID(),
-                                        String.valueOf(invalidReason));
+            Message message = ERR_PWPOLICY_VALIDATION_FAILED.
+                get(passwordAttribute.getNameOrOID(),
+                    String.valueOf(invalidReason));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
-                                         message, msgID);
+                                         message);
           }
         }
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java
index 4bc2331..a806599 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java
@@ -26,10 +26,13 @@
  */
 package org.opends.server.workflowelement.localbackend;
 
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.messages.CoreMessages.*;
-import static org.opends.server.messages.MessageHandler.getMessage;
+import static org.opends.messages.CoreMessages.*;
+import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.getExceptionMessage;
 import static org.opends.server.util.StaticUtils.secondsToTimeString;
@@ -104,8 +107,8 @@
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
+
+
 import org.opends.server.types.LockManager;
 import org.opends.server.types.Modification;
 import org.opends.server.types.ModificationType;
@@ -251,8 +254,7 @@
       {
         localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
         localOp.appendErrorMessage(
-            getMessage(MSGID_MODIFY_NO_MODIFICATIONS,
-            String.valueOf(entryDN)));
+            ERR_MODIFY_NO_MODIFICATIONS.get(String.valueOf(entryDN)));
         break modifyProcessing;
       }
 
@@ -282,8 +284,8 @@
 
           localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-          int msgID = MSGID_MODIFY_MUST_CHANGE_PASSWORD;
-          localOp.appendErrorMessage(getMessage(msgID));
+
+          localOp.appendErrorMessage(ERR_MODIFY_MUST_CHANGE_PASSWORD.get());
           break modifyProcessing;
         }
       }
@@ -310,8 +312,7 @@
       {
         localOp.setResultCode(DirectoryServer.getServerErrorResultCode());
         localOp.appendErrorMessage(
-            getMessage(MSGID_MODIFY_CANNOT_LOCK_ENTRY,
-            String.valueOf(entryDN)));
+            ERR_MODIFY_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN)));
 
         skipPostOperation = true;
         break modifyProcessing;
@@ -342,7 +343,7 @@
           }
 
           localOp.setResultCode(de.getResultCode());
-          localOp.appendErrorMessage(de.getErrorMessage());
+          localOp.appendErrorMessage(de.getMessageObject());
           localOp.setMatchedDN(de.getMatchedDN());
           localOp.setReferralURLs(de.getReferralURLs());
 
@@ -352,8 +353,8 @@
         if (currentEntry == null)
         {
           localOp.setResultCode(ResultCode.NO_SUCH_OBJECT);
-          localOp.appendErrorMessage(getMessage(MSGID_MODIFY_NO_SUCH_ENTRY,
-              String.valueOf(entryDN)));
+          localOp.appendErrorMessage(ERR_MODIFY_NO_SUCH_ENTRY.get(
+                  String.valueOf(entryDN)));
 
           // See if one of the entry's ancestors exists.
           DN parentDN = entryDN.getParentDNInSuffix();
@@ -400,8 +401,9 @@
                      isAllowed(entryDN, localOp, c))
             {
               localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
-              int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS;
-              localOp.appendErrorMessage(getMessage(msgID, oid));
+
+              localOp.appendErrorMessage(
+                      ERR_CONTROL_INSUFFICIENT_ACCESS_RIGHTS.get(oid));
               skipPostOperation = true;
               break modifyProcessing;
             }
@@ -428,7 +430,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break modifyProcessing;
                 }
@@ -444,8 +446,7 @@
                   localOp.setResultCode(ResultCode.ASSERTION_FAILED);
 
                   localOp.appendErrorMessage(
-                      getMessage(MSGID_MODIFY_ASSERTION_FAILED,
-                      String.valueOf(entryDN)));
+                      ERR_MODIFY_ASSERTION_FAILED.get(String.valueOf(entryDN)));
 
                   break modifyProcessing;
                 }
@@ -459,10 +460,10 @@
 
                 localOp.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-                int msgID = MSGID_MODIFY_CANNOT_PROCESS_ASSERTION_FILTER;
-                localOp.appendErrorMessage(getMessage(
-                    msgID, String.valueOf(entryDN),
-                    de.getErrorMessage()));
+                localOp.appendErrorMessage(
+                        ERR_MODIFY_CANNOT_PROCESS_ASSERTION_FILTER.get(
+                                String.valueOf(entryDN),
+                                de.getMessageObject()));
 
                 break modifyProcessing;
               }
@@ -492,7 +493,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break modifyProcessing;
                 }
@@ -519,7 +520,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break modifyProcessing;
                 }
@@ -532,8 +533,8 @@
               if (! clientConnection.hasPrivilege(Privilege.PROXIED_AUTH,
                   localOp))
               {
-                int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
                 localOp.setResultCode(ResultCode.AUTHORIZATION_DENIED);
                 break modifyProcessing;
               }
@@ -558,7 +559,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break modifyProcessing;
                 }
@@ -578,7 +579,7 @@
                 }
 
                 localOp.setResultCode(de.getResultCode());
-                localOp.appendErrorMessage(de.getErrorMessage());
+                localOp.appendErrorMessage(de.getMessageObject());
 
                 break modifyProcessing;
               }
@@ -600,8 +601,8 @@
               if (! clientConnection.hasPrivilege(Privilege.PROXIED_AUTH,
                   localOp))
               {
-                int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
                 localOp.setResultCode(ResultCode.AUTHORIZATION_DENIED);
                 break modifyProcessing;
               }
@@ -626,7 +627,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break modifyProcessing;
                 }
@@ -646,7 +647,7 @@
                 }
 
                 localOp.setResultCode(de.getResultCode());
-                localOp.appendErrorMessage(de.getErrorMessage());
+                localOp.appendErrorMessage(de.getMessageObject());
 
                 break modifyProcessing;
               }
@@ -674,10 +675,10 @@
                 localOp.setResultCode(
                     ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
 
-                int msgID = MSGID_MODIFY_UNSUPPORTED_CRITICAL_CONTROL;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN),
-                    oid));
+                    ERR_MODIFY_UNSUPPORTED_CRITICAL_CONTROL.get(
+                            String.valueOf(entryDN),
+                            oid));
 
                 break modifyProcessing;
               }
@@ -704,7 +705,7 @@
           }
 
           localOp.setResultCode(de.getResultCode());
-          localOp.appendErrorMessage(de.getErrorMessage());
+          localOp.appendErrorMessage(de.getMessageObject());
 
           break modifyProcessing;
         }
@@ -737,12 +738,9 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, de);
               }
 
-              logError(ErrorLogCategory.SYNCHRONIZATION,
-                  ErrorLogSeverity.SEVERE_ERROR,
-                  MSGID_MODIFY_SYNCH_CONFLICT_RESOLUTION_FAILED,
-                  localOp.getConnectionID(),
-                  localOp.getOperationID(),
-                  getExceptionMessage(de));
+              logError(ERR_MODIFY_SYNCH_CONFLICT_RESOLUTION_FAILED.
+                  get(localOp.getConnectionID(), localOp.getOperationID(),
+                      getExceptionMessage(de)));
 
               localOp.setResponseData(de);
               break modifyProcessing;
@@ -793,8 +791,8 @@
                   pwpErrorType =
                        PasswordPolicyErrorType.PASSWORD_MOD_NOT_ALLOWED;
 
-                  int msgID = MSGID_MODIFY_PWRESET_INSUFFICIENT_PRIVILEGES;
-                  localOp.appendErrorMessage(getMessage(msgID));
+                  localOp.appendErrorMessage(
+                          ERR_MODIFY_PWRESET_INSUFFICIENT_PRIVILEGES.get());
                   localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
                   break modifyProcessing;
                 }
@@ -823,8 +821,7 @@
             {
               localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
               localOp.appendErrorMessage(
-                  getMessage(MSGID_MODIFY_ATTR_IS_NO_USER_MOD,
-                  String.valueOf(entryDN),
+                  ERR_MODIFY_ATTR_IS_NO_USER_MOD.get(String.valueOf(entryDN),
                   a.getName()));
               break modifyProcessing;
             }
@@ -844,8 +841,7 @@
               {
                 localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
                 localOp.appendErrorMessage(
-                    getMessage(MSGID_MODIFY_ATTR_IS_OBSOLETE,
-                    String.valueOf(entryDN),
+                    ERR_MODIFY_ATTR_IS_OBSOLETE.get(String.valueOf(entryDN),
                     a.getName()));
                 break modifyProcessing;
               }
@@ -861,8 +857,9 @@
             if (! clientConnection.hasPrivilege(Privilege.PRIVILEGE_CHANGE,
                 localOp))
             {
-              int msgID = MSGID_MODIFY_CHANGE_PRIVILEGE_INSUFFICIENT_PRIVILEGES;
-              localOp.appendErrorMessage(getMessage(msgID));
+              localOp.appendErrorMessage(
+                      ERR_MODIFY_CHANGE_PRIVILEGE_INSUFFICIENT_PRIVILEGES
+                              .get());
               localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
               break modifyProcessing;
             }
@@ -885,8 +882,8 @@
               {
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                int msgID = MSGID_MODIFY_PASSWORDS_CANNOT_HAVE_OPTIONS;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_MODIFY_PASSWORDS_CANNOT_HAVE_OPTIONS.get());
                 break modifyProcessing;
               }
 
@@ -899,8 +896,8 @@
 
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                int msgID = MSGID_MODIFY_NO_USER_PW_CHANGES;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_MODIFY_NO_USER_PW_CHANGES.get());
                 break modifyProcessing;
               }
 
@@ -914,8 +911,8 @@
 
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                int msgID = MSGID_MODIFY_REQUIRE_SECURE_CHANGES;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_MODIFY_REQUIRE_SECURE_CHANGES.get());
                 break modifyProcessing;
               }
 
@@ -928,8 +925,7 @@
 
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                int msgID = MSGID_MODIFY_WITHIN_MINIMUM_AGE;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(ERR_MODIFY_WITHIN_MINIMUM_AGE.get());
                 break modifyProcessing;
               }
             }
@@ -968,8 +964,8 @@
 
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                int msgID = MSGID_MODIFY_MULTIPLE_VALUES_NOT_ALLOWED;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_MODIFY_MULTIPLE_VALUES_NOT_ALLOWED.get());
                 break modifyProcessing;
               }
 
@@ -989,8 +985,8 @@
 
                     localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                    int msgID = MSGID_MODIFY_NO_PREENCODED_PASSWORDS;
-                    localOp.appendErrorMessage(getMessage(msgID));
+                    localOp.appendErrorMessage(
+                            ERR_MODIFY_NO_PREENCODED_PASSWORDS.get());
                     break modifyProcessing;
                   }
                   else
@@ -1012,8 +1008,8 @@
                       localOp.setResultCode(
                           ResultCode.ATTRIBUTE_OR_VALUE_EXISTS);
 
-                      int msgID = MSGID_MODIFY_PASSWORD_EXISTS;
-                      localOp.appendErrorMessage(getMessage(msgID));
+                      localOp.appendErrorMessage(
+                              ERR_MODIFY_PASSWORD_EXISTS.get());
                       break modifyProcessing;
                     }
                   }
@@ -1045,7 +1041,7 @@
                     }
 
                     localOp.setResultCode(de.getResultCode());
-                    localOp.appendErrorMessage(de.getErrorMessage());
+                    localOp.appendErrorMessage(de.getMessageObject());
                     break modifyProcessing;
                   }
                 }
@@ -1073,8 +1069,8 @@
 
                     localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                    int msgID = MSGID_MODIFY_NO_PREENCODED_PASSWORDS;
-                    localOp.appendErrorMessage(getMessage(msgID));
+                    localOp.appendErrorMessage(
+                            ERR_MODIFY_NO_PREENCODED_PASSWORDS.get());
                     break modifyProcessing;
                   }
                   else
@@ -1089,8 +1085,8 @@
                   {
                     localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                    int msgID = MSGID_MODIFY_NO_EXISTING_VALUES;
-                    localOp.appendErrorMessage(getMessage(msgID));
+                    localOp.appendErrorMessage(
+                            ERR_MODIFY_NO_EXISTING_VALUES.get());
                     break modifyProcessing;
                   }
                   boolean found = false;
@@ -1133,9 +1129,9 @@
 
                             localOp.setResultCode(de.getResultCode());
 
-                            int msgID = MSGID_MODIFY_CANNOT_DECODE_PW;
                             localOp.appendErrorMessage(
-                                getMessage(msgID, de.getErrorMessage()));
+                                ERR_MODIFY_CANNOT_DECODE_PW.get(
+                                        de.getMessageObject()));
                             break modifyProcessing;
                           }
                         }
@@ -1181,9 +1177,9 @@
 
                             localOp.setResultCode(de.getResultCode());
 
-                            int msgID = MSGID_MODIFY_CANNOT_DECODE_PW;
-                            localOp.appendErrorMessage(getMessage(msgID,
-                                de.getErrorMessage()));
+                            localOp.appendErrorMessage(
+                                    ERR_MODIFY_CANNOT_DECODE_PW.get(
+                                            de.getMessageObject()));
                             break modifyProcessing;
                           }
                         }
@@ -1216,8 +1212,8 @@
                   {
                     localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                    int msgID = MSGID_MODIFY_INVALID_PASSWORD;
-                    localOp.appendErrorMessage(getMessage(msgID));
+                    localOp.appendErrorMessage(
+                            ERR_MODIFY_INVALID_PASSWORD.get());
                     break modifyProcessing;
                   }
 
@@ -1232,9 +1228,10 @@
             default:
               localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-            int msgID = MSGID_MODIFY_INVALID_MOD_TYPE_FOR_PASSWORD;
-            localOp.appendErrorMessage(getMessage(msgID,
-                String.valueOf(m.getModificationType()), a.getName()));
+            localOp.appendErrorMessage(
+                    ERR_MODIFY_INVALID_MOD_TYPE_FOR_PASSWORD.get(
+                            String.valueOf(m.getModificationType()),
+                            a.getName()));
 
             break modifyProcessing;
             }
@@ -1260,10 +1257,10 @@
                 {
                   localOp.setResultCode(ResultCode.INVALID_ATTRIBUTE_SYNTAX);
 
-                  int msgID = MSGID_MODIFY_INVALID_DISABLED_VALUE;
-                  String message =
-                    getMessage(msgID, OP_ATTR_ACCOUNT_DISABLED,
-                        String.valueOf(de.getErrorMessage()));
+                  Message message =
+                    ERR_MODIFY_INVALID_DISABLED_VALUE.get(
+                            OP_ATTR_ACCOUNT_DISABLED,
+                            String.valueOf(de.getMessageObject()));
                   localOp.appendErrorMessage(message);
                   break modifyProcessing;
                 }
@@ -1281,9 +1278,9 @@
             if ((newValues == null) || newValues.isEmpty())
             {
               localOp.setResultCode(ResultCode.PROTOCOL_ERROR);
-              localOp.appendErrorMessage(getMessage(MSGID_MODIFY_ADD_NO_VALUES,
-                  String.valueOf(entryDN),
-                  a.getName()));
+              localOp.appendErrorMessage(ERR_MODIFY_ADD_NO_VALUES.get(
+                      String.valueOf(entryDN),
+                      a.getName()));
               break modifyProcessing;
             }
 
@@ -1300,8 +1297,8 @@
 
               if (syntaxPolicy == AcceptRejectWarn.REJECT)
               {
-                StringBuilder invalidReason =
-                  new StringBuilder();
+                MessageBuilder invalidReason =
+                  new MessageBuilder();
 
                 for (AttributeValue v : newValues)
                 {
@@ -1309,12 +1306,12 @@
                   {
                     localOp.setResultCode(ResultCode.INVALID_ATTRIBUTE_SYNTAX);
 
-                    int msgID = MSGID_MODIFY_ADD_INVALID_SYNTAX;
-                    localOp.appendErrorMessage(getMessage(msgID,
-                        String.valueOf(entryDN),
-                        a.getName(),
-                        v.getStringValue(),
-                        invalidReason.toString()));
+
+                    localOp.appendErrorMessage(ERR_MODIFY_ADD_INVALID_SYNTAX
+                            .get(String.valueOf(entryDN),
+                                 a.getName(),
+                                 v.getStringValue(),
+                                 invalidReason.toString()));
 
                     break modifyProcessing;
                   }
@@ -1322,7 +1319,7 @@
               }
               else if (syntaxPolicy == AcceptRejectWarn.WARN)
               {
-                StringBuilder invalidReason = new StringBuilder();
+                MessageBuilder invalidReason = new MessageBuilder();
 
                 for (AttributeValue v : newValues)
                 {
@@ -1331,13 +1328,12 @@
                     localOp.setResultCode(
                         ResultCode.INVALID_ATTRIBUTE_SYNTAX);
 
-                    int msgID = MSGID_MODIFY_ADD_INVALID_SYNTAX;
-                    logError(ErrorLogCategory.SCHEMA,
-                        ErrorLogSeverity.SEVERE_WARNING, msgID,
-                        String.valueOf(entryDN), a.getName(),
-                        v.getStringValue(), invalidReason.toString());
+                    logError(
+                          ERR_MODIFY_ADD_INVALID_SYNTAX.
+                            get(String.valueOf(entryDN), a.getName(),
+                                v.getStringValue(), invalidReason.toString()));
 
-                    invalidReason = new StringBuilder();
+                    invalidReason = new MessageBuilder();
                   }
                 }
               }
@@ -1388,9 +1384,8 @@
 
                 localOp.setResultCode(ResultCode.ATTRIBUTE_OR_VALUE_EXISTS);
 
-                int msgID = MSGID_MODIFY_ADD_DUPLICATE_VALUE;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN),
+                    ERR_MODIFY_ADD_DUPLICATE_VALUE.get(String.valueOf(entryDN),
                     a.getName(),
                     buffer.toString()));
 
@@ -1420,9 +1415,8 @@
                 {
                   localOp.setResultCode(ResultCode.NOT_ALLOWED_ON_RDN);
 
-                  int msgID = MSGID_MODIFY_DELETE_RDN_ATTR;
-                  localOp.appendErrorMessage(getMessage(msgID,
-                      String.valueOf(entryDN),
+                  localOp.appendErrorMessage(ERR_MODIFY_DELETE_RDN_ATTR.get(
+                          String.valueOf(entryDN),
                       a.getName()));
                   break modifyProcessing;
                 }
@@ -1442,9 +1436,9 @@
 
                 localOp.setResultCode(ResultCode.NO_SUCH_ATTRIBUTE);
 
-                int msgID = MSGID_MODIFY_DELETE_MISSING_VALUES;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN),
+                    ERR_MODIFY_DELETE_MISSING_VALUES.get(
+                            String.valueOf(entryDN),
                     a.getName(),
                     buffer.toString()));
 
@@ -1455,9 +1449,8 @@
             {
               localOp.setResultCode(ResultCode.NO_SUCH_ATTRIBUTE);
 
-              int msgID = MSGID_MODIFY_DELETE_NO_SUCH_ATTR;
               localOp.appendErrorMessage(
-                  getMessage(msgID, String.valueOf(entryDN),
+                  ERR_MODIFY_DELETE_NO_SUCH_ATTR.get(String.valueOf(entryDN),
                   a.getName()));
               break modifyProcessing;
             }
@@ -1497,9 +1490,8 @@
               {
                 localOp.setResultCode(ResultCode.NOT_ALLOWED_ON_RDN);
 
-                int msgID = MSGID_MODIFY_DELETE_RDN_ATTR;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN),
+                    ERR_MODIFY_DELETE_RDN_ATTR.get(String.valueOf(entryDN),
                     a.getName()));
                 break modifyProcessing;
               }
@@ -1520,7 +1512,7 @@
 
               if (syntaxPolicy == AcceptRejectWarn.REJECT)
               {
-                StringBuilder invalidReason = new StringBuilder();
+                MessageBuilder invalidReason = new MessageBuilder();
 
                 for (AttributeValue v : newValues)
                 {
@@ -1528,9 +1520,9 @@
                   {
                     localOp.setResultCode(ResultCode.INVALID_ATTRIBUTE_SYNTAX);
 
-                    int msgID = MSGID_MODIFY_REPLACE_INVALID_SYNTAX;
-                    localOp.appendErrorMessage(getMessage(msgID,
-                        String.valueOf(entryDN),
+                    localOp.appendErrorMessage(
+                            ERR_MODIFY_REPLACE_INVALID_SYNTAX.get(
+                                    String.valueOf(entryDN),
                         a.getName(),
                         v.getStringValue(),
                         invalidReason.toString()));
@@ -1541,21 +1533,19 @@
               }
               else if (syntaxPolicy == AcceptRejectWarn.WARN)
               {
-                StringBuilder invalidReason = new StringBuilder();
-
+                MessageBuilder invalidReason = new MessageBuilder();
                 for (AttributeValue v : newValues)
                 {
                   if (! syntax.valueIsAcceptable(v.getValue(), invalidReason))
                   {
                     localOp.setResultCode(ResultCode.INVALID_ATTRIBUTE_SYNTAX);
 
-                    int msgID = MSGID_MODIFY_REPLACE_INVALID_SYNTAX;
-                    logError(ErrorLogCategory.SCHEMA,
-                        ErrorLogSeverity.SEVERE_WARNING, msgID,
-                        String.valueOf(entryDN), a.getName(),
-                        v.getStringValue(), invalidReason.toString());
+                    logError(
+                          ERR_MODIFY_REPLACE_INVALID_SYNTAX.
+                            get(String.valueOf(entryDN), a.getName(),
+                                v.getStringValue(), invalidReason.toString()));
 
-                    invalidReason = new StringBuilder();
+                    invalidReason = new MessageBuilder();
                   }
                 }
               }
@@ -1578,9 +1568,8 @@
               {
                 localOp.setResultCode(ResultCode.NOT_ALLOWED_ON_RDN);
 
-                int msgID = MSGID_MODIFY_DELETE_RDN_ATTR;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN),
+                    ERR_MODIFY_DELETE_RDN_ATTR.get(String.valueOf(entryDN),
                     a.getName()));
                 break modifyProcessing;
               }
@@ -1604,9 +1593,8 @@
               {
                 localOp.setResultCode(ResultCode.NOT_ALLOWED_ON_RDN);
 
-                int msgID = MSGID_MODIFY_DELETE_RDN_ATTR;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN),
+                    ERR_MODIFY_DELETE_RDN_ATTR.get(String.valueOf(entryDN),
                     a.getName()));
                 break modifyProcessing;
               }
@@ -1640,9 +1628,8 @@
             {
               localOp.setResultCode(ResultCode.NOT_ALLOWED_ON_RDN);
 
-              int msgID = MSGID_MODIFY_DELETE_RDN_ATTR;
               localOp.appendErrorMessage(
-                  getMessage(msgID, String.valueOf(entryDN),
+                  ERR_MODIFY_DELETE_RDN_ATTR.get(String.valueOf(entryDN),
                   a.getName()));
               break modifyProcessing;
             }
@@ -1655,8 +1642,8 @@
             if ((rdn !=  null) && rdn.hasAttributeType(t))
             {
               localOp.setResultCode(ResultCode.NOT_ALLOWED_ON_RDN);
-              localOp.appendErrorMessage(getMessage(MSGID_MODIFY_INCREMENT_RDN,
-                  String.valueOf(entryDN),
+              localOp.appendErrorMessage(ERR_MODIFY_INCREMENT_RDN.get(
+                      String.valueOf(entryDN),
                   a.getName()));
             }
 
@@ -1668,9 +1655,9 @@
             {
               localOp.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-              int msgID = MSGID_MODIFY_INCREMENT_REQUIRES_VALUE;
               localOp.appendErrorMessage(
-                  getMessage(msgID, String.valueOf(entryDN),
+                  ERR_MODIFY_INCREMENT_REQUIRES_VALUE.get(
+                          String.valueOf(entryDN),
                   a.getName()));
 
               break modifyProcessing;
@@ -1679,9 +1666,9 @@
             {
               localOp.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-              int msgID = MSGID_MODIFY_INCREMENT_REQUIRES_SINGLE_VALUE;
               localOp.appendErrorMessage(
-                  getMessage(msgID, String.valueOf(entryDN),
+                  ERR_MODIFY_INCREMENT_REQUIRES_SINGLE_VALUE.get(
+                          String.valueOf(entryDN),
                   a.getName()));
               break modifyProcessing;
             }
@@ -1702,9 +1689,9 @@
 
               localOp.setResultCode(ResultCode.INVALID_ATTRIBUTE_SYNTAX);
 
-              int msgID = MSGID_MODIFY_INCREMENT_PROVIDED_VALUE_NOT_INTEGER;
               localOp.appendErrorMessage(
-                  getMessage(msgID, String.valueOf(entryDN),
+                  ERR_MODIFY_INCREMENT_PROVIDED_VALUE_NOT_INTEGER.get(
+                          String.valueOf(entryDN),
                   a.getName(), v.getStringValue()));
 
               break modifyProcessing;
@@ -1718,9 +1705,9 @@
             {
               localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-              int msgID = MSGID_MODIFY_INCREMENT_REQUIRES_EXISTING_VALUE;
               localOp.appendErrorMessage(
-                  getMessage(msgID, String.valueOf(entryDN),
+                  ERR_MODIFY_INCREMENT_REQUIRES_EXISTING_VALUE.get(
+                          String.valueOf(entryDN),
                   a.getName()));
 
               break modifyProcessing;
@@ -1755,9 +1742,9 @@
 
                   localOp.setResultCode(ResultCode.INVALID_ATTRIBUTE_SYNTAX);
 
-                  int msgID = MSGID_MODIFY_INCREMENT_REQUIRES_INTEGER_VALUE;
-                  localOp.appendErrorMessage(getMessage(msgID,
-                      String.valueOf(entryDN),
+                  localOp.appendErrorMessage(
+                          ERR_MODIFY_INCREMENT_REQUIRES_INTEGER_VALUE.get(
+                                  String.valueOf(entryDN),
                       a.getName(),
                       existingValue.getStringValue()));
                   break modifyProcessing;
@@ -1776,10 +1763,10 @@
             {
               localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-              int msgID = MSGID_MODIFY_INCREMENT_REQUIRES_EXISTING_VALUE;
               localOp.appendErrorMessage(
-                  getMessage(msgID, String.valueOf(entryDN),
-                  a.getName()));
+                  ERR_MODIFY_INCREMENT_REQUIRES_EXISTING_VALUE.get(
+                          String.valueOf(entryDN),
+                          a.getName()));
 
               break modifyProcessing;
             }
@@ -1805,8 +1792,8 @@
 
             localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-            int msgID = MSGID_MODIFY_PW_CHANGE_REQUIRES_CURRENT_PW;
-            localOp.appendErrorMessage(getMessage(msgID));
+            localOp.appendErrorMessage(
+                    ERR_MODIFY_PW_CHANGE_REQUIRES_CURRENT_PW.get());
             break modifyProcessing;
           }
 
@@ -1820,8 +1807,8 @@
 
             localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-            int msgID = MSGID_MODIFY_MULTIPLE_PASSWORDS_NOT_ALLOWED;
-            localOp.appendErrorMessage(getMessage(msgID));
+            localOp.appendErrorMessage(
+                    ERR_MODIFY_MULTIPLE_PASSWORDS_NOT_ALLOWED.get());
             break modifyProcessing;
           }
 
@@ -1881,7 +1868,7 @@
 
               for (AttributeValue v : newPasswords)
               {
-                StringBuilder invalidReason = new StringBuilder();
+                MessageBuilder invalidReason = new MessageBuilder();
                 if (! pwPolicyState.passwordIsAcceptable(localOp, modifiedEntry,
                     v.getValue(),
                     clearPasswords,
@@ -1892,9 +1879,8 @@
 
                   localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                  int msgID = MSGID_MODIFY_PW_VALIDATION_FAILED;
-                  localOp.appendErrorMessage(getMessage(msgID,
-                      invalidReason.toString()));
+                  localOp.appendErrorMessage(ERR_MODIFY_PW_VALIDATION_FAILED
+                          .get(invalidReason.toString()));
                   break modifyProcessing;
                 }
               }
@@ -1919,8 +1905,7 @@
 
                     localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                    int msgID = MSGID_MODIFY_PW_IN_HISTORY;
-                    localOp.appendErrorMessage(getMessage(msgID));
+                    localOp.appendErrorMessage(ERR_MODIFY_PW_IN_HISTORY.get());
                     break modifyProcessing;
                   }
                 }
@@ -1947,9 +1932,9 @@
             .getAccessControlHandler().isAllowed(localOp)) {
           localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
 
-          int msgID = MSGID_MODIFY_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS;
           localOp.appendErrorMessage(
-              getMessage(msgID, String.valueOf(entryDN)));
+              ERR_MODIFY_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS.get(
+                      String.valueOf(entryDN)));
 
           skipPostOperation = true;
           break modifyProcessing;
@@ -2017,8 +2002,7 @@
 
             localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-            int msgID = MSGID_MODIFY_MUST_CHANGE_PASSWORD;
-            localOp.appendErrorMessage(getMessage(msgID));
+            localOp.appendErrorMessage(ERR_MODIFY_MUST_CHANGE_PASSWORD.get());
             break modifyProcessing;
         }
 
@@ -2028,14 +2012,14 @@
         if ((DirectoryServer.checkSchema()) &&
             (!localOp.isSynchronizationOperation()) )
         {
-          StringBuilder invalidReason = new StringBuilder();
+          MessageBuilder invalidReason = new MessageBuilder();
           if (! modifiedEntry.conformsToSchema(null, false, false, false,
               invalidReason))
           {
             localOp.setResultCode(ResultCode.OBJECTCLASS_VIOLATION);
-            localOp.appendErrorMessage(getMessage(MSGID_MODIFY_VIOLATES_SCHEMA,
-                String.valueOf(entryDN),
-                invalidReason.toString()));
+            localOp.appendErrorMessage(ERR_MODIFY_VIOLATES_SCHEMA.get(
+                    String.valueOf(entryDN),
+                    invalidReason.toString()));
             break modifyProcessing;
           }
         }
@@ -2059,8 +2043,7 @@
             // and return.
             localOp.setResultCode(ResultCode.CANCELED);
 
-            int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-            localOp.appendErrorMessage(getMessage(msgID));
+            localOp.appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
             localOp.setProcessingStopTime();
 
@@ -2092,8 +2075,7 @@
         {
           localOp.setResultCode(ResultCode.NO_SUCH_OBJECT);
           localOp.appendErrorMessage(
-              getMessage(MSGID_MODIFY_NO_BACKEND_FOR_ENTRY,
-              String.valueOf(entryDN)));
+              ERR_MODIFY_NO_BACKEND_FOR_ENTRY.get(String.valueOf(entryDN)));
           break modifyProcessing;
         }
 
@@ -2108,8 +2090,7 @@
             case DISABLED:
               localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
               localOp.appendErrorMessage(
-                  getMessage(MSGID_MODIFY_SERVER_READONLY,
-                  String.valueOf(entryDN)));
+                  ERR_MODIFY_SERVER_READONLY.get(String.valueOf(entryDN)));
               break modifyProcessing;
 
             case INTERNAL_ONLY:
@@ -2118,8 +2099,7 @@
               {
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
                 localOp.appendErrorMessage(
-                    getMessage(MSGID_MODIFY_SERVER_READONLY,
-                    String.valueOf(entryDN)));
+                    ERR_MODIFY_SERVER_READONLY.get(String.valueOf(entryDN)));
                 break modifyProcessing;
               }
             }
@@ -2129,8 +2109,7 @@
             case DISABLED:
               localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
               localOp.appendErrorMessage(
-                  getMessage(MSGID_MODIFY_BACKEND_READONLY,
-                  String.valueOf(entryDN)));
+                  ERR_MODIFY_BACKEND_READONLY.get(String.valueOf(entryDN)));
               break modifyProcessing;
 
             case INTERNAL_ONLY:
@@ -2139,8 +2118,7 @@
               {
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
                 localOp.appendErrorMessage(
-                    getMessage(MSGID_MODIFY_BACKEND_READONLY,
-                    String.valueOf(entryDN)));
+                    ERR_MODIFY_BACKEND_READONLY.get(String.valueOf(entryDN)));
                 break modifyProcessing;
               }
             }
@@ -2149,7 +2127,7 @@
 
           if (noOp)
           {
-            localOp.appendErrorMessage(getMessage(MSGID_MODIFY_NOOP));
+            localOp.appendErrorMessage(INFO_MODIFY_NOOP.get());
 
             localOp.setResultCode(ResultCode.NO_OPERATION);
           }
@@ -2174,12 +2152,9 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                logError(ErrorLogCategory.SYNCHRONIZATION,
-                    ErrorLogSeverity.SEVERE_ERROR,
-                    MSGID_MODIFY_SYNCH_PREOP_FAILED,
-                    localOp.getConnectionID(),
-                    localOp.getOperationID(),
-                    getExceptionMessage(de));
+                logError(ERR_MODIFY_SYNCH_PREOP_FAILED.
+                    get(localOp.getConnectionID(), localOp.getOperationID(),
+                        getExceptionMessage(de)));
 
                 localOp.setResponseData(de);
                 break modifyProcessing;
@@ -2203,19 +2178,17 @@
                   clientConnection.setMustChangePassword(false);
                 }
 
-                int    msgID   = MSGID_MODIFY_PASSWORD_CHANGED;
-                String message = getMessage(msgID);
+                Message message = INFO_MODIFY_PASSWORD_CHANGED.get();
                 pwPolicyState.generateAccountStatusNotification(
                     AccountStatusNotificationType.PASSWORD_CHANGED, entryDN,
-                    msgID, message);
+                    message);
               }
               else
               {
-                int    msgID   = MSGID_MODIFY_PASSWORD_RESET;
-                String message = getMessage(msgID);
+                Message message = INFO_MODIFY_PASSWORD_RESET.get();
                 pwPolicyState.generateAccountStatusNotification(
                     AccountStatusNotificationType.PASSWORD_RESET, entryDN,
-                    msgID, message);
+                    message);
               }
             }
 
@@ -2223,29 +2196,26 @@
             {
               if (isEnabled)
               {
-                int    msgID   = MSGID_MODIFY_ACCOUNT_ENABLED;
-                String message = getMessage(msgID);
+                Message message = INFO_MODIFY_ACCOUNT_ENABLED.get();
                 pwPolicyState.generateAccountStatusNotification(
                     AccountStatusNotificationType.ACCOUNT_ENABLED, entryDN,
-                    msgID, message);
+                    message);
               }
               else
               {
-                int    msgID   = MSGID_MODIFY_ACCOUNT_DISABLED;
-                String message = getMessage(msgID);
+                Message message = INFO_MODIFY_ACCOUNT_DISABLED.get();
                 pwPolicyState.generateAccountStatusNotification(
                     AccountStatusNotificationType.ACCOUNT_DISABLED, entryDN,
-                    msgID, message);
+                    message);
               }
             }
 
             if (wasLocked)
             {
-              int    msgID   = MSGID_MODIFY_ACCOUNT_UNLOCKED;
-              String message = getMessage(msgID);
+              Message message = INFO_MODIFY_ACCOUNT_UNLOCKED.get();
               pwPolicyState.generateAccountStatusNotification(
                   AccountStatusNotificationType.ACCOUNT_UNLOCKED, entryDN,
-                  msgID, message);
+                  message);
             }
           }
 
@@ -2364,7 +2334,7 @@
           }
 
           localOp.setResultCode(de.getResultCode());
-          localOp.appendErrorMessage(de.getErrorMessage());
+          localOp.appendErrorMessage(de.getMessageObject());
           localOp.setMatchedDN(de.getMatchedDN());
           localOp.setReferralURLs(de.getReferralURLs());
 
@@ -2382,7 +2352,7 @@
           localOp.setCancelResult(cancelResult);
           localOp.setResultCode(cancelResult.getResultCode());
 
-          String message = coe.getMessage();
+          Message message = coe.getMessageObject();
           if ((message != null) && (message.length() > 0))
           {
             localOp.appendErrorMessage(message);
@@ -2409,10 +2379,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            logError(ErrorLogCategory.SYNCHRONIZATION,
-                ErrorLogSeverity.SEVERE_ERROR,
-                MSGID_MODIFY_SYNCH_POSTOP_FAILED, localOp.getConnectionID(),
-                localOp.getOperationID(), getExceptionMessage(de));
+            logError(ERR_MODIFY_SYNCH_POSTOP_FAILED.
+                get(localOp.getConnectionID(), localOp.getOperationID(),
+                    getExceptionMessage(de)));
 
             localOp.setResponseData(de);
             break;
@@ -2446,8 +2415,7 @@
         // return.
         localOp.setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-        localOp.appendErrorMessage(getMessage(msgID));
+        localOp.appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
         localOp.setProcessingStopTime();
 
@@ -2475,10 +2443,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_MODIFY_ERROR_NOTIFYING_CHANGE_LISTENER;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_MODIFY_ERROR_NOTIFYING_CHANGE_LISTENER.get(
+              getExceptionMessage(e));
+          logError(message);
         }
       }
     }
@@ -2539,8 +2506,9 @@
                   isAllowed(baseDN, localOp, c))
           {
             localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
-            int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS;
-            localOp.appendErrorMessage(getMessage(msgID, oid));
+
+            localOp.appendErrorMessage(
+                    ERR_CONTROL_INSUFFICIENT_ACCESS_RIGHTS.get(oid));
             skipPostOperation = true;
             break searchProcessing;
           }
@@ -2568,7 +2536,7 @@
 
                 localOp.setResultCode(
                     ResultCode.valueOf(le.getResultCode()));
-                localOp.appendErrorMessage(le.getMessage());
+                localOp.appendErrorMessage(le.getMessageObject());
 
                 break searchProcessing;
               }
@@ -2593,9 +2561,9 @@
 
                 localOp.setResultCode(de.getResultCode());
 
-                int msgID = MSGID_SEARCH_CANNOT_GET_ENTRY_FOR_ASSERTION;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, de.getErrorMessage()));
+                    ERR_SEARCH_CANNOT_GET_ENTRY_FOR_ASSERTION.get(
+                            de.getMessageObject()));
 
                 break searchProcessing;
               }
@@ -2604,8 +2572,8 @@
               {
                 localOp.setResultCode(ResultCode.NO_SUCH_OBJECT);
 
-                int msgID = MSGID_SEARCH_NO_SUCH_ENTRY_FOR_ASSERTION;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                    ERR_SEARCH_NO_SUCH_ENTRY_FOR_ASSERTION.get());
 
                 break searchProcessing;
               }
@@ -2616,7 +2584,7 @@
                 localOp.setResultCode(ResultCode.ASSERTION_FAILED);
 
                 localOp.appendErrorMessage(
-                    getMessage(MSGID_SEARCH_ASSERTION_FAILED));
+                    ERR_SEARCH_ASSERTION_FAILED.get());
 
                 break searchProcessing;
               }
@@ -2630,9 +2598,9 @@
 
               localOp.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-              int msgID = MSGID_SEARCH_CANNOT_PROCESS_ASSERTION_FILTER;
               localOp.appendErrorMessage(
-                  getMessage(msgID, de.getErrorMessage()));
+                  ERR_SEARCH_CANNOT_PROCESS_ASSERTION_FILTER.get(
+                          de.getMessageObject()));
 
               break searchProcessing;
             }
@@ -2644,8 +2612,8 @@
             if (! clientConnection.hasPrivilege(
                 Privilege.PROXIED_AUTH, localOp))
             {
-              int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-              localOp.appendErrorMessage(getMessage(msgID));
+              localOp.appendErrorMessage(
+                      ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
               localOp.setResultCode(ResultCode.AUTHORIZATION_DENIED);
               break searchProcessing;
             }
@@ -2671,7 +2639,7 @@
 
                 localOp.setResultCode(
                     ResultCode.valueOf(le.getResultCode()));
-                localOp.appendErrorMessage(le.getMessage());
+                localOp.appendErrorMessage(le.getMessageObject());
 
                 break searchProcessing;
               }
@@ -2691,7 +2659,7 @@
               }
 
               localOp.setResultCode(de.getResultCode());
-              localOp.appendErrorMessage(de.getErrorMessage());
+              localOp.appendErrorMessage(de.getMessageObject());
 
               break searchProcessing;
             }
@@ -2713,8 +2681,8 @@
             if (! clientConnection.hasPrivilege(
                 Privilege.PROXIED_AUTH, localOp))
             {
-              int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-              localOp.appendErrorMessage(getMessage(msgID));
+              localOp.appendErrorMessage(
+                      ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
               localOp.setResultCode(ResultCode.AUTHORIZATION_DENIED);
               break searchProcessing;
             }
@@ -2740,7 +2708,7 @@
 
                 localOp.setResultCode(
                     ResultCode.valueOf(le.getResultCode()));
-                localOp.appendErrorMessage(le.getMessage());
+                localOp.appendErrorMessage(le.getMessageObject());
 
                 break searchProcessing;
               }
@@ -2760,7 +2728,7 @@
               }
 
               localOp.setResultCode(de.getResultCode());
-              localOp.appendErrorMessage(de.getErrorMessage());
+              localOp.appendErrorMessage(de.getMessageObject());
 
               break searchProcessing;
             }
@@ -2797,7 +2765,7 @@
 
                 localOp.setResultCode(
                     ResultCode.valueOf(le.getResultCode()));
-                localOp.appendErrorMessage(le.getMessage());
+                localOp.appendErrorMessage(le.getMessageObject());
 
                 break searchProcessing;
               }
@@ -2842,7 +2810,7 @@
 
                 localOp.setResultCode(
                     ResultCode.valueOf(le.getResultCode()));
-                localOp.appendErrorMessage(le.getMessage());
+                localOp.appendErrorMessage(le.getMessageObject());
 
                 break searchProcessing;
               }
@@ -2868,8 +2836,8 @@
               localOp.setResultCode(
                   ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
 
-              int msgID = MSGID_SEARCH_UNSUPPORTED_CRITICAL_CONTROL;
-              localOp.appendErrorMessage(getMessage(msgID, oid));
+              localOp.appendErrorMessage(
+                      ERR_SEARCH_UNSUPPORTED_CRITICAL_CONTROL.get(oid));
 
               break searchProcessing;
             }
@@ -2888,9 +2856,9 @@
           .getAccessControlHandler().isAllowed(localOp) == false) {
         localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
 
-        int msgID = MSGID_SEARCH_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS;
         localOp.appendErrorMessage(
-            getMessage(msgID, String.valueOf(baseDN)));
+            ERR_SEARCH_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS.get(
+                    String.valueOf(baseDN)));
 
         skipPostOperation = true;
         break searchProcessing;
@@ -2912,8 +2880,7 @@
         // result and return.
         localOp.setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-        localOp.appendErrorMessage(getMessage(msgID));
+        localOp.appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
         localOp.setProcessingStopTime();
         return;
@@ -2943,8 +2910,7 @@
       {
         localOp.setResultCode(ResultCode.NO_SUCH_OBJECT);
         localOp.appendErrorMessage(
-            getMessage(MSGID_SEARCH_BASE_DOESNT_EXIST,
-            String.valueOf(baseDN)));
+            ERR_SEARCH_BASE_DOESNT_EXIST.get(String.valueOf(baseDN)));
         break searchProcessing;
       }
 
@@ -2978,7 +2944,7 @@
         }
 
         localOp.setResultCode(de.getResultCode());
-        localOp.appendErrorMessage(de.getErrorMessage());
+        localOp.appendErrorMessage(de.getMessageObject());
         localOp.setMatchedDN(de.getMatchedDN());
         localOp.setReferralURLs(de.getReferralURLs());
 
@@ -3002,7 +2968,7 @@
         localOp.setCancelResult(cancelResult);
         localOp.setResultCode(cancelResult.getResultCode());
 
-        String message = coe.getMessage();
+        Message message = coe.getMessageObject();
         if ((message != null) && (message.length() > 0))
         {
           localOp.appendErrorMessage(message);
@@ -3027,9 +2993,8 @@
         localOp.setResultCode(
             DirectoryServer.getServerErrorResultCode());
 
-        int msgID = MSGID_SEARCH_BACKEND_EXCEPTION;
         localOp.appendErrorMessage(
-            getMessage(msgID, getExceptionMessage(e)));
+            ERR_SEARCH_BACKEND_EXCEPTION.get(getExceptionMessage(e)));
 
         if (persistentSearch != null)
         {
@@ -3059,8 +3024,7 @@
       {
         localOp.setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_POSTOP_DISCONNECT;
-        localOp.appendErrorMessage(getMessage(msgID));
+        localOp.appendErrorMessage(ERR_CANCELED_BY_POSTOP_DISCONNECT.get());
 
         localOp.setProcessingStopTime();
         return;
@@ -3158,9 +3122,9 @@
           .getAccessControlHandler().isAllowed(localOp) == false) {
         localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        int    msgID   = MSGID_BIND_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS;
-        String message = getMessage(msgID, String.valueOf(bindDN));
-        localOp.setAuthFailureReason(msgID, message);
+        Message message = ERR_BIND_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS.get(
+                String.valueOf(bindDN));
+        localOp.setAuthFailureReason(message);
 
         skipPostOperation = true;
         break bindProcessing;
@@ -3180,8 +3144,8 @@
                   getAccessControlHandler(). isAllowed(bindDN, localOp, c))
           {
             localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
-            int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS;
-            localOp.appendErrorMessage(getMessage(msgID, oid));
+            localOp.appendErrorMessage(ERR_CONTROL_INSUFFICIENT_ACCESS_RIGHTS
+                    .get(oid));
             skipPostOperation = true;
             break bindProcessing;
           }
@@ -3200,8 +3164,8 @@
           {
             localOp.setResultCode(ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
 
-            int msgID = MSGID_BIND_UNSUPPORTED_CRITICAL_CONTROL;
-            localOp.appendErrorMessage(getMessage(msgID, String.valueOf(oid)));
+            localOp.appendErrorMessage(ERR_BIND_UNSUPPORTED_CRITICAL_CONTROL
+                    .get(String.valueOf(oid)));
 
             break bindProcessing;
           }
@@ -3225,8 +3189,8 @@
             {
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int msgID = MSGID_BIND_REJECTED_LOCKDOWN_MODE;
-              localOp.setAuthFailureReason(msgID, getMessage(msgID));
+              Message message = ERR_BIND_REJECTED_LOCKDOWN_MODE.get();
+              localOp.setAuthFailureReason(message);
 
               localOp.setProcessingStopTime();
               logBindResponse(localOp);
@@ -3239,9 +3203,8 @@
             {
               localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-              int    msgID   = MSGID_BIND_DN_BUT_NO_PASSWORD;
-              String message = getMessage(msgID);
-              localOp.setAuthFailureReason(msgID, message);
+              Message message = ERR_BIND_DN_BUT_NO_PASSWORD.get();
+              localOp.setAuthFailureReason(message);
               break bindProcessing;
             }
 
@@ -3255,8 +3218,8 @@
               // and return.
               localOp.setResultCode(ResultCode.CANCELED);
 
-              int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-              localOp.appendErrorMessage(getMessage(msgID));
+              localOp.appendErrorMessage(
+                      ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
               return;
             }
@@ -3299,11 +3262,11 @@
 
           if (userLock == null)
           {
-            int    msgID   = MSGID_BIND_OPERATION_CANNOT_LOCK_USER;
-            String message = getMessage(msgID, String.valueOf(bindDN));
+            Message message = ERR_BIND_OPERATION_CANNOT_LOCK_USER.get(
+                    String.valueOf(bindDN));
 
             localOp.setResultCode(DirectoryServer.getServerErrorResultCode());
-            localOp.setAuthFailureReason(msgID, message);
+            localOp.setAuthFailureReason(message);
             break bindProcessing;
           }
 
@@ -3322,8 +3285,7 @@
               }
 
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-              localOp.setAuthFailureReason(de.getMessageID(),
-                                   de.getErrorMessage());
+              localOp.setAuthFailureReason(de.getMessageObject());
 
               userEntry = null;
               break bindProcessing;
@@ -3332,11 +3294,11 @@
             if (userEntry == null)
             {
 
-              int    msgID   = MSGID_BIND_OPERATION_UNKNOWN_USER;
-              String message = getMessage(msgID, String.valueOf(bindDN));
+              Message message = ERR_BIND_OPERATION_UNKNOWN_USER.get(
+                      String.valueOf(bindDN));
 
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-              localOp.setAuthFailureReason(msgID, message);
+              localOp.setAuthFailureReason(message);
               break bindProcessing;
             }
             else
@@ -3354,11 +3316,11 @@
             List<Attribute> pwAttr = userEntry.getAttribute(pwType);
             if ((pwAttr == null) || (pwAttr.isEmpty()))
             {
-              int    msgID   = MSGID_BIND_OPERATION_NO_PASSWORD;
-              String message = getMessage(msgID, String.valueOf(bindDN));
+              Message message = ERR_BIND_OPERATION_NO_PASSWORD.get(
+                      String.valueOf(bindDN));
 
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-              localOp.setAuthFailureReason(msgID, message);
+              localOp.setAuthFailureReason(message);
               break bindProcessing;
             }
 
@@ -3379,11 +3341,11 @@
               // user then ignore it.
               if (! DirectoryServer.isRootDN(bindDN))
               {
-                int    msgID   = MSGID_BIND_OPERATION_WRITABILITY_DISABLED;
-                String message = getMessage(msgID, String.valueOf(bindDN));
+                Message message = ERR_BIND_OPERATION_WRITABILITY_DISABLED.get(
+                        String.valueOf(bindDN));
 
                 localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-                localOp.setAuthFailureReason(msgID, message);
+                localOp.setAuthFailureReason(message);
                 break bindProcessing;
               }
             }
@@ -3394,11 +3356,11 @@
             if (policy.requireSecureAuthentication() &&
                 (! clientConnection.isSecure()))
             {
-              int    msgID   = MSGID_BIND_OPERATION_INSECURE_SIMPLE_BIND;
-              String message = getMessage(msgID, String.valueOf(bindDN));
+              Message message = ERR_BIND_OPERATION_INSECURE_SIMPLE_BIND.get(
+                      String.valueOf(bindDN));
 
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-              localOp.setAuthFailureReason(msgID, message);
+              localOp.setAuthFailureReason(message);
               break bindProcessing;
             }
 
@@ -3406,31 +3368,31 @@
             // Check to see if the user is administratively disabled or locked.
             if (pwPolicyState.isDisabled())
             {
-              int    msgID   = MSGID_BIND_OPERATION_ACCOUNT_DISABLED;
-              String message = getMessage(msgID, String.valueOf(bindDN));
+              Message message = ERR_BIND_OPERATION_ACCOUNT_DISABLED.get(
+                      String.valueOf(bindDN));
 
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-              localOp.setAuthFailureReason(msgID, message);
+              localOp.setAuthFailureReason(message);
               break bindProcessing;
             }
             else if (pwPolicyState.isAccountExpired())
             {
-              int    msgID   = MSGID_BIND_OPERATION_ACCOUNT_EXPIRED;
-              String message = getMessage(msgID, String.valueOf(bindDN));
+              Message message = ERR_BIND_OPERATION_ACCOUNT_EXPIRED.get(
+                      String.valueOf(bindDN));
 
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-              localOp.setAuthFailureReason(msgID, message);
+              localOp.setAuthFailureReason(message);
 
               pwPolicyState.generateAccountStatusNotification(
-                   AccountStatusNotificationType.ACCOUNT_EXPIRED, bindDN, msgID,
-                   message);
+                   AccountStatusNotificationType.ACCOUNT_EXPIRED, bindDN,
+                      message);
 
               break bindProcessing;
             }
             else if (pwPolicyState.lockedDueToFailures())
             {
-              int    msgID   = MSGID_BIND_OPERATION_ACCOUNT_FAILURE_LOCKED;
-              String message = getMessage(msgID, String.valueOf(bindDN));
+              Message message = ERR_BIND_OPERATION_ACCOUNT_FAILURE_LOCKED.get(
+                      String.valueOf(bindDN));
 
               if (pwPolicyErrorType == null)
               {
@@ -3438,13 +3400,13 @@
               }
 
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-              localOp.setAuthFailureReason(msgID, message);
+              localOp.setAuthFailureReason(message);
               break bindProcessing;
             }
             else if (pwPolicyState.lockedDueToMaximumResetAge())
             {
-              int    msgID   = MSGID_BIND_OPERATION_ACCOUNT_RESET_LOCKED;
-              String message = getMessage(msgID, String.valueOf(bindDN));
+              Message message = ERR_BIND_OPERATION_ACCOUNT_RESET_LOCKED.get(
+                      String.valueOf(bindDN));
 
               if (pwPolicyErrorType == null)
               {
@@ -3452,18 +3414,18 @@
               }
 
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-              localOp.setAuthFailureReason(msgID, message);
+              localOp.setAuthFailureReason(message);
 
               pwPolicyState.generateAccountStatusNotification(
                    AccountStatusNotificationType.ACCOUNT_RESET_LOCKED, bindDN,
-                   msgID, message);
+                      message);
 
               break bindProcessing;
             }
             else if (pwPolicyState.lockedDueToIdleInterval())
             {
-              int    msgID   = MSGID_BIND_OPERATION_ACCOUNT_IDLE_LOCKED;
-              String message = getMessage(msgID, String.valueOf(bindDN));
+              Message message = ERR_BIND_OPERATION_ACCOUNT_IDLE_LOCKED.get(
+                      String.valueOf(bindDN));
 
               if (pwPolicyErrorType == null)
               {
@@ -3471,11 +3433,11 @@
               }
 
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-              localOp.setAuthFailureReason(msgID, message);
+              localOp.setAuthFailureReason(message);
 
               pwPolicyState.generateAccountStatusNotification(
                    AccountStatusNotificationType.ACCOUNT_IDLE_LOCKED, bindDN,
-                   msgID, message);
+                      message);
 
               break bindProcessing;
             }
@@ -3510,30 +3472,30 @@
                 }
                 else
                 {
-                  int    msgID   = MSGID_BIND_OPERATION_PASSWORD_EXPIRED;
-                  String message = getMessage(msgID, String.valueOf(bindDN));
+                  Message message = ERR_BIND_OPERATION_PASSWORD_EXPIRED.get(
+                          String.valueOf(bindDN));
 
                   localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-                  localOp.setAuthFailureReason(msgID, message);
+                  localOp.setAuthFailureReason(message);
 
                   pwPolicyState.generateAccountStatusNotification(
                        AccountStatusNotificationType.PASSWORD_EXPIRED, bindDN,
-                       msgID, message);
+                          message);
 
                   break bindProcessing;
                 }
               }
               else
               {
-                int    msgID   = MSGID_BIND_OPERATION_PASSWORD_EXPIRED;
-                String message = getMessage(msgID, String.valueOf(bindDN));
+                Message message = ERR_BIND_OPERATION_PASSWORD_EXPIRED.get(
+                        String.valueOf(bindDN));
 
                 localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-                localOp.setAuthFailureReason(msgID, message);
+                localOp.setAuthFailureReason(message);
 
                 pwPolicyState.generateAccountStatusNotification(
                      AccountStatusNotificationType.PASSWORD_EXPIRED, bindDN,
-                     msgID, message);
+                        message);
 
                 break bindProcessing;
               }
@@ -3541,10 +3503,10 @@
             else if (pwPolicyState.shouldWarn())
             {
               int numSeconds = pwPolicyState.getSecondsUntilExpiration();
-              String timeToExpiration = secondsToTimeString(numSeconds);
+              Message timeToExpiration = secondsToTimeString(numSeconds);
 
-              int msgID = MSGID_BIND_PASSWORD_EXPIRING;
-              String message = getMessage(msgID, timeToExpiration);
+              Message message = INFO_BIND_PASSWORD_EXPIRING.get(
+                      timeToExpiration);
               localOp.appendErrorMessage(message);
 
               if (pwPolicyWarningType == null)
@@ -3579,8 +3541,8 @@
               // and return.
               localOp.setResultCode(ResultCode.CANCELED);
 
-              int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-              localOp.appendErrorMessage(getMessage(msgID));
+              localOp.appendErrorMessage(
+                      ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
               return;
             }
@@ -3607,8 +3569,8 @@
               {
                 localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-                int msgID = MSGID_BIND_REJECTED_LOCKDOWN_MODE;
-                localOp.setAuthFailureReason(msgID, getMessage(msgID));
+                Message message = ERR_BIND_REJECTED_LOCKDOWN_MODE.get();
+                localOp.setAuthFailureReason(message);
 
                 break bindProcessing;
               }
@@ -3633,11 +3595,9 @@
                   AttributeValue v = iterator.next();
                   if (iterator.hasNext())
                   {
-                    int msgID = MSGID_BIND_MULTIPLE_USER_SIZE_LIMITS;
-                    String message =
-                         getMessage(msgID, String.valueOf(userEntry.getDN()));
-                    logError(ErrorLogCategory.CORE_SERVER,
-                             ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                    Message message = WARN_BIND_MULTIPLE_USER_SIZE_LIMITS.get(
+                        String.valueOf(userEntry.getDN()));
+                    logError(message);
                   }
                   else
                   {
@@ -3652,12 +3612,10 @@
                         TRACER.debugCaught(DebugLogLevel.ERROR, e);
                       }
 
-                      int msgID = MSGID_BIND_CANNOT_PROCESS_USER_SIZE_LIMIT;
-                      String message =
-                           getMessage(msgID, v.getStringValue(),
-                                      String.valueOf(userEntry.getDN()));
-                      logError(ErrorLogCategory.CORE_SERVER,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      Message message = WARN_BIND_CANNOT_PROCESS_USER_SIZE_LIMIT
+                              .get(v.getStringValue(),
+                                String.valueOf(userEntry.getDN()));
+                      logError(message);
                     }
                   }
                 }
@@ -3679,11 +3637,9 @@
                   AttributeValue v = iterator.next();
                   if (iterator.hasNext())
                   {
-                    int msgID = MSGID_BIND_MULTIPLE_USER_TIME_LIMITS;
-                    String message =
-                         getMessage(msgID, String.valueOf(userEntry.getDN()));
-                    logError(ErrorLogCategory.CORE_SERVER,
-                             ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                    Message message = WARN_BIND_MULTIPLE_USER_TIME_LIMITS.get(
+                        String.valueOf(userEntry.getDN()));
+                    logError(message);
                   }
                   else
                   {
@@ -3698,12 +3654,11 @@
                         TRACER.debugCaught(DebugLogLevel.ERROR, e);
                       }
 
-                      int msgID = MSGID_BIND_CANNOT_PROCESS_USER_TIME_LIMIT;
-                      String message =
-                           getMessage(msgID, v.getStringValue(),
-                                      String.valueOf(userEntry.getDN()));
-                      logError(ErrorLogCategory.CORE_SERVER,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      Message message =
+                          WARN_BIND_CANNOT_PROCESS_USER_TIME_LIMIT.
+                            get(v.getStringValue(),
+                                String.valueOf(userEntry.getDN()));
+                      logError(message);
                     }
                   }
                 }
@@ -3724,11 +3679,9 @@
                   AttributeValue v = iterator.next();
                   if (iterator.hasNext())
                   {
-                    int msgID = MSGID_BIND_MULTIPLE_USER_IDLE_TIME_LIMITS;
-                    String message =
-                         getMessage(msgID, String.valueOf(userEntry.getDN()));
-                    logError(ErrorLogCategory.CORE_SERVER,
-                             ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                    Message message = WARN_BIND_MULTIPLE_USER_IDLE_TIME_LIMITS.
+                        get(String.valueOf(userEntry.getDN()));
+                    logError(message);
                   }
                   else
                   {
@@ -3744,13 +3697,11 @@
                         TRACER.debugCaught(DebugLogLevel.ERROR, e);
                       }
 
-                      int msgID =
-                           MSGID_BIND_CANNOT_PROCESS_USER_IDLE_TIME_LIMIT;
-                      String message =
-                           getMessage(msgID, v.getStringValue(),
-                                      String.valueOf(userEntry.getDN()));
-                      logError(ErrorLogCategory.CORE_SERVER,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      Message message =
+                          WARN_BIND_CANNOT_PROCESS_USER_IDLE_TIME_LIMIT.
+                            get(v.getStringValue(),
+                                String.valueOf(userEntry.getDN()));
+                      logError(message);
                     }
                   }
                 }
@@ -3772,11 +3723,10 @@
                   AttributeValue v = iterator.next();
                   if (iterator.hasNext())
                   {
-                    int msgID = MSGID_BIND_MULTIPLE_USER_LOOKTHROUGH_LIMITS;
-                    String message =
-                         getMessage(msgID, String.valueOf(userEntry.getDN()));
-                    logError(ErrorLogCategory.CORE_SERVER,
-                             ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                    Message message =
+                        WARN_BIND_MULTIPLE_USER_LOOKTHROUGH_LIMITS.
+                          get(String.valueOf(userEntry.getDN()));
+                    logError(message);
                   }
                   else
                   {
@@ -3791,13 +3741,11 @@
                         TRACER.debugCaught(DebugLogLevel.ERROR, e);
                       }
 
-                      int msgID =
-                          MSGID_BIND_CANNOT_PROCESS_USER_LOOKTHROUGH_LIMIT;
-                      String message =
-                           getMessage(msgID, v.getStringValue(),
-                                      String.valueOf(userEntry.getDN()));
-                      logError(ErrorLogCategory.CORE_SERVER,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      Message message =
+                          WARN_BIND_CANNOT_PROCESS_USER_LOOKTHROUGH_LIMIT.
+                            get(v.getStringValue(),
+                                String.valueOf(userEntry.getDN()));
+                      logError(message);
                     }
                   }
                 }
@@ -3812,14 +3760,14 @@
                 pwPolicyState.setWarnedTime();
 
                 int numSeconds = pwPolicyState.getSecondsUntilExpiration();
-                String timeToExpiration = secondsToTimeString(numSeconds);
+                Message timeToExpiration = secondsToTimeString(numSeconds);
 
-                int msgID = MSGID_BIND_PASSWORD_EXPIRING;
-                String message = getMessage(msgID, timeToExpiration);
+                Message message = INFO_BIND_PASSWORD_EXPIRING.get(
+                        timeToExpiration);
 
                 pwPolicyState.generateAccountStatusNotification(
                      AccountStatusNotificationType.PASSWORD_EXPIRING, bindDN,
-                     msgID, message);
+                        message);
               }
 
               if (isGraceLogin)
@@ -3831,11 +3779,10 @@
             }
             else
             {
-              int    msgID   = MSGID_BIND_OPERATION_WRONG_PASSWORD;
-              String message = getMessage(msgID);
+              Message message = ERR_BIND_OPERATION_WRONG_PASSWORD.get();
 
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-              localOp.setAuthFailureReason(msgID, message);
+              localOp.setAuthFailureReason(message);
 
               if (policy.getLockoutFailureCount() > 0)
               {
@@ -3849,21 +3796,21 @@
                   {
                     notificationType = AccountStatusNotificationType.
                                             ACCOUNT_TEMPORARILY_LOCKED;
-                    msgID   = MSGID_BIND_ACCOUNT_TEMPORARILY_LOCKED;
-                    message = getMessage(msgID,
-                                         secondsToTimeString(lockoutDuration));
+
+                    message = ERR_BIND_ACCOUNT_TEMPORARILY_LOCKED.get(
+                            secondsToTimeString(lockoutDuration));
                   }
                   else
                   {
                     notificationType = AccountStatusNotificationType.
                                             ACCOUNT_PERMANENTLY_LOCKED;
-                    msgID   = MSGID_BIND_ACCOUNT_PERMANENTLY_LOCKED;
-                    message = getMessage(msgID);
+
+                    message = ERR_BIND_ACCOUNT_PERMANENTLY_LOCKED.get();
                   }
 
                   pwPolicyState.generateAccountStatusNotification(
                        notificationType, localOp.getUserEntryDN(),
-                       msgID, message);
+                          message);
                 }
               }
             }
@@ -3875,11 +3822,11 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            int    msgID   = MSGID_BIND_OPERATION_PASSWORD_VALIDATION_EXCEPTION;
-            String message = getMessage(msgID, getExceptionMessage(e));
+            Message message = ERR_BIND_OPERATION_PASSWORD_VALIDATION_EXCEPTION
+                    .get(getExceptionMessage(e));
 
             localOp.setResultCode(DirectoryServer.getServerErrorResultCode());
-            localOp.setAuthFailureReason(msgID, message);
+            localOp.setAuthFailureReason(message);
             break bindProcessing;
           }
           finally
@@ -3900,11 +3847,11 @@
           {
             localOp.setResultCode(ResultCode.AUTH_METHOD_NOT_SUPPORTED);
 
-            int    msgID   = MSGID_BIND_OPERATION_UNKNOWN_SASL_MECHANISM;
-            String message = getMessage(msgID, saslMechanism);
+            Message message = ERR_BIND_OPERATION_UNKNOWN_SASL_MECHANISM.get(
+                    saslMechanism);
 
             localOp.appendErrorMessage(message);
-            localOp.setAuthFailureReason(msgID, message);
+            localOp.setAuthFailureReason(message);
             break bindProcessing;
           }
 
@@ -3923,8 +3870,7 @@
             // and return.
             localOp.setResultCode(ResultCode.CANCELED);
 
-            int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-            localOp.appendErrorMessage(getMessage(msgID));
+            localOp.appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
             return;
           }
@@ -3957,8 +3903,8 @@
               {
                 localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-                int msgID = MSGID_BIND_REJECTED_LOCKDOWN_MODE;
-                localOp.setAuthFailureReason(msgID, getMessage(msgID));
+                Message message = ERR_BIND_REJECTED_LOCKDOWN_MODE.get();
+                localOp.setAuthFailureReason(message);
 
                 break bindProcessing;
               }
@@ -4018,11 +3964,11 @@
               // user then ignore it.
               if (! DirectoryServer.isRootDN(bindDN))
               {
-                int    msgID   = MSGID_BIND_OPERATION_WRITABILITY_DISABLED;
-                String message = getMessage(msgID, userDNString);
+                Message message = ERR_BIND_OPERATION_WRITABILITY_DISABLED.get(
+                        userDNString);
 
                 localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-                localOp.setAuthFailureReason(msgID, message);
+                localOp.setAuthFailureReason(message);
                 break bindProcessing;
               }
             }
@@ -4030,22 +3976,22 @@
             {
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int    msgID   = MSGID_BIND_OPERATION_ACCOUNT_DISABLED;
-              String message = getMessage(msgID, userDNString);
-              localOp.setAuthFailureReason(msgID, message);
+              Message message = ERR_BIND_OPERATION_ACCOUNT_DISABLED.get(
+                      userDNString);
+              localOp.setAuthFailureReason(message);
               break bindProcessing;
             }
             else if (pwPolicyState.isAccountExpired())
             {
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int    msgID   = MSGID_BIND_OPERATION_ACCOUNT_EXPIRED;
-              String message = getMessage(msgID, userDNString);
-              localOp.setAuthFailureReason(msgID, message);
+              Message message = ERR_BIND_OPERATION_ACCOUNT_EXPIRED.get(
+                      userDNString);
+              localOp.setAuthFailureReason(message);
 
               pwPolicyState.generateAccountStatusNotification(
-                   AccountStatusNotificationType.ACCOUNT_EXPIRED, bindDN, msgID,
-                   message);
+                   AccountStatusNotificationType.ACCOUNT_EXPIRED, bindDN,
+                      message);
 
               break bindProcessing;
             }
@@ -4056,9 +4002,9 @@
             {
               localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              int    msgID   = MSGID_BIND_OPERATION_INSECURE_SASL_BIND;
-              String message = getMessage(msgID, saslMechanism, userDNString);
-              localOp.setAuthFailureReason(msgID, message);
+              Message message = ERR_BIND_OPERATION_INSECURE_SASL_BIND.get(
+                      saslMechanism, userDNString);
+              localOp.setAuthFailureReason(message);
               break bindProcessing;
             }
 
@@ -4071,9 +4017,9 @@
                 pwPolicyErrorType = PasswordPolicyErrorType.ACCOUNT_LOCKED;
               }
 
-              int    msgID   = MSGID_BIND_OPERATION_ACCOUNT_FAILURE_LOCKED;
-              String message = getMessage(msgID, userDNString);
-              localOp.setAuthFailureReason(msgID, message);
+              Message message = ERR_BIND_OPERATION_ACCOUNT_FAILURE_LOCKED.get(
+                      userDNString);
+              localOp.setAuthFailureReason(message);
               break bindProcessing;
             }
 
@@ -4086,13 +4032,13 @@
                 pwPolicyErrorType = PasswordPolicyErrorType.ACCOUNT_LOCKED;
               }
 
-              int    msgID   = MSGID_BIND_OPERATION_ACCOUNT_IDLE_LOCKED;
-              String message = getMessage(msgID, userDNString);
-              localOp.setAuthFailureReason(msgID, message);
+              Message message = ERR_BIND_OPERATION_ACCOUNT_IDLE_LOCKED.get(
+                      userDNString);
+              localOp.setAuthFailureReason(message);
 
               pwPolicyState.generateAccountStatusNotification(
                    AccountStatusNotificationType.ACCOUNT_IDLE_LOCKED, bindDN,
-                   msgID, message);
+                      message);
 
               break bindProcessing;
             }
@@ -4109,13 +4055,13 @@
                   pwPolicyErrorType = PasswordPolicyErrorType.ACCOUNT_LOCKED;
                 }
 
-                int    msgID   = MSGID_BIND_OPERATION_ACCOUNT_RESET_LOCKED;
-                String message = getMessage(msgID, userDNString);
-                localOp.setAuthFailureReason(msgID, message);
+                Message message = ERR_BIND_OPERATION_ACCOUNT_RESET_LOCKED.get(
+                        userDNString);
+                localOp.setAuthFailureReason(message);
 
                 pwPolicyState.generateAccountStatusNotification(
                      AccountStatusNotificationType.ACCOUNT_RESET_LOCKED, bindDN,
-                     msgID, message);
+                        message);
 
                 break bindProcessing;
               }
@@ -4148,30 +4094,30 @@
                   }
                   else
                   {
-                    int    msgID   = MSGID_BIND_OPERATION_PASSWORD_EXPIRED;
-                    String message = getMessage(msgID, String.valueOf(bindDN));
+                    Message message = ERR_BIND_OPERATION_PASSWORD_EXPIRED.get(
+                            String.valueOf(bindDN));
 
                     localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-                    localOp.setAuthFailureReason(msgID, message);
+                    localOp.setAuthFailureReason(message);
 
                     pwPolicyState.generateAccountStatusNotification(
                          AccountStatusNotificationType.PASSWORD_EXPIRED, bindDN,
-                         msgID, message);
+                            message);
 
                     break bindProcessing;
                   }
                 }
                 else
                 {
-                  int    msgID   = MSGID_BIND_OPERATION_PASSWORD_EXPIRED;
-                  String message = getMessage(msgID, String.valueOf(bindDN));
+                  Message message = ERR_BIND_OPERATION_PASSWORD_EXPIRED.get(
+                          String.valueOf(bindDN));
 
                   localOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
-                  localOp.setAuthFailureReason(msgID, message);
+                  localOp.setAuthFailureReason(message);
 
                   pwPolicyState.generateAccountStatusNotification(
                        AccountStatusNotificationType.PASSWORD_EXPIRED, bindDN,
-                       msgID, message);
+                          message);
 
                   break bindProcessing;
                 }
@@ -4179,10 +4125,10 @@
               else if (pwPolicyState.shouldWarn())
               {
                 int numSeconds = pwPolicyState.getSecondsUntilExpiration();
-                String timeToExpiration = secondsToTimeString(numSeconds);
+                Message timeToExpiration = secondsToTimeString(numSeconds);
 
-                int    msgID   = MSGID_BIND_PASSWORD_EXPIRING;
-                String message = getMessage(msgID, timeToExpiration);
+                Message message = INFO_BIND_PASSWORD_EXPIRING.get(
+                        timeToExpiration);
                 localOp.appendErrorMessage(message);
 
                 if (pwPolicyWarningType == null)
@@ -4217,14 +4163,14 @@
                 pwPolicyState.setWarnedTime();
 
                 int numSeconds = pwPolicyState.getSecondsUntilExpiration();
-                String timeToExpiration = secondsToTimeString(numSeconds);
+                Message timeToExpiration = secondsToTimeString(numSeconds);
 
-                int msgID = MSGID_BIND_PASSWORD_EXPIRING;
-                String message = getMessage(msgID, timeToExpiration);
+                Message message = INFO_BIND_PASSWORD_EXPIRING.get(
+                        timeToExpiration);
 
                 pwPolicyState.generateAccountStatusNotification(
                      AccountStatusNotificationType.PASSWORD_EXPIRING, bindDN,
-                     msgID, message);
+                        message);
               }
 
               if (isGraceLogin)
@@ -4251,10 +4197,9 @@
                   AttributeValue v = iterator.next();
                   if (iterator.hasNext())
                   {
-                    int msgID = MSGID_BIND_MULTIPLE_USER_SIZE_LIMITS;
-                    String message = getMessage(msgID, userDNString);
-                    logError(ErrorLogCategory.CORE_SERVER,
-                             ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                    Message message =
+                        WARN_BIND_MULTIPLE_USER_SIZE_LIMITS.get(userDNString);
+                    logError(message);
                   }
                   else
                   {
@@ -4269,11 +4214,10 @@
                         TRACER.debugCaught(DebugLogLevel.ERROR, e);
                       }
 
-                      int msgID = MSGID_BIND_CANNOT_PROCESS_USER_SIZE_LIMIT;
-                      String message =
-                           getMessage(msgID, v.getStringValue(), userDNString);
-                      logError(ErrorLogCategory.CORE_SERVER,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      Message message =
+                          WARN_BIND_CANNOT_PROCESS_USER_SIZE_LIMIT.
+                            get(v.getStringValue(), userDNString);
+                      logError(message);
                     }
                   }
                 }
@@ -4295,10 +4239,9 @@
                   AttributeValue v = iterator.next();
                   if (iterator.hasNext())
                   {
-                    int msgID = MSGID_BIND_MULTIPLE_USER_TIME_LIMITS;
-                    String message = getMessage(msgID, userDNString);
-                    logError(ErrorLogCategory.CORE_SERVER,
-                             ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                    Message message =
+                        WARN_BIND_MULTIPLE_USER_TIME_LIMITS.get(userDNString);
+                    logError(message);
                   }
                   else
                   {
@@ -4313,11 +4256,10 @@
                         TRACER.debugCaught(DebugLogLevel.ERROR, e);
                       }
 
-                      int msgID = MSGID_BIND_CANNOT_PROCESS_USER_TIME_LIMIT;
-                      String message =
-                           getMessage(msgID, v.getStringValue(), userDNString);
-                      logError(ErrorLogCategory.CORE_SERVER,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      Message message =
+                          WARN_BIND_CANNOT_PROCESS_USER_TIME_LIMIT.
+                            get(v.getStringValue(), userDNString);
+                      logError(message);
                     }
                   }
                 }
@@ -4338,11 +4280,9 @@
                   AttributeValue v = iterator.next();
                   if (iterator.hasNext())
                   {
-                    int msgID = MSGID_BIND_MULTIPLE_USER_IDLE_TIME_LIMITS;
-                    String message =
-                         getMessage(msgID, String.valueOf(userDNString));
-                    logError(ErrorLogCategory.CORE_SERVER,
-                             ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                    Message message = WARN_BIND_MULTIPLE_USER_IDLE_TIME_LIMITS.
+                        get(String.valueOf(userDNString));
+                    logError(message);
                   }
                   else
                   {
@@ -4358,13 +4298,11 @@
                         TRACER.debugCaught(DebugLogLevel.ERROR, e);
                       }
 
-                      int msgID =
-                           MSGID_BIND_CANNOT_PROCESS_USER_IDLE_TIME_LIMIT;
-                      String message =
-                           getMessage(msgID, v.getStringValue(),
-                                      String.valueOf(userDNString));
-                      logError(ErrorLogCategory.CORE_SERVER,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      Message message =
+                          WARN_BIND_CANNOT_PROCESS_USER_IDLE_TIME_LIMIT.
+                            get(v.getStringValue(),
+                                String.valueOf(userDNString));
+                      logError(message);
                     }
                   }
                 }
@@ -4386,10 +4324,10 @@
                   AttributeValue v = iterator.next();
                   if (iterator.hasNext())
                   {
-                    int msgID = MSGID_BIND_MULTIPLE_USER_LOOKTHROUGH_LIMITS;
-                    String message = getMessage(msgID, userDNString);
-                    logError(ErrorLogCategory.CORE_SERVER,
-                             ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                    Message message =
+                        WARN_BIND_MULTIPLE_USER_LOOKTHROUGH_LIMITS.
+                          get(userDNString);
+                    logError(message);
                   }
                   else
                   {
@@ -4404,12 +4342,10 @@
                         TRACER.debugCaught(DebugLogLevel.ERROR, e);
                       }
 
-                      int msgID =
-                          MSGID_BIND_CANNOT_PROCESS_USER_LOOKTHROUGH_LIMIT;
-                      String message =
-                           getMessage(msgID, v.getStringValue(), userDNString);
-                      logError(ErrorLogCategory.CORE_SERVER,
-                               ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+                      Message message =
+                          WARN_BIND_CANNOT_PROCESS_USER_LOOKTHROUGH_LIMIT.
+                            get(v.getStringValue(), userDNString);
+                      logError(message);
                     }
                   }
                 }
@@ -4433,29 +4369,26 @@
                   if (pwPolicyState.lockedDueToFailures())
                   {
                     AccountStatusNotificationType notificationType;
-                    int msgID;
-                    String message;
+                    Message message;
 
                     int lockoutDuration = pwPolicyState.getSecondsUntilUnlock();
                     if (lockoutDuration > -1)
                     {
                       notificationType = AccountStatusNotificationType.
                                               ACCOUNT_TEMPORARILY_LOCKED;
-                      msgID   = MSGID_BIND_ACCOUNT_TEMPORARILY_LOCKED;
-                      message = getMessage(msgID,
-                                     secondsToTimeString(lockoutDuration));
+                      message = ERR_BIND_ACCOUNT_TEMPORARILY_LOCKED.get(
+                              secondsToTimeString(lockoutDuration));
                     }
                     else
                     {
                       notificationType = AccountStatusNotificationType.
                                               ACCOUNT_PERMANENTLY_LOCKED;
-                      msgID   = MSGID_BIND_ACCOUNT_PERMANENTLY_LOCKED;
-                      message = getMessage(msgID);
+                      message = ERR_BIND_ACCOUNT_PERMANENTLY_LOCKED.get();
                     }
 
                     pwPolicyState.generateAccountStatusNotification(
                          notificationType, localOp.getUserEntryDN(),
-                         msgID, message);
+                            message);
                   }
                 }
               }
@@ -4504,8 +4437,7 @@
         // and return.
         localOp.setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-        localOp.appendErrorMessage(getMessage(msgID));
+        localOp.appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
         return;
       }
@@ -4669,7 +4601,7 @@
         {
           // This is not fine.  The root DSE cannot be added.
           localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-          localOp.appendErrorMessage(getMessage(MSGID_ADD_CANNOT_ADD_ROOT_DSE));
+          localOp.appendErrorMessage(ERR_ADD_CANNOT_ADD_ROOT_DSE.get());
           break addProcessing;
         }
         else
@@ -4677,8 +4609,8 @@
           // The entry doesn't have a parent but isn't a suffix.  This is not
           // allowed.
           localOp.setResultCode(ResultCode.NO_SUCH_OBJECT);
-          localOp.appendErrorMessage(getMessage(MSGID_ADD_ENTRY_NOT_SUFFIX,
-                                        String.valueOf(entryDN)));
+          localOp.appendErrorMessage(ERR_ADD_ENTRY_NOT_SUFFIX.get(
+                  String.valueOf(entryDN)));
           break addProcessing;
         }
       }
@@ -4696,9 +4628,9 @@
         if (parentLock == null)
         {
           localOp.setResultCode(DirectoryServer.getServerErrorResultCode());
-          localOp.appendErrorMessage(getMessage(MSGID_ADD_CANNOT_LOCK_PARENT,
-                                        String.valueOf(entryDN),
-                                        String.valueOf(parentDN)));
+          localOp.appendErrorMessage(ERR_ADD_CANNOT_LOCK_PARENT.get(
+                  String.valueOf(entryDN),
+                  String.valueOf(parentDN)));
 
           skipPostOperation = true;
           break addProcessing;
@@ -4732,8 +4664,8 @@
         if (entryLock == null)
         {
           localOp.setResultCode(DirectoryServer.getServerErrorResultCode());
-          localOp.appendErrorMessage(getMessage(MSGID_ADD_CANNOT_LOCK_ENTRY,
-                                        String.valueOf(entryDN)));
+          localOp.appendErrorMessage(ERR_ADD_CANNOT_LOCK_ENTRY.get(
+                  String.valueOf(entryDN)));
 
           skipPostOperation = true;
           break addProcessing;
@@ -4761,12 +4693,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            logError(ErrorLogCategory.SYNCHRONIZATION,
-                     ErrorLogSeverity.SEVERE_ERROR,
-                     MSGID_ADD_SYNCH_CONFLICT_RESOLUTION_FAILED,
-                     localOp.getConnectionID(),
-                     localOp.getOperationID(),
-                     getExceptionMessage(de));
+            logError(ERR_ADD_SYNCH_CONFLICT_RESOLUTION_FAILED.
+                get(localOp.getConnectionID(), localOp.getOperationID(),
+                    getExceptionMessage(de)));
 
             localOp.setResponseData(de);
             break addProcessing;
@@ -4782,9 +4711,8 @@
           if (DirectoryServer.entryExists(entryDN))
           {
             localOp.setResultCode(ResultCode.ENTRY_ALREADY_EXISTS);
-              localOp.appendErrorMessage(getMessage(
-                                MSGID_ADD_ENTRY_ALREADY_EXISTS,
-                                String.valueOf(entryDN)));
+            localOp.appendErrorMessage(ERR_ADD_ENTRY_ALREADY_EXISTS.get(
+                    String.valueOf(entryDN)));
             break addProcessing;
           }
         }
@@ -4796,7 +4724,7 @@
           }
 
           localOp.setResultCode(de.getResultCode());
-          localOp.appendErrorMessage(de.getErrorMessage());
+          localOp.appendErrorMessage(de.getMessageObject());
           localOp.setMatchedDN(de.getMatchedDN());
           localOp.setReferralURLs(de.getReferralURLs());
           break addProcessing;
@@ -4839,9 +4767,9 @@
 
               // The parent doesn't exist, so this add can't be successful.
               localOp.setResultCode(ResultCode.NO_SUCH_OBJECT);
-              localOp.appendErrorMessage(getMessage(MSGID_ADD_NO_PARENT,
-                                            String.valueOf(entryDN),
-                                            String.valueOf(parentDN)));
+              localOp.appendErrorMessage(ERR_ADD_NO_PARENT.get(
+                      String.valueOf(entryDN),
+                      String.valueOf(parentDN)));
               break addProcessing;
             }
           }
@@ -4853,7 +4781,7 @@
             }
 
             localOp.setResultCode(de.getResultCode());
-            localOp.appendErrorMessage(de.getErrorMessage());
+            localOp.appendErrorMessage(de.getMessageObject());
             localOp.setMatchedDN(de.getMatchedDN());
             localOp.setReferralURLs(de.getReferralURLs());
             break addProcessing;
@@ -4891,10 +4819,9 @@
               {
                 localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-                int msgID = MSGID_ADD_MISSING_RDN_ATTRIBUTE;
-                localOp.appendErrorMessage(getMessage(msgID,
-                                                      String.valueOf(entryDN),
-                                                      n));
+                localOp.appendErrorMessage(ERR_ADD_MISSING_RDN_ATTRIBUTE.get(
+                        String.valueOf(entryDN),
+                        n));
 
                 break addProcessing;
               }
@@ -4934,9 +4861,9 @@
                 {
                   localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-                  int msgID = MSGID_ADD_MISSING_RDN_ATTRIBUTE;
                   localOp.appendErrorMessage(
-                      getMessage(msgID, String.valueOf(entryDN), n));
+                      ERR_ADD_MISSING_RDN_ATTRIBUTE.get(
+                              String.valueOf(entryDN), n));
 
                   break addProcessing;
                 }
@@ -4964,9 +4891,9 @@
               {
                 localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-                int msgID = MSGID_ADD_MISSING_RDN_ATTRIBUTE;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN),n));
+                    ERR_ADD_MISSING_RDN_ATTRIBUTE.get(
+                            String.valueOf(entryDN),n));
 
                 break addProcessing;
               }
@@ -5006,9 +4933,9 @@
                 {
                   localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-                  int msgID = MSGID_ADD_MISSING_RDN_ATTRIBUTE;
                   localOp.appendErrorMessage(
-                      getMessage(msgID, String.valueOf(entryDN),n));
+                      ERR_ADD_MISSING_RDN_ATTRIBUTE.get(
+                              String.valueOf(entryDN),n));
 
                   break addProcessing;
                 }
@@ -5059,8 +4986,9 @@
             (! clientConnection.hasPrivilege(Privilege.PRIVILEGE_CHANGE,
                 localOp)))
         {
-          int msgID = MSGID_ADD_CHANGE_PRIVILEGE_INSUFFICIENT_PRIVILEGES;
-          localOp.appendErrorMessage(getMessage(msgID));
+
+          localOp.appendErrorMessage(
+                  ERR_ADD_CHANGE_PRIVILEGE_INSUFFICIENT_PRIVILEGES.get());
           localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
           break addProcessing;
         }
@@ -5098,10 +5026,10 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                int msgID = MSGID_ADD_INVALID_PWPOLICY_DN_SYNTAX;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN),
-                        de.getErrorMessage()));
+                    ERR_ADD_INVALID_PWPOLICY_DN_SYNTAX.get(
+                            String.valueOf(entryDN),
+                            de.getMessageObject()));
 
                 localOp.setResultCode(ResultCode.INVALID_ATTRIBUTE_SYNTAX);
                 break addProcessing;
@@ -5110,9 +5038,8 @@
               pwPolicy = DirectoryServer.getPasswordPolicy(policyDN);
               if (pwPolicy == null)
               {
-                int msgID = MSGID_ADD_NO_SUCH_PWPOLICY;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN),
+                    ERR_ADD_NO_SUCH_PWPOLICY.get(String.valueOf(entryDN),
                         String.valueOf(policyDN)));
 
                 localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
@@ -5149,7 +5076,7 @@
         if ((DirectoryServer.checkSchema()) &&
             (!localOp.isSynchronizationOperation()) )
         {
-          StringBuilder invalidReason = new StringBuilder();
+          MessageBuilder invalidReason = new MessageBuilder();
           if (! entry.conformsToSchema(parentEntry, true, true, true,
                                        invalidReason))
           {
@@ -5162,7 +5089,7 @@
             switch (DirectoryServer.getSyntaxEnforcementPolicy())
             {
               case REJECT:
-                invalidReason = new StringBuilder();
+                invalidReason = new MessageBuilder();
                 for (List<Attribute> attrList : userAttributes.values())
                 {
                   for (Attribute a : attrList)
@@ -5175,13 +5102,12 @@
                         if (! syntax.valueIsAcceptable(v.getValue(),
                                                        invalidReason))
                         {
-                          String message =
-                               getMessage(MSGID_ADD_OP_INVALID_SYNTAX,
-                                          String.valueOf(entryDN),
-                                          String.valueOf(v.getStringValue()),
-                                          String.valueOf(a.getName()),
-                                          String.valueOf(invalidReason));
-                          invalidReason = new StringBuilder(message);
+                          Message message = WARN_ADD_OP_INVALID_SYNTAX.
+                              get(String.valueOf(entryDN),
+                                  String.valueOf(v.getStringValue()),
+                                  String.valueOf(a.getName()),
+                                  String.valueOf(invalidReason));
+                          invalidReason = new MessageBuilder(message);
 
                           localOp.setResultCode(
                               ResultCode.INVALID_ATTRIBUTE_SYNTAX);
@@ -5206,13 +5132,12 @@
                         if (! syntax.valueIsAcceptable(v.getValue(),
                                                        invalidReason))
                         {
-                          String message =
-                               getMessage(MSGID_ADD_OP_INVALID_SYNTAX,
-                                          String.valueOf(entryDN),
-                                          String.valueOf(v.getStringValue()),
-                                          String.valueOf(a.getName()),
-                                          String.valueOf(invalidReason));
-                          invalidReason = new StringBuilder(message);
+                          Message message = WARN_ADD_OP_INVALID_SYNTAX.
+                              get(String.valueOf(entryDN),
+                                  String.valueOf(v.getStringValue()),
+                                  String.valueOf(a.getName()),
+                                  String.valueOf(invalidReason));
+                          invalidReason = new MessageBuilder(message);
 
                           localOp.setResultCode(
                               ResultCode.INVALID_ATTRIBUTE_SYNTAX);
@@ -5228,7 +5153,7 @@
 
 
               case WARN:
-                invalidReason = new StringBuilder();
+                invalidReason = new MessageBuilder();
                 for (List<Attribute> attrList : userAttributes.values())
                 {
                   for (Attribute a : attrList)
@@ -5241,13 +5166,11 @@
                         if (! syntax.valueIsAcceptable(v.getValue(),
                                                        invalidReason))
                         {
-                          logError(ErrorLogCategory.SCHEMA,
-                                   ErrorLogSeverity.SEVERE_WARNING,
-                                   MSGID_ADD_OP_INVALID_SYNTAX,
-                                   String.valueOf(entryDN),
-                                   String.valueOf(v.getStringValue()),
-                                   String.valueOf(a.getName()),
-                                   String.valueOf(invalidReason));
+                          logError(WARN_ADD_OP_INVALID_SYNTAX.
+                              get(String.valueOf(entryDN),
+                                  String.valueOf(v.getStringValue()),
+                                  String.valueOf(a.getName()),
+                                  String.valueOf(invalidReason)));
                         }
                       }
                     }
@@ -5266,13 +5189,11 @@
                         if (! syntax.valueIsAcceptable(v.getValue(),
                                                        invalidReason))
                         {
-                          logError(ErrorLogCategory.SCHEMA,
-                                   ErrorLogSeverity.SEVERE_WARNING,
-                                   MSGID_ADD_OP_INVALID_SYNTAX,
-                                   String.valueOf(entryDN),
-                                   String.valueOf(v.getStringValue()),
-                                   String.valueOf(a.getName()),
-                                   String.valueOf(invalidReason));
+                          logError(WARN_ADD_OP_INVALID_SYNTAX.
+                              get(String.valueOf(entryDN),
+                                  String.valueOf(v.getStringValue()),
+                                  String.valueOf(a.getName()),
+                                  String.valueOf(invalidReason)));
                         }
                       }
                     }
@@ -5290,9 +5211,9 @@
           {
             if (at.isObsolete())
             {
-              int    msgID   = MSGID_ADD_ATTR_IS_OBSOLETE;
-              String message = getMessage(msgID, String.valueOf(entryDN),
-                                          at.getNameOrOID());
+              Message message = WARN_ADD_ATTR_IS_OBSOLETE.get(
+                      String.valueOf(entryDN),
+                      at.getNameOrOID());
               localOp.appendErrorMessage(message);
               localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               break addProcessing;
@@ -5303,9 +5224,9 @@
           {
             if (at.isObsolete())
             {
-              int    msgID   = MSGID_ADD_ATTR_IS_OBSOLETE;
-              String message = getMessage(msgID, String.valueOf(entryDN),
-                                          at.getNameOrOID());
+              Message message = WARN_ADD_ATTR_IS_OBSOLETE.get(
+                      String.valueOf(entryDN),
+                      at.getNameOrOID());
               localOp.appendErrorMessage(message);
               localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               break addProcessing;
@@ -5316,9 +5237,9 @@
           {
             if (oc.isObsolete())
             {
-              int    msgID   = MSGID_ADD_OC_IS_OBSOLETE;
-              String message = getMessage(msgID, String.valueOf(entryDN),
-                                          oc.getNameOrOID());
+              Message message = WARN_ADD_OC_IS_OBSOLETE.get(
+                      String.valueOf(entryDN),
+                      oc.getNameOrOID());
               localOp.appendErrorMessage(message);
               localOp.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
               break addProcessing;
@@ -5342,8 +5263,8 @@
                     getAccessControlHandler().isAllowed(parentDN, localOp, c))
             {
               localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
-              int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS;
-              localOp.appendErrorMessage(getMessage(msgID, oid));
+              localOp.appendErrorMessage(
+                      ERR_CONTROL_INSUFFICIENT_ACCESS_RIGHTS.get(oid));
               skipPostOperation = true;
               break addProcessing;
             }
@@ -5370,7 +5291,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break addProcessing;
                 }
@@ -5385,9 +5306,9 @@
                 {
                   localOp.setResultCode(ResultCode.ASSERTION_FAILED);
 
-                  localOp.appendErrorMessage(getMessage(
-                                                MSGID_ADD_ASSERTION_FAILED,
-                                                String.valueOf(entryDN)));
+                  localOp.appendErrorMessage(
+                          ERR_ADD_ASSERTION_FAILED.get(
+                                  String.valueOf(entryDN)));
 
                   break addProcessing;
                 }
@@ -5401,10 +5322,10 @@
 
                 localOp.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-                int msgID = MSGID_ADD_CANNOT_PROCESS_ASSERTION_FILTER;
-                localOp.appendErrorMessage(getMessage(msgID,
-                                                      String.valueOf(entryDN),
-                                                      de.getErrorMessage()));
+                localOp.appendErrorMessage(
+                        ERR_ADD_CANNOT_PROCESS_ASSERTION_FILTER.get(
+                                String.valueOf(entryDN),
+                                de.getMessageObject()));
 
                 break addProcessing;
               }
@@ -5434,7 +5355,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break addProcessing;
                 }
@@ -5447,8 +5368,8 @@
               if (! clientConnection.hasPrivilege(Privilege.PROXIED_AUTH,
                   localOp))
               {
-                int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
                 localOp.setResultCode(ResultCode.AUTHORIZATION_DENIED);
                 break addProcessing;
               }
@@ -5473,7 +5394,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break addProcessing;
                 }
@@ -5493,7 +5414,7 @@
                 }
 
                 localOp.setResultCode(de.getResultCode());
-                localOp.appendErrorMessage(de.getErrorMessage());
+                localOp.appendErrorMessage(de.getMessageObject());
 
                 break addProcessing;
               }
@@ -5515,8 +5436,8 @@
               if (! clientConnection.hasPrivilege(Privilege.PROXIED_AUTH,
                   localOp))
               {
-                int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
                 localOp.setResultCode(ResultCode.AUTHORIZATION_DENIED);
                 break addProcessing;
               }
@@ -5541,7 +5462,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break addProcessing;
                 }
@@ -5561,7 +5482,7 @@
                 }
 
                 localOp.setResultCode(de.getResultCode());
-                localOp.appendErrorMessage(de.getErrorMessage());
+                localOp.appendErrorMessage(de.getMessageObject());
 
                 break addProcessing;
               }
@@ -5590,10 +5511,10 @@
                 localOp.setResultCode(
                     ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
 
-                int msgID = MSGID_ADD_UNSUPPORTED_CRITICAL_CONTROL;
-                localOp.appendErrorMessage(getMessage(msgID,
-                                              String.valueOf(entryDN),
-                                              oid));
+                localOp.appendErrorMessage(
+                        ERR_ADD_UNSUPPORTED_CRITICAL_CONTROL.get(
+                                String.valueOf(entryDN),
+                                oid));
 
                 break addProcessing;
               }
@@ -5615,9 +5536,8 @@
             .getAccessControlHandler().isAllowed(localOp) == false) {
           localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
 
-          int msgID = MSGID_ADD_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS;
-          localOp.appendErrorMessage(getMessage(msgID,
-                                                String.valueOf(entryDN)));
+          localOp.appendErrorMessage(ERR_ADD_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS
+                  .get(String.valueOf(entryDN)));
 
           skipPostOperation = true;
           break addProcessing;
@@ -5642,8 +5562,7 @@
             // and return.
             localOp.setResultCode(ResultCode.CANCELED);
 
-            int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-            localOp.appendErrorMessage(getMessage(msgID));
+            localOp.appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
             return;
           }
@@ -5673,8 +5592,8 @@
         if (backend == null)
         {
           localOp.setResultCode(ResultCode.NO_SUCH_OBJECT);
-          localOp.appendErrorMessage("No backend for entry " +
-              entryDN.toString());
+          localOp.appendErrorMessage(Message.raw("No backend for entry " +
+              entryDN.toString())); // TODO: i18n
         }
         else
         {
@@ -5686,8 +5605,8 @@
             {
               case DISABLED:
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-                localOp.appendErrorMessage(getMessage(MSGID_ADD_SERVER_READONLY,
-                                              String.valueOf(entryDN)));
+                localOp.appendErrorMessage(ERR_ADD_SERVER_READONLY.get(
+                        String.valueOf(entryDN)));
                 break addProcessing;
 
               case INTERNAL_ONLY:
@@ -5695,9 +5614,8 @@
                     localOp.isSynchronizationOperation()))
                 {
                   localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-                  localOp.appendErrorMessage(getMessage(
-                                                MSGID_ADD_SERVER_READONLY,
-                                                String.valueOf(entryDN)));
+                  localOp.appendErrorMessage(ERR_ADD_SERVER_READONLY.get(
+                          String.valueOf(entryDN)));
                   break addProcessing;
                 }
             }
@@ -5706,9 +5624,8 @@
             {
               case DISABLED:
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-                localOp.appendErrorMessage(getMessage(
-                                              MSGID_ADD_BACKEND_READONLY,
-                                              String.valueOf(entryDN)));
+                localOp.appendErrorMessage(ERR_ADD_BACKEND_READONLY.get(
+                        String.valueOf(entryDN)));
                 break addProcessing;
 
               case INTERNAL_ONLY:
@@ -5716,9 +5633,8 @@
                     localOp.isSynchronizationOperation()))
                 {
                   localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-                  localOp.appendErrorMessage(getMessage(
-                                                MSGID_ADD_BACKEND_READONLY,
-                                                String.valueOf(entryDN)));
+                  localOp.appendErrorMessage(ERR_ADD_BACKEND_READONLY.get(
+                          String.valueOf(entryDN)));
                   break addProcessing;
                 }
             }
@@ -5729,7 +5645,7 @@
           {
             if (noOp)
             {
-              localOp.appendErrorMessage(getMessage(MSGID_ADD_NOOP));
+              localOp.appendErrorMessage(INFO_ADD_NOOP.get());
 
               localOp.setResultCode(ResultCode.NO_OPERATION);
             }
@@ -5754,12 +5670,9 @@
                     TRACER.debugCaught(DebugLogLevel.ERROR, de);
                   }
 
-                  logError(ErrorLogCategory.SYNCHRONIZATION,
-                           ErrorLogSeverity.SEVERE_ERROR,
-                           MSGID_ADD_SYNCH_PREOP_FAILED,
-                           localOp.getConnectionID(),
-                           localOp.getOperationID(),
-                           getExceptionMessage(de));
+                  logError(ERR_ADD_SYNCH_PREOP_FAILED.
+                      get(localOp.getConnectionID(), localOp.getOperationID(),
+                          getExceptionMessage(de)));
 
                   localOp.setResponseData(de);
                   break addProcessing;
@@ -5834,7 +5747,7 @@
             }
 
             localOp.setResultCode(de.getResultCode());
-            localOp.appendErrorMessage(de.getErrorMessage());
+            localOp.appendErrorMessage(de.getMessageObject());
             localOp.setMatchedDN(de.getMatchedDN());
             localOp.setReferralURLs(de.getReferralURLs());
 
@@ -5852,7 +5765,7 @@
             localOp.setCancelResult(cancelResult);
             localOp.setResultCode(cancelResult.getResultCode());
 
-            String message = coe.getMessage();
+            Message message = coe.getMessageObject();
             if ((message != null) && (message.length() > 0))
             {
               localOp.appendErrorMessage(message);
@@ -5889,12 +5802,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            logError(ErrorLogCategory.SYNCHRONIZATION,
-                     ErrorLogSeverity.SEVERE_ERROR,
-                     MSGID_ADD_SYNCH_POSTOP_FAILED,
-                     localOp.getConnectionID(),
-                     localOp.getOperationID(),
-                     getExceptionMessage(de));
+            logError(ERR_ADD_SYNCH_POSTOP_FAILED.
+                get(localOp.getConnectionID(), localOp.getOperationID(),
+                    getExceptionMessage(de)));
 
             localOp.setResponseData(de);
             break;
@@ -5920,8 +5830,7 @@
         // return.
         localOp.setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-        localOp.appendErrorMessage(getMessage(msgID));
+        localOp.appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
         return;
       }
@@ -5947,10 +5856,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_ADD_ERROR_NOTIFYING_CHANGE_LISTENER;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_ADD_ERROR_NOTIFYING_CHANGE_LISTENER.get(
+              getExceptionMessage(e));
+          logError(message);
         }
       }
     }
@@ -6013,8 +5921,8 @@
       if (entryLock == null)
       {
         localOp.setResultCode(DirectoryServer.getServerErrorResultCode());
-        localOp.appendErrorMessage(getMessage(MSGID_DELETE_CANNOT_LOCK_ENTRY,
-                                      String.valueOf(entryDN)));
+        localOp.appendErrorMessage(ERR_DELETE_CANNOT_LOCK_ENTRY.get(
+                String.valueOf(entryDN)));
         break deleteProcessing;
       }
 
@@ -6029,8 +5937,8 @@
           if (entry == null)
           {
             localOp.setResultCode(ResultCode.NO_SUCH_OBJECT);
-            localOp.appendErrorMessage(getMessage(MSGID_DELETE_NO_SUCH_ENTRY,
-                                          String.valueOf(entryDN)));
+            localOp.appendErrorMessage(ERR_DELETE_NO_SUCH_ENTRY.get(
+                    String.valueOf(entryDN)));
 
             try
             {
@@ -6065,7 +5973,7 @@
           }
 
           localOp.setResultCode(de.getResultCode());
-          localOp.appendErrorMessage(de.getErrorMessage());
+          localOp.appendErrorMessage(de.getMessageObject());
           localOp.setMatchedDN(de.getMatchedDN());
           localOp.setReferralURLs(de.getReferralURLs());
           break deleteProcessing;
@@ -6093,12 +6001,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            logError(ErrorLogCategory.SYNCHRONIZATION,
-                     ErrorLogSeverity.SEVERE_ERROR,
-                     MSGID_DELETE_SYNCH_CONFLICT_RESOLUTION_FAILED,
-                     localOp.getConnectionID(),
-                     localOp.getOperationID(),
-                     getExceptionMessage(de));
+            logError(ERR_DELETE_SYNCH_CONFLICT_RESOLUTION_FAILED.
+                get(localOp.getConnectionID(), localOp.getOperationID(),
+                    getExceptionMessage(de)));
 
             localOp.setResponseData(de);
             break deleteProcessing;
@@ -6125,8 +6030,9 @@
                      getAccessControlHandler().isAllowed(entryDN, localOp, c))
             {
               localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
-              int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS;
-              localOp.appendErrorMessage(getMessage(msgID, oid));
+
+              localOp.appendErrorMessage(
+                      ERR_CONTROL_INSUFFICIENT_ACCESS_RIGHTS.get(oid));
               skipPostOperation = true;
               break deleteProcessing;
             }
@@ -6153,7 +6059,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break deleteProcessing;
                 }
@@ -6168,9 +6074,9 @@
                 {
                   localOp.setResultCode(ResultCode.ASSERTION_FAILED);
 
-                  localOp.appendErrorMessage(getMessage(
-                                                MSGID_DELETE_ASSERTION_FAILED,
-                                                String.valueOf(entryDN)));
+                  localOp.appendErrorMessage(
+                          ERR_DELETE_ASSERTION_FAILED.get(
+                                  String.valueOf(entryDN)));
 
                   break deleteProcessing;
                 }
@@ -6184,10 +6090,10 @@
 
                 localOp.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-                int msgID = MSGID_DELETE_CANNOT_PROCESS_ASSERTION_FILTER;
-                localOp.appendErrorMessage(getMessage(msgID,
-                                              String.valueOf(entryDN),
-                                              de.getErrorMessage()));
+                localOp.appendErrorMessage(
+                        ERR_DELETE_CANNOT_PROCESS_ASSERTION_FILTER.get(
+                                String.valueOf(entryDN),
+                                de.getMessageObject()));
 
                 break deleteProcessing;
               }
@@ -6217,7 +6123,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break deleteProcessing;
                 }
@@ -6230,8 +6136,9 @@
               if (! clientConnection.hasPrivilege(Privilege.PROXIED_AUTH,
                   localOp))
               {
-                int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-                localOp.appendErrorMessage(getMessage(msgID));
+
+                localOp.appendErrorMessage(
+                        ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
                 localOp.setResultCode(ResultCode.AUTHORIZATION_DENIED);
                 break deleteProcessing;
               }
@@ -6256,7 +6163,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break deleteProcessing;
                 }
@@ -6276,7 +6183,7 @@
                 }
 
                 localOp.setResultCode(de.getResultCode());
-                localOp.appendErrorMessage(de.getErrorMessage());
+                localOp.appendErrorMessage(de.getMessageObject());
 
                 break deleteProcessing;
               }
@@ -6298,8 +6205,8 @@
               if (! clientConnection.hasPrivilege(Privilege.PROXIED_AUTH,
                   localOp))
               {
-                int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
                 localOp.setResultCode(ResultCode.AUTHORIZATION_DENIED);
                 break deleteProcessing;
               }
@@ -6324,7 +6231,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break deleteProcessing;
                 }
@@ -6344,7 +6251,7 @@
                 }
 
                 localOp.setResultCode(de.getResultCode());
-                localOp.appendErrorMessage(de.getErrorMessage());
+                localOp.appendErrorMessage(de.getMessageObject());
 
                 break deleteProcessing;
               }
@@ -6369,10 +6276,10 @@
                 localOp.setResultCode(
                     ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
 
-                int msgID = MSGID_DELETE_UNSUPPORTED_CRITICAL_CONTROL;
-                localOp.appendErrorMessage(getMessage(msgID,
-                                              String.valueOf(entryDN),
-                                              oid));
+                localOp.appendErrorMessage(
+                        ERR_DELETE_UNSUPPORTED_CRITICAL_CONTROL.get(
+                                String.valueOf(entryDN),
+                                oid));
 
                 break deleteProcessing;
               }
@@ -6391,9 +6298,9 @@
             .getAccessControlHandler().isAllowed(localOp) == false) {
           localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
 
-          int msgID = MSGID_DELETE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS;
-          localOp.appendErrorMessage(getMessage(msgID,
-              String.valueOf(entryDN)));
+          localOp.appendErrorMessage(
+                  ERR_DELETE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS.get(
+                          String.valueOf(entryDN)));
 
           skipPostOperation = true;
           break deleteProcessing;
@@ -6418,8 +6325,7 @@
             // and result and return.
             localOp.setResultCode(ResultCode.CANCELED);
 
-            int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-            localOp.appendErrorMessage(getMessage(msgID));
+            localOp.appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
             localOp.setProcessingStopTime();
             return;
@@ -6448,8 +6354,8 @@
         if (backend == null)
         {
           localOp.setResultCode(ResultCode.NO_SUCH_OBJECT);
-          localOp.appendErrorMessage(getMessage(MSGID_DELETE_NO_SUCH_ENTRY,
-                                        String.valueOf(entryDN)));
+          localOp.appendErrorMessage(
+                  ERR_DELETE_NO_SUCH_ENTRY.get(String.valueOf(entryDN)));
           break deleteProcessing;
         }
 
@@ -6462,9 +6368,8 @@
           {
             case DISABLED:
               localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-              localOp.appendErrorMessage(getMessage(
-                                            MSGID_DELETE_SERVER_READONLY,
-                                            String.valueOf(entryDN)));
+              localOp.appendErrorMessage(
+                      ERR_DELETE_SERVER_READONLY.get(String.valueOf(entryDN)));
               break deleteProcessing;
 
             case INTERNAL_ONLY:
@@ -6472,9 +6377,9 @@
                   localOp.isSynchronizationOperation()))
               {
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-                localOp.appendErrorMessage(getMessage(
-                                              MSGID_DELETE_SERVER_READONLY,
-                                              String.valueOf(entryDN)));
+                localOp.appendErrorMessage(
+                        ERR_DELETE_SERVER_READONLY.get(
+                                String.valueOf(entryDN)));
                 break deleteProcessing;
               }
           }
@@ -6483,9 +6388,8 @@
           {
             case DISABLED:
               localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-              localOp.appendErrorMessage(getMessage(
-                                            MSGID_DELETE_BACKEND_READONLY,
-                                            String.valueOf(entryDN)));
+              localOp.appendErrorMessage(
+                      ERR_DELETE_BACKEND_READONLY.get(String.valueOf(entryDN)));
               break deleteProcessing;
 
             case INTERNAL_ONLY:
@@ -6493,9 +6397,9 @@
                   localOp.isSynchronizationOperation()))
               {
                 localOp.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-                localOp.appendErrorMessage(getMessage(
-                                              MSGID_DELETE_BACKEND_READONLY,
-                                              String.valueOf(entryDN)));
+                localOp.appendErrorMessage(
+                        ERR_DELETE_BACKEND_READONLY.get(
+                                String.valueOf(entryDN)));
                 break deleteProcessing;
               }
           }
@@ -6516,10 +6420,9 @@
             if (dn.isDescendantOf(entryDN))
             {
               localOp.setResultCode(ResultCode.NOT_ALLOWED_ON_NONLEAF);
-              localOp.appendErrorMessage(getMessage(
-                                            MSGID_DELETE_HAS_SUB_BACKEND,
-                                            String.valueOf(entryDN),
-                                            String.valueOf(dn)));
+              localOp.appendErrorMessage(ERR_DELETE_HAS_SUB_BACKEND.get(
+                      String.valueOf(entryDN),
+                      String.valueOf(dn)));
               break deleteProcessing;
             }
           }
@@ -6531,7 +6434,7 @@
         {
           if (noOp)
           {
-            localOp.appendErrorMessage(getMessage(MSGID_DELETE_NOOP));
+            localOp.appendErrorMessage(INFO_DELETE_NOOP.get());
 
             localOp.setResultCode(ResultCode.NO_OPERATION);
           }
@@ -6556,12 +6459,9 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                logError(ErrorLogCategory.SYNCHRONIZATION,
-                         ErrorLogSeverity.SEVERE_ERROR,
-                         MSGID_DELETE_SYNCH_PREOP_FAILED,
-                         localOp.getConnectionID(),
-                         localOp.getOperationID(),
-                         getExceptionMessage(de));
+                logError(ERR_DELETE_SYNCH_PREOP_FAILED.
+                    get(localOp.getConnectionID(), localOp.getOperationID(),
+                        getExceptionMessage(de)));
 
                 localOp.setResponseData(de);
                 break deleteProcessing;
@@ -6636,7 +6536,7 @@
           }
 
           localOp.setResultCode(de.getResultCode());
-          localOp.appendErrorMessage(de.getErrorMessage());
+          localOp.appendErrorMessage(de.getMessageObject());
           localOp.setMatchedDN(de.getMatchedDN());
           localOp.setReferralURLs(de.getReferralURLs());
 
@@ -6654,7 +6554,7 @@
           localOp.setCancelResult(cancelResult);
           localOp.setResultCode(cancelResult.getResultCode());
 
-          String message = coe.getMessage();
+          Message message = coe.getMessageObject();
           if ((message != null) && (message.length() > 0))
           {
             localOp.appendErrorMessage(message);
@@ -6681,12 +6581,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            logError(ErrorLogCategory.SYNCHRONIZATION,
-                     ErrorLogSeverity.SEVERE_ERROR,
-                     MSGID_DELETE_SYNCH_POSTOP_FAILED,
-                     localOp.getConnectionID(),
-                     localOp.getOperationID(),
-                     getExceptionMessage(de));
+            logError(ERR_DELETE_SYNCH_POSTOP_FAILED.
+                get(localOp.getConnectionID(), localOp.getOperationID(),
+                    getExceptionMessage(de)));
 
             localOp.setResponseData(de);
             break;
@@ -6709,8 +6606,7 @@
       {
         localOp.setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_POSTOP_DISCONNECT;
-        localOp.appendErrorMessage(getMessage(msgID));
+        localOp.appendErrorMessage(ERR_CANCELED_BY_POSTOP_DISCONNECT.get());
 
         localOp.setProcessingStopTime();
         return;
@@ -6737,10 +6633,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_DELETE_ERROR_NOTIFYING_CHANGE_LISTENER;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_DELETE_ERROR_NOTIFYING_CHANGE_LISTENER.get(
+              getExceptionMessage(e));
+          logError(message);
         }
       }
     }
@@ -6807,8 +6702,8 @@
       if (DirectoryServer.getConfigHandler().handlesEntry(entryDN) &&
           (! clientConnection.hasPrivilege(Privilege.CONFIG_READ, localOp)))
       {
-        int msgID = MSGID_COMPARE_CONFIG_INSUFFICIENT_PRIVILEGES;
-        localOp.appendErrorMessage(getMessage(msgID));
+        localOp.appendErrorMessage(
+                ERR_COMPARE_CONFIG_INSUFFICIENT_PRIVILEGES.get());
         localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
         skipPostOperation = true;
         break compareProcessing;
@@ -6835,8 +6730,8 @@
 
       if (readLock == null)
       {
-        int    msgID   = MSGID_COMPARE_CANNOT_LOCK_ENTRY;
-        String message = getMessage(msgID, String.valueOf(entryDN));
+        Message message = ERR_COMPARE_CANNOT_LOCK_ENTRY.get(
+                String.valueOf(entryDN));
 
         localOp.setResultCode(DirectoryServer.getServerErrorResultCode());
         localOp.appendErrorMessage(message);
@@ -6856,8 +6751,8 @@
           if (entry == null)
           {
             localOp.setResultCode(ResultCode.NO_SUCH_OBJECT);
-            localOp.appendErrorMessage(getMessage(MSGID_COMPARE_NO_SUCH_ENTRY,
-                                          String.valueOf(entryDN)));
+            localOp.appendErrorMessage(
+                    ERR_COMPARE_NO_SUCH_ENTRY.get(String.valueOf(entryDN)));
 
             // See if one of the entry's ancestors exists.
             DN parentDN = entryDN.getParentDNInSuffix();
@@ -6894,7 +6789,7 @@
           }
 
           localOp.setResultCode(de.getResultCode());
-          localOp.appendErrorMessage(de.getErrorMessage());
+          localOp.appendErrorMessage(de.getMessageObject());
           break compareProcessing;
         }
 
@@ -6913,8 +6808,9 @@
                     isAllowed(entryDN, localOp, c))
             {
               localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
-              int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS;
-              localOp.appendErrorMessage(getMessage(msgID, oid));
+
+              localOp.appendErrorMessage(
+                      ERR_CONTROL_INSUFFICIENT_ACCESS_RIGHTS.get(oid));
               skipPostOperation = true;
               break compareProcessing;
             }
@@ -6941,7 +6837,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break compareProcessing;
                 }
@@ -6957,8 +6853,8 @@
                   localOp.setResultCode(ResultCode.ASSERTION_FAILED);
 
                   localOp.appendErrorMessage(
-                      getMessage(MSGID_COMPARE_ASSERTION_FAILED,
-                      String.valueOf(entryDN)));
+                      ERR_COMPARE_ASSERTION_FAILED.get(
+                              String.valueOf(entryDN)));
 
                   break compareProcessing;
                 }
@@ -6972,10 +6868,10 @@
 
                 localOp.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-                int msgID = MSGID_COMPARE_CANNOT_PROCESS_ASSERTION_FILTER;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN),
-                    de.getErrorMessage()));
+                    ERR_COMPARE_CANNOT_PROCESS_ASSERTION_FILTER.get(
+                            String.valueOf(entryDN),
+                            de.getMessageObject()));
 
                 break compareProcessing;
               }
@@ -6987,8 +6883,8 @@
               if (! clientConnection.hasPrivilege(
                        Privilege.PROXIED_AUTH, localOp))
               {
-                int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
                 localOp.setResultCode(ResultCode.AUTHORIZATION_DENIED);
                 break compareProcessing;
               }
@@ -7013,7 +6909,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break compareProcessing;
                 }
@@ -7033,7 +6929,7 @@
                 }
 
                 localOp.setResultCode(de.getResultCode());
-                localOp.appendErrorMessage(de.getErrorMessage());
+                localOp.appendErrorMessage(de.getMessageObject());
 
                 break compareProcessing;
               }
@@ -7055,8 +6951,8 @@
               if (! clientConnection.hasPrivilege(
                        Privilege.PROXIED_AUTH, localOp))
               {
-                int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-                localOp.appendErrorMessage(getMessage(msgID));
+                localOp.appendErrorMessage(
+                        ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
                 localOp.setResultCode(ResultCode.AUTHORIZATION_DENIED);
                 break compareProcessing;
               }
@@ -7081,7 +6977,7 @@
                   }
 
                   localOp.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  localOp.appendErrorMessage(le.getMessage());
+                  localOp.appendErrorMessage(le.getMessageObject());
 
                   break compareProcessing;
                 }
@@ -7101,7 +6997,7 @@
                 }
 
                 localOp.setResultCode(de.getResultCode());
-                localOp.appendErrorMessage(de.getErrorMessage());
+                localOp.appendErrorMessage(de.getMessageObject());
 
                 break compareProcessing;
               }
@@ -7126,9 +7022,9 @@
                 localOp.setResultCode(
                     ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
 
-                int msgID = MSGID_COMPARE_UNSUPPORTED_CRITICAL_CONTROL;
                 localOp.appendErrorMessage(
-                    getMessage(msgID, String.valueOf(entryDN), oid));
+                    ERR_COMPARE_UNSUPPORTED_CRITICAL_CONTROL.get(
+                            String.valueOf(entryDN), oid));
 
                 break compareProcessing;
               }
@@ -7150,9 +7046,9 @@
             .getAccessControlHandler().isAllowed(localOp) == false) {
           localOp.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
 
-          int msgID = MSGID_COMPARE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS;
           localOp.appendErrorMessage(
-              getMessage(msgID, String.valueOf(entryDN)));
+              ERR_COMPARE_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS.get(
+                      String.valueOf(entryDN)));
 
           skipPostOperation = true;
           break compareProcessing;
@@ -7174,8 +7070,7 @@
           // result and return.
           localOp.setResultCode(ResultCode.CANCELED);
 
-          int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-          localOp.appendErrorMessage(getMessage(msgID));
+          localOp.appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
 
           return;
         }
@@ -7240,14 +7135,14 @@
           localOp.setResultCode(ResultCode.NO_SUCH_ATTRIBUTE);
           if (options == null)
           {
-            localOp.appendErrorMessage(getMessage(MSGID_COMPARE_OP_NO_SUCH_ATTR,
-                                          String.valueOf(entryDN), baseName));
+            localOp.appendErrorMessage(WARN_COMPARE_OP_NO_SUCH_ATTR.get(
+                    String.valueOf(entryDN), baseName));
           }
           else
           {
-            localOp.appendErrorMessage(getMessage(
-                                    MSGID_COMPARE_OP_NO_SUCH_ATTR_WITH_OPTIONS,
-                                    String.valueOf(entryDN), baseName));
+            localOp.appendErrorMessage(
+                    WARN_COMPARE_OP_NO_SUCH_ATTR_WITH_OPTIONS.get(
+                            String.valueOf(entryDN), baseName));
           }
         }
         else
@@ -7299,8 +7194,7 @@
       {
         localOp.setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_POSTOP_DISCONNECT;
-        localOp.appendErrorMessage(getMessage(msgID));
+        localOp.appendErrorMessage(ERR_CANCELED_BY_POSTOP_DISCONNECT.get());
 
         return;
       }
@@ -7378,8 +7272,7 @@
       if ((parentDN == null) || parentDN.isNullDN())
       {
         op.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-        op.appendErrorMessage(getMessage(MSGID_MODDN_NO_PARENT,
-                                      String.valueOf(entryDN)));
+        op.appendErrorMessage(ERR_MODDN_NO_PARENT.get(String.valueOf(entryDN)));
         break modifyDNProcessing;
       }
 
@@ -7391,9 +7284,8 @@
       if (currentBackend == null)
       {
         op.setResultCode(ResultCode.NO_SUCH_OBJECT);
-        op.appendErrorMessage(getMessage(
-                                      MSGID_MODDN_NO_BACKEND_FOR_CURRENT_ENTRY,
-                                      String.valueOf(entryDN)));
+        op.appendErrorMessage(ERR_MODDN_NO_BACKEND_FOR_CURRENT_ENTRY.get(
+                String.valueOf(entryDN)));
         break modifyDNProcessing;
       }
 
@@ -7401,17 +7293,17 @@
       if (newBackend == null)
       {
         op.setResultCode(ResultCode.NO_SUCH_OBJECT);
-        op.appendErrorMessage(getMessage(MSGID_MODDN_NO_BACKEND_FOR_NEW_ENTRY,
-                                      String.valueOf(entryDN),
+        op.appendErrorMessage(ERR_MODDN_NO_BACKEND_FOR_NEW_ENTRY.get(
+                String.valueOf(entryDN),
                                       String.valueOf(newDN)));
         break modifyDNProcessing;
       }
       else if (! currentBackend.equals(newBackend))
       {
         op.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-        op.appendErrorMessage(getMessage(MSGID_MODDN_DIFFERENT_BACKENDS,
-                                      String.valueOf(entryDN),
-                                      String.valueOf(newDN)));
+        op.appendErrorMessage(ERR_MODDN_DIFFERENT_BACKENDS.get(
+                String.valueOf(entryDN),
+                String.valueOf(newDN)));
         break modifyDNProcessing;
       }
 
@@ -7437,8 +7329,8 @@
       if (currentLock == null)
       {
         op.setResultCode(DirectoryServer.getServerErrorResultCode());
-        op.appendErrorMessage(getMessage(MSGID_MODDN_CANNOT_LOCK_CURRENT_DN,
-                                      String.valueOf(entryDN)));
+        op.appendErrorMessage(ERR_MODDN_CANNOT_LOCK_CURRENT_DN.get(
+                String.valueOf(entryDN)));
 
         skipPostOperation = true;
         break modifyDNProcessing;
@@ -7471,10 +7363,10 @@
         }
 
         op.setResultCode(DirectoryServer.getServerErrorResultCode());
-        op.appendErrorMessage(getMessage(MSGID_MODDN_EXCEPTION_LOCKING_NEW_DN,
-                                      String.valueOf(entryDN),
-                                      String.valueOf(newDN),
-                                      getExceptionMessage(e)));
+        op.appendErrorMessage(ERR_MODDN_EXCEPTION_LOCKING_NEW_DN.get(
+                String.valueOf(entryDN),
+                String.valueOf(newDN),
+                getExceptionMessage(e)));
 
         skipPostOperation = true;
         break modifyDNProcessing;
@@ -7485,9 +7377,9 @@
         LockManager.unlock(entryDN, currentLock);
 
         op.setResultCode(DirectoryServer.getServerErrorResultCode());
-        op.appendErrorMessage(getMessage(MSGID_MODDN_CANNOT_LOCK_NEW_DN,
-                                      String.valueOf(entryDN),
-                                      String.valueOf(newDN)));
+        op.appendErrorMessage(ERR_MODDN_CANNOT_LOCK_NEW_DN.get(
+                String.valueOf(entryDN),
+                String.valueOf(newDN)));
 
         skipPostOperation = true;
         break modifyDNProcessing;
@@ -7518,7 +7410,7 @@
           }
 
           op.setResultCode(de.getResultCode());
-          op.appendErrorMessage(de.getErrorMessage());
+          op.appendErrorMessage(de.getMessageObject());
           op.setMatchedDN(de.getMatchedDN());
           op.setReferralURLs(de.getReferralURLs());
 
@@ -7552,8 +7444,8 @@
           }
 
           op.setResultCode(ResultCode.NO_SUCH_OBJECT);
-          op.appendErrorMessage(getMessage(MSGID_MODDN_NO_CURRENT_ENTRY,
-                                        String.valueOf(entryDN)));
+          op.appendErrorMessage(ERR_MODDN_NO_CURRENT_ENTRY.get(
+                  String.valueOf(entryDN)));
 
           break modifyDNProcessing;
         }
@@ -7580,11 +7472,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            logError(ErrorLogCategory.SYNCHRONIZATION,
-                     ErrorLogSeverity.SEVERE_ERROR,
-                     MSGID_MODDN_SYNCH_CONFLICT_RESOLUTION_FAILED,
-                     op.getConnectionID(), op.getOperationID(),
-                     getExceptionMessage(de));
+            logError(ERR_MODDN_SYNCH_CONFLICT_RESOLUTION_FAILED.
+                get(op.getConnectionID(), op.getOperationID(),
+                    getExceptionMessage(de)));
 
             op.setResponseData(de);
             break modifyDNProcessing;
@@ -7609,8 +7499,9 @@
                      getAccessControlHandler().isAllowed(entryDN,  op, c))
             {
               op.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
-              int msgID = MSGID_CONTROL_INSUFFICIENT_ACCESS_RIGHTS;
-              op.appendErrorMessage(getMessage(msgID, oid));
+
+              op.appendErrorMessage(
+                      ERR_CONTROL_INSUFFICIENT_ACCESS_RIGHTS.get(oid));
               skipPostOperation = true;
               break modifyDNProcessing;
             }
@@ -7637,7 +7528,7 @@
                   }
 
                   op.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  op.appendErrorMessage(le.getMessage());
+                  op.appendErrorMessage(le.getMessageObject());
 
                   break modifyDNProcessing;
                 }
@@ -7652,8 +7543,8 @@
                 {
                   op.setResultCode(ResultCode.ASSERTION_FAILED);
 
-                  op.appendErrorMessage(getMessage(MSGID_MODDN_ASSERTION_FAILED,
-                                                String.valueOf(entryDN)));
+                  op.appendErrorMessage(ERR_MODDN_ASSERTION_FAILED.get(
+                          String.valueOf(entryDN)));
 
                   break modifyDNProcessing;
                 }
@@ -7667,9 +7558,10 @@
 
                 op.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-                int msgID = MSGID_MODDN_CANNOT_PROCESS_ASSERTION_FILTER;
-                op.appendErrorMessage(getMessage(msgID, String.valueOf(entryDN),
-                                              de.getErrorMessage()));
+                op.appendErrorMessage(
+                        ERR_MODDN_CANNOT_PROCESS_ASSERTION_FILTER.get(
+                                String.valueOf(entryDN),
+                                de.getMessageObject()));
 
                 break modifyDNProcessing;
               }
@@ -7699,7 +7591,7 @@
                   }
 
                   op.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  op.appendErrorMessage(le.getMessage());
+                  op.appendErrorMessage(le.getMessageObject());
 
                   break modifyDNProcessing;
                 }
@@ -7726,7 +7618,7 @@
                   }
 
                   op.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  op.appendErrorMessage(le.getMessage());
+                  op.appendErrorMessage(le.getMessageObject());
 
                   break modifyDNProcessing;
                 }
@@ -7738,8 +7630,9 @@
               // be able to use this control.
               if (! clientConnection.hasPrivilege(Privilege.PROXIED_AUTH, op))
               {
-                int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-                op.appendErrorMessage(getMessage(msgID));
+
+                op.appendErrorMessage(
+                        ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
                 op.setResultCode(ResultCode.AUTHORIZATION_DENIED);
                 break modifyDNProcessing;
               }
@@ -7764,7 +7657,7 @@
                   }
 
                   op.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  op.appendErrorMessage(le.getMessage());
+                  op.appendErrorMessage(le.getMessageObject());
 
                   break modifyDNProcessing;
                 }
@@ -7784,7 +7677,7 @@
                 }
 
                 op.setResultCode(de.getResultCode());
-                op.appendErrorMessage(de.getErrorMessage());
+                op.appendErrorMessage(de.getMessageObject());
 
                 break modifyDNProcessing;
               }
@@ -7805,8 +7698,9 @@
               // be able to use this control.
               if (! clientConnection.hasPrivilege(Privilege.PROXIED_AUTH, op))
               {
-                int msgID = MSGID_PROXYAUTH_INSUFFICIENT_PRIVILEGES;
-                op.appendErrorMessage(getMessage(msgID));
+
+                op.appendErrorMessage(
+                        ERR_PROXYAUTH_INSUFFICIENT_PRIVILEGES.get());
                 op.setResultCode(ResultCode.AUTHORIZATION_DENIED);
                 break modifyDNProcessing;
               }
@@ -7831,7 +7725,7 @@
                   }
 
                   op.setResultCode(ResultCode.valueOf(le.getResultCode()));
-                  op.appendErrorMessage(le.getMessage());
+                  op.appendErrorMessage(le.getMessageObject());
 
                   break modifyDNProcessing;
                 }
@@ -7851,7 +7745,7 @@
                 }
 
                 op.setResultCode(de.getResultCode());
-                op.appendErrorMessage(de.getErrorMessage());
+                op.appendErrorMessage(de.getMessageObject());
 
                 break modifyDNProcessing;
               }
@@ -7875,9 +7769,11 @@
               {
                 op.setResultCode(ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
 
-                int msgID = MSGID_MODDN_UNSUPPORTED_CRITICAL_CONTROL;
-                op.appendErrorMessage(getMessage(msgID, String.valueOf(entryDN),
-                                              oid));
+
+                op.appendErrorMessage(
+                        ERR_MODDN_UNSUPPORTED_CRITICAL_CONTROL.get(
+                                String.valueOf(entryDN),
+                                oid));
 
                 break modifyDNProcessing;
               }
@@ -7900,8 +7796,8 @@
             .getAccessControlHandler().isAllowed(op) == false) {
           op.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
 
-          int msgID = MSGID_MODDN_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS;
-          op.appendErrorMessage(getMessage(msgID, String.valueOf(entryDN)));
+          op.appendErrorMessage(ERR_MODDN_AUTHZ_INSUFFICIENT_ACCESS_RIGHTS.get(
+                  String.valueOf(entryDN)));
 
           skipPostOperation = true;
           break modifyDNProcessing;
@@ -7942,9 +7838,8 @@
               {
                 op.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                int msgID = MSGID_MODDN_OLD_RDN_ATTR_IS_NO_USER_MOD;
-                op.appendErrorMessage(getMessage(msgID, String.valueOf(entryDN),
-                                              a.getName()));
+                op.appendErrorMessage(ERR_MODDN_OLD_RDN_ATTR_IS_NO_USER_MOD.get(
+                        String.valueOf(entryDN), a.getName()));
                 break modifyDNProcessing;
               }
             }
@@ -7988,9 +7883,8 @@
               {
                 op.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-                int msgID = MSGID_MODDN_NEW_RDN_ATTR_IS_NO_USER_MOD;
-                op.appendErrorMessage(getMessage(msgID, String.valueOf(entryDN),
-                                              a.getName()));
+                op.appendErrorMessage(ERR_MODDN_NEW_RDN_ATTR_IS_NO_USER_MOD.get(
+                        String.valueOf(entryDN), a.getName()));
                 break modifyDNProcessing;
               }
             }
@@ -8007,14 +7901,14 @@
         if ((DirectoryServer.checkSchema()) &&
             (!op.isSynchronizationOperation()) )
         {
-          StringBuilder invalidReason = new StringBuilder();
+          MessageBuilder invalidReason = new MessageBuilder();
           if (! newEntry.conformsToSchema(null, false, true, true,
                                           invalidReason))
           {
             op.setResultCode(ResultCode.OBJECTCLASS_VIOLATION);
-            op.appendErrorMessage(getMessage(MSGID_MODDN_VIOLATES_SCHEMA,
-                                          String.valueOf(entryDN),
-                                          String.valueOf(invalidReason)));
+            op.appendErrorMessage(ERR_MODDN_VIOLATES_SCHEMA.get(
+                    String.valueOf(entryDN),
+                    String.valueOf(invalidReason)));
             break modifyDNProcessing;
           }
 
@@ -8024,10 +7918,9 @@
             if (at.isObsolete())
             {
               op.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
-              op.appendErrorMessage(getMessage(
-                                            MSGID_MODDN_NEWRDN_ATTR_IS_OBSOLETE,
-                                            String.valueOf(entryDN),
-                                            at.getNameOrOID()));
+              op.appendErrorMessage(ERR_MODDN_NEWRDN_ATTR_IS_OBSOLETE.get(
+                      String.valueOf(entryDN),
+                      at.getNameOrOID()));
               break modifyDNProcessing;
             }
           }
@@ -8059,8 +7952,8 @@
             // and result and return.
             op.setResultCode(ResultCode.CANCELED);
 
-            int msgID = MSGID_CANCELED_BY_PREOP_DISCONNECT;
-            op.appendErrorMessage(getMessage(msgID));
+
+            op.appendErrorMessage(ERR_CANCELED_BY_PREOP_DISCONNECT.get());
             return;
           }
           else if (preOpResult.sendResponseImmediately())
@@ -8109,10 +8002,8 @@
                 {
                   op.setResultCode(ResultCode.NO_SUCH_ATTRIBUTE);
 
-                  int msgID = MSGID_MODDN_PREOP_INCREMENT_NO_ATTR;
-                  op.appendErrorMessage(getMessage(msgID,
-                                                String.valueOf(entryDN),
-                                                a.getName()));
+                  op.appendErrorMessage(ERR_MODDN_PREOP_INCREMENT_NO_ATTR.get(
+                          String.valueOf(entryDN), a.getName()));
 
                   break modifyDNProcessing;
                 }
@@ -8120,10 +8011,10 @@
                 {
                   op.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-                  int msgID = MSGID_MODDN_PREOP_INCREMENT_MULTIPLE_VALUES;
-                  op.appendErrorMessage(getMessage(msgID,
-                                                String.valueOf(entryDN),
-                                                a.getName()));
+                  op.appendErrorMessage(
+                          ERR_MODDN_PREOP_INCREMENT_MULTIPLE_VALUES.get(
+                                  String.valueOf(entryDN),
+                                  a.getName()));
 
                   break modifyDNProcessing;
                 }
@@ -8134,10 +8025,9 @@
                 {
                   op.setResultCode(ResultCode.NO_SUCH_ATTRIBUTE);
 
-                  int msgID = MSGID_MODDN_PREOP_INCREMENT_NO_ATTR;
-                  op.appendErrorMessage(getMessage(msgID,
-                                                String.valueOf(entryDN),
-                                                a.getName()));
+                  op.appendErrorMessage(ERR_MODDN_PREOP_INCREMENT_NO_ATTR.get(
+                          String.valueOf(entryDN),
+                          a.getName()));
 
                   break modifyDNProcessing;
                 }
@@ -8145,10 +8035,10 @@
                 {
                   op.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-                  int msgID = MSGID_MODDN_PREOP_INCREMENT_MULTIPLE_VALUES;
-                  op.appendErrorMessage(getMessage(msgID,
-                                                String.valueOf(entryDN),
-                                                a.getName()));
+                  op.appendErrorMessage(
+                          ERR_MODDN_PREOP_INCREMENT_MULTIPLE_VALUES.get(
+                                  String.valueOf(entryDN),
+                                  a.getName()));
 
                   break modifyDNProcessing;
                 }
@@ -8168,10 +8058,10 @@
 
                   op.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-                  int msgID = MSGID_MODDN_PREOP_INCREMENT_VALUE_NOT_INTEGER;
-                  op.appendErrorMessage(getMessage(msgID,
-                                                String.valueOf(entryDN),
-                                                a.getName()));
+                  op.appendErrorMessage(
+                          ERR_MODDN_PREOP_INCREMENT_VALUE_NOT_INTEGER.get(
+                                  String.valueOf(entryDN),
+                                  a.getName()));
 
                   break modifyDNProcessing;
                 }
@@ -8181,10 +8071,10 @@
                 {
                   op.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-                  int msgID = MSGID_MODDN_PREOP_INCREMENT_NO_AMOUNT;
-                  op.appendErrorMessage(getMessage(msgID,
-                                                String.valueOf(entryDN),
-                                                a.getName()));
+                  op.appendErrorMessage(
+                          ERR_MODDN_PREOP_INCREMENT_NO_AMOUNT.get(
+                                  String.valueOf(entryDN),
+                                  a.getName()));
 
                   break modifyDNProcessing;
                 }
@@ -8192,10 +8082,10 @@
                 {
                   op.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-                  int msgID = MSGID_MODDN_PREOP_INCREMENT_MULTIPLE_AMOUNTS;
-                  op.appendErrorMessage(getMessage(msgID,
-                                                String.valueOf(entryDN),
-                                                a.getName()));
+                  op.appendErrorMessage(
+                          ERR_MODDN_PREOP_INCREMENT_MULTIPLE_AMOUNTS.get(
+                                  String.valueOf(entryDN),
+                                  a.getName()));
 
                   break modifyDNProcessing;
                 }
@@ -8215,10 +8105,10 @@
 
                   op.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
 
-                  int msgID = MSGID_MODDN_PREOP_INCREMENT_AMOUNT_NOT_INTEGER;
-                  op.appendErrorMessage(getMessage(msgID,
-                                                String.valueOf(entryDN),
-                                                a.getName()));
+                  op.appendErrorMessage(
+                          ERR_MODDN_PREOP_INCREMENT_AMOUNT_NOT_INTEGER.get(
+                                  String.valueOf(entryDN),
+                                  a.getName()));
 
                   break modifyDNProcessing;
                 }
@@ -8245,16 +8135,15 @@
           // schema.
           if (DirectoryServer.checkSchema())
           {
-            StringBuilder invalidReason = new StringBuilder();
+            MessageBuilder invalidReason = new MessageBuilder();
             if (! newEntry.conformsToSchema(null, false, true, true,
                                             invalidReason))
             {
               op.setResultCode(ResultCode.OBJECTCLASS_VIOLATION);
 
-              op.appendErrorMessage(getMessage(
-                                            MSGID_MODDN_PREOP_VIOLATES_SCHEMA,
-                                            String.valueOf(entryDN),
-                                            String.valueOf(invalidReason)));
+              op.appendErrorMessage(ERR_MODDN_PREOP_VIOLATES_SCHEMA.get(
+                      String.valueOf(entryDN),
+                      String.valueOf(invalidReason)));
               break modifyDNProcessing;
             }
           }
@@ -8281,8 +8170,8 @@
             {
               case DISABLED:
                 op.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-                op.appendErrorMessage(getMessage(MSGID_MODDN_SERVER_READONLY,
-                                              String.valueOf(entryDN)));
+                op.appendErrorMessage(ERR_MODDN_SERVER_READONLY.get(
+                        String.valueOf(entryDN)));
                 break modifyDNProcessing;
 
               case INTERNAL_ONLY:
@@ -8290,8 +8179,8 @@
                     op.isSynchronizationOperation()))
                 {
                   op.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-                  op.appendErrorMessage(getMessage(MSGID_MODDN_SERVER_READONLY,
-                                                String.valueOf(entryDN)));
+                  op.appendErrorMessage(ERR_MODDN_SERVER_READONLY.get(
+                          String.valueOf(entryDN)));
                   break modifyDNProcessing;
                 }
             }
@@ -8300,8 +8189,8 @@
             {
               case DISABLED:
                 op.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-                op.appendErrorMessage(getMessage(MSGID_MODDN_BACKEND_READONLY,
-                                              String.valueOf(entryDN)));
+                op.appendErrorMessage(ERR_MODDN_BACKEND_READONLY.get(
+                        String.valueOf(entryDN)));
                 break modifyDNProcessing;
 
               case INTERNAL_ONLY:
@@ -8309,8 +8198,8 @@
                     op.isSynchronizationOperation()))
                 {
                   op.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-                  op.appendErrorMessage(getMessage(MSGID_MODDN_BACKEND_READONLY,
-                                                String.valueOf(entryDN)));
+                  op.appendErrorMessage(ERR_MODDN_BACKEND_READONLY.get(
+                          String.valueOf(entryDN)));
                   break modifyDNProcessing;
                 }
             }
@@ -8319,7 +8208,7 @@
 
           if (noOp)
           {
-            op.appendErrorMessage(getMessage(MSGID_MODDN_NOOP));
+            op.appendErrorMessage(INFO_MODDN_NOOP.get());
 
             op.setResultCode(ResultCode.NO_OPERATION);
           }
@@ -8344,10 +8233,9 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                logError(ErrorLogCategory.SYNCHRONIZATION,
-                         ErrorLogSeverity.SEVERE_ERROR,
-                         MSGID_MODDN_SYNCH_PREOP_FAILED, op.getConnectionID(),
-                         op.getOperationID(), getExceptionMessage(de));
+                logError(ERR_MODDN_SYNCH_PREOP_FAILED.
+                    get(op.getConnectionID(), op.getOperationID(),
+                        getExceptionMessage(de)));
 
                 op.setResponseData(de);
                 break modifyDNProcessing;
@@ -8473,7 +8361,7 @@
           }
 
           op.setResultCode(de.getResultCode());
-          op.appendErrorMessage(de.getErrorMessage());
+          op.appendErrorMessage(de.getMessageObject());
           op.setMatchedDN(de.getMatchedDN());
           op.setReferralURLs(de.getReferralURLs());
 
@@ -8491,7 +8379,7 @@
           op.setCancelResult(cancelResult);
           op.setResultCode(cancelResult.getResultCode());
 
-          String message = coe.getMessage();
+          Message message = coe.getMessageObject();
           if ((message != null) && (message.length() > 0))
           {
             op.appendErrorMessage(message);
@@ -8519,10 +8407,9 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            logError(ErrorLogCategory.SYNCHRONIZATION,
-                     ErrorLogSeverity.SEVERE_ERROR,
-                     MSGID_MODDN_SYNCH_POSTOP_FAILED, op.getConnectionID(),
-                     op.getOperationID(), getExceptionMessage(de));
+            logError(ERR_MODDN_SYNCH_POSTOP_FAILED.
+                get(op.getConnectionID(), op.getOperationID(),
+                    getExceptionMessage(de)));
 
             op.setResponseData(de);
             break;
@@ -8545,8 +8432,8 @@
       {
         op.setResultCode(ResultCode.CANCELED);
 
-        int msgID = MSGID_CANCELED_BY_POSTOP_DISCONNECT;
-        op.appendErrorMessage(getMessage(msgID));
+
+        op.appendErrorMessage(ERR_CANCELED_BY_POSTOP_DISCONNECT.get());
         return;
       }
     }
@@ -8572,10 +8459,9 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          int    msgID   = MSGID_MODDN_ERROR_NOTIFYING_CHANGE_LISTENER;
-          String message = getMessage(msgID, getExceptionMessage(e));
-          logError(ErrorLogCategory.CORE_SERVER, ErrorLogSeverity.SEVERE_ERROR,
-                   message, msgID);
+          Message message = ERR_MODDN_ERROR_NOTIFYING_CHANGE_LISTENER.get(
+              getExceptionMessage(e));
+          logError(message);
         }
       }
     }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/CategoryTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/CategoryTest.java
new file mode 100644
index 0000000..6bc6b50
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/CategoryTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ */
+ 
+package org.opends.messages;
+
+import static org.testng.Assert.*;
+import org.testng.annotations.*;
+
+/**
+ * Category Tester.
+ *
+ */
+public class CategoryTest
+{
+
+    @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/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java
new file mode 100644
index 0000000..b3d0136
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ */
+ 
+package org.opends.messages;
+
+import static org.testng.Assert.*;
+import org.testng.annotations.*;
+
+/**
+ * MessageDescriptorRegistry Tester.
+ *
+ */
+public class MessageDescriptorRegistryTest
+{
+
+  @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) {
+    assertEquals(md,
+            MessageDescriptorRegistry.getMessageDescriptor(md.getId()));
+  }
+
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/SeverityTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/SeverityTest.java
new file mode 100644
index 0000000..c6a1c00
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/messages/SeverityTest.java
@@ -0,0 +1,162 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2006-2007 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
+{
+
+    @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 }
+      };
+    }
+
+    @Test(dataProvider = "severities")
+    public void testGetPropertyKeyFormSet(Severity severity)
+    {
+      Set s = Severity.getPropertyKeyFormSet();
+      assertTrue(s.contains(severity));
+    }
+
+    @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 }
+      };
+    }
+
+    @Test(dataProvider = "severities and masks")
+    public void testParseMask(Severity s, int mask) {
+      assertEquals(Severity.parseMask(mask), s);
+    }
+
+    @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 strings")
+    public void testParseString(Severity sev, String s) {
+      assertEquals(Severity.parseString(s), sev);
+    }
+
+    @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(Severity.parseMessageId(md.getId()), md.getSeverity());
+    }
+
+    @Test(dataProvider = "severities and masks")
+    public void testGetMask(Severity s, int mask) {
+      assertEquals(s.getMask(), mask);
+    }
+
+    @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" }
+      };
+    }
+
+    @Test(dataProvider = "severities and md names")
+    public void testMessageDesciptorName(Severity s, String name) {
+      assertEquals(s.messageDesciptorName(), name);
+    }
+
+    @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 pk names")
+    public void testPropertyKeyFormName(Severity sev, String s) {
+      assertEquals(sev.propertyKeyFormName(), s);
+    }
+
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java
index b5dfc96..e67c436 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java
@@ -28,6 +28,7 @@
 
 import org.testng.annotations.AfterSuite;
 import org.testng.annotations.BeforeSuite;
+import org.opends.messages.Message;
 
 /**
  * This class defines a base test case that should be subclassed by all
@@ -44,7 +45,7 @@
 
   @AfterSuite
   public final void shutdownServer() {
-    TestCaseUtils.shutdownServer("The current test suite has finished.");
+    TestCaseUtils.shutdownServer(Message.raw("The current test suite has finished."));
     TestCaseUtils.unsupressOutput();
   }
 }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
index 4b4fd6c..cd9807f 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
@@ -84,6 +84,7 @@
 import static org.opends.server.util.StaticUtils.*;
 import org.opends.server.tasks.TaskUtils;
 import org.opends.server.api.WorkQueue;
+import org.opends.messages.Message;
 
 /**
  * This class defines some utility functions which can be used by test
@@ -396,6 +397,15 @@
    */
   public static void shutdownServer(String reason)
   {
+    shutdownServer(Message.raw(reason));
+  }
+
+  /**
+   * Shut down the server, if it has been started.
+   * @param reason The reason for the shutdown.
+   */
+  public static void shutdownServer(Message reason)
+  {
     if (SERVER_STARTED)
     {
       InvocationCounterPlugin.resetShutdownCalled();
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/CliTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/CliTest.java
index 7df824d..8f5712e 100755
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/CliTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/CliTest.java
@@ -33,13 +33,9 @@
 import org.opends.admin.ads.ADSContext.ServerGroupProperty;
 import org.opends.admin.ads.ADSContextException.ErrorType;
 import org.opends.server.util.args.ArgumentException;
-import org.opends.server.util.args.SubCommandArgumentParser;
 
-import com.sleepycat.je.dbi.GetMode;
-
-import static org.opends.server.messages.AdminMessages.*;
-import static org.opends.server.messages.MessageHandler.*;
-import static org.opends.server.admin.client.cli.DsFrameworkCliReturnCode.*;
+import static org.opends.messages.AdminMessages.*;
+import org.opends.messages.Message;
 
 
 /**
@@ -62,23 +58,21 @@
   @Test
   public void testReturnCodeMessageId()
   {
-    String invalidMsgId;
+    String invalidMsg;
     String msg;
-    int messageID;
+    Message message;
     for (DsFrameworkCliReturnCode returnCode : DsFrameworkCliReturnCode
         .values())
     {
-      if ((messageID = returnCode.getMessageId()) == MSGID_ADMIN_NO_MESSAGE)
+      if ((message = returnCode.getMessage()).equals(ERR_ADMIN_NO_MESSAGE.get()))
       {
         continue;
       }
-      invalidMsgId = "Unknown message for message ID " + messageID;
-      // get the associated Msg
-      msg = getMessage(messageID);
-      if (msg.equals(invalidMsgId))
+      invalidMsg = "Unknown message for message ID " + message;
+      if (message.toString().equals(invalidMsg))
       {
         assertTrue(false, "ReturnCode \"" + returnCode
-            + "\" is registered with a wrong  message Id (" + messageID + ")");
+            + "\" is registered with a wrong  message Id (" + message + ")");
       }
     }
   }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java
index d0667ce..ea90fae 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java
@@ -34,6 +34,7 @@
 import javax.naming.ldap.LdapName;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.admin.AdminTestCase;
 import org.opends.server.admin.LDAPProfile;
 import org.opends.server.admin.MockLDAPProfile;
@@ -109,7 +110,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationAddAcceptable(TestChildCfg configuration,
-        List<String> unacceptableReasons) {
+        List<Message> unacceptableReasons) {
       child = configuration;
       return true;
     }
@@ -169,7 +170,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationChangeAcceptable(TestChildCfg configuration,
-        List<String> unacceptableReasons) {
+        List<Message> unacceptableReasons) {
       child = configuration;
       return true;
     }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java
index f9e4c6a..4a199ac 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java
@@ -33,6 +33,7 @@
 import java.util.List;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.admin.AdminTestCase;
 import org.opends.server.admin.LDAPProfile;
 import org.opends.server.admin.MockLDAPProfile;
@@ -77,7 +78,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationAddAcceptable(TestParentCfg configuration,
-        List<String> unacceptableReasons) {
+        List<Message> unacceptableReasons) {
       // No implementation required.
       return false;
     }
@@ -104,7 +105,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationDeleteAcceptable(TestParentCfg configuration,
-        List<String> unacceptableReasons) {
+        List<Message> unacceptableReasons) {
       // No implementation required.
       return false;
     }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java
index 7d531b0..85d5e66 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java
@@ -34,6 +34,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.api.AlertGenerator;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.extensions.DummyAlertHandler;
@@ -51,12 +52,6 @@
        extends APITestCase
        implements AlertGenerator
 {
-  /**
-   * The alert ID to use for these tests.
-   */
-  public static final int ALERT_ID = 12345;
-
-
 
   /**
    * The alert type to use for these tests.
@@ -76,7 +71,7 @@
   /**
    * The alert message to use for these tests.
    */
-  public static final String ALERT_MESSAGE = "This is the alert message";
+  public static final Message ALERT_MESSAGE = Message.raw("This is the alert message");
 
 
 
@@ -105,7 +100,7 @@
   {
     int count = DummyAlertHandler.getAlertCount();
 
-    DirectoryServer.sendAlertNotification(this, ALERT_TYPE, ALERT_ID,
+    DirectoryServer.sendAlertNotification(this, ALERT_TYPE,
                                           ALERT_MESSAGE);
     assertEquals(DummyAlertHandler.getAlertCount(), (count+1));
   }
@@ -127,7 +122,7 @@
     {
       int count = DummyAlertHandler.getAlertCount();
 
-      DirectoryServer.sendAlertNotification(this, ALERT_TYPE, ALERT_ID,
+      DirectoryServer.sendAlertNotification(this, ALERT_TYPE,
                                             ALERT_MESSAGE);
       assertEquals(DummyAlertHandler.getAlertCount(), (count+1));
     }
@@ -158,7 +153,7 @@
     {
       int count = DummyAlertHandler.getAlertCount();
 
-      DirectoryServer.sendAlertNotification(this, ALERT_TYPE, ALERT_ID,
+      DirectoryServer.sendAlertNotification(this, ALERT_TYPE,
                                             ALERT_MESSAGE);
       assertEquals(DummyAlertHandler.getAlertCount(), count);
     }
@@ -189,7 +184,7 @@
     {
       int count = DummyAlertHandler.getAlertCount();
 
-      DirectoryServer.sendAlertNotification(this, ALERT_TYPE, ALERT_ID,
+      DirectoryServer.sendAlertNotification(this, ALERT_TYPE,
                                             ALERT_MESSAGE);
       assertEquals(DummyAlertHandler.getAlertCount(), count);
     }
@@ -220,7 +215,7 @@
     {
       int count = DummyAlertHandler.getAlertCount();
 
-      DirectoryServer.sendAlertNotification(this, ALERT_TYPE, ALERT_ID,
+      DirectoryServer.sendAlertNotification(this, ALERT_TYPE,
                                             ALERT_MESSAGE);
       assertEquals(DummyAlertHandler.getAlertCount(), (count+1));
     }
@@ -252,7 +247,7 @@
     {
       int count = DummyAlertHandler.getAlertCount();
 
-      DirectoryServer.sendAlertNotification(this, ALERT_TYPE, ALERT_ID,
+      DirectoryServer.sendAlertNotification(this, ALERT_TYPE,
                                             ALERT_MESSAGE);
       assertEquals(DummyAlertHandler.getAlertCount(), count);
     }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/ConfigChangeListenerTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/ConfigChangeListenerTestCase.java
index ad7d046..e2d260a 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/ConfigChangeListenerTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/ConfigChangeListenerTestCase.java
@@ -36,6 +36,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.config.ConfigAttribute;
 import org.opends.server.config.ConfigEntry;
 import org.opends.server.config.JMXMBean;
@@ -144,7 +145,7 @@
     ConfigEntry e = DirectoryServer.getConfigEntry(dn);
     assertNotNull(e);
 
-    assertTrue(l.configChangeIsAcceptable(e, new StringBuilder()));
+    assertTrue(l.configChangeIsAcceptable(e, new MessageBuilder()));
   }
 }
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java
index 6724a4f..86afa40 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java
@@ -33,7 +33,6 @@
 import java.util.LinkedList;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.Set;
 
 import org.testng.annotations.Test;
 import org.testng.annotations.BeforeClass;
@@ -43,6 +42,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.operation.*;
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 
 import static org.testng.Assert.*;
 
@@ -51,7 +51,7 @@
 /**
  * A set of generic test cases for the Directory Server plugin API.
  */
-public class DirectoryServerPluginTestCase
+  public class DirectoryServerPluginTestCase
        extends PluginAPITestCase
 {
   @BeforeClass
@@ -195,7 +195,7 @@
     sigList = new LinkedList<String>();
     sigList.add("doShutdown");
     sigList.add("void");
-    sigList.add("java.lang.String");
+    sigList.add("org.opends.messages.Message");
     expectedPublicMethods.add(sigList);
 
     sigList = new LinkedList<String>();
@@ -209,8 +209,7 @@
     sigList.add("org.opends.server.api.plugin.PostDisconnectPluginResult");
     sigList.add("org.opends.server.api.ClientConnection");
     sigList.add("org.opends.server.types.DisconnectReason");
-    sigList.add("int");
-    sigList.add("java.lang.String");
+    sigList.add("org.opends.messages.Message");
     expectedPublicMethods.add(sigList);
 
     sigList = new LinkedList<String>();
@@ -746,7 +745,7 @@
   @Test(expectedExceptions = { UnsupportedOperationException.class })
   public void testDoShutdown()
   {
-    new NullPlugin().doShutdown("testDoShutdown");
+    new NullPlugin().doShutdown(Message.raw("testDoShutdown"));
   }
 
 
@@ -771,7 +770,7 @@
   public void testDoPostDisconnect()
   {
     new NullPlugin().doPostDisconnect(null, DisconnectReason.CLOSED_BY_PLUGIN,
-                                      -1, null);
+            null);
   }
 
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/StartupPluginResultTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/StartupPluginResultTestCase.java
index 42a3153..bd1fa73 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/StartupPluginResultTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/StartupPluginResultTestCase.java
@@ -32,7 +32,7 @@
 import org.testng.annotations.DataProvider;
 
 import static org.testng.Assert.*;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -52,22 +52,22 @@
     return new Object[][]
     {
       new Object[] { StartupPluginResult.SUCCESS },
-      new Object[] { new StartupPluginResult(false, false, 0, null) },
-      new Object[] { new StartupPluginResult(true, false, 0, null) },
-      new Object[] { new StartupPluginResult(false, true, 0, null) },
-      new Object[] { new StartupPluginResult(true, true, 0, null) },
-      new Object[] { new StartupPluginResult(false, false, 1, null) },
-      new Object[] { new StartupPluginResult(true, false, 1, null) },
-      new Object[] { new StartupPluginResult(false, true, 1, null) },
-      new Object[] { new StartupPluginResult(true, true, 1, null) },
-      new Object[] { new StartupPluginResult(false, false, 0, "foo") },
-      new Object[] { new StartupPluginResult(true, false, 0, "foo") },
-      new Object[] { new StartupPluginResult(false, true, 0, "foo") },
-      new Object[] { new StartupPluginResult(true, true, 0, "foo") },
-      new Object[] { new StartupPluginResult(false, false, 1, "foo") },
-      new Object[] { new StartupPluginResult(true, false, 1, "foo") },
-      new Object[] { new StartupPluginResult(false, true, 1, "foo") },
-      new Object[] { new StartupPluginResult(true, true, 1, "foo") },
+      new Object[] { new StartupPluginResult(false, false, null) },
+      new Object[] { new StartupPluginResult(true, false, null) },
+      new Object[] { new StartupPluginResult(false, true, null) },
+      new Object[] { new StartupPluginResult(true, true, null) },
+      new Object[] { new StartupPluginResult(false, false, null) },
+      new Object[] { new StartupPluginResult(true, false, null) },
+      new Object[] { new StartupPluginResult(false, true, null) },
+      new Object[] { new StartupPluginResult(true, true, null) },
+      new Object[] { new StartupPluginResult(false, false, Message.raw("foo")) },
+      new Object[] { new StartupPluginResult(true, false, Message.raw("foo")) },
+      new Object[] { new StartupPluginResult(false, true, Message.raw("foo")) },
+      new Object[] { new StartupPluginResult(true, true, Message.raw("foo")) },
+      new Object[] { new StartupPluginResult(false, false, Message.raw("foo")) },
+      new Object[] { new StartupPluginResult(true, false, Message.raw("foo")) },
+      new Object[] { new StartupPluginResult(false, true, Message.raw("foo")) },
+      new Object[] { new StartupPluginResult(true, true, Message.raw("foo")) },
     };
   }
 
@@ -107,7 +107,7 @@
   @Test(dataProvider = "instances")
   public void testGetErrorID(StartupPluginResult result)
   {
-    result.getErrorID();
+    result.getErrorMessage();
   }
 
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTests.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTests.java
index 4be19c9..41184ad 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTests.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTests.java
@@ -28,6 +28,7 @@
 
 import org.opends.server.DirectoryServerTestCase;
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.LDIFExportConfig;
 import org.opends.server.tools.*;
@@ -1732,7 +1733,7 @@
       ByteArrayOutputStream updatedEntriesStream = new ByteArrayOutputStream();
       LDIFWriter ldifWriter = new LDIFWriter(new LDIFExportConfig(updatedEntriesStream));
 
-      List<String> errors = new ArrayList<String>();
+      List<Message> errors = new ArrayList<Message>();
       LDIFModify.modifyLDIF(baseReader, changesReader, ldifWriter, errors);
       Assert.assertTrue(errors.isEmpty(), "Unexpected errors applying LDIF changes: " + errors);
       ldifWriter.flush();
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/JebTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/JebTestCase.java
index c80e9de..7c1323d 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/JebTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/JebTestCase.java
@@ -43,6 +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.opends.server.types.Entry;
 import org.opends.server.util.LDIFReader;
 import org.testng.annotations.Test;
@@ -73,7 +74,7 @@
         File.separator + "resource"+File.separator+"MakeLDIF";
         TemplateFile templateFile = 
             new TemplateFile(makeLDIFPath, new Random());
-        ArrayList<String> warnings = new ArrayList<String>();
+        ArrayList<Message> warnings = new ArrayList<Message>();
         templateFile.parse(template, warnings);
         MakeLDIFInputStream ldifEntryStream = 
             new MakeLDIFInputStream(templateFile);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/AbandonOperationTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/AbandonOperationTestCase.java
index 539591b..22b657f 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/AbandonOperationTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/AbandonOperationTestCase.java
@@ -39,6 +39,7 @@
 import java.util.LinkedHashSet;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.plugins.DelayPreOpPlugin;
 import org.opends.server.plugins.DisconnectClientPlugin;
 import org.opends.server.plugins.InvocationCounterPlugin;
@@ -139,7 +140,8 @@
          new AbandonOperationBasis(conn, conn.nextOperationID(),
                   conn.nextMessageID(), new ArrayList<Control>(), 1);
 
-    CancelRequest cancelRequest = new CancelRequest(true, "Test Cancel");
+    CancelRequest cancelRequest = new CancelRequest(true,
+            Message.raw("Test Cancel"));
     assertEquals(abandonOperation.cancel(cancelRequest),
                  CancelResult.CANNOT_CANCEL);
   }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java
index dbf3c97..020c098 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java
@@ -39,6 +39,7 @@
 import org.testng.annotations.AfterMethod;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.api.Backend;
 import org.opends.server.plugins.DisconnectClientPlugin;
 import org.opends.server.plugins.ShortCircuitPlugin;
@@ -1990,7 +1991,7 @@
                           entry.getOperationalAttributes());
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    "testCancelBeforeStartup");
+                                                    Message.raw("testCancelBeforeStartup"));
     addOperation.setCancelRequest(cancelRequest);
     addOperation.run();
     assertEquals(addOperation.getResultCode(), ResultCode.CANCELED);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java
index 4d9037b..8243d4c 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java
@@ -37,6 +37,7 @@
 import org.testng.annotations.AfterMethod;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.api.Backend;
 import org.opends.server.plugins.DisconnectClientPlugin;
 import org.opends.server.plugins.ShortCircuitPlugin;
@@ -812,7 +813,7 @@
                              null, new ASN1OctetString("o=test"));
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    "testCancelBeforeStartup");
+                                                    Message.raw("testCancelBeforeStartup"));
     deleteOperation.setCancelRequest(cancelRequest);
     deleteOperation.run();
     assertEquals(deleteOperation.getResultCode(), ResultCode.CANCELED);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java
index 5fb6a1c..0f82ade 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java
@@ -39,6 +39,7 @@
 import org.testng.annotations.AfterMethod;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.api.Backend;
 import org.opends.server.plugins.DisconnectClientPlugin;
 import org.opends.server.plugins.ShortCircuitPlugin;
@@ -4082,7 +4083,7 @@
                              null, new ASN1OctetString(baseDN), mods);
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    "testCancelBeforeStartup");
+                                                    Message.raw("testCancelBeforeStartup"));
     modifyOperation.setCancelRequest(cancelRequest);
     modifyOperation.run();
     assertEquals(modifyOperation.getResultCode(), ResultCode.CANCELED);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/NetworkGroupTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/NetworkGroupTest.java
index 2e0155b..6c0c6bd 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/NetworkGroupTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/NetworkGroupTest.java
@@ -27,7 +27,7 @@
 package org.opends.server.core;
 
 
-import static org.opends.server.messages.CoreMessages.*;
+import static org.opends.messages.CoreMessages.*;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
@@ -302,8 +302,8 @@
     catch (DirectoryException de)
     {
       exceptionRaised = true;
-      assertEquals(
-          de.getMessageID(), MSGID_REGISTER_NETWORK_GROUP_ALREADY_EXISTS);
+      assertEquals(de.getMessageObject().getDescriptor(),
+                   ERR_REGISTER_NETWORK_GROUP_ALREADY_EXISTS);
     }
     assertEquals(exceptionRaised, true);
 
@@ -327,7 +327,8 @@
     {
       exceptionRaised = true;
       assertEquals(
-          de.getMessageID(), MSGID_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS);
+          de.getMessageObject().getDescriptor(),
+              ERR_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS);
     }
     assertEquals(exceptionRaised, true);
     
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/OperationTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/OperationTestCase.java
index 5c8fab6..63e1507 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/OperationTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/OperationTestCase.java
@@ -34,13 +34,11 @@
 import org.testng.annotations.BeforeMethod;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.server.util.StaticUtils;
 import org.opends.server.api.ConnectionHandler;
 import org.opends.server.protocols.ldap.LDAPConnectionHandler;
 import org.opends.server.protocols.ldap.LDAPStatistics;
 import org.opends.server.types.Control;
 import org.opends.server.types.Operation;
-import org.opends.server.types.ResultCode;
 
 import static org.testng.Assert.*;
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/UnbindOperationTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/UnbindOperationTestCase.java
index 936774b..164e8d9 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/UnbindOperationTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/UnbindOperationTestCase.java
@@ -33,6 +33,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.plugins.InvocationCounterPlugin;
 import org.opends.server.protocols.internal.InternalClientConnection;
 import org.opends.server.types.CancelRequest;
@@ -125,7 +126,7 @@
          InternalClientConnection.getRootConnection();
 
     CancelRequest cancelRequest =
-         new CancelRequest(false, "Test Unbind Cancel");
+         new CancelRequest(false, Message.raw("Test Unbind Cancel"));
 
     UnbindOperationBasis unbindOperation =
          new UnbindOperationBasis(conn, conn.nextOperationID(),
@@ -146,7 +147,7 @@
          InternalClientConnection.getRootConnection();
 
     CancelRequest cancelRequest =
-         new CancelRequest(false, "Test Unbind Cancel");
+         new CancelRequest(false, Message.raw("Test Unbind Cancel"));
 
     UnbindOperationBasis unbindOperation =
          new UnbindOperationBasis(conn, conn.nextOperationID(),
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java
index 310c374..708c6dc 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java
@@ -27,7 +27,8 @@
 package org.opends.server.core;
 
 
-import static org.opends.server.messages.CoreMessages.*;
+import static org.opends.messages.CoreMessages.*;
+import org.opends.messages.MessageBuilder;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertNotNull;
@@ -932,10 +933,10 @@
   {
     // Check the function that elaborates the global result code
     WorkflowResultCode globalResultCode = new WorkflowResultCode (
-        initialResultCode, new StringBuilder("")
+        initialResultCode, new MessageBuilder("")
         );
     globalResultCode.elaborateGlobalResultCode (
-        receivedResultCode, new StringBuilder("")
+        receivedResultCode, new MessageBuilder("")
         );
     assertEquals (globalResultCode.resultCode(), expectedGlobalResultCode);
   }
@@ -972,7 +973,7 @@
     catch (DirectoryException e)
     {
       exceptionRaised = true;
-      assertEquals(e.getMessageID(), MSGID_REGISTER_WORKFLOW_ALREADY_EXISTS);
+      assertEquals(e.getMessageObject().getDescriptor(), ERR_REGISTER_WORKFLOW_ALREADY_EXISTS);
     }
     assertEquals(exceptionRaised, true);
   }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java
index 1503e26..08fe7e5 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java
@@ -37,6 +37,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.admin.std.meta.AttributeValuePasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.AttributeValuePasswordValidatorCfg;
 import org.opends.server.admin.server.AdminTestCaseUtils;
@@ -419,7 +420,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertEquals(validator.passwordIsAcceptable(pwOS,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CharacterSetPasswordValidatorTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CharacterSetPasswordValidatorTestCase.java
index 38ce1a3..094188a 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CharacterSetPasswordValidatorTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CharacterSetPasswordValidatorTestCase.java
@@ -37,6 +37,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.admin.std.meta.CharacterSetPasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.CharacterSetPasswordValidatorCfg;
 import org.opends.server.admin.server.AdminTestCaseUtils;
@@ -535,7 +536,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertEquals(validator.passwordIsAcceptable(pwOS,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java
index cf50914..3d6c2b7 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java
@@ -37,6 +37,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.admin.std.meta.DictionaryPasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.DictionaryPasswordValidatorCfg;
 import org.opends.server.admin.server.AdminTestCaseUtils;
@@ -500,7 +501,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertEquals(validator.passwordIsAcceptable(pwOS,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/DummyAlertHandler.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/DummyAlertHandler.java
index c3e0763..bed7990 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/DummyAlertHandler.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/DummyAlertHandler.java
@@ -39,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;
 
 
 /**
@@ -95,7 +95,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAcceptable(AlertHandlerCfg configuration,
-                                           List<String> unacceptableReasons)
+                                           List<Message> unacceptableReasons)
   {
     return true;
   }
@@ -116,7 +116,7 @@
    * {@inheritDoc}
    */
   public void sendAlertNotification(AlertGenerator generator, String alertType,
-                                    int alertID, String alertMessage)
+                                    Message alertMessage)
   {
     alertCount.incrementAndGet();
   }
@@ -139,7 +139,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(AlertHandlerCfg configuration,
-                      List<String> unacceptableReasons)
+                      List<Message> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java
index 99de3d8..678fb51 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java
@@ -35,6 +35,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.api.AccountStatusNotificationHandler;
 import org.opends.server.admin.server.AdminTestCaseUtils;
 import org.opends.server.admin.std.meta.
@@ -227,8 +228,8 @@
     assertNotNull(handler);
 
     DN userDN = DN.decode("uid=test.user,o=test");
-    handler.handleStatusNotification(notificationType, userDN, 1,
-                                     "Test Notification");
+    handler.handleStatusNotification(notificationType, userDN,
+            Message.raw("Test Notification"));
   }
 }
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/JMXAlertHandlerTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/JMXAlertHandlerTestCase.java
index a26601e..bee765c 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/JMXAlertHandlerTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/JMXAlertHandlerTestCase.java
@@ -40,6 +40,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.api.AlertHandler;
 import org.opends.server.core.DirectoryServer;
 
@@ -123,8 +124,8 @@
   {
     TestAlertGenerator generator = new TestAlertGenerator();
 
-    handler.sendAlertNotification(generator, generator.getAlertType(), 1,
-                                  "This is a test alert message.");
+    handler.sendAlertNotification(generator, generator.getAlertType(),
+            Message.raw("This is a test alert message."));
   }
 
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java
index 7e16c57..8d644cb 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java
@@ -37,6 +37,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.admin.std.meta.
             LengthBasedPasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.
@@ -379,7 +380,7 @@
                                conn.nextMessageID(), new ArrayList<Control>(),
                                DN.decode("cn=uid=test.user,o=test"), mods);
 
-      StringBuilder invalidReason = new StringBuilder();
+      MessageBuilder invalidReason = new MessageBuilder();
       assertTrue(validator.passwordIsAcceptable(password,
                                                 new HashSet<ByteString>(0),
                                                 op, userEntry, invalidReason));
@@ -452,7 +453,7 @@
                                conn.nextMessageID(), new ArrayList<Control>(),
                                DN.decode("cn=uid=test.user,o=test"), mods);
 
-      StringBuilder invalidReason = new StringBuilder();
+      MessageBuilder invalidReason = new MessageBuilder();
       assertEquals((buffer.length() >= 10),
                    validator.passwordIsAcceptable(password,
                                                   new HashSet<ByteString>(0),
@@ -527,7 +528,7 @@
                                conn.nextMessageID(), new ArrayList<Control>(),
                                DN.decode("cn=uid=test.user,o=test"), mods);
 
-      StringBuilder invalidReason = new StringBuilder();
+      MessageBuilder invalidReason = new MessageBuilder();
       assertEquals((buffer.length() <= 10),
                    validator.passwordIsAcceptable(password,
                                                   new HashSet<ByteString>(0),
@@ -602,7 +603,7 @@
                                conn.nextMessageID(), new ArrayList<Control>(),
                                DN.decode("cn=uid=test.user,o=test"), mods);
 
-      StringBuilder invalidReason = new StringBuilder();
+      MessageBuilder invalidReason = new MessageBuilder();
       assertEquals(((buffer.length() >= 6) && (buffer.length() <= 10)),
                    validator.passwordIsAcceptable(password,
                                                   new HashSet<ByteString>(0),
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java
index 4a288d2..93b67c9 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java
@@ -34,6 +34,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.admin.server.AdminTestCaseUtils;
 import org.opends.server.admin.std.meta.
             RegularExpressionIdentityMapperCfgDefn;
@@ -121,7 +122,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertFalse(mapper.isConfigurationAcceptable(configuration,
-                                                 new LinkedList<String>()));
+                                                 new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
   }
 
@@ -159,7 +160,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertFalse(mapper.isConfigurationAcceptable(configuration,
-                                                 new LinkedList<String>()));
+                                                 new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
   }
 
@@ -198,7 +199,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<String>()));
+                                                new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -263,7 +264,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<String>()));
+                                                new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -328,7 +329,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<String>()));
+                                                new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -393,7 +394,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<String>()));
+                                                new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -458,7 +459,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<String>()));
+                                                new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -522,7 +523,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<String>()));
+                                                new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -584,7 +585,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<String>()));
+                                                new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -647,7 +648,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<String>()));
+                                                new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -711,7 +712,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<String>()));
+                                                new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -790,7 +791,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<String>()));
+                                                new LinkedList<Message>()));
     mapper.initializeIdentityMapper(configuration);
 
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java
index df4b95d..1f45b94 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java
@@ -37,6 +37,8 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.Message;
 import org.opends.server.admin.std.meta.
             RepeatedCharactersPasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.
@@ -320,7 +322,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -389,7 +391,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
                                new HashSet<ByteString>(0), modifyOperation,
                                userEntry, invalidReason));
@@ -457,7 +459,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -526,7 +528,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
                                new HashSet<ByteString>(0), modifyOperation,
                                userEntry, invalidReason));
@@ -593,7 +595,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -661,7 +663,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -684,7 +686,7 @@
               RepeatedCharactersPasswordValidatorCfgDefn.getInstance(),
               updatedValidatorEntry);
 
-    ArrayList<String> unacceptableReasons = new ArrayList<String>();
+    ArrayList<Message> unacceptableReasons = new ArrayList<Message>();
     assertTrue(validator.isConfigurationChangeAcceptable(updatedConfiguration,
                                                          unacceptableReasons),
                String.valueOf(unacceptableReasons));
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java
index 35f5c45..4448da3 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java
@@ -35,6 +35,7 @@
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.ModifyOperationBasis;
 import org.opends.server.protocols.asn1.ASN1OctetString;
@@ -296,7 +297,7 @@
                                conn.nextMessageID(), new ArrayList<Control>(),
                                DN.decode("cn=uid=test.user,o=test"), mods);
 
-      StringBuilder invalidReason = new StringBuilder();
+      MessageBuilder invalidReason = new MessageBuilder();
       assertTrue(validator.passwordIsAcceptable(password,
                                                 new HashSet<ByteString>(0),
                                                 op, userEntry, invalidReason));
@@ -372,7 +373,7 @@
                                conn.nextMessageID(), new ArrayList<Control>(),
                                DN.decode("cn=uid=test.user,o=test"), mods);
 
-      StringBuilder invalidReason = new StringBuilder();
+      MessageBuilder invalidReason = new MessageBuilder();
       assertEquals((buffer.length() >= 6),
                    validator.passwordIsAcceptable(password,
                                                   currentPassword,
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestPasswordValidator.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestPasswordValidator.java
index f7e5d05..67fef94 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestPasswordValidator.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestPasswordValidator.java
@@ -37,7 +37,8 @@
 import org.opends.server.types.Entry;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.Operation;
-
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.Message;
 
 
 /**
@@ -102,8 +103,8 @@
     }
     else
     {
-      throw new InitializationException(1,
-           "Cannot configure more than one TestPasswordValidator instance");
+      throw new InitializationException(Message.raw(
+           "Cannot configure more than one TestPasswordValidator instance"));
     }
 
     lastNewPassword      = null;
@@ -123,7 +124,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      StringBuilder invalidReason)
+                                      MessageBuilder invalidReason)
   {
     lastNewPassword      = newPassword;
     lastCurrentPasswords = currentPasswords;
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java
index 7339811..f5472e2 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java
@@ -37,6 +37,8 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.Message;
 import org.opends.server.admin.std.meta.
             UniqueCharactersPasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.
@@ -320,7 +322,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -389,7 +391,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
                                new HashSet<ByteString>(0), modifyOperation,
                                userEntry, invalidReason));
@@ -457,7 +459,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -526,7 +528,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
                                new HashSet<ByteString>(0), modifyOperation,
                                userEntry, invalidReason));
@@ -593,7 +595,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -661,7 +663,7 @@
                              new ArrayList<Control>(),
                              DN.decode("uid=test.user,o=test"), mods);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -684,7 +686,7 @@
               UniqueCharactersPasswordValidatorCfgDefn.getInstance(),
               updatedValidatorEntry);
 
-    ArrayList<String> unacceptableReasons = new ArrayList<String>();
+    ArrayList<Message> unacceptableReasons = new ArrayList<Message>();
     assertTrue(validator.isConfigurationChangeAcceptable(updatedConfiguration,
                                                          unacceptableReasons),
                String.valueOf(unacceptableReasons));
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/CategoriesSpanFilesTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/CategoriesSpanFilesTestCase.java
deleted file mode 100644
index 92636f4..0000000
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/CategoriesSpanFilesTestCase.java
+++ /dev/null
@@ -1,167 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
- */
-
-package org.opends.server.messages;
-
-import org.testng.annotations.Test;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
-import org.opends.server.TestCaseUtils;
-
-import java.util.LinkedList;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.HashSet;
-import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-
-/**
- * This class provides a mechanism for determining whether messages
- * in a given category are defined in a single class file.
- */
-public class CategoriesSpanFilesTestCase
-     extends MessagesTestCase
-{
-  /**
-   * Look in the build filesystem for files in the org.opends.server.messages
-   * package.  Dynamically load all of those classes and use reflection to look
-   * at all fields in those classes.  Make sure that messages in a given
-   * category are defined in a single class file.
-   *
-   * @throws  Exception  If an unexpected problem occurs.
-   */
-  @Test()
-  public void testCategories()
-         throws Exception
-  {
-    // Construct a list of classes in the messages package.
-    String s = File.separator;
-    String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT);
-    String messageClassesDir = buildRoot + s + "build" + s + "classes" + s +
-                               "org" + s + "opends" + s + "server" + s +
-                               "messages";
-    File f = new File(messageClassesDir);
-    LinkedList<String> classNames = new LinkedList<String>();
-    for (String filename : f.list())
-    {
-      if (! filename.endsWith(".class"))
-      {
-        continue;
-      }
-
-      classNames.add("org.opends.server.messages." +
-                     filename.substring(0, filename.length()-6));
-    }
-
-    assertFalse(classNames.isEmpty());
-
-    // Construct a map from category mask value to user-friendly string.
-    HashMap<Integer,String> categoryMap = new HashMap<Integer, String>(100);
-    Class categoryDefnClass =
-         Class.forName("org.opends.server.messages.MessageHandler");
-    for (Field field : categoryDefnClass.getDeclaredFields())
-    {
-      if (field.getType().getName().equals("int"))
-      {
-        if (Modifier.isStatic(field.getModifiers()) &&
-            Modifier.isFinal(field.getModifiers()) &&
-            field.getName().startsWith("CATEGORY_MASK_"))
-        {
-          int    category = field.getInt(null);
-          categoryMap.put(category, field.getName());
-        }
-      }
-    }
-
-    // Construct a map from category mask value to the list of classes
-    // containing messages of that category.
-    HashMap<Integer,ArrayList<String>> classesByCategory =
-         new HashMap<Integer, ArrayList<String>>(100);
-    for (String className : classNames)
-    {
-      Class c = Class.forName(className);
-      HashSet<Integer> categories = new HashSet<Integer>(1);
-      for (Field field : c.getDeclaredFields())
-      {
-        if (field.getType().getName().equals("int"))
-        {
-          if (Modifier.isStatic(field.getModifiers()) &&
-              Modifier.isFinal(field.getModifiers()) &&
-              field.getName().startsWith("MSGID_"))
-          {
-            int    fieldValue = field.getInt(null);
-            int    category = fieldValue & 0xFFF00000;
-            categories.add(category);
-          }
-        }
-      }
-      for (Integer category : categories)
-      {
-        ArrayList<String> classes = classesByCategory.get(category);
-        if (classes == null)
-        {
-          classes = new ArrayList<String>(1);
-          classes.add(className);
-          classesByCategory.put(category, classes);
-        }
-        else
-        {
-          classes.add(className);
-        }
-      }
-    }
-
-    // Construct an error message for any categories having multiple classes.
-    StringBuilder buffer = new StringBuilder();
-    for (Map.Entry<Integer,ArrayList<String>> entry :
-         classesByCategory.entrySet())
-    {
-      ArrayList<String> classes = entry.getValue();
-      if (classes.size() > 1)
-      {
-        buffer.append("Messages of category ");
-        buffer.append(categoryMap.get(entry.getKey()));
-        buffer.append(" are defined in multiple classes: ");
-        Iterator<String> iterator = classes.iterator();
-        buffer.append(iterator.next());
-
-        while (iterator.hasNext())
-        {
-          buffer.append(", ");
-          buffer.append(iterator.next());
-        }
-
-        buffer.append(". ");
-      }
-    }
-
-    assertTrue(buffer.length() == 0, buffer.toString());
-  }
-}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/DuplicateMessageIDsTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/DuplicateMessageIDsTestCase.java
deleted file mode 100644
index 8e50bed..0000000
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/DuplicateMessageIDsTestCase.java
+++ /dev/null
@@ -1,135 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-import org.testng.annotations.Test;
-
-import org.opends.server.TestCaseUtils;
-
-import static org.testng.Assert.*;
-
-
-
-/**
- * This class provides a mechanism for determining whether any of the messages
- * files have duplicate message IDs.
- */
-public class DuplicateMessageIDsTestCase
-       extends MessagesTestCase
-{
-  /**
-   * Look in the build filesystem for files in the org.opends.server.messages
-   * package.  Dynamically load all of those classes and use reflection to look
-   * at all fields in those classes.  Make sure that there are no duplicate
-   * values between any of those constant fields.
-   *
-   * @throws  Exception  If an unexpected problem occurs.
-   */
-  @Test()
-  public void TestDuplicateMessageIDs()
-         throws Exception
-  {
-    String s = File.separator;
-    String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT);
-    String messageClassesDir = buildRoot + s + "build" + s + "classes" + s +
-                               "org" + s + "opends" + s + "server" + s +
-                               "messages";
-    File f = new File(messageClassesDir);
-    LinkedList<String> classNames = new LinkedList<String>();
-    for (String filename : f.list())
-    {
-      if (! filename.endsWith(".class"))
-      {
-        continue;
-      }
-
-      classNames.add("org.opends.server.messages." +
-                     filename.substring(0, filename.length()-6));
-    }
-
-    assertFalse(classNames.isEmpty());
-
-    HashMap<Integer,String> messageIDs = new HashMap<Integer,String>();
-    LinkedList<String> conflictingMessageIDs = new LinkedList<String>();
-    for (String className : classNames)
-    {
-      Class c = Class.forName(className);
-      for (Field field : c.getDeclaredFields())
-      {
-        if (field.getType().getName().equals("int"))
-        {
-          if (Modifier.isStatic(field.getModifiers()) &&
-              Modifier.isFinal(field.getModifiers()) &&
-              field.getName().startsWith("MSGID_"))
-          {
-            String fieldName  = className + "." + field.getName();
-            int    fieldValue = field.getInt(null);
-
-            String conflictingField = messageIDs.get(fieldValue);
-            if (conflictingField == null)
-            {
-              messageIDs.put(fieldValue, fieldName);
-            }
-            else
-            {
-              conflictingMessageIDs.add(conflictingField + "==" +
-                                        fieldName + "==" + fieldValue);
-            }
-          }
-        }
-      }
-    }
-
-    assertFalse(messageIDs.isEmpty());
-    if (! conflictingMessageIDs.isEmpty())
-    {
-      StringBuilder buffer = new StringBuilder();
-
-      Iterator<String> iterator = conflictingMessageIDs.iterator();
-      buffer.append("Conflicting message IDs detected:  ");
-      buffer.append(iterator.next());
-
-      while (iterator.hasNext())
-      {
-        buffer.append(", ");
-        buffer.append(iterator.next());
-      }
-
-      assertTrue(conflictingMessageIDs.isEmpty(), buffer.toString());
-    }
-  }
-}
-
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/MessageTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/MessageTest.java
new file mode 100644
index 0000000..97a2270
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/MessageTest.java
@@ -0,0 +1,105 @@
+/*
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * 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
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
+ *
+ *
+ *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.messages;
+
+import org.testng.annotations.*;
+import org.opends.server.DirectoryServerTestCase;
+
+import java.util.Locale;
+
+/**
+ * Message Tester.
+ */
+public class MessageTest extends DirectoryServerTestCase {
+
+  //@BeforeClass
+  public void setUp() {
+
+  }
+
+  @DataProvider(name = "rawData")
+  public Object[][] rawData() {
+    return new Object[][]{
+            {"Hello %s", "Hello World", new Object[]{"World"}},
+            {"Hel%nlo %s", "Hel\nlo 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[]{}}
+    };
+  }
+
+  @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);
+    assert (message.toString().equals(result));
+    assert (message.toString(Locale.CHINESE).equals(result));
+  }
+
+  @Test(dataProvider = "rawData1")
+  public void testRaw1(String fmt, Category c, Severity s,
+                       String result, Object... args) {
+    Message message = Message.raw(fmt, c, s, args);
+    assert (message.toString().equals(result));
+    assert (message.toString(Locale.CHINESE).equals(result));
+  }
+
+  //@Test
+  public void testToString() {
+    //TODO: Test goes here...
+    assert false : "testToString not implemented.";
+  }
+
+  //@Test
+  public void testToString1() {
+    //TODO: Test goes here...
+    assert false : "testToString1 not implemented.";
+  }
+
+  @Test(dataProvider = "rawData1")
+  public void testGetDescriptor(String fmt, Category c, Severity s,
+                                String result, Object... args) {
+    Message message = Message.raw(fmt, c, s, 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/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/MessagesTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/MessagesTestCase.java
index 87c287d..215daf6 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/MessagesTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/MessagesTestCase.java
@@ -24,7 +24,7 @@
  *
  *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
-package org.opends.server.messages;
+package org.opends.messages;
 
 
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/UnregisteredMessageIDsTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/UnregisteredMessageIDsTestCase.java
deleted file mode 100644
index f90abdd..0000000
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/messages/UnregisteredMessageIDsTestCase.java
+++ /dev/null
@@ -1,172 +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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * 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
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
- *
- *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
- */
-package org.opends.server.messages;
-
-
-
-import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import org.opends.server.TestCaseUtils;
-
-import static org.testng.Assert.*;
-
-
-
-/**
- * This class provides a mechanism for determining whether any of the message
- * IDs defined have not been registered with the server (and therefore may not
- * have a default message).
- */
-public class UnregisteredMessageIDsTestCase
-       extends MessagesTestCase
-{
-  /**
-   * Make sure that the Directory Server is running.
-   *
-   * @throws  Exception  If an unexpected problem occurs.
-   */
-  @BeforeClass()
-  public void startServer()
-         throws Exception
-  {
-    TestCaseUtils.startServer();
-  }
-
-
-
-  /**
-   * Look in the build filesystem for files in the org.opends.server.messages
-   * package.  Dynamically load all of those classes and use reflection to look
-   * at all fields in those classes.  For each field, make sure that it has a
-   * corresponding message registered with the server.  Also, look at all of the
-   * strings and make sure that they do not end with periods.
-   *
-   * @throws  Exception  If an unexpected problem occurs.
-   */
-  @Test()
-  public void TestUnregisteredMessageIDs()
-         throws Exception
-  {
-    ConcurrentHashMap<Integer,String> messages = MessageHandler.getMessages();
-
-    String s = File.separator;
-    String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT);
-    String messageClassesDir = buildRoot + s + "build" + s + "classes" + s +
-                               "org" + s + "opends" + s + "server" + s +
-                               "messages";
-    File f = new File(messageClassesDir);
-    LinkedList<String> classNames = new LinkedList<String>();
-    for (String filename : f.list())
-    {
-      if (! filename.endsWith(".class"))
-      {
-        continue;
-      }
-
-      classNames.add("org.opends.server.messages." +
-                     filename.substring(0, filename.length()-6));
-    }
-
-    assertFalse(classNames.isEmpty());
-
-    LinkedList<String> unregisteredMessageIDs = new LinkedList<String>();
-    LinkedList<String> idsEndingWithPeriods = new LinkedList<String>();
-    for (String className : classNames)
-    {
-      Class c = Class.forName(className);
-      for (Field field : c.getDeclaredFields())
-      {
-        if (field.getType().getName().equals("int"))
-        {
-          if (Modifier.isStatic(field.getModifiers()) &&
-              Modifier.isFinal(field.getModifiers()) &&
-              field.getName().startsWith("MSGID_"))
-          {
-            String fieldName  = className + "." + field.getName();
-            int    fieldValue = field.getInt(null);
-
-            String message = messages.get(fieldValue);
-            if (message == null)
-            {
-              unregisteredMessageIDs.add(fieldName);
-System.err.println("Unregistered field:  " + fieldName);
-            }
-            else if (message.endsWith(".") && (! message.endsWith("...")))
-            {
-              idsEndingWithPeriods.add(fieldName);
-System.err.println("Message ending with a period:  " + fieldName + " -- " + message);
-            }
-          }
-        }
-      }
-    }
-
-    StringBuilder buffer = new StringBuilder();
-    if (! unregisteredMessageIDs.isEmpty())
-    {
-      Iterator<String> iterator = unregisteredMessageIDs.iterator();
-      buffer.append("Unregistered message IDs detected:  ");
-      buffer.append(iterator.next());
-
-      while (iterator.hasNext())
-      {
-        buffer.append(", ");
-        buffer.append(iterator.next());
-      }
-    }
-
-    if (! idsEndingWithPeriods.isEmpty())
-    {
-      if (buffer.length() > 0)
-      {
-        buffer.append(".  ");
-      }
-
-      Iterator<String> iterator = idsEndingWithPeriods.iterator();
-      buffer.append("Message IDs for messages ending with a period:  ");
-      buffer.append(iterator.next());
-
-      while (iterator.hasNext())
-      {
-        buffer.append(", ");
-        buffer.append(iterator.next());
-      }
-    }
-
-    assertTrue((unregisteredMessageIDs.isEmpty() &&
-               idsEndingWithPeriods.isEmpty()), buffer.toString());
-  }
-}
-
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DelayPreOpPlugin.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DelayPreOpPlugin.java
index 1820527..db6198d 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DelayPreOpPlugin.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DelayPreOpPlugin.java
@@ -43,7 +43,7 @@
 import org.opends.server.types.Control;
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.operation.*;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -103,8 +103,8 @@
           // This is fine.
           break;
         default:
-          throw new ConfigException(-1, "Invalid plugin type " + t +
-                                    " for delay pre-op plugin.");
+          throw new ConfigException(Message.raw("Invalid plugin type " + t +
+                                    " for delay pre-op plugin."));
       }
     }
   }
@@ -236,8 +236,8 @@
           catch (Exception e)
           {
             operation.setResultCode(ResultCode.PROTOCOL_ERROR);
-            operation.appendErrorMessage("Unable to decode the delay request " +
-                                         "control:  " + e);
+            operation.appendErrorMessage(Message.raw("Unable to decode the delay request " +
+                                         "control:  " + e));
             return new PreOperationPluginResult(false, false, true);
           }
         }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java
index dcd2edc..8f1a297 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java
@@ -46,7 +46,7 @@
 import org.opends.server.types.Control;
 import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.operation.*;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -143,8 +143,8 @@
           // This is fine.
           break;
         default:
-          throw new ConfigException(-1, "Invalid plugin type " + t +
-                                    " for the disconnect plugin.");
+          throw new ConfigException(Message.raw("Invalid plugin type " + t +
+                                    " for the disconnect plugin."));
       }
     }
   }
@@ -856,8 +856,8 @@
           if (c.getValue().stringValue().equalsIgnoreCase(section))
           {
             operation.disconnectClient(DisconnectReason.CLOSED_BY_PLUGIN, true,
-                 "Closed by disconnect client plugin (section " + section + ")",
-                 -1);
+                 Message.raw("Closed by disconnect client plugin (section " +
+                         section + ")"));
 
             return true;
           }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/InvocationCounterPlugin.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/InvocationCounterPlugin.java
index 4308d4a..fa77cfa 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/InvocationCounterPlugin.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/InvocationCounterPlugin.java
@@ -57,7 +57,7 @@
 import org.opends.server.types.SearchResultEntry;
 import org.opends.server.types.SearchResultReference;
 import org.opends.server.types.operation.*;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -908,8 +908,8 @@
    */
   @Override()
   public PostDisconnectPluginResult doPostDisconnect(
-       ClientConnection clientConnection, DisconnectReason disconnectReason,
-       int msgID, String message)
+          ClientConnection clientConnection, DisconnectReason disconnectReason,
+          Message message)
   {
     postDisconnectCounter.incrementAndGet();
     return PostDisconnectPluginResult.SUCCESS;
@@ -1083,7 +1083,7 @@
    * {@inheritDoc}
    */
   @Override()
-  public void doShutdown(String reason)
+  public void doShutdown(Message reason)
   {
     shutdownCalled = true;
   }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/ShortCircuitPlugin.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/ShortCircuitPlugin.java
index 451a71f..1371a46 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/ShortCircuitPlugin.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/ShortCircuitPlugin.java
@@ -50,6 +50,7 @@
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.OperationType;
 import org.opends.server.types.operation.*;
+import org.opends.messages.Message;
 
 
 /**
@@ -119,8 +120,8 @@
           // This is fine.
           break;
         default:
-          throw new ConfigException(-1, "Invalid plugin type " + t +
-                                    " for the short circuit plugin.");
+          throw new ConfigException(Message.raw("Invalid plugin type " + t +
+                                    " for the short circuit plugin."));
       }
     }
   }
@@ -138,7 +139,8 @@
     if (resultCode >= 0)
     {
       abandonOperation.setResultCode(ResultCode.valueOf(resultCode));
-      abandonOperation.appendErrorMessage("Short-circuit in pre-parse");
+      abandonOperation.appendErrorMessage(
+              Message.raw("Short-circuit in pre-parse"));
       return new PreParsePluginResult(false, false, true);
     }
     else
@@ -159,7 +161,7 @@
     if (resultCode >= 0)
     {
       addOperation.setResultCode(ResultCode.valueOf(resultCode));
-      addOperation.appendErrorMessage("Short-circuit in pre-parse");
+      addOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreParsePluginResult(false, false, true);
     }
     else
@@ -180,7 +182,7 @@
     if (resultCode >= 0)
     {
       bindOperation.setResultCode(ResultCode.valueOf(resultCode));
-      bindOperation.appendErrorMessage("Short-circuit in pre-parse");
+      bindOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreParsePluginResult(false, false, true);
     }
     else
@@ -202,7 +204,7 @@
     if (resultCode >= 0)
     {
       compareOperation.setResultCode(ResultCode.valueOf(resultCode));
-      compareOperation.appendErrorMessage("Short-circuit in pre-parse");
+      compareOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreParsePluginResult(false, false, true);
     }
     else
@@ -224,7 +226,7 @@
     if (resultCode >= 0)
     {
       deleteOperation.setResultCode(ResultCode.valueOf(resultCode));
-      deleteOperation.appendErrorMessage("Short-circuit in pre-parse");
+      deleteOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreParsePluginResult(false, false, true);
     }
     else
@@ -246,7 +248,7 @@
     if (resultCode >= 0)
     {
       extendedOperation.setResultCode(ResultCode.valueOf(resultCode));
-      extendedOperation.appendErrorMessage("Short-circuit in pre-parse");
+      extendedOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreParsePluginResult(false, false, true);
     }
     else
@@ -268,7 +270,7 @@
     if (resultCode >= 0)
     {
       modifyOperation.setResultCode(ResultCode.valueOf(resultCode));
-      modifyOperation.appendErrorMessage("Short-circuit in pre-parse");
+      modifyOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreParsePluginResult(false, false, true);
     }
     else
@@ -290,7 +292,7 @@
     if (resultCode >= 0)
     {
       modifyDNOperation.setResultCode(ResultCode.valueOf(resultCode));
-      modifyDNOperation.appendErrorMessage("Short-circuit in pre-parse");
+      modifyDNOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreParsePluginResult(false, false, true);
     }
     else
@@ -312,7 +314,7 @@
     if (resultCode >= 0)
     {
       searchOperation.setResultCode(ResultCode.valueOf(resultCode));
-      searchOperation.appendErrorMessage("Short-circuit in pre-parse");
+      searchOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreParsePluginResult(false, false, true);
     }
     else
@@ -334,7 +336,7 @@
     if (resultCode >= 0)
     {
       unbindOperation.setResultCode(ResultCode.valueOf(resultCode));
-      unbindOperation.appendErrorMessage("Short-circuit in pre-parse");
+      unbindOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreParsePluginResult(false, false, true);
     }
     else
@@ -356,7 +358,7 @@
     if (resultCode >= 0)
     {
       addOperation.setResultCode(ResultCode.valueOf(resultCode));
-      addOperation.appendErrorMessage("Short-circuit in pre-parse");
+      addOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreOperationPluginResult(false, false, true);
     }
     else
@@ -378,7 +380,7 @@
     if (resultCode >= 0)
     {
       bindOperation.setResultCode(ResultCode.valueOf(resultCode));
-      bindOperation.appendErrorMessage("Short-circuit in pre-parse");
+      bindOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreOperationPluginResult(false, false, true);
     }
     else
@@ -400,7 +402,7 @@
     if (resultCode >= 0)
     {
       compareOperation.setResultCode(ResultCode.valueOf(resultCode));
-      compareOperation.appendErrorMessage("Short-circuit in pre-parse");
+      compareOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreOperationPluginResult(false, false, true);
     }
     else
@@ -422,7 +424,7 @@
     if (resultCode >= 0)
     {
       deleteOperation.setResultCode(ResultCode.valueOf(resultCode));
-      deleteOperation.appendErrorMessage("Short-circuit in pre-parse");
+      deleteOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreOperationPluginResult(false, false, true);
     }
     else
@@ -444,7 +446,7 @@
     if (resultCode >= 0)
     {
       extendedOperation.setResultCode(ResultCode.valueOf(resultCode));
-      extendedOperation.appendErrorMessage("Short-circuit in pre-parse");
+      extendedOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreOperationPluginResult(false, false, true);
     }
     else
@@ -466,7 +468,7 @@
     if (resultCode >= 0)
     {
       modifyOperation.setResultCode(ResultCode.valueOf(resultCode));
-      modifyOperation.appendErrorMessage("Short-circuit in pre-parse");
+      modifyOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreOperationPluginResult(false, false, true);
     }
     else
@@ -488,7 +490,7 @@
     if (resultCode >= 0)
     {
       modifyDNOperation.setResultCode(ResultCode.valueOf(resultCode));
-      modifyDNOperation.appendErrorMessage("Short-circuit in pre-parse");
+      modifyDNOperation.appendErrorMessage(Message.raw("Short-circuit in pre-parse"));
       return new PreOperationPluginResult(false, false, true);
     }
     else
@@ -510,7 +512,8 @@
     if (resultCode >= 0)
     {
       searchOperation.setResultCode(ResultCode.valueOf(resultCode));
-      searchOperation.appendErrorMessage("Short-circuit in pre-parse");
+      searchOperation.appendErrorMessage(
+              Message.raw("Short-circuit in pre-parse"));
       return new PreOperationPluginResult(false, false, true);
     }
     else
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/UpdatePreOpPlugin.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/UpdatePreOpPlugin.java
index d6a25fd..aaa7dbe 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/UpdatePreOpPlugin.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/UpdatePreOpPlugin.java
@@ -44,7 +44,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;
 
 
 /**
@@ -114,8 +114,8 @@
           // This is fine.
           break;
         default:
-          throw new ConfigException(-1, "Invalid plugin type " + t +
-                                    " for update pre-op plugin.");
+          throw new ConfigException(Message.raw("Invalid plugin type " + t +
+                                    " for update pre-op plugin."));
       }
     }
 
@@ -125,7 +125,7 @@
     }
     else
     {
-      throw new ConfigException(-1, "Only one update preop plugin may be used");
+      throw new ConfigException(Message.raw("Only one update preop plugin may be used"));
     }
 
     setAttributes       = new ArrayList<Attribute>();
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Element.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Element.java
index b26787a..10985bf 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Element.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Element.java
@@ -39,7 +39,6 @@
 
 import static org.testng.Assert.*;
 
-import static org.opends.server.messages.ProtocolMessages.*;
 
 
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Exception.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Exception.java
index 6aa55b4..d821ab8 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Exception.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1Exception.java
@@ -31,7 +31,7 @@
 import org.testng.annotations.Test;
 
 import static org.testng.Assert.*;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -47,7 +47,7 @@
   @Test()
   public void testConstructor1()
   {
-    new ASN1Exception(1, "Test");
+    new ASN1Exception(Message.raw("Test"));
   }
 
 
@@ -59,22 +59,8 @@
   @Test()
   public void testConstructor2()
   {
-    new ASN1Exception(1, "Test", new Exception());
+    new ASN1Exception(Message.raw("Test"), new Exception());
   }
 
-
-
-  /**
-   * Tests the <CODE>getMessageID</CODE> method.
-   */
-  @Test
-  public void testGetMessageID()
-  {
-    for (int i=0; i < 100; i++)
-    {
-      ASN1Exception e = new ASN1Exception(i, "Test");
-      assertEquals(e.getMessageID(), i);
-    }
-  }
 }
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1ReaderAndWriter.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1ReaderAndWriter.java
index 7b4ad93..1035d6c 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1ReaderAndWriter.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/TestASN1ReaderAndWriter.java
@@ -39,7 +39,7 @@
 import org.testng.annotations.Test;
 
 import static org.testng.Assert.*;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -277,7 +277,7 @@
       ASN1Element e = reader.readElement();
       if (e.value().length <= 1)
       {
-        throw new ASN1Exception(-1, "Too small to trip the max element size");
+        throw new ASN1Exception(Message.raw("Too small to trip the max element size"));
       }
     }
     finally
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java
index 3933296..f833255 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java
@@ -40,6 +40,7 @@
 import java.util.LinkedHashSet;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.api.ConnectionSecurityProvider;
 import org.opends.server.core.AddOperation;
 import org.opends.server.core.BindOperation;
@@ -1029,7 +1030,8 @@
   {
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
-    conn.disconnect(DisconnectReason.OTHER, false, "testDisconnect", -1);
+    conn.disconnect(DisconnectReason.OTHER, false,
+            Message.raw("testDisconnect"));
   }
 
 
@@ -1112,7 +1114,7 @@
          InternalClientConnection.getRootConnection();
     CancelResult cancelResult =
          conn.cancelOperation(1,
-              new CancelRequest(true, "testCancelOperation"));
+              new CancelRequest(true, Message.raw("testCancelOperation")));
     assertEquals(cancelResult, CancelResult.CANNOT_CANCEL);
   }
 
@@ -1126,7 +1128,8 @@
   {
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
-    conn.cancelAllOperations(new CancelRequest(true, "testCancelOperation"));
+    conn.cancelAllOperations(new CancelRequest(true,
+            Message.raw("testCancelOperation")));
   }
 
 
@@ -1140,7 +1143,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     conn.cancelAllOperationsExcept(
-         new CancelRequest(true, "testCancelOperation"), 1);
+            new CancelRequest(true, Message.raw("testCancelOperation")), 1);
   }
 
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java
index b1e509d..89288da 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java
@@ -47,6 +47,7 @@
 import javax.net.ssl.TrustManagerFactory;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.admin.server.AdminTestCaseUtils;
 import org.opends.server.admin.std.meta.JMXConnectionHandlerCfgDefn;
 import org.opends.server.admin.std.server.JMXConnectionHandlerCfg;
@@ -496,7 +497,7 @@
    * @throws Exception
    */
   private void configureJmx(Entry entry) throws Exception {
-    ArrayList<String> reasons = new ArrayList<String>();
+    ArrayList<Message> reasons = new ArrayList<Message>();
 
     // Get the Jmx connection handler from the core server
     JmxConnectionHandler jmxConnectionHandler = getJmxConnectionHandler();
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java
index 521078a..89e37ec 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java
@@ -28,8 +28,7 @@
 
 
 
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ProtocolMessages.MSGID_JMX_INSUFFICIENT_PRIVILEGES;
+import static org.opends.messages.ProtocolMessages.*;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
@@ -44,6 +43,7 @@
 import java.util.UUID;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskBackend;
 import org.opends.server.backends.task.TaskState;
@@ -413,9 +413,8 @@
     }
     catch (SecurityException e)
     {
-      int msgID = MSGID_JMX_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      assertEquals(message, e.getMessage());
+      Message message = ERR_JMX_INSUFFICIENT_PRIVILEGES.get();
+      assertEquals(message.toString(), e.getMessage());
     }
     catch (IOException e)
     {
@@ -446,7 +445,7 @@
     }
     catch (SecurityException e)
     {
-      assertTrue(true, "User \"cn=Unprivileged JMX Root,cn=Root " +
+      assertTrue(false, "User \"cn=Unprivileged JMX Root,cn=Root " +
           "DNs,cn=config\" has JMX_READ privilege and he's NOT able " +
           "to connect, which is NOT the correct behavior.");
     }
@@ -477,9 +476,8 @@
     }
     catch (SecurityException e)
     {
-      int msgID = MSGID_JMX_INSUFFICIENT_PRIVILEGES;
-      String message = getMessage(msgID);
-      assertEquals(message, e.getMessage());
+      Message message = ERR_JMX_INSUFFICIENT_PRIVILEGES.get();
+      assertEquals(message.toString(), e.getMessage());
     }
     catch (IOException e)
     {
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java
index 57049d3..d7caa3e 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java
@@ -34,6 +34,7 @@
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.LDAPException;
 import org.opends.server.core.DirectoryServer;
+import org.opends.messages.Message;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -66,7 +67,7 @@
   /**
    * The error message to use for add result operations.
    */
-  private static final String resultMsg = "Test Successful";
+  private static final Message resultMsg = Message.raw("Test Successful");
 
   /**
    * The DN to use for add result operations
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java
index c26dc70..baf7636 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java
@@ -30,6 +30,7 @@
 
 import java.util.List;
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.protocols.asn1.ASN1Element;
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.protocols.ldap.BindResponseProtocolOp;
@@ -43,8 +44,8 @@
 
 public class TestBindResponseProtocolOp  extends LdapTestCase {
 
-    private static String message = "This is a message";
-    private static String message2 = "This is a second message";
+    private static Message message = Message.raw("This is a message");
+    private static Message message2 = Message.raw("This is a second message");
     ResultCode        okCode          = ResultCode.SUCCESS;
     ResultCode  busyCode = ResultCode.BUSY;
     ResultCode invalidSyntaxCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java
index acbcacb..9956ebd 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java
@@ -34,6 +34,7 @@
 import org.opends.server.protocols.asn1.*;
 import org.opends.server.types.LDAPException;
 import static org.opends.server.util.ServerConstants.EOL;
+import org.opends.messages.Message;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 import static org.testng.Assert.assertEquals;
@@ -68,7 +69,7 @@
   /**
    * The error message to use for compare result operations.
    */
-  private static final String resultMsg = "Test Successful";
+  private static final Message resultMsg = Message.raw("Test Successful");
 
 /**
    * The DN to use for compare result operations
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java
index c64a0e4..be0436e 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java
@@ -38,6 +38,7 @@
 import org.opends.server.types.RDN;
 import org.opends.server.core.DirectoryServer;
 import static org.opends.server.util.ServerConstants.EOL;
+import org.opends.messages.Message;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -66,7 +67,7 @@
   /**
    * The error message to use for delete result operations.
    */
-  private static final String resultMsg = "Test Successful";
+  private static final Message resultMsg = Message.raw("Test Successful");
 
 /**
    * The DN to use for delete result operations
@@ -257,7 +258,7 @@
     ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
     elements.add(new ASN1Enumerated(resultCode));
     elements.add(new ASN1OctetString(dn.toString()));
-    elements.add(new ASN1OctetString(resultMsg));
+    elements.add(new ASN1OctetString(String.valueOf(resultMsg)));
     elements.add(new ASN1Null());
     DeleteResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_DELETE_RESPONSE,
                                                  elements));
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPConnectionHandler.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPConnectionHandler.java
index 470dc07..b027b53 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPConnectionHandler.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPConnectionHandler.java
@@ -37,6 +37,7 @@
 import org.opends.server.admin.std.server.LDAPConnectionHandlerCfg;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.types.*;
 import org.opends.server.config.ConfigAttribute;
 import org.opends.server.config.ConfigEntry;
@@ -51,7 +52,7 @@
 
 public class TestLDAPConnectionHandler extends LdapTestCase {
 
-  private static String reasonMsg="Don't need a reason.";
+  private static Message reasonMsg= Message.raw("Don't need a reason.");
 
   /**
    * Once-only initialization.
@@ -313,7 +314,7 @@
     GoodHandlerEntry.addAttribute(a13, null);
     GoodHandlerEntry.addAttribute(a14, null);
     GoodHandlerEntry.addAttribute(a15, null);
-    LinkedList<String> reasons = new LinkedList<String>();
+    LinkedList<Message> reasons = new LinkedList<Message>();
     LDAPConnectionHandlerCfg config = LdapTestCase.getConfiguration(GoodHandlerEntry);
     //see if we're ok
     boolean ret=LDAPConnHandler.isConfigurationChangeAcceptable(config, reasons);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPException.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPException.java
index 1d4a3c8..b2a48ae 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPException.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPException.java
@@ -28,9 +28,9 @@
 package org.opends.server.protocols.ldap;
 
 import org.testng.annotations.Test;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ProtocolMessages.MSGID_ECN_INVALID_ELEMENT_TYPE;
-import static org.opends.server.messages.ProtocolMessages.MSGID_ECN_CANNOT_DECODE_VALUE;
+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;
 
@@ -38,22 +38,19 @@
 
   @Test()
   public void testLDAPException() {
-    int    msgID   = MSGID_ECN_INVALID_ELEMENT_TYPE;
-    String message = getMessage(msgID);
-    LDAPException ex=new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID, message);
+    MessageDescriptor.Arg1<CharSequence> msgDesc = ERR_ECN_INVALID_ELEMENT_TYPE;
+    LDAPException ex=new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgDesc.get(""));
     assertTrue(ex.getResultCode() == LDAPResultCode.PROTOCOL_ERROR);
-    assertTrue(ex.getMessageID() == msgID);
+    assertTrue(ex.getMessageObject().getDescriptor() == msgDesc);
   }
 
   @Test()
   public void testLDAPExceptionThrowable() {
-    int    msgID   = MSGID_ECN_INVALID_ELEMENT_TYPE;
-    String message = getMessage(msgID);
-    LDAPException ex=new LDAPException(LDAPResultCode.OTHER, msgID, message);
-    int    msgID1   = MSGID_ECN_CANNOT_DECODE_VALUE;
-    String message1 = getMessage(msgID);
-    new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID1, message1,ex);
+    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;
+    new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID1.get(""), ex);
     assertTrue(ex.getResultCode() == LDAPResultCode.OTHER);
-    assertTrue(ex.getMessageID() == msgID);
+    assertTrue(ex.getMessageObject().getDescriptor() == msgID);
   }
 }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java
index 9669f39..43a20d3 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java
@@ -34,6 +34,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.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 import static org.testng.Assert.assertEquals;
@@ -68,7 +69,7 @@
   /**
    * The error message to use for compare result operations.
    */
-  private static final String resultMsg = "Test Successful";
+  private static final Message resultMsg = Message.raw("Test Successful");
 
 /**
    * The DN to use for compare result operations
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java
index 1b28174..8c01890 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java
@@ -34,6 +34,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.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 import static org.testng.Assert.assertEquals;
@@ -68,7 +69,7 @@
   /**
    * The error message to use for add result operations.
    */
-  private static final String resultMsg = "Test Successful";
+  private static final Message resultMsg = Message.raw("Test Successful");
 
 /**
    * The DN to use for add result operations
@@ -259,7 +260,7 @@
     ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
     elements.add(new ASN1Enumerated(resultCode));
     elements.add(new ASN1OctetString(dn.toString()));
-    elements.add(new ASN1OctetString(resultMsg));
+    elements.add(new ASN1OctetString(String.valueOf(resultMsg)));
     elements.add(new ASN1Null());
     ModifyResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_RESPONSE,
                                                     elements));
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
index dd84def..1df2ca2 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java
@@ -34,11 +34,8 @@
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import static org.opends.server.messages.MessageHandler.getMessage;
-import static org.opends.server.messages.ReplicationMessages.MSGID_INVALID_IMPORT_SOURCE;
-import static org.opends.server.messages.ReplicationMessages.MSGID_NO_MATCHING_DOMAIN;
-import static org.opends.server.messages.ReplicationMessages.MSGID_NO_REACHABLE_PEER_IN_THE_DOMAIN;
-import static org.opends.server.messages.ReplicationMessages.MSGID_SIMULTANEOUS_IMPORT_EXPORT_REJECTED;
+import static org.opends.messages.ReplicationMessages.*;
+import static org.opends.messages.TaskMessages.*;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
@@ -58,7 +55,9 @@
 import org.opends.server.core.AddOperationBasis;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.messages.TaskMessages;
+import org.opends.messages.Category;
+import org.opends.messages.Message;
+import org.opends.messages.Severity;
 import org.opends.server.protocols.internal.InternalClientConnection;
 import org.opends.server.protocols.internal.InternalSearchOperation;
 import org.opends.server.replication.plugin.ReplicationBroker;
@@ -77,8 +76,6 @@
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.SearchFilter;
 import org.opends.server.types.SearchScope;
@@ -148,9 +145,7 @@
 
   private void log(String s)
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "InitOnLineTests/" + s, 1);
+    logError(Message.raw("InitOnLineTests/" + s, Category.SYNC, Severity.INFORMATION));
     if (debugEnabled())
     {
       TRACER.debugInfo(s);
@@ -286,11 +281,11 @@
    * Add a task to the configuration of the current running DS.
    * @param taskEntry The task to add.
    * @param expectedResult The expected result code for the ADD.
-   * @param errorMessageID The expected error messageID when the expected
+   * @param errorMessage The expected error messageID when the expected
    * result code is not SUCCESS
    */
   private void addTask(Entry taskEntry, ResultCode expectedResult,
-      int errorMessageID)
+      Message errorMessage)
   {
     try
     {
@@ -318,17 +313,18 @@
       if (expectedResult != ResultCode.SUCCESS)
       {
         assertTrue(addOperation.getErrorMessage().toString().
-            startsWith(getMessage(errorMessageID).toString()),
+            startsWith(errorMessage.toString()),
             "Error MsgID of the task <"
             + addOperation.getErrorMessage()
             + "> equals <"
-            + getMessage(errorMessageID) + ">");
-        log("Create config task: <"+ errorMessageID + addOperation.getErrorMessage() + ">");
+            + errorMessage + ">");
+        log("Create config task: <"+ errorMessage.getDescriptor().getId()
+                + addOperation.getErrorMessage() + ">");
 
       }
       else
       {
-        waitTaskState(taskEntry, TaskState.RUNNING, -1);
+        waitTaskState(taskEntry, TaskState.RUNNING, null);
       }
 
       // Entry will be removed at the end of the test
@@ -459,7 +455,7 @@
   }
 
   private void waitTaskState(Entry taskEntry, TaskState expectedTaskState,
-      int expectedMessage)
+      Message expectedMessage)
   {
     TaskState taskState = null;
     try
@@ -542,12 +538,12 @@
         }
         else
         {
-          if (expectedMessage > 0)
+          if (expectedMessage != null)
           {
             log(logMessages.get(0));
-            log(getMessage(expectedMessage));
+            log(expectedMessage.toString());
             assertTrue(logMessages.get(0).indexOf(
-                getMessage(expectedMessage))>0);
+                expectedMessage.toString())>0);
           }
         }
       }
@@ -713,7 +709,6 @@
         {
           ErrorMessage em = (ErrorMessage)msg;
           log("Broker " + serverID + "  receives ERROR "
-              + getMessage(em.getMsgID())
               + " " + em.getDetails());
           break;
         }
@@ -875,7 +870,7 @@
       Thread.sleep(2000);
 
       // In S1 launch the total update
-      addTask(taskInitFromS2, ResultCode.SUCCESS, 0);
+      addTask(taskInitFromS2, ResultCode.SUCCESS, null);
 
       // S2 should receive init msg
       ReplicationMessage msg;
@@ -967,10 +962,10 @@
     Thread.sleep(1000);
 
     // Launch in S1 the task that will initialize S2
-    addTask(taskInitTargetS2, ResultCode.SUCCESS, 0);
+    addTask(taskInitTargetS2, ResultCode.SUCCESS, null);
 
     // Wait for task completion
-    waitTaskState(taskInitTargetS2, TaskState.COMPLETED_SUCCESSFULLY, -1);
+    waitTaskState(taskInitTargetS2, TaskState.COMPLETED_SUCCESSFULLY, null);
 
     // Tests that entries have been received by S2
     receiveUpdatedEntries(server2, server2ID, updatedEntries);
@@ -1010,10 +1005,10 @@
     Thread.sleep(1000);
 
     // Launch in S1 the task that will initialize S2
-    addTask(taskInitTargetAll, ResultCode.SUCCESS, 0);
+    addTask(taskInitTargetAll, ResultCode.SUCCESS, null);
 
     // Wait for task completion
-    waitTaskState(taskInitTargetAll, TaskState.COMPLETED_SUCCESSFULLY, -1);
+    waitTaskState(taskInitTargetAll, TaskState.COMPLETED_SUCCESSFULLY, null);
 
     // Tests that entries have been received by S2
     receiveUpdatedEntries(server2, server2ID, updatedEntries);
@@ -1089,7 +1084,7 @@
           "ds-task-initialize-domain-dn: foo",
           "ds-task-initialize-remote-replica-server-id: " + server2ID);
       addTask(taskInitTarget, ResultCode.INVALID_DN_SYNTAX,
-          TaskMessages.MSGID_TASK_INITIALIZE_INVALID_DN);
+          ERR_TASK_INITIALIZE_INVALID_DN.get());
 
       // Domain base dn not related to any domain
       taskInitTarget = TestCaseUtils.makeEntry(
@@ -1102,7 +1097,7 @@
           "ds-task-initialize-domain-dn: dc=foo",
           "ds-task-initialize-remote-replica-server-id: " + server2ID);
       addTask(taskInitTarget, ResultCode.OTHER,
-          MSGID_NO_MATCHING_DOMAIN);
+          ERR_NO_MATCHING_DOMAIN.get());
 
       // Invalid scope
       // createTask(taskInitTargetS2);
@@ -1149,7 +1144,7 @@
           "ds-task-initialize-domain-dn: foo",
           "ds-task-initialize-replica-server-id: " + server2ID);
       addTask(taskInit, ResultCode.INVALID_DN_SYNTAX,
-          TaskMessages.MSGID_TASK_INITIALIZE_INVALID_DN);
+          ERR_TASK_INITIALIZE_INVALID_DN.get());
 
       // Domain base dn not related to any domain
       taskInit = TestCaseUtils.makeEntry(
@@ -1161,7 +1156,7 @@
           "ds-task-class-name: org.opends.server.tasks.InitializeTask",
           "ds-task-initialize-domain-dn: dc=foo",
           "ds-task-initialize-replica-server-id: " + server2ID);
-      addTask(taskInit, ResultCode.OTHER, MSGID_NO_MATCHING_DOMAIN);
+      addTask(taskInit, ResultCode.OTHER, ERR_NO_MATCHING_DOMAIN.get());
 
       // Invalid Source
       taskInit = TestCaseUtils.makeEntry(
@@ -1174,7 +1169,7 @@
           "ds-task-initialize-domain-dn: " + baseDn,
           "ds-task-initialize-replica-server-id: -3");
       addTask(taskInit, ResultCode.OTHER,
-          MSGID_INVALID_IMPORT_SOURCE);
+          ERR_INVALID_IMPORT_SOURCE.get());
 
       // Scope containing a serverID absent from the domain
       // createTask(taskInitTargetS2);
@@ -1312,10 +1307,10 @@
     Thread.sleep(1000);
 
     // Launch in S1 the task that will initialize S2
-    addTask(taskInitTargetS2, ResultCode.SUCCESS, 0);
+    addTask(taskInitTargetS2, ResultCode.SUCCESS, null);
 
     // Wait for task completion
-    waitTaskState(taskInitTargetS2, TaskState.COMPLETED_SUCCESSFULLY, -1);
+    waitTaskState(taskInitTargetS2, TaskState.COMPLETED_SUCCESSFULLY, null);
 
     // Tests that entries have been received by S2
     receiveUpdatedEntries(server2, server2ID, updatedEntries);
@@ -1408,10 +1403,10 @@
         "ds-task-initialize-domain-dn: "+baseDn,
         "ds-task-initialize-replica-server-id: " + 20);
 
-    addTask(taskInit, ResultCode.SUCCESS, 0);
+    addTask(taskInit, ResultCode.SUCCESS, null);
 
     waitTaskState(taskInit, TaskState.STOPPED_BY_ERROR,
-        MSGID_NO_REACHABLE_PEER_IN_THE_DOMAIN);
+        ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get());
 
     // Test 2
     taskInit = TestCaseUtils.makeEntry(
@@ -1424,7 +1419,7 @@
         "ds-task-initialize-domain-dn: "+baseDn,
         "ds-task-initialize-replica-server-id: " + server1ID);
 
-    addTask(taskInit, ResultCode.OTHER, MSGID_INVALID_IMPORT_SOURCE);
+    addTask(taskInit, ResultCode.OTHER, ERR_INVALID_IMPORT_SOURCE.get());
 
     if (sd != null)
     {
@@ -1460,10 +1455,10 @@
         "ds-task-initialize-domain-dn: "+baseDn,
         "ds-task-initialize-replica-server-id: " + 0);
 
-    addTask(taskInit, ResultCode.SUCCESS, 0);
+    addTask(taskInit, ResultCode.SUCCESS, null);
 
     waitTaskState(taskInit, TaskState.STOPPED_BY_ERROR,
-        MSGID_NO_REACHABLE_PEER_IN_THE_DOMAIN);
+        ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get());
 
     if (sd != null)
     {
@@ -1527,7 +1522,7 @@
         "ds-task-initialize-domain-dn: "+baseDn,
         "ds-task-initialize-replica-server-id: " + server2ID);
 
-    addTask(taskInit, ResultCode.SUCCESS, 0);
+    addTask(taskInit, ResultCode.SUCCESS, null);
 
     Thread.sleep(3000);
 
@@ -1542,24 +1537,24 @@
         "ds-task-initialize-replica-server-id: " + server2ID);
 
     // Second task is expected to be rejected
-    addTask(taskInit2, ResultCode.SUCCESS, 0);
+    addTask(taskInit2, ResultCode.SUCCESS, null);
 
     waitTaskState(taskInit2, TaskState.STOPPED_BY_ERROR,
-        MSGID_SIMULTANEOUS_IMPORT_EXPORT_REJECTED);
+        ERR_SIMULTANEOUS_IMPORT_EXPORT_REJECTED.get());
 
     // First task is stilll running
-    waitTaskState(taskInit, TaskState.RUNNING, -1);
+    waitTaskState(taskInit, TaskState.RUNNING, null);
 
     // External request is supposed to be rejected
 
     // Now tests error in the middle of an import
     // S2 sends init request
     ErrorMessage msg =
-      new ErrorMessage(server1ID, 1, "");
+      new ErrorMessage(server1ID, (short) 1, Message.EMPTY);
     server2.publish(msg);
 
     waitTaskState(taskInit, TaskState.STOPPED_BY_ERROR,
-        1);
+        null);
 
     cleanEntries();
 
@@ -1569,7 +1564,6 @@
 
   /**
    * Disconnect broker and remove entries from the local DB
-   * @throws Exception
    */
   protected void cleanEntries()
   {
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java
index 82e4e8c..26f515f 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java
@@ -37,6 +37,9 @@
 import java.util.List;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
+import org.opends.messages.Category;
+import org.opends.messages.Severity;
 import org.opends.server.core.AddOperationBasis;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.ModifyOperation;
@@ -51,8 +54,6 @@
 import org.opends.server.replication.protocol.ReplicationMessage;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.LDAPException;
 import org.opends.server.types.Modification;
 import org.opends.server.types.Operation;
@@ -92,9 +93,9 @@
   @Test(enabled=true, groups="slow")
   public void saturateQueueAndRestart() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting Replication ProtocolWindowTest : saturateAndRestart" , 1);
+    logError(Message.raw(
+        "Starting Replication ProtocolWindowTest : saturateAndRestart",
+            Category.SYNC, Severity.INFORMATION));
 
     final DN baseDn = DN.decode("ou=People,dc=example,dc=com");
 
@@ -337,9 +338,9 @@
   @Test(enabled=true)
   public void protocolVersion() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting Replication ProtocolWindowTest : protocolVersion" , 1);
+    logError(Message.raw(
+            "Starting Replication ProtocolWindowTest : protocolVersion",
+            Category.SYNC, Severity.INFORMATION));
 
     final DN baseDn = DN.decode("ou=People,dc=example,dc=com");
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
index 86a13f3..ffa44a1 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
@@ -44,6 +44,10 @@
 
 import org.opends.server.DirectoryServerTestCase;
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.Message;
+import org.opends.messages.Category;
+import org.opends.messages.Severity;
 import org.opends.server.backends.task.TaskState;
 import org.opends.server.core.AddOperation;
 import org.opends.server.core.DeleteOperationBasis;
@@ -62,8 +66,6 @@
 import org.opends.server.types.ByteStringFactory;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.LockManager;
 import org.opends.server.types.Modification;
 import org.opends.server.types.ModificationType;
@@ -171,10 +173,9 @@
       }
       catch (Exception e)
       {
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-            ErrorLogSeverity.NOTICE,
-            "ReplicationTestCase/openChangelogSession " + e.getMessage()
-            + " when emptying old changes", 1);
+        logError(new MessageBuilder(
+            "ReplicationTestCase/openChangelogSession ").append(e.getMessage())
+            .append(" when emptying old changes").toMessage());
       }
     }
     return broker;
@@ -249,9 +250,8 @@
    */
   protected void cleanConfigEntries()
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "ReplicationTestCase/Cleaning config entries" , 1);
+    logError(Message.raw("ReplicationTestCase/Cleaning config entries",
+            Category.SYNC, Severity.NOTICE));
 
     DeleteOperationBasis op;
     // Delete entries
@@ -260,9 +260,8 @@
       while (true)
       {
         DN dn = configEntryList.removeLast();
-             logError(ErrorLogCategory.SYNCHRONIZATION,
-            ErrorLogSeverity.NOTICE,
-            "cleaning config entry " + dn, 1);
+             logError(Message.raw("cleaning config entry " + dn,
+                     Category.SYNC, Severity.NOTICE));
 
         op = new DeleteOperationBasis(connection, InternalClientConnection
             .nextOperationID(), InternalClientConnection.nextMessageID(), null,
@@ -280,9 +279,8 @@
    */
   protected void cleanRealEntries()
   {
-  	logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "ReplicationTestCase/Cleaning entries" , 1);
+  	logError(Message.raw("ReplicationTestCase/Cleaning entries",
+            Category.SYNC, Severity.NOTICE));
 
     DeleteOperationBasis op;
     // Delete entries
@@ -291,9 +289,8 @@
       while (true)
       {
         DN dn = entryList.removeLast();
-        logError(ErrorLogCategory.SYNCHRONIZATION,
-            ErrorLogSeverity.NOTICE,
-            "cleaning entry " + dn, 1);
+        logError(Message.raw("cleaning entry " + dn,
+                Category.SYNC, Severity.NOTICE));
 
         op = new DeleteOperationBasis(connection, InternalClientConnection
             .nextOperationID(), InternalClientConnection.nextMessageID(), null,
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java
index 0296bcd..279f555 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java
@@ -38,6 +38,9 @@
 import java.util.List;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
+import org.opends.messages.Category;
+import org.opends.messages.Severity;
 import org.opends.server.admin.std.server.SynchronizationProviderCfg;
 import org.opends.server.api.SynchronizationProvider;
 import org.opends.server.core.DirectoryServer;
@@ -52,8 +55,6 @@
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.DN;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.Modification;
 import org.opends.server.types.ModificationType;
 import org.opends.server.types.Operation;
@@ -130,9 +131,8 @@
   @Test()
   public void pushSchemaChange() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting replication test : pushSchemaChange ", 1);
+    logError(Message.raw("Starting replication test : pushSchemaChange ",
+            Category.SYNC, Severity.NOTICE));
 
     final DN baseDn = DN.decode("cn=schema");
 
@@ -216,9 +216,8 @@
   @Test(dependsOnMethods = { "pushSchemaChange" })
   public void replaySchemaChange() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting replication test : pushSchemaChange ", 1);
+    logError(Message.raw("Starting replication test : pushSchemaChange ",
+            Category.SYNC, Severity.NOTICE));
 
     final DN baseDn = DN.decode("cn=schema");
 
@@ -250,9 +249,8 @@
   @Test(enabled=true, dependsOnMethods = { "replaySchemaChange" })
   public void pushSchemaFilesChange() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting replication test : pushSchemaFilesChange ", 1);
+    logError(Message.raw("Starting replication test : pushSchemaFilesChange ",
+            Category.SYNC, Severity.NOTICE));
 
     final DN baseDn = DN.decode("cn=schema");
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
index 6341c62..2bcd932 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java
@@ -37,6 +37,9 @@
 import java.util.List;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Category;
+import org.opends.messages.Severity;
+import org.opends.messages.Message;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.MonitorProvider;
 import org.opends.server.config.ConfigException;
@@ -50,8 +53,6 @@
 import org.opends.server.types.Attribute;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.Modification;
 import org.opends.server.types.Operation;
@@ -84,9 +85,8 @@
   @Test(enabled=true, groups="slow")
   public void fromServertoBroker() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting replication StressTest : fromServertoBroker" , 1);
+    logError(Message.raw("Starting replication StressTest : fromServertoBroker",
+            Category.SYNC, Severity.NOTICE));
 
     final DN baseDn = DN.decode("ou=People,dc=example,dc=com");
     final int TOTAL_MESSAGES = 1000;
@@ -260,7 +260,7 @@
 
     /**
      * Creates a new Stress Test Reader
-     * @param broker
+     * @param count
      */
     public BrokerWriter(int count)
     {
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java
index 58cc853..ecf8e88 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java
@@ -42,6 +42,9 @@
 import java.util.concurrent.locks.Lock;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
+import org.opends.messages.Category;
+import org.opends.messages.Severity;
 import org.opends.server.core.AddOperationBasis;
 import org.opends.server.core.DeleteOperationBasis;
 import org.opends.server.core.DirectoryServer;
@@ -69,8 +72,6 @@
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.DN;
 import org.opends.server.types.Entry;
-import org.opends.server.types.ErrorLogCategory;
-import org.opends.server.types.ErrorLogSeverity;
 import org.opends.server.types.LockManager;
 import org.opends.server.types.Modification;
 import org.opends.server.types.ModificationType;
@@ -294,9 +295,8 @@
   @Test(enabled=false)
   public void toggleReceiveStatus() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting synchronization test : toggleReceiveStatus" , 1);
+    logError(Message.raw("Starting synchronization test : toggleReceiveStatus",
+            Category.SYNC, Severity.INFORMATION));
 
     final DN baseDn = DN.decode("ou=People,dc=example,dc=com");
 
@@ -375,9 +375,8 @@
   @Test(groups = "slow")
   public void lostHeartbeatFailover() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting replication test : lostHeartbeatFailover" , 1);
+    logError(Message.raw("Starting replication test : lostHeartbeatFailover",
+            Category.SYNC, Severity.INFORMATION));
 
     cleanRealEntries();
 
@@ -605,9 +604,8 @@
   @Test(enabled=true, groups="slow")
   public void namingConflicts() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting replication test : namingConflicts" , 1);
+    logError(Message.raw("Starting replication test : namingConflicts",
+            Category.SYNC, Severity.INFORMATION));
 
     final DN baseDn = DN.decode("ou=People,dc=example,dc=com");
     String resolvedMonitorAttr = "resolved-naming-conflicts";
@@ -1139,9 +1137,9 @@
   @Test(enabled=false, dataProvider="assured")
   public void updateOperations(boolean assured) throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting replication test : updateOperations " + assured , 1);
+    logError(Message.raw(
+            "Starting replication test : updateOperations " + assured,
+            Category.SYNC, Severity.INFORMATION));
 
     final DN baseDn = DN.decode("ou=People,dc=example,dc=com");
 
@@ -1403,9 +1401,8 @@
   @Test(enabled=true)
   public void deleteNoSuchObject() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting replication test : deleteNoSuchObject" , 1);
+    logError(Message.raw("Starting replication test : deleteNoSuchObject",
+            Category.SYNC, Severity.INFORMATION));
 
     DN dn = DN.decode("cn=No Such Object,ou=People,dc=example,dc=com");
     DeleteOperationBasis op =
@@ -1425,9 +1422,8 @@
   @Test(enabled=false)
   public void infiniteReplayLoop() throws Exception
   {
-    logError(ErrorLogCategory.SYNCHRONIZATION,
-        ErrorLogSeverity.NOTICE,
-        "Starting replication test : infiniteReplayLoop" , 1);
+    logError(Message.raw("Starting replication test : infiniteReplayLoop",
+            Category.SYNC, Severity.INFORMATION));
 
     final DN baseDn = DN.decode("ou=People,dc=example,dc=com");
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java
index cab707d..06bba70 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java
@@ -80,6 +80,7 @@
 import org.opends.server.workflowelement.localbackend.LocalBackendAddOperation;
 import org.opends.server.workflowelement.localbackend.LocalBackendDeleteOperation;
 import org.opends.server.workflowelement.localbackend.LocalBackendModifyDNOperation;
+import org.opends.messages.Message;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -663,7 +664,7 @@
   @Test()
   public void errorMessageTest() throws Exception
   {
-    ErrorMessage msg = new ErrorMessage((short)1, (short)2, 12, "details");
+    ErrorMessage msg = new ErrorMessage((short)1, (short)2, Message.raw("details"));
     ErrorMessage newMsg = new ErrorMessage(msg.getBytes());
     assertEquals(msg.getsenderID(), newMsg.getsenderID());
     assertEquals(msg.getDestination(), newMsg.getDestination());
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java
index fab9520..aeeab0a 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java
@@ -30,6 +30,7 @@
 
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.protocols.asn1.ASN1OctetString;
+import org.opends.messages.MessageBuilder;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -63,7 +64,7 @@
     // Make sure that the specified class can be instantiated as a task.
     AttributeSyntax syntax = getRule();
 
-    StringBuilder reason = new StringBuilder();
+    MessageBuilder reason = new MessageBuilder();
     // test the valueIsAcceptable method
     Boolean liveResult =
       syntax.valueIsAcceptable(new ASN1OctetString(value), reason);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
index 8de781a..76c436e 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
@@ -35,6 +35,7 @@
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.ByteStringFactory;
+import org.opends.messages.MessageBuilder;
 
 import static org.testng.Assert.*;
 
@@ -136,9 +137,9 @@
       "( testxapproxtype-oid NAME 'testXApproxType' " +
            "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 " +
            "X-APPROX 'equalLengthApproximateMatch' )");
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(attrTypeSyntax.valueIsAcceptable(definition, invalidReason),
-               invalidReason.toString());
+            invalidReason.toString());
 
 
     // Verify that we can decode the attribute type and that it has the
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java
index 0998397..03f676c 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java
@@ -34,6 +34,7 @@
 import org.opends.server.protocols.asn1.ASN1OctetString;
 import org.opends.server.types.ByteString;
 import org.opends.server.types.DN;
+import org.opends.messages.MessageBuilder;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -81,7 +82,7 @@
 
     ByteString byteStringValue = new ASN1OctetString(value);
 
-    StringBuilder reason = new StringBuilder();
+    MessageBuilder reason = new MessageBuilder();
     Boolean liveResult =
       syntax.valueIsAcceptable(byteStringValue, reason);
 
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java
index 7fe30b1..00e101e 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java
@@ -32,6 +32,8 @@
 import java.util.ArrayList;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.admin.server.AdminTestCaseUtils;
 import org.opends.server.admin.std.meta.TelephoneNumberAttributeSyntaxCfgDefn;
 import org.opends.server.admin.std.server.TelephoneNumberAttributeSyntaxCfg;
@@ -117,7 +119,7 @@
          (TelephoneNumberSyntax) DirectoryServer.getAttributeSyntax(oid, false);
 
     // apply the configuration.
-    ArrayList<String> unacceptableReasons = new ArrayList<String>();
+    ArrayList<Message> unacceptableReasons = new ArrayList<Message>();
     assertTrue(syntax.isConfigurationChangeAcceptable(configuration,
                                                       unacceptableReasons));
     ConfigChangeResult configResult =
@@ -126,7 +128,7 @@
 
     // check the syntax of the given value.
     Boolean liveResult = syntax.valueIsAcceptable(
-        new ASN1OctetString(value), new StringBuilder());
+        new ASN1OctetString(value), new MessageBuilder());
     assertEquals(result, liveResult);
 
     // call the getters to increase code coverage...
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java
index 0dde670..393c521 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java
@@ -34,6 +34,7 @@
 import org.testng.annotations.BeforeClass;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskBackend;
 import org.opends.server.backends.task.TaskState;
@@ -111,7 +112,7 @@
 
     // Invoke the disconnect client task.
     String taskID = "Disconnect Client " + connectionID;
-    String disconnectMessage = "testDisconnectWithNotification";
+    Message disconnectMessage = Message.raw("testDisconnectWithNotification");
     DN taskDN = DN.decode("ds-task-id=" + taskID +
                           ",cn=Scheduled Tasks,cn=Tasks");
     TestCaseUtils.addEntry(
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/LdifFileWriter.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/LdifFileWriter.java
index 36cf39b..60d8494 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/LdifFileWriter.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tasks/LdifFileWriter.java
@@ -36,6 +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 java.io.IOException;
 import java.util.Random;
@@ -79,7 +80,7 @@
        throws IOException, InitializationException, MakeLDIFException
   {
     TemplateFile template = new TemplateFile(resourcePath, new Random(1));
-    ArrayList<String> warnings = new ArrayList<String>();
+    ArrayList<Message> warnings = new ArrayList<Message>();
     template.parse(templatePath, warnings);
     makeLdif(ldifPath, template);
   }
@@ -103,7 +104,7 @@
        throws IOException, InitializationException, MakeLDIFException
   {
     TemplateFile template = new TemplateFile(resourcePath, new Random(1));
-    ArrayList<String> warnings = new ArrayList<String>();
+    ArrayList<Message> warnings = new ArrayList<Message>();
     template.parse(templateLines, warnings);
     makeLdif(ldifPath, template);
   }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPAuthenticationHandlerTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPAuthenticationHandlerTestCase.java
index b3ba27e..d2d5691 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPAuthenticationHandlerTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPAuthenticationHandlerTestCase.java
@@ -40,6 +40,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.api.SASLMechanismHandler;
 import org.opends.server.controls.PasswordPolicyRequestControl;
 import org.opends.server.core.AddOperation;
@@ -135,7 +136,7 @@
   @Test(dataProvider = "saslMechanisms")
   public void testGetSASLProperties(String saslMechanismName)
   {
-    LinkedHashMap<String,String> properties =
+    LinkedHashMap<String, Message> properties =
          LDAPAuthenticationHandler.getSASLProperties(saslMechanismName);
 
     assertNotNull(properties);
@@ -150,7 +151,7 @@
   @Test()
   public void testGetSASLPropertiesInvlaid()
   {
-    LinkedHashMap<String,String> properties =
+    LinkedHashMap<String,Message> properties =
          LDAPAuthenticationHandler.getSASLProperties("unsupportedMechanism");
 
     assertNull(properties);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/makeldif/MakeLDIFTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/makeldif/MakeLDIFTestCase.java
index b9928ff..8b937f9 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/makeldif/MakeLDIFTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/tools/makeldif/MakeLDIFTestCase.java
@@ -32,6 +32,7 @@
 import java.util.List;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.tools.ToolsTestCase;
 import org.opends.server.types.InitializationException;
@@ -82,7 +83,7 @@
     // Previous behaviour showed "missingVar" on line 5.
     
     TemplateFile templateFile = new TemplateFile(resourcePath);
-    List<String> warns = new ArrayList<String>();
+    List<Message> warns = new ArrayList<Message>();
 
     try
     {
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java
index 9b66635..c5e9d76 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java
@@ -35,6 +35,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 
 import static org.testng.Assert.*;
 
@@ -76,12 +77,10 @@
   @Test(dataProvider = "resultCodes")
   public void testConstructor1(ResultCode resultCode)
   {
-    String msg = "Test Constructor 1";
+    Message msg = Message.raw("Test Constructor 1");
 
-    validateException(new DirectoryException(resultCode, msg, 1));
-    validateException(new DirectoryException(resultCode, null, 1));
-    validateException(new DirectoryException(resultCode, msg, -1));
-    validateException(new DirectoryException(resultCode, null, -1));
+    validateException(new DirectoryException(resultCode, msg));
+    validateException(new DirectoryException(resultCode, (Message)null));
   }
 
 
@@ -95,18 +94,11 @@
   @Test(dataProvider = "resultCodes")
   public void testConstructor2(ResultCode resultCode)
   {
-    String    msg = "Test Constructor 2";
+    Message   msg = Message.raw("Test Constructor 2");
     Exception e   = new Exception("Test Constructor 2 Exception");
 
-    validateException(new DirectoryException(resultCode, msg, 1, e));
-    validateException(new DirectoryException(resultCode, null, 1, e));
-    validateException(new DirectoryException(resultCode, msg, -1, e));
-    validateException(new DirectoryException(resultCode, null, -1, e));
-
-    validateException(new DirectoryException(resultCode, msg, 1, null));
-    validateException(new DirectoryException(resultCode, null, 1, null));
-    validateException(new DirectoryException(resultCode, msg, -1, null));
-    validateException(new DirectoryException(resultCode, null, -1, null));
+    validateException(new DirectoryException(resultCode, msg, e));
+    validateException(new DirectoryException(resultCode, null, e));
   }
 
 
@@ -123,29 +115,21 @@
   public void testConstructor3(ResultCode resultCode)
          throws Exception
   {
-    String    msg = "Test Constructor 3";
+    Message   msg = Message.raw("Test Constructor 3");
     DN        dn  = DN.decode("cn=Test Constructor 3,dc=example,dc=com");
     Exception e   = new Exception("Test Constructor 3 Exception");
 
-    validateException(new DirectoryException(resultCode, msg, 1, dn, e));
-    validateException(new DirectoryException(resultCode, null, 1, dn, e));
-    validateException(new DirectoryException(resultCode, msg, -1, dn, e));
-    validateException(new DirectoryException(resultCode, null, -1, dn, e));
+    validateException(new DirectoryException(resultCode, msg, dn, e));
+    validateException(new DirectoryException(resultCode, null, dn, e));
 
-    validateException(new DirectoryException(resultCode, msg, 1, dn, null));
-    validateException(new DirectoryException(resultCode, null, 1, dn, null));
-    validateException(new DirectoryException(resultCode, msg, -1, dn, null));
-    validateException(new DirectoryException(resultCode, null, -1, dn, null));
+    validateException(new DirectoryException(resultCode, msg, dn, null));
+    validateException(new DirectoryException(resultCode, null, dn, null));
 
-    validateException(new DirectoryException(resultCode, msg, 1, null, e));
-    validateException(new DirectoryException(resultCode, null, 1, null, e));
-    validateException(new DirectoryException(resultCode, msg, -1, null, e));
-    validateException(new DirectoryException(resultCode, null, -1, null, e));
+    validateException(new DirectoryException(resultCode, msg, null, e));
+    validateException(new DirectoryException(resultCode, null, null, e));
 
-    validateException(new DirectoryException(resultCode, msg, 1, null, null));
-    validateException(new DirectoryException(resultCode, null, 1, null, null));
-    validateException(new DirectoryException(resultCode, msg, -1, null, null));
-    validateException(new DirectoryException(resultCode, null, -1, null, null));
+    validateException(new DirectoryException(resultCode, msg, null, null));
+    validateException(new DirectoryException(resultCode, null, null, null));
   }
 
 
@@ -162,110 +146,65 @@
   public void testConstructor4(ResultCode resultCode)
          throws Exception
   {
-    String    msg     = "Test Constructor 4";
+    Message   msg     = Message.raw("Test Constructor 4");
     DN        dn      = DN.decode("cn=Test Constructor 4,dc=example,dc=com");
     Exception e       = new Exception("Test Constructor 4 Exception");
     List<String> refs = new ArrayList<String>();
     refs.add("ldap://ldap.example.com/cn=Test Constructor 4,dc=example,dc=com");
 
-    validateException(new DirectoryException(resultCode, msg, 1, dn, refs, e));
-    validateException(new DirectoryException(resultCode, null, 1, dn, refs, e));
-    validateException(new DirectoryException(resultCode, msg, -1, dn, refs, e));
-    validateException(new DirectoryException(resultCode, null, -1, dn, refs,
-                                             e));
+    validateException(new DirectoryException(resultCode, msg, dn, refs, e));
+    validateException(new DirectoryException(resultCode, null, dn, refs, e));
 
-    validateException(new DirectoryException(resultCode, msg, 1, dn, refs,
+    validateException(new DirectoryException(resultCode, msg, dn, refs,
                                              null));
-    validateException(new DirectoryException(resultCode, null, 1, dn, refs,
-                                             null));
-    validateException(new DirectoryException(resultCode, msg, -1, dn, refs,
-                                             null));
-    validateException(new DirectoryException(resultCode, null, -1, dn, refs,
+    validateException(new DirectoryException(resultCode, null, dn, refs,
                                              null));
 
-    validateException(new DirectoryException(resultCode, msg, 1, null, refs,
+    validateException(new DirectoryException(resultCode, msg, null, refs,
                                              e));
-    validateException(new DirectoryException(resultCode, null, 1, null, refs,
-                                             e));
-    validateException(new DirectoryException(resultCode, msg, -1, null, refs,
-                                             e));
-    validateException(new DirectoryException(resultCode, null, -1, null, refs,
+    validateException(new DirectoryException(resultCode, null, null, refs,
                                              e));
 
-    validateException(new DirectoryException(resultCode, msg, 1, null, refs,
+    validateException(new DirectoryException(resultCode, msg, null, refs,
                                              null));
-    validateException(new DirectoryException(resultCode, null, 1, null, refs,
-                                             null));
-    validateException(new DirectoryException(resultCode, msg, -1, null, refs,
-                                             null));
-    validateException(new DirectoryException(resultCode, null, -1, null, refs,
+    validateException(new DirectoryException(resultCode, null, null, refs,
                                              null));
 
     refs.clear();
-    validateException(new DirectoryException(resultCode, msg, 1, dn, refs, e));
-    validateException(new DirectoryException(resultCode, null, 1, dn, refs, e));
-    validateException(new DirectoryException(resultCode, msg, -1, dn, refs, e));
-    validateException(new DirectoryException(resultCode, null, -1, dn, refs,
-                                             e));
+    validateException(new DirectoryException(resultCode, msg, dn, refs, e));
+    validateException(new DirectoryException(resultCode, null, dn, refs, e));
 
-    validateException(new DirectoryException(resultCode, msg, 1, dn, refs,
+    validateException(new DirectoryException(resultCode, msg, dn, refs,
                                              null));
-    validateException(new DirectoryException(resultCode, null, 1, dn, refs,
-                                             null));
-    validateException(new DirectoryException(resultCode, msg, -1, dn, refs,
-                                             null));
-    validateException(new DirectoryException(resultCode, null, -1, dn, refs,
+    validateException(new DirectoryException(resultCode, null, dn, refs,
                                              null));
 
-    validateException(new DirectoryException(resultCode, msg, 1, null, refs,
+    validateException(new DirectoryException(resultCode, msg, null, refs,
                                              e));
-    validateException(new DirectoryException(resultCode, null, 1, null, refs,
-                                             e));
-    validateException(new DirectoryException(resultCode, msg, -1, null, refs,
-                                             e));
-    validateException(new DirectoryException(resultCode, null, -1, null, refs,
+    validateException(new DirectoryException(resultCode, null, null, refs,
                                              e));
 
-    validateException(new DirectoryException(resultCode, msg, 1, null, refs,
+    validateException(new DirectoryException(resultCode, msg, null, refs,
                                              null));
-    validateException(new DirectoryException(resultCode, null, 1, null, refs,
-                                             null));
-    validateException(new DirectoryException(resultCode, msg, -1, null, refs,
-                                             null));
-    validateException(new DirectoryException(resultCode, null, -1, null, refs,
+    validateException(new DirectoryException(resultCode, null, null, refs,
                                              null));
 
-    validateException(new DirectoryException(resultCode, msg, 1, dn, null, e));
-    validateException(new DirectoryException(resultCode, null, 1, dn, null, e));
-    validateException(new DirectoryException(resultCode, msg, -1, dn, null, e));
-    validateException(new DirectoryException(resultCode, null, -1, dn, null,
-                                             e));
+    validateException(new DirectoryException(resultCode, msg, dn, null, e));
+    validateException(new DirectoryException(resultCode, null, dn, null, e));
 
-    validateException(new DirectoryException(resultCode, msg, 1, dn, null,
+    validateException(new DirectoryException(resultCode, msg, dn, null,
                                              null));
-    validateException(new DirectoryException(resultCode, null, 1, dn, null,
-                                             null));
-    validateException(new DirectoryException(resultCode, msg, -1, dn, null,
-                                             null));
-    validateException(new DirectoryException(resultCode, null, -1, dn, null,
+    validateException(new DirectoryException(resultCode, null, dn, null,
                                              null));
 
-    validateException(new DirectoryException(resultCode, msg, 1, null, null,
+    validateException(new DirectoryException(resultCode, msg, null, null,
                                              e));
-    validateException(new DirectoryException(resultCode, null, 1, null, null,
-                                             e));
-    validateException(new DirectoryException(resultCode, msg, -1, null, null,
-                                             e));
-    validateException(new DirectoryException(resultCode, null, -1, null, null,
+    validateException(new DirectoryException(resultCode, null, null, null,
                                              e));
 
-    validateException(new DirectoryException(resultCode, msg, 1, null, null,
+    validateException(new DirectoryException(resultCode, msg, null, null,
                                              null));
-    validateException(new DirectoryException(resultCode, null, 1, null, null,
-                                             null));
-    validateException(new DirectoryException(resultCode, msg, -1, null, null,
-                                             null));
-    validateException(new DirectoryException(resultCode, null, -1, null, null,
+    validateException(new DirectoryException(resultCode, null, null, null,
                                              null));
   }
 
@@ -282,8 +221,7 @@
   {
     assertNotNull(de.getResultCode());
 
-    de.getErrorMessage();
-    de.getMessageID();
+    de.getMessageObject();
     de.getMatchedDN();
     de.getReferralURLs();
   }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/EntrySchemaCheckingTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/EntrySchemaCheckingTestCase.java
index aeefe0a..dbb81a2 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/EntrySchemaCheckingTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/EntrySchemaCheckingTestCase.java
@@ -34,6 +34,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.tools.LDAPModify;
 import org.opends.server.types.Attribute;
@@ -64,7 +65,7 @@
   {
     try
     {
-      StringBuilder invalidReason = new StringBuilder();
+      MessageBuilder invalidReason = new MessageBuilder();
       DirectoryServer.setSingleStructuralObjectClassPolicy(REJECT);
       assertFalse(e.conformsToSchema(null, false, true, true, invalidReason),
                   "Entry validation succeeded with REJECT policy");
@@ -103,7 +104,7 @@
          "objectClass: domain",
          "dc: example");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, true, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -129,7 +130,7 @@
          "dc: example",
          "o: Example Org");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, true, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -205,7 +206,7 @@
          "cn: test");
 
     assertFalse(e.conformsToSchema(null, false, true, true,
-                                   new StringBuilder()));
+                                   new MessageBuilder()));
   }
 
 
@@ -230,7 +231,7 @@
          "cn: test");
 
     assertFalse(e.conformsToSchema(null, false, true, true,
-                                   new StringBuilder()));
+                                   new MessageBuilder()));
   }
 
 
@@ -274,7 +275,7 @@
          "cn: test");
 
     assertFalse(e.conformsToSchema(null, false, true, true,
-                                   new StringBuilder()));
+                                   new MessageBuilder()));
   }
 
 
@@ -319,7 +320,7 @@
          "cn: test");
 
     assertFalse(e.conformsToSchema(null, false, true, true,
-                                   new StringBuilder()));
+                                   new MessageBuilder()));
   }
 
 
@@ -363,7 +364,7 @@
          "description: foo");
 
     assertFalse(e.conformsToSchema(null, false, true, true,
-                                   new StringBuilder()));
+                                   new MessageBuilder()));
   }
 
 
@@ -385,7 +386,7 @@
          "o: test",
          "o: foo");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, true, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -413,7 +414,7 @@
     e.addAttribute(new Attribute("dc", "foo"),
                    new LinkedList<AttributeValue>());
 
-    assertFalse(e.conformsToSchema(null, false, true, true, new StringBuilder()));
+    assertFalse(e.conformsToSchema(null, false, true, true, new MessageBuilder()));
   }
 
 
@@ -447,7 +448,7 @@
     e.addAttribute(new Attribute(creatorsNameType, "creatorsName", values),
                    new LinkedList<AttributeValue>());
 
-    assertFalse(e.conformsToSchema(null, false, true, true, new StringBuilder()));
+    assertFalse(e.conformsToSchema(null, false, true, true, new MessageBuilder()));
   }
 
 
@@ -499,7 +500,7 @@
          "objectClass: testAuxiliaryClassAllowedByDCROCAux",
          "cn: test");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -603,7 +604,7 @@
          "cn: test",
          "description: foo");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -702,7 +703,7 @@
          "objectClass: testDontRequireATRequiredByObsoleteDCROC",
          "cn: test");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -753,7 +754,7 @@
          "cn: test",
          "description: foo");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -804,7 +805,7 @@
          "objectClass: testDontRequireATAllowedByDCROC",
          "cn: test");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -904,7 +905,7 @@
          "objectClass: testSatisfiesSingleValuedNameFormOC",
          "cn: test");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -1056,7 +1057,7 @@
          "cn: test",
          "description: foo");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -1110,7 +1111,7 @@
          "cn: test",
          "description: foo");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -1215,7 +1216,7 @@
          "cn: test",
          "description: foo");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -1268,7 +1269,7 @@
          "cn: test",
          "description: foo");
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -1408,7 +1409,7 @@
 
     assertEquals(LDAPModify.mainModify(args, false, null, System.err), 0);
 
-    StringBuilder invalidReason = new StringBuilder();
+    MessageBuilder invalidReason = new MessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
 
@@ -1426,7 +1427,7 @@
          "objectClass: top",
          "objectClass: device",
          "cn: invalid entry below parent covered by DSR");
-    invalidReason = new StringBuilder();
+    invalidReason = new MessageBuilder();
     failOnlyForStrictEvaluation(e);
   }
 }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/InitializationExceptionTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/InitializationExceptionTestCase.java
index d067a09..6e35999 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/InitializationExceptionTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/InitializationExceptionTestCase.java
@@ -31,6 +31,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 
 import static org.testng.Assert.*;
 
@@ -48,19 +49,10 @@
   @Test()
   public void testConstructor1()
   {
-    String message = "Test Constructor 1";
+    Message message = Message.raw("Test Constructor 1");
 
-    validateException(new InitializationException(1, message), 1, message);
-    validateException(new InitializationException(1, ""), 1, "");
-    validateException(new InitializationException(1, null), 1, null);
-
-    validateException(new InitializationException(0, message), 0, message);
-    validateException(new InitializationException(0, ""), 0, "");
-    validateException(new InitializationException(0, null), 0, null);
-
-    validateException(new InitializationException(-1, message), -1, message);
-    validateException(new InitializationException(-1, ""), -1, "");
-    validateException(new InitializationException(-1, null), -1, null);
+    validateException(new InitializationException(message), message);
+    validateException(new InitializationException(null), null);
   }
 
 
@@ -72,35 +64,15 @@
   @Test()
   public void testConstructor2()
   {
-    String    message = "Test Constructor 2";
+    Message   message = Message.raw("Test Constructor 2");
     Exception e       = new Exception("Test Constructor 2 Exception");
 
-    validateException(new InitializationException(1, message, e), 1, message);
-    validateException(new InitializationException(1, "", e), 1, "");
-    validateException(new InitializationException(1, null, e), 1, null);
+    validateException(new InitializationException(message, e), message);
+    validateException(new InitializationException(null, e), null);
 
-    validateException(new InitializationException(0, message, e), 0, message);
-    validateException(new InitializationException(0, "", e), 0, "");
-    validateException(new InitializationException(0, null, e), 0, null);
-
-    validateException(new InitializationException(-1, message, e), -1, message);
-    validateException(new InitializationException(-1, "", e), -1, "");
-    validateException(new InitializationException(-1, null, e), -1, null);
-
-    validateException(new InitializationException(1, message, null), 1,
+    validateException(new InitializationException(message, null),
                       message);
-    validateException(new InitializationException(1, "", null), 1, "");
-    validateException(new InitializationException(1, null, null), 1, null);
-
-    validateException(new InitializationException(0, message, null), 0,
-                      message);
-    validateException(new InitializationException(0, "", null), 0, "");
-    validateException(new InitializationException(0, null, null), 0, null);
-
-    validateException(new InitializationException(-1, message, null), -1,
-                      message);
-    validateException(new InitializationException(-1, "", null), -1, "");
-    validateException(new InitializationException(-1, null, null), -1, null);
+    validateException(new InitializationException(null, null), null);
   }
 
 
@@ -109,21 +81,18 @@
    * Verifies the contents of the provided initialization exception.
    *
    * @param  ie         The initialization exception to verify.
-   * @param  messageID  The expected message ID for the exception.
    * @param  message    The expected message for the exception.
    */
-  private void validateException(InitializationException ie, int messageID,
-                                 String message)
+  private void validateException(InitializationException ie,
+                                 Message message)
   {
-    assertEquals(ie.getMessageID(), messageID);
-
     if (message == null)
     {
-      assertNull(ie.getMessage());
+      assertNull(ie.getMessageObject());
     }
     else
     {
-      assertEquals(ie.getMessage(), message);
+      assertEquals(ie.getMessageObject(), message);
     }
   }
 }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java
index 473db0e..ccb0e3e 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java
@@ -35,6 +35,7 @@
 import java.util.List;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.MessageBuilder;
 import org.opends.server.api.SubtreeSpecificationSet;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.RFC3672SubtreeSpecification;
@@ -331,7 +332,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new StringBuilder()));
+                                  new MessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
@@ -413,7 +414,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new StringBuilder()));
+                                  new MessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
@@ -459,7 +460,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new StringBuilder()));
+                                  new MessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
@@ -505,7 +506,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new StringBuilder()));
+                                  new MessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
@@ -748,7 +749,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new StringBuilder()));
+                                  new MessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
@@ -897,7 +898,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new StringBuilder()));
+                                  new MessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java
index 57714f0..b53f3cf 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java
@@ -36,6 +36,7 @@
 import java.util.List;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.protocols.ldap.LDAPModification;
 import org.opends.server.types.Attribute;
@@ -655,10 +656,10 @@
       reader.readChangeRecord(false);
 
       reader.readChangeRecord(false);
-      reader.rejectLastEntry("Rejected");
+      reader.rejectLastEntry(Message.raw("Rejected"));
 
       reader.readChangeRecord(false);
-      reader.rejectLastEntry("Rejected");
+      reader.rejectLastEntry(Message.raw("Rejected"));
 
       reader.readChangeRecord(false);
       reader.readChangeRecord(false);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java
index 125c2e3..11b64d0 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java
@@ -37,6 +37,7 @@
 import java.util.List;
 
 import org.opends.server.TestCaseUtils;
+import org.opends.messages.Message;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.protocols.ldap.LDAPModification;
 import org.opends.server.types.Attribute;
@@ -274,7 +275,7 @@
     Writer writer = new Writer();
 
     LDIFWriter ldifWriter = writer.getLDIFWriter();
-    ldifWriter.writeComment(comment, wrapColumn);
+    ldifWriter.writeComment(Message.raw(comment), wrapColumn);
 
     checkLDIFOutput(writer, expectedLDIF);
   }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/ValidatorTests.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/ValidatorTests.java
index 31cece7..53f4eab 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/ValidatorTests.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/ValidatorTests.java
@@ -29,6 +29,7 @@
 import org.testng.annotations.Test;
 import org.testng.annotations.DataProvider;
 import static org.testng.Assert.*;
+import org.opends.messages.Message;
 
 /**
  * Tests for the Validator class.
@@ -74,7 +75,7 @@
 
   @Test
   public void testEnsureTrueWithMessage() {
-    boolean returnValue = Validator.ensureTrue(true, "some message");
+    boolean returnValue = Validator.ensureTrue(true, Message.raw("some message"));
     assertTrue(returnValue);  // must always return true
   }
 
@@ -143,20 +144,20 @@
 
   @Test(expectedExceptions = {RuntimeException.class, AssertionError.class})
   public void testEnsureTrueWithMessageWithFalse() {
-    Validator.ensureTrue(false, "some message");
+    Validator.ensureTrue(false, Message.raw("some message"));
   }
 
 
   @Test
   public void testMessageContents() {
     Validator.resetErrorCount();
-    String myMessage = "some test message";
+    Message myMessage = Message.raw("some test message");
     String thisMethod = ValidatorTests.class.getName() + "." + "testMessageContents(ValidatorTests.java:";
     try {
       Validator.ensureTrue(false, myMessage);
     } catch (Throwable e) {
       String caughtMessage = e.getMessage();
-      assertTrue(caughtMessage.indexOf(myMessage) >= 0);
+      assertTrue(caughtMessage.indexOf(myMessage.toString()) >= 0);
       assertTrue(caughtMessage.indexOf(thisMethod) >= 0);
 
       assertEquals(Validator.getErrorCount(), 1);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommand.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommand.java
index 95dc903..c01d83f 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommand.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommand.java
@@ -32,7 +32,7 @@
 
 import org.testng.Assert;
 import org.testng.annotations.Test;
-
+import org.opends.messages.Message;
 
 
 /**
@@ -49,8 +49,8 @@
   @Test
   public void testAllowsTrailingArgumentsFalse1() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
-    SubCommand sc = new SubCommand(parser, "sub-command1", 1000);
+        .getClass().getName(), Message.raw("test description"), true);
+    SubCommand sc = new SubCommand(parser, "sub-command1", Message.raw("XXX"));
     Assert.assertFalse(sc.allowsTrailingArguments());
   }
 
@@ -65,9 +65,9 @@
   @Test
   public void testAllowsTrailingArgumentsFalse2() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
+        .getClass().getName(), Message.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", false, 0, 0, null,
-        2000);
+        Message.raw("XXX"));
     Assert.assertFalse(sc.allowsTrailingArguments());
   }
 
@@ -82,9 +82,9 @@
   @Test
   public void testAllowsTrailingArgumentsTrue() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
+        .getClass().getName(), Message.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", 2000);
+        "args1 arg2 [arg3 arg4]", Message.raw("XXX"));
     Assert.assertTrue(sc.allowsTrailingArguments());
   }
 
@@ -99,8 +99,8 @@
   @Test
   public void testGetMaxTrailingArguments1() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
-    SubCommand sc = new SubCommand(parser, "sub-command1", 1000);
+        .getClass().getName(), Message.raw("test description"), true);
+    SubCommand sc = new SubCommand(parser, "sub-command1", Message.raw("XXX"));
     Assert.assertEquals(sc.getMaxTrailingArguments(), 0);
   }
 
@@ -115,9 +115,9 @@
   @Test
   public void testGetMaxTrailingArguments2() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
+        .getClass().getName(), Message.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", false, 0, 0, null,
-        2000);
+        Message.raw("XXX"));
     Assert.assertEquals(sc.getMaxTrailingArguments(), 0);
   }
 
@@ -132,9 +132,9 @@
   @Test
   public void testGetMaxTrailingArguments3() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
+        .getClass().getName(), Message.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", 2000);
+        "args1 arg2 [arg3 arg4]", Message.raw("XXX"));
     Assert.assertEquals(sc.getMaxTrailingArguments(), 4);
   }
 
@@ -149,8 +149,8 @@
   @Test
   public void testGetMinTrailingArguments1() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
-    SubCommand sc = new SubCommand(parser, "sub-command1", 1000);
+        .getClass().getName(), Message.raw("test description"), true);
+    SubCommand sc = new SubCommand(parser, "sub-command1", Message.raw("XXX"));
     Assert.assertEquals(sc.getMinTrailingArguments(), 0);
   }
 
@@ -165,9 +165,9 @@
   @Test
   public void testGetMinTrailingArguments2() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
+        .getClass().getName(), Message.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", false, 0, 0, null,
-        2000);
+        Message.raw("XXX"));
     Assert.assertEquals(sc.getMinTrailingArguments(), 0);
   }
 
@@ -182,9 +182,9 @@
   @Test
   public void testGetMinTrailingArguments3() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
+        .getClass().getName(), Message.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", 2000);
+        "args1 arg2 [arg3 arg4]", Message.raw("XXX"));
     Assert.assertEquals(sc.getMinTrailingArguments(), 2);
   }
 
@@ -199,8 +199,8 @@
   @Test
   public void testGetTrailingArgumentsDisplayName1() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
-    SubCommand sc = new SubCommand(parser, "sub-command1", 1000);
+        .getClass().getName(), Message.raw("test description"), true);
+    SubCommand sc = new SubCommand(parser, "sub-command1", Message.raw("XXX"));
     Assert.assertNull(sc.getTrailingArgumentsDisplayName());
   }
 
@@ -215,9 +215,9 @@
   @Test
   public void testGetTrailingArgumentsDisplayName2() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
+        .getClass().getName(), Message.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", false, 0, 0, null,
-        2000);
+        Message.raw("XXX"));
     Assert.assertNull(sc.getTrailingArgumentsDisplayName());
   }
 
@@ -232,9 +232,9 @@
   @Test
   public void testGetTrailingArgumentsDisplayName3() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
+        .getClass().getName(), Message.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", 2000);
+        "args1 arg2 [arg3 arg4]", Message.raw("XXX"));
     Assert.assertEquals(sc.getTrailingArgumentsDisplayName(),
         "args1 arg2 [arg3 arg4]");
   }
@@ -250,8 +250,8 @@
   @Test
   public void testGetTrailingArguments1() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
-    SubCommand sc = new SubCommand(parser, "sub-command1", 1000);
+        .getClass().getName(), Message.raw("test description"), true);
+    SubCommand sc = new SubCommand(parser, "sub-command1", Message.raw("XXX"));
     parser.parseArguments(new String[] { "sub-command1" });
     Assert.assertTrue(sc.getTrailingArguments().isEmpty());
   }
@@ -267,9 +267,9 @@
   @Test
   public void testGetTrailingArguments2() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
+        .getClass().getName(), Message.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", false, 0, 0, null,
-        2000);
+        Message.raw("XXX"));
     parser.parseArguments(new String[] { "sub-command2" });
     Assert.assertTrue(sc.getTrailingArguments().isEmpty());
   }
@@ -285,9 +285,9 @@
   @Test
   public void testGetTrailingArguments3() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), "test description", true);
+        .getClass().getName(), Message.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", 2000);
+        "args1 arg2 [arg3 arg4]", Message.raw("XXX"));
     parser
         .parseArguments(new String[] { "sub-command2", "arg1", "arg2", "arg3" });
     Assert.assertEquals(sc.getTrailingArguments(), Arrays.asList(new String[] {
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommandArgumentParser.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommandArgumentParser.java
index 664ce60..c8fbaf8 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommandArgumentParser.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommandArgumentParser.java
@@ -35,7 +35,8 @@
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
-
+import static org.opends.messages.ToolMessages.*;
+import org.opends.messages.Message;
 
 
 /**
@@ -63,11 +64,11 @@
   @BeforeClass
   public void setup() throws Exception {
     parser = new SubCommandArgumentParser(this.getClass().getName(),
-        "test description", true);
+        Message.raw("test description"), true);
 
-    sc1 = new SubCommand(parser, "sub-command1", 1000);
+    sc1 = new SubCommand(parser, "sub-command1", INFO_BACKUPDB_DESCRIPTION_BACKEND_ID.get());
     sc2 = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", 2000);
+        "args1 arg2 [arg3 arg4]", INFO_BACKUPDB_DESCRIPTION_BACKUP_ALL.get());
   }
 
 

--
Gitblit v1.10.0